@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
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: oat-project-implement
3
- version: 2.3.3
3
+ version: 2.3.5
4
4
  description: Use when plan.md is ready for execution. Dispatches one phase implementer per phase, owns independent phase review and bounded fix routing, and supports plan-declared worktree-isolated parallel phases.
5
5
  oat_gateable: true
6
6
  argument-hint: '[--retry-limit <N>] [--dry-run]'
@@ -81,8 +81,8 @@ When `OAT_AUTONOMOUS=1`, read
81
81
  this run. Autonomy-specific behavior is routed with the rest of the workflow:
82
82
 
83
83
  - delegation authorization: `references/dispatch-and-dry-run.md`;
84
- - HiLL resolution and checkpoint review/receive:
85
- `references/plan-and-resume.md`;
84
+ - HiLL/checkpoint review: `references/plan-and-resume.md`;
85
+ - manual/visual proof: `IMPLEMENT-20` in `references/phase-execution.md`;
86
86
  - final review, final HiLL approval, and lifecycle-tail sequencing:
87
87
  `references/completion-and-closeout.md`.
88
88
 
@@ -315,10 +315,11 @@ generation as a sibling of `oat_post_implement_sequence`:
315
315
  oat_implement_exit_gate:
316
316
  status: pending # pending | allowed | blocked | stale
317
317
  resolution: configured # configured | no_gate
318
- disposition: null # null | passed | warned | prompt_approved | no_gate
318
+ disposition: null # null | passed | warned | prompt_approved | project_disabled | no_gate
319
319
  config_fingerprint: '<stable hash of the resolved declaration>'
320
320
  resolved_command: null
321
321
  resolved_description: null
322
+ project_override: null # null or {value: disabled, source: state.md:oat_skill_gate_overrides}
322
323
  on_failure: block # block | prompt | warn | null
323
324
  max_attempts: 2
324
325
  attempts_completed: 0
@@ -352,12 +353,33 @@ oat_implement_exit_gate:
352
353
  At the start of a new closeout generation, require a current passed final
353
354
  lifecycle review, capture `reviewed_head`, and compute a deterministic
354
355
  `implementation_fingerprint` from the gate-reviewed basis. Resolve
355
- `workflow.gates.skills.oat-project-implement` once. Canonically serialize the
356
- resolved command, description, `onFailure`, and `maxAttempts` to derive
356
+ `workflow.gates.skills.oat-project-implement` once with project context, so a
357
+ configured gate this project disabled is never mistaken for absent
358
+ configuration. Canonically serialize the resolved command, description,
359
+ `onFailure`, `maxAttempts`, and the resolved project override state to derive
357
360
  `config_fingerprint`; persist the complete resolved inputs with `status:
358
361
  pending` before any gate launch. Missing state means unresolved, never no gate.
359
- A `null` resolution persists `allowed/no_gate` with `disposition: no_gate`,
360
- null run/artifact/receive provenance, and the current implementation basis.
362
+ A `not_configured` resolution persists `allowed/no_gate` with
363
+ `disposition: no_gate`, null run/artifact/receive provenance, and the current
364
+ implementation basis. Only that resolution may produce a no-gate success: a
365
+ null, missing, malformed, or unrecognized resolver result is an operational
366
+ failure that fails closed as unresolved and never as no gate.
367
+
368
+ A `configured_disabled_by_project` resolution persists `allowed/configured`
369
+ with `disposition: project_disabled`. It sets `resolved_command` to the
370
+ configured command as evidence that is never executed, keeps null gate-run,
371
+ artifact, and receive provenance because nothing launched, keeps
372
+ `launch_state: not_started`, and records a `project_override` sub-record with
373
+ `value: disabled` and `source: state.md:oat_skill_gate_overrides`. Completion
374
+ stays allowed because the operator chose the project override; every other
375
+ closeout freshness and snapshot rule is unchanged. A project-disabled gate must
376
+ never enter the passed, missing, or failed branches.
377
+
378
+ Because `config_fingerprint` covers the resolved override state as well as the
379
+ configured declaration, removing the override from `state.md` changes the
380
+ fingerprint. A stored `project_disabled` transition is therefore invalidated
381
+ and can never be reused as a fresh `allowed` result once the gate is
382
+ re-enabled; the re-enabled gate requires a new configured generation.
361
383
 
