@open-agent-toolkit/cli 0.2.29 → 0.2.31

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 (87) hide show
  1. package/assets/bundle-metadata.json +1 -1
  2. package/assets/docs/cli-utilities/configuration.md +52 -1
  3. package/assets/docs/contributing/code.md +19 -7
  4. package/assets/docs/contributing/explainer-kit-verification.md +9 -1
  5. package/assets/docs/contributing/skills.md +9 -0
  6. package/assets/docs/workflows/projects/artifacts.md +5 -0
  7. package/assets/docs/workflows/projects/index.md +1 -0
  8. package/assets/docs/workflows/projects/lifecycle.md +23 -0
  9. package/assets/docs/workflows/projects/retro.md +261 -0
  10. package/assets/docs/workflows/skills/explainer-kit-providers.md +16 -5
  11. package/assets/docs/workflows/skills/explainer-kit.md +98 -38
  12. package/assets/docs/workflows/skills/index.md +6 -0
  13. package/assets/public-package-versions.json +4 -4
  14. package/assets/skills/explainer-kit/SKILL.md +33 -8
  15. package/assets/skills/explainer-kit/briefs/project-recap.md +25 -7
  16. package/assets/skills/explainer-kit/recipes/project-recap.v2.json +72 -0
  17. package/assets/skills/explainer-kit/references/contracts.md +49 -17
  18. package/assets/skills/explainer-kit/references/destination-contract.md +141 -25
  19. package/assets/skills/explainer-kit/references/extension-contract.md +19 -10
  20. package/assets/skills/explainer-kit/references/visual-authoring.md +24 -0
  21. package/assets/skills/explainer-kit/references/visual-review.md +19 -5
  22. package/assets/skills/explainer-kit/schemas/author-request.v3.schema.json +241 -0
  23. package/assets/skills/explainer-kit/schemas/publish-receipt.v2.schema.json +215 -0
  24. package/assets/skills/explainer-kit/schemas/publish-request.v2.schema.json +34 -0
  25. package/assets/skills/explainer-kit/schemas/run-request.schema.json +4 -1
  26. package/assets/skills/explainer-kit/schemas/terminal-evidence.v1.schema.json +81 -0
  27. package/assets/skills/explainer-kit/schemas/visual-review-evidence.v1.schema.json +66 -0
  28. package/assets/skills/explainer-kit/scripts/lib/catalog.mjs +109 -3
  29. package/assets/skills/explainer-kit/scripts/lib/contracts.mjs +550 -17
  30. package/assets/skills/explainer-kit/scripts/lib/durability.mjs +90 -8
  31. package/assets/skills/explainer-kit/scripts/lib/fs-safe.mjs +5 -0
  32. package/assets/skills/explainer-kit/scripts/lib/internal-references.mjs +538 -0
  33. package/assets/skills/explainer-kit/scripts/lib/package-coverage.mjs +129 -11
  34. package/assets/skills/explainer-kit/scripts/lib/publication-policy.mjs +54 -0
  35. package/assets/skills/explainer-kit/scripts/lib/recipes.mjs +2 -1
  36. package/assets/skills/explainer-kit/scripts/lib/records.mjs +139 -22
  37. package/assets/skills/explainer-kit/scripts/lib/s3-roots.mjs +353 -0
  38. package/assets/skills/explainer-kit/scripts/lib/s3-static.mjs +237 -107
  39. package/assets/skills/explainer-kit/scripts/lib/set-plan.mjs +1 -0
  40. package/assets/skills/explainer-kit/scripts/lib/terminal-evidence.mjs +157 -0
  41. package/assets/skills/explainer-kit/scripts/lib/visual-review.mjs +26 -6
  42. package/assets/skills/explainer-kit/scripts/run.mjs +1006 -144
  43. package/assets/skills/oat-explainer-kit/SKILL.md +16 -3
  44. package/assets/skills/oat-explainer-kit/references/config-contract.md +13 -8
  45. package/assets/skills/oat-explainer-kit/references/lifecycle-contract.md +50 -6
  46. package/assets/skills/oat-explainer-kit/references/migration.md +2 -1
  47. package/assets/skills/oat-explainer-kit/references/visual-review-callback.md +11 -0
  48. package/assets/skills/oat-explainer-kit/scripts/bind-project-sources.mjs +37 -15
  49. package/assets/skills/oat-explainer-kit/scripts/check-terminal-outcome.mjs +83 -0
  50. package/assets/skills/oat-explainer-kit/scripts/derive-destination.mjs +91 -0
  51. package/assets/skills/oat-explainer-kit/scripts/finalize-tracked-run.mjs +66 -10
  52. package/assets/skills/oat-explainer-kit/scripts/resolve-config.mjs +60 -21
  53. package/assets/skills/oat-explainer-kit/scripts/resolve-paths.mjs +52 -8
  54. package/assets/skills/oat-explainer-kit/scripts/run.mjs +271 -36
  55. package/assets/skills/oat-project-autonomous/references/gate-inventory.md +38 -38
  56. package/assets/skills/oat-project-complete/SKILL.md +60 -8
  57. package/assets/skills/oat-project-document/references/docs/autonomy-contract.md +38 -38
  58. package/assets/skills/oat-project-implement/SKILL.md +1 -1
  59. package/assets/skills/oat-project-implement/references/completion-and-closeout.md +28 -6
  60. package/assets/skills/oat-project-implement/references/docs/autonomy-contract.md +38 -38
  61. package/assets/skills/oat-project-pr-final/references/docs/autonomy-contract.md +38 -38
  62. package/assets/skills/oat-project-quick-start/references/docs/autonomy-contract.md +38 -38
  63. package/assets/skills/oat-project-retro/SKILL.md +310 -0
  64. package/assets/skills/oat-project-retro/references/apply-procedure.md +212 -0
  65. package/assets/skills/oat-project-retro/references/evidence-and-lanes.md +91 -0
  66. package/assets/skills/oat-project-retro/references/retro-quality-bar.md +100 -0
  67. package/assets/skills/oat-project-retro-file/SKILL.md +387 -0
  68. package/assets/templates/project-retro.md +236 -0
  69. package/dist/commands/config/index.d.ts.map +1 -1
  70. package/dist/commands/config/index.js +99 -0
  71. package/dist/commands/init/tools/shared/skill-manifest.d.ts +2 -2
  72. package/dist/commands/init/tools/shared/skill-manifest.d.ts.map +1 -1
  73. package/dist/commands/init/tools/shared/skill-manifest.js +3 -0
  74. package/dist/commands/project/archive/archive-utils.d.ts.map +1 -1
  75. package/dist/commands/project/archive/archive-utils.js +57 -7
  76. package/dist/commands/project/archive/explainer-terminal-evidence.d.ts +29 -0
  77. package/dist/commands/project/archive/explainer-terminal-evidence.d.ts.map +1 -0
  78. package/dist/commands/project/archive/explainer-terminal-evidence.js +37 -0
  79. package/dist/config/oat-config.d.ts +14 -1
  80. package/dist/config/oat-config.d.ts.map +1 -1
  81. package/dist/config/oat-config.js +42 -2
  82. package/dist/config/resolve.d.ts.map +1 -1
  83. package/dist/config/resolve.js +9 -0
  84. package/package.json +2 -2
  85. /package/assets/skills/explainer-kit/recipes/{project-recap.json → project-recap.v1.json} +0 -0
  86. /package/assets/skills/explainer-kit/schemas/{publish-receipt.schema.json → publish-receipt.v1.schema.json} +0 -0
  87. /package/assets/skills/explainer-kit/schemas/{publish-request.schema.json → publish-request.v1.schema.json} +0 -0
