@open-agent-toolkit/cli 0.2.58 → 0.2.62

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 (114) hide show
  1. package/assets/agents/oat-phase-implementer.md +27 -4
  2. package/assets/agents/oat-reviewer.md +25 -14
  3. package/assets/bundle-metadata.json +1 -1
  4. package/assets/docs/cli-utilities/configuration.md +16 -0
  5. package/assets/docs/cli-utilities/workflow-gates.md +91 -6
  6. package/assets/docs/contributing/skills.md +27 -5
  7. package/assets/docs/provider-sync/commands.md +23 -0
  8. package/assets/docs/reference/cli-reference.md +10 -3
  9. package/assets/docs/reference/oat-directory-structure.md +1 -0
  10. package/assets/docs/workflows/ideas/index.md +1 -1
  11. package/assets/docs/workflows/index.md +1 -0
  12. package/assets/docs/workflows/projects/artifacts.md +24 -3
  13. package/assets/docs/workflows/projects/autonomy.md +5 -2
  14. package/assets/docs/workflows/projects/dispatch-ceiling.md +43 -7
  15. package/assets/docs/workflows/projects/hill-checkpoints.md +21 -0
  16. package/assets/docs/workflows/projects/implementation-execution.md +10 -2
  17. package/assets/docs/workflows/projects/lifecycle.md +128 -10
  18. package/assets/docs/workflows/projects/pr-flow.md +2 -0
  19. package/assets/docs/workflows/projects/reviews.md +1 -1
  20. package/assets/docs/workflows/projects/state-machine.md +20 -0
  21. package/assets/docs/workflows/skills/index.md +2 -1
  22. package/assets/public-package-versions.json +4 -4
  23. package/assets/skills/oat-brainstorm/SKILL.md +61 -12
  24. package/assets/skills/oat-docs/SKILL.md +13 -8
  25. package/assets/skills/oat-doctor/SKILL.md +3 -3
  26. package/assets/skills/oat-pjm-review-backlog/SKILL.md +2 -2
  27. package/assets/skills/oat-project-autonomous/SKILL.md +14 -9
  28. package/assets/skills/oat-project-autonomous/references/gate-inventory.md +59 -38
  29. package/assets/skills/oat-project-capture/SKILL.md +2 -2
  30. package/assets/skills/oat-project-design/SKILL.md +10 -5
  31. package/assets/skills/oat-project-discover/SKILL.md +15 -9
  32. package/assets/skills/oat-project-document/SKILL.md +11 -1
  33. package/assets/skills/oat-project-document/references/docs/autonomy-contract.md +59 -38
  34. package/assets/skills/oat-project-implement/SKILL.md +3 -3
  35. package/assets/skills/oat-project-implement/references/completion-and-closeout.md +149 -24
  36. package/assets/skills/oat-project-implement/references/dispatch-and-dry-run.md +14 -8
  37. package/assets/skills/oat-project-implement/references/docs/autonomy-contract.md +59 -38
  38. package/assets/skills/oat-project-implement/references/phase-execution.md +16 -1
  39. package/assets/skills/oat-project-implement/references/plan-and-resume.md +19 -1
  40. package/assets/skills/oat-project-import-plan/SKILL.md +75 -6
  41. package/assets/skills/oat-project-lite/SKILL.md +467 -0
  42. package/assets/skills/oat-project-lite/references/docs/autonomy-contract.md +331 -0
  43. package/assets/skills/oat-project-next/SKILL.md +54 -11
  44. package/assets/skills/oat-project-plan/SKILL.md +42 -5
  45. package/assets/skills/oat-project-plan-writing/SKILL.md +100 -3
  46. package/assets/skills/oat-project-pr-final/SKILL.md +33 -7
  47. package/assets/skills/oat-project-pr-final/references/docs/autonomy-contract.md +59 -38
  48. package/assets/skills/oat-project-pr-progress/SKILL.md +3 -3
  49. package/assets/skills/oat-project-progress/SKILL.md +27 -3
  50. package/assets/skills/oat-project-promote-spec-driven/SKILL.md +3 -1
  51. package/assets/skills/oat-project-quick-start/SKILL.md +29 -4
  52. package/assets/skills/oat-project-quick-start/references/docs/autonomy-contract.md +59 -38
  53. package/assets/skills/oat-project-review-provide/SKILL.md +37 -11
  54. package/assets/skills/oat-project-review-provide-remote/SKILL.md +12 -5
  55. package/assets/skills/oat-project-summary/SKILL.md +27 -3
  56. package/assets/templates/plan-lite.md +165 -0
  57. package/assets/templates/plan.md +1 -1
  58. package/assets/templates/state.md +5 -2
  59. package/dist/commands/gate/index.d.ts.map +1 -1
  60. package/dist/commands/gate/index.js +102 -8
  61. package/dist/commands/init/index.d.ts.map +1 -1
  62. package/dist/commands/init/index.js +16 -1
  63. package/dist/commands/project/dispatch-ceiling/index.d.ts.map +1 -1
  64. package/dist/commands/project/dispatch-ceiling/index.js +10 -1
  65. package/dist/commands/project/index.d.ts.map +1 -1
  66. package/dist/commands/project/index.js +2 -0
  67. package/dist/commands/project/new/index.d.ts +3 -2
  68. package/dist/commands/project/new/index.d.ts.map +1 -1
  69. package/dist/commands/project/new/index.js +2 -1
  70. package/dist/commands/project/new/scaffold.d.ts +5 -3
  71. package/dist/commands/project/new/scaffold.d.ts.map +1 -1
  72. package/dist/commands/project/new/scaffold.js +38 -10
  73. package/dist/commands/project/promote/index.d.ts +2 -0
  74. package/dist/commands/project/promote/index.d.ts.map +1 -0
  75. package/dist/commands/project/promote/index.js +1 -0
  76. package/dist/commands/project/promote/promote.d.ts +47 -0
  77. package/dist/commands/project/promote/promote.d.ts.map +1 -0
  78. package/dist/commands/project/promote/promote.js +322 -0
  79. package/dist/commands/project/split/run.d.ts.map +1 -1
  80. package/dist/commands/project/split/run.js +8 -1
  81. package/dist/commands/project/validate-plan/index.d.ts.map +1 -1
  82. package/dist/commands/project/validate-plan/index.js +25 -1
  83. package/dist/commands/project/validate-plan/validate-plan.d.ts +8 -0
  84. package/dist/commands/project/validate-plan/validate-plan.d.ts.map +1 -1
  85. package/dist/commands/project/validate-plan/validate-plan.js +49 -0
  86. package/dist/commands/remove/skill/remove-skill.d.ts.map +1 -1
  87. package/dist/commands/remove/skill/remove-skill.js +10 -1
  88. package/dist/commands/shared/frontmatter.d.ts +32 -1
  89. package/dist/commands/shared/frontmatter.d.ts.map +1 -1
  90. package/dist/commands/shared/frontmatter.js +93 -0
  91. package/dist/commands/state/generate.d.ts.map +1 -1
  92. package/dist/commands/state/generate.js +23 -0
  93. package/dist/commands/status/index.d.ts.map +1 -1
  94. package/dist/commands/status/index.js +8 -1
  95. package/dist/commands/sync/apply.d.ts.map +1 -1
  96. package/dist/commands/sync/apply.js +40 -6
  97. package/dist/commands/sync/index.d.ts.map +1 -1
  98. package/dist/commands/sync/index.js +11 -17
  99. package/dist/commands/sync/sync.types.d.ts +6 -6
  100. package/dist/commands/sync/sync.types.d.ts.map +1 -1
  101. package/dist/commands/tools/shared/pack-manifest.d.ts.map +1 -1
  102. package/dist/commands/tools/shared/pack-manifest.js +2 -0
  103. package/dist/config/resolve.d.ts +16 -0
  104. package/dist/config/resolve.d.ts.map +1 -1
  105. package/dist/config/resolve.js +16 -8
  106. package/dist/engine/execute-plan.d.ts.map +1 -1
  107. package/dist/engine/execute-plan.js +6 -0
  108. package/dist/manifest/index.d.ts +2 -1
  109. package/dist/manifest/index.d.ts.map +1 -1
  110. package/dist/manifest/index.js +1 -1
  111. package/dist/manifest/manager.d.ts +40 -0
  112. package/dist/manifest/manager.d.ts.map +1 -1
  113. package/dist/manifest/manager.js +35 -0
  114. package/package.json +2 -2
