@tiic-tech/openworkflow 0.1.0 → 0.1.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 (217) hide show
  1. package/README.md +10 -0
  2. package/dist/adapters/codex/src/cleanCodexAdapter.d.ts +7 -0
  3. package/dist/adapters/codex/src/cleanCodexAdapter.js +99 -0
  4. package/dist/adapters/codex/src/cleanCodexAdapter.js.map +1 -0
  5. package/dist/adapters/codex/src/constants.d.ts +1 -0
  6. package/dist/adapters/codex/src/constants.js +2 -0
  7. package/dist/adapters/codex/src/constants.js.map +1 -0
  8. package/dist/adapters/codex/src/generateCommands.js +14 -9
  9. package/dist/adapters/codex/src/generateCommands.js.map +1 -1
  10. package/dist/adapters/codex/src/generateSkills.js +13 -0
  11. package/dist/adapters/codex/src/generateSkills.js.map +1 -1
  12. package/dist/adapters/codex/src/generatedFiles.js +1 -1
  13. package/dist/adapters/codex/src/manifest.js +11 -2
  14. package/dist/adapters/codex/src/manifest.js.map +1 -1
  15. package/dist/adapters/codex/src/templates.d.ts +0 -1
  16. package/dist/adapters/codex/src/templates.js +0 -1
  17. package/dist/adapters/codex/src/templates.js.map +1 -1
  18. package/dist/adapters/src/registry.d.ts +20 -0
  19. package/dist/adapters/src/registry.js +81 -0
  20. package/dist/adapters/src/registry.js.map +1 -0
  21. package/dist/cli/src/commands/brief.d.ts +46 -0
  22. package/dist/cli/src/commands/brief.js +294 -0
  23. package/dist/cli/src/commands/brief.js.map +1 -0
  24. package/dist/cli/src/commands/check.d.ts +42 -0
  25. package/dist/cli/src/commands/check.js +326 -0
  26. package/dist/cli/src/commands/check.js.map +1 -0
  27. package/dist/cli/src/commands/clean.d.ts +1 -0
  28. package/dist/cli/src/commands/clean.js +98 -0
  29. package/dist/cli/src/commands/clean.js.map +1 -0
  30. package/dist/cli/src/commands/context.d.ts +1 -0
  31. package/dist/cli/src/commands/context.js +471 -0
  32. package/dist/cli/src/commands/context.js.map +1 -0
  33. package/dist/cli/src/commands/doctor.js +122 -12
  34. package/dist/cli/src/commands/doctor.js.map +1 -1
  35. package/dist/cli/src/commands/draft.d.ts +1 -0
  36. package/dist/cli/src/commands/draft.js +175 -0
  37. package/dist/cli/src/commands/draft.js.map +1 -0
  38. package/dist/cli/src/commands/gitAutomation.d.ts +1 -0
  39. package/dist/cli/src/commands/gitAutomation.js +378 -0
  40. package/dist/cli/src/commands/gitAutomation.js.map +1 -0
  41. package/dist/cli/src/commands/handoff.d.ts +22 -0
  42. package/dist/cli/src/commands/handoff.js +122 -0
  43. package/dist/cli/src/commands/handoff.js.map +1 -0
  44. package/dist/cli/src/commands/init.js +52 -1
  45. package/dist/cli/src/commands/init.js.map +1 -1
  46. package/dist/cli/src/commands/inspect.d.ts +23 -0
  47. package/dist/cli/src/commands/inspect.js +157 -0
  48. package/dist/cli/src/commands/inspect.js.map +1 -0
  49. package/dist/cli/src/commands/register.d.ts +1 -0
  50. package/dist/cli/src/commands/register.js +251 -0
  51. package/dist/cli/src/commands/register.js.map +1 -0
  52. package/dist/cli/src/commands/resume.d.ts +59 -0
  53. package/dist/cli/src/commands/resume.js +280 -0
  54. package/dist/cli/src/commands/resume.js.map +1 -0
  55. package/dist/cli/src/commands/shared.js +6 -2
  56. package/dist/cli/src/commands/shared.js.map +1 -1
  57. package/dist/cli/src/commands/summaries.d.ts +1 -0
  58. package/dist/cli/src/commands/summaries.js +77 -0
  59. package/dist/cli/src/commands/summaries.js.map +1 -0
  60. package/dist/cli/src/commands/summarize.d.ts +1 -0
  61. package/dist/cli/src/commands/summarize.js +316 -0
  62. package/dist/cli/src/commands/summarize.js.map +1 -0
  63. package/dist/cli/src/commands/sync.js +135 -12
  64. package/dist/cli/src/commands/sync.js.map +1 -1
  65. package/dist/cli/src/commands/validate.js +25 -1
  66. package/dist/cli/src/commands/validate.js.map +1 -1
  67. package/dist/cli/src/dev/verifyAgentE2E.d.ts +2 -0
  68. package/dist/cli/src/dev/verifyAgentE2E.js +391 -0
  69. package/dist/cli/src/dev/verifyAgentE2E.js.map +1 -0
  70. package/dist/cli/src/dev/verifyCleanCommand.d.ts +2 -0
  71. package/dist/cli/src/dev/verifyCleanCommand.js +338 -0
  72. package/dist/cli/src/dev/verifyCleanCommand.js.map +1 -0
  73. package/dist/cli/src/dev/verifyRuntimeSurface.js +4940 -54
  74. package/dist/cli/src/dev/verifyRuntimeSurface.js.map +1 -1
  75. package/dist/cli/src/dev/verifyWorkflowE2E.js +477 -45
  76. package/dist/cli/src/dev/verifyWorkflowE2E.js.map +1 -1
  77. package/dist/cli/src/index.js +189 -5
  78. package/dist/cli/src/index.js.map +1 -1
  79. package/dist/cli/src/report.d.ts +26 -0
  80. package/dist/cli/src/report.js +17 -0
  81. package/dist/cli/src/report.js.map +1 -0
  82. package/dist/core/src/artifacts/readiness.d.ts +7 -0
  83. package/dist/core/src/artifacts/readiness.js +240 -0
  84. package/dist/core/src/artifacts/readiness.js.map +1 -0
  85. package/dist/core/src/artifacts/registry.d.ts +9 -2
  86. package/dist/core/src/artifacts/registry.js +687 -60
  87. package/dist/core/src/artifacts/registry.js.map +1 -1
  88. package/dist/core/src/commands/registry.js +1425 -146
  89. package/dist/core/src/commands/registry.js.map +1 -1
  90. package/dist/core/src/contracts/index.d.ts +1 -1
  91. package/dist/core/src/fs/index.d.ts +24 -0
  92. package/dist/core/src/fs/index.js +48 -1
  93. package/dist/core/src/fs/index.js.map +1 -1
  94. package/dist/core/src/git/autonomousSimulator.d.ts +46 -0
  95. package/dist/core/src/git/autonomousSimulator.js +163 -0
  96. package/dist/core/src/git/autonomousSimulator.js.map +1 -0
  97. package/dist/core/src/git/branchIdentity.d.ts +19 -0
  98. package/dist/core/src/git/branchIdentity.js +75 -0
  99. package/dist/core/src/git/branchIdentity.js.map +1 -0
  100. package/dist/core/src/git/draftPrPilot.d.ts +47 -0
  101. package/dist/core/src/git/draftPrPilot.js +196 -0
  102. package/dist/core/src/git/draftPrPilot.js.map +1 -0
  103. package/dist/core/src/git/localEvidenceReader.d.ts +21 -0
  104. package/dist/core/src/git/localEvidenceReader.js +142 -0
  105. package/dist/core/src/git/localEvidenceReader.js.map +1 -0
  106. package/dist/core/src/git/localGitAutomation.d.ts +68 -0
  107. package/dist/core/src/git/localGitAutomation.js +470 -0
  108. package/dist/core/src/git/localGitAutomation.js.map +1 -0
  109. package/dist/core/src/git/mergeReadinessCheckpoint.d.ts +31 -0
  110. package/dist/core/src/git/mergeReadinessCheckpoint.js +110 -0
  111. package/dist/core/src/git/mergeReadinessCheckpoint.js.map +1 -0
  112. package/dist/core/src/git/prReadySummary.d.ts +16 -0
  113. package/dist/core/src/git/prReadySummary.js +144 -0
  114. package/dist/core/src/git/prReadySummary.js.map +1 -0
  115. package/dist/core/src/git/remoteReadonlyPlanner.d.ts +60 -0
  116. package/dist/core/src/git/remoteReadonlyPlanner.js +223 -0
  117. package/dist/core/src/git/remoteReadonlyPlanner.js.map +1 -0
  118. package/dist/core/src/onboarding/agentsGuide.d.ts +32 -0
  119. package/dist/core/src/onboarding/agentsGuide.js +164 -0
  120. package/dist/core/src/onboarding/agentsGuide.js.map +1 -0
  121. package/dist/core/src/validators/validateOpenWorkflow.js +1331 -15
  122. package/dist/core/src/validators/validateOpenWorkflow.js.map +1 -1
  123. package/dist/core/src/validators/validateRepositoryContracts.js +2327 -306
  124. package/dist/core/src/validators/validateRepositoryContracts.js.map +1 -1
  125. package/dist/core/src/workflow/cleanOpenWorkflow.d.ts +18 -0
  126. package/dist/core/src/workflow/cleanOpenWorkflow.js +124 -0
  127. package/dist/core/src/workflow/cleanOpenWorkflow.js.map +1 -0
  128. package/dist/core/src/workflow/doctorOpenWorkflow.d.ts +7 -0
  129. package/dist/core/src/workflow/doctorOpenWorkflow.js +26 -0
  130. package/dist/core/src/workflow/doctorOpenWorkflow.js.map +1 -0
  131. package/dist/core/src/workflow/initOpenWorkflow.d.ts +7 -0
  132. package/dist/core/src/workflow/initOpenWorkflow.js +96 -8
  133. package/dist/core/src/workflow/initOpenWorkflow.js.map +1 -1
  134. package/dist/core/src/workflow/planningQueueResume.d.ts +105 -0
  135. package/dist/core/src/workflow/planningQueueResume.js +596 -0
  136. package/dist/core/src/workflow/planningQueueResume.js.map +1 -0
  137. package/dist/core/src/workflow/readWorkflowConfig.d.ts +6 -0
  138. package/dist/core/src/workflow/readWorkflowConfig.js +28 -0
  139. package/dist/core/src/workflow/readWorkflowConfig.js.map +1 -0
  140. package/dist/core/src/workflow/summaryHealth.d.ts +60 -0
  141. package/dist/core/src/workflow/summaryHealth.js +713 -0
  142. package/dist/core/src/workflow/summaryHealth.js.map +1 -0
  143. package/dist/core/src/workflow/syncOpenWorkflow.d.ts +22 -0
  144. package/dist/core/src/workflow/syncOpenWorkflow.js +235 -0
  145. package/dist/core/src/workflow/syncOpenWorkflow.js.map +1 -0
  146. package/package.json +4 -2
  147. package/references/artifact-authoring-templates.md +14 -12
  148. package/references/artifact-instruction-envelope.md +133 -0
  149. package/references/coder-continuous-growth-loop.md +68 -0
  150. package/references/gh-operation-governance.md +114 -0
  151. package/references/git-automation-governance.md +324 -0
  152. package/references/git-version-control-governance.md +227 -0
  153. package/references/internal-coder-protocol.md +202 -0
  154. package/references/issue-governance.md +115 -0
  155. package/references/planning-artifact-contracts.md +595 -0
  156. package/references/planning-skill-runtime-exposure.md +159 -0
  157. package/references/proto-redesign-artifact-contracts.md +217 -0
  158. package/references/proto2html-artifact-contracts.md +113 -0
  159. package/references/skill-system-lifecycle.md +198 -0
  160. package/references/validation-trust-domains.md +286 -0
  161. package/references/workflow-blueprint-runtime-alignment.md +287 -0
  162. package/schemas/atom-tasks.schema.json +101 -0
  163. package/schemas/candidate-changes.schema.json +323 -0
  164. package/schemas/current-state.schema.json +113 -0
  165. package/schemas/html-prototype.schema.json +288 -0
  166. package/schemas/openworkflow-contract.schema.json +9 -1
  167. package/schemas/proto-prompt-pack.schema.json +1333 -0
  168. package/schemas/prototype-evidence.schema.json +684 -142
  169. package/schemas/selected-change.schema.json +104 -0
  170. package/schemas/validation-target.schema.json +187 -1
  171. package/schemas/validation.schema.json +187 -1
  172. package/schemas/vision-session.schema.json +151 -0
  173. package/skills/analyze-changes/SKILL.md +92 -0
  174. package/skills/analyze-changes/agents/openai.yaml +4 -0
  175. package/skills/analyze-changes/references/analysis-protocol.md +116 -0
  176. package/skills/build-proto-prompt/SKILL.md +125 -0
  177. package/skills/build-proto-prompt/references/output-boundary.md +54 -0
  178. package/skills/build-proto-prompt/references/prompt-pack-compiler-protocol.md +80 -0
  179. package/skills/build-prototype/SKILL.md +162 -38
  180. package/skills/build-prototype/agents/openai.yaml +2 -2
  181. package/skills/build-prototype/references/philosophy-engine.md +61 -0
  182. package/skills/build-prototype/references/strategic-prompt-pack-protocol.md +365 -0
  183. package/skills/build-prototype/references/vision2prompt/01_input_contract.md +84 -0
  184. package/skills/build-prototype/references/vision2prompt/02_vision_decomposition.md +108 -0
  185. package/skills/build-prototype/references/vision2prompt/03_strategy_hypothesis_generation.md +89 -0
  186. package/skills/build-prototype/references/vision2prompt/04_product_system_extraction.md +78 -0
  187. package/skills/build-prototype/references/vision2prompt/05_prototype_prompt_schema.md +189 -0
  188. package/skills/build-prototype/references/vision2prompt/06_output_templates.md +125 -0
  189. package/skills/build-prototype/references/vision2prompt/07_quality_rubric.md +171 -0
  190. package/skills/build-validation/SKILL.md +136 -54
  191. package/skills/build-validation/references/prototype-validation-target-rubric.md +35 -0
  192. package/skills/build-validation/references/return-to-vision-gate.md +32 -0
  193. package/skills/build-vision/SKILL.md +192 -0
  194. package/skills/build-vision/references/proto-readiness-rubric.md +48 -0
  195. package/skills/build-vision/references/vision-interview-protocol.md +48 -0
  196. package/skills/coder/SKILL.md +204 -0
  197. package/skills/decompose-to-changes/SKILL.md +176 -0
  198. package/skills/decompose-to-changes/agents/openai.yaml +4 -0
  199. package/skills/decompose-to-changes/references/decomposition-protocol.md +278 -0
  200. package/skills/prompt2proto/SKILL.md +157 -0
  201. package/skills/prompt2proto/agents/openai.yaml +4 -0
  202. package/skills/prompt2proto/references/00_role_philosophy_engine.md +96 -0
  203. package/skills/prompt2proto/references/01_input_contract.md +53 -0
  204. package/skills/prompt2proto/references/02_prompt_pack_readiness.md +50 -0
  205. package/skills/prompt2proto/references/03_visual_translation_workflow.md +64 -0
  206. package/skills/prompt2proto/references/04_output_contract.md +67 -0
  207. package/skills/prompt2proto/references/05_quality_rubric.md +46 -0
  208. package/skills/proto2html/SKILL.md +136 -0
  209. package/skills/proto2html/agents/openai.yaml +4 -0
  210. package/skills/proto2html/references/proto2html-protocol.md +115 -0
  211. package/skills/run-team/SKILL.md +4 -0
  212. package/skills/select-change/SKILL.md +200 -0
  213. package/skills/select-change/agents/openai.yaml +4 -0
  214. package/skills/select-change/references/selection-protocol.md +281 -0
  215. package/skills/tune-prototype/SKILL.md +121 -0
  216. package/skills/tune-prototype/agents/openai.yaml +4 -0
  217. package/skills/tune-prototype/references/refined-prompt-pack-protocol.md +161 -0
