@open-agent-toolkit/cli 0.3.19 → 0.3.20

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 (119) hide show
  1. package/README.md +2 -1
  2. package/assets/agents/oat-phase-implementer.md +26 -3
  3. package/assets/agents/oat-reviewer.md +8 -3
  4. package/assets/bundle-metadata.json +1 -1
  5. package/assets/docs/reference/cli-reference.md +12 -7
  6. package/assets/docs/reference/oat-directory-structure.md +1 -0
  7. package/assets/docs/reference/project-artifacts.md +56 -1
  8. package/assets/docs/reference/project-state-machine.md +41 -7
  9. package/assets/docs/skills/brainstorm.md +3 -2
  10. package/assets/docs/skills/index.md +13 -10
  11. package/assets/docs/workflows/advanced/autonomy.md +3 -1
  12. package/assets/docs/workflows/advanced/dispatch-ceiling.md +2 -2
  13. package/assets/docs/workflows/advanced/workflow-gates.md +17 -4
  14. package/assets/docs/workflows/approvals-and-automation.md +21 -10
  15. package/assets/docs/workflows/choose-workflow.md +17 -9
  16. package/assets/docs/workflows/ideas/index.md +1 -1
  17. package/assets/docs/workflows/ideas/lifecycle.md +3 -2
  18. package/assets/docs/workflows/projects/closeout/closeout-skills.md +80 -7
  19. package/assets/docs/workflows/projects/closeout/pr-flow.md +7 -1
  20. package/assets/docs/workflows/projects/execution/execution-skills.md +16 -3
  21. package/assets/docs/workflows/projects/execution/implementation-execution.md +1 -1
  22. package/assets/docs/workflows/projects/execution/picking-up-projects.md +11 -1
  23. package/assets/docs/workflows/projects/lifecycle.md +108 -9
  24. package/assets/docs/workflows/projects/planning/hill-checkpoints.md +6 -6
  25. package/assets/docs/workflows/projects/planning/planning-skills.md +9 -7
  26. package/assets/docs/workflows/projects/planning/starting-projects.md +57 -11
  27. package/assets/docs/workflows/projects/reviews/index.md +22 -1
  28. package/assets/docs/workflows/projects/reviews/review-flavors.md +5 -3
  29. package/assets/public-package-versions.json +4 -4
  30. package/assets/skills/oat-brainstorm/SKILL.md +34 -9
  31. package/assets/skills/oat-brainstorm/references/destinations.md +6 -3
  32. package/assets/skills/oat-docs/SKILL.md +7 -3
  33. package/assets/skills/oat-pjm-review-backlog/SKILL.md +2 -2
  34. package/assets/skills/oat-project-autonomous/SKILL.md +9 -3
  35. package/assets/skills/oat-project-autonomous/references/gate-inventory.md +151 -132
  36. package/assets/skills/oat-project-brief/SKILL.md +1 -1
  37. package/assets/skills/oat-project-brief/references/brief-contract.md +458 -9
  38. package/assets/skills/oat-project-brief/references/docs/autonomy-contract.md +151 -132
  39. package/assets/skills/oat-project-brief/references/docs/gate-approval-record.md +9 -0
  40. package/assets/skills/oat-project-capture/SKILL.md +2 -2
  41. package/assets/skills/oat-project-complete/SKILL.md +14 -5
  42. package/assets/skills/oat-project-discover/SKILL.md +3 -2
  43. package/assets/skills/oat-project-document/SKILL.md +12 -6
  44. package/assets/skills/oat-project-document/references/docs/autonomy-contract.md +151 -132
  45. package/assets/skills/oat-project-goal/SKILL.md +697 -0
  46. package/assets/skills/oat-project-goal/references/docs/autonomy-contract.md +412 -0
  47. package/assets/skills/oat-project-goal/references/docs/gate-approval-record.md +93 -0
  48. package/assets/skills/oat-project-implement/SKILL.md +1 -1
  49. package/assets/skills/oat-project-implement/references/completion-and-closeout.md +67 -0
  50. package/assets/skills/oat-project-implement/references/docs/autonomy-contract.md +151 -132
  51. package/assets/skills/oat-project-implement/references/docs/gate-approval-record.md +9 -0
  52. package/assets/skills/oat-project-implement/references/phase-execution.md +10 -3
  53. package/assets/skills/oat-project-implement/references/plan-and-resume.md +28 -1
  54. package/assets/skills/oat-project-lite/SKILL.md +1 -1
  55. package/assets/skills/oat-project-lite/references/docs/autonomy-contract.md +151 -132
  56. package/assets/skills/oat-project-new/SKILL.md +3 -3
  57. package/assets/skills/oat-project-next/SKILL.md +45 -15
  58. package/assets/skills/oat-project-next/references/docs/gate-approval-record.md +9 -0
  59. package/assets/skills/oat-project-plan/SKILL.md +14 -3
  60. package/assets/skills/oat-project-plan-writing/SKILL.md +6 -4
  61. package/assets/skills/oat-project-pr-final/SKILL.md +51 -1
  62. package/assets/skills/oat-project-pr-final/references/docs/autonomy-contract.md +151 -132
  63. package/assets/skills/oat-project-pr-progress/SKILL.md +97 -3
  64. package/assets/skills/oat-project-progress/SKILL.md +38 -5
  65. package/assets/skills/oat-project-progress/references/docs/gate-approval-record.md +9 -0
  66. package/assets/skills/oat-project-quick-start/SKILL.md +14 -9
  67. package/assets/skills/oat-project-quick-start/references/docs/autonomy-contract.md +151 -132
  68. package/assets/skills/oat-project-quick-start/references/docs/gate-approval-record.md +9 -0
  69. package/assets/skills/oat-project-reconcile/SKILL.md +31 -2
  70. package/assets/skills/oat-project-review-provide/SKILL.md +79 -13
  71. package/assets/skills/oat-project-review-receive/SKILL.md +70 -1
  72. package/assets/skills/oat-project-revise/SKILL.md +25 -1
  73. package/assets/skills/oat-project-summary/SKILL.md +60 -5
  74. package/assets/skills/oat-wave-execute/SKILL.md +2 -2
  75. package/assets/templates/state.md +1 -1
  76. package/dist/commands/project/closeout-check/closeout-invariant.d.ts +119 -3
  77. package/dist/commands/project/closeout-check/closeout-invariant.d.ts.map +1 -1
  78. package/dist/commands/project/closeout-check/closeout-invariant.js +454 -2
  79. package/dist/commands/project/closeout-check/index.d.ts +21 -3
  80. package/dist/commands/project/closeout-check/index.d.ts.map +1 -1
  81. package/dist/commands/project/closeout-check/index.js +190 -4
  82. package/dist/commands/project/complete-state/index.d.ts +2 -1
  83. package/dist/commands/project/complete-state/index.d.ts.map +1 -1
  84. package/dist/commands/project/complete-state/index.js +7 -1
  85. package/dist/commands/project/delivery/check.d.ts +66 -0
  86. package/dist/commands/project/delivery/check.d.ts.map +1 -0
  87. package/dist/commands/project/delivery/check.js +232 -0
  88. package/dist/commands/project/delivery/evidence.d.ts +171 -0
  89. package/dist/commands/project/delivery/evidence.d.ts.map +1 -0
  90. package/dist/commands/project/delivery/evidence.js +902 -0
  91. package/dist/commands/project/delivery/index.d.ts +7 -0
  92. package/dist/commands/project/delivery/index.d.ts.map +1 -0
  93. package/dist/commands/project/delivery/index.js +13 -0
  94. package/dist/commands/project/delivery/refresh.d.ts +110 -0
  95. package/dist/commands/project/delivery/refresh.d.ts.map +1 -0
  96. package/dist/commands/project/delivery/refresh.js +441 -0
  97. package/dist/commands/project/index.d.ts.map +1 -1
  98. package/dist/commands/project/index.js +2 -0
  99. package/dist/commands/project/log/append.d.ts +6 -0
  100. package/dist/commands/project/log/append.d.ts.map +1 -1
  101. package/dist/commands/project/log/append.js +6 -1
  102. package/dist/commands/project/new/scaffold.d.ts.map +1 -1
  103. package/dist/commands/project/new/scaffold.js +47 -1
  104. package/dist/commands/project/promote/promote.d.ts +15 -1
  105. package/dist/commands/project/promote/promote.d.ts.map +1 -1
  106. package/dist/commands/project/promote/promote.js +99 -15
  107. package/dist/commands/project/validate-plan/index.d.ts.map +1 -1
  108. package/dist/commands/project/validate-plan/index.js +10 -0
  109. package/dist/commands/project/validate-plan/profiles.d.ts +19 -4
  110. package/dist/commands/project/validate-plan/profiles.d.ts.map +1 -1
  111. package/dist/commands/project/validate-plan/profiles.js +153 -2
  112. package/dist/commands/shared/frontmatter.d.ts +1 -1
  113. package/dist/commands/shared/frontmatter.d.ts.map +1 -1
  114. package/dist/commands/shared/frontmatter.js +1 -0
  115. package/dist/commands/state/generate.d.ts.map +1 -1
  116. package/dist/commands/state/generate.js +35 -4
  117. package/dist/commands/tools/shared/pack-manifest.d.ts.map +1 -1
  118. package/dist/commands/tools/shared/pack-manifest.js +1 -0
  119. package/package.json +2 -2