@@ -38,6 +38,27 @@ Semantics:
38
38
  - Empty list: checkpoint after every phase boundary, but only after implementation has confirmed the choice and written `oat_plan_hill_phases: []` into `plan.md`.
39
39
  - Explicit list: checkpoint only after completing the named phases (`p01`, `p04`, etc).
40
40
 
41
+ ### Lite checkpoint bypass
42
+
43
+ Lite projects have no HiLL checkpoints. `oat-project-implement` resolves
44
+ `oat_workflow_mode` from project state before any checkpoint field read, and
45
+ when the mode is `lite` it resolves checkpoint state as `none` without reading
46
+ or interpreting `oat_plan_hill_phases`. An empty list cannot represent lite's
47
+ policy, because for every other mode an empty list means "checkpoint after every
48
+ phase". `oat-project-implement`'s Lite checkpoint bypass writes:
49
+
50
+ ```yaml
51
+ oat_auto_review_at_hill_checkpoints: false # lite: no checkpoints
52
+ ```
53
+
54
+ The workflow preference prompt, the standard checkpoint prompt, and the
55
+ auto-review preference prompt are all skipped in both interactive and autonomous
56
+ runs. Only HiLL approval pauses are absent — the root-owned per-phase review and
57
+ the final review remain required.
58
+
59
+ The rest of this section applies to `spec-driven`, `quick`, and `import`
60
+ projects.
61
+
41
62
  On the first implementation run, `oat-project-implement` must summarize every plan phase, state the total phase count and final phase ID, and then ask an explicit three-option checkpoint question:
42
63
 
43
64
  - Stop after each phase
@@ -250,8 +250,11 @@ for another.
250
250
 
251
251
  Resolution and policy outcomes are explicit:
252
252
 
253
- - A null resolution persists `allowed/no_gate` for the current implementation
254
- basis.
253
+ - A `not_configured` resolution persists `allowed/no_gate` for the current
254
+ implementation basis; a null, missing, or unrecognized resolver result fails
255
+ closed as unresolved instead.
256
+ - A gate the project disabled persists `allowed/configured` with
257
+ `disposition: project_disabled` and never launches.
255
258
  - A configured passing review persists `allowed/passed` after any eligible
256
259
  review receive is durably completed.
257
260
  - `warn` persists `allowed/warned`; `prompt` proceeds only after explicit
@@ -423,6 +426,11 @@ For a plan-declared parallel group, the root:
423
426
  Containment, ownership, base, or fixture-readiness failure in smoke mode aborts
424
427
  the run. It never authorizes replacement or sequential degradation.
425
428
 
429
+ Lite plans never take this path. A lite `plan.md` must contain exactly one phase
430
+ and declare no parallel groups, so lite implementation is always sequential;
431
+ `oat project validate-plan` enforces both rules. Work that needs more than one
432
+ phase should promote to quick rather than declare a parallel group.
433
+
426
434
  ## Synced projects in worktrees
427
435
 
428
436
  A tracked `.oat/projects/synced/<project>.json` record lets every repository
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  title: Lifecycle
3
- description: 'End-to-end phase flow from discovery through completion: spec-driven, quick, and import paths.'
3
+ description: 'End-to-end phase flow from discovery through completion: spec-driven, quick, lite, and import paths.'
4
4
  ---
5
5
 
6
6
  # Lifecycle
@@ -27,9 +27,9 @@ Full spec-driven design supports three interaction modes: collaborative, selecti
27
27
 
28
28
  ## Quick Look
29
29
 
30
- - What it does: explains the end-to-end lifecycle for tracked OAT projects, including alternate quick and import lanes.
30
+ - What it does: explains the end-to-end lifecycle for tracked OAT projects, including alternate quick, lite, and import lanes.
31
31
  - When to use it: when you need the actual project execution model, not just a high-level overview of workflow mode.
32
- - Primary entry points: `oat-project-new`, `oat-project-quick-start`, `oat-project-import-plan`, `oat-project-implement`
32
+ - Primary entry points: `oat-project-new`, `oat-project-quick-start`, `oat-project-lite`, `oat-project-import-plan`, `oat-project-implement`
33
33
 
34
34
  ## Lifecycle Map
35
35
 