@@ -0,0 +1,338 @@
1
+ #!/usr/bin/env node
2
+ import { spawn } from "node:child_process";
3
+ import { mkdir, readFile, rm, stat, writeFile } from "node:fs/promises";
4
+ import { tmpdir } from "node:os";
5
+ import { dirname, join, resolve } from "node:path";
6
+ import { fileURLToPath } from "node:url";
7
+ const CURRENT_FILE = fileURLToPath(import.meta.url);
8
+ const REPO_ROOT = resolve(dirname(CURRENT_FILE), "../../../..");
9
+ const CLI = join(REPO_ROOT, "dist", "cli", "src", "index.js");
10
+ async function main() {
11
+ await assertFile(CLI);
12
+ const tempRoot = await mkdirTemp();
13
+ try {
14
+ const target = join(tempRoot, "target");
15
+ const codexHome = join(tempRoot, "codex-home");
16
+ const env = { ...process.env, CODEX_HOME: codexHome };
17
+ await mkdir(target, { recursive: true });
18
+ await writeFile(join(target, "AGENTS.md"), "# Project Agents\n\nUser rules stay.\n", "utf8");
19
+ await run(["node", CLI, "init", target, "--tools", "codex", "--force"], env);
20
+ let agentsGuide = await read(join(target, "AGENTS.md"));
21
+ assert(agentsGuide.includes("User rules stay."), "init did not preserve existing AGENTS.md content");
22
+ assert(agentsGuide.includes("BEGIN OPENWORKFLOW AGENT GUIDE"), "init did not append AGENTS.md managed block");
23
+ await writeNonGeneratedFixtures(target);
24
+ const dryRun = await runCapture(["node", CLI, "clean", "--root", target, "--tools", "codex"], env);
25
+ assert(dryRun.includes("OpenWorkflow clean plan"), "clean dry-run did not print plan");
26
+ assert(dryRun.includes("Dry run only"), "clean dry-run did not explain --yes");
27
+ await assertFile(join(target, ".openworkflow", "config.yaml"));
28
+ await assertFile(join(target, ".agents", "openworkflow-adapter.yaml"));
29
+ await assertFile(join(target, ".agents", "custom.md"));
30
+ await assertFile(join(target, ".codex", "commands", "ow", "vision.md"));
31
+ await writeOpenWorkflowSourceArtifacts(target);
32
+ const sourceSnapshots = await readSourceSnapshots(target);
33
+ const jsonDryRun = JSON.parse(await runCapture(["node", CLI, "clean", "--root", target, "--tools", "codex", "--json"], env));
34
+ assert(jsonDryRun.effects?.preserved?.some((path) => path.endsWith(".openworkflow/validation/val-1/VALIDATION.yaml")) === true, "clean --json did not report preserved source artifacts");
35
+ const clean = await runCapture(["node", CLI, "clean", "--root", target, "--tools", "codex", "--yes"], env);
36
+ assert(clean.includes("OpenWorkflow clean completed"), "clean --yes did not complete");
37
+ assert(clean.includes("removed:"), "clean --yes did not report removed files");
38
+ assert(clean.includes("preserved:"), "clean --yes did not report preserved files");
39
+ assert(clean.includes("Skipped non-generated file"), "clean --yes did not warn for non-generated files");
40
+ await assertFile(join(target, ".openworkflow", "validation", "val-1", "VALIDATION.yaml"));
41
+ await assertFile(join(target, ".openworkflow", "prototypes", "proto-1", "EVIDENCE.yaml"));
42
+ await assertFile(join(target, ".openworkflow", "prototypes", "proto-1", "SUMMARY.yaml"));
43
+ await assertFile(join(target, ".openworkflow", "notes", "handoff.md"));
44
+ assert(!(await exists(join(target, ".openworkflow", "config.yaml"))), "managed config.yaml was not removed");
45
+ assert(!(await exists(join(target, ".openworkflow", "workflow", "WORKFLOW_INDEX.yaml"))), "managed workflow index was not removed");
46
+ assert(!(await exists(join(target, ".openworkflow", "audit", "COMMAND_AUDIT_INDEX.yaml"))), "managed audit index was not removed");
47
+ assert(!(await exists(join(target, ".agents", "openworkflow-adapter.yaml"))), "Codex manifest was not removed");
48
+ assert(!(await exists(join(target, ".agents", "skills", "ow-vision", "SKILL.md"))), "generated skill was not removed");
49
+ await assertFile(join(target, ".agents", "custom.md"));
50
+ await assertFile(join(target, ".agents", "skills", "ow-vision", "custom.md"));
51
+ await assertFile(join(target, ".codex", "commands", "ow", "vision.md"));
52
+ agentsGuide = await read(join(target, "AGENTS.md"));
53
+ assert(agentsGuide.includes("User rules stay."), "clean removed user AGENTS.md content");
54
+ assert(!agentsGuide.includes("BEGIN OPENWORKFLOW AGENT GUIDE"), "clean did not remove AGENTS.md managed block");
55
+ const sync = await runCaptureStatus(["node", CLI, "sync", "--root", target, "--tools", "codex", "--json"], env);
56
+ assert(sync.code === 0 || sync.code === 1, "sync --json returned an unexpected exit code after clean recovery");
57
+ const syncReport = parseJsonReport(sync.output, "sync");
58
+ assert(isRecord(syncReport.effects), "sync --json did not include effects after clean recovery");
59
+ const syncData = record(syncReport.data, "sync data");
60
+ const stateReconciliation = record(syncData.state_reconciliation, "sync state_reconciliation");
61
+ const restoredPointers = record(stateReconciliation.restored_pointers, "sync restored_pointers");
62
+ assert(stateReconciliation.reconciled === true, "sync did not reconcile CURRENT_STATE from preserved indexes");
63
+ assert(stateReconciliation.active_stage === "prototype", "sync did not restore prototype active_stage");
64
+ assert(stateReconciliation.next_command === "/ow:tune", "sync did not restore prototype next_command");
65
+ assert(restoredPointers.current_validation === ".openworkflow/validation/val-1/VALIDATION.yaml", "sync did not restore current_validation");
66
+ assert(restoredPointers.current_prototype === ".openworkflow/prototypes/proto-1/EVIDENCE.yaml", "sync did not restore current_prototype");
67
+ assert(arrayIncludesPath(syncReport.effects.written, ".openworkflow/workflow/WORKFLOW_INDEX.yaml"), "sync --json did not report restored workflow index");
68
+ assert(arrayIncludesPath(syncReport.effects.written, ".agents/openworkflow-adapter.yaml"), "sync --json did not report restored Codex adapter manifest");
69
+ assert(arrayIncludesPath(syncReport.effects.updated, ".openworkflow/CURRENT_STATE.yaml"), "sync --json did not report reconciled CURRENT_STATE update");
70
+ assert(arrayIncludesPath(syncReport.effects.skipped, ".codex/commands/ow/vision.md"), "sync --json did not report preserved legacy non-generated command");
71
+ await assertFile(join(target, ".openworkflow", "config.yaml"));
72
+ await assertFile(join(target, ".openworkflow", "CURRENT_STATE.yaml"));
73
+ await assertFile(join(target, ".openworkflow", "workflow", "WORKFLOW_INDEX.yaml"));
74
+ await assertFile(join(target, ".openworkflow", "audit", "COMMAND_AUDIT_INDEX.yaml"));
75
+ await assertFile(join(target, ".openworkflow", "audit", "ARTIFACT_CONTRACTS.yaml"));
76
+ await assertFile(join(target, ".agents", "openworkflow-adapter.yaml"));
77
+ await assertFile(join(target, ".agents", "skills", "ow-vision", "SKILL.md"));
78
+ const recoveredState = await read(join(target, ".openworkflow", "CURRENT_STATE.yaml"));
79
+ assert(recoveredState.includes("active_stage: prototype"), "recovered CURRENT_STATE missing prototype active_stage");
80
+ assert(recoveredState.includes("current_validation: .openworkflow/validation/val-1/VALIDATION.yaml"), "recovered CURRENT_STATE missing current_validation");
81
+ assert(recoveredState.includes("current_prototype: .openworkflow/prototypes/proto-1/EVIDENCE.yaml"), "recovered CURRENT_STATE missing current_prototype");
82
+ assert(recoveredState.includes("next_command: /ow:tune"), "recovered CURRENT_STATE missing next_command");
83
+ await assertSourceSnapshots(target, sourceSnapshots);
84
+ agentsGuide = await read(join(target, "AGENTS.md"));
85
+ assert(agentsGuide.includes("User rules stay."), "sync recovery did not preserve user AGENTS.md content");
86
+ assert(agentsGuide.includes("BEGIN OPENWORKFLOW AGENT GUIDE"), "sync recovery did not restore AGENTS.md managed block");
87
+ const doctorReport = parseJsonReport(await runCapture(["node", CLI, "doctor", "--root", target, "--tools", "codex", "--json"], env), "doctor");
88
+ assert(doctorReport.ok === true, "doctor --json did not report ok after sync recovery");
89
+ const checkReport = parseJsonReport(await runCapture(["node", CLI, "check", "/ow:vision", "--root", target, "--json"], env), "check");
90
+ assert(checkReport.ok === true, "check /ow:vision --json did not report ready after sync recovery");
91
+ const recoveredStateBeforeResync = await read(join(target, ".openworkflow", "CURRENT_STATE.yaml"));
92
+ const resync = await runCaptureStatus(["node", CLI, "sync", "--root", target, "--tools", "codex", "--json"], env);
93
+ assert(resync.code === 0 || resync.code === 1, "resync --json returned an unexpected exit code");
94
+ const resyncReport = parseJsonReport(resync.output, "sync");
95
+ const resyncData = record(resyncReport.data, "resync data");
96
+ const resyncReconciliation = record(resyncData.state_reconciliation, "resync state_reconciliation");
97
+ assert(resyncReconciliation.attempted === false, "sync attempted to reconcile an existing non-default CURRENT_STATE");
98
+ assert((await read(join(target, ".openworkflow", "CURRENT_STATE.yaml"))) === recoveredStateBeforeResync, "sync overwrote existing non-default CURRENT_STATE");
99
+ await run(["node", CLI, "init", target, "--tools", "codex", "--force"], env);
100
+ const forceClean = await runCapture(["node", CLI, "clean", "--root", target, "--tools", "codex", "--yes", "--force"], env);
101
+ assert(forceClean.includes("OpenWorkflow clean completed"), "clean --force did not complete");
102
+ assert(!(await exists(join(target, ".codex", "commands", "ow", "vision.md"))), "force clean did not remove expected legacy target");
103
+ const generatedOnlyTarget = join(tempRoot, "generated-only");
104
+ await run(["node", CLI, "init", generatedOnlyTarget, "--tools", "codex", "--force"], env);
105
+ await run(["node", CLI, "clean", "--root", generatedOnlyTarget, "--tools", "codex", "--yes"], env);
106
+ assert(!(await exists(join(generatedOnlyTarget, ".openworkflow"))), "generated-only .openworkflow should be removed after managed files are cleaned");
107
+ await assertFile(join(generatedOnlyTarget, "AGENTS.md"));
108
+ const generatedOnlyAgents = await read(join(generatedOnlyTarget, "AGENTS.md"));
109
+ assert(generatedOnlyAgents === "", "clean should clear only the managed block and leave AGENTS.md in place");
110
+ }
111
+ finally {
112
+ await rm(tempRoot, { recursive: true, force: true });
113
+ }
114
+ console.log("OpenWorkflow clean verification passed.");
115
+ return 0;
116
+ }
117
+ async function mkdirTemp() {
118
+ const { mkdtemp } = await import("node:fs/promises");
119
+ return mkdtemp(join(tmpdir(), "openworkflow-clean-"));
120
+ }
121
+ async function writeNonGeneratedFixtures(target) {
122
+ await mkdir(join(target, ".agents", "skills", "ow-vision"), { recursive: true });
123
+ await mkdir(join(target, ".codex", "commands", "ow"), { recursive: true });
124
+ await writeFile(join(target, ".agents", "custom.md"), "user content\n", "utf8");
125
+ await writeFile(join(target, ".agents", "skills", "ow-vision", "custom.md"), "user skill note\n", "utf8");
126
+ await writeFile(join(target, ".codex", "commands", "ow", "vision.md"), "user legacy command\n", "utf8");
127
+ }
128
+ async function writeOpenWorkflowSourceArtifacts(target) {
129
+ await mkdir(join(target, ".openworkflow", "validation", "val-1"), { recursive: true });
130
+ await mkdir(join(target, ".openworkflow", "prototypes", "proto-1"), { recursive: true });
131
+ await mkdir(join(target, ".openworkflow", "notes"), { recursive: true });
132
+ await writeFile(join(target, ".openworkflow", "validation", "val-1", "VALIDATION.yaml"), [
133
+ "schema_version: 0.1.0",
134
+ "contract_id: validation:val-1",
135
+ "contract_type: validation",
136
+ "artifact_type: validation_target",
137
+ "title: Validation fixture",
138
+ "status: active",
139
+ "core_question: Can sync recover current state?",
140
+ "prototype_scope:",
141
+ " include:",
142
+ " - state recovery",
143
+ "acceptance:",
144
+ " - CURRENT_STATE points to prototype after clean/sync",
145
+ "",
146
+ ].join("\n"), "utf8");
147
+ await writeFile(join(target, ".openworkflow", "validation", "VALIDATION_INDEX.yaml"), [
148
+ "schema_version: 0.1.0",
149
+ "contract_id: index:validation",
150
+ "contract_type: validation",
151
+ "title: Validation index",
152
+ "status: active",
153
+ "current_validation: val-1",
154
+ "validations:",
155
+ " - validation_id: val-1",
156
+ " path: .openworkflow/validation/val-1/VALIDATION.yaml",
157
+ " artifact_type: validation_target",
158
+ " title: Validation fixture",
159
+ " status: active",
160
+ "",
161
+ ].join("\n"), "utf8");
162
+ await writeFile(join(target, ".openworkflow", "prototypes", "proto-1", "EVIDENCE.yaml"), [
163
+ "schema_version: 0.1.0",
164
+ "contract_id: prototype:proto-1",
165
+ "contract_type: prototype",
166
+ "artifact_type: prototype_evidence",
167
+ "title: Prototype fixture",
168
+ "status: active",
169
+ "validation_target: validation:val-1",
170
+ "core_question: Can sync recover next command?",
171
+ "prototype_mode: image_prompt_pack",
172
+ "prompt_pack_type: strategic_proto_prompt_pack",
173
+ "validation_input:",
174
+ " mode: validation_present",
175
+ " refs:",
176
+ " - .openworkflow/validation/val-1/VALIDATION.yaml",
177
+ " notes: []",
178
+ "source:",
179
+ " refs: []",
180
+ "negative_constraints: []",
181
+ "review_plan: {}",
182
+ "result: not_reviewed",
183
+ "handoff:",
184
+ " next_command: /ow:tune",
185
+ "",
186
+ ].join("\n"), "utf8");
187
+ await writeFile(join(target, ".openworkflow", "prototypes", "PROTOTYPE_INDEX.yaml"), [
188
+ "schema_version: 0.1.0",
189
+ "contract_id: index:prototype",
190
+ "contract_type: prototype",
191
+ "title: Prototype index",
192
+ "status: active",
193
+ "current_prototype: proto-1",
194
+ "prototypes:",
195
+ " - prototype_id: proto-1",
196
+ " path: .openworkflow/prototypes/proto-1/EVIDENCE.yaml",
197
+ " artifact_type: prototype_evidence",
198
+ " title: Prototype fixture",
199
+ " status: active",
200
+ "",
201
+ ].join("\n"), "utf8");
202
+ await writeFile(join(target, ".openworkflow", "prototypes", "proto-1", "SUMMARY.yaml"), [
203
+ "artifact: .openworkflow/prototypes/proto-1/EVIDENCE.yaml",
204
+ "summary: Keep this low-context summary.",
205
+ "",
206
+ ].join("\n"), "utf8");
207
+ await writeFile(join(target, ".openworkflow", "notes", "handoff.md"), "Preserve user notes.\n", "utf8");
208
+ }
209
+ const SOURCE_ARTIFACT_PATHS = [
210
+ ".openworkflow/validation/VALIDATION_INDEX.yaml",
211
+ ".openworkflow/validation/val-1/VALIDATION.yaml",
212
+ ".openworkflow/prototypes/PROTOTYPE_INDEX.yaml",
213
+ ".openworkflow/prototypes/proto-1/EVIDENCE.yaml",
214
+ ".openworkflow/prototypes/proto-1/SUMMARY.yaml",
215
+ ".openworkflow/notes/handoff.md",
216
+ ];
217
+ async function readSourceSnapshots(target) {
218
+ const snapshots = new Map();
219
+ for (const relativePath of SOURCE_ARTIFACT_PATHS) {
220
+ snapshots.set(relativePath, await read(join(target, relativePath)));
221
+ }
222
+ return snapshots;
223
+ }
224
+ async function assertSourceSnapshots(target, snapshots) {
225
+ for (const [relativePath, before] of snapshots) {
226
+ const after = await read(join(target, relativePath));
227
+ assert(after === before, `source artifact changed during clean/sync recovery: ${relativePath}`);
228
+ }
229
+ }
230
+ async function run(command, env) {
231
+ await new Promise((resolvePromise, reject) => {
232
+ const child = spawn(command[0] ?? "", command.slice(1), {
233
+ cwd: REPO_ROOT,
234
+ env,
235
+ stdio: "inherit",
236
+ });
237
+ child.on("error", reject);
238
+ child.on("close", (code) => {
239
+ if (code === 0) {
240
+ resolvePromise();
241
+ }
242
+ else {
243
+ reject(new Error(`command failed (${code ?? "signal"}): ${command.join(" ")}`));
244
+ }
245
+ });
246
+ });
247
+ }
248
+ async function runCapture(command, env) {
249
+ return new Promise((resolvePromise, reject) => {
250
+ let output = "";
251
+ const child = spawn(command[0] ?? "", command.slice(1), {
252
+ cwd: REPO_ROOT,
253
+ env,
254
+ stdio: ["ignore", "pipe", "pipe"],
255
+ });
256
+ child.stdout.on("data", (chunk) => {
257
+ output += chunk.toString("utf8");
258
+ });
259
+ child.stderr.on("data", (chunk) => {
260
+ output += chunk.toString("utf8");
261
+ });
262
+ child.on("error", reject);
263
+ child.on("close", (code) => {
264
+ if (code === 0) {
265
+ resolvePromise(output);
266
+ }
267
+ else {
268
+ reject(new Error(`command failed (${code ?? "signal"}): ${command.join(" ")}\n${output}`));
269
+ }
270
+ });
271
+ });
272
+ }
273
+ async function runCaptureStatus(command, env) {
274
+ return new Promise((resolvePromise, reject) => {
275
+ let output = "";
276
+ const child = spawn(command[0] ?? "", command.slice(1), {
277
+ cwd: REPO_ROOT,
278
+ env,
279
+ stdio: ["ignore", "pipe", "pipe"],
280
+ });
281
+ child.stdout.on("data", (chunk) => {
282
+ output += chunk.toString("utf8");
283
+ });
284
+ child.stderr.on("data", (chunk) => {
285
+ output += chunk.toString("utf8");
286
+ });
287
+ child.on("error", reject);
288
+ child.on("close", (code) => {
289
+ resolvePromise({ code, output });
290
+ });
291
+ });
292
+ }
293
+ async function assertFile(path) {
294
+ const info = await stat(path);
295
+ assert(info.isFile(), `missing file: ${path}`);
296
+ }
297
+ async function read(path) {
298
+ return readFile(path, "utf8");
299
+ }
300
+ async function exists(path) {
301
+ try {
302
+ await stat(path);
303
+ return true;
304
+ }
305
+ catch {
306
+ return false;
307
+ }
308
+ }
309
+ function assert(condition, message) {
310
+ if (!condition) {
311
+ throw new Error(message);
312
+ }
313
+ }
314
+ function parseJsonReport(output, expectedCommand) {
315
+ const parsed = JSON.parse(output);
316
+ assert(isRecord(parsed), `${expectedCommand} --json did not return an object`);
317
+ assert(parsed.command === expectedCommand, `${expectedCommand} --json returned unexpected command`);
318
+ return parsed;
319
+ }
320
+ function arrayIncludesPath(value, suffix) {
321
+ return Array.isArray(value) && value.some((item) => typeof item === "string" && item.endsWith(suffix));
322
+ }
323
+ function record(value, label) {
324
+ assert(isRecord(value), `${label} must be an object`);
325
+ return value;
326
+ }
327
+ function isRecord(value) {
328
+ return typeof value === "object" && value !== null && !Array.isArray(value);
329
+ }
330
+ main()
331
+ .then((code) => {
332
+ process.exitCode = code;
333
+ })
334
+ .catch((error) => {
335
+ console.error(error instanceof Error ? error.message : String(error));
336
+ process.exitCode = 1;
337
+ });
338
+ //# sourceMappingURL=verifyCleanCommand.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verifyCleanCommand.js","sourceRoot":"","sources":["../../../../packages/cli/src/dev/verifyCleanCommand.ts"],"names":[],"mappings":"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"}