@@ -6,7 +6,7 @@ disable-model-invocation: true
6
6
  user-invocable: true
7
7
  allowed-tools: Read, Write, Bash, Glob, Grep, AskUserQuestion
8
8
  metadata:
9
- version: 1.4.4
9
+ version: 1.4.5
10
10
  ---
11
11
 
12
12
  # New OAT Project
@@ -73,9 +73,9 @@ Use the CLI scaffolder:
73
73
  oat project new "{project-name}" --mode spec-driven [--scope shared|local|synced]
74
74
  ```
75
75
 
76
- This skill scaffolds spec-driven projects only. Quick, lite, and brief projects
76
+ This skill scaffolds spec-driven projects only. Quick, lite, brief, and goal projects
77
77
  start from their entry skills (`oat-project-quick-start`, `oat-project-lite`,
78
- `oat-project-brief`), which run `oat project new --mode <mode>` themselves.
78
+ `oat-project-brief`, `oat-project-goal`), which run `oat project new --mode <mode>` themselves.
79
79
 
80
80
  Optional flags:
81
81
 
@@ -5,7 +5,7 @@ disable-model-invocation: true
5
5
  user-invocable: true
6
6
  allowed-tools: Read, Glob, Grep, Bash(git:*), Bash(oat:*), Skill
7
7
  metadata:
8
- version: 1.1.6
8
+ version: 1.1.7
9
9
  ---
10
10
 
11
11
  # Project Next
@@ -109,6 +109,7 @@ projects, and synced records whose detached checkout is absent.
109
109
  - `oat-project-quick-start` — Start a quick workflow project
110
110
  - `oat-project-lite` — Start a lite workflow project
111
111
  - `oat-project-brief` — Start a brief workflow project
112
+ - `oat-project-goal` — Start a goal workflow project
112
113
  - `oat-project-import-plan` — Import an external plan
113
114
  - **STOP.** Do not attempt routing.
114
115
 
@@ -127,17 +128,17 @@ projects, and synced records whose detached checkout is absent.
127
128
 
128
129
  Read `"$PROJECT_PATH/state.md"` frontmatter and extract:
129
130
 
130
- | Field | Used For |
131
- | ------------------------- | -------------------------------------------------------------------------------------------- |
132
- | `oat_phase` | Current lifecycle position (discovery, spec, design, plan, implement) |
133
- | `oat_phase_status` | Phase completion state (in_progress, complete, pr_open) |
134
- | `oat_workflow_mode` | Routing table selection (spec-driven, quick, import, lite, brief). Default: `spec-driven` |
135
- | `oat_hill_checkpoints` | Which phases require HiLL approval |
136
- | `oat_hill_completed` | Which HiLL gates have been passed |
137
- | `oat_blockers` | Informational warnings (not routing gates) |
138
- | `oat_implement_exit_gate` | Whether the implementation exit gate is allowed and fresh |
139
- | `oat_quick_start_gate` | Reported only in the Step 6 announcement; never a routing input |
140
- | `oat_lifecycle` | Terminal status (active, paused, complete). `complete` is the terminal signal Step 5.2 reads |
131
+ | Field | Used For |
132
+ | ------------------------- | ----------------------------------------------------------------------------------------------- |
133
+ | `oat_phase` | Current lifecycle position (discovery, spec, design, plan, implement) |
134
+ | `oat_phase_status` | Phase completion state (in_progress, complete, pr_open) |
135
+ | `oat_workflow_mode` | Routing table selection (spec-driven, quick, import, lite, brief, goal). Default: `spec-driven` |
136
+ | `oat_hill_checkpoints` | Which phases require HiLL approval |
137
+ | `oat_hill_completed` | Which HiLL gates have been passed |
138
+ | `oat_blockers` | Informational warnings (not routing gates) |
139
+ | `oat_implement_exit_gate` | Whether the implementation exit gate is allowed and fresh |
140
+ | `oat_quick_start_gate` | Reported only in the Step 6 announcement; never a routing input |
141
+ | `oat_lifecycle` | Terminal status (active, paused, complete). `complete` is the terminal signal Step 5.2 reads |
141
142
 
142
143
  **If state.md is missing or unreadable:** Report error and suggest running the relevant phase skill directly. STOP.
143
144
 
@@ -223,6 +224,7 @@ Phase-to-skill mapping for HiLL override:
223
224
 
224
225
  In brief mode the `plan` row maps to `oat-project-brief`, which owns brief
225
226
  planning; spec-driven planning is never a brief project's current-phase skill.
227
+ In goal mode it maps to `oat-project-goal` the same way.
226
228
 
227
229
  Note: a `spec` HiLL phase only appears in legacy projects scaffolded before requirements confirmation was folded into `oat-project-design`. New projects scaffold with `['discovery', 'design']` HiLL checkpoints, so `spec` falls through to `oat-project-design` here as a graceful migration. The standalone `oat-project-spec` skill remains available as an opt-in for users who want to formalize requirements separately.
228
230
 
@@ -317,6 +319,32 @@ Unlike lite, tier 2 stays with `oat-project-brief`: a brief becomes
317
319
  implementation-ready only through its recorded review disposition and single
318
320
  approval, which that skill owns. Brief progress counts phase-units, not tasks.
319
321
 
322
+ **Goal Mode:** the control plane owns goal routing (`oat project status --json`,
323
+ `recommendation.skill` and `recommendation.context`); dispatch that skill with
324
+ that context. Before any milestone state exists, the planning rows match brief
325
+ mode with `oat-project-goal` in place of `oat-project-brief`. After it exists,
326
+ routing follows this priority, the first match winning:
327
+
328
+ | Priority | Condition | Target Skill | Context |
329
+ | -------- | ----------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ------------------------------------------ |
330
+ | 1 | `oat_goal_status: declared_met` with an invalid outcome audit | `oat-project-goal` | `audit` |
331
+ | 1 | `declared_met`: received feedback, then pending recovery, then incomplete terminal scope, then the post-implementation router | review-receive / stage owner / `oat-project-implement` / Step 5 | `scope terminal: …` |
332
+ | 2 | Actionable review artifacts | `oat-project-review-receive` | — |
333
+ | 2 | Pending `oat_goal_recovery` at `implementing` / `exit_gate` | `oat-project-implement` | `scope mNN/dNN: …` / `closeout mNN/dNN: …` |
334
+ | 2 | Pending `oat_goal_recovery` at `reviewing` / `receiving` / `delivering` | by missing evidence (rows 4c–4d below) | the recovery's explicit scope |
335
+ | 3 | Active milestone membership invalid | `oat-project-goal` | — |
336
+ | 4a | `aligning` | `oat-project-goal` | `align mNN` |
337
+ | 4b | `implementing`: incomplete unit in scope / every unit accepted | `oat-project-implement` | `scope mNN: …` / `closeout mNN: …` |
338
+ | 4c | `reviewing`: queued fixes or a missing, blocked or stale exit carrier | `oat-project-implement` | `scope mNN: …` / `closeout mNN: …` |
339
+ | 4c | `reviewing`: carrier fresh, integrated review missing or stale / produced and unreceived / passed | review-provide / review-receive / review-receive | `code mNN: …` / `receive <artifact>` |
340
+ | 4d | `delivering`: passed review and allowed, fresh carrier; otherwise rows 4c by missing evidence | `oat-project-pr-progress` | `deliver mNN` |
341
+ | 4e | `delivered` | `oat-project-goal` | `realign mNN` |
342
+
343
+ Goal progress counts phase-units per active milestone. `delivered` is not the
344
+ endpoint: activation of the next milestone waits for the delivery's agreed
345
+ endpoint, which `oat-project-goal` observes. The Step 5 brief phase-unit guard
346
+ applies to goal only within the active milestone's scope at `implementing`.
347
+
320
348
  \* `oat-project-implement` handles both sequential and parallel execution.
321
349
 
322
350
  ### Step 4: Check for Unprocessed Reviews (Review Safety Check)
@@ -504,8 +532,8 @@ and fall through to 5.3, and do not route to `oat-project-implement` even when
504
532
  signal here — neither a null current task nor a `complete` or `pr_open`
505
533
  `oat_phase_status` is terminal, because an active project reaches both while it
506
534
  still owns pending revision work. The guard is workflow-mode independent: it
507
- applies identically to `spec-driven`, `quick`, `import`, `lite`, and `brief`
508
- projects.
535
+ applies identically to `spec-driven`, `quick`, `import`, `lite`, `brief`, and
536
+ `goal` projects.
509
537
 
510
538
  For every other `oat_lifecycle` value the check below is unchanged.
511
539
 
@@ -556,7 +584,9 @@ routes directly to `oat-project-pr-final` before the summary check below.
556
584
  Announce: "Final review passed — creating final PR". Optional lite summary or
557
585
  documentation work is owned by the immutable implementation closeout snapshot,
558
586
  not this fallback router. The lite shortcut does not apply to brief projects:
559
- brief closeout takes 5.5 through 5.7 and never skips the summary.
587
+ brief closeout takes 5.5 through 5.7 and never skips the summary. Goal
588
+ terminal closeout follows brief closeout after a valid declaration; its `pr`
589
+ step is satisfied by delivery coverage.
560
590
 
561
591
  **5.5: Summary not done**
562
592
 
@@ -62,6 +62,15 @@ replaces the record.
62
62
  core, written and read under the same rules as `oat_quick_start_gate`. It is
63
63
  absent when no gate is configured, and nothing routes on it: it is provenance
64
64
  only.
65
+ - **`oat_milestone_gates[mNN].plan` and `.exit`** (goal mode;
66
+ `oat-project-goal` writes `plan` after each milestone's approval, and
67
+ `oat-project-implement`'s milestone closeout writes `exit`) carry the core
68
+ plus `resolution` (`configured`, `no_gate`, or `project_disabled`), a
69
+ `subject` binding (`plan` or `code` and the milestone's ordered phase set),
70
+ and derived `freshness` with `freshness_reason`. `reviewed_head` is `null`
71
+ for `no_gate` and `project_disabled`, and `no_gate` is written rather than
72
+ omitted because routing reads these carriers. `oat-project-brief`'s
73
+ `references/brief-contract.md` section 12.4 is their contract.
65
74
 
66
75
  ## Reading a quick-start record
67
76
 
@@ -6,7 +6,7 @@ disable-model-invocation: true
6
6
  user-invocable: true
7
7
  allowed-tools: Read, Write, Bash(git:*), Bash(oat template:*), Glob, Grep, AskUserQuestion
8
8
  metadata:
9
- version: 1.4.18
9
+ version: 1.4.19
10
10
  ---
11
11
 
12
12
  # Planning Phase
@@ -20,8 +20,8 @@ Before a parent-branch commit, verify `oat internal commit-paths --help` succeed
20
20
  ## Prerequisites
21
21
 
22
22
  This skill is the plan authoring path for **spec-driven** projects only. Quick,
23
- import, lite, and brief modes have dedicated entry skills that produce `plan.md`
24
- directly.
23
+ import, lite, brief, and goal modes have dedicated entry skills that produce
24
+ `plan.md` directly.
25
25
 
26
26
  Read `oat_workflow_mode` from `{PROJECT_PATH}/state.md` (default: `spec-driven`):
27
27
 
@@ -30,6 +30,7 @@ Read `oat_workflow_mode` from `{PROJECT_PATH}/state.md` (default: `spec-driven`)
30
30
  - **`import`**: **Stop.** If a normalized `plan.md` exists, tell the user: "Imported plan is ready. Run `oat-project-implement` to begin execution." If no `plan.md` exists, tell the user: "Run `oat-project-import-plan` to import and normalize the external plan first."
31
31
  - **`lite`**: **Stop.** Tell the user: "Lite planning is owned by `oat-project-lite`; run it to author or resume the combined plan contract."
32
32
  - **`brief`**: **Stop.** Tell the user: "Brief planning is owned by `oat-project-brief`; run it to author or resume the Project Brief."
33
+ - **`goal`**: **Stop.** Tell the user: "Goal planning is owned by `oat-project-goal`; run it to author, amend, or re-align the Project Brief and its milestones."
33
34
 
34
35
  ## Plan Format Contract
35
36
 
@@ -172,6 +173,16 @@ Exit skill.
172
173
 
173
174
  Exit skill.
174
175
 
176
+ **Mode: `goal`** — **STOP.** Print:
177
+
178
+ ```
179
+ ⚠️ This project uses goal mode. Run `oat-project-goal` to author, amend, or
180
+ re-align its Project Brief and milestones; goal phases carry intent and
181
+ exit evidence, not tasks.
182
+ ```
183
+
184
+ Exit skill.
185
+
175
186
  **Mode: `import`** — **STOP.** Check if `"$PROJECT_PATH/plan.md"` exists:
176
187
 
177
188
  - If yes: Print: "Imported plan is ready. Run `oat-project-implement` to begin execution."
@@ -5,7 +5,7 @@ disable-model-invocation: true
5
5
  user-invocable: false
6
6
  allowed-tools: Read, Write, Glob, Grep
7
7
  metadata:
8
- version: 1.2.36
8
+ version: 1.2.37
9
9
  ---
10
10
 
11
11
  # Plan Writing Contract
@@ -87,8 +87,8 @@ then continue without formatting.
87
87
  ## Managed Dispatch Readiness and Review Contract
88
88
 
89
89
  All plan-producing workflows and their artifact reviews use this contract:
90
- spec-driven planning, quick-start, lite planning, brief authoring, imported
91
- plans, and provider-plan-via-import.
90
+ spec-driven planning, quick-start, lite planning, brief and goal authoring,
91
+ imported plans, and provider-plan-via-import.
92
92
  The contract runs before a plan becomes implementation-ready and immediately
93
93
  before each artifact review dispatch.
94
94
 
@@ -564,7 +564,7 @@ Every `plan.md` produced or edited by any OAT skill **must** satisfy these invar
564
564
 
565
565
  ```yaml