@@ -42,6 +42,10 @@ flowchart LR
42
42
  DOC --> C["Complete"]
43
43
  ```
44
44
 
45
+ This map shows the spec-driven default. The quick, lite, import, and capture
46
+ lanes each skip part of it — see [Lane diagrams](#lane-diagrams) below. Lite in
47
+ particular has no discovery, spec, or design step at all.
48
+
45
49
  ## Post-implementation flow
46
50
 
47
51
  Implementation closeout has one authoritative order:
@@ -56,9 +60,10 @@ Implementation closeout has one authoritative order:
56
60
 
57
61
  The configured exit gate is independent from the mandatory lifecycle review,
58
62
  root-owned phase reviews, and optional `oat_phase_review_gate`. It must reach an
59
- allowed and fresh disposition before pre-approval work starts. A null
60
- configuration is recorded explicitly as `allowed/no_gate`; it is not inferred
61
- from missing state.
63
+ allowed and fresh disposition before pre-approval work starts. A
64
+ `not_configured` resolution is recorded explicitly as `allowed/no_gate`; it is
65
+ not inferred from missing state, and a null, missing, or unrecognized resolver
66
+ result fails closed as unresolved instead.
62
67
 
63
68
  After implementation closeout finishes:
64
69
 
@@ -72,6 +77,37 @@ After implementation closeout finishes:
72
77
  - After revision tasks complete, state returns to `pr_open`
73
78
  5. **Complete** (`oat-project-complete`) — accepts any phase status (`pr_open`, `complete`, `in_progress`), auto-refreshes `summary.md` before closeout when needed, and archives when selected by the workflow preference or completion prompt
74
79
 
80
+ ### Project-recap gate (non-lite)
81
+
82
+ The final-closeout orchestrator owns one project-recap gate. It runs after the
83
+ final code review has passed and after any configured pre-approval summary and
84
+ documentation steps, but before final HiLL approval. It neither replaces nor
85
+ repeats the final review, and the stored order of the other pre-approval steps
86
+ is preserved.
87
+
88
+ Recap intent resolves through `oat-explainer-kit`. A fresh `project-recap`
89
+ manifest for the current completed implementation is reused rather than
90
+ regenerated — fresh means it names recipe `project-recap`, belongs to this
91
+ project, has a terminal outcome, and its recorded source hashes match the
92
+ current approved inputs. A present-but-incomplete, wrong-recipe, or stale
93
+ manifest does not qualify.
94
+
95
+ Recap outcomes are reported, not blocking: `failed` and `built-not-durable` are
96
+ recorded as warnings and never block final approval, completion reporting, or
97
+ later PR steps. The selected or attempted outcome and run path are included in
98
+ the implementation completion report, and `summary.md` carries a single
99
+ `Explainer Outcome` section when it exists.
100
+
101
+ **Lite skips this gate entirely.** Lite sets `PROJECT_RECAP_REACHABLE=false` and
102
+ does not resolve recap intent, inspect recap runs, invoke `oat-explainer-kit`,
103
+ or run the terminal-outcome guard. It proceeds from the required reviews through
104
+ its stored optional steps to `pr` and sequence completion.
105
+
106
+ Lite mode collapses the default pre-approval sequence to PR creation only.
107
+ `oat-project-pr-final` builds the body directly from the lite plan and
108
+ `implementation.md`; summary and documentation remain explicit lite opt-ins,
109
+ and retro is not added to the lite closeout sequence.
110
+
75
111
  ### Completion archive behavior
76
112
 
77
113
  On completion, OAT treats archive handling as an explicit closeout choice:
@@ -166,7 +202,9 @@ When `workflow.autoReviewAtHillCheckpoints` is enabled or `plan.md` frontmatter
166
202
  ### Phase-review setup during planning
167
203
 
168
204
  Spec-driven, quick, and import planning run one shared setup after stable phase
169
- IDs exist and before the plan artifact review. The target probe qualifies only
205
+ IDs exist and before the plan artifact review. Lite omits this planning-time
206
+ setup and prompt, while its built-in implementation phase and final reviews
207
+ remain required. The target probe qualifies only
170
208
  an explicitly configured, enabled, and available review target, then offers all
171
209
  phases, selected phases, or disabled. Existing explicit
172
210
  `oat_phase_review_gate` values are preserved unchanged without re-prompting.
@@ -213,6 +251,13 @@ See [Implementation Execution](implementation-execution.md) for the full executi
213
251
  4. `oat-project-review-provide` / `oat-project-pr-final`
214
252
  5. Optional `oat-project-promote-spec-driven` to backfill spec-driven lifecycle artifacts in-place
215
253
 
254
+ ### Lite lane diagram
255
+
256
+ 1. `oat-project-lite` runs one batched interview, authors a single-phase `plan.md` with validation criteria, and pauses once for approval
257
+ 2. Implement: `oat-project-implement` runs the single phase without HiLL checkpoint prompts
258
+ 3. Pass the mandatory final review, then route directly to `oat-project-pr-final`
259
+ 4. Optional `oat project promote <project-path> --to quick` when the work no longer fits one sitting
260
+
216
261
  ### Import lane diagram
217
262
 
218
263
  1. `oat-project-import-plan` (checks inherited git state before import scaffolding so sync-generated or unrelated dirty files do not silently roll into project bookkeeping)
@@ -268,6 +313,75 @@ still read as compatibility capped-policy input, but new quick-start selections
268
313
  should use the dispatch-policy names, including explicit `Uncapped` and
269
314
  `Inherit Host Defaults`.
270
315
 
316
+ ### Lite lane
317
+
318
+ ```mermaid
319
+ flowchart LR
320
+ L["Lite interview\n(one batched round)"] --> P["Single-phase plan\n(one approval)"]
321
+ P --> I["Implement (oat-project-implement)"]
322
+ I --> R["Final review"] --> PR["PR (default closeout)"]
323
+ P -->|Scope grows| Q["Promote to Quick"]
324
+ ```
325
+
326
+ Lite keeps planning and validation in `plan.md`. The interview selects a
327
+ `minimal`, `product`, `technical`, or `both` content shape and records the
328
+ rationale. Product Behavior is required for user-visible changes; Technical
329
+ Design is required for cross-module, data/state-format, or consumed-contract
330
+ changes. It has no separate discovery, spec, or design artifact, skips
331
+ implementation HiLL prompts, and routes a passed final review directly to PR
332
+ creation. Summary and documentation run only when enabled through the
333
+ lite-specific post-implementation sequence.
334
+
335
+ Each task chooses evidence proportionate to its risk instead of requiring one
336
+ test-first recipe. Behavioral changes need a proof that fails without the
337
+ change; refactors default to characterization-first when existing coverage is
338
+ insufficient; documentation-only work may use formatting, link, spelling, or
339
+ build checks. UI changes require visual proof. In autonomous runs, available
340
+ computer-use capability performs that proof; otherwise execution stops at an
341
+ explicit proof boundary.
342
+
343
+ ### Promoting a lite project to quick
344
+
345
+ When lite work outgrows one sitting, `oat project promote <project-path> --to quick`
346
+ converts it in place. Each artifact has a different fate: the authored lite plan
347
+ is **moved** to `references/lite-plan.md`, a new `discovery.md` is **derived**
348
+ from its five core sections plus any adaptive Product Behavior and Technical
349
+ Design, a **fresh** quick template takes over the `plan.md` path, and `state.md`
350
+ is **rewritten** to quick mode.
351
+
352
+ ```mermaid
353
+ flowchart LR
354
+ subgraph Before
355
+ LPLAN["plan.md\nfive core sections plus adaptive\nProduct Behavior / Technical Design"]
356
+ LSTATE["state.md\noat_workflow_mode: lite"]
357
+ end
358
+
359
+ CMD["oat project promote\n--to quick"]
360
+
361
+ subgraph After
362
+ DISC["discovery.md\nderived from the lite plan\noat_ready_for: oat-project-quick-start"]
363
+ REF["references/lite-plan.md\noriginal lite plan, preserved"]
364
+ QPLAN["plan.md\nfresh quick-start template"]
365
+ QSTATE["state.md\noat_workflow_mode: quick\noat_phase: discovery (complete)\noat_ready_for: oat-project-quick-start"]
366
+ end
367
+
368
+ LPLAN --> CMD
369
+ LSTATE --> CMD
370
+ CMD -->|derive| DISC
371
+ CMD -->|move| REF
372
+ CMD -->|scaffold| QPLAN
373
+ CMD -->|rewrite| QSTATE
374
+ ```
375
+
376
+ The project slug, directory, and branch are untouched, so history and any open
377
+ work continue uninterrupted. `oat_ready_for` is stamped on **both** `discovery.md`
378
+ and `state.md`; the quick-start recommender reads artifact readiness, so
379
+ consumers must preserve both. Promotion refuses rather than half-applying: a
380
+ non-lite project, an existing `references/lite-plan.md`, invalid authored
381
+ sections, an unresolved scope, or an unreadable template each return a stable
382
+ categorical `reason` and exit non-zero. See
383
+ [CLI Reference](../../reference/cli-reference.md) for the full refusal contract.
384
+
271
385
  ### Import lane
272
386
 
273
387
  ```mermaid
