@tiic-tech/openworkflow 0.1.1 → 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 (213) hide show
  1. package/dist/adapters/codex/src/cleanCodexAdapter.js +4 -1
  2. package/dist/adapters/codex/src/cleanCodexAdapter.js.map +1 -1
  3. package/dist/adapters/codex/src/constants.d.ts +1 -0
  4. package/dist/adapters/codex/src/constants.js +2 -0
  5. package/dist/adapters/codex/src/constants.js.map +1 -0
  6. package/dist/adapters/codex/src/generateCommands.js +14 -9
  7. package/dist/adapters/codex/src/generateCommands.js.map +1 -1
  8. package/dist/adapters/codex/src/generateSkills.js +13 -0
  9. package/dist/adapters/codex/src/generateSkills.js.map +1 -1
  10. package/dist/adapters/codex/src/generatedFiles.js +1 -1
  11. package/dist/adapters/codex/src/manifest.js +11 -2
  12. package/dist/adapters/codex/src/manifest.js.map +1 -1
  13. package/dist/adapters/codex/src/templates.d.ts +0 -1
  14. package/dist/adapters/codex/src/templates.js +0 -1
  15. package/dist/adapters/codex/src/templates.js.map +1 -1
  16. package/dist/adapters/src/registry.d.ts +20 -0
  17. package/dist/adapters/src/registry.js +81 -0
  18. package/dist/adapters/src/registry.js.map +1 -0
  19. package/dist/cli/src/commands/brief.d.ts +46 -0
  20. package/dist/cli/src/commands/brief.js +294 -0
  21. package/dist/cli/src/commands/brief.js.map +1 -0
  22. package/dist/cli/src/commands/check.d.ts +42 -0
  23. package/dist/cli/src/commands/check.js +326 -0
  24. package/dist/cli/src/commands/check.js.map +1 -0
  25. package/dist/cli/src/commands/clean.js +46 -1
  26. package/dist/cli/src/commands/clean.js.map +1 -1
  27. package/dist/cli/src/commands/context.d.ts +1 -0
  28. package/dist/cli/src/commands/context.js +471 -0
  29. package/dist/cli/src/commands/context.js.map +1 -0
  30. package/dist/cli/src/commands/doctor.js +122 -12
  31. package/dist/cli/src/commands/doctor.js.map +1 -1
  32. package/dist/cli/src/commands/draft.d.ts +1 -0
  33. package/dist/cli/src/commands/draft.js +175 -0
  34. package/dist/cli/src/commands/draft.js.map +1 -0
  35. package/dist/cli/src/commands/gitAutomation.d.ts +1 -0
  36. package/dist/cli/src/commands/gitAutomation.js +378 -0
  37. package/dist/cli/src/commands/gitAutomation.js.map +1 -0
  38. package/dist/cli/src/commands/handoff.d.ts +22 -0
  39. package/dist/cli/src/commands/handoff.js +122 -0
  40. package/dist/cli/src/commands/handoff.js.map +1 -0
  41. package/dist/cli/src/commands/init.js +52 -1
  42. package/dist/cli/src/commands/init.js.map +1 -1
  43. package/dist/cli/src/commands/inspect.d.ts +23 -0
  44. package/dist/cli/src/commands/inspect.js +157 -0
  45. package/dist/cli/src/commands/inspect.js.map +1 -0
  46. package/dist/cli/src/commands/register.d.ts +1 -0
  47. package/dist/cli/src/commands/register.js +251 -0
  48. package/dist/cli/src/commands/register.js.map +1 -0
  49. package/dist/cli/src/commands/resume.d.ts +59 -0
  50. package/dist/cli/src/commands/resume.js +280 -0
  51. package/dist/cli/src/commands/resume.js.map +1 -0
  52. package/dist/cli/src/commands/shared.js +6 -2
  53. package/dist/cli/src/commands/shared.js.map +1 -1
  54. package/dist/cli/src/commands/summaries.d.ts +1 -0
  55. package/dist/cli/src/commands/summaries.js +77 -0
  56. package/dist/cli/src/commands/summaries.js.map +1 -0
  57. package/dist/cli/src/commands/summarize.d.ts +1 -0
  58. package/dist/cli/src/commands/summarize.js +316 -0
  59. package/dist/cli/src/commands/summarize.js.map +1 -0
  60. package/dist/cli/src/commands/sync.js +135 -12
  61. package/dist/cli/src/commands/sync.js.map +1 -1
  62. package/dist/cli/src/commands/validate.js +25 -1
  63. package/dist/cli/src/commands/validate.js.map +1 -1
  64. package/dist/cli/src/dev/verifyAgentE2E.d.ts +2 -0
  65. package/dist/cli/src/dev/verifyAgentE2E.js +391 -0
  66. package/dist/cli/src/dev/verifyAgentE2E.js.map +1 -0
  67. package/dist/cli/src/dev/verifyCleanCommand.js +213 -2
  68. package/dist/cli/src/dev/verifyCleanCommand.js.map +1 -1
  69. package/dist/cli/src/dev/verifyRuntimeSurface.js +4940 -54
  70. package/dist/cli/src/dev/verifyRuntimeSurface.js.map +1 -1
  71. package/dist/cli/src/dev/verifyWorkflowE2E.js +477 -45
  72. package/dist/cli/src/dev/verifyWorkflowE2E.js.map +1 -1
  73. package/dist/cli/src/index.js +184 -6
  74. package/dist/cli/src/index.js.map +1 -1
  75. package/dist/cli/src/report.d.ts +26 -0
  76. package/dist/cli/src/report.js +17 -0
  77. package/dist/cli/src/report.js.map +1 -0
  78. package/dist/core/src/artifacts/readiness.d.ts +7 -0
  79. package/dist/core/src/artifacts/readiness.js +240 -0
  80. package/dist/core/src/artifacts/readiness.js.map +1 -0
  81. package/dist/core/src/artifacts/registry.d.ts +9 -2
  82. package/dist/core/src/artifacts/registry.js +687 -60
  83. package/dist/core/src/artifacts/registry.js.map +1 -1
  84. package/dist/core/src/commands/registry.js +1425 -146
  85. package/dist/core/src/commands/registry.js.map +1 -1
  86. package/dist/core/src/contracts/index.d.ts +1 -1
  87. package/dist/core/src/fs/index.d.ts +24 -0
  88. package/dist/core/src/fs/index.js +48 -1
  89. package/dist/core/src/fs/index.js.map +1 -1
  90. package/dist/core/src/git/autonomousSimulator.d.ts +46 -0
  91. package/dist/core/src/git/autonomousSimulator.js +163 -0
  92. package/dist/core/src/git/autonomousSimulator.js.map +1 -0
  93. package/dist/core/src/git/branchIdentity.d.ts +19 -0
  94. package/dist/core/src/git/branchIdentity.js +75 -0
  95. package/dist/core/src/git/branchIdentity.js.map +1 -0
  96. package/dist/core/src/git/draftPrPilot.d.ts +47 -0
  97. package/dist/core/src/git/draftPrPilot.js +196 -0
  98. package/dist/core/src/git/draftPrPilot.js.map +1 -0
  99. package/dist/core/src/git/localEvidenceReader.d.ts +21 -0
  100. package/dist/core/src/git/localEvidenceReader.js +142 -0
  101. package/dist/core/src/git/localEvidenceReader.js.map +1 -0
  102. package/dist/core/src/git/localGitAutomation.d.ts +68 -0
  103. package/dist/core/src/git/localGitAutomation.js +470 -0
  104. package/dist/core/src/git/localGitAutomation.js.map +1 -0
  105. package/dist/core/src/git/mergeReadinessCheckpoint.d.ts +31 -0
  106. package/dist/core/src/git/mergeReadinessCheckpoint.js +110 -0
  107. package/dist/core/src/git/mergeReadinessCheckpoint.js.map +1 -0
  108. package/dist/core/src/git/prReadySummary.d.ts +16 -0
  109. package/dist/core/src/git/prReadySummary.js +144 -0
  110. package/dist/core/src/git/prReadySummary.js.map +1 -0
  111. package/dist/core/src/git/remoteReadonlyPlanner.d.ts +60 -0
  112. package/dist/core/src/git/remoteReadonlyPlanner.js +223 -0
  113. package/dist/core/src/git/remoteReadonlyPlanner.js.map +1 -0
  114. package/dist/core/src/onboarding/agentsGuide.d.ts +32 -0
  115. package/dist/core/src/onboarding/agentsGuide.js +164 -0
  116. package/dist/core/src/onboarding/agentsGuide.js.map +1 -0
  117. package/dist/core/src/validators/validateOpenWorkflow.js +1331 -15
  118. package/dist/core/src/validators/validateOpenWorkflow.js.map +1 -1
  119. package/dist/core/src/validators/validateRepositoryContracts.js +2321 -306
  120. package/dist/core/src/validators/validateRepositoryContracts.js.map +1 -1
  121. package/dist/core/src/workflow/cleanOpenWorkflow.d.ts +2 -0
  122. package/dist/core/src/workflow/cleanOpenWorkflow.js +97 -8
  123. package/dist/core/src/workflow/cleanOpenWorkflow.js.map +1 -1
  124. package/dist/core/src/workflow/doctorOpenWorkflow.d.ts +7 -0
  125. package/dist/core/src/workflow/doctorOpenWorkflow.js +26 -0
  126. package/dist/core/src/workflow/doctorOpenWorkflow.js.map +1 -0
  127. package/dist/core/src/workflow/initOpenWorkflow.d.ts +7 -0
  128. package/dist/core/src/workflow/initOpenWorkflow.js +96 -8
  129. package/dist/core/src/workflow/initOpenWorkflow.js.map +1 -1
  130. package/dist/core/src/workflow/planningQueueResume.d.ts +105 -0
  131. package/dist/core/src/workflow/planningQueueResume.js +596 -0
  132. package/dist/core/src/workflow/planningQueueResume.js.map +1 -0
  133. package/dist/core/src/workflow/readWorkflowConfig.d.ts +6 -0
  134. package/dist/core/src/workflow/readWorkflowConfig.js +28 -0
  135. package/dist/core/src/workflow/readWorkflowConfig.js.map +1 -0
  136. package/dist/core/src/workflow/summaryHealth.d.ts +60 -0
  137. package/dist/core/src/workflow/summaryHealth.js +713 -0
  138. package/dist/core/src/workflow/summaryHealth.js.map +1 -0
  139. package/dist/core/src/workflow/syncOpenWorkflow.d.ts +22 -0
  140. package/dist/core/src/workflow/syncOpenWorkflow.js +235 -0
  141. package/dist/core/src/workflow/syncOpenWorkflow.js.map +1 -0
  142. package/package.json +2 -1
  143. package/references/artifact-authoring-templates.md +14 -12
  144. package/references/artifact-instruction-envelope.md +133 -0
  145. package/references/coder-continuous-growth-loop.md +68 -0
  146. package/references/gh-operation-governance.md +114 -0
  147. package/references/git-automation-governance.md +324 -0
  148. package/references/git-version-control-governance.md +227 -0
  149. package/references/internal-coder-protocol.md +202 -0
  150. package/references/issue-governance.md +115 -0
  151. package/references/planning-artifact-contracts.md +595 -0
  152. package/references/planning-skill-runtime-exposure.md +159 -0
  153. package/references/proto-redesign-artifact-contracts.md +217 -0
  154. package/references/proto2html-artifact-contracts.md +113 -0
  155. package/references/skill-system-lifecycle.md +198 -0
  156. package/references/validation-trust-domains.md +286 -0
  157. package/references/workflow-blueprint-runtime-alignment.md +287 -0
  158. package/schemas/atom-tasks.schema.json +101 -0
  159. package/schemas/candidate-changes.schema.json +323 -0
  160. package/schemas/current-state.schema.json +113 -0
  161. package/schemas/html-prototype.schema.json +288 -0
  162. package/schemas/openworkflow-contract.schema.json +9 -1
  163. package/schemas/proto-prompt-pack.schema.json +1333 -0
  164. package/schemas/prototype-evidence.schema.json +684 -142
  165. package/schemas/selected-change.schema.json +104 -0
  166. package/schemas/validation-target.schema.json +187 -1
  167. package/schemas/validation.schema.json +187 -1
  168. package/schemas/vision-session.schema.json +151 -0
  169. package/skills/analyze-changes/SKILL.md +92 -0
  170. package/skills/analyze-changes/agents/openai.yaml +4 -0
  171. package/skills/analyze-changes/references/analysis-protocol.md +116 -0
  172. package/skills/build-proto-prompt/SKILL.md +125 -0
  173. package/skills/build-proto-prompt/references/output-boundary.md +54 -0
  174. package/skills/build-proto-prompt/references/prompt-pack-compiler-protocol.md +80 -0
  175. package/skills/build-prototype/SKILL.md +162 -38
  176. package/skills/build-prototype/agents/openai.yaml +2 -2
  177. package/skills/build-prototype/references/philosophy-engine.md +61 -0
  178. package/skills/build-prototype/references/strategic-prompt-pack-protocol.md +365 -0
  179. package/skills/build-prototype/references/vision2prompt/01_input_contract.md +84 -0
  180. package/skills/build-prototype/references/vision2prompt/02_vision_decomposition.md +108 -0
  181. package/skills/build-prototype/references/vision2prompt/03_strategy_hypothesis_generation.md +89 -0
  182. package/skills/build-prototype/references/vision2prompt/04_product_system_extraction.md +78 -0
  183. package/skills/build-prototype/references/vision2prompt/05_prototype_prompt_schema.md +189 -0
  184. package/skills/build-prototype/references/vision2prompt/06_output_templates.md +125 -0
  185. package/skills/build-prototype/references/vision2prompt/07_quality_rubric.md +171 -0
  186. package/skills/build-validation/SKILL.md +136 -54
  187. package/skills/build-validation/references/prototype-validation-target-rubric.md +35 -0
  188. package/skills/build-validation/references/return-to-vision-gate.md +32 -0
  189. package/skills/build-vision/SKILL.md +192 -0
  190. package/skills/build-vision/references/proto-readiness-rubric.md +48 -0
  191. package/skills/build-vision/references/vision-interview-protocol.md +48 -0
  192. package/skills/coder/SKILL.md +204 -0
  193. package/skills/decompose-to-changes/SKILL.md +176 -0
  194. package/skills/decompose-to-changes/agents/openai.yaml +4 -0
  195. package/skills/decompose-to-changes/references/decomposition-protocol.md +278 -0
  196. package/skills/prompt2proto/SKILL.md +157 -0
  197. package/skills/prompt2proto/agents/openai.yaml +4 -0
  198. package/skills/prompt2proto/references/00_role_philosophy_engine.md +96 -0
  199. package/skills/prompt2proto/references/01_input_contract.md +53 -0
  200. package/skills/prompt2proto/references/02_prompt_pack_readiness.md +50 -0
  201. package/skills/prompt2proto/references/03_visual_translation_workflow.md +64 -0
  202. package/skills/prompt2proto/references/04_output_contract.md +67 -0
  203. package/skills/prompt2proto/references/05_quality_rubric.md +46 -0
  204. package/skills/proto2html/SKILL.md +136 -0
  205. package/skills/proto2html/agents/openai.yaml +4 -0
  206. package/skills/proto2html/references/proto2html-protocol.md +115 -0
  207. package/skills/run-team/SKILL.md +4 -0
  208. package/skills/select-change/SKILL.md +200 -0
  209. package/skills/select-change/agents/openai.yaml +4 -0
  210. package/skills/select-change/references/selection-protocol.md +281 -0
  211. package/skills/tune-prototype/SKILL.md +121 -0
  212. package/skills/tune-prototype/agents/openai.yaml +4 -0
  213. package/skills/tune-prototype/references/refined-prompt-pack-protocol.md +161 -0