@@ -0,0 +1,236 @@
1
+ ---
2
+ oat_retro_project: null
3
+ oat_retro_generated: null
4
+ oat_retro_evidence_sources:
5
+ - source: project-log
6
+ status: unavailable
7
+ - source: oat-execution-learnings
8
+ status: unavailable
9
+ - source: lifecycle-artifacts
10
+ status: unavailable
11
+ - source: session-transcript
12
+ status: unavailable
13
+ oat_retro_promotions: none
14
+ oat_retro_filing: none
15
+ oat_generated: false
16
+ oat_template: true
17
+ oat_template_name: project-retro
18
+ ---
19
+
20
+ # Project Retrospective: {Project Name}
21
+
22
+ <!-- Rendered artifacts must replace oat_retro_project with a non-null project
23
+ slug and oat_retro_generated with a UTC YYYY-MM-DDTHH:MM:SSZ timestamp,
24
+ set oat_template: false, and remove oat_template_name. Record every
25
+ inspected evidence source above with status: used | unavailable. When an
26
+ evidence family is partial, split it into truthful source entries, such as
27
+ archived-review-markdown: unavailable and gate-receipts: used. Do not add
28
+ a `partial` evidence status. Derivative current-run reconnaissance
29
+ transcripts are not original project-run evidence. Remove all
30
+ brace-delimited placeholders and scaffold RP/UP item examples. -->
31
+
32
+ <!-- Keep output concise by default. Every section must add distinct
33
+ information. Prefer references to evidence over repeated chronology. For
34
+ a small project, keep core sections brief. Use subsections and tables only
35
+ for evidence-rich projects where they improve decisions. Make each
36
+ material incident understandable without opening another artifact. Use
37
+ stable evidence anchors such as project-log event IDs, artifact headings,
38
+ review paths, decision IDs, and commit IDs. Anchors supplement but never
39
+ replace explanation. -->
40
+
41
+ ## Executive Summary
42
+
43
+ {Summarize how the run went, the most important outcome, and what should change next.}
44
+
45
+ ## Evidence and Review Method
46
+
47
+ {List the durable project artifacts and session/run evidence reviewed. State
48
+ unavailable sources explicitly. Distinguish confirmed causes, hypotheses, and
49
+ inconclusive mechanisms.}
50
+
51
+ ## Outcome Snapshot
52
+
53
+ {Summarize delivered scope, verification, lifecycle outcome, and material
54
+ boundaries in a concise table or list.}
55
+
56
+ ## Current State
57
+
58
+ <!-- This is the only mutable freeform status surface. Derive it from register
59
+ fields and frontmatter rollups after generation and after every apply/file
60
+ writeback. Consumers may replace only the contents of this section, not
61
+ this heading or any other narrative. Keep it concise and include
62
+ promotions, filing, and unsettled-item state. -->
63
+
64
+ - **Promotions:** {Current promotion rollup and item state.}
65
+ - **Filing:** {Current filing rollup and item state.}
66
+ - **Unsettled items:** {Current IDs and next actions, or `None`.}
67
+
68
+ ## What Went Well
69
+
70
+ {Describe successful technical and workflow practices, grounded in evidence.}
71
+
72
+ ## Challenges and Struggles
73
+
74
+ {Own the complete incident narrative here: what happened, impact, response, and
75
+ result. Describe blockers, failed approaches, and orchestration friction.
76
+ Classify rather than blame.}
77
+
78
+ <!-- CONDITIONAL: Include both sections below when load-bearing decisions or
79
+ rejected/superseded alternatives shaped the outcome. Otherwise delete
80
+ both headings and their placeholders. -->
81
+
82
+ ## Decision Register
83
+
84
+ {Record decisions, rationale, consequences, and existing durable records.
85
+ Identify any justified missing decision records.}
86
+
87
+ ## Rejected or Superseded Alternatives
88
+
89
+ {Record alternatives that materially shaped the outcome and why they were
90
+ rejected or superseded.}
91
+
92
+ ## Where We Changed Course
93
+
94
+ {Record only the trigger, changed direction, and outcome. Do not repeat the
95
+ complete incident chronology from Challenges and Struggles.}
96
+
97
+ <!-- CONDITIONAL: Include when the project introduced reusable architecture
98
+ patterns or materially new approaches. Otherwise delete this section. -->
99
+
100
+ ## New Architecture Patterns and Approaches
101
+
102
+ {Describe reusable patterns, their boundaries, and why they worked.}
103
+
104
+ <!-- CONDITIONAL: Include when the run produced project-domain knowledge worth
105
+ preserving. Rename subsections for the domain as needed. Otherwise delete
106
+ this section. -->
107
+
108
+ ## Domain Learnings
109
+
110
+ {Abstract reusable lessons without replaying chronology. Capture domain failure
111
+ classes and correct responses.}
112
+
113
+ <!-- CONDITIONAL: Include when the evidence supports actionable guidance for
114
+ humans. Otherwise delete this section. -->
115
+
116
+ ## Gotchas for Humans
117
+
118
+ {Write future-facing instructions rather than incident summaries. List concrete
119
+ operator or contributor gotchas.}
120
+
121
+ <!-- CONDITIONAL: Include when the evidence supports actionable guidance for
122
+ autonomous agents. Otherwise delete this section. -->
123
+
124
+ ## Gotchas for Autonomous Agents
125
+
126
+ {Write future-facing instructions rather than incident summaries. List concrete
127
+ execution, evidence, monitoring, and escalation gotchas.}
128
+
129
+ ## Repo Improvements (Promotion Register)
130
+
131
+ <!-- Stable IDs: RP-NN. Type defaults: docs, agents-instruction, rule, and
132
+ decision default to Disposition: apply; code-follow-up defaults to
133
+ Disposition: file. The recorded Disposition is authoritative.
134
+
135
+ Apply item fields:
136
+ Status: proposed | approved | applied | rejected
137
+ Target: repository path
138
+ Applied-ref: commit/path after application
139
+ Disposition-note: rejection, recovery, or outcome detail
140
+
141
+ File item fields:
142
+ Status: proposed | filed | rejected | no-destination
143
+ Destination: issue URL or backlog item ID/path
144
+ Destination-receipt: full commit SHA for a local backlog destination
145
+ Remote-visibility: pushed | unpushed for a local backlog destination
146
+ Disposition-note: rejection, recovery, or outcome detail
147
+
148
+ Schema by destination type:
149
+ Local backlog + filed: Destination-receipt is a verified full commit SHA
150
+ and Remote-visibility is pushed | unpushed.
151
+ GitHub + filed: Destination is a validated issue URL,
152
+ Destination-receipt: —, and Remote-visibility: —.
153
+ Unsettled local or GitHub item: receipt fields remain —.
154
+
155
+ Consumers may mutate only Status, Applied-ref or Destination, and
156
+ Destination-receipt, Remote-visibility, Sanitized, Disposition-note, plus
157
+ the corresponding frontmatter rollup and Current State contents. IDs,
158
+ Type, Disposition, titles, proposal bodies, and all other narrative are
159
+ stable. -->
160
+
161
+ ### RP-01: {Actionable repo improvement}
162
+
163
+ - **Type:** docs
164
+ - **Disposition:** apply
165
+ - **Status:** proposed
166
+ - **Target:** {repository path}
167
+ - **Applied-ref:** —
168
+ - **Disposition-note:** —
169
+
170
+ {Rationale, evidence summary, and concrete proposed change.}
171
+
172
+ ### RP-02: {Tracker-ready repo follow-up}
173
+
174
+ - **Type:** code-follow-up
175
+ - **Disposition:** file
176
+ - **Status:** proposed
177
+ - **Destination:** —
178
+ - **Destination-receipt:** —
179
+ - **Remote-visibility:** —
180
+ - **Sanitized:** no
181
+ - **Disposition-note:** —
182
+
183
+ {Problem, evidence summary, and suggested direction.}
184
+
185
+ ## OAT Upstream Feedback (Upstream Register)
186
+
187
+ <!-- Stable IDs: UP-NN. Status: proposed | filed | rejected | no-destination.
188
+ Destination records the issue URL or backlog item ID/path. Sanitized
189
+ records whether the public-destination verification passed. Consumers may
190
+ mutate only Status, Destination, Destination-receipt, Remote-visibility,
191
+ Sanitized, Disposition-note, the filing rollup, and Current State
192
+ contents. IDs, titles, proposal bodies, and all other narrative are
193
+ stable. Local filed items require a verified full commit receipt and
194
+ pushed | unpushed visibility. GitHub filed items require a validated URL
195
+ with Destination-receipt: — and Remote-visibility: —. -->
196
+
197
+ No upstream feedback identified.
198
+
199
+ <!-- Replace the empty-state line above with items in this form:
200
+
201
+ ### UP-01: {Tracker-ready upstream feedback}
202
+
203
+ - **Status:** proposed
204
+ - **Destination:** —
205
+ - **Destination-receipt:** —
206
+ - **Remote-visibility:** —
207
+ - **Sanitized:** no
208
+ - **Disposition-note:** —
209
+
210
+ {Problem, evidence summary, and suggested direction.}
211
+ -->
212
+
213
+ <!-- Rollup derivation:
214
+ oat_retro_promotions derives only from RP items with Disposition: apply.
215
+ `none`: no apply items exist.
216
+ `proposed`: apply items exist and none are settled.
217
+ `partial`: a mix of settled and unsettled apply items exists.
218
+ `complete`: all apply items are settled.
219
+ `proposed` and `approved` are unsettled; `applied` and `rejected` are settled.
220
+ oat_retro_filing derives from all UP items plus RP items with
221
+ Disposition: file.
222
+ Each rollup is none | proposed | partial | complete and must be
223
+ computable from register fields alone. -->
224
+
225
+ <!-- CONDITIONAL: Include when unresolved work or explicit ownership boundaries
226
+ remain. Otherwise delete this section. -->
227
+
228
+ ## Remaining Boundaries and Follow-Ups
229
+
230
+ {Record unresolved boundaries, owners, and next steps without disguising them
231
+ as completed work.}
232
+
233
+ ## Reflections
234
+
235
+ {End with run-specific reflections about what the project taught, what made the
236
+ result trustworthy, and what future work should do differently.}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/config/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,mBAAmB,EAAE,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEhF,OAAO,EAEL,KAAK,aAAa,EACnB,MAAM,iCAAiC,CAAC;AAmBzC,OAAO,EAML,KAAK,SAAS,EACd,KAAK,cAAc,EAGnB,KAAK,UAAU,EAehB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAEL,KAAK,cAAc,EAEpB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAGL,KAAK,8BAA8B,EACnC,KAAK,yBAAyB,EAC/B,MAAM,kCAAkC,CAAC;AAE1C,OAAO,EACL,mCAAmC,EACnC,0BAA0B,EAC3B,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAoGpC,UAAU,yBAAyB;IACjC,mBAAmB,EAAE,CACnB,OAAO,EAAE,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC,CAAC,CAAC,KAC/C,cAAc,CAAC;IACpB,kBAAkB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACrD,aAAa,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;IACxD,cAAc,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACvE,kBAAkB,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;IAClE,mBAAmB,EAAE,CACnB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,cAAc,KACnB,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,cAAc,EAAE,CAAC,aAAa,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;IAC/D,eAAe,EAAE,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9E,mBAAmB,EAAE,CACnB,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,MAAM,CAAC,UAAU,KACnB,OAAO,CAAC,MAAM,CAAC,CAAC;IACrB,sBAAsB,EAAE,CACtB,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,EACrB,GAAG,EAAE,MAAM,CAAC,UAAU,KACnB,OAAO,CAAC,cAAc,CAAC,CAAC;IAC7B,iBAAiB,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IACzC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5C,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,aAAa,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACzE,kBAAkB,EAAE,CAClB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,yBAAyB,KAC/B,OAAO,CAAC,8BAA8B,CAAC,CAAC;IAC7C,mCAAmC,EAAE,OAAO,mCAAmC,CAAC;IAChF,0BAA0B,EAAE,OAAO,0BAA0B,CAAC;IAC9D,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC;CAC/B;AA46ED,wBAAgB,mBAAmB,CACjC,SAAS,GAAE,OAAO,CAAC,yBAAyB,CAAM,GACjD,OAAO,CAsKT"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/config/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,mBAAmB,EAAE,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEhF,OAAO,EAEL,KAAK,aAAa,EACnB,MAAM,iCAAiC,CAAC;AAmBzC,OAAO,EAML,KAAK,SAAS,EACd,KAAK,cAAc,EAGnB,KAAK,UAAU,EAehB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAEL,KAAK,cAAc,EAEpB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAGL,KAAK,8BAA8B,EACnC,KAAK,yBAAyB,EAC/B,MAAM,kCAAkC,CAAC;AAE1C,OAAO,EACL,mCAAmC,EACnC,0BAA0B,EAC3B,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAyGpC,UAAU,yBAAyB;IACjC,mBAAmB,EAAE,CACnB,OAAO,EAAE,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC,CAAC,CAAC,KAC/C,cAAc,CAAC;IACpB,kBAAkB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACrD,aAAa,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;IACxD,cAAc,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACvE,kBAAkB,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;IAClE,mBAAmB,EAAE,CACnB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,cAAc,KACnB,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,cAAc,EAAE,CAAC,aAAa,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;IAC/D,eAAe,EAAE,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9E,mBAAmB,EAAE,CACnB,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,MAAM,CAAC,UAAU,KACnB,OAAO,CAAC,MAAM,CAAC,CAAC;IACrB,sBAAsB,EAAE,CACtB,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,EACrB,GAAG,EAAE,MAAM,CAAC,UAAU,KACnB,OAAO,CAAC,cAAc,CAAC,CAAC;IAC7B,iBAAiB,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IACzC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5C,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,aAAa,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACzE,kBAAkB,EAAE,CAClB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,yBAAyB,KAC/B,OAAO,CAAC,8BAA8B,CAAC,CAAC;IAC7C,mCAAmC,EAAE,OAAO,mCAAmC,CAAC;IAChF,0BAA0B,EAAE,OAAO,0BAA0B,CAAC;IAC9D,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC;CAC/B;AAgiFD,wBAAgB,mBAAmB,CACjC,SAAS,GAAE,OAAO,CAAC,yBAAyB,CAAM,GACjD,OAAO,CAsKT"}
@@ -46,6 +46,7 @@ const KEY_ORDER = [
46
46
  'explainers.publish.s3Uri',
47
47
  'explainers.publish.publicBaseUrl',
48
48
  'explainers.publish.awsRegion',
49
+ 'explainers.publish.publicAccess',
49
50
  'explainers.publish.awsProfile',
50
51
  'git.defaultBranch',
51
52
  'projects.root',
@@ -62,6 +63,10 @@ const KEY_ORDER = [
62
63
  'workflow.archiveOnComplete',
63
64
  'workflow.createPrOnComplete',
64
65
  'workflow.postImplementSequence',
66
+ 'workflow.retro.filing.repo',
67
+ 'workflow.retro.filing.upstream',
68
+ 'workflow.retro.apply',
69
+ 'workflow.retro.upstreamRepo',
65
70
  'workflow.reviewExecutionModel',
66
71
  'workflow.autoReviewAtHillCheckpoints',
67
72
  'workflow.autoNarrowReReviewScope',
@@ -412,6 +417,17 @@ const CONFIG_CATALOG = [
412
417
  owningCommand: 'oat config set explainers.publish.awsRegion <region> --shared',
413
418
  description: 'AWS region used for explainer publishing.',
414
419
  },
420
+ {
421
+ key: 'explainers.publish.publicAccess',
422
+ group: 'Explainer Publish (shared)',
423
+ file: '.oat/config.json',
424
+ scope: 'shared repo',
425
+ type: 'public | protected',
426
+ defaultValue: 'public',
427
+ mutability: 'read/write',
428
+ owningCommand: 'oat config set explainers.publish.publicAccess <public|protected> --shared',
429
+ description: 'Declares whether published explainer URLs support anonymous access; it does not authorize publication.',
430
+ },
415
431
  {
416
432
  key: 'explainers.publish.awsProfile',
417
433
  group: 'Explainer Publish Credentials (local > user)',
@@ -544,6 +560,50 @@ const CONFIG_CATALOG = [
544
560
  owningCommand: "oat config set workflow.postImplementSequence '<legacy-or-json>'",
545
561
  description: 'Default post-implementation chaining. Legacy strings remain supported unchanged. Structured JSON uses {"preApproval":[...],"postApproval":[...]} with the canonical sequence steps. Plain get/list/dump output serializes structured values as compact JSON; get --json preserves the object value. When unset, the skill prompts. Resolution: local > shared > user > default.',
546
562
  },
563
+ {
564
+ key: 'workflow.retro.filing.repo',
565
+ group: 'Workflow Preferences (3-layer: local > shared > user)',
566
+ file: '.oat/config.local.json | .oat/config.json | ~/.oat/config.json',
567
+ scope: 'workflow',
568
+ type: 'issues | backlog | none',
569
+ defaultValue: 'unset',
570
+ mutability: 'read/write',
571
+ owningCommand: 'oat config set workflow.retro.filing.repo <issues|backlog|none>',
572
+ description: 'Default filing destination for host-repository retro items. Resolution: local > shared > user > default.',
573
+ },
574
+ {
575
+ key: 'workflow.retro.filing.upstream',
576
+ group: 'Workflow Preferences (3-layer: local > shared > user)',
577
+ file: '.oat/config.local.json | .oat/config.json | ~/.oat/config.json',
578
+ scope: 'workflow',
579
+ type: 'issues | none',
580
+ defaultValue: 'unset',
581
+ mutability: 'read/write',
582
+ owningCommand: 'oat config set workflow.retro.filing.upstream <issues|none>',
583
+ description: 'Default filing destination for upstream retro items. Resolution: local > shared > user > default.',
584
+ },
585
+ {
586
+ key: 'workflow.retro.apply',
587
+ group: 'Workflow Preferences (3-layer: local > shared > user)',
588
+ file: '.oat/config.local.json | .oat/config.json | ~/.oat/config.json',
589
+ scope: 'workflow',
590
+ type: 'auto | ask',
591
+ defaultValue: 'ask',
592
+ mutability: 'read/write',
593
+ owningCommand: 'oat config set workflow.retro.apply <auto|ask>',
594
+ description: 'Controls whether non-interactive retro runs apply approved repo promotions automatically or remain propose-only. Resolution: local > shared > user > default.',
595
+ },
596
+ {
597
+ key: 'workflow.retro.upstreamRepo',
598
+ group: 'Workflow Preferences (3-layer: local > shared > user)',
599
+ file: '.oat/config.local.json | .oat/config.json | ~/.oat/config.json',
600
+ scope: 'workflow',
601
+ type: 'owner/name repository slug',
602
+ defaultValue: 'unset',
603
+ mutability: 'read/write',
604
+ owningCommand: 'oat config set workflow.retro.upstreamRepo <owner/name>',
605
+ description: 'Repository that receives upstream retro feedback; the workflow skill supplies its ecosystem default. Resolution: local > shared > user > default.',
606
+ },
547
607
  {
548
608
  key: 'workflow.reviewExecutionModel',
549
609
  group: 'Workflow Preferences (3-layer: local > shared > user)',
@@ -884,6 +944,12 @@ function parseExplainerValue(key, rawValue, surface) {
884
944
  }
885
945
  return value.replace(/\/+$/, '');
886
946
  }
947
+ if (key === 'explainers.publish.publicAccess') {
948
+ if (value !== 'public' && value !== 'protected') {
949
+ throw new Error(`Invalid value for ${key}: expected 'public' or 'protected', got '${rawValue}'.`);
950
+ }
951
+ return value;
952
+ }
887
953
  return value;
888
954
  }
889
955
  const WORKFLOW_ENUM_VALUES = {
@@ -909,6 +975,9 @@ const WORKFLOW_ENUM_VALUES = {
909
975
  ],
910
976
  'workflow.explainers.projectExplainer': ['always', 'ask', 'never'],
911
977
  'workflow.explainers.projectRecap': ['always', 'ask', 'never'],
978
+ 'workflow.retro.filing.repo': ['issues', 'backlog', 'none'],
979
+ 'workflow.retro.filing.upstream': ['issues', 'none'],
980
+ 'workflow.retro.apply': ['auto', 'ask'],
912
981
  };
913
982
  function closedDispatchProviderValues(provider) {
914
983
  if (provider === 'codex') {
@@ -1059,6 +1128,13 @@ function parseWorkflowValue(key, rawValue) {
1059
1128
  return sequence;
1060
1129
  }
1061
1130
  }
1131
+ if (key === 'workflow.retro.upstreamRepo') {
1132
+ const normalized = rawValue.trim();
1133
+ if (!/^[A-Za-z0-9_.-]+\/[A-Za-z0-9_.-]+$/.test(normalized)) {
1134
+ throw new Error(`Invalid value for ${key}: expected an owner/name repository slug, got '${rawValue}'`);
1135
+ }
1136
+ return normalized;
1137
+ }
1062
1138
  if (key === 'workflow.gateTimeouts.code' ||
1063
1139
  key === 'workflow.gateTimeouts.artifact') {
1064
1140
  const value = Number(rawValue);
@@ -1293,6 +1369,29 @@ function applyWorkflowValue(workflow, key, value) {
1293
1369
  },
1294
1370
  };
1295
1371
  }
1372
+ if (subKey.startsWith('retro.filing.')) {
1373
+ const filingKey = subKey.slice('retro.filing.'.length);
1374
+ return {
1375
+ ...workflow,
1376
+ retro: {
1377
+ ...workflow.retro,
1378
+ filing: {
1379
+ ...workflow.retro?.filing,
1380
+ [filingKey]: value,
1381
+ },
1382
+ },
1383
+ };
1384
+ }
1385
+ if (subKey.startsWith('retro.')) {
1386
+ const retroKey = subKey.slice('retro.'.length);
1387
+ return {
1388
+ ...workflow,
1389
+ retro: {
1390
+ ...workflow.retro,
1391
+ [retroKey]: value,
1392
+ },
1393
+ };
1394
+ }
1296
1395
  return {
1297
1396
  ...workflow,
1298
1397
  [subKey]: value,
@@ -11,9 +11,9 @@ export interface PackMetadata {
11
11
  }
12
12
  export declare const PACK_METADATA: Record<string, PackMetadata>;
13
13
  export declare function resolvePackDefaultScope(packName: string): 'user' | 'project';
14
- export declare const WORKFLOW_SKILLS: readonly ['oat-cursor-cloud-projects', 'oat-explainer-kit', 'oat-project-autonomous', 'oat-project-capture', 'oat-project-clear-active', 'oat-project-complete', 'oat-project-design', 'oat-project-dispatch-subagents', 'oat-project-discover', 'oat-project-document', 'oat-project-implement', 'oat-project-import-plan', 'oat-project-new', 'oat-project-next', 'oat-project-open', 'oat-project-plan', 'oat-project-plan-writing', 'oat-project-pr-final', 'oat-project-pr-progress', 'oat-project-progress', 'oat-project-promote-spec-driven', 'oat-project-quick-start', 'oat-project-reconcile', 'oat-project-revise', 'oat-project-review-provide', 'oat-project-review-provide-remote', 'oat-project-review-receive', 'oat-project-review-receive-remote', 'oat-project-spec', 'oat-project-split', 'oat-project-summary', 'oat-repo-knowledge-index', 'oat-worktree-bootstrap', 'oat-worktree-bootstrap-auto', 'oat-wave-execute', 'oat-wave-program', 'oat-wrap-up'];
14
+ export declare const WORKFLOW_SKILLS: readonly ['oat-cursor-cloud-projects', 'oat-explainer-kit', 'oat-project-autonomous', 'oat-project-capture', 'oat-project-clear-active', 'oat-project-complete', 'oat-project-design', 'oat-project-dispatch-subagents', 'oat-project-discover', 'oat-project-document', 'oat-project-implement', 'oat-project-import-plan', 'oat-project-new', 'oat-project-next', 'oat-project-open', 'oat-project-plan', 'oat-project-plan-writing', 'oat-project-pr-final', 'oat-project-pr-progress', 'oat-project-progress', 'oat-project-promote-spec-driven', 'oat-project-quick-start', 'oat-project-reconcile', 'oat-project-retro', 'oat-project-retro-file', 'oat-project-revise', 'oat-project-review-provide', 'oat-project-review-provide-remote', 'oat-project-review-receive', 'oat-project-review-receive-remote', 'oat-project-spec', 'oat-project-split', 'oat-project-summary', 'oat-repo-knowledge-index', 'oat-worktree-bootstrap', 'oat-worktree-bootstrap-auto', 'oat-wave-execute', 'oat-wave-program', 'oat-wrap-up'];
15
15
  export declare const WORKFLOW_AGENTS: readonly ['oat-codebase-mapper.md', 'oat-phase-implementer.md', 'oat-reviewer.md'];
16
- export declare const WORKFLOW_TEMPLATES: readonly ['state.md', 'discovery.md', 'spec.md', 'design.md', 'plan.md', 'implementation.md', 'summary.md', 'project-log.md'];
16
+ export declare const WORKFLOW_TEMPLATES: readonly ['state.md', 'discovery.md', 'spec.md', 'design.md', 'plan.md', 'implementation.md', 'summary.md', 'project-log.md', 'project-retro.md'];
17
17
  export declare const WORKFLOW_SCRIPTS: readonly ['generate-oat-state.sh', 'generate-thin-index.sh', 'resolve-tracking.sh'];
18
18
  export declare const IDEA_SKILLS: readonly ['oat-idea-new', 'oat-idea-ideate', 'oat-idea-summarize', 'oat-idea-scratchpad'];
19
19
  export declare const CORE_SKILLS: readonly ['oat-docs', 'oat-doctor'];
@@ -1 +1 @@
1
- {"version":3,"file":"skill-manifest.d.ts","sourceRoot":"","sources":["../../../../../src/commands/init/tools/shared/skill-manifest.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAgBH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;CAClC;AAED,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAKtD,CAAC;AAEF,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAE5E;AAID,eAAO,MAAM,eAAe,YAC1B,2BAA2B,EAC3B,mBAAmB,EACnB,wBAAwB,EACxB,qBAAqB,EACrB,0BAA0B,EAC1B,sBAAsB,EACtB,oBAAoB,EACpB,gCAAgC,EAChC,sBAAsB,EACtB,sBAAsB,EACtB,uBAAuB,EACvB,yBAAyB,EACzB,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,0BAA0B,EAC1B,sBAAsB,EACtB,yBAAyB,EACzB,sBAAsB,EACtB,iCAAiC,EACjC,yBAAyB,EACzB,uBAAuB,EACvB,oBAAoB,EACpB,4BAA4B,EAC5B,mCAAmC,EACnC,4BAA4B,EAC5B,mCAAmC,EACnC,kBAAkB,EAClB,mBAAmB,EACnB,qBAAqB,EACrB,0BAA0B,EAC1B,wBAAwB,EACxB,6BAA6B,EAC7B,kBAAkB,EAClB,kBAAkB,EAClB,aAAa,CACL,CAAC;AAEX,eAAO,MAAM,eAAe,YAC1B,wBAAwB,EACxB,0BAA0B,EAC1B,iBAAiB,CACT,CAAC;AAEX,eAAO,MAAM,kBAAkB,YAC7B,UAAU,EACV,cAAc,EACd,SAAS,EACT,WAAW,EACX,SAAS,EACT,mBAAmB,EACnB,YAAY,EACZ,gBAAgB,CACR,CAAC;AAEX,eAAO,MAAM,gBAAgB,YAC3B,uBAAuB,EACvB,wBAAwB,EACxB,qBAAqB,CACb,CAAC;AAIX,eAAO,MAAM,WAAW,YACtB,cAAc,EACd,iBAAiB,EACjB,oBAAoB,EACpB,qBAAqB,CACb,CAAC;AAIX,eAAO,MAAM,WAAW,YAAI,UAAU,EAAE,YAAY,CAAU,CAAC;AAI/D,eAAO,MAAM,WAAW,YACtB,gBAAgB,EAChB,gCAAgC,EAChC,8BAA8B,EAC9B,kBAAkB,EAClB,gBAAgB,EAChB,oBAAoB,EACpB,oBAAoB,CACZ,CAAC;AAEX,eAAO,MAAM,YAAY,YAAI,qBAAqB,CAAU,CAAC;AAI7D,eAAO,MAAM,cAAc,YACzB,uBAAuB,EACvB,eAAe,EACf,wBAAwB,EACxB,wBAAwB,EACxB,kBAAkB,EAClB,iCAAiC,EACjC,oBAAoB,EACpB,2BAA2B,EAC3B,oBAAoB,EACpB,2BAA2B,CACnB,CAAC;AAIX,eAAO,MAAM,yBAAyB,YACpC,0BAA0B,EAC1B,kBAAkB,EAClB,+BAA+B,EAC/B,wBAAwB,CAChB,CAAC;AAEX,eAAO,MAAM,4BAA4B,YACvC,iBAAiB,EACjB,YAAY,EACZ,kBAAkB,EAClB,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,qBAAqB,CACb,CAAC;AAEX,eAAO,MAAM,0BAA0B,aAAc,CAAC;AAItD,eAAO,MAAM,iBAAiB,YAAI,gBAAgB,CAAU,CAAC;AAI7D,eAAO,MAAM,eAAe,YAC1B,SAAS,EACT,SAAS,EACT,eAAe,EACf,SAAS,EACT,YAAY,CACJ,CAAC;AAEX,eAAO,MAAM,eAAe,YAAI,wBAAwB,CAAU,CAAC"}
1
+ {"version":3,"file":"skill-manifest.d.ts","sourceRoot":"","sources":["../../../../../src/commands/init/tools/shared/skill-manifest.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAgBH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;CAClC;AAED,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAKtD,CAAC;AAEF,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAE5E;AAID,eAAO,MAAM,eAAe,YAC1B,2BAA2B,EAC3B,mBAAmB,EACnB,wBAAwB,EACxB,qBAAqB,EACrB,0BAA0B,EAC1B,sBAAsB,EACtB,oBAAoB,EACpB,gCAAgC,EAChC,sBAAsB,EACtB,sBAAsB,EACtB,uBAAuB,EACvB,yBAAyB,EACzB,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,0BAA0B,EAC1B,sBAAsB,EACtB,yBAAyB,EACzB,sBAAsB,EACtB,iCAAiC,EACjC,yBAAyB,EACzB,uBAAuB,EACvB,mBAAmB,EACnB,wBAAwB,EACxB,oBAAoB,EACpB,4BAA4B,EAC5B,mCAAmC,EACnC,4BAA4B,EAC5B,mCAAmC,EACnC,kBAAkB,EAClB,mBAAmB,EACnB,qBAAqB,EACrB,0BAA0B,EAC1B,wBAAwB,EACxB,6BAA6B,EAC7B,kBAAkB,EAClB,kBAAkB,EAClB,aAAa,CACL,CAAC;AAEX,eAAO,MAAM,eAAe,YAC1B,wBAAwB,EACxB,0BAA0B,EAC1B,iBAAiB,CACT,CAAC;AAEX,eAAO,MAAM,kBAAkB,YAC7B,UAAU,EACV,cAAc,EACd,SAAS,EACT,WAAW,EACX,SAAS,EACT,mBAAmB,EACnB,YAAY,EACZ,gBAAgB,EAChB,kBAAkB,CACV,CAAC;AAEX,eAAO,MAAM,gBAAgB,YAC3B,uBAAuB,EACvB,wBAAwB,EACxB,qBAAqB,CACb,CAAC;AAIX,eAAO,MAAM,WAAW,YACtB,cAAc,EACd,iBAAiB,EACjB,oBAAoB,EACpB,qBAAqB,CACb,CAAC;AAIX,eAAO,MAAM,WAAW,YAAI,UAAU,EAAE,YAAY,CAAU,CAAC;AAI/D,eAAO,MAAM,WAAW,YACtB,gBAAgB,EAChB,gCAAgC,EAChC,8BAA8B,EAC9B,kBAAkB,EAClB,gBAAgB,EAChB,oBAAoB,EACpB,oBAAoB,CACZ,CAAC;AAEX,eAAO,MAAM,YAAY,YAAI,qBAAqB,CAAU,CAAC;AAI7D,eAAO,MAAM,cAAc,YACzB,uBAAuB,EACvB,eAAe,EACf,wBAAwB,EACxB,wBAAwB,EACxB,kBAAkB,EAClB,iCAAiC,EACjC,oBAAoB,EACpB,2BAA2B,EAC3B,oBAAoB,EACpB,2BAA2B,CACnB,CAAC;AAIX,eAAO,MAAM,yBAAyB,YACpC,0BAA0B,EAC1B,kBAAkB,EAClB,+BAA+B,EAC/B,wBAAwB,CAChB,CAAC;AAEX,eAAO,MAAM,4BAA4B,YACvC,iBAAiB,EACjB,YAAY,EACZ,kBAAkB,EAClB,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,qBAAqB,CACb,CAAC;AAEX,eAAO,MAAM,0BAA0B,aAAc,CAAC;AAItD,eAAO,MAAM,iBAAiB,YAAI,gBAAgB,CAAU,CAAC;AAI7D,eAAO,MAAM,eAAe,YAC1B,SAAS,EACT,SAAS,EACT,eAAe,EACf,SAAS,EACT,YAAY,CACJ,CAAC;AAEX,eAAO,MAAM,eAAe,YAAI,wBAAwB,CAAU,CAAC"}
@@ -39,6 +39,8 @@ export const WORKFLOW_SKILLS = [
39
39
  'oat-project-promote-spec-driven',
40
40
  'oat-project-quick-start',
41
41
  'oat-project-reconcile',
42
+ 'oat-project-retro',
43
+ 'oat-project-retro-file',
42
44
  'oat-project-revise',
43
45
  'oat-project-review-provide',
44
46
  'oat-project-review-provide-remote',
@@ -68,6 +70,7 @@ export const WORKFLOW_TEMPLATES = [
68
70
  'implementation.md',
69
71
  'summary.md',
70
72
  'project-log.md',
73
+ 'project-retro.md',
71
74
  ];
72
75
  export const WORKFLOW_SCRIPTS = [
73
76
  'generate-oat-state.sh',
@@ -1 +1 @@
1
- {"version":3,"file":"archive-utils.d.ts","sourceRoot":"","sources":["../../../../src/commands/project/archive/archive-utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"archive-utils.d.ts","sourceRoot":"","sources":["../../../../src/commands/project/archive/archive-utils.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,7 @@ import { CliError } from '../../../errors/cli-error.js';
7
7
  import { copyDirectory, copySingleFile, dirExists, ensureDir, fileExists, } from '../../../fs/io.js';
8
8
  import { loadExplainerPackageCoverage } from './explainer-package-coverage.js';
9
9
  import { loadExplainerSourceBacklinks, } from './explainer-source-backlinks.js';
10
+ import { loadExplainerTerminalEvidence } from './explainer-terminal-evidence.js';
10
11
  const execFileAsync = promisify(execFileCallback);
11
12
  export const ARCHIVE_SNAPSHOT_METADATA_FILENAME = '.oat-archive-source.json';
12
13
  /**
@@ -564,6 +565,25 @@ async function readVerifiedRunMode(runRoot) {
564
565
  }
565
566
  return request.mode;
566
567
  }
568
+ async function verifyProjectRecapTerminalEvidence(runRoot, manifest, expected) {
569
+ if (!['built-needs-review', 'failed'].includes(manifest.outcome)) {
570
+ return null;
571
+ }
572
+ try {
573
+ const terminalEvidence = await loadExplainerTerminalEvidence();
574
+ const verified = await terminalEvidence.readTerminalEvidenceFile(runRoot, {
575
+ manifest,
576
+ ...(expected && {
577
+ expectedBytes: expected.bytes,
578
+ expectedHash: expected.hash,
579
+ }),
580
+ });
581
+ return { bytes: verified.bytes, hash: verified.hash };
582
+ }
583
+ catch {
584
+ throw new CliError('Selected project recap requires valid confined terminal evidence before archival.');
585
+ }
586
+ }
567
587
  async function loadVerifiedProjectRecap(projectPath, projectRecapRun) {
568
588
  const sourceRunRoot = await resolveSelectedProjectRecapRun(projectPath, projectRecapRun);
569
589
  const manifestContents = await readFile(join(sourceRunRoot, 'manifest.json'), 'utf8');
@@ -571,9 +591,6 @@ async function loadVerifiedProjectRecap(projectPath, projectRecapRun) {
571
591
  if (manifest.recipe.id !== 'project-recap') {
572
592
  throw new CliError('Selected project recap manifest recipe must be exactly `project-recap`.');
573
593
  }
574
- if (manifest.outcome === 'built-needs-review') {
575
- throw new CliError('Selected project recap is built-needs-review and requires a passing visual review before archival.');
576
- }
577
594
  const verifiedArtifactCount = await verifyProjectRecapImmutableHashes(sourceRunRoot, manifest);
578
595
  const runMode = await readVerifiedRunMode(sourceRunRoot);
579
596
  const packageCoverage = await loadExplainerPackageCoverage();
@@ -605,11 +622,29 @@ async function loadVerifiedProjectRecap(projectPath, projectRecapRun) {
605
622
  artifact.hash !== manifest.immutableHashes[artifact.renderedPath])) {
606
623
  throw new CliError('Selected project recap artifact hashes do not match the immutable package.');
607
624
  }
625
+ const terminalEvidence = await verifyProjectRecapTerminalEvidence(sourceRunRoot, manifest);
626
+ const exactCoverage = packageCoverage;
627
+ if (typeof exactCoverage.permissibleRunPackagePaths !== 'function' ||
628
+ typeof exactCoverage.enforceRunPackageInventory !== 'function') {
629
+ throw new CliError('Bundled explainer package coverage does not provide the exact run inventory.');
630
+ }
631
+ try {
632
+ await exactCoverage.enforceRunPackageInventory(sourceRunRoot, manifest, {
633
+ includeTerminalEvidence: terminalEvidence !== null,
634
+ });
635
+ }
636
+ catch {
637
+ throw new CliError('Selected project recap package inventory is invalid.');
638
+ }
608
639
  return {
609
640
  sourceRunRoot,
610
641
  manifestContents,
611
642
  manifest,
612
643
  verifiedArtifactCount,
644
+ terminalEvidence,
645
+ packagePaths: exactCoverage.permissibleRunPackagePaths(manifest, {
646
+ includeTerminalEvidence: terminalEvidence !== null,
647
+ }),
613
648
  };
614
649
  }
615
650
  export async function verifySelectedProjectRecapForArchive(projectPath, projectRecapRun) {
@@ -621,25 +656,40 @@ async function exportSelectedProjectRecap(options, snapshotName, dependencies) {
621
656
  return null;
622
657
  }
623
658
  const verified = await loadVerifiedProjectRecap(options.projectPath, selectedRun);
624
- const { sourceRunRoot, manifestContents: sourceManifestContents, manifest: sourceManifest, } = verified;
659
+ const { sourceRunRoot, manifestContents: sourceManifestContents, terminalEvidence: sourceTerminalEvidence, packagePaths, } = verified;
625
660
  const exportRoot = join(options.repoRoot, '.oat', 'repo', 'reference', 'project-recaps', snapshotName);
626
661
  if (await pathExists(exportRoot)) {
627
662
  throw new CliError(`Project recap export destination \`${exportRoot}\` already exists; refusing to overwrite it.`);
628
663
  }
629
664
  const temporaryRoot = `${exportRoot}.tmp-${randomUUID()}`;
630
665
  const makeDir = dependencies.ensureDir ?? ensureDir;
631
- const copyProjectDirectory = dependencies.copyDirectory ?? copyDirectory;
666
+ const copyFile = dependencies.copySingleFile ?? copySingleFile;
632
667
  const removePath = dependencies.removePath ??
633
668
  (async (target, removeOptions) => rm(target, removeOptions));
634
669
  const renamePath = dependencies.renamePath ?? rename;
635
670
  await makeDir(dirname(exportRoot));
636
671
  try {
637
- await copyProjectDirectory(sourceRunRoot, temporaryRoot);
672
+ for (const relativePath of packagePaths) {
673
+ const destination = join(temporaryRoot, relativePath);
674
+ await makeDir(dirname(destination));
675
+ await copyFile(join(sourceRunRoot, relativePath), destination);
676
+ }
638
677
  const stagedManifestContents = await readFile(join(temporaryRoot, 'manifest.json'), 'utf8');
639
678
  if (stagedManifestContents !== sourceManifestContents) {
640
679
  throw new CliError('Selected project recap manifest changed while staging the export.');
641
680
  }
642
- const verifiedArtifactCount = await verifyProjectRecapImmutableHashes(temporaryRoot, sourceManifest);
681
+ const stagedManifest = await parseProjectRecapManifest(stagedManifestContents);
682
+ const verifiedArtifactCount = await verifyProjectRecapImmutableHashes(temporaryRoot, stagedManifest);
683
+ const stagedTerminalEvidence = await verifyProjectRecapTerminalEvidence(temporaryRoot, stagedManifest, sourceTerminalEvidence ?? undefined);
684
+ const exactCoverage = (await loadExplainerPackageCoverage());
685
+ try {
686
+ await exactCoverage.enforceRunPackageInventory(temporaryRoot, stagedManifest, {
687
+ includeTerminalEvidence: stagedTerminalEvidence !== null,
688
+ });
689
+ }
690
+ catch {
691
+ throw new CliError('Staged project recap package inventory is invalid.');
692
+ }
643
693
  await renamePath(temporaryRoot, exportRoot);
644
694
  return {
645
695
  sourceRunRoot,
@@ -0,0 +1,29 @@
1
+ declare const TERMINAL_EVIDENCE_VERSION = "explainer-kit.terminal-evidence/v1";
2
+ export interface ExplainerTerminalEvidence {
3
+ TERMINAL_EVIDENCE_VERSION: typeof TERMINAL_EVIDENCE_VERSION;
4
+ assertTerminalEvidence: (evidence: unknown, context: {
5
+ manifest: unknown;
6
+ }) => unknown;
7
+ readTerminalEvidenceFile: (runRoot: string, context: {
8
+ manifest: unknown;
9
+ expectedBytes?: Uint8Array;
10
+ expectedHash?: string;
11
+ }) => Promise<{
12
+ evidence: unknown;
13
+ bytes: Buffer;
14
+ hash: string;
15
+ }>;
16
+ writeTerminalEvidence: (run: {
17
+ runId: string;
18
+ slug: string;
19
+ runRoot: string;
20
+ }, input: {
21
+ outcome: string;
22
+ manifest: unknown;
23
+ reasons: unknown[];
24
+ evidenceDisposition: string;
25
+ }) => Promise<string>;
26
+ }
27
+ export declare function loadExplainerTerminalEvidence(): Promise<ExplainerTerminalEvidence>;
28
+ export {};
29
+ //# sourceMappingURL=explainer-terminal-evidence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"explainer-terminal-evidence.d.ts","sourceRoot":"","sources":["../../../../src/commands/project/archive/explainer-terminal-evidence.ts"],"names":[],"mappings":"AAMA,QAAA,MAAM,yBAAyB,uCAAuC,CAAC;AAEvE,MAAM,WAAW,yBAAyB;IACxC,yBAAyB,EAAE,OAAO,yBAAyB,CAAC;IAC5D,sBAAsB,EAAE,CACtB,QAAQ,EAAE,OAAO,EACjB,OAAO,EAAE;QAAE,QAAQ,EAAE,OAAO,CAAA;KAAE,KAC3B,OAAO,CAAC;IACb,wBAAwB,EAAE,CACxB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE;QACP,QAAQ,EAAE,OAAO,CAAC;QAClB,aAAa,CAAC,EAAE,UAAU,CAAC;QAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,KACE,OAAO,CAAC;QAAE,QAAQ,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACjE,qBAAqB,EAAE,CACrB,GAAG,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EACrD,KAAK,EAAE;QACL,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,OAAO,CAAC;QAClB,OAAO,EAAE,OAAO,EAAE,CAAC;QACnB,mBAAmB,EAAE,MAAM,CAAC;KAC7B,KACE,OAAO,CAAC,MAAM,CAAC,CAAC;CACtB;AAID,wBAAgB,6BAA6B,IAAI,OAAO,CAAC,yBAAyB,CAAC,CAGlF"}
@@ -0,0 +1,37 @@
1
+ import { join } from 'node:path';
2
+ import { pathToFileURL } from 'node:url';
3
+ import { CliError } from '../../../errors/cli-error.js';
4
+ import { resolveAssetsRoot } from '../../../fs/assets.js';
5
+ const TERMINAL_EVIDENCE_VERSION = 'explainer-kit.terminal-evidence/v1';
6
+ let cachedTerminalEvidence;
7
+ export function loadExplainerTerminalEvidence() {
8
+ cachedTerminalEvidence ??= loadGeneratedTerminalEvidence();
9
+ return cachedTerminalEvidence;
10
+ }
11
+ async function loadGeneratedTerminalEvidence() {
12
+ const assetsRoot = await resolveAssetsRoot();
13
+ const skillRoot = join(assetsRoot, 'skills', 'explainer-kit');
14
+ let contract;
15
+ let records;
16
+ try {
17
+ [contract, records] = await Promise.all([
18
+ import(pathToFileURL(join(skillRoot, 'scripts', 'lib', 'terminal-evidence.mjs')).href),
19
+ import(pathToFileURL(join(skillRoot, 'scripts', 'lib', 'records.mjs')).href),
20
+ ]);
21
+ }
22
+ catch {
23
+ throw new CliError('Bundled explainer terminal evidence could not be loaded.', 2);
24
+ }
25
+ if (contract.TERMINAL_EVIDENCE_VERSION !== TERMINAL_EVIDENCE_VERSION ||
26
+ typeof contract.assertTerminalEvidence !== 'function' ||
27
+ typeof contract.readTerminalEvidenceFile !== 'function' ||
28
+ typeof records.writeTerminalEvidence !== 'function') {
29
+ throw new CliError(`Bundled assets must provide ${TERMINAL_EVIDENCE_VERSION} validation and writing.`, 2);
30
+ }
31
+ return {
32
+ TERMINAL_EVIDENCE_VERSION,
33
+ assertTerminalEvidence: contract.assertTerminalEvidence,
34
+ readTerminalEvidenceFile: contract.readTerminalEvidenceFile,
35
+ writeTerminalEvidence: records.writeTerminalEvidence,
36
+ };
37
+ }