Repair workspace authoring: typed RPC inputs, automatic preservation, and template releases
Use checked input contracts and protobuf JSON for CLI roundtrips; generate Web Studio platform inputs; reject invalid constructors before allocation and filter Createable eligibility. Preserve compatible storage without no-op migrations, report activation readiness, and validate migration coverage before maintenance. Follow authored package declarations during scaffold refresh and queue source capture. Add a real local TODO check/activate/create/place/edit acceptance, publish updated protocol and SDK dependencies, and make verified template default selection explicit.
This commit is contained in:
@@ -16,7 +16,7 @@ export async function checkAuthoring(start: string, output: string, options: { b
|
||||
const resource = context.resources.find(entry => entry.directory === directory);
|
||||
if (!resource) throw new Error("Run check from a registered repository root or the workbench");
|
||||
await fs.mkdir(output, { mode: 0o700 });
|
||||
const report: { directory: string; checker: string; candidateOnly: true; activationEvidence: false; commit?: string; artifactPath?: string; blockers: string[]; phase: string; output: string } = {
|
||||
const report: { directory: string; checker: string; candidateOnly: true; activationEvidence: false; commit?: string; artifactPath?: string; blockers: string[]; phase: string; output: string; compilation?: "passed"; activationReadiness?: "preserve" | "migration-required" | "blocked"; migrationRequired?: string[] } = {
|
||||
directory, checker: checkerIdentity(), candidateOnly: true, activationEvidence: false, blockers: [], phase: "convergence", output,
|
||||
};
|
||||
try {
|
||||
@@ -38,6 +38,7 @@ export async function checkAuthoring(start: string, output: string, options: { b
|
||||
report.artifactPath = await buildImmutableCandidate(converged.candidate, resource.kind, path.join(output, "nix.log"), options.contractOnly);
|
||||
const candidateText = await fs.readFile(path.join(report.artifactPath, "candidate.json"), "utf8");
|
||||
await fs.writeFile(path.join(output, "candidate.json"), candidateText);
|
||||
report.compilation = "passed";
|
||||
if (resource.kind === "workspace" && !options.contractOnly) {
|
||||
report.phase = "evolution";
|
||||
let baseline = options.baseline;
|
||||
@@ -52,6 +53,9 @@ export async function checkAuthoring(start: string, output: string, options: { b
|
||||
const evolution = planEvolution(before, JSON.parse(candidateText), { reviews });
|
||||
await fs.writeFile(path.join(output, "evolution.json"), JSON.stringify(evolution, null, 2));
|
||||
report.blockers.push(...evolution.blockers);
|
||||
report.migrationRequired = evolution.migrationRequired;
|
||||
report.activationReadiness = evolution.blockers.length ? "blocked" : evolution.migrationRequired.length ? "migration-required" : "preserve";
|
||||
if (evolution.migrationRequired.length) report.blockers.push(`Explicit migration required for: ${evolution.migrationRequired.join(", ")}. Compilation passed; supply a migration path before cutover.`);
|
||||
}
|
||||
if (!report.blockers.length) report.phase = options.contractOnly ? "contract-only" : "checked";
|
||||
} catch (error) { report.blockers.push(String(error instanceof Error ? error.message : error)); }
|
||||
|
||||
Reference in New Issue
Block a user