@@ -303,6 +417,10 @@ Quick lane progression:
303
417
 
304
418
  `discovery.md` -> [`design.md` (optional lightweight)] -> `plan.md` -> `implementation.md`
305
419
 
420
+ Lite lane progression:
421
+
422
+ `plan.md` -> `implementation.md` -> `pr/*.md` (`summary.md` and documentation are opt-in)
423
+
306
424
  Import lane progression:
307
425
 
308
426
  `references/imported-plan.md` -> `plan.md` -> `implementation.md` (`spec.md`/`design.md` optional)
@@ -359,15 +477,15 @@ actionable `oat pjm init` stop instead of scaffolding implicitly. See
359
477
 
360
478
  ### Seeding a new project from a brainstorm
361
479
 
362
- When the brainstorming destination is "promote to a new OAT project", the dispatcher confirms a project slug and a mode (`quick` vs `spec-driven`) with the user, runs `oat project new <slug> --mode <mode>` to scaffold the project, and writes the new project's `discovery.md` directly from the brainstorming payload — Initial Request, Solution Space with approaches considered, Chosen Direction, Key Decisions, Open Questions. It writes `discovery.md` only (never a partial `design.md`), so the design phase keeps its full collaborative cadence and consumes the brainstorm's architectural intent from discovery's Solution Space and Chosen Direction sections during approach reaffirmation. The dispatcher stops with a pointer to `oat-project-quick-start` or `oat-project-design` — it deliberately does not auto-chain into the next phase, so the user makes that transition consciously.
480
+ When the brainstorming destination is "promote to a new OAT project", the dispatcher confirms a project slug and one of three modes: `lite`, `quick`, or `spec-driven`. For Quick and Spec-Driven projects, it runs `oat project new <slug> --mode <mode>` and writes `discovery.md` directly from the brainstorming payload — Initial Request, Solution Space with approaches considered, Chosen Direction, Key Decisions, and Open Questions. It writes only `discovery.md` (never a partial `design.md`), then points to `oat-project-quick-start` or `oat-project-design` without auto-chaining. For Lite projects, it instead seeds the five sections in `plan.md`, leaves `discovery.md` and `design.md` absent, and points to `oat-project-lite`.
363
481
 
364
- This is a parallel entry path into the Spec-Driven and Quick lanes, not a new lane: the resulting project follows the normal lane it was scaffolded into. The brainstorm-as-seed step is what changes — the user arrives at `oat-project-quick-start` (or `oat-project-design`) with discovery already populated rather than starting from a blank discovery template.
482
+ This is a parallel entry path into all three lanes, not a new lane. Quick and Spec-Driven users arrive at `oat-project-quick-start` or `oat-project-design` with discovery already populated; Lite users arrive at `oat-project-lite` with the single-phase plan already seeded.
365
483
 
366
484
  ### Folding back into an active project
367
485
 
368
486
  When `oat-brainstorm` fires while a project is active, it offers a 3-way picker before any pack-filtered destination shows up:
369
487
 
