@msn-control/liftoff 0.11.1 → 0.11.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (132) hide show
  1. package/DEVELOPER.md +28 -10
  2. package/README.md +11 -6
  3. package/dist/adapters/filesystem/project-transaction.d.ts +2 -1
  4. package/dist/adapters/filesystem/project-transaction.js +25 -6
  5. package/dist/adapters/filesystem/project-transaction.js.map +1 -1
  6. package/dist/adapters/filesystem/reviewed-update-transaction.d.ts +53 -0
  7. package/dist/adapters/filesystem/reviewed-update-transaction.js +864 -0
  8. package/dist/adapters/filesystem/reviewed-update-transaction.js.map +1 -0
  9. package/dist/adapters/filesystem/update-previews.d.ts +50 -0
  10. package/dist/adapters/filesystem/update-previews.js +613 -0
  11. package/dist/adapters/filesystem/update-previews.js.map +1 -0
  12. package/dist/adapters/process/shell-command.d.ts +1 -0
  13. package/dist/adapters/process/shell-command.js +7 -1
  14. package/dist/adapters/process/shell-command.js.map +1 -1
  15. package/dist/application/context.d.ts +5 -0
  16. package/dist/application/diagnose/doctor.js +9 -15
  17. package/dist/application/diagnose/doctor.js.map +1 -1
  18. package/dist/application/update/approval.d.ts +39 -0
  19. package/dist/application/update/approval.js +54 -0
  20. package/dist/application/update/approval.js.map +1 -0
  21. package/dist/application/update/command-guidance.d.ts +2 -0
  22. package/dist/application/update/command-guidance.js +14 -0
  23. package/dist/application/update/command-guidance.js.map +1 -0
  24. package/dist/application/update/inspection.d.ts +37 -0
  25. package/dist/application/update/inspection.js +235 -0
  26. package/dist/application/update/inspection.js.map +1 -0
  27. package/dist/application/update/migration-runtime.d.ts +14 -0
  28. package/dist/application/update/migration-runtime.js +178 -0
  29. package/dist/application/update/migration-runtime.js.map +1 -0
  30. package/dist/application/update/output.d.ts +134 -0
  31. package/dist/application/update/output.js +182 -0
  32. package/dist/application/update/output.js.map +1 -0
  33. package/dist/application/update/preview.d.ts +49 -0
  34. package/dist/application/update/preview.js +220 -0
  35. package/dist/application/update/preview.js.map +1 -0
  36. package/dist/application/update/protected-source.d.ts +25 -0
  37. package/dist/application/update/protected-source.js +81 -0
  38. package/dist/application/update/protected-source.js.map +1 -0
  39. package/dist/application/update/reporting.d.ts +4 -4
  40. package/dist/application/update/reporting.js +14 -13
  41. package/dist/application/update/reporting.js.map +1 -1
  42. package/dist/application/update/revalidation-plan.d.ts +22 -0
  43. package/dist/application/update/revalidation-plan.js +108 -0
  44. package/dist/application/update/revalidation-plan.js.map +1 -0
  45. package/dist/application/update/revalidation.d.ts +70 -0
  46. package/dist/application/update/revalidation.js +337 -0
  47. package/dist/application/update/revalidation.js.map +1 -0
  48. package/dist/application/update/review-plan.d.ts +25 -0
  49. package/dist/application/update/review-plan.js +89 -0
  50. package/dist/application/update/review-plan.js.map +1 -0
  51. package/dist/application/update/transaction-approval.d.ts +29 -0
  52. package/dist/application/update/transaction-approval.js +82 -0
  53. package/dist/application/update/transaction-approval.js.map +1 -0
  54. package/dist/application/update/use-case.d.ts +1 -0
  55. package/dist/application/update/use-case.js +240 -569
  56. package/dist/application/update/use-case.js.map +1 -1
  57. package/dist/application/update/write-plan.d.ts +15 -0
  58. package/dist/application/update/write-plan.js +115 -0
  59. package/dist/application/update/write-plan.js.map +1 -0
  60. package/dist/cli/args/definitions.js +5 -4
  61. package/dist/cli/args/definitions.js.map +1 -1
  62. package/dist/cli/args/help.js +13 -1
  63. package/dist/cli/args/help.js.map +1 -1
  64. package/dist/cli/args/parser.js +22 -7
  65. package/dist/cli/args/parser.js.map +1 -1
  66. package/dist/cli/commands/update.js +1 -0
  67. package/dist/cli/commands/update.js.map +1 -1
  68. package/dist/domain/governance/policy/identity.d.ts +1 -1
  69. package/dist/domain/governance/policy/identity.js +2 -2
  70. package/dist/domain/governance/policy/identity.js.map +1 -1
  71. package/dist/domain/project/infrastructure-layout.d.ts +1 -1
  72. package/dist/domain/project/infrastructure-layout.js +2 -1
  73. package/dist/domain/project/infrastructure-layout.js.map +1 -1
  74. package/dist/domain/project/reviewed-update-artifacts.d.ts +2 -0
  75. package/dist/domain/project/reviewed-update-artifacts.js +3 -0
  76. package/dist/domain/project/reviewed-update-artifacts.js.map +1 -0
  77. package/dist/generators/common/base.js +5 -1
  78. package/dist/generators/common/base.js.map +1 -1
  79. package/dist/governance-activation/activation-state.js +4 -1
  80. package/dist/governance-activation/activation-state.js.map +1 -1
  81. package/dist/governance-activation/commands.d.ts +5 -0
  82. package/dist/governance-activation/commands.js +65 -3
  83. package/dist/governance-activation/commands.js.map +1 -1
  84. package/dist/governance-activation/compatibility.d.ts +21 -4
  85. package/dist/governance-activation/compatibility.js +47 -8
  86. package/dist/governance-activation/compatibility.js.map +1 -1
  87. package/dist/governance-activation/doctor.js +32 -5
  88. package/dist/governance-activation/doctor.js.map +1 -1
  89. package/dist/governance-activation/historical-state.d.ts +81 -0
  90. package/dist/governance-activation/historical-state.js +817 -0
  91. package/dist/governance-activation/historical-state.js.map +1 -0
  92. package/dist/governance-activation/history-contracts.d.ts +109 -0
  93. package/dist/governance-activation/history-contracts.js +303 -0
  94. package/dist/governance-activation/history-contracts.js.map +1 -0
  95. package/dist/governance-activation/inputs.d.ts +2 -0
  96. package/dist/governance-activation/inputs.js +13 -1
  97. package/dist/governance-activation/inputs.js.map +1 -1
  98. package/dist/governance-activation/migration-history.d.ts +97 -0
  99. package/dist/governance-activation/migration-history.js +388 -0
  100. package/dist/governance-activation/migration-history.js.map +1 -0
  101. package/dist/governance-activation/migration.js +1 -1
  102. package/dist/governance-activation/migration.js.map +1 -1
  103. package/dist/governance-activation/proof-records.d.ts +3 -0
  104. package/dist/governance-activation/proof-records.js +78 -0
  105. package/dist/governance-activation/proof-records.js.map +1 -0
  106. package/dist/governance-activation/read-only.d.ts +4 -4
  107. package/dist/governance-activation/read-only.js +9 -69
  108. package/dist/governance-activation/read-only.js.map +1 -1
  109. package/dist/governance-activation/seed-lifecycle.d.ts +28 -6
  110. package/dist/governance-activation/seed-lifecycle.js +258 -25
  111. package/dist/governance-activation/seed-lifecycle.js.map +1 -1
  112. package/dist/governance-activation/transition-planning.d.ts +2 -0
  113. package/dist/governance-activation/transition-planning.js +12 -3
  114. package/dist/governance-activation/transition-planning.js.map +1 -1
  115. package/dist/governance-activation/transitions.d.ts +8 -2
  116. package/dist/governance-activation/transitions.js +36 -11
  117. package/dist/governance-activation/transitions.js.map +1 -1
  118. package/dist/governance-assessment/engine.js +30 -3
  119. package/dist/governance-assessment/engine.js.map +1 -1
  120. package/dist/governance-assessment/project.d.ts +7 -0
  121. package/dist/governance-assessment/project.js +44 -4
  122. package/dist/governance-assessment/project.js.map +1 -1
  123. package/dist/repository-governance.js +25 -12
  124. package/dist/repository-governance.js.map +1 -1
  125. package/docs/cli-reference.md +101 -28
  126. package/docs/configuration-and-manifests.md +27 -15
  127. package/docs/existing-repositories.md +19 -10
  128. package/docs/repository-governance.md +9 -5
  129. package/docs/safety-and-consent.md +27 -18
  130. package/docs/troubleshooting.md +9 -7
  131. package/docs/workloads.md +5 -4
  132. package/package.json +1 -1