362
384
  New generations persist `implementation_fingerprint` as
363
385
  `sha256:effective-delta-v1:<digest>`. Resolve the logical integration base from
@@ -520,6 +542,16 @@ disposition.
520
542
  configured-gate provenance when configured, an unchanged immutable
521
543
  implementation fingerprint, a valid rolling freshness checkpoint, and any
522
544
  eligible receive marked complete.
545
+ - An `allowed/configured` result carrying `disposition: project_disabled` is
546
+ revalidated before it is reused, because the override lives in the state
547
+ carrier that the implementation fingerprint deliberately excludes. Re-resolve
548
+ the gate with project context, recompute `config_fingerprint` from that
549
+ current resolution, and require both that the current resolution is still
550
+ `configured_disabled_by_project` and that the recomputed fingerprint equals
551
+ the persisted one. Any other current resolution, including a re-enabled
552
+ `configured` gate, or any fingerprint mismatch marks the generation `stale`
553
+ and requires a new configured generation. Reproducing the fingerprint from
554
+ the persisted inputs alone never satisfies this check.
523
555
  - Closeout-only descendants include configured gate artifacts and receipts,
524
556
  project tracking, `project-log.md` appends, summary/documentation/PR sequence
525
557
  outputs, final HiLL bookkeeping, and completion bookkeeping. Classify
@@ -565,12 +597,14 @@ completion, or success output, run the configured gate:
565
597
  the gate for this skill:
566
598
 
567
599
  ```bash
568
- oat gate resolve oat-project-implement --json
600
+ oat gate resolve oat-project-implement --project "$PROJECT_PATH" --json
569
601
  ```
570
602
 
571
- Persist the resolution and configuration fingerprint before launch. If the
572
- command returns JSON `null`, persist the allowed no-gate transition; no gate
573
- is configured; proceed directly to the completion steps in Step 15 below.
603
+ Persist the resolution and configuration fingerprint before launch, then
604
+ handle all three `resolution` values explicitly:
605
+ - `not_configured`: persist the allowed no-gate transition; no gate is configured; proceed directly to the completion steps in Step 15 below.
606
+ - `configured_disabled_by_project`: persist the allowed project-disabled transition described above without launching any process, and proceed directly to the completion steps in Step 15 below.
607
+ - `configured`: continue with the launch steps below.
574
608
 
575
609
  2. Export the resolved project path into the command shell:
576
610
 
@@ -675,10 +709,65 @@ require `oat_implement_exit_gate` to remain allowed and fresh. If it becomes
675
709
  stale, malformed, pending, or blocked, persist/retain that state, stop the
676
710
  sequence, and resume through `oat-project-implement`.
677
711
 