370
- - **Related to the project** → fold the synthesized brainstorming content back into the most-specific upstream artifact (`design.md` if it exists, otherwise `discovery.md`), commit immediately, and print a handoff prompt for the right plan-authoring skill (`oat-project-plan` for spec-driven, `oat-project-quick-start` for quick, `oat-project-revise` when an open PR exists). The fold-back commit is safety-gated: a preflight `git status --porcelain -- "$ARTIFACT_PATH"` checks for dirty state, staging is exactly `git add -- "$ARTIFACT_PATH"` (never `-A`, never globs), and the handoff prompt only prints after the scoped commit succeeds.
488
+ - **Related to the project** → for Lite, fold the synthesis into `plan.md` immediately above `## Phase 1` and hand off to `oat-project-lite`; for Quick and Spec-Driven, use the most-specific upstream artifact (`design.md` if it exists, otherwise `discovery.md`) and hand off to `oat-project-quick-start` or `oat-project-plan`. Any mode with an open PR hands off to `oat-project-revise`. The fold-back commit is safety-gated: a preflight `git status --porcelain -- "$ARTIFACT_PATH"` checks for dirty state, staging is exactly `git add -- "$ARTIFACT_PATH"` (never `-A`, never globs), and the handoff prompt only prints after the scoped commit succeeds.
371
489
  - **Independent of the project** → the active project is acknowledged but doesn't constrain the picker; brainstorm routes through its standard pack-filtered terminal-state options (new project, backlog item, idea, doc-to-path, inline).
372
490
  - **Related but supplementary** → write a brainstorming reference file at `.oat/projects/<scope>/<project>/brainstorming/YYYY-MM-DD-<topic>.md`, alongside `pr/` and `reviews/`. No lifecycle artifact is touched.
373
491
 
@@ -17,10 +17,12 @@ Expected artifacts:
17
17
  - Required (all modes): `plan.md`
18
18
  - Required (spec-driven mode): `spec.md`, `design.md`
19
19
  - Optional (quick/import): `spec.md`, `design.md`
20
+ - Not expected (lite): `discovery.md`, `spec.md`, or `design.md`
20
21
  - Recommended (quick mode): `discovery.md`
21
22
  - Recommended (import mode): `references/imported-plan.md`
22
23
  - Recommended: `implementation.md` final summary
23
24
  - Recommended: `summary.md` — pr-final treats it as the primary source for the PR Summary section and automatically refreshes it first when missing or stale
25
+ - Lite source row: `oat-project-pr-final` uses the plan's Summary, Decisions, and Validation Criteria plus the `implementation.md` Final Summary; it does not create `summary.md` unless lite closeout explicitly opts in
24
26
  - Required gate for final PR: review table final row should be `passed`
25
27
 
26
28
  ## Output
@@ -173,7 +173,7 @@ This feature is opt-in and disabled by default (missing or `enabled: false`). Fo
173
173
 
174
174
  Generated planning and analysis artifacts have a separate review loop from code/phase reviews.
175
175
 
176
- For plans, `oat-project-plan`, `oat-project-quick-start`, and `oat-project-import-plan` run a bounded `plan.md` artifact review before marking the plan ready for implementation. The loop dispatches `oat-reviewer` in structured-output artifact mode with `scope: plan`, applies unambiguous Critical and Important artifact-local fixes, offers Medium and Minor fixes, and re-runs until clean or the retry bound is exhausted. A clean result records the `plan` row in the plan's `## Reviews` table as `passed`.
176
+ For plans, `oat-project-plan`, `oat-project-quick-start`, `oat-project-lite`, and `oat-project-import-plan` run a bounded `plan.md` artifact review before marking the plan ready for implementation. The loop dispatches `oat-reviewer` in structured-output artifact mode with `scope: plan`, applies unambiguous Critical and Important artifact-local fixes, offers Medium and Minor fixes, and re-runs until clean or the retry bound is exhausted. A clean result records the `plan` row in the plan's `## Reviews` table as `passed`.
177
177
 
178
178
  For analysis artifacts, `oat-docs-analyze` and `oat-agent-instructions-analyze` run a bounded accuracy review after writing their severity-rated artifacts. The reviewer checks cited evidence, severity, and recommendations before the matching apply workflow consumes the artifact. The analysis loop updates tracking metadata to mark the artifact verified.
179
179
 
@@ -32,8 +32,14 @@ flowchart TD
32
32
  FA --> FC["Fixes completed"]
33
33
  FC --> PASSED["Review passed"]
34
34
  PASSED --> I
