@open-agent-toolkit/cli 0.3.15 → 0.3.17
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/assets/NOTICES.md +48 -0
- package/assets/agents/oat-phase-implementer.md +26 -6
- package/assets/agents/oat-reviewer.md +51 -1
- package/assets/bundle-metadata.json +1 -1
- package/assets/docs/contributing/documentation.md +4 -0
- package/assets/docs/contributing/skills.md +3 -1
- package/assets/docs/getting-started/bootstrap.md +1 -1
- package/assets/docs/getting-started/index.md +0 -4
- package/assets/docs/getting-started/tool-packs.md +0 -7
- package/assets/docs/provider-sync/commands.md +21 -0
- package/assets/docs/reference/cli-reference.md +44 -2
- package/assets/docs/reference/config-and-local-state.md +11 -2
- package/assets/docs/reference/configuration.md +10 -2
- package/assets/docs/reference/project-artifacts.md +43 -8
- package/assets/docs/skills/index.md +1 -0
- package/assets/docs/skills/recon.md +8 -5
- package/assets/docs/skills/repo-improve.md +9 -7
- package/assets/docs/workflows/advanced/autonomy.md +50 -0
- package/assets/docs/workflows/advanced/workflow-gates.md +109 -10
- package/assets/docs/workflows/approvals-and-automation.md +3 -1
- package/assets/docs/workflows/backlog-and-planning/backlog-lifecycle.md +25 -24
- package/assets/docs/workflows/backlog-and-planning/remote-project-management.md +0 -7
- package/assets/docs/workflows/ideas/lifecycle.md +2 -7
- package/assets/docs/workflows/projects/closeout/closeout-skills.md +62 -1
- package/assets/docs/workflows/projects/execution/implementation-execution.md +23 -3
- package/assets/docs/workflows/projects/execution/project-log.md +6 -0
- package/assets/docs/workflows/projects/lifecycle.md +7 -0
- package/assets/docs/workflows/projects/reviews/index.md +63 -1
- package/assets/docs/workflows/projects/reviews/review-flavors.md +8 -0
- package/assets/docs/workflows/waves/wave-workflows.md +11 -3
- package/assets/public-package-versions.json +4 -4
- package/assets/skills/oat-agent-instructions-apply/SKILL.md +14 -4
- package/assets/skills/oat-brainstorm/SKILL.md +17 -13
- package/assets/skills/oat-docs-apply/SKILL.md +13 -3
- package/assets/skills/oat-doctor/SKILL.md +11 -1
- package/assets/skills/oat-explainer-kit/SKILL.md +1 -1
- package/assets/skills/oat-explainer-kit/references/lifecycle-contract.md +6 -3
- package/assets/skills/oat-pjm-review-backlog/SKILL.md +2 -2
- package/assets/skills/oat-pjm-update-repo-reference/SKILL.md +28 -3
- package/assets/skills/oat-project-autonomous/SKILL.md +60 -5
- package/assets/skills/oat-project-autonomous/references/gate-inventory.md +210 -165
- package/assets/skills/oat-project-capture/SKILL.md +7 -3
- package/assets/skills/oat-project-complete/SKILL.md +39 -34
- package/assets/skills/oat-project-complete/scripts/execute-synced-archive-entry.mjs +106 -28
- package/assets/skills/oat-project-complete/scripts/parse-synced-archive-resume-fields.mjs +30 -3
- package/assets/skills/oat-project-complete-auto/SKILL.md +388 -0
- package/assets/skills/oat-project-design/SKILL.md +12 -9
- package/assets/skills/oat-project-discover/SKILL.md +8 -4
- package/assets/skills/oat-project-document/SKILL.md +14 -5
- package/assets/skills/oat-project-document/references/docs/autonomy-contract.md +210 -165
- package/assets/skills/oat-project-implement/SKILL.md +6 -1
- package/assets/skills/oat-project-implement/references/completion-and-closeout.md +34 -7
- package/assets/skills/oat-project-implement/references/docs/autonomy-contract.md +210 -165
- package/assets/skills/oat-project-implement/references/docs/complexity-review-fallback.md +262 -0
- package/assets/skills/oat-project-implement/references/docs/gate-approval-record.md +80 -0
- package/assets/skills/oat-project-implement/references/phase-execution.md +38 -6
- package/assets/skills/oat-project-import-plan/SKILL.md +20 -6
- package/assets/skills/oat-project-lite/SKILL.md +7 -5
- package/assets/skills/oat-project-lite/references/docs/autonomy-contract.md +210 -165
- package/assets/skills/oat-project-new/SKILL.md +6 -2
- package/assets/skills/oat-project-next/SKILL.md +19 -2
- package/assets/skills/oat-project-next/references/docs/gate-approval-record.md +80 -0
- package/assets/skills/oat-project-plan/SKILL.md +14 -6
- package/assets/skills/oat-project-pr-final/SKILL.md +4 -3
- package/assets/skills/oat-project-pr-final/references/docs/autonomy-contract.md +210 -165
- package/assets/skills/oat-project-progress/SKILL.md +27 -1
- package/assets/skills/oat-project-progress/references/docs/gate-approval-record.md +80 -0
- package/assets/skills/oat-project-promote-spec-driven/SKILL.md +7 -3
- package/assets/skills/oat-project-quick-start/SKILL.md +47 -14
- package/assets/skills/oat-project-quick-start/references/docs/autonomy-contract.md +210 -165
- package/assets/skills/oat-project-quick-start/references/docs/complexity-review-fallback.md +262 -0
- package/assets/skills/oat-project-quick-start/references/docs/gate-approval-record.md +80 -0
- package/assets/skills/oat-project-reconcile/SKILL.md +8 -4
- package/assets/skills/oat-project-retro/SKILL.md +1 -1
- package/assets/skills/oat-project-retro/references/apply-procedure.md +6 -6
- package/assets/skills/oat-project-retro-file/SKILL.md +7 -3
- package/assets/skills/oat-project-review-provide/SKILL.md +23 -4
- package/assets/skills/oat-project-review-provide-remote/SKILL.md +19 -1
- package/assets/skills/oat-project-review-receive/SKILL.md +57 -14
- package/assets/skills/oat-project-review-receive/references/docs/complexity-review-fallback.md +262 -0
- package/assets/skills/oat-project-review-receive-remote/SKILL.md +7 -3
- package/assets/skills/oat-project-revise/SKILL.md +13 -5
- package/assets/skills/oat-project-spec/SKILL.md +8 -4
- package/assets/skills/oat-project-summary/SKILL.md +11 -7
- package/assets/skills/oat-repo-knowledge-index/SKILL.md +54 -20
- package/assets/skills/oat-repo-knowledge-index/scripts/refresh-owned.mjs +118 -0
- package/assets/skills/oat-review-provide/SKILL.md +7 -3
- package/assets/skills/oat-review-receive-remote/SKILL.md +14 -4
- package/assets/skills/oat-wave-execute/SKILL.md +72 -38
- package/assets/skills/oat-wave-execute/assets/wrapper-plan-template.md +16 -2
- package/assets/skills/oat-wave-program/SKILL.md +15 -6
- package/assets/skills/oat-worktree-bootstrap-auto/SKILL.md +45 -17
- package/assets/skills/oat-wrap-up/SKILL.md +9 -3
- package/assets/skills/oat-wrap-up/references/report-template.md +1 -1
- package/assets/skills/recon/SKILL.md +1 -1
- package/assets/skills/recon/references/packet-contract.md +18 -3
- package/assets/skills/recon/scripts/lib/contracts.mjs +16 -2
- package/assets/skills/recon/scripts/reconcile-ledger.mjs +20 -10
- package/assets/skills/recon/scripts/render-packet.mjs +31 -3
- package/assets/skills/recon/scripts/validate-packet.mjs +5 -5
- package/assets/templates/pjm-agents.md +38 -8
- package/assets/templates/repo-agents.md +5 -0
- package/assets/templates/repo-readme.md +5 -0
- package/assets/templates/state.md +7 -0
- package/dist/commands/backlog/archive.d.ts +3 -0
- package/dist/commands/backlog/archive.d.ts.map +1 -1
- package/dist/commands/backlog/archive.js +63 -26
- package/dist/commands/backlog/index.d.ts.map +1 -1
- package/dist/commands/backlog/index.js +3 -0
- package/dist/commands/backlog/rewrite-references.d.ts +5 -0
- package/dist/commands/backlog/rewrite-references.d.ts.map +1 -1
- package/dist/commands/backlog/rewrite-references.js +39 -1
- package/dist/commands/config/index.d.ts.map +1 -1
- package/dist/commands/config/index.js +13 -0
- package/dist/commands/gate/index.d.ts +5 -0
- package/dist/commands/gate/index.d.ts.map +1 -1
- package/dist/commands/gate/index.js +270 -9
- package/dist/commands/init/index.d.ts.map +1 -1
- package/dist/commands/init/index.js +1 -0
- package/dist/commands/internal/commit-paths.d.ts +3 -0
- package/dist/commands/internal/commit-paths.d.ts.map +1 -0
- package/dist/commands/internal/commit-paths.js +31 -0
- package/dist/commands/internal/index.d.ts.map +1 -1
- package/dist/commands/internal/index.js +2 -0
- package/dist/commands/pjm/init.d.ts.map +1 -1
- package/dist/commands/pjm/init.js +37 -8
- package/dist/commands/project/archive/archive-utils.d.ts +6 -3
- package/dist/commands/project/archive/archive-utils.d.ts.map +1 -1
- package/dist/commands/project/archive/archive-utils.js +510 -104
- package/dist/commands/project/archive/push-runner.d.ts.map +1 -1
- package/dist/commands/project/archive/push-runner.js +1 -0
- package/dist/commands/project/log/append.d.ts +2 -3
- package/dist/commands/project/log/append.d.ts.map +1 -1
- package/dist/commands/project/log/append.js +55 -101
- package/dist/commands/project/migrate/index.d.ts +1 -2
- package/dist/commands/project/migrate/index.d.ts.map +1 -1
- package/dist/commands/project/migrate/index.js +8 -2
- package/dist/commands/project/new/scaffold.d.ts.map +1 -1
- package/dist/commands/project/new/scaffold.js +4 -4
- package/dist/commands/project/promote/promote.d.ts +8 -0
- package/dist/commands/project/promote/promote.d.ts.map +1 -1
- package/dist/commands/project/promote/promote.js +37 -6
- package/dist/commands/project/status.d.ts.map +1 -1
- package/dist/commands/project/status.js +3 -0
- package/dist/commands/project/sync/ref-sync.d.ts +12 -1
- package/dist/commands/project/sync/ref-sync.d.ts.map +1 -1
- package/dist/commands/project/sync/ref-sync.js +347 -23
- package/dist/commands/shared/exact-path-commit.d.ts +32 -0
- package/dist/commands/shared/exact-path-commit.d.ts.map +1 -0
- package/dist/commands/shared/exact-path-commit.js +691 -0
- 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 +1 -0
- package/dist/commands/state/generate.d.ts +1 -1
- package/dist/commands/state/generate.d.ts.map +1 -1
- package/dist/commands/state/generate.js +87 -8
- package/dist/commands/sync/apply.d.ts.map +1 -1
- package/dist/commands/sync/apply.js +31 -5
- package/dist/commands/sync/dry-run.d.ts.map +1 -1
- package/dist/commands/sync/dry-run.js +28 -11
- package/dist/commands/sync/sync.utils.d.ts +13 -0
- package/dist/commands/sync/sync.utils.d.ts.map +1 -1
- package/dist/commands/sync/sync.utils.js +21 -1
- package/dist/commands/tools/shared/pack-manifest.d.ts.map +1 -1
- package/dist/commands/tools/shared/pack-manifest.js +1 -0
- package/dist/config/oat-config.d.ts +1 -0
- package/dist/config/oat-config.d.ts.map +1 -1
- package/dist/config/oat-config.js +3 -0
- package/dist/config/resolve.d.ts.map +1 -1
- package/dist/config/resolve.js +1 -0
- package/dist/drift/detector.js +6 -6
- package/dist/engine/compute-plan.d.ts.map +1 -1
- package/dist/engine/compute-plan.js +87 -2
- package/dist/engine/engine.types.d.ts +10 -1
- package/dist/engine/engine.types.d.ts.map +1 -1
- package/dist/engine/engine.types.js +4 -0
- package/dist/engine/execute-plan.d.ts.map +1 -1
- package/dist/engine/execute-plan.js +42 -5
- package/dist/engine/managed-copy-hash.d.ts +4 -3
- package/dist/engine/managed-copy-hash.d.ts.map +1 -1
- package/dist/engine/managed-copy-hash.js +4 -3
- package/dist/fs/assets.d.ts.map +1 -1
- package/dist/fs/assets.js +7 -1
- package/dist/manifest/hash.d.ts +8 -10
- package/dist/manifest/hash.d.ts.map +1 -1
- package/dist/ui/output.js +1 -1
- package/dist/validation/skills.d.ts.map +1 -1
- package/dist/validation/skills.js +151 -11
- package/package.json +3 -2
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
# Complexity Review at Budget Exhaustion
|
|
2
|
+
|
|
3
|
+
When a review or gate budget runs out, the loop has stopped converging, and
|
|
4
|
+
another round of the same review is unlikely to change that. Before asking the
|
|
5
|
+
operator how to proceed, the root dispatches one complexity review and shows its
|
|
6
|
+
result together with the reasons the loop stopped. The review asks whether the
|
|
7
|
+
reviewed work, or the machinery the findings keep demanding, earns its cost
|
|
8
|
+
against the contract; it is not another correctness review.
|
|
9
|
+
|
|
10
|
+
This document is read by two parties: the root (the orchestrating agent that
|
|
11
|
+
owns the exhausted loop) and the reviewer subagent it dispatches.
|
|
12
|
+
|
|
13
|
+
## When
|
|
14
|
+
|
|
15
|
+
Each owning skill points here at its exhaustion point:
|
|
16
|
+
|
|
17
|
+
| Exhaustion point | Owning skill and step |
|
|
18
|
+
| ----------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- |
|
|
19
|
+
| Root-owned phase review still has Critical/High findings at the orchestration limit | `oat-project-implement`, `references/phase-execution.md`, Bounded Fix and Re-Review Loop |
|
|
20
|
+
| Optional phase review gate still blocks at the orchestration limit | `oat-project-implement`, `references/phase-execution.md`, Optional External Phase Review Gate |
|
|
21
|
+
| Final review reaches the three-cycle review cap | `oat-project-implement`, `references/completion-and-closeout.md`, Step 13 |
|
|
22
|
+
| Implementation exit gate ends in `block` at `maxAttempts` | `oat-project-implement`, `references/completion-and-closeout.md`, Step 14 |
|
|
23
|
+
| A review scope reaches the three-cycle review cap | `oat-project-review-receive`, Step 8 |
|
|
24
|
+
| Quick-start plan gate (`QS-12`) ends in `block` at `maxAttempts` | `oat-project-quick-start`, Gate Execution step 6 |
|
|
25
|
+
|
|
26
|
+
These are budget exhaustions only. A single `prompt` failure, a `warn`
|
|
27
|
+
outcome, and launch, transport, or runtime failures that consume no attempt do
|
|
28
|
+
not trigger the review.
|
|
29
|
+
|
|
30
|
+
One exhausted loop gets one review. Before dispatching, look for an existing
|
|
31
|
+
report for the scope and reuse the newest
|
|
32
|
+
`reviews/archived/complexity-<scope>-*.md` when it is newer than every review
|
|
33
|
+
artifact of that scope: its filename timestamp is at or after the newest of
|
|
34
|
+
their `oat_generated_at` values, compared at seconds precision. Among reports
|
|
35
|
+
from the same second, the highest collision suffix is the newest. A legacy
|
|
36
|
+
minute-precision name (`YYYY-MM-DDTHHMMZ`) reads as second `00`, which errs
|
|
37
|
+
toward a fresh review. For example, a report saved as
|
|
38
|
+
`complexity-p03-2026-10-02T183045Z.md` is newer than a review generated at
|
|
39
|
+
`2026-10-02T18:30:20Z` and older than one generated at `2026-10-02T18:30:50Z`,
|
|
40
|
+
an order minute precision could not establish. Dispatch again only when a new
|
|
41
|
+
review round has landed since that report. The rule covers a re-entered review-receive at the cap, the
|
|
42
|
+
final review cap reached through review-receive Step 8, and a phase scope that
|
|
43
|
+
reaches both the receive cap and the implement retry limit.
|
|
44
|
+
|
|
45
|
+
The operator can ask for the same review at any other time. There is no
|
|
46
|
+
automatic early trigger.
|
|
47
|
+
|
|
48
|
+
## Probe
|
|
49
|
+
|
|
50
|
+
The operator may have the full `complexity-review` skill installed. Probe these
|
|
51
|
+
paths in order and bind the first that exists:
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
COMPLEXITY_REVIEW_SKILL=""
|
|
55
|
+
REPO_ROOT=$(git rev-parse --show-toplevel 2>/dev/null || true)
|
|
56
|
+
for candidate in \
|
|
57
|
+
"${HOME:-}/.agents/skills/complexity-review/SKILL.md" \
|
|
58
|
+
"${HOME:-}/.claude/skills/complexity-review/SKILL.md" \
|
|
59
|
+
"${REPO_ROOT:+$REPO_ROOT/.agents/skills/complexity-review/SKILL.md}"; do
|
|
60
|
+
[ -n "$candidate" ] && [ -f "$candidate" ] || continue
|
|
61
|
+
COMPLEXITY_REVIEW_SKILL="$candidate"
|
|
62
|
+
break
|
|
63
|
+
done
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
- **Found:** the reviewer subagent reads that `SKILL.md` and the references it
|
|
67
|
+
links, and follows them as a document. The skill is not model-invocable, so
|
|
68
|
+
never launch it as a skill. Interactive questions are forbidden: where the
|
|
69
|
+
skill would ask, the reviewer states the gap, labels the contract inferred,
|
|
70
|
+
and marks the verdict provisional. It ignores any `--out` destination and
|
|
71
|
+
returns the report inline. It then adds the OAT sections below.
|
|
72
|
+
- **Not found:** the reviewer follows the condensed method below, then adds the
|
|
73
|
+
OAT sections.
|
|
74
|
+
|
|
75
|
+
Report which path ran in the report's first line, for example
|
|
76
|
+
`Method: installed complexity-review (<path>)` or `Method: OAT condensed`.
|
|
77
|
+
|
|
78
|
+
## Dispatch
|
|
79
|
+
|
|
80
|
+
The root dispatches exactly one read-only reviewer-class subagent through
|
|
81
|
+
`oat-project-dispatch-subagents`, at the reviewer ceiling already resolved for
|
|
82
|
+
the exhausted loop. The reviewer:
|
|
83
|
+
|
|
84
|
+
- writes nothing, commits nothing, and launches nothing;
|
|
85
|
+
- reads committed content (`git show <rev>:<path>`, `git diff <range>`) rather
|
|
86
|
+
than the working tree whenever another writer may own the worktree; and
|
|
87
|
+
- returns the full report inline to the root.
|
|
88
|
+
|
|
89
|
+
The brief names the scope:
|
|
90
|
+
|
|
91
|
+
- **Reviewed target:** the phase commit range, the final implementation range,
|
|
92
|
+
or the plan bundle (`plan.md` with the discovery, design, and spec it was
|
|
93
|
+
built from).
|
|
94
|
+
- **Contract sources:** the backlog items the project closes, `discovery.md`,
|
|
95
|
+
`spec.md`, `design.md`, and the relevant records under
|
|
96
|
+
`.oat/repo/reference/decisions/`. A plan cannot justify its own machinery, so
|
|
97
|
+
the contract comes from these sources, not from the reviewed plan.
|
|
98
|
+
- **Loop history:** every review artifact of the exhausted loop, active and
|
|
99
|
+
archived, gate artifacts included, plus the dispositions recorded for them
|
|
100
|
+
in `implementation.md` or `plan.md`.
|
|
101
|
+
|
|
102
|
+
### Routing outside implement
|
|
103
|
+
|
|
104
|
+
Inside an `oat-project-implement` run, the root already loaded its dispatch
|
|
105
|
+
contract and resolved the reviewer route, and both apply here. When the
|
|
106
|
+
exhausted loop belongs to `oat-project-quick-start` or to a standalone
|
|
107
|
+
`oat-project-review-receive` run, resolve them before the launch:
|
|
108
|
+
|
|
109
|
+
1. Independently probe each required `<name>/SKILL.md` in order:
|
|
110
|
+
`${SKILL_DIR}/..` from this loaded owning skill, `${HOME}/.agents/skills`,
|
|
111
|
+
then `<repo-root>/.agents/skills`. Bind each first match to its own root:
|
|
112
|
+
`${PROJECT_DISPATCH_SKILLS_ROOT}` for `oat-project-dispatch-subagents` and
|
|
113
|
+
`${DISPATCH_SKILLS_ROOT}` for `oat-dispatch-subagents`; never rely on ambient
|
|
114
|
+
discovery. On a miss, name the skill and give its recovery
|
|
115
|
+
command, then continue with
|
|
116
|
+
`Complexity review unavailable: <skill> not installed`:
|
|
117
|
+
- `oat-project-dispatch-subagents`:
|
|
118
|
+
`oat tools install workflows --scope <user|project>`;
|
|
119
|
+
- `oat-dispatch-subagents`:
|
|
120
|
+
`oat tools install utility --scope <user|project>`.
|
|
121
|
+
2. Read `${PROJECT_DISPATCH_SKILLS_ROOT}/oat-project-dispatch-subagents/SKILL.md`,
|
|
122
|
+
then `${DISPATCH_SKILLS_ROOT}/oat-dispatch-subagents/SKILL.md`, and follow them.
|
|
123
|
+
3. When no reviewer ceiling was resolved for this loop, resolve one with
|
|
124
|
+
`oat project dispatch-ceiling resolve --provider "$ACTIVE_PROVIDER" --role reviewer --json`
|
|
125
|
+
and launch at that ceiling.
|
|
126
|
+
|
|
127
|
+
When no reviewer route is available, the root says so in the decision message
|
|
128
|
+
(`Complexity review unavailable: <reason>`) and presents the decision with the
|
|
129
|
+
loop-stop reasons alone. It never substitutes a weaker reviewer class and never
|
|
130
|
+
blocks the decision on the missing review.
|
|
131
|
+
|
|
132
|
+
## Condensed method
|
|
133
|
+
|
|
134
|
+
Generated artifacts are cheap; owned complexity is not. Each piece of
|
|
135
|
+
machinery must earn its cost for this contract. The simplest solution is the
|
|
136
|
+
one with the lowest total lifecycle cost that still meets the contract and
|
|
137
|
+
still proves that it works, not the one with the fewest lines.
|
|
138
|
+
|
|
139
|
+
1. **Restate the contract** in four lines, from the contract sources:
|
|
140
|
+
- Outcome: what was asked for, in the requester's terms.
|
|
141
|
+
- Hard constraints: limits the requester or the repository imposes.
|
|
142
|
+
- Acceptance criteria: how the requester would know it is done.
|
|
143
|
+
- Minimum proof: the smallest evidence that the outcome is achieved.
|
|
144
|
+
|
|
145
|
+
Separate requirements from implementation choices treated as requirements.
|
|
146
|
+
Verify mechanically enforced constraints in source, validators, tests, or
|
|
147
|
+
tool behavior rather than in descriptive prose. When the originating request
|
|
148
|
+
is missing or ambiguous, label the contract inferred, cite each inference,
|
|
149
|
+
and mark the verdict provisional. When sources conflict, report the
|
|
150
|
+
conflict instead of picking the one that justifies the machinery.
|
|
151
|
+
|
|
152
|
+
2. **Establish the simplest viable baseline:** the least complex version that
|
|
153
|
+
satisfies the contract and its minimum proof. It is the reference point every
|
|
154
|
+
additional piece of machinery must beat, not automatically the
|
|
155
|
+
recommendation.
|
|
156
|
+
|
|
157
|
+
3. **Inventory the machinery.** Consider schemas and intermediate
|
|
158
|
+
representations; scripts and generated output; tests, fixtures, and
|
|
159
|
+
snapshots; validation and repair loops; multiple agents or passes; state
|
|
160
|
+
machines, phases, and resumable sessions; abstractions and plugin seams;
|
|
161
|
+
configuration, persistence, and caching; duplicated documentation; and
|
|
162
|
+
process ceremony (planning documents, review passes, phase gates). Report
|
|
163
|
+
only material items, and judge the system as a whole: ten individually
|
|
164
|
+
defensible additions can still be indefensible together.
|
|
165
|
+
|
|
166
|
+
4. **Apply the deletion test** to each item: what outcome does it support, what
|
|
167
|
+
concrete failure occurs without it, is that failure observed or merely
|
|
168
|
+
imaginable, can a smaller mechanism address it, how would we know it helped,
|
|
169
|
+
what does it cost to own, and what would adding it later cost? Grade the
|
|
170
|
+
evidence as **hard requirement**, **observed**, **strongly inferred**,
|
|
171
|
+
**speculative**, or **unsupported**, and recommend **Keep**, **Simplify**,
|
|
172
|
+
**Defer** (with an observable reintroduction trigger), or **Delete**. If an
|
|
173
|
+
item can be deleted, deferred, or substantially simplified while the
|
|
174
|
+
contract and its proof stay intact, it should be. A hard requirement, a
|
|
175
|
+
credible threat model, an irreversible interface, or a low-frequency
|
|
176
|
+
high-impact risk can justify a mechanism before any failure.
|
|
177
|
+
|
|
178
|
+
5. **Build the ledger before the verdict:**
|
|
179
|
+
|
|
180
|
+
| Item | Claimed value | Evidence | Lifecycle cost | Recommendation |
|
|
181
|
+
| ------------------- | ------------- | ------------------------------- | -------------- | -------------------------------- |
|
|
182
|
+
| {file or component} | … | {evidence grade, with citation} | … | Keep / Simplify / Defer / Delete |
|
|
183
|
+
|
|
184
|
+
Cite a file and line, a section, a commit, a run, or a short quote from the
|
|
185
|
+
request. "Best practice" and "consistency with siblings" belong in Claimed
|
|
186
|
+
value, never in Evidence.
|
|
187
|
+
|
|
188
|
+
6. **Assign the verdict:** `Deletion-rule compliant` when every item is Keep or
|
|
189
|
+
a trivial wording-only Simplify; `Partially compliant` when the central
|
|
190
|
+
approach is right and the overshoot is peripheral; `Not compliant` when the
|
|
191
|
+
central approach itself fails the deletion test. Append `, provisional`
|
|
192
|
+
whenever the contract was inferred.
|
|
193
|
+
|
|
194
|
+
Report sections: Verdict, Contract, Simplest viable solution, and Complexity
|
|
195
|
+
ledger always; Proposed changes, Risks of simplifying, Reintroduction triggers,
|
|
196
|
+
and Out of lane only when they have content.
|
|
197
|
+
|
|
198
|
+
**Stance: skeptical, not reflexively minimalist.** Do not remove complexity
|
|
199
|
+
that satisfies a hard requirement, do not trade clear code for a clever
|
|
200
|
+
abstraction, do not recommend a large rewrite to remove a minor burden, and do
|
|
201
|
+
not increase net machinery. Sunk cost is irrelevant; removal and migration cost
|
|
202
|
+
are not. Grade necessity, not correctness: correctness, security, or staleness
|
|
203
|
+
findings noticed in passing go under Out of lane, one line each, and are not
|
|
204
|
+
investigated.
|
|
205
|
+
|
|
206
|
+
## OAT sections
|
|
207
|
+
|
|
208
|
+
Both paths add these sections to the report:
|
|
209
|
+
|
|
210
|
+
- **REQUIRES-OPERATOR:** mark each ledger row that only the operator can settle
|
|
211
|
+
(a contract question, a scope or product call, accepting a risk) with
|
|
212
|
+
`REQUIRES-OPERATOR` and state the question in plain terms.
|
|
213
|
+
- **Open findings:** classify each finding still open in the exhausted loop as
|
|
214
|
+
`accepted-requirement` (the contract requires it), `regression` (the change
|
|
215
|
+
broke something that worked), or `new-hardening` (a new demand beyond the
|
|
216
|
+
contract). Call out recurring families: the same kind of finding returning
|
|
217
|
+
across rounds.
|
|
218
|
+
- **Dissolvable findings:** list the open findings that a recommended Simplify,
|
|
219
|
+
Defer, or Delete would dissolve.
|
|
220
|
+
- **Recommended disposition:** one of `extra cycles` (more fix and review
|
|
221
|
+
rounds), `proceed with override` (accept the residual findings and continue),
|
|
222
|
+
`corrective revision` (rework within the current approach), or `simplify`
|
|
223
|
+
(apply the ledger's simplifications, then review again), with a one-sentence
|
|
224
|
+
rationale. This is a recommendation only.
|
|
225
|
+
|
|
226
|
+
## Decision message and record
|
|
227
|
+
|
|
228
|
+
The root, never the reviewer:
|
|
229
|
+
|
|
230
|
+
1. Saves the returned report verbatim at
|
|
231
|
+
`$PROJECT_PATH/reviews/archived/complexity-<scope>-<YYYY-MM-DDTHHMMSSZ>.md`,
|
|
232
|
+
beside the loop's archived review artifacts, with the UTC timestamp from
|
|
233
|
+
`date -u +%Y-%m-%dT%H%M%SZ`. When that path already exists, append `-2`,
|
|
234
|
+
then `-3`, and so on before `.md` until the path is free. It is not a review event: it
|
|
235
|
+
carries no `oat_review_*` or `oat_generated_at` frontmatter, has no `plan.md`
|
|
236
|
+
Reviews row, and stays out of the top-level `reviews/` directory, where
|
|
237
|
+
routers would read it as an unprocessed review. Write it only while no
|
|
238
|
+
dispatched child owns the worktree; when `reviews/archived/` is tracked,
|
|
239
|
+
commit it with the decision bookkeeping.
|
|
240
|
+
2. Shows one decision message containing:
|
|
241
|
+
- why the loop stopped: the budget, the count reached, and the findings still
|
|
242
|
+
blocking;
|
|
243
|
+
- the verdict and the ledger highlights;
|
|
244
|
+
- the dissolvable findings;
|
|
245
|
+
- each REQUIRES-OPERATOR item, in plain terms;
|
|
246
|
+
- the recommended disposition;
|
|
247
|
+
- the dispositions on offer: the owning step's existing options plus
|
|
248
|
+
`simplify`; and
|
|
249
|
+
- the report path.
|
|
250
|
+
3. Records the operator's choice in `implementation.md` with the date, the
|
|
251
|
+
scope, the exhaustion point, the verdict, the chosen disposition, and the
|
|
252
|
+
report path.
|
|
253
|
+
|
|
254
|
+
Agents never select the disposition, including the recommended one. Under
|
|
255
|
+
`OAT_AUTONOMOUS=1` the run stops at its boundary report, and that report
|
|
256
|
+
includes the same decision-message content; no disposition is chosen or
|
|
257
|
+
recorded on the operator's behalf. The operator's choice is recorded when the
|
|
258
|
+
run resumes.
|
|
259
|
+
|
|
260
|
+
A `simplify` choice routes the accepted ledger changes through the owning
|
|
261
|
+
skill's normal revision path (fix tasks for a code scope, plan edits for a plan
|
|
262
|
+
bundle), followed by a fresh review of the revised work.
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# Lifecycle Gate Approval Record
|
|
2
|
+
|
|
3
|
+
A configured lifecycle gate ends in an outcome the operator or a later session
|
|
4
|
+
needs to see again: it passed, it warned, the operator explicitly continued
|
|
5
|
+
past a failure, the project disabled it, or it blocked. Chat output does not
|
|
6
|
+
survive the session, so the skill that runs the gate persists the outcome in
|
|
7
|
+
project `state.md`. This document defines the record's shared core once; each
|
|
8
|
+
carrier names where it lives and what it adds.
|
|
9
|
+
|
|
10
|
+
## Core record
|
|
11
|
+
|
|
12
|
+
```yaml
|
|
13
|
+
<carrier>:
|
|
14
|
+
status: allowed # allowed | blocked
|
|
15
|
+
disposition: passed # passed | warned | prompt_approved | project_disabled; null when blocked
|
|
16
|
+
config_fingerprint: '<stable hash of the resolved gate declaration>'
|
|
17
|
+
reviewed_head: '<full SHA of the commit the gate reviewed>'
|
|
18
|
+
decided_at: '2026-10-02T15:20:00Z'
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
- `status`: `allowed` | `blocked`.
|
|
22
|
+
- `disposition`: `passed`, `warned`, `prompt_approved`, or `project_disabled`
|
|
23
|
+
when `status` is `allowed`; `null` when `status` is `blocked`.
|
|
24
|
+
- `config_fingerprint`: the writer's stable hash of the resolved gate
|
|
25
|
+
declaration it ran (command, description, `onFailure`, `maxAttempts`, and the
|
|
26
|
+
project override state), recorded as provenance. Implement recomputes its own
|
|
27
|
+
carrier's fingerprint under its Step 14 rules; quick-start readers do not.
|
|
28
|
+
- `reviewed_head`: the full 40-character SHA of the commit the gate reviewed,
|
|
29
|
+
recorded as provenance. `null` when no gate ran.
|
|
30
|
+
- `decided_at`: the ISO 8601 UTC time the outcome was decided. A record written
|
|
31
|
+
before `decided_at` existed is not malformed for that reason alone.
|
|
32
|
+
|
|
33
|
+
## Write rules
|
|
34
|
+
|
|
35
|
+
| Gate outcome | Record |
|
|
36
|
+
| --------------------------------------------------------------- | ----------------------------------------------------------- |
|
|
37
|
+
| Passed its threshold | `allowed` / `passed` |
|
|
38
|
+
| Failed under `onFailure: warn` | `allowed` / `warned` |
|
|
39
|
+
| Failed under `onFailure: prompt`, operator explicitly continued | `allowed` / `prompt_approved` |
|
|
40
|
+
| Failed under `onFailure: prompt`, operator declined or deferred | `blocked` / `null` |
|
|
41
|
+
| `block` still failing after `maxAttempts` | `blocked` / `null` |
|
|
42
|
+
| Configured but disabled by project override (no launch) | `allowed` / `project_disabled` |
|
|
43
|
+
| Launch, transport, validation, or receive failure | `blocked` / `null` |
|
|
44
|
+
| Not configured | no record (quick-start); implement writes `allowed/no_gate` |
|
|
45
|
+
|
|
46
|
+
Only an explicit operator continuation writes `prompt_approved`. Declining,
|
|
47
|
+
deferring, giving no response, or running under `OAT_AUTONOMOUS=1` writes
|
|
48
|
+
`blocked`, never anything that reads as approval. A rerun of the same gate
|
|
49
|
+
replaces the record.
|
|
50
|
+
|
|
51
|
+
## Carriers
|
|
52
|
+
|
|
53
|
+
- **`oat_implement_exit_gate`** (`oat-project-implement`,
|
|
54
|
+
`references/completion-and-closeout.md` Step 14) uses this core and keeps its
|
|
55
|
+
additional values and fields there: the `pending` and `stale` statuses, the
|
|
56
|
+
`no_gate` disposition, and the resolution, attempt, launch, receive, waiver,
|
|
57
|
+
and freshness fields. Its own effective-delta freshness rule decides whether a
|
|
58
|
+
record is current.
|
|
59
|
+
- **`oat_quick_start_gate`** (`oat-project-quick-start`, Gate Execution) carries
|
|
60
|
+
exactly the core.
|
|
61
|
+
|
|
62
|
+
## Reading a quick-start record
|
|
63
|
+
|
|
64
|
+
Readers report a quick-start record as recorded and do not recompute
|
|
65
|
+
`config_fingerprint`: no CLI emits a canonical fingerprint for the quick-start
|
|
66
|
+
gate, so a recomputation could not be reproduced across sessions. They do not
|
|
67
|
+
route on the record either.
|
|
68
|
+
|
|
69
|
+
- Report `status`, `disposition`, `decided_at`, and `config_fingerprint` (as
|
|
70
|
+
provenance) exactly as stored.
|
|
71
|
+
- Report the record as malformed when `status` and `disposition` do not form
|
|
72
|
+
one of the combinations in the write rules, or when a present `decided_at` is
|
|
73
|
+
not a valid ISO 8601 UTC time.
|
|
74
|
+
- `reviewed_head` is provenance only and is not compared with `HEAD`, because
|
|
75
|
+
the quick-start completion step commits after the gate.
|
|
76
|
+
- An absent record means none was written: no gate was configured, the gate
|
|
77
|
+
has not reached an outcome, or the plan predates the record. Readers do not
|
|
78
|
+
infer which.
|
|
79
|
+
|
|
80
|
+
Readers never write, repair, or infer a record.
|
|
@@ -5,13 +5,17 @@ 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.4
|
|
9
9
|
---
|
|
10
10
|
|
|
11
11
|
# Reconcile Manual Implementation
|
|
12
12
|
|
|
13
13
|
Bridge the gap between human implementation and OAT's artifact-driven workflow. Analyzes commits made outside the structured OAT flow, maps them to planned tasks, and updates tracking artifacts after human confirmation.
|
|
14
14
|
|
|
15
|
+
## Hook-safe exact-path commits
|
|
16
|
+
|
|
17
|
+
Before a parent-branch commit, verify `oat internal commit-paths --help` succeeds. If unavailable, stop and update the OAT CLI; never fall back to a staged-index or pathspec-only commit. Set `COMMIT_IDENTITY` to a unique operation/artifact identity before the first attempt and retain it for every retry; use a new identity for a new operation. Pass only the exact produced file list, including tracked removals and both names of a rename. A blocked/failed result stops the workflow; retain its receipt and follow its diagnostics. Hooks remain enabled. Synced project artifacts continue through `oat project push`.
|
|
18
|
+
|
|
15
19
|
## Prerequisites
|
|
16
20
|
|
|
17
21
|
**Required:**
|
|
@@ -684,10 +688,10 @@ PROJECT_SCOPE=$(oat project scope "$PROJECT_PATH" --format value) || { echo "oat
|
|
|
684
688
|
if [ "$PROJECT_SCOPE" = "synced" ]; then
|
|
685
689
|
oat project push "$PROJECT_PATH" --message "chore(oat): reconcile manual implementation ({first_task_id}..{last_task_id})" || { echo "oat: project push failed; run oat project pull, resolve the reported state, and retry" >&2; exit 1; }
|
|
686
690
|
else
|
|
687
|
-
|
|
691
|
+
OWNED_COMMIT_PATHS=("$PROJECT_PATH/implementation.md" "$PROJECT_PATH/state.md")
|
|
688
692
|
# Only add plan.md if it was modified
|
|
689
|
-
git diff --name-only "$PROJECT_PATH/plan.md" 2>/dev/null | grep -q . &&
|
|
690
|
-
|
|
693
|
+
git diff --name-only "$PROJECT_PATH/plan.md" 2>/dev/null | grep -q . && OWNED_COMMIT_PATHS+=("$PROJECT_PATH/plan.md")
|
|
694
|
+
oat internal commit-paths --identity "${COMMIT_IDENTITY:?set once and retain for retries}:oat-project-reconcile:1" --message "chore(oat): reconcile manual implementation ({first_task_id}..{last_task_id})" -- "${OWNED_COMMIT_PATHS[@]}" || exit 1
|
|
691
695
|
fi
|
|
692
696
|
```
|
|
693
697
|
|
|
@@ -5,7 +5,7 @@ disable-model-invocation: false
|
|
|
5
5
|
user-invocable: true
|
|
6
6
|
allowed-tools: Read, Write, Bash(git:*), Bash(jq:*), Bash(mkdir:*), Bash(pnpm:*), Bash(oat config:*), Bash(oat decision:*), 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.0.
|
|
8
|
+
version: 1.0.9
|
|
9
9
|
---
|
|
10
10
|
|
|
11
11
|
# Project Retrospective
|
|
@@ -118,8 +118,8 @@ continues immediately, this can be written back together with the final
|
|
|
118
118
|
CORRECTION_PUSH=$(oat project push "$PROJECT_PATH" --message "chore(oat): apply retro correction $RP_ID" --json) || { echo "oat: project push failed; run oat project pull, resolve the reported state, and retry" >&2; exit 1; }
|
|
119
119
|
CORRECTION_COMMIT=$(parse_synced_push_receipt "$CORRECTION_PUSH") || { printf '%s\n' "$CORRECTION_PUSH" >&2; echo "Recovery: run oat project pull \"$PROJECT_PATH\", resolve conflicts, then retry this push." >&2; exit 1; }
|
|
120
120
|
else
|
|
121
|
-
|
|
122
|
-
|
|
121
|
+
OWNED_COMMIT_PATHS=("$PROJECT_PATH/project-log.md")
|
|
122
|
+
oat internal commit-paths --identity "${COMMIT_IDENTITY:?set once and retain for retries}:oat-project-retro:apply-procedure:1" --message "chore(oat): apply retro correction $RP_ID" -- "${OWNED_COMMIT_PATHS[@]}" || exit 1
|
|
123
123
|
CORRECTION_COMMIT=$(git rev-parse HEAD)
|
|
124
124
|
fi
|
|
125
125
|
```
|
|
@@ -260,8 +260,8 @@ Compute `oat_retro_promotions` exactly:
|
|
|
260
260
|
if [ "$PROJECT_SCOPE" = "synced" ]; then
|
|
261
261
|
# RETRO_TARGET_PATHS contains exact ordinary-doc, agent-instruction, rule,
|
|
262
262
|
# or decision-record paths; include the managed decision index only when changed.
|
|
263
|
-
|
|
264
|
-
|
|
263
|
+
OWNED_COMMIT_PATHS=("${RETRO_TARGET_PATHS[@]}")
|
|
264
|
+
oat internal commit-paths --identity "${COMMIT_IDENTITY:?set once and retain for retries}:oat-project-retro:apply-procedure:2" --message "chore(oat): apply retro target $RP_ID" -- "${OWNED_COMMIT_PATHS[@]}" || exit 1
|
|
265
265
|
RETRO_TARGET_COMMIT=$(git rev-parse HEAD) || exit 1
|
|
266
266
|
RETRO_TARGET_COMMIT_PATHS=$(git diff-tree --no-commit-id --name-only -r "$RETRO_TARGET_COMMIT") || exit 1
|
|
267
267
|
# Require RETRO_TARGET_COMMIT_PATHS to equal the complete normalized
|
|
@@ -277,8 +277,8 @@ Compute `oat_retro_promotions` exactly:
|
|
|
277
277
|
# shared/local route with only the exact target and retro paths.
|
|
278
278
|
APPLIED_REF="${RETRO_TARGET_PATHS[*]}"
|
|
279
279
|
RETRO_COMMIT_PATHS=("${RETRO_TARGET_PATHS[@]}" "$PROJECT_PATH/references/project-retro.md")
|
|
280
|
-
|
|
281
|
-
|
|
280
|
+
OWNED_COMMIT_PATHS=("${RETRO_COMMIT_PATHS[@]}")
|
|
281
|
+
oat internal commit-paths --identity "${COMMIT_IDENTITY:?set once and retain for retries}:oat-project-retro:apply-procedure:3" --message "chore(oat): apply retro item $RP_ID" -- "${OWNED_COMMIT_PATHS[@]}" || exit 1
|
|
282
282
|
RETRO_TARGET_COMMIT=$(git rev-parse HEAD) || exit 1
|
|
283
283
|
fi
|
|
284
284
|
|
|
@@ -5,7 +5,7 @@ disable-model-invocation: false
|
|
|
5
5
|
user-invocable: true
|
|
6
6
|
allowed-tools: Read, Write, Bash(git:*), Bash(jq:*), Bash(pnpm:*), Bash(gh:*), Bash(oat backlog:*), Bash(oat config:*), Bash(oat project push:*), Bash(oat project scope:*), Glob, Grep, AskUserQuestion
|
|
7
7
|
metadata:
|
|
8
|
-
version: 1.0.
|
|
8
|
+
version: 1.0.4
|
|
9
9
|
---
|
|
10
10
|
|
|
11
11
|
# File Project Retro Feedback
|
|
@@ -17,6 +17,10 @@ idempotent status writeback.
|
|
|
17
17
|
This skill never applies `Disposition: apply` repo edits and never mutates
|
|
18
18
|
`oat_retro_promotions`.
|
|
19
19
|
|
|
20
|
+
## Hook-safe exact-path commits
|
|
21
|
+
|
|
22
|
+
Before a parent-branch commit, verify `oat internal commit-paths --help` succeeds. If unavailable, stop and update the OAT CLI; never fall back to a staged-index or pathspec-only commit. Set `COMMIT_IDENTITY` to a unique operation/artifact identity before the first attempt and retain it for every retry; use a new identity for a new operation. Pass only the exact produced file list, including tracked removals and both names of a rename. A blocked/failed result stops the workflow; retain its receipt and follow its diagnostics. Hooks remain enabled. Synced project artifacts continue through `oat project push`.
|
|
23
|
+
|
|
20
24
|
## Progress Indicators (User-Facing)
|
|
21
25
|
|
|
22
26
|
Print one banner and concise step indicators:
|
|
@@ -395,8 +399,8 @@ if [ "$PROJECT_SCOPE" = "synced" ]; then
|
|
|
395
399
|
RETRO_PUSH=$(oat project push "$PROJECT_PATH" --message "chore(oat): record project retro filing writeback" --json) || { echo "oat: project push failed; run oat project pull, resolve the reported state, and retry" >&2; exit 1; }
|
|
396
400
|
WRITEBACK_COMMIT=$(parse_synced_push_receipt "$RETRO_PUSH") || { printf '%s\n' "$RETRO_PUSH" >&2; echo "Recovery: run oat project pull \"$PROJECT_PATH\", resolve conflicts, then retry this push." >&2; exit 1; }
|
|
397
401
|
else
|
|
398
|
-
|
|
399
|
-
|
|
402
|
+
OWNED_COMMIT_PATHS=("$RETRO_PATH")
|
|
403
|
+
oat internal commit-paths --identity "${COMMIT_IDENTITY:?set once and retain for retries}:oat-project-retro-file:1" --message "chore(oat): record project retro filing writeback" -- "${OWNED_COMMIT_PATHS[@]}" || exit 1
|
|
400
404
|
WRITEBACK_COMMIT=$(git rev-parse HEAD)
|
|
401
405
|
fi
|
|
402
406
|
|
|
@@ -5,13 +5,17 @@ disable-model-invocation: false
|
|
|
5
5
|
user-invocable: true
|
|
6
6
|
allowed-tools: Read, Glob, Grep, Write, Edit, Bash(git:*), Bash(oat:*), Bash(pnpm:*), Bash(mkdir:*), Bash(date:*), Bash(realpath:*), Bash(awk:*), AskUserQuestion
|
|
7
7
|
metadata:
|
|
8
|
-
version: 1.5.
|
|
8
|
+
version: 1.5.13
|
|
9
9
|
---
|
|
10
10
|
|
|
11
11
|
# Request Review
|
|
12
12
|
|
|
13
13
|
Request and execute a code or artifact review for the current project scope.
|
|
14
14
|
|
|
15
|
+
## Hook-safe exact-path commits
|
|
16
|
+
|
|
17
|
+
Before a parent-branch commit, verify `oat internal commit-paths --help` succeeds. If unavailable, stop and update the OAT CLI; never fall back to a staged-index or pathspec-only commit. Set `COMMIT_IDENTITY` to a unique operation/artifact identity before the first attempt and retain it for every retry; use a new identity for a new operation. Pass only the exact produced file list, including tracked removals and both names of a rename. A blocked/failed result stops the workflow; retain its receipt and follow its diagnostics. Hooks remain enabled. Synced project artifacts continue through `oat project push`.
|
|
18
|
+
|
|
15
19
|
## Purpose
|
|
16
20
|
|
|
17
21
|
Produce an independent review artifact that verifies requirements/design alignment (mode-aware) and code quality.
|
|
@@ -622,6 +626,21 @@ Build the "Review Scope" metadata for the reviewer:
|
|
|
622
626
|
- Deferred Low count: {DEFERRED_LOW_COUNT}
|
|
623
627
|
{DEFERRED_LEDGER}
|
|
624
628
|
|
|
629
|
+
**Changed-Boundary Probe Guidance (code review only):**
|
|
630
|
+
|
|
631
|
+
- Apply the reviewer's proportional changed-boundary probe contract to changed
|
|
632
|
+
trust/input/size/limit boundaries with credible failure modes.
|
|
633
|
+
- Record exact commands, input/artifact provenance, categorical results and
|
|
634
|
+
any concrete execution limitation. Independently inspected implementer
|
|
635
|
+
failing and accepted controls may count when the reviewer cannot execute;
|
|
636
|
+
unsupported assertions cannot count.
|
|
637
|
+
- Missing consequential evidence requires a blocking finding under the existing
|
|
638
|
+
severity model, with
|
|
639
|
+
the unresolved guarantee and smallest missing proof. Docs-only changes with
|
|
640
|
+
no credible changed boundary require no manufactured probes.
|
|
641
|
+
- Preserve containment, independence, dispatch policy, severity and output
|
|
642
|
+
schemas; do not start a broad campaign or create a harness.
|
|
643
|
+
|
|
625
644
|
**Design Drift Review Guidance:**
|
|
626
645
|
|
|
627
646
|
- If implementation differs from `spec.md`, `design.md`, or `plan.md`, decide whether the code should change or whether the artifact is stale.
|
|
@@ -1193,9 +1212,9 @@ PROJECT_SCOPE=$(oat project scope "$PROJECT_PATH" --format value) || { echo "oat
|
|
|
1193
1212
|
if [ "$PROJECT_SCOPE" = "synced" ]; then
|
|
1194
1213
|
oat project push "$PROJECT_PATH" --message "chore(oat): record {scope} review artifact" || { echo "oat: project push failed; run oat project pull, resolve the reported state, and retry" >&2; exit 1; }
|
|
1195
1214
|
else
|
|
1196
|
-
|
|
1197
|
-
[ -f "$PROJECT_PATH/plan.md" ] &&
|
|
1198
|
-
|
|
1215
|
+
OWNED_COMMIT_PATHS=("$ACTIVE_REVIEW_PATH")
|
|
1216
|
+
[ -f "$PROJECT_PATH/plan.md" ] && OWNED_COMMIT_PATHS+=("$PROJECT_PATH/plan.md")
|
|
1217
|
+
oat internal commit-paths --identity "${COMMIT_IDENTITY:?set once and retain for retries}:oat-project-review-provide:1" --message "chore(oat): record {scope} review artifact" -- "${OWNED_COMMIT_PATHS[@]}" || exit 1
|
|
1199
1218
|
fi
|
|
1200
1219
|
```
|
|
1201
1220
|
|
|
@@ -5,7 +5,7 @@ disable-model-invocation: true
|
|
|
5
5
|
user-invocable: true
|
|
6
6
|
allowed-tools: Read, Write, Bash, Glob, Grep, Task, AskUserQuestion
|
|
7
7
|
metadata:
|
|
8
|
-
version: 1.1.
|
|
8
|
+
version: 1.1.10
|
|
9
9
|
---
|
|
10
10
|
|
|
11
11
|
# Remote Review Provide (Project-Scoped GitHub PR)
|
|
@@ -209,6 +209,24 @@ Resolve the workflow mode and the scope token:
|
|
|
209
209
|
|
|
210
210
|
NEVER mutate, commit, or push any project artifact. This is a read-only project context on machine B.
|
|
211
211
|
|
|
212
|
+
For code reviews, carry the reviewer's proportional changed-boundary probe
|
|
213
|
+
contract in every Tier 1/2/3 brief: inventory changed trust/input/size/limit
|
|
214
|
+
boundaries and credible failures, record exact commands, input/artifact
|
|
215
|
+
provenance, categorical results and any concrete execution limitation.
|
|
216
|
+
Independently inspected implementer failing and accepted controls may count
|
|
217
|
+
when the reviewer cannot execute; unsupported assertions cannot count. Missing
|
|
218
|
+
consequential evidence requires a blocking finding under the existing severity
|
|
219
|
+
model naming the
|
|
220
|
+
unresolved guarantee and smallest missing proof. Docs-only changes with no
|
|
221
|
+
credible changed boundary require no manufactured probes. Preserve containment,
|
|
222
|
+
independence, dispatch policy and the existing severity/output schemas; no new
|
|
223
|
+
harness, broad campaign or model-efficacy claim.
|
|
224
|
+
|
|
225
|
+
Put compact results, inspected-control provenance and execution limitations in
|
|
226
|
+
existing `StructuredFindings.summary`/finding bodies, with exact repeatable
|
|
227
|
+
commands in `verification_commands`. Add no schema fields or project artifacts.
|
|
228
|
+
Diff-only context is an execution limitation, not evidence of correctness.
|
|
229
|
+
|
|
212
230
|
### Step 4: Detect Prior Reviews + Narrow Scope
|
|
213
231
|
|
|
214
232
|
Resolve the current invocation lineage before selecting a candidate:
|