678
- Identify the final implementation phase from the plan. A final HiLL checkpoint
679
- exists when `oat_plan_hill_phases` is `[]` (every phase) or when it explicitly
680
- contains that final phase ID. Defer only a checkpoint on the final implementation
681
- phase; non-final checkpoint behavior remains unchanged.
712
+ For `oat_workflow_mode: lite`, there is no final HiLL approval step. A passed
713
+ final review and allowed implementation exit gate proceed directly to closeout
714
+ with `approval: not_required`; do not read
715
+ `oat_plan_hill_phases`, ask for approval, or invoke the autonomous approval
716
+ branch. Set `final_checkpoint_exists = false`,
717
+ `awaiting_approval_reachable = false`, and
718
+ `autonomous_approval_reachable = false`. Per-phase review and final review
719
+ remain unchanged.
720
+
721
+ Use this executable contract before any generic checkpoint or preference
722
+ resolution:
723
+
724
+ ```bash
725
+ # BEGIN LITE CLOSEOUT RESOLUTION CONTRACT
726
+ if [ "$WORKFLOW_MODE" = "lite" ]; then
727
+ if [ "${PHASE_REVIEW_STATUS:-}" != "passed" ] || [ "${FINAL_REVIEW_STATUS:-}" != "passed" ]; then
728
+ echo "oat: lite closeout requires passed phase and final reviews" >&2
729
+ exit 65
730
+ fi
731
+ FINAL_CHECKPOINT_EXISTS="false"
732
+ APPROVAL="not_required"
733
+ AWAITING_APPROVAL_REACHABLE="false"
734
+ AUTONOMOUS_APPROVAL_REACHABLE="false"
735
+ PROJECT_RECAP_REACHABLE="false"
736
+ ORDERED_CLOSEOUT=("phase-review" "final-review")
737
+ PRE_APPROVAL=()
738
+ for STEP in ${LITE_PRE_APPROVAL:-}; do
739
+ case "$STEP" in
740
+ summary|document|pr)
741
+ ALREADY_PRESENT="false"
742
+ for PRESENT in "${PRE_APPROVAL[@]}"; do
743
+ [ "$PRESENT" = "$STEP" ] && ALREADY_PRESENT="true"
744
+ done
745
+ [ "$ALREADY_PRESENT" = "true" ] || PRE_APPROVAL+=("$STEP")
746
+ ;;
747
+ esac
748
+ done
749
+ PR_PRESENT="false"
750
+ for PRESENT in "${PRE_APPROVAL[@]}"; do
751
+ [ "$PRESENT" = "pr" ] && PR_PRESENT="true"
752
+ done
753
+ [ "$PR_PRESENT" = "true" ] || PRE_APPROVAL+=("pr")
754
+ POST_APPROVAL=()
755
+ ORDERED_CLOSEOUT+=("${PRE_APPROVAL[@]}" "complete")
756
+ fi
757
+ # END LITE CLOSEOUT RESOLUTION CONTRACT
758
+ ```
759
+
760
+ The contract intentionally does not read `OAT_PLAN_HILL_PHASES`,
761
+ `GENERIC_PRE_APPROVAL`, `GENERIC_POST_APPROVAL`, or `OAT_AUTONOMOUS` in its
762
+ lite branch. After it resolves lite, skip every generic checkpoint,
763
+ preference-resolution, awaiting-approval, and autonomous-approval algorithm
764
+ below.
765
+
766
+ For non-lite workflows only, identify the final implementation phase from the
767
+ plan. A final HiLL checkpoint exists when `oat_plan_hill_phases` is `[]` (every
768
+ phase) or when it explicitly contains that final phase ID. Defer only a
769
+ checkpoint on the final implementation phase; non-final checkpoint behavior
770
+ remains unchanged.
682
771
 
683
772
  Run final verification (Step 12). Final review must be `passed` and the
684
773
  configured implementation exit gate in Step 14 must be allowed before any
@@ -686,8 +775,9 @@ pre-approval dispatch. If final checkpoint auto-review is enabled, Step 8 has
686
775
  already run `oat-project-review-provide code final`; do not run a duplicate
687
776
  final review here.
688
777
 
689
- Read the effective `workflow.postImplementSequence` once. For a configured
690
- legacy or structured preference, normalize legacy values before snapshotting:
778
+ For non-lite workflows, read the effective `workflow.postImplementSequence`
779
+ once. For a configured legacy or structured preference, normalize legacy
780
+ values before snapshotting:
691
781
  `wait` → `{ preApproval: [], postApproval: [] }`, `summary` →