35
+
36
+ LITE["Lite: batched interview\n(no discovery/spec/design)"] -. entry point .-> P
35
37
  ```
36
38
 
39
+ The solid chain is the spec-driven progression. Lite enters at **Plan in
40
+ progress** and never sets `oat_phase` to `discovery`, `spec`, or `design`;
41
+ quick and import projects also skip part of the leading chain.
42
+
37
43
  ## Phase status values
38
44
 
39
45
  `oat_phase_status` in `state.md`:
@@ -65,6 +71,20 @@ Typical progression:
65
71
  12. Revision loop (optional): `pr_open` → revise → `in_progress` → implement → `pr_open`
66
72
  13. Complete
67
73
 
74
+ Lite progression:
75
+
76
+ 1. Plan in progress (`oat_workflow_mode: lite`, `oat_phase: plan`)
77
+ 2. Ready for implement (one approval; no discovery, spec, or design states)
78
+ 3. Implement in progress (single phase, no HiLL checkpoint pauses)
79
+ 4. Implement complete (final review passed)
80
+ 5. PR open (`pr_open`) — lite closeout routes straight to `oat-project-pr-final`
81
+ 6. Complete
82
+
83
+ A lite project that outgrows one sitting can move to the quick chain with `oat
84
+ project promote <project-path> --to quick`, which flips `oat_workflow_mode` to
85
+ `quick` and sets `oat_phase: discovery` with `oat_phase_status: complete`. See
86
+ [Lifecycle](lifecycle.md#promoting-a-lite-project-to-quick).
87
+
68
88
  ## Review progression
69
89
 
70
90
  In `plan.md` Reviews table:
@@ -18,7 +18,7 @@ Use this section when you want to choose the right OAT skill for a task. If you
18
18
 
19
19
  ## Key Skills by Use Case
20
20
 
21
- - Start a new tracked project: `oat-project-new` or `oat-project-quick-start` (quick start accepts a project name plus optional description; if you omit the description it should ask before discovery begins)
21
+ - Start a new tracked project: `oat-project-new`, `oat-project-quick-start`, or `oat-project-lite` for a single-sitting change with one batched interview and one approval (quick start accepts a project name plus optional description; if you omit the description it should ask before discovery begins)
22
22
  - Resume an existing project: `oat-project-open` and `oat-project-progress`
23
23
  - Execute a ready plan: `oat-project-implement`
24
24
  - Import an existing plan: `oat-project-import-plan`
@@ -58,6 +58,7 @@ Use this section when you want to choose the right OAT skill for a task. If you
58
58
 
59
59
  - `oat-project-new`
60
60
  - `oat-project-quick-start`
61
+ - `oat-project-lite`
61
62
  - `oat-project-import-plan`
62
63
  - `oat-project-promote-spec-driven`
63
64
  - `oat-project-open`
@@ -1,6 +1,6 @@
1
1
  {
2
- "cli": "0.2.58",
3
- "docs-config": "0.2.58",
4
- "docs-theme": "0.2.58",
5
- "docs-transforms": "0.2.58"
2
+ "cli": "0.2.62",
3
+ "docs-config": "0.2.62",
4
+ "docs-theme": "0.2.62",
5
+ "docs-transforms": "0.2.62"
6
6
  }
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: oat-brainstorm
3
- version: 1.3.5
3
+ version: 1.3.6
4
4
  description: Use when the user explicitly invokes the `brainstorm` verb, including `/oat-brainstorm`, "let's brainstorm", "brainstorm this", "can we brainstorm X", or "help me brainstorm X". For ambiguous exploratory phrasing ("I've been thinking", "what if", "help me think through"), do NOT auto-enter; respond conversationally and offer mode only after ≥2 sustained exploratory turns. Do NOT use for review, debug, PR, status, implementation, or active-workflow questions.
5
5
  disable-model-invocation: false
6
6
  user-invocable: true
@@ -233,7 +233,7 @@ ACTIVE_PROJECT_PR_STATUS=""
233
233
  if [ -n "$ACTIVE_PROJECT" ] && [ -f "$ACTIVE_PROJECT/state.md" ]; then
234
234
  ACTIVE_PROJECT_VALID="true"
235
235
  # Read state.md frontmatter — extract:
236
- # oat_workflow_mode → ACTIVE_PROJECT_MODE (e.g., "spec-driven", "quick")
236
+ # oat_workflow_mode → ACTIVE_PROJECT_MODE (e.g., "spec-driven", "quick", "lite")
237
237
  # oat_phase → ACTIVE_PROJECT_PHASE (e.g., "discovery", "design", "plan", "implement")
238
238
  # oat_pr_status → ACTIVE_PROJECT_PR_STATUS (e.g., "none", "open", "closed")
239
239
  fi
@@ -396,8 +396,8 @@ The payload is staged in memory only — it is not persisted between conversatio
396
396
  - Capture as new idea → confirm slug.
397
397
  - Extend existing idea → confirm which idea (slug or path).
398
398
  - Doc-to-path → confirm path.
399
- - Promote to new project → confirm slug + workflow mode (`quick` vs `spec-driven`, with skill proposing a default based on the chosen direction and scope signals).
400
- - Active-project fold-back → confirm which artifact (`design.md` if exists, else `discovery.md`; user signal can override toward `discovery.md` for foundational changes).
399
+ - Promote to new project → confirm slug + workflow mode (`lite`, `quick`, or `spec-driven`, with skill proposing a default based on the chosen direction and scope signals).
400
+ - Active-project fold-back → for lite confirm `plan.md`; otherwise confirm which artifact (`design.md` if exists, else `discovery.md`; user signal can override toward `discovery.md` for foundational changes).
401
401
  - Active-project reference file → confirm filename (default `YYYY-MM-DD-<topic>.md`).
402
402
 
403
403
  - **`none`** (currently `Inline only` and `Summarize idea directly`): no per-field confirmation at this layer. For `Inline only`, write the closing summary directly. For `Summarize idea directly`, hand off — the downstream `oat-idea-summarize` surfaces its own summary for accept/refine review.
@@ -505,13 +505,50 @@ End mode assertion when the backlog-add hands control back.
505
505
 
506
506
  #### 9g — Promote to new OAT project
507
507
 
508
- The slug and workflow mode (`quick` vs `spec-driven`) were confirmed at step 8. Run:
508
+ The slug and workflow mode (`lite`, `quick`, or `spec-driven`) were confirmed at
509
+ step 8. Run:
509
510
 
510
511
  ```bash
511
512
  oat project new <slug> --mode <mode>
512
513
  ```
513
514
 
514
- This scaffolds the project directory under `.oat/projects/<scope>/<slug>/` with the standard core files (state.md, discovery.md, etc.).
515
+ This scaffolds the project directory under `.oat/projects/<scope>/<slug>/` with
516
+ the files owned by the selected mode.
517
+
518
+ **Lite branch:** When mode is `lite`, use and preserve `<project>/plan.md` as
519
+ the canonical artifact. Fill its `Summary`, `Decisions`, `Assumptions`, `Out of
520
+ Scope`, and `Validation Criteria` sections from the synthesized payload without
521
+ replacing an already populated section or the scaffolded `## Phase 1`. Do not
522
+ create, write, or complete `discovery.md` or `design.md`. Set the project state
523
+ to plan/in-progress with `oat_ready_for: oat-project-lite`, print the
524
+ `oat-project-lite` handoff, and stop.
525
+
526
+ Use this branch contract to validate the lite scaffold before the handoff:
527
+
528
+ ```bash
529
+ # BEGIN LITE PROJECT PROMOTION CONTRACT
530
+ if [ "$PROMOTION_MODE" = "lite" ]; then
531
+ LITE_PLAN_PATH="$PROMOTED_PROJECT/plan.md"
532
+ if [ ! -f "$LITE_PLAN_PATH" ]; then
533
+ mkdir -p "$PROMOTED_PROJECT"
534
+ printf '%s\n' '# Plan' '' '## Summary' '' '## Decisions' '' \
535
+ '## Assumptions' '' '## Out of Scope' '' '## Validation Criteria' '' \
536
+ '## Phase 1' > "$LITE_PLAN_PATH"
537
+ fi
538
+ if [ -e "$PROMOTED_PROJECT/discovery.md" ]; then
539
+ echo "oat: lite promotion must not create discovery.md" >&2
540
+ exit 64
541
+ fi
542
+ NEXT_SKILL="oat-project-lite"
543
+ else
544
+ LITE_PLAN_PATH=""
545
+ NEXT_SKILL="oat-project-quick-start-or-design"
546
+ fi
547
+ # END LITE PROJECT PROMOTION CONTRACT
548
+ ```
549
+
550
+ **Quick/spec-driven branch:** Only for those two modes, continue with the
551
+ discovery flow below.
515
552
 