566
566
  ---
567
- oat_plan_source: spec-driven | quick | imported | lite | brief # origin workflow mode
567
+ oat_plan_source: spec-driven | quick | imported | lite | brief | goal # origin workflow mode
568
568
  oat_status: in_progress | complete # plan lifecycle status
569
569
  oat_ready_for: null | oat-project-implement # downstream consumer
570
570
  # Optional after implementation confirmation:
@@ -670,12 +670,14 @@ Required inputs vary by workflow mode. The calling skill reads `oat_workflow_mod
670
670
  | `import` | Preserved external source + normalized `plan.md` | No |
671
671
  | `lite` | `plan.md` only | No |
672
672
  | `brief` | `plan.md` (Project Brief) from the interview | No |
673
+ | `goal` | `plan.md` (Project Brief with Milestones) | No |
673
674
 
674
675
  - **`spec-driven`**: Plan is derived from a complete design document. All design components must be covered by tasks.
675
676
  - **`quick`**: Plan is generated directly from discovery decisions and repo knowledge. No design artifact is required.
676
677
  - **`import`**: External plan is preserved in `references/imported-plan.md` and normalized into canonical format. Subsequent edits follow this contract.
677
678
  - **`lite`**: `plan.md` is the sole requirements and implementation contract. It carries Summary, Decisions, Assumptions, Out of Scope, and Validation Criteria before one sequential phase; no discovery, spec, or design artifact is required.
678
679
  - **`brief`**: `plan.md` is the Project Brief authored by `oat-project-brief`: Goal, Outcomes with intended evidence, Approach, Decisions, Known Unknowns, and `## Phase pNN:` blocks with Intent and Exit evidence instead of tasks. `oat project validate-plan` applies the brief profile. Stable Task IDs, task totals, and the task grammar in this contract do not apply to the brief; execution records live in `implementation.md`, and the Reviews preservation rules apply unchanged.