692
782
  `{ preApproval: ["summary"], postApproval: [] }`, `pr` → `{ preApproval:
693
783
  ["summary", "pr"], postApproval: [] }`, and `docs-pr` → `{ preApproval:
@@ -695,8 +785,28 @@ legacy or structured preference, normalize legacy values before snapshotting:
695
785
  These legacy mappings remain unchanged. Structured preferences additionally
696
786
  accept `retro` in `postApproval`; `retro` is invalid in `preApproval`.
697
787
 
698
- If `OAT_AUTONOMOUS=1` and the preference is unset, use the inventory's
699
- autonomous lifecycle-tail default:
788
+ For `oat_workflow_mode: lite`, the earlier resolution contract preempts that
789
+ normalization. The generic `workflow.postImplementSequence` value is not a lite
790
+ opt-in to summary or documentation. Supply only the explicit
791
+ `workflow.postImplementSequence.lite.preApproval` override as
792
+ `LITE_PRE_APPROVAL` for those opt-ins:
793
+
794
+ - The default with no lite-specific override is `[pr]`.
795
+ - Filter a lite-specific override to `summary`, `document`, and `pr`, remove
796
+ duplicates while retaining its order, and append `pr` when it is absent. For
797
+ example, `[summary, pr]` remains unchanged.
798
+ - Resolve `postApproval` to `[]`. A lite closeout never includes `retro`, even
799
+ when the generic preference or autonomous default includes it.
800
+
801
+ This transformation applies in interactive and autonomous execution alike.
802
+ Persist the resulting arrays as the immutable sequence snapshot and set
803
+ `approval: not_required`; the lite-specific override changes optional work,
804
+ not the absence of a HiLL approval checkpoint. The generic configured and
805
+ autonomous-default preference resolution immediately below applies only to
806
+ non-lite workflows; it must not overwrite the lite transformation.
807
+
808
+ For non-lite workflows, if `OAT_AUTONOMOUS=1` and the preference is unset, use
809
+ the inventory's autonomous lifecycle-tail default:
700
810
 
701
811
  ```yaml
702
812
  preApproval: [summary, document, pr]
@@ -769,10 +879,17 @@ checkpoint protocol to gate bookkeeping, final HiLL bookkeeping, and completion
769
879
  bookkeeping. A mixed commit, missing child transition, or non-state path in the
770
880
  checkpoint-persistence commit fails closed as stale.
771
881
 
772
- **Implementation-Tail Project Recap:**
882
+ **Implementation-Tail Project Recap (non-lite only):**
773
883
 
774
884
  The final-closeout orchestrator owns one project-recap gate. Run this recap gate after the final code review has passed and configured pre-approval summary/document steps have completed, but before final HiLL approval. Preserve the stored order of all other pre-approval steps and the existing final review sequence; the recap gate does not replace or repeat either.
775
885
 
886
+ This entire project-recap subsection applies only to non-lite workflows. For
887
+ lite, do not resolve recap intent, inspect recap runs, invoke
888
+ `oat-explainer-kit`, run the terminal-outcome guard, or let recap block
889
+ closeout. The lite contract sets `PROJECT_RECAP_REACHABLE=false` and proceeds
890
+ from the required reviews through its stored optional steps to `pr` and
891
+ sequence completion.
892
+
776
893
  Before generating, inspect the active project's explainer runs. A fresh `project-recap` manifest for the current completed implementation deduplicates the lifecycle-tail run: reuse it and do not invoke the adapter again. Fresh means the manifest identifies recipe `project-recap`, belongs to this project, has a terminal outcome, and its recorded source hashes match the current approved implementation inputs. A merely present, incomplete, wrong-recipe, or stale manifest does not satisfy this check.
777
894
 
778
895
  Resolve recap intent through `oat-explainer-kit`. When `OAT_AUTONOMOUS=1` and no fresh recap exists, attempt `project-recap` exactly once; missing or stale persisted intent cannot suppress this autonomous attempt. Interactive mode honors the adapter's resolved persisted or workflow intent.
@@ -800,6 +917,13 @@ terminal generated outcomes are `built-durable`, `built-not-durable`,
800
917
  approval; do not substitute a warning or infer an outcome from filesystem
801
918
  presence. A `skip` intent requires no manifest.
802
919
 
920
+ **Lite completion algorithm:** Dispatch incomplete `pre_approval` steps in
921
+ stored order, retain `approval: not_required`, keep both approval reachability
922
+ flags false, and commit `status: complete` when they finish. Do not enter the
923
+ generic checkpoint or autonomous algorithms below.
924
+
925
+ **Non-lite approval algorithm:**
926
+
803
927
  1. Dispatch incomplete `pre_approval` steps in stored order.
804
928
  2. When they succeed and a final checkpoint exists, commit `status:
805
929
  awaiting_approval` with `approval: pending` before asking for final HiLL