516
553
  Then **write a field-filled `discovery.md`** at `<project>/discovery.md` using the synthesized payload:
517
554
 
@@ -536,7 +573,7 @@ Print a pointer to the next skill, e.g.:
536
573
 
537
574
  **Stop here. Do NOT inline-execute the next phase.** The deliberate transition is the point — the user runs the next skill at their own pace.
538
575
 
539
- End mode assertion.
576
+ End mode assertion after the selected branch stops.
540
577
 
541
578
  #### 9h — Active-project router (3-way picker)
542
579
 
@@ -556,14 +593,25 @@ The 3-way router fires once per session. After convergence resumes (e.g., the us
556
593
 
557
594
  #### 9i — Active project: fold-back to upstream artifact
558
595
 
559
- Uniform across spec-driven and quick modes. Differs only in which plan-authoring skill the handoff prompt addresses (resolved by `ACTIVE_PROJECT_MODE` and `ACTIVE_PROJECT_PR_STATUS`).
596
+ Uniform across spec-driven, quick, and lite modes. Differs only in which plan-authoring skill the handoff prompt addresses (resolved by `ACTIVE_PROJECT_MODE` and `ACTIVE_PROJECT_PR_STATUS`).
560
597
 
561
598
  **Step 1 — Pick upstream artifact.** Prefer the most-specific existing one:
562
599
 
600
+ - For lite, always select `<ACTIVE_PROJECT>/plan.md`. Append `## Brainstorming Update` immediately above `## Phase 1`; lite has no discovery or design artifact.
563
601
  - `<ACTIVE_PROJECT>/design.md` if it exists (any mode — quick lightweight design counts).
564
602
  - Otherwise `<ACTIVE_PROJECT>/discovery.md`.
565
603
  - The user's signal during the conversation can override toward `discovery.md` even when `design.md` exists ("this is foundational" → discovery; "this is a design refinement" → design).
566
604
 
605
+ Use this executable artifact-selection contract before confirming the path:
606
+
607
+ ```bash
608
+ # BEGIN LITE FOLD-BACK CONTRACT
609
+ if [ "$ACTIVE_PROJECT_MODE" = "lite" ]; then
610
+ ARTIFACT_PATH="$ACTIVE_PROJECT/plan.md"
611
+ fi
612
+ # END LITE FOLD-BACK CONTRACT
613
+ ```
614
+
567
615
  Confirm the chosen artifact with the user (minimal confirmation per `references/destinations.md`). Set `ARTIFACT_PATH` to the absolute path.
568
616
 
569
617
  **Persistence invariant:** shared and local project artifacts remain ordinary
@@ -602,7 +650,7 @@ beside another dirty project file must take Step 4.
602
650
  ## Brainstorming Update: YYYY-MM-DD — <topic>
603
651
  ```
604
652
 
605
- Section body contains: `chosenDirection` (with rationale), key decisions (extracted from the conversation), and a transcript appendix (`transcriptSessionNote`). Optionally include `openQuestions` and `nextSteps` if surfaced.
653
+ Section body contains: `chosenDirection` (with rationale), key decisions (extracted from the conversation), and a transcript appendix (`transcriptSessionNote`). Optionally include `openQuestions` and `nextSteps` if surfaced. In lite mode, insert this section above `## Phase 1` in `plan.md` rather than appending after the task plan.
606
654
 
607
655
  2. Persist **only** the artifact under the scope guard:
608
656
 
@@ -621,7 +669,7 @@ beside another dirty project file must take Step 4.
621
669
 
622
670
  For non-synced projects, use the explicit `--` filename form. **Never `git add -A`. Never directory globs.** Other working-tree paths are not touched by this commit. For synced projects, `FOLD_BACK_COMMIT_SHA` comes from the push JSON rather than the parent branch.
623
671
 
624
- 3. `<artifact-basename>` is `design.md` or `discovery.md` depending on which was chosen. `<project-name>` is the active project's slug.
672
+ 3. `<artifact-basename>` is `plan.md` for lite, otherwise `design.md` or `discovery.md` depending on which was chosen. `<project-name>` is the active project's slug.
625
673
 
626
674
  4. If the guarded persistence succeeded → proceed to step 5 (handoff prompt).
627
675
 
@@ -695,7 +743,8 @@ Resolve the handoff target by `ACTIVE_PROJECT_MODE` and `ACTIVE_PROJECT_PR_STATU
695
743
  | ----------- | ---------------------------- | ------------------------- |
696
744
  | spec-driven | none / closed | `oat-project-plan` |
697
745
  | quick | none / closed | `oat-project-quick-start` |
698
- | either | open (`oat_pr_status: open`) | `oat-project-revise` |
746
+ | lite | none / closed | `oat-project-lite` |
747
+ | any mode | open (`oat_pr_status: open`) | `oat-project-revise` |
699
748
 
700
749
  Print the handoff prompt template, substituting `<skill-name>`, `<artifact>`, `<hash>`, and `<subject>` from the actual branch commit or synced push receipt:
701
750
 
@@ -771,6 +820,6 @@ End mode assertion when the split handoff completes or reports its own blocker.
771
820
  - ✅ Each handoff branch (9a-9k) reads the correct downstream `SKILL.md` path and enters at the documented step. Project promotion writes `discovery.md` only — never `design.md` — and does not auto-chain into the next phase.
772
821
  - ✅ Doc-to-path validation handles all four cases: path-is-directory, parent-missing (with explicit out-of-repo confirmation), file-already-exists (overwrite or rename), unwritable (surface OS error).
773
822
  - ✅ Fold-back persistence safety contract honored: preflight `git status --porcelain -- "$ARTIFACT_PATH"` runs before any artifact mutation; clean → append + exact-path branch commit for shared/local or validated `oat project push --json` for synced; dirty → three-option picker (persist-prior-first / mix / abort-to-reference-file); handoff prompt prints only after the scope-appropriate receipt succeeds.
774
- - ✅ Handoff target for fold-back resolves correctly per `oat_workflow_mode` + `oat_pr_status`: `oat-project-plan` (spec-driven, no/closed PR) / `oat-project-quick-start` (quick, no/closed PR) / `oat-project-revise` (either mode, open PR).
823
+ - ✅ Handoff target for fold-back resolves correctly per `oat_workflow_mode` + `oat_pr_status`: `oat-project-plan` (spec-driven, no/closed PR) / `oat-project-quick-start` (quick, no/closed PR) / `oat-project-lite` (lite, no/closed PR) / `oat-project-revise` (any mode, open PR).
775
824
  - ✅ Active-project 3-way router (related / independent / supplementary) fires before the standard pack-filtered picker when both `WORKFLOWS_INSTALLED == "true"` and `ACTIVE_PROJECT_VALID == "true"`.
776
825
  - ✅ Skill validates cleanly under `pnpm oat:validate-skills` (frontmatter contract, allowed-tools, mode-assertion structure).
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: oat-docs
3
- version: 1.0.1
3
+ version: 1.0.2
4
4
  description: Use when a user asks questions about OAT workflows, CLI commands, skill authoring, configuration, or project lifecycle. Answers questions by reading locally-bundled OAT documentation.
5
5
  argument-hint: '[question]'
6
6
  disable-model-invocation: false
@@ -145,7 +145,7 @@ Based on the docs, here's how OAT project workflows work: [answer]
145
145
  You can read more in `guide/workflow/lifecycle.md`.
146
146
 
147
147
  Would you like me to:
148
- - Start a new project? (I'd invoke oat-project-quick-start)
148
+ - Start a new project? (I'd invoke oat-project-lite for single-sitting work, or oat-project-quick-start for a larger quick workflow)
149
149
  - Check your current project status? (I'd read your active project's state.md)
150
150
  ```
151
151
 
@@ -158,22 +158,27 @@ Would you like me to:
158
158
  **Response:**
159
159
 
160
160
  ```
161
- To create a new OAT project, you have two main approaches:
161
+ To create a new OAT project, you have three main approaches:
162
162
 
163
- 1. **Quick mode** (recommended for most tasks):
163
+ 1. **Lite mode** (recommended for single-sitting changes):
164
+ oat-project-lite <project-name> "project description"
165
+
166
+ 2. **Quick mode** (recommended for larger bounded work):
164
167
  oat-project-quick-start <project-name> "project description"
165
168
 
166
- 2. **Spec-driven mode** (for complex features):
169
+ 3. **Spec-driven mode** (for complex features):
167
170
  oat-project-new <project-name>
168
171
 
169
- Quick mode goes straight from discovery to plan. Spec-driven mode adds
170
- formal spec and design phases. If you invoke quick mode with only a
172
+ Lite combines the interview and requirements contract in one plan for a
173
+ single sitting. Quick mode goes straight from discovery to plan. Spec-driven
174
+ mode adds formal spec and design phases. If you invoke quick mode with only a
171
175
  project name, it should ask you for the missing project description
172
176
  before discovery starts.
173
177
 
174
178
  Both create a project directory under your projects root
175
179
  (default: .oat/projects/shared/<project-name>/) with standard artifacts:
176
- state.md, discovery.md, plan.md, and implementation.md.
180
+ state.md, plan.md, and implementation.md; quick and spec-driven modes also use
181
+ discovery.md.
177
182
 
178
183
  See: guide/workflow/lifecycle.md, guide/getting-started.md
179
184
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: oat-doctor
3
- version: 1.2.0
3
+ version: 1.2.1
4
4
  description: Use when you need to diagnose your OAT setup, check for outdated skills, identify misconfigurations, or get a summary of installed tools and config. Runs health checks and recommends corrective actions.
5
5
  argument-hint: '[--summary]'
6
6
  disable-model-invocation: true
@@ -174,7 +174,7 @@ it, and lists every skill that pack ships.
174
174
  - oat-project-capture, oat-project-clear-active, oat-project-complete
175
175
  - oat-project-design, oat-project-dispatch-subagents, oat-project-discover
176
176
  - oat-project-document, oat-project-implement, oat-project-import-plan
177
- - oat-project-new, oat-project-next, oat-project-open
177
+ - oat-project-lite, oat-project-new, oat-project-next, oat-project-open
178
178
  - oat-project-plan, oat-project-plan-writing, oat-project-pr-final
179
179
  - oat-project-pr-progress, oat-project-progress, oat-project-promote-spec-driven
180
180
  - oat-project-quick-start, oat-project-reconcile, oat-project-retro
@@ -238,7 +238,7 @@ OAT ▸ DOCTOR SUMMARY
238
238
  | --------- | ------- | ------ | -------- |
239
239
  | core | user | 2/2 | current |
240
240
  | docs | project | 7/7 | current |
241
- | workflows | project | 39/39 | current |
241
+ | workflows | project | 40/40 | current |
242
242
  | ideas | user | 4/4 | current |
243
243
  | project-management | project | 4/4 | current |
244
244
  | research | project | 6/6 | current |
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: oat-pjm-review-backlog
3
- version: 1.6.0
3
+ version: 1.6.1
4
4
  description: Use when prioritizing the file-backed repo backlog or evaluating roadmap alignment. Produces value-effort ratings, dependency mapping, execution recommendations, and an optional external-plan handoff.
5
5
  argument-hint: '[backlog-root] [--roadmap=<path>] [--output=<path>]'
6
6
  disable-model-invocation: true
@@ -255,7 +255,7 @@ This step mirrors the **Project Kickoff Handoffs** section of the pjm instructio
255
255
  **For each item in the agreed kickoff stack**, write or refresh `.oat/repo/pjm/handoffs/<BL-id>.md` with:
256
256
 
257
257
  - the backlog item reference — its ID **and** human-readable title **and** path (never a bare ID);
258
- - the recommended project mode (`oat-project-quick-start` vs `oat-project-new`), including which artifacts (spec/design/plan) to pre-populate from existing research when it exists;
258
+ - the recommended project mode (`oat-project-lite` for single-sitting work, `oat-project-quick-start` for quick work, or `oat-project-new` for spec-driven work), including which artifacts (spec/design/plan) to pre-populate from existing research when it exists;
259
259
  - authoritative input pointers (research directories, decision records, code paths);
260
260
  - repo conventions and verification gates the item file does not restate;
261
261
  - a close-out section requiring (a) the **Backlog Lifecycle** — `oat backlog archive <id>` — executed in the same PR that ships the item, and (b) deletion of the handoff file (`git rm`) in that same PR.