680
+ - **`goal`**: `plan.md` is a Project Brief authored and amended by `oat-project-goal`, with the brief rules above plus a canonical `## Milestones` table (`oat-project-brief/references/brief-contract.md` section 12.1). `oat project validate-plan` applies the goal profile on top of the brief profile. Each milestone's approval is evidenced by its `oat_milestone_gates[mNN].plan` carrier after the first approval (section 12.4).
679
681
 
680
682
  ## Resume and Edit Guardrails
681
683
 
@@ -5,7 +5,7 @@ disable-model-invocation: false
5
5
  user-invocable: true
6
6
  allowed-tools: Read, Write, Bash(awk:*), Bash(gh:*), Bash(git:*), Bash(mktemp:*), Bash(oat:*), Bash(rm:*), Glob, Grep, AskUserQuestion
7
7
  metadata:
8
- version: 1.6.10
8
+ version: 1.6.11
9
9
  ---
10
10
 
11
11
  # Project PR (Final)
@@ -182,6 +182,55 @@ ls "$PROJECT_PATH/spec.md" "$PROJECT_PATH/design.md" 2>/dev/null
182
182
 
183
183
  If `WORKFLOW_MODE` is `quick`, `import`, `lite`, or `brief`, proceed without spec/design and include a reduced assurance note in the PR body. For lite, explicitly note that plan.md is the reduced artifact contract and the absence of discovery/spec/design is intentional. For brief, the note names the Project Brief (`plan.md`) as the requirements contract, audited against its numbered Outcomes, with the phase journal as the evidence record; the absence of discovery/spec/design is intentional.
184
184
 
185
+ **Goal mode (`oat_workflow_mode: goal`).** pr-final is the terminal delivery
186
+ registration owner, not a second project PR (brief contract sections 12.7 and
187
+ 12.9). Run Step 1.5 instead of Steps 2–6.
188
+
189
+ ### Step 1.5: Goal Terminal Delivery Registration (`goal` only)
190
+
191
+ 1. **Declaration first.** Require `oat_goal_status: declared_met` and a valid
192
+ outcome audit: run `oat project closeout-check "$PROJECT_PATH" --json`
193
+ (read-only). A `not-declared` or `audit-invalid` refusal routes to
194
+ `oat-project-goal`; refusals naming the review owners, scoped implement, or
195
+ `oat-project-pr-progress` route there. Continue only when the remaining
196
+ refusal is `phase-uncovered` (`nextOwner.skill: oat-project-pr-final`).
197
+ 2. **No redundant PR.** When the boundary reports no uncovered accepted phase,
198
+ delivery coverage already holds: create no pull request, write no state, and
199
+ report that the configured `pr` step is satisfied by delivery coverage at its
200
+ position (implement records `satisfied_by: { pr: delivery-coverage }`).
201
+ 3. **Terminal scope.** The terminal delivery's frozen `scope` is the uncovered
202
+ accepted phases named by the refusal, ordered by the brief, never audited
203
+ `deferred`, `retired`, or `extracted` phases. A delivery never spans
204
+ milestones (`goal-delivered-scope-changed`), so uncovered phases in several
205
+ milestones register one terminal delivery per milestone, in milestone order.
206
+ Registered from one head branch, they share the same member pull request:
207
+ the second delivery's `gh pr list` attach finds the PR the first one
208
+ created, and that shared member is expected, not a duplicate
209
+ (`oat-project-brief/references/brief-contract.md` section 12.7, Shared
210
+ members). Coverage judges each delivery's own scope and bound evidence.
211
+ 4. **Same registration contract.** Load the current
212
+ `oat-project-pr-progress/SKILL.md` and, for each terminal delivery, run its
213
+ Step 5.5 steps 1–3 and 4–7 as written (never step 3a, which
214
+ re-checks the active milestone's own registered delivery) with `kind: pr`: refresh, a
215
+ deliverable `oat project delivery check` (`status: ok`) for the subject,
216
+ stale evidence stopping before registration, the `registering` entry with
217
+ its lookup keys, reciprocal links, the integrated review and the captured
218
+ `exit_gate`, idempotent create-or-attach through `gh pr list`, and the
219
+ member and `status: open` record. The Step 5 ledger-path guard runs before
220
+ `gh pr create`. While the boundary still reports `phase-uncovered`, a
221
+ `summary` step configured before `pr` writes only project-directory files
222
+ and defers its repo-level ledger and decision-record
223
+ writes until this registration is done (`oat-project-summary` Step 6, Goal
224
+ terminal deferral), so the terminal subject stays deliverable.
225
+ 5. **Log.** After the registration commit, append exactly one structural entry
226
+ and commit it in this step:
227
+ `oat project log append --project "$PROJECT_PATH" --structural --producer oat-project-pr-final --ref <dNN> --idempotency-key "<goal-slug>-register-<dNN>" --body "Registered terminal delivery <dNN> (<ordered phase ids>) at <url>; <goal-slug>-register-<dNN>"`.
228
+ Never pre-check log configuration: the helper no-ops when logging is
229
+ disabled.
230
+ 6. Re-run `oat project closeout-check "$PROJECT_PATH" --json` and report the
231
+ next owner. Coverage completes only when every terminal delivery reaches its
232
+ agreed endpoint (`oat project delivery refresh` observes it).
233
+
185
234
  ### Step 2: Check Final Review Status
186
235
 
187
236
  Preferred source of truth (v1): `plan.md` `## Reviews` table.
@@ -787,3 +836,4 @@ If `state.md` is missing, skip with a warning.
787
836
  - User has clear next step to open PR (manual or gh)
788
837
  - Project `state.md` shows `oat_phase_status: pr_open`
789
838
  - Next milestone references both `oat-project-revise` (for feedback) and both supported `oat-project-complete` orderings
839
+ - Goal mode: a terminal delivery was registered only after a valid declaration and audit, only for uncovered accepted phases, through the pr-progress registration contract, with one structural log entry per registration; no PR was created when coverage already held