@@ -819,8 +943,8 @@ awaiting_approval` with `approval: pending` before asking for final HiLL
819
943
 
820
944
  **Autonomous final HiLL approval:**
821
945
 
822
- When `OAT_AUTONOMOUS=1`, gate `IMPLEMENT-16` replaces only the approval question
823
- in steps 2-4:
946
+ For non-lite workflows only, when `OAT_AUTONOMOUS=1`, gate `IMPLEMENT-16`
947
+ replaces only the approval question in steps 2-4:
824
948
 
825
949
  1. Require the final review row to be `passed` and verify its review artifact
826
950
  and dispatch record. A failed blocking review or unresolved Critical finding
@@ -839,10 +963,11 @@ approval, destructive-change risk, or missing-credential boundary. When
839
963
  autonomy is inactive, the explicit user approval/decline/defer behavior above
840
964
  is unchanged.
841
965
 
842
- If the preference is unset and autonomy is inactive, do not create a sequence
843
- snapshot. Retain the existing next-step prompt only after final approval when a
844
- final checkpoint is configured. Under autonomy, the default snapshot above
845
- always resolves the unset case.
966
+ For non-lite workflows, if the preference is unset and autonomy is inactive,
967
+ do not create a sequence snapshot. Retain the existing next-step prompt only
968
+ after final approval when a final checkpoint is configured. Under autonomy,
969
+ the default snapshot above always resolves the unset case. The lite branch
970
+ always snapshots its deterministic `[pr]` default.
846
971
 
847
972
  ### Step 16: Mark Implementation Complete
848
973
 
@@ -367,11 +367,18 @@ Require `dispatchReport.schemaVersion: 1` in the completed resolver JSON before
367
367
  dispatch. Surface every structured entry in `dispatchReport.notices`, then
368
368
  render the versioned block with `formatDispatchReport(dispatchReport)`
369
369
  semantics, before the implementation, fix, or reviewer launch. Consume the
370
- report as the human/audit source, and derive the formal compatibility line only
371
- through
372
- `formatDispatchStamp(dispatchReport)` / `toDispatchStampRecord(dispatchReport)`.
370
+ report as the human/audit source, and take the formal compatibility line
371
+ directly from the same response's additive `dispatchStamp` field: it must be a
372
+ non-empty string beginning with the canonical `Dispatch:` prefix, copied
373
+ byte-for-byte into dispatch and audit metadata. Reformatting the report through
374
+ `formatDispatchStamp(dispatchReport)` / `toDispatchStampRecord(dispatchReport)`
375
+ is an optional corroboration where that library is already loaded; it is never
376
+ the normal path and never a substitute for the returned field, and no
377
+ out-of-tree shim is required.
373
378
  Never hand-assemble a second `Dispatch:` schema from policy labels, role names,
374
- candidate strings, or target names.
379
+ candidate strings, or target names. If `dispatchStamp` is absent or lacks the
380
+ canonical prefix on a report-bearing response, stop and report instead of
381
+ reconstructing it.
375
382
 
376
383
  The exact provider invocation remains authoritative in
377
384
  `providers.<provider>.dispatchArgs` and `providers.<provider>.selection.target`;
@@ -537,10 +544,9 @@ Payload-first invariant:
537
544
  - Those fields are launcher-owned. Agent self-report cannot populate or
538
545
  overwrite them; it may only be retained separately as optional diagnostics.
539
546
  - Derive `Dispatch target` and `Effort axis` / `Model axis` from the payload.
540
- - After the payload is built, append the compatibility stamp returned from
541
- `formatDispatchStamp(dispatchReport)` to Dispatch Notes for every
542
- implementation, fix, and review dispatch. The derived line retains the p01
543
- grammar exactly:
547
+ - After the payload is built, append the resolver-returned `dispatchStamp`
548
+ value to Dispatch Notes for every implementation, fix, and review dispatch.
549
+ The returned line retains the p01 grammar exactly:
544
550
  `Dispatch: scope=<phase-or-task> action=<implementation|fix|review> role=<implementer|fix|reviewer> producer=<slug|unknown> provenance=<declared|observed|inferred|unknown> model_axis=<axis> effort_axis=<axis> dispatch_policy=<policy|unknown> dispatch_ceiling=<value|none> target=<target|unknown>`.
545
551
  Populate the report from the completed resolver and actual host arguments.
546
552
  Only independently observed or otherwise supported runtime evidence may