@open-agent-toolkit/cli 0.3.18 → 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.
- package/README.md +2 -1
- package/assets/agents/oat-phase-implementer.md +104 -3
- package/assets/agents/oat-reviewer.md +20 -5
- package/assets/bundle-metadata.json +1 -1
- package/assets/docs/reference/cli-reference.md +15 -7
- package/assets/docs/reference/oat-directory-structure.md +2 -0
- package/assets/docs/reference/project-artifacts.md +72 -1
- package/assets/docs/reference/project-state-machine.md +55 -6
- package/assets/docs/skills/brainstorm.md +3 -1
- package/assets/docs/skills/index.md +13 -9
- package/assets/docs/workflows/advanced/autonomy.md +12 -2
- package/assets/docs/workflows/advanced/dispatch-ceiling.md +2 -2
- package/assets/docs/workflows/advanced/workflow-gates.md +25 -7
- package/assets/docs/workflows/approvals-and-automation.md +25 -9
- package/assets/docs/workflows/choose-workflow.md +24 -8
- package/assets/docs/workflows/ideas/index.md +1 -1
- package/assets/docs/workflows/ideas/lifecycle.md +3 -2
- package/assets/docs/workflows/projects/closeout/closeout-skills.md +83 -5
- package/assets/docs/workflows/projects/closeout/pr-flow.md +9 -1
- package/assets/docs/workflows/projects/execution/execution-skills.md +27 -2
- package/assets/docs/workflows/projects/execution/implementation-execution.md +15 -0
- package/assets/docs/workflows/projects/execution/picking-up-projects.md +20 -1
- package/assets/docs/workflows/projects/lifecycle.md +172 -9
- package/assets/docs/workflows/projects/planning/hill-checkpoints.md +18 -1
- package/assets/docs/workflows/projects/planning/planning-skills.md +13 -10
- package/assets/docs/workflows/projects/planning/starting-projects.md +138 -20
- package/assets/docs/workflows/projects/reviews/index.md +36 -2
- package/assets/docs/workflows/projects/reviews/review-flavors.md +7 -3
- package/assets/public-package-versions.json +4 -4
- package/assets/skills/oat-brainstorm/SKILL.md +58 -9
- package/assets/skills/oat-brainstorm/references/destinations.md +12 -4
- package/assets/skills/oat-docs/SKILL.md +13 -4
- package/assets/skills/oat-pjm-review-backlog/SKILL.md +2 -2
- package/assets/skills/oat-project-autonomous/SKILL.md +20 -8
- package/assets/skills/oat-project-autonomous/references/gate-inventory.md +156 -122
- package/assets/skills/oat-project-brief/SKILL.md +592 -0
- package/assets/skills/oat-project-brief/references/brief-contract.md +743 -0
- package/assets/skills/oat-project-brief/references/docs/autonomy-contract.md +412 -0
- package/assets/skills/oat-project-brief/references/docs/gate-approval-record.md +93 -0
- package/assets/skills/oat-project-capture/SKILL.md +2 -2
- package/assets/skills/oat-project-complete/SKILL.md +16 -2
- package/assets/skills/oat-project-discover/SKILL.md +4 -2
- package/assets/skills/oat-project-dispatch-subagents/SKILL.md +9 -1
- package/assets/skills/oat-project-document/SKILL.md +17 -1
- package/assets/skills/oat-project-document/references/docs/autonomy-contract.md +156 -122
- package/assets/skills/oat-project-goal/SKILL.md +697 -0
- package/assets/skills/oat-project-goal/references/docs/autonomy-contract.md +412 -0
- package/assets/skills/oat-project-goal/references/docs/gate-approval-record.md +93 -0
- package/assets/skills/oat-project-implement/SKILL.md +1 -1
- package/assets/skills/oat-project-implement/references/completion-and-closeout.md +107 -0
- package/assets/skills/oat-project-implement/references/docs/autonomy-contract.md +156 -122
- package/assets/skills/oat-project-implement/references/docs/gate-approval-record.md +13 -0
- package/assets/skills/oat-project-implement/references/phase-execution.md +173 -1
- package/assets/skills/oat-project-implement/references/plan-and-resume.md +124 -3
- package/assets/skills/oat-project-import-plan/SKILL.md +5 -1
- package/assets/skills/oat-project-lite/SKILL.md +4 -1
- package/assets/skills/oat-project-lite/references/docs/autonomy-contract.md +156 -122
- package/assets/skills/oat-project-new/SKILL.md +5 -1
- package/assets/skills/oat-project-next/SKILL.md +71 -14
- package/assets/skills/oat-project-next/references/docs/gate-approval-record.md +13 -0
- package/assets/skills/oat-project-plan/SKILL.md +24 -3
- package/assets/skills/oat-project-plan-writing/SKILL.md +8 -4
- package/assets/skills/oat-project-pr-final/SKILL.md +65 -3
- package/assets/skills/oat-project-pr-final/references/docs/autonomy-contract.md +156 -122
- package/assets/skills/oat-project-pr-progress/SKILL.md +125 -4
- package/assets/skills/oat-project-progress/SKILL.md +63 -8
- package/assets/skills/oat-project-progress/references/docs/gate-approval-record.md +13 -0
- package/assets/skills/oat-project-promote-spec-driven/SKILL.md +2 -2
- package/assets/skills/oat-project-quick-start/SKILL.md +65 -1
- package/assets/skills/oat-project-quick-start/references/docs/autonomy-contract.md +156 -122
- package/assets/skills/oat-project-quick-start/references/docs/gate-approval-record.md +13 -0
- package/assets/skills/oat-project-reconcile/SKILL.md +94 -3
- package/assets/skills/oat-project-review-provide/SKILL.md +397 -12
- package/assets/skills/oat-project-review-receive/SKILL.md +155 -1
- package/assets/skills/oat-project-revise/SKILL.md +51 -4
- package/assets/skills/oat-project-summary/SKILL.md +150 -2
- package/assets/skills/oat-wave-execute/SKILL.md +3 -2
- package/assets/templates/implementation-brief.md +165 -0
- package/assets/templates/plan-brief.md +140 -0
- package/assets/templates/plan.md +1 -1
- package/assets/templates/state.md +8 -2
- package/dist/commands/project/closeout-check/closeout-invariant.d.ts +119 -3
- package/dist/commands/project/closeout-check/closeout-invariant.d.ts.map +1 -1
- package/dist/commands/project/closeout-check/closeout-invariant.js +454 -2
- package/dist/commands/project/closeout-check/index.d.ts +21 -3
- package/dist/commands/project/closeout-check/index.d.ts.map +1 -1
- package/dist/commands/project/closeout-check/index.js +190 -4
- package/dist/commands/project/complete-state/index.d.ts +2 -1
- package/dist/commands/project/complete-state/index.d.ts.map +1 -1
- package/dist/commands/project/complete-state/index.js +7 -1
- package/dist/commands/project/delivery/check.d.ts +66 -0
- package/dist/commands/project/delivery/check.d.ts.map +1 -0
- package/dist/commands/project/delivery/check.js +232 -0
- package/dist/commands/project/delivery/evidence.d.ts +171 -0
- package/dist/commands/project/delivery/evidence.d.ts.map +1 -0
- package/dist/commands/project/delivery/evidence.js +902 -0
- package/dist/commands/project/delivery/index.d.ts +7 -0
- package/dist/commands/project/delivery/index.d.ts.map +1 -0
- package/dist/commands/project/delivery/index.js +13 -0
- package/dist/commands/project/delivery/refresh.d.ts +110 -0
- package/dist/commands/project/delivery/refresh.d.ts.map +1 -0
- package/dist/commands/project/delivery/refresh.js +441 -0
- package/dist/commands/project/index.d.ts.map +1 -1
- package/dist/commands/project/index.js +2 -0
- package/dist/commands/project/log/append.d.ts +6 -0
- package/dist/commands/project/log/append.d.ts.map +1 -1
- package/dist/commands/project/log/append.js +6 -1
- package/dist/commands/project/new/scaffold.d.ts +1 -1
- package/dist/commands/project/new/scaffold.d.ts.map +1 -1
- package/dist/commands/project/new/scaffold.js +81 -7
- package/dist/commands/project/promote/promote.d.ts +46 -1
- package/dist/commands/project/promote/promote.d.ts.map +1 -1
- package/dist/commands/project/promote/promote.js +646 -5
- package/dist/commands/project/validate-plan/frontmatter.d.ts +12 -0
- package/dist/commands/project/validate-plan/frontmatter.d.ts.map +1 -0
- package/dist/commands/project/validate-plan/frontmatter.js +27 -0
- package/dist/commands/project/validate-plan/index.d.ts.map +1 -1
- package/dist/commands/project/validate-plan/index.js +62 -18
- package/dist/commands/project/validate-plan/profiles.d.ts +69 -0
- package/dist/commands/project/validate-plan/profiles.d.ts.map +1 -0
- package/dist/commands/project/validate-plan/profiles.js +420 -0
- package/dist/commands/project/validate-plan/validate-plan.d.ts +3 -19
- package/dist/commands/project/validate-plan/validate-plan.d.ts.map +1 -1
- package/dist/commands/project/validate-plan/validate-plan.js +5 -82
- package/dist/commands/shared/frontmatter.d.ts +1 -1
- package/dist/commands/shared/frontmatter.d.ts.map +1 -1
- package/dist/commands/shared/frontmatter.js +2 -0
- package/dist/commands/state/generate.d.ts.map +1 -1
- package/dist/commands/state/generate.js +82 -2
- package/dist/commands/tools/shared/pack-manifest.d.ts.map +1 -1
- package/dist/commands/tools/shared/pack-manifest.js +4 -0
- package/package.json +2 -2
|
@@ -5,7 +5,7 @@ disable-model-invocation: false
|
|
|
5
5
|
user-invocable: true
|
|
6
6
|
allowed-tools: Read, Write, Bash(git:*), Bash(oat:*), Glob, Grep, AskUserQuestion, Task
|
|
7
7
|
metadata:
|
|
8
|
-
version: 1.6.
|
|
8
|
+
version: 1.6.11
|
|
9
9
|
---
|
|
10
10
|
|
|
11
11
|
# Receive Review
|
|
@@ -385,6 +385,109 @@ Applies to `code` reviews only. (`artifact` reviews are handled via Step 2.6, th
|
|
|
385
385
|
3. If scope is `pNN-pMM` (contiguous phase range): add fix tasks to the last phase in the range (`pMM`)
|
|
386
386
|
4. If scope is `final` or SHA/range review: add fix tasks to a new "Review Fixes" phase or the last phase
|
|
387
387
|
|
|
388
|
+
**Brief modes (`oat_workflow_mode: brief`).** The brief never carries planned
|
|
389
|
+
tasks, so fix work becomes execution records in the journal and
|
|
390
|
+
`oat-project-brief/references/brief-contract.md` (sections 3, 7, and 10) wins
|
|
391
|
+
where this skill differs. Resolve the target phase and apply the late-fix rule:
|
|
392
|
+
|
|
393
|
+
1. **Reviewed phase.** For `pNN` or `p-revN`, the reviewed phase is that
|
|
394
|
+
phase. For `pNN-pMM`, `final`, or an explicit SHA range, it is the last
|
|
395
|
+
phase in the artifact's ordered `oat_review_phase_ids`; when that field is
|
|
396
|
+
absent or empty, it is the last phase in document order whose journal
|
|
397
|
+
section has a `**Base:**`.
|
|
398
|
+
2. **Late-fix rule.** If no later phase in document order has a `**Base:**`
|
|
399
|
+
in `implementation.md`, the fixes go under the reviewed phase, whose
|
|
400
|
+
journal `**Status:** completed` line is rewritten to `**Status:** in_progress`
|
|
401
|
+
(an `in_progress` phase stays `in_progress`). Its `**Base:**` never changes;
|
|
402
|
+
the fix commits advance its `**Head:**` when the phase ends again.
|
|
403
|
+
3. Otherwise a later phase has started: append a revision phase with the next
|
|
404
|
+
unused `p-revN` ID. In `plan.md`, add it after the last phase block (before
|
|
405
|
+
`## Parallelism` when present) in the exact phase grammar plus the marker:
|
|
406
|
+
|
|
407
|
+
```markdown
|
|
408
|
+
## Phase p-revN: Review fixes for pNN
|
|
409
|
+
|
|
410
|
+
**Intent:** resolve {finding IDs} from reviews/archived/{REVIEW_FILENAME}
|
|
411
|
+
**Exit evidence:** a passing re-review of p-revN that re-evaluates pNN's findings
|
|
412
|
+
**Provisional:** no
|
|
413
|
+
**Corrects:** pNN
|
|
414
|
+
```
|
|
415
|
+
|
|
416
|
+
In `implementation.md`, add the matching `## Phase p-revN: Review fixes for pNN`
|
|
417
|
+
section after the last phase section with `**Status:** pending` and
|
|
418
|
+
`**Corrects:** pNN` directly under the heading, and a Progress Overview row.
|
|
419
|
+
Add a pending `p-revN` `code` row to the brief's `## Reviews` table and
|
|
420
|
+
update the `## Implementation Complete` phase total. The corrected phase
|
|
421
|
+
keeps its original anchors and status.
|
|
422
|
+
|
|
423
|
+
Never write `### Task` headings into the brief, and never write `**Base:**` or
|
|
424
|
+
`**Head:**`: `oat-project-implement` records anchors when the phase starts and
|
|
425
|
+
ends.
|
|
426
|
+
|
|
427
|
+
**Goal mode (`oat_workflow_mode: goal`).** The brief-mode rules above apply,
|
|
428
|
+
with `oat-project-brief/references/brief-contract.md` section 12 winning where
|
|
429
|
+
this skill differs (12.3 transitions, 12.5 the goal ladder exception, 12.6
|
|
430
|
+
explicit scopes and recovery, 12.7 the registry). A phase-unit review (`pNN`,
|
|
431
|
+
`p-revN`) is received exactly as in brief mode. For an integrated milestone or
|
|
432
|
+
delivery review:
|
|
433
|
+
|
|
434
|
+
1. **Identity.** The target is the artifact's `oat_review_requested_scope`
|
|
435
|
+
(`mNN` or `mNN/dNN`) with its ordered `oat_review_phase_ids`, or the
|
|
436
|
+
pending `oat_goal_recovery` record whose `review_artifact` names this
|
|
437
|
+
artifact. A recovery record that names a different artifact is never
|
|
438
|
+
satisfied by this one. The target is **older** when its milestone is not
|
|
439
|
+
`oat_milestone`, or its delivery belongs to an earlier milestone;
|
|
440
|
+
otherwise it is the **active** milestone.
|
|
441
|
+
2. **Queued fixes.** Place the fixes by the late-fix rule above, with the
|
|
442
|
+
reviewed phase being the last phase of the explicit set. An appended
|
|
443
|
+
`p-revN` joins the **target** milestone's `## Milestones` row (append it to
|
|
444
|
+
that row's phase list); a frozen delivery scope is never edited. Then
|
|
445
|
+
invalidate the evidence: run
|
|
446
|
+
`oat project delivery check --project "$PROJECT_PATH" --subject <mNN|dNN> --json`,
|
|
447
|
+
confirm the report's `exit.source` is `milestone-carrier` and its `status`
|
|
448
|
+
is `undeliverable`, and write `oat_milestone_gates[mNN].exit.freshness: stale`
|
|
449
|
+
with `freshness_reason: "fixes queued from reviews/archived/{REVIEW_FILENAME}"`
|
|
450
|
+
followed by the report's `exit.reason` when present; for a registered
|
|
451
|
+
delivery also write its `integrated_review.disposition: stale`. Queued fixes
|
|
452
|
+
invalidate the review and exit-gate evidence even when the check would
|
|
453
|
+
still report them fresh, so the exit gate runs again before the next
|
|
454
|
+
integrated review.
|
|
455
|
+
- **Active target:** update the execution pointer as in brief mode and
|
|
456
|
+
write `oat_milestone_status: implementing` (from `reviewing` or
|
|
457
|
+
`delivering`).
|
|
458
|
+
- **Older target:** write only `oat_goal_recovery: { milestone,
|
|
459
|
+
delivery_id, phase_ids, stage: implementing, review_artifact: null }`,
|
|
460
|
+
with `phase_ids` the explicit set plus any appended `p-revN` (create the
|
|
461
|
+
record, or move an existing one for this target back to `implementing`).
|
|
462
|
+
Leave `oat_milestone`, `oat_milestone_status`, `oat_current_task_id`, and
|
|
463
|
+
`oat_current_task` unchanged; Step 7's brief pointer write is skipped.
|
|
464
|
+
3. **Clean receive.** `fixes_completed` is not a passed review. When no fixes
|
|
465
|
+
are queued, write the Reviews event `passed` (Step 6) and persist the
|
|
466
|
+
authoritative evidence in tracked records before Step 7.5 archives the file:
|
|
467
|
+
the Reviews row keeps its `Reviewed Head`; for a registered delivery the
|
|
468
|
+
same write rewrites `integrated_review` (`artifact:
|
|
469
|
+
reviews/archived/{REVIEW_FILENAME}`, `scope` from `oat_review_phase_ids`,
|
|
470
|
+
`bound_revisions` from the reviewed member base and head,
|
|
471
|
+
`disposition: passed`), writes each `members[i].reviewed_head` to the
|
|
472
|
+
reviewed member head that `bound_revisions` binds for it, and replaces
|
|
473
|
+
`exit_gate` with the current allowed milestone exit carrier. The delivery's
|
|
474
|
+
`exit_gate` and `members[].reviewed_head` are set once and may change only
|
|
475
|
+
in the commit that records a review naming a different artifact of this
|
|
476
|
+
delivery (section 12.8), so never split these writes. Commit them (Step 7.6), then
|
|
477
|
+
re-validate scope, revisions and the exit carrier with
|
|
478
|
+
`oat project delivery check --project "$PROJECT_PATH" --subject <mNN|dNN> --json`:
|
|
479
|
+
- `status: ok` → **active target:** write `oat_milestone_status: delivering`
|
|
480
|
+
(`reviewing → delivering`); **older target:** advance the recovery record
|
|
481
|
+
to `stage: delivering`. Only review-receive writes this transition.
|
|
482
|
+
- `status: undeliverable` with a not-fresh `exit` → write
|
|
483
|
+
`exit.freshness: stale` with the report's `exit.reason`; the router
|
|
484
|
+
sends the scoped closeout back to `oat-project-implement`.
|
|
485
|
+
- `status: undeliverable` with a not-fresh `review` → write no transition
|
|
486
|
+
and route to `oat-project-review-provide` for a new integrated review of
|
|
487
|
+
the same explicit set.
|
|
488
|
+
|
|
489
|
+
Commit the transition or invalidation as its own bookkeeping commit.
|
|
490
|
+
|
|
388
491
|
### Step 4: Determine Next Task IDs
|
|
389
492
|
|
|
390
493
|
Read plan.md to find the last task ID in the target phase:
|
|
@@ -414,6 +517,12 @@ Derive `TASK_PREFIX` from scope:
|
|
|
414
517
|
- Find highest task number in target phase using the correct `TASK_PREFIX` (e.g., `prev1-t02`)
|
|
415
518
|
- New tasks continue sequentially: `prev1-t03`, `prev1-t04`, etc.
|
|
416
519
|
|
|
520
|
+
In brief modes read the execution records under the target phase's section of
|
|
521
|
+
`implementation.md` instead of `plan.md`
|
|
522
|
+
(`^### Task ${TASK_PREFIX}-t[0-9]+:` inside that section). Record IDs take the
|
|
523
|
+
next free ordinal and are never reused, including failed, cancelled, and
|
|
524
|
+
no-change records. A new revision phase starts at `prevN-t01`.
|
|
525
|
+
|
|
417
526
|
### Step 5: Convert Findings to Tasks
|
|
418
527
|
|
|
419
528
|
Each generated fix task initializes `TASK_OWNED_FILES=()` before its first
|
|
@@ -462,6 +571,26 @@ guard instead of the branch commit template above.
|
|
|
462
571
|
- Prefix with `(review)` to indicate review-generated task
|
|
463
572
|
- Use active verb: "Fix...", "Add...", "Update..."
|
|
464
573
|
|
|
574
|
+
**Brief modes:** record each Critical, High, and Medium finding (and each Low
|
|
575
|
+
the disposition converts) as an execution record under the target phase in
|
|
576
|
+
`implementation.md`, after that phase's existing records, instead of a plan
|
|
577
|
+
task:
|
|
578
|
+
|
|
579
|
+
```markdown
|
|
580
|
+
### Task {task_id}: (review) {Finding title}
|
|
581
|
+
|
|
582
|
+
**Status:** pending
|
|
583
|
+
**Source review:** reviews/archived/{REVIEW_FILENAME} ({finding IDs})
|
|
584
|
+
|
|
585
|
+
Intent: {issue description and fix guidance from the review}
|
|
586
|
+
Files: `{file from finding}`
|
|
587
|
+
Proof: `{verification command from review or standard test command}`
|
|
588
|
+
```
|
|
589
|
+
|
|
590
|
+
The executor fills `**Executor:**`, the live handle, and the closing
|
|
591
|
+
`**Commit:**` when the work runs, and commits with `fix({task_id}): …` so the
|
|
592
|
+
message keeps `(pNN-tNN)`. Queued records never change phase totals.
|
|
593
|
+
|
|
465
594
|
### Step 6: Update Plan.md
|
|
466
595
|
|
|
467
596
|
Add new tasks to plan.md in the target phase. When adding or editing tasks, preserve/restore shared `plan.md` invariants per the `oat-project-plan-writing` contract (stable task IDs, required sections, review table preservation, accurate `## Implementation Complete` totals).
|
|
@@ -484,6 +613,19 @@ Add new tasks to plan.md in the target phase. When adding or editing tasks, pres
|
|
|
484
613
|
- Update `## Implementation Complete` totals (phase counts + total task count) so downstream PR/review summaries don’t go stale.
|
|
485
614
|
- If the plan includes any phase rollups that reference task counts, update those too.
|
|
486
615
|
|
|
616
|
+
In brief modes `plan.md` changes only in its `## Reviews` table and, under the
|
|
617
|
+
late-fix rule, by an appended `## Phase p-revN:` block; there are no task
|
|
618
|
+
totals to update. The Reviews event update below is unchanged: the same
|
|
619
|
+
artifact-identified event moves to `fixes_added` with its `Reviewed Head`,
|
|
620
|
+
`Invocation`, and `Gate Target` provenance preserved, and the archived
|
|
621
|
+
artifact keeps its brief anchor record fields (`oat_review_requested_scope`,
|
|
622
|
+
`oat_review_phase_ids`, `oat_review_base_sha`, `oat_review_scope_source`, and
|
|
623
|
+
any `oat_review_fallback_reason`, `oat_review_integration_commits`, and
|
|
624
|
+
`oat_review_narrowed_from`) unchanged. When a `p-revN` review is received with
|
|
625
|
+
no fixes needed, its own event moves to `passed` and the event of the phase
|
|
626
|
+
named by its `**Corrects:**` line that this skill set to `fixes_added` also
|
|
627
|
+
moves to `passed`, citing the revision review in the implementation note.
|
|
628
|
+
|
|
487
629
|
**Keep plan runnable:**
|
|
488
630
|
|
|
489
631
|
- Do NOT leave plan.md in a state that blocks `oat-project-implement`.
|
|
@@ -563,6 +705,13 @@ After the fix tasks are complete:
|
|
|
563
705
|
- `oat_phase_status: in_progress`
|
|
564
706
|
- `oat_current_task: {first_fix_task_id}` (or next incomplete)
|
|
565
707
|
- `oat_project_state_updated: "{ISO 8601 UTC timestamp}"`
|
|
708
|
+
- In brief modes, write the `### Review Received: {scope}` note inside the
|
|
709
|
+
target phase's journal section after its markers, list the queued
|
|
710
|
+
execution-record IDs as the new tasks, set both `oat_current_task_id` in
|
|
711
|
+
`implementation.md` and `oat_current_task` in `state.md` to the target
|
|
712
|
+
phase ID (the reviewed phase, or the new `p-revN`), and update that phase's
|
|
713
|
+
Progress Overview row status. The phase-unit totals change only when a
|
|
714
|
+
revision phase was appended.
|
|
566
715
|
|
|
567
716
|
### Step 7.5: Archive the Consumed Review Artifact
|
|
568
717
|
|
|
@@ -742,6 +891,11 @@ Low findings handling is scope-aware:
|
|
|
742
891
|
|
|
743
892
|
### Step 10: Route to Next Action
|
|
744
893
|
|
|
894
|
+
**Goal mode:** report the router's next skill (`oat project status --json`)
|
|
895
|
+
instead of offering a task list when the receive wrote `delivering`, advanced a
|
|
896
|
+
recovery record, or routed to review-provide or scoped closeout; older-target
|
|
897
|
+
fixes resume through the recovery record, never through the active milestone.
|
|
898
|
+
|
|
745
899
|
**Ask user:**
|
|
746
900
|
|
|
747
901
|
```
|
|
@@ -5,7 +5,7 @@ disable-model-invocation: true
|
|
|
5
5
|
user-invocable: true
|
|
6
6
|
allowed-tools: Read, Write, Bash(git:*), Glob, Grep, AskUserQuestion
|
|
7
7
|
metadata:
|
|
8
|
-
version: 1.0.
|
|
8
|
+
version: 1.0.7
|
|
9
9
|
---
|
|
10
10
|
|
|
11
11
|
# Project Revise
|
|
@@ -199,13 +199,54 @@ Fix tasks that edit synced artifacts use `oat project push` under the scope
|
|
|
199
199
|
guard instead of the branch commit template above.
|
|
200
200
|
````
|
|
201
201
|
|
|
202
|
+
**Brief modes (`oat_workflow_mode: brief`):** the brief never carries tasks.
|
|
203
|
+
Insert the revision phase after the last phase block of `plan.md` (before
|
|
204
|
+
`## Parallelism` when present), with Intent and Exit evidence and no
|
|
205
|
+
`### Task` headings:
|
|
206
|
+
|
|
207
|
+
```markdown
|
|
208
|
+
## Phase p-rev{N}: Revision {N}
|
|
209
|
+
|
|
210
|
+
**Intent:** {the feedback items, one clause each} (source: inline feedback, {today})
|
|
211
|
+
**Exit evidence:** {verification that shows each item is addressed, and a passing review of p-rev{N}}
|
|
212
|
+
**Provisional:** no
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
Add a pending `p-rev{N}` `code` row to the brief's `## Reviews` table. The
|
|
216
|
+
executor opens `prev{N}-tNN` execution records in `implementation.md` when the
|
|
217
|
+
work starts and commits them as `fix(prev{N}-tNN): …`; revise writes none.
|
|
218
|
+
|
|
219
|
+
**Goal mode (`oat_workflow_mode: goal`):** the brief-mode rules apply, with
|
|
220
|
+
`oat-project-brief/references/brief-contract.md` section 12.6 winning. Inline
|
|
221
|
+
feedback requires an explicit target before any write: a milestone or
|
|
222
|
+
delivery identity (`mNN` or `mNN/dNN`), named by the user or by the open
|
|
223
|
+
delivery the feedback is about. Ask for it when it is not stated; never infer
|
|
224
|
+
it from the open PR's commit labels or a first–last phase range.
|
|
225
|
+
|
|
226
|
+
- **Phase-only `p-rev{N}`.** The revision phase is a phase-unit with no
|
|
227
|
+
execution records, as in brief mode, and it joins the **target** milestone:
|
|
228
|
+
append `p-rev{N}` to that milestone's `## Milestones` row, so its membership
|
|
229
|
+
is exact. A registered delivery's frozen scope is never edited.
|
|
230
|
+
- **Invalidate the target's evidence.** Write
|
|
231
|
+
`oat_milestone_gates[mNN].exit.freshness: stale` with
|
|
232
|
+
`freshness_reason: "revision p-rev{N} (inline feedback)"`, and for a
|
|
233
|
+
registered target delivery its `integrated_review.disposition: stale`.
|
|
234
|
+
- **Active target** (the milestone is `oat_milestone`): write the ordinary
|
|
235
|
+
pointer (4e, 4f) and `oat_milestone_status: implementing`.
|
|
236
|
+
- **Older target** (an earlier milestone or its delivery): create or advance
|
|
237
|
+
`oat_goal_recovery: { milestone, delivery_id, phase_ids: [the target's
|
|
238
|
+
ordered set plus p-rev{N}], stage: implementing, review_artifact: null }`
|
|
239
|
+
instead, and skip the 4e/4f pointer and status writes: `oat_milestone`,
|
|
240
|
+
`oat_milestone_status`, `oat_current_task_id`, and `oat_current_task` stay
|
|
241
|
+
unchanged.
|
|
242
|
+
|
|
202
243
|
**Task naming:** Prefix with `(revision)` — following the `(review)` convention in review-receive.
|
|
203
244
|
|
|
204
245
|
**Task IDs:** `prev{N}-t{NN}` format (e.g., `prev1-t01`, `prev1-t02`).
|
|
205
246
|
|
|
206
247
|
#### 4d: Update plan.md Totals
|
|
207
248
|
|
|
208
|
-
Update `## Implementation Complete` section to include the new revision phase and tasks in the totals.
|
|
249
|
+
Update `## Implementation Complete` section to include the new revision phase and tasks in the totals. In brief modes the total counts phases only.
|
|
209
250
|
|
|
210
251
|
#### 4e: Update implementation.md
|
|
211
252
|
|
|
@@ -216,6 +257,12 @@ Update frontmatter to point at the first revision task so `oat-project-implement
|
|
|
216
257
|
|
|
217
258
|
Update the Progress Overview table to include the new revision phase (e.g., add a `Phase p-rev{N}` row with task count and `in_progress` status).
|
|
218
259
|
|
|
260
|
+
In brief modes point the journal at the phase instead of a task: set
|
|
261
|
+
`oat_current_task_id: p-rev{N}`, add a `## Phase p-rev{N}: Revision {N}`
|
|
262
|
+
section after the last phase section with `**Status:** pending` directly under
|
|
263
|
+
the heading (the root writes `**Base:**` when the phase starts), and add a
|
|
264
|
+
`p-rev{N}` Progress Overview row with one unit, `0/1` accepted.
|
|
265
|
+
|
|
219
266
|
Add a "Revision Received" entry:
|
|
220
267
|
|
|
221
268
|
```markdown
|
|
@@ -237,7 +284,7 @@ Add a "Revision Received" entry:
|
|
|
237
284
|
#### 4f: Update state.md
|
|
238
285
|
|
|
239
286
|
- `oat_phase_status: in_progress`
|
|
240
|
-
- `oat_current_task: prev{N}-t01`
|
|
287
|
+
- `oat_current_task: prev{N}-t01` (brief modes: `p-rev{N}`)
|
|
241
288
|
- `oat_project_state_updated: "{ISO 8601 UTC timestamp}"`
|
|
242
289
|
|
|
243
290
|
#### 4g: Route to Implement
|
|
@@ -265,7 +312,7 @@ This is the key value revise adds: state transition management so agents know th
|
|
|
265
312
|
- **Review artifact feedback:** Delegate to `oat-project-review-receive`
|
|
266
313
|
- Delegating means loading the selected skill's current `SKILL.md` and following it, or dispatching a child that carries it, if environment supports skill chaining; otherwise tell the user which skill to run and stop. Never act from a remembered delegation outcome.
|
|
267
314
|
|
|
268
|
-
These skills use their existing conventions: `(review)` task prefix, severity classification, standard task IDs appended to the last plan phase. This is correct — structured review feedback should go through the structured triage model.
|
|
315
|
+
These skills use their existing conventions: `(review)` task prefix, severity classification, standard task IDs appended to the last plan phase. This is correct — structured review feedback should go through the structured triage model. In brief modes `oat-project-review-receive` records the fixes as `(review)` execution records in the journal under its brief-mode late-fix rule, never as plan tasks.
|
|
269
316
|
|
|
270
317
|
#### 5c: Post-Delegation State
|
|
271
318
|
|
|
@@ -5,7 +5,7 @@ disable-model-invocation: false
|
|
|
5
5
|
user-invocable: true
|
|
6
6
|
allowed-tools: Read, Write, Bash(git:*), Bash(jq:*), Bash(oat config:*), Bash(oat decision:*), Bash(oat pjm:*), Bash(oat project log:*), Bash(oat project push:*), Bash(oat project scope:*), Bash(oat template:*), Bash(oat tools:*), Glob, Grep, AskUserQuestion
|
|
7
7
|
metadata:
|
|
8
|
-
version: 1.5.
|
|
8
|
+
version: 1.5.10
|
|
9
9
|
---
|
|
10
10
|
|
|
11
11
|
# Project Summary
|
|
@@ -22,7 +22,7 @@ Produce a `summary.md` that serves as institutional memory — capturing what wa
|
|
|
22
22
|
|
|
23
23
|
## Prerequisites
|
|
24
24
|
|
|
25
|
-
**Required:** Active project with `implementation.md` that has meaningful progress (at least one completed task).
|
|
25
|
+
**Required:** Active project with `implementation.md` that has meaningful progress (at least one completed task; in brief and goal modes, at least one accepted phase-unit).
|
|
26
26
|
|
|
27
27
|
## Mode Assertion
|
|
28
28
|
|
|
@@ -120,6 +120,12 @@ test -f "$PROJECT_PATH/implementation.md"
|
|
|
120
120
|
|
|
121
121
|
**If exists:** Read the file. Check for at least one task with `**Status:** completed`. If no completed tasks, warn: "No completed tasks found. Summary will be minimal."
|
|
122
122
|
|
|
123
|
+
In brief modes the prerequisite is one accepted phase-unit instead: a
|
|
124
|
+
`**Status:** completed` line directly under a `## Phase` heading of the
|
|
125
|
+
journal, before that phase's first `### Task` record (a completed execution
|
|
126
|
+
record is not an accepted unit). If no phase-unit is accepted, warn: "No
|
|
127
|
+
accepted phase-units found. Summary will be minimal."
|
|
128
|
+
|
|
123
129
|
### Step 2: Read Project Artifacts
|
|
124
130
|
|
|
125
131
|
For `oat_workflow_mode: lite`, use the reduced artifact contract and skip the
|
|
@@ -131,6 +137,27 @@ project accepts `discovery.md`, `spec.md`, and `design.md` as absent; do not
|
|
|
131
137
|
read or require them. Ground the summary in what actually shipped, with
|
|
132
138
|
`implementation.md` taking precedence over the plan.
|
|
133
139
|
|
|
140
|
+
For `oat_workflow_mode: brief`, read the brief's sources instead of the
|
|
141
|
+
ordinary list below; `discovery.md`, `spec.md`, and `design.md` are absent by
|
|
142
|
+
design:
|
|
143
|
+
|
|
144
|
+
| Source | Use |
|
|
145
|
+
| ---------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- |
|
|
146
|
+
| `plan.md` Goal, Outcomes, Approach | Overview and what the project set out to do; audit What Was Implemented against the numbered Outcomes |
|
|
147
|
+
| `plan.md` Decisions, Constraints and Out of Scope | Key Decisions and Tradeoffs Made |
|
|
148
|
+
| `plan.md` phases and `## Reviews` | Phase intent and review dispositions |
|
|
149
|
+
| `implementation.md` phase sections | Accepted phases, anchors, execution records, verification evidence, deviations, and `Brief deltas` |
|
|
150
|
+
| `implementation.md` Final Summary | Shipped results; takes precedence over the brief's plans |
|
|
151
|
+
| `state.md`, `project-log.md`, `oat-execution-learnings.md`, `references/research/` | Same roles as below, when present |
|
|
152
|
+
|
|
153
|
+
For `oat_workflow_mode: goal`, read the brief sources above, plus the
|
|
154
|
+
`## Milestones` table (organize What Was Implemented by milestone), the
|
|
155
|
+
`state.md` delivery registry (`oat_deliveries`: each delivery's scope, members
|
|
156
|
+
and endpoint observation are shipped results), and, after a declaration, the
|
|
157
|
+
outcome audit (`oat_goal_outcome_audit`) as the authoritative per-outcome
|
|
158
|
+
disposition, with deferred and retired obligations listed under Follow-up
|
|
159
|
+
Items.
|
|
160
|
+
|
|
134
161
|
For every other workflow mode, read all available artifacts for synthesis:
|
|
135
162
|
|
|
136
163
|
- `"$PROJECT_PATH/discovery.md"` — initial request, decisions, constraints
|
|
@@ -231,6 +258,99 @@ test -f "$PROJECT_PATH/summary.md"
|
|
|
231
258
|
|
|
232
259
|
Copy template: `oat template resolve summary --output "$PROJECT_PATH/summary.md"`
|
|
233
260
|
|
|
261
|
+
**Brief modes (`oat_workflow_mode: brief` or `goal`): freshness by phase fingerprint.**
|
|
262
|
+
Replace the task and revision comparison above with
|
|
263
|
+
`oat_summary_phase_fingerprint`, a stable hash of the ordered accepted phase
|
|
264
|
+
IDs; for each accepted phase its `**Head:**`, its `**Status:**` line, and the
|
|
265
|
+
`Status` of the latest `## Reviews` `code` row for that phase; and the brief's
|
|
266
|
+
Goal, Outcomes, and Decisions sections with whitespace normalized. Compute it
|
|
267
|
+
in bash from the project root with `PROJECT_PATH` set:
|
|
268
|
+
|
|
269
|
+
````bash
|
|
270
|
+
brief_summary_marker() {
|
|
271
|
+
awk -v id="$1" -v key="$2" '
|
|
272
|
+
/^[ \t]*(```|~~~)/ { fence = !fence; next }
|
|
273
|
+
fence { next }
|
|
274
|
+
/^#/ { owner = (index($0, "## Phase " id ": ") == 1); next }
|
|
275
|
+
!owner || found { next }
|
|
276
|
+
index($0, "**" key ":** ") == 1 {
|
|
277
|
+
v = substr($0, length("**" key ":** ") + 1); sub(/[ \t]+$/, "", v); print v; found = 1
|
|
278
|
+
}
|
|
279
|
+
' "$PROJECT_PATH/implementation.md"
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
brief_summary_fingerprint() {
|
|
283
|
+
local plan="$PROJECT_PATH/plan.md" id status head review section
|
|
284
|
+
{
|
|
285
|
+
for id in $(awk '
|
|
286
|
+
/^[ \t]*(```|~~~)/ { fence = !fence; next }
|
|
287
|
+
fence { next }
|
|
288
|
+
/^## Phase (p[0-9]+|p-rev[0-9]+): / { id = $3; sub(/:$/, "", id); print id }
|
|
289
|
+
' "$plan"); do
|
|
290
|
+
status=$(brief_summary_marker "$id" Status)
|
|
291
|
+
[ "$status" = completed ] || continue
|
|
292
|
+
head=$(brief_summary_marker "$id" Head)
|
|
293
|
+
review=$(awk -v id="$id" '
|
|
294
|
+
/^## Reviews[ \t]*$/ { in_reviews = 1; next }
|
|
295
|
+
in_reviews && /^## / { exit }
|
|
296
|
+
!in_reviews || !/^\|/ { next }
|
|
297
|
+
{
|
|
298
|
+
n = split($0, cells, "|")
|
|
299
|
+
for (i = 2; i < n; i++) { c = cells[i]; gsub(/^[ \t]+|[ \t]+$/, "", c); cells[i] = c }
|
|
300
|
+
if (!sc) { for (i = 2; i < n; i++) { if (cells[i] == "Scope") sc = i; if (cells[i] == "Type") ty = i; if (cells[i] == "Status") st = i }; next }
|
|
301
|
+
if (cells[sc] == id && cells[ty] == "code") last = cells[st]
|
|
302
|
+
}
|
|
303
|
+
END { print (last == "" ? "-" : last) }
|
|
304
|
+
' "$plan")
|
|
305
|
+
printf 'phase=%s head=%s status=%s review=%s\n' "$id" "${head:--}" "$status" "$review"
|
|
306
|
+
done
|
|
307
|
+
for section in Goal Outcomes Decisions; do
|
|
308
|
+
printf 'section=%s ' "$section"
|
|
309
|
+
awk -v heading="## $section" '
|
|
310
|
+
/^## / { in_section = ($0 == heading); next }
|
|
311
|
+
in_section { print }
|
|
312
|
+
' "$plan" | tr -s ' \t\n' ' ' | sed 's/^ //; s/ $//'
|
|
313
|
+
printf '\n'
|
|
314
|
+
done
|
|
315
|
+
} | { command -v sha256sum >/dev/null 2>&1 && sha256sum || shasum -a 256; } | cut -d' ' -f1
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
CURRENT_PHASE_FINGERPRINT=$(brief_summary_fingerprint)
|
|
319
|
+
````
|
|
320
|
+
|
|
321
|
+
**Goal fragment.** In goal mode the fingerprint also covers the delivery IDs
|
|
322
|
+
at endpoint, so a delivery newly observed at its agreed endpoint requires a
|
|
323
|
+
refresh. Append one `delivery=<dNN>` line per registry entry with
|
|
324
|
+
`status: at_endpoint` or a recorded `endpoint_attainment`, in registry order,
|
|
325
|
+
to the hashed input:
|
|
326
|
+
|
|
327
|
+
```bash
|
|
328
|
+
goal_summary_deliveries() {
|
|
329
|
+
oat project status --project-path "$PROJECT_PATH" --field project.deliveries 2>/dev/null |
|
|
330
|
+
node -e 'let s = ""; process.stdin.on("data", (d) => (s += d)).on("end", () => {
|
|
331
|
+
for (const d of JSON.parse(s.trim() || "null") ?? [])
|
|
332
|
+
if (d.status === "at_endpoint" || d.endpoint_attainment) console.log(`delivery=${d.delivery_id}`);
|
|
333
|
+
})'
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
if [ "$(oat project status --project-path "$PROJECT_PATH" --field project.workflowMode 2>/dev/null)" = goal ]; then
|
|
337
|
+
CURRENT_PHASE_FINGERPRINT=$(
|
|
338
|
+
{ printf '%s\n' "$CURRENT_PHASE_FINGERPRINT"; goal_summary_deliveries; } |
|
|
339
|
+
{ command -v sha256sum >/dev/null 2>&1 && sha256sum || shasum -a 256; } | cut -d' ' -f1
|
|
340
|
+
)
|
|
341
|
+
fi
|
|
342
|
+
```
|
|
343
|
+
|
|
344
|
+
- No existing summary, or `oat_summary_phase_fingerprint` differs from
|
|
345
|
+
`CURRENT_PHASE_FINGERPRINT`: refresh. Update What Was Implemented from the
|
|
346
|
+
newly accepted phases, Revision History when an accepted `p-revN` is new, and
|
|
347
|
+
Follow-up Items from review dispositions.
|
|
348
|
+
- Fingerprint unchanged: no phase-driven update. The autonomous-learnings and
|
|
349
|
+
project-log triggers above stay independent and can still require a refresh.
|
|
350
|
+
- A brief or goal summary never reads or writes `oat_summary_last_task`; execution
|
|
351
|
+
records are not units. `oat-project-complete` recomputes the same
|
|
352
|
+
fingerprint with this fragment to decide whether `summary.md` is stale.
|
|
353
|
+
|
|
234
354
|
### Step 4: Generate / Update Summary Sections
|
|
235
355
|
|
|
236
356
|
For each section, synthesize content from the relevant artifacts. Apply these rules:
|
|
@@ -403,12 +523,38 @@ oat_summary_includes_revisions: [{ list of p-revN IDs reflected }]
|
|
|
403
523
|
---
|
|
404
524
|
```
|
|
405
525
|
|
|
526
|
+
In brief and goal modes write `oat_summary_phase_fingerprint: {CURRENT_PHASE_FINGERPRINT}`
|
|
527
|
+
(Step 3) and omit `oat_summary_last_task`; keep `oat_summary_revision_count`
|
|
528
|
+
and `oat_summary_includes_revisions` as informational fields.
|
|
529
|
+
|
|
406
530
|
### Step 6: Roll Up Project Observations and Offer Backlog Graduation
|
|
407
531
|
|
|
408
532
|
Run this step after `summary.md` has been authored or refreshed, including the
|
|
409
533
|
distinct `## Autonomous Execution Learnings` section when its source artifact
|
|
410
534
|
exists.
|
|
411
535
|
|
|
536
|
+
**Goal terminal deferral.** When `oat_workflow_mode` is `goal`, this run
|
|
537
|
+
comes before `pr` in the post-implement sequence (`oat_post_implement_sequence`
|
|
538
|
+
lists `pr` but not yet among its completed steps), and
|
|
539
|
+
`oat project closeout-check "$PROJECT_PATH" --json` (read-only) still reports
|
|
540
|
+
`phase-uncovered` (a terminal delivery is still to be registered), write only
|
|
541
|
+
files under `$PROJECT_PATH`: skip the `oat project log rollup` call below (it
|
|
542
|
+
appends to the repository ledger and also writes the `## Workflow Observations`
|
|
543
|
+
section, which the later run supplies) and all of Step 7 (decision-record
|
|
544
|
+
promotion and the regenerated decisions index). Report them as deferred with:
|
|
545
|
+
`Deferred: ledger roll-up and decision promotion run in the completion summary refresh; do not decline it.`
|
|
546
|
+
A repo-level commit after the terminal milestone's reviewed revision is not
|
|
547
|
+
bookkeeping (brief contract 12.8), so it would make the terminal subject
|
|
548
|
+
undeliverable for the terminal registration in the PR skill's Step 1.5.
|
|
549
|
+
Without `phase-uncovered` there is nothing to defer (delivery coverage already
|
|
550
|
+
holds and `pr` registers nothing): run Steps 6 and 7 as usual. Perform the
|
|
551
|
+
deferred writes in the next summary run after `phase-uncovered` clears: a
|
|
552
|
+
`summary` step configured after `pr`, or the summary refresh at completion,
|
|
553
|
+
which the goal fingerprint fragment (Step 3) marks stale once the terminal
|
|
554
|
+
delivery reaches its endpoint. Both writes are idempotent, so the later run
|
|
555
|
+
needs no extra state. Registered deliveries are unaffected: they are judged
|
|
556
|
+
against their observed member revisions.
|
|
557
|
+
|
|
412
558
|
Before the roll-up or decision promotion mutates repository-wide outputs,
|
|
413
559
|
preflight the owned paths and snapshot unrelated staged state:
|
|
414
560
|
|
|
@@ -471,6 +617,8 @@ append-based `project` → `general` promotion in Step 2.5.
|
|
|
471
617
|
|
|
472
618
|
### Step 7: Promote Key Decisions to Canonical Decision Records
|
|
473
619
|
|
|
620
|
+
Under the goal terminal deferral (Step 6), skip this step and report it deferred.
|
|
621
|
+
|
|
474
622
|
Run this step **after** `summary.md` (including its `## Key Decisions` section) has been written/refreshed and its frontmatter updated. It promotes the project's Key Decisions out of per-project prose and into the canonical, repo-wide `reference/decisions/` log so they stop being siloed in `summary.md`. This step is **additive and non-interactive** — it never prompts.
|
|
475
623
|
|
|
476
624
|
**7.1 — PJM capability and adoption gate (auto, no prompt).** Check capability
|
|
@@ -6,7 +6,7 @@ disable-model-invocation: false
|
|
|
6
6
|
user-invocable: true
|
|
7
7
|
allowed-tools: Read, Write, Edit, Bash, Grep, Glob, Task
|
|
8
8
|
metadata:
|
|
9
|
-
version: 1.9.
|
|
9
|
+
version: 1.9.9
|
|
10
10
|
---
|
|
11
11
|
|
|
12
12
|
# Execute a Wave of External Plans
|
|
@@ -200,7 +200,8 @@ writes and stay on the orchestrator's own model class, the same rule
|
|
|
200
200
|
`oat project new wave-N-execution --mode quick --no-commit`. If the flag is
|
|
201
201
|
absent because of version skew, run the command without it, expect the scaffold
|
|
202
202
|
to auto-commit, record that generated commit, and land the wrapper artifacts in
|
|
203
|
-
a follow-up commit (Orc W1 scaffold evidence).
|
|
203
|
+
a follow-up commit (Orc W1 scaffold evidence). The wrapper stays in quick
|
|
204
|
+
mode: its lanes need task-level plans, so lite, brief, and goal do not apply.
|
|
204
205
|
2. **Verify scaffold substitution AND advance the lifecycle** in `state.md`.
|
|
205
206
|
On oat ≥0.1.65, verify that the basic scaffold placeholders
|
|
206
207
|
(`{ OAT_HILL_CHECKPOINTS }`, `{ OAT_PHASE }`, `{ OAT_WORKFLOW_MODE }`) were
|