@@ -0,0 +1,595 @@
1
+ # Planning Artifact Contracts
2
+
3
+ This reference defines the first durable planning artifacts used by
4
+ `decompose-to-changes` and `select-change`.
5
+
6
+ ## Source Of Truth Rule
7
+
8
+ `CANDIDATE_CHANGES.yaml` is the source of truth. `CANDIDATE_CHANGES.md` is a
9
+ human-readable view. If they disagree, update YAML first, then refresh the
10
+ Markdown view.
11
+
12
+ Do not delete candidate entries when selection or implementation progresses.
13
+ Update status and attach selection or completion evidence.
14
+
15
+ Queues may also carry a top-level `operations` list. Use it to audit targeted
16
+ maintenance such as adding a candidate, updating a scope, changing priority,
17
+ selecting a candidate, or marking completion.
18
+
19
+ ## Feat And Commit Cadence
20
+
21
+ Each `CANDIDATE_CHANGES.yaml` queue is a feat boundary. The top-level
22
+ `changes/<plan_id>/` folder owns the feature-sized planning source, readable
23
+ view, summary, operation log, and candidate-specific selection artifacts.
24
+
25
+ The queue boundary is intentionally smaller than a roadmap. A queue may own one
26
+ feature, bounded module, command surface, artifact family, or workflow slice. It
27
+ must not include multiple independent features or a large module family just
28
+ because the source discussion contains a deep product plan.
29
+
30
+ When planning input contains more features than the current queue should own,
31
+ record the extra features as deferred refs, usually under
32
+ `scope_control.deferred_features` in `CANDIDATE_CHANGES.yaml` and mirrored in
33
+ `SUMMARY.yaml`. Deferred refs are not candidates, do not participate in
34
+ dependencies or unlocks, and require a later `decompose-to-changes` pass before
35
+ selection or implementation.
36
+
37
+ Each candidate inside that queue is a commit-sized change. A selected candidate
38
+ should normally write its `SELECTED_CHANGE.yaml`, `ATOM_TASKS.yaml`, and
39
+ `IMPLEMENTATION_BRIEF.md` under `changes/<plan_id>/<candidate-id>-<slug>/` and
40
+ complete with one coherent git commit.
41
+
42
+ Do not create a new top-level `changes/<id>/` folder for every candidate. Open a
43
+ new top-level folder only when `decompose-to-changes` creates a new queue for a
44
+ new feat, product theme, or broad planning source.
45
+
46
+ ## Git Governance Link
47
+
48
+ Use `references/git-version-control-governance.md` as the source contract for
49
+ git and version-control boundaries. In that model:
50
+
51
+ - atom tasks are implementation checklist items
52
+ - selected changes are commit-sized units
53
+ - `CANDIDATE_CHANGES.yaml` queues are feat boundaries
54
+ - feat queues should have owning branches when they opt into branch governance
55
+ - pull requests summarize feat branches, not individual atom tasks
56
+ - merge or release is the integration boundary after review
57
+
58
+ Skills may inspect git state for planning and audit, but they must not perform
59
+ destructive or remote-impacting git operations unless the user explicitly asks
60
+ for that specific operation. Remote gh operations require separate governance.
61
+
62
+ Approved local git automation is limited to the boundaries in
63
+ `references/git-version-control-governance.md`: local feat branch handling,
64
+ one selected change to one local commit, and local `PR_READY_SUMMARY.md`
65
+ generation. Remote push, remote PR creation, Issue mutation, and merge require
66
+ separate explicit approval.
67
+
68
+ ## Issue Governance Link
69
+
70
+ Use `references/issue-governance.md` as the source contract for Issue
71
+ source-of-truth rules. Issues are intent sources, not direct selected changes.
72
+ When `gh` is unavailable or unauthorized, local issue artifacts may be tracked
73
+ in git. When the user authorizes `gh` and GitHub Issues are configured as the
74
+ source of truth, local OW artifacts should store linkage and audit evidence
75
+ rather than duplicate remote Issue bodies as authoritative text.
76
+
77
+ ## Skill Lifecycle Link
78
+
79
+ When a selected planning change touches runtime skill generation, adapter
80
+ delivery, generated `.agents/**` files, or `.openworkflow/audit/**`, read
81
+ `references/skill-system-lifecycle.md` before implementation. That reference
82
+ defines OpenWorkflow's native skill file shape, XML-like protocol block
83
+ semantics, generated-surface ownership, and drift expectations.
84
+
85
+ ## Planning Artifact Registration
86
+
87
+ Planning artifacts can appear in Agent read models only through summary-first
88
+ registration. Runtime or adapter exposure must not load full planning history
89
+ by default.
90
+
91
+ Registration roles:
92
+
93
+ - `CANDIDATE_CHANGES.yaml`: source of truth for one feat queue. Load only when
94
+ selecting, maintaining, completing, or auditing that queue.
95
+ - `SUMMARY.yaml`: default queue handoff and read-model artifact. It should name
96
+ source refs, branch boundary, candidate count, completed candidate, next
97
+ recommended candidate, high-risk report paths, validation, and unresolved
98
+ questions.
99
+ - `CHANGE_ANALYSIS.yaml`: advisory cross-queue recommendation evidence. It may
100
+ recommend a `target_plan_id` and `target_candidate_id`, but it must not
101
+ mutate queues or authorize high-risk implementation.
102
+ - `SELECTED_CHANGE.yaml`: implementation boundary for one selected candidate.
103
+ It should be loaded before `ATOM_TASKS.yaml` when executing or reviewing the
104
+ selected change.
105
+ - `ATOM_TASKS.yaml`: task breakdown for the selected candidate. It is not a
106
+ source of product scope beyond the selected change.
107
+ - `LOCAL_COMMIT_EVIDENCE.yaml`: local implementation evidence for a selected
108
+ change. It records commit hashes and validation evidence, but does not imply
109
+ remote push, PR creation, merge, or Issue mutation.
110
+ - `HIGH_RISK_DECISION_REPORT.md`: stop packet for high-risk candidates. It is
111
+ evidence, not approval.
112
+
113
+ Minimum summary fields for planning queues:
114
+
115
+ - `plan_id`
116
+ - `branch_boundary`
117
+ - `candidate_count`
118
+ - `completed_candidate_id`
119
+ - `completed_change_id`
120
+ - `next_recommended_candidate_id`
121
+ - `outputs`
122
+ - `key_dependencies`
123
+ - `risks`
124
+ - `unresolved_questions`
125
+ - `validation`
126
+
127
+ Read-model order for planning work:
128
+
129
+ 1. `SUMMARY.yaml`
130
+ 2. `HIGH_RISK_DECISION_REPORT.md` only when the next candidate is high risk
131
+ 3. `CHANGE_ANALYSIS.yaml` only when consuming a cross-queue recommendation
132
+ 4. `SELECTED_CHANGE.yaml`
133
+ 5. `ATOM_TASKS.yaml`
134
+ 6. `CANDIDATE_CHANGES.yaml` only when source truth is needed
135
+
136
+ Validators should reject malformed source artifacts, but summary freshness and
137
+ quality are separate trust signals. Use `openworkflow summaries --json` or
138
+ handoff/inspect quality fields for summary trust rather than treating
139
+ `validate` alone as proof that a summary is sufficient.
140
+
141
+ ## Agent Resume Packet Contract
142
+
143
+ `resume --json` is a read-only Agent recovery packet. It aggregates existing
144
+ trust gates and planning evidence into one startup cockpit without repairing
145
+ state, selecting candidates, updating summaries, creating commits, or changing
146
+ workflow pointers.
147
+
148
+ The JSON command must use the standard OpenWorkflow report envelope:
149
+
150
+ - `schema_version`
151
+ - `command: resume`
152
+ - `ok`
153
+ - `root`
154
+ - `data`
155
+ - `warnings`
156
+ - `errors`
157
+ - `health_errors`
158
+ - `effects`
159
+ - `next_actions`
160
+
161
+ The `data` packet should include these top-level sections:
162
+
163
+ - `resume_version`: contract version for the packet shape.
164
+ - `command_boundary`: read-only semantics, planned writes, forbidden writes,
165
+ and deferred non-goals.
166
+ - `trust`: handoff-quality and readiness signals sourced from existing
167
+ handoff, inspect, summaries, and check models.
168
+ - `workflow`: active stage, active pointers, current next command, and read
169
+ order.
170
+ - `active_queue`: the most relevant planning queue when one can be identified,
171
+ including plan id, queue path, branch boundary, queue status, selected
172
+ candidate, completed candidate, next recommended candidate, and uncertainty.
173
+ - `current_work_item`: selected candidate or atom-task context when available,
174
+ including selected-change id, status, title, risk, owned paths, atom task
175
+ path, and implementation brief path.
176
+ - `actions`: recommended next action plus allowed actions, forbidden actions,
177
+ and stop conditions derived from trust gates and queue boundaries.
178
+ - `evidence`: primary, auxiliary, comparison, and missing evidence paths.
179
+ - `git`: branch, cleanliness, dirty paths, and commit-evidence state when
180
+ available without mutation.
181
+ - `sources`: source commands and files consulted to build the packet.
182
+
183
+ Text output should be a concise human-readable rendering of the same packet:
184
+ trust status, active queue/current work item, next action, blockers, and the
185
+ smallest read order. Text output must not hide JSON-only blockers.
186
+
187
+ Read-only boundary:
188
+
189
+ - The command may read `.openworkflow/CURRENT_STATE.yaml`, summary/current-slice
190
+ artifacts, handoff/inspect/summaries/check models, planning queue summaries,
191
+ selected-change artifacts, atom tasks, and git status.
192
+ - The command must not write workflow artifacts, summarize files, queue
193
+ statuses, generated adapters, git evidence, branches, commits, or remote
194
+ state.
195
+ - The command must report uncertainty instead of selecting work when multiple
196
+ active queues compete or when queue evidence is stale.
197
+
198
+ Deferred work:
199
+
200
+ - Base aggregation and executable CLI entrypoint belong to the implementation
201
+ candidate after the contract boundary.
202
+ - Active queue scanning beyond obvious current planning evidence belongs to a
203
+ separate candidate.
204
+ - Detailed action/evidence classification belongs to a later candidate.
205
+ - Artifact lineage graph, prompt2proto strategy, provider/fallback metadata,
206
+ and a write preflight compiler are out of scope for the resume packet.
207
+
208
+ Selected-change commit gate:
209
+
210
+ - New or actively touched branch-governed queues may opt into
211
+ `queue_policy.selected_change_commit_gate: strict`.
212
+ - In strict mode, a `done` selected change must set
213
+ `completion.implementation_changed_files` to `true` or `false`.
214
+ - When `implementation_changed_files: true`, `completion.evidence` must include
215
+ a repo-relative `LOCAL_COMMIT_EVIDENCE.yaml` path for that selected change.
216
+ - When `implementation_changed_files: false`, completion must include
217
+ `commit_not_required_reason` explaining why no implementation commit is
218
+ required.
219
+ - Historical queues without the strict policy remain migration-mode artifacts
220
+ until they are touched or intentionally opted into the gate.
221
+
222
+ ## CANDIDATE_CHANGES.yaml
223
+
224
+ Purpose: hold one active planning queue for a topic, milestone, or session.
225
+
226
+ Required top-level fields:
227
+
228
+ - `schema_version`
229
+ - `contract_id`
230
+ - `contract_type: planning`
231
+ - `planning_artifact_type: candidate_changes`
232
+ - `plan_id`
233
+ - `title`
234
+ - `status`
235
+ - `source`
236
+ - `queue_policy`
237
+ - `selection_policy`
238
+ - `changes`
239
+
240
+ Optional but recommended after maintenance:
241
+
242
+ - `scope_control` when the source discussion spans multiple possible features
243
+ - `operations`
244
+
245
+ Recommended `scope_control` fields:
246
+
247
+ - `current_boundary`
248
+ - `boundary_type`
249
+ - `in_scope_rule`
250
+ - `out_of_scope_rule`
251
+ - `deferred_features`
252
+
253
+ Each deferred feature should include:
254
+
255
+ - `title`
256
+ - `reason`
257
+ - `suggested_plan_id` when a likely future queue name is clear
258
+
259
+ Each candidate change requires:
260
+
261
+ - `id`
262
+ - `status`
263
+ - `title`
264
+ - `purpose`
265
+ - `scope.includes`
266
+ - `scope.excludes`
267
+ - `owned_paths`
268
+ - `dependencies`
269
+ - `unlocks`
270
+ - `risk`
271
+ - `size`
272
+ - `validation`
273
+ - `acceptance`
274
+
275
+ Candidate statuses:
276
+
277
+ - `candidate`: captured but not ready to implement.
278
+ - `ready`: implementable when selected.
279
+ - `selected`: chosen for a concrete selected change artifact.
280
+ - `in_progress`: implementation has started.
281
+ - `done`: completed and backed by evidence.
282
+ - `blocked`: cannot proceed without a blocker resolution.
283
+ - `deferred`: intentionally postponed.
284
+ - `superseded`: replaced by another candidate.
285
+
286
+ Operation types:
287
+
288
+ - `query`
289
+ - `add`
290
+ - `update`
291
+ - `status_change`
292
+ - `split`
293
+ - `merge`
294
+ - `priority_change`
295
+ - `select`
296
+ - `complete`
297
+ - `remove`
298
+
299
+ Hard removal is discouraged. Use `superseded`, `deferred`, or `blocked` for
300
+ historical candidates. Only remove malformed candidates created in the same
301
+ uncommitted operation, and record why.
302
+
303
+ ## SELECTED_CHANGE.yaml
304
+
305
+ Purpose: preserve why one candidate was selected and define implementation
306
+ boundaries before atom tasks begin.
307
+
308
+ Required fields:
309
+
310
+ - `schema_version`
311
+ - `contract_id`
312
+ - `contract_type: planning`
313
+ - `planning_artifact_type: selected_change`
314
+ - `selected_change_id`
315
+ - `source_plan_id`
316
+ - `source_candidate_id`
317
+ - `title`
318
+ - `status`
319
+ - `selection_reason`
320
+ - `scope.includes`
321
+ - `scope.excludes`
322
+ - `owned_paths`
323
+ - `forbidden_paths`
324
+ - `acceptance`
325
+ - `validation`
326
+
327
+ The selected change must name rejected alternatives when the choice is not
328
+ obvious. Rejected alternatives should be short and should reference candidate
329
+ ids, not copy the full candidate body.
330
+
331
+ When selection consumes a cross-queue recommendation, rejected alternatives
332
+ must include both `plan_id` and `candidate_id`:
333
+
334
+ ```yaml
335
+ rejected_alternatives:
336
+ - plan_id: M68-post-proto-workflow-planning
337
+ candidate_id: H003
338
+ reason: High risk and missing a local high-risk decision report.
339
+ ```
340
+
341
+ Use a short `id` field only when the rejected candidate belongs to the same
342
+ `source_plan_id` as the selected change.
343
+
344
+ ## ATOM_TASKS.yaml
345
+
346
+ Purpose: break one selected change into focused tasks an Agent can execute
347
+ without widening scope.
348
+
349
+ Required top-level fields:
350
+
351
+ - `schema_version`
352
+ - `contract_id`
353
+ - `contract_type: planning`
354
+ - `planning_artifact_type: atom_tasks`
355
+ - `selected_change_id`
356
+ - `title`
357
+ - `status`
358
+ - `tasks`
359
+
360
+ Each atom task requires:
361
+
362
+ - `task_id`
363
+ - `title`
364
+ - `status`
365
+ - `type`
366
+ - `owned_paths`
367
+ - `done_when`
368
+
369
+ Task types:
370
+
371
+ - `read`: inspect existing context.
372
+ - `edit`: modify source artifacts.
373
+ - `verify`: run commands or checks.
374
+ - `document`: update planning or handoff artifacts.
375
+
376
+ An atom task should own one coherent area. If a task needs unrelated paths, split
377
+ it.
378
+
379
+ ## IMPLEMENTATION_BRIEF.md
380
+
381
+ Purpose: provide a low-context implementation entry for the selected change.
382
+
383
+ Required sections:
384
+
385
+ - `Goal`
386
+ - `Read First`
387
+ - `Do`
388
+ - `Do Not`
389
+ - `Owned Paths`
390
+ - `Validation`
391
+ - `Stop Conditions`
392
+
393
+ The brief should be short. It should not duplicate the entire candidate queue or
394
+ long product discussion.
395
+
396
+ ## LOCAL_COMMIT_EVIDENCE.yaml
397
+
398
+ Purpose: record the local commit evidence for one selected change without
399
+ implying any remote operation.
400
+
401
+ Required fields for new evidence files:
402
+
403
+ - `schema_version`
404
+ - `contract_id`
405
+ - `contract_type: planning`
406
+ - `planning_artifact_type: implementation_evidence`
407
+ - `source_plan_id`
408
+ - `source_candidate_id`
409
+ - `selected_change_id`
410
+ - `primary_commit`
411
+ - `validation_evidence`
412
+
413
+ Optional `coder_evidence` fields may be embedded in
414
+ `LOCAL_COMMIT_EVIDENCE.yaml` when an implementation change needs to bind
415
+ `/ow:coder` evidence beyond the guidance-only `coder_gate` state:
416
+
417
+ ```yaml
418
+ coder_evidence:
419
+ status: recorded # recorded | skipped | not_applicable
420
+ enforcement: guidance_only
421
+ preflight:
422
+ - checked owned paths and validation ladder
423
+ red_evidence:
424
+ - failing structural assertion before implementation
425
+ green_evidence:
426
+ - passing structural assertion after implementation
427
+ self_check:
428
+ - reviewed generated surfaces and trust boundaries
429
+ validation_ladder:
430
+ - npm run build
431
+ - npm run verify:runtime-surface
432
+ lessons:
433
+ - promote only repeated quality lessons into source policy
434
+ notes: Optional concise context for later Agents.
435
+ ```
436
+
437
+ `coder_evidence` is optional. Validators must accept missing coder evidence and
438
+ must reject malformed present coder evidence. Standalone `CODE_EVIDENCE.yaml`
439
+ or `CODER_EVIDENCE.yaml` is intentionally deferred to a separate future
440
+ candidate change.
441
+
442
+ Historical evidence files may use older field names such as `plan_id`,
443
+ `candidate_id`, `change_id`, and `implementation_commit`; validators accept
444
+ those during migration, but new git-automation evidence should use the source
445
+ field names above.
446
+
447
+ The owning `CANDIDATE_CHANGES.yaml` completion should reference the file in
448
+ `completion.evidence` using a repo-relative path:
449
+
450
+ ```yaml
451
+ completion:
452
+ implementation_changed_files: true
453
+ evidence:
454
+ - changes/<plan_id>/<candidate-id>-<slug>/LOCAL_COMMIT_EVIDENCE.yaml
455
+ ```
456
+
457
+ ## HIGH_RISK_DECISION_REPORT.md
458
+
459
+ Purpose: stop high-risk implementation before it starts and give the user a
460
+ concrete decision packet. Use this report when the next candidate is
461
+ `risk: high`, when a selected candidate's blast radius grows into high risk, or
462
+ when continuing would require changing trust, delivery, generated-runtime, data,
463
+ security, or architecture boundaries.
464
+
465
+ The report belongs to the queue that encountered the high-risk stop:
466
+
467
+ ```text
468
+ changes/<plan_id>/
469
+ CANDIDATE_CHANGES.yaml
470
+ CANDIDATE_CHANGES.md
471
+ SUMMARY.yaml
472
+ HIGH_RISK_DECISION_REPORT.md
473
+ ```
474
+
475
+ If a queue needs multiple high-risk reports over time, update the existing
476
+ report when it covers the same decision boundary. Create a named variant only
477
+ when the new stop covers a materially different boundary.
478
+
479
+ Required sections:
480
+
481
+ - `Trigger`: why execution stopped now.
482
+ - `Change`: candidate id, title, status, and why the candidate is high risk.
483
+ - `Concrete Risks`: specific ways implementation could damage correctness,
484
+ trust, generated surfaces, architecture, data, or user workflow.
485
+ - `Decision Options`: at least defer, design-only, narrow spike, and full
486
+ implementation when those options make sense.
487
+ - `Recommended Path`: one recommended option with reasoning.
488
+ - `Guardrails`: constraints that must hold if the user approves progress.
489
+ - `Go Criteria`: what explicit user decision is required before implementation
490
+ resumes.
491
+ - `Stop Criteria`: conditions that force another stop even after approval.
492
+ - `Validation Expectations`: commands or evidence required for any approved
493
+ follow-up.
494
+
495
+ The report is evidence, not approval. Implementation may resume only after the
496
+ user explicitly approves a concrete decision option or narrower replacement
497
+ candidate.
498
+
499
+ Queue linkage:
500
+
501
+ - Add the report path to `SUMMARY.yaml` outputs or notes.
502
+ - Append an `operations` entry with `operation_type: query` or
503
+ `operation_type: block` for the high-risk stop.
504
+ - Keep the high-risk candidate status unchanged unless the report recommends
505
+ and the user approves a status transition such as `blocked`, `deferred`, or
506
+ `superseded`.
507
+ - Do not create `SELECTED_CHANGE.yaml` for a high-risk candidate solely because
508
+ the report exists.
509
+
510
+ ## CHANGE_ANALYSIS.yaml
511
+
512
+ Purpose: compare one or more candidate queues and recommend the next `plan_id`
513
+ and `candidate_id` for `select-change` without selecting or implementing the
514
+ candidate.
515
+
516
+ Required top-level fields:
517
+
518
+ - `schema_version`
519
+ - `contract_id`
520
+ - `contract_type: planning`
521
+ - `planning_artifact_type: change_analysis`
522
+ - `analysis_id`
523
+ - `status`
524
+ - `source`
525
+ - `git_state`
526
+ - `recommendation`
527
+ - `rejected_alternatives`
528
+ - `high_risk_stop`
529
+ - `validation`
530
+
531
+ `recommendation` should include:
532
+
533
+ - `target_plan_id`
534
+ - `target_candidate_id`
535
+ - `action`
536
+ - `reason`
537
+
538
+ Allowed actions include `handoff_to_select_change`, `queue_maintenance`,
539
+ `high_risk_report`, and `commit_current_work`.
540
+
541
+ The analysis artifact is advisory. It must not create
542
+ `SELECTED_CHANGE.yaml`, mutate candidate status, or authorize high-risk
543
+ implementation. `select-change` owns selection artifacts after consuming a
544
+ recommended target.
545
+
546
+ When `select-change` consumes the recommendation, it should create selection
547
+ artifacts inside `changes/<target_plan_id>/`, re-check current readiness gates,
548
+ and copy only the decision-relevant rejected alternatives into
549
+ `SELECTED_CHANGE.yaml`. The analysis folder remains evidence for why the
550
+ cross-queue comparison happened; it is not the owning feat folder for the
551
+ selected candidate.
552
+
553
+ ## PR_READY_SUMMARY.md
554
+
555
+ Purpose: summarize a feat branch for human PR review without creating,
556
+ editing, or opening a remote pull request.
557
+
558
+ The summary belongs to the completed or review-ready queue:
559
+
560
+ ```text
561
+ changes/<plan_id>/PR_READY_SUMMARY.md
562
+ ```
563
+
564
+ Required sections:
565
+
566
+ - `Feat`: plan id, title, branch boundary, and source queue path.
567
+ - `Completed Changes`: selected change ids, candidate ids, and commit evidence
568
+ when available.
569
+ - `Deferred Or Blocked Changes`: candidates intentionally left out of the PR.
570
+ - `High-Risk Decisions`: linked reports and unresolved approvals.
571
+ - `Validation`: commands run and results.
572
+ - `Review Notes`: risks, assumptions, and follow-up queues.
573
+
574
+ The artifact is a handoff packet, not a remote operation. It must not imply
575
+ that a PR was opened, edited, pushed, merged, or approved. Any gh or GitHub
576
+ mutation must follow separate operation governance and user authorization.
577
+
578
+ ## Status Update Rules
579
+
580
+ When select-change chooses a candidate:
581
+
582
+ 1. Set candidate `status` to `selected`.
583
+ 2. Add `selection.selected_change_id`.
584
+ 3. Add concise `selection.reason`.
585
+ 4. Append an `operations` entry with `operation_type: select`.
586
+ 5. Write `SELECTED_CHANGE.yaml`, `ATOM_TASKS.yaml`, and
587
+ `IMPLEMENTATION_BRIEF.md`.
588
+
589
+ When the selected change completes:
590
+
591
+ 1. Set candidate `status` to `done`.
592
+ 2. Add `completion.completed_by_change_id`.
593
+ 3. Add evidence such as change artifacts, validation commands, or commit ids.
594
+ 4. Append an `operations` entry with `operation_type: complete`.
595
+ 5. Leave other candidates in place for future selection.