@@ -0,0 +1,3 @@
1
+ import type { PhaseEvidenceRecord } from '../domain/governance/activation/types.js';
2
+ export declare function readReviewedTransitionPlans(projectRoot: string): Promise<import("../domain/governance/activation/types.js").SavedTransitionPlan[]>;
3
+ export declare function readActivationEvidence(projectRoot: string): Promise<PhaseEvidenceRecord[]>;
@@ -0,0 +1,78 @@
1
+ import { readdir } from 'node:fs/promises';
2
+ import { readProjectFile } from '../adapters/filesystem/project-files.js';
3
+ import { resolveProjectPath } from '../adapters/filesystem/project-paths.js';
4
+ import { isHistoricalActivationIdentity } from '../domain/governance/policy/identity.js';
5
+ import { validateEvidenceHeader, validateLiveReadbackProof, validateSavedTransitionPlan } from '../domain/governance/activation/validators.js';
6
+ async function readJsonDirectory(projectRoot, parts) {
7
+ let entries;
8
+ try {
9
+ entries = await readdir(await resolveProjectPath(projectRoot, parts), { withFileTypes: true });
10
+ }
11
+ catch (error) {
12
+ if (typeof error === 'object' && error !== null && 'code' in error && error.code === 'ENOENT')
13
+ return [];
14
+ throw error;
15
+ }
16
+ const results = [];
17
+ for (const entry of entries.sort((a, b) => a.name.localeCompare(b.name, 'en'))) {
18
+ if (!entry.name.endsWith('.json'))
19
+ continue;
20
+ if (!entry.isFile())
21
+ throw new Error(`Activation proof ${[...parts, entry.name].join('/')} must be a regular file.`);
22
+ const bytes = await readProjectFile(projectRoot, [...parts, entry.name]);
23
+ if (!bytes)
24
+ throw new Error('Activation proof changed during inspection.');
25
+ const source = [...parts, entry.name].join('/');
26
+ try {
27
+ results.push({ path: source, value: JSON.parse(bytes.toString('utf8')) });
28
+ }
29
+ catch (error) {
30
+ if (!(error instanceof SyntaxError))
31
+ throw error;
32
+ throw new Error(`Unable to parse ${source}: invalid JSON.`);
33
+ }
34
+ }
35
+ return results;
36
+ }
37
+ export async function readReviewedTransitionPlans(projectRoot) {
38
+ return (await readJsonDirectory(projectRoot, ['governance', 'plans'])).map(({ path, value }) => {
39
+ try {
40
+ return validateSavedTransitionPlan(value);
41
+ }
42
+ catch (error) {
43
+ throw new Error(`Invalid ${path}: ${error instanceof Error ? error.message : String(error)}`);
44
+ }
45
+ });
46
+ }
47
+ export async function readActivationEvidence(projectRoot) {
48
+ return (await readJsonDirectory(projectRoot, ['governance', 'evidence'])).map(({ path, value }) => {
49
+ try {
50
+ if (typeof value !== 'object' || value === null || !('header' in value) || !('evidenceId' in value) ||
51
+ typeof value.evidenceId !== 'string' || !value.evidenceId) {
52
+ throw new Error('Activation v2 requires a body-bound evidence record; historical headers are diagnostic-only.');
53
+ }
54
+ const record = value;
55
+ const header = record.header;
56
+ if (typeof header === 'object' && header !== null && 'schemaVersion' in header &&
57
+ header.schemaVersion === 1 && 'identity' in header && isHistoricalActivationIdentity(header.identity)) {
58
+ throw new Error('Historical activation v1 evidence is diagnostic-only; its original bytes are preserved and cannot authorize current execution or read scope.');
59
+ }
60
+ if (Object.keys(record).some((key) => !['evidenceId', 'header', 'payload', 'liveReadback'].includes(key))) {
61
+ throw new Error('Unknown activation evidence fields.');
62
+ }
63
+ const rawReadback = record.liveReadback;
64
+ if (rawReadback !== undefined && !Array.isArray(rawReadback)) {
65
+ throw new Error('Evidence liveReadback must be an array.');
66
+ }
67
+ const liveReadback = rawReadback?.map(validateLiveReadbackProof) ?? [];
68
+ return {
69
+ evidenceId: value.evidenceId, header: validateEvidenceHeader(value.header),
70
+ payload: record.payload, liveReadback
71
+ };
72
+ }
73
+ catch (error) {
74
+ throw new Error(`Invalid ${path}: ${error instanceof Error ? error.message : String(error)}`);
75
+ }
76
+ });
77
+ }
78
+ //# sourceMappingURL=proof-records.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proof-records.js","sourceRoot":"","sources":["../../src/governance-activation/proof-records.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,6 @@
1
1
  import type { LiftoffManifest } from '../domain/project/contracts.js';
2
2
  import type { CommandRunner } from '../process-runner.js';
3
- import { type PhaseEvidenceRecord } from '../domain/governance/activation/types.js';
4
- export declare function readReviewedTransitionPlans(projectRoot: string): Promise<import("../domain/governance/activation/types.js").SavedTransitionPlan[]>;
5
- export declare function readActivationEvidence(projectRoot: string): Promise<PhaseEvidenceRecord[]>;
3
+ export { readActivationEvidence, readReviewedTransitionPlans } from './proof-records.js';
6
4
  /** Read-only proof boundary: returned values carry no executor, credential, or mutation port. */
7
5
  export declare function inspectCurrentActivationEvidence(projectRoot: string, manifest: LiftoffManifest, options?: {
8
6
  runner?: CommandRunner;
@@ -14,15 +12,17 @@ export declare function inspectCurrentActivationEvidence(projectRoot: string, ma
14
12
  contexts?: undefined;
15
13
  records?: undefined;
16
14
  selections?: undefined;
15
+ migration?: undefined;
17
16
  } | {
18
17
  status: 'inspected';
19
18
  state: import("../domain/governance/activation/types.js").UserActivationState;
20
19
  snapshot: import("./inputs.js").ActivationInputSnapshot;
21
20
  contexts: Record<"activation-approved" | "application-foundation" | "bootstrap-local" | "bootstrap-state-disposed" | "committed" | "credential-ready" | "dev-proof" | "enforcement-approved" | "existing-private-path" | "green-red-proof" | "live-readback" | "phase-0-complete" | "private-backend-proof" | "production-rehearsed" | "provider-ready" | "pushed" | "remote-import-verified" | "remote-ready" | "rulesets-applied" | "runner-ready" | "seed-archived" | "seed-valid" | "seed-verified" | "staging-qualified" | "state-path-selected" | "workflow-source-ready", import("../domain/governance/activation/evidence.js").EvidenceFreshnessContext>;
22
- records: PhaseEvidenceRecord[];
21
+ records: import("../domain/governance/activation/types.js").PhaseEvidenceRecord[];
23
22
  selections: {
24
23
  [k: string]: import("../domain/governance/activation/evidence.js").EvidenceSelectionResult;
25
24
  };
25
+ migration: import("./history-contracts.js").MigrationJournal | null;
26
26
  }>;
27
27
  export { evidenceBodyDigest, evidenceHeaderDigest, selectLatestPhaseEvidence, validateEvidenceFreshness } from '../domain/governance/activation/evidence.js';
28
28
  export { activationEvidenceContexts, readActivationInputSnapshot } from './inputs.js';
@@ -1,82 +1,19 @@
1
- import { readdir } from 'node:fs/promises';
2
- import { readProjectFile } from '../adapters/filesystem/project-files.js';
3
- import { resolveProjectPath } from '../adapters/filesystem/project-paths.js';
4
1
  import { loadActivationState } from './activation-state.js';
5
2
  import { activationEvidenceContexts, readActivationInputSnapshot } from './inputs.js';
6
3
  import { canonicalPhaseGraph } from '../domain/governance/activation/graph.js';
7
4
  import { selectLatestPhaseEvidence } from '../domain/governance/activation/evidence.js';
8
- import { validateEvidenceHeader, validateLiveReadbackProof, validateSavedTransitionPlan, validateManifestActivationForExecution } from '../domain/governance/activation/validators.js';
5
+ import { validateManifestActivationForExecution } from '../domain/governance/activation/validators.js';
9
6
  import { phaseIds } from '../domain/governance/activation/types.js';
10
- import { isHistoricalActivationIdentity } from '../domain/governance/policy/identity.js';
11
- async function readJsonDirectory(projectRoot, parts) {
12
- let entries;
13
- try {
14
- entries = await readdir(await resolveProjectPath(projectRoot, parts), { withFileTypes: true });
15
- }
16
- catch (error) {
17
- if (typeof error === 'object' && error !== null && 'code' in error && error.code === 'ENOENT')
18
- return [];
19
- throw error;
20
- }
21
- const results = [];
22
- for (const entry of entries.sort((a, b) => a.name.localeCompare(b.name, 'en'))) {
23
- if (!entry.name.endsWith('.json'))
24
- continue;
25
- if (!entry.isFile())
26
- throw new Error(`Activation proof ${[...parts, entry.name].join('/')} must be a regular file.`);
27
- const bytes = await readProjectFile(projectRoot, [...parts, entry.name]);
28
- if (!bytes)
29
- throw new Error('Activation proof changed during inspection.');
30
- const source = [...parts, entry.name].join('/');
31
- try {
32
- results.push({ path: source, value: JSON.parse(bytes.toString('utf8')) });
33
- }
34
- catch {
35
- throw new Error(`Unable to parse ${source}: invalid JSON.`);
36
- }
37
- }
38
- return results;
39
- }
40
- export async function readReviewedTransitionPlans(projectRoot) {
41
- return (await readJsonDirectory(projectRoot, ['governance', 'plans'])).map(({ path, value }) => {
42
- try {
43
- return validateSavedTransitionPlan(value);
44
- }
45
- catch (error) {
46
- throw new Error(`Invalid ${path}: ${error instanceof Error ? error.message : String(error)}`);
47
- }
48
- });
49
- }
50
- export async function readActivationEvidence(projectRoot) {
51
- return (await readJsonDirectory(projectRoot, ['governance', 'evidence'])).map(({ path, value }) => {
52
- try {
53
- if (typeof value !== 'object' || value === null || !('header' in value) || !('evidenceId' in value) ||
54
- typeof value.evidenceId !== 'string' || !value.evidenceId)
55
- throw new Error('Activation v2 requires a body-bound evidence record; historical headers are diagnostic-only.');
56
- const record = value;
57
- const header = record.header;
58
- if (typeof header === 'object' && header !== null && 'schemaVersion' in header &&
59
- header.schemaVersion === 1 && 'identity' in header && isHistoricalActivationIdentity(header.identity)) {
60
- throw new Error('Historical activation v1 evidence is diagnostic-only; its original bytes are preserved and cannot authorize current execution or read scope.');
61
- }
62
- if (Object.keys(record).some((key) => !['evidenceId', 'header', 'payload', 'liveReadback'].includes(key)))
63
- throw new Error('Unknown activation evidence fields.');
64
- if (record.liveReadback !== undefined && !Array.isArray(record.liveReadback))
65
- throw new Error('Evidence liveReadback must be an array.');
66
- return { evidenceId: value.evidenceId, header: validateEvidenceHeader(value.header), payload: record.payload,
67
- liveReadback: record.liveReadback?.map(validateLiveReadbackProof) ?? [] };
68
- }
69
- catch (error) {
70
- throw new Error(`Invalid ${path}: ${error instanceof Error ? error.message : String(error)}`);
71
- }
72
- });
73
- }
7
+ import { readActivationEvidence, readReviewedTransitionPlans } from './proof-records.js';
8
+ import { inspectActivationMigrationHistory } from './migration-history.js';
9
+ export { readActivationEvidence, readReviewedTransitionPlans } from './proof-records.js';
74
10
  /** Read-only proof boundary: returned values carry no executor, credential, or mutation port. */
75
11
  export async function inspectCurrentActivationEvidence(projectRoot, manifest, options = {}) {
76
12
  validateManifestActivationForExecution(manifest);
77
13
  const loaded = await loadActivationState(projectRoot);
78
14
  if (!loaded)
79
15
  return { status: 'not-started' };
16
+ const migration = await inspectActivationMigrationHistory(projectRoot);
80
17
  const snapshot = await readActivationInputSnapshot(projectRoot, manifest, options.runner);
81
18
  const contexts = activationEvidenceContexts(canonicalPhaseGraph, loaded.state, snapshot, options.now);
82
19
  const plans = await readReviewedTransitionPlans(projectRoot);
@@ -85,7 +22,10 @@ export async function inspectCurrentActivationEvidence(projectRoot, manifest, op
85
22
  contexts[phaseId].reviewedPlans = plans;
86
23
  const selections = Object.fromEntries(phaseIds.map((phaseId) => [phaseId,
87
24
  selectLatestPhaseEvidence(records.filter((record) => record.header.phaseId === phaseId), contexts[phaseId])]));
88
- return { status: 'inspected', state: loaded.state, snapshot, contexts, records, selections };
25
+ return {
26
+ status: 'inspected', state: loaded.state, snapshot, contexts, records, selections,
27
+ migration: migration.status === 'committed' ? migration.journal : null
28
+ };
89
29
  }
90
30
  export { evidenceBodyDigest, evidenceHeaderDigest, selectLatestPhaseEvidence, validateEvidenceFreshness } from '../domain/governance/activation/evidence.js';
91
31
  export { activationEvidenceContexts, readActivationInputSnapshot } from './inputs.js';
@@ -1 +1 @@
1
- {"version":3,"file":"read-only.js","sourceRoot":"","sources":["../../src/governance-activation/read-only.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"read-only.js","sourceRoot":"","sources":["../../src/governance-activation/read-only.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,0BAA0B,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAC;AACtF,OAAO,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAC;AAC/E,OAAO,EAAE,yBAAyB,EAAE,MAAM,6CAA6C,CAAC;AACxF,OAAO,EAAE,sCAAsC,EAAE,MAAM,+CAA+C,CAAC;AACvG,OAAO,EAAE,QAAQ,EAAE,MAAM,0CAA0C,CAAC;AACpE,OAAO,EAAE,sBAAsB,EAAE,2BAA2B,EAAE,MAAM,oBAAoB,CAAC;AACzF,OAAO,EAAE,iCAAiC,EAAE,MAAM,wBAAwB,CAAC;AAC3E,OAAO,EAAE,sBAAsB,EAAE,2BAA2B,EAAE,MAAM,oBAAoB,CAAC;AAEzF,iGAAiG;AACjG,MAAM,CAAC,KAAK,UAAU,gCAAgC,CAAC,WAAmB,EAAE,QAAyB,EAAE,OAAO,GAA2C,EAAE;IACzJ,sCAAsC,CAAC,QAAQ,CAAC,CAAC;IACjD,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,WAAW,CAAC,CAAC;IACtD,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,MAAM,EAAE,aAAsB,EAAE,CAAC;IACvD,MAAM,SAAS,GAAG,MAAM,iCAAiC,CAAC,WAAW,CAAC,CAAC;IACvE,MAAM,QAAQ,GAAG,MAAM,2BAA2B,CAAC,WAAW,EAAE,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1F,MAAM,QAAQ,GAAG,0BAA0B,CAAC,mBAAmB,EAAE,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IACtG,MAAM,KAAK,GAAG,MAAM,2BAA2B,CAAC,WAAW,CAAC,CAAC;IAC7D,MAAM,OAAO,GAAG,MAAM,sBAAsB,CAAC,WAAW,CAAC,CAAC;IAC1D,KAAK,MAAM,OAAO,IAAI,QAAQ;QAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,aAAa,GAAG,KAAK,CAAC;IACxE,MAAM,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO;QACtE,yBAAyB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,KAAK,OAAO,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACjH,OAAO;QACL,MAAM,EAAE,WAAoB,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU;QAC1F,SAAS,EAAE,SAAS,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI;KACvE,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,MAAM,6CAA6C,CAAC;AAC7J,OAAO,EAAE,0BAA0B,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAC;AAEtF,OAAO,EAAE,aAAa,EAAwB,MAAM,+CAA+C,CAAC"}
@@ -1,12 +1,14 @@
1
1
  import { type ProjectFileMutation, type ProjectFileSnapshot } from '../adapters/filesystem/project-transaction.js';
2
2
  import type { PhaseAdapterExecutionInput, PhaseAdapterOutcome } from './transition-ports.js';
3
3
  import type { CommandResult, CommandRunner } from '../process-runner.js';
4
+ import type { TransitionOperation } from '../domain/governance/activation/types.js';
4
5
  import type { ExternalCommand, LiftoffManifest, ManifestWorkload } from '../domain/project/contracts.js';
5
6
  export type SeedBaselineCheckId = 'liftoff-validate' | 'backend-tests' | 'worker-tests' | 'frontend-build' | 'docker-compose-config' | 'tofu-fmt' | 'tofu-init' | 'tofu-validate' | 'openspec-strict';
6
7
  export type SeedBaselineCheckApplicability = {
7
8
  applicable: true;
8
9
  command: ExternalCommand;
9
10
  cwdPathParts: readonly string[];
11
+ env?: Readonly<Record<string, string>>;
10
12
  } | {
11
13
  applicable: false;
12
14
  reason: string;
@@ -24,6 +26,7 @@ export type SeedBaselineCheckOutcome = {
24
26
  status: 'passed';
25
27
  command: ExternalCommand;
26
28
  cwdPathParts: readonly string[];
29
+ env?: Readonly<Record<string, string>>;
27
30
  result: CommandResult;
28
31
  } | {
29
32
  id: SeedBaselineCheckId;
@@ -32,6 +35,7 @@ export type SeedBaselineCheckOutcome = {
32
35
  status: 'failed';
33
36
  command: ExternalCommand;
34
37
  cwdPathParts: readonly string[];
38
+ env?: Readonly<Record<string, string>>;
35
39
  result: CommandResult;
36
40
  detail: string;
37
41
  } | {
@@ -119,6 +123,7 @@ export type SeedPhaseArchiveResult = {
119
123
  archiveSyncBehavior?: string;
120
124
  detail: string;
121
125
  synchronizedSpecDigest?: string;
126
+ validation?: CommandResult;
122
127
  } | {
123
128
  status: 'blocked';
124
129
  changeName: string;
@@ -126,17 +131,34 @@ export type SeedPhaseArchiveResult = {
126
131
  retryableAfterRepair?: boolean;
127
132
  archiveCompleted?: boolean;
128
133
  };
134
+ export type LocalSeedPhaseId = 'seed-valid' | 'seed-verified' | 'seed-archived';
135
+ export interface LocalSeedCommand {
136
+ command: ExternalCommand;
137
+ cwdPathParts: readonly string[];
138
+ env: Readonly<Record<string, string>>;
139
+ }
140
+ export interface LocalSeedPhasePreview {
141
+ phaseId: LocalSeedPhaseId;
142
+ operation: TransitionOperation;
143
+ commands: readonly LocalSeedCommand[];
144
+ blockers: readonly string[];
145
+ }
146
+ interface SeedExecutionOptions {
147
+ localRevalidation?: boolean;
148
+ }
129
149
  export declare function generatedSeedChangeName(manifest: LiftoffManifest): string;
130
150
  export declare function generatedSeedCapabilityId(workload: ManifestWorkload): string;
131
151
  export declare function seedInfrastructureBaselineBlocker(manifest: LiftoffManifest): string | undefined;
132
- export declare function selectSeedBaselineChecks(manifest: LiftoffManifest, changeName?: string, seedState?: 'active' | 'archived'): SeedBaselineCheck[];
152
+ export declare function selectSeedBaselineChecks(manifest: LiftoffManifest, changeName?: string, seedState?: 'active' | 'archived', options?: SeedExecutionOptions): SeedBaselineCheck[];
153
+ export declare function previewLocalSeedPhase(projectRoot: string, manifest: LiftoffManifest, phaseId: LocalSeedPhaseId): Promise<LocalSeedPhasePreview>;
133
154
  export declare function inspectArchivedSeedIntegrity(projectRoot: string, suppliedManifest?: LiftoffManifest): Promise<ArchivedSeedIntegrity>;
134
- export declare function discoverGeneratedSeed(projectRoot: string): Promise<GeneratedSeedDiscovery>;
155
+ export declare function discoverGeneratedSeed(projectRoot: string, suppliedManifest?: LiftoffManifest): Promise<GeneratedSeedDiscovery>;
135
156
  export declare function runSeedBaselineChecks(projectRoot: string, runner: CommandRunner, checks: readonly SeedBaselineCheck[]): Promise<SeedBaselineCheckOutcome[]>;
136
157
  export declare function markSuccessfulSeedTasks(markdown: string, outcomes: readonly SeedBaselineCheckOutcome[]): string;
137
158
  export declare function markAllSeedTasksForArchive(markdown: string): string;
138
- export declare function validateGeneratedSeedForPhase(projectRoot: string, runner: CommandRunner): Promise<SeedPhaseValidationResult>;
139
- export declare function verifyGeneratedSeedBaselineForPhase(projectRoot: string, runner: CommandRunner): Promise<SeedPhaseVerificationResult>;
140
- export declare function archiveGeneratedSeedForPhase(projectRoot: string, runner: CommandRunner): Promise<SeedPhaseArchiveResult>;
141
- export declare function executeSeedOperations(input: PhaseAdapterExecutionInput): Promise<PhaseAdapterOutcome | null>;
159
+ export declare function validateGeneratedSeedForPhase(projectRoot: string, runner: CommandRunner, options?: SeedExecutionOptions): Promise<SeedPhaseValidationResult>;
160
+ export declare function verifyGeneratedSeedBaselineForPhase(projectRoot: string, runner: CommandRunner, options?: SeedExecutionOptions): Promise<SeedPhaseVerificationResult>;
161
+ export declare function archiveGeneratedSeedForPhase(projectRoot: string, runner: CommandRunner, options?: SeedExecutionOptions): Promise<SeedPhaseArchiveResult>;
162
+ export declare function executeSeedOperations(input: PhaseAdapterExecutionInput, options?: SeedExecutionOptions): Promise<PhaseAdapterOutcome | null>;
142
163
  export declare function completeGeneratedSeedLifecycle(projectRoot: string, runner: CommandRunner): Promise<GeneratedSeedLifecycleResult>;
164
+ export {};