@open-agent-toolkit/cli 0.1.72 → 0.1.74
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 +1 -0
- package/assets/config/dispatch-matrix-recommendation.json +13 -17
- package/assets/docs/cli-utilities/configuration.md +42 -60
- package/assets/docs/cli-utilities/index.md +1 -0
- package/assets/docs/cli-utilities/project-log.md +183 -0
- package/assets/docs/cli-utilities/workflow-gates.md +38 -2
- package/assets/docs/provider-sync/providers.md +15 -17
- package/assets/docs/reference/cli-reference.md +1 -0
- package/assets/docs/workflows/projects/artifacts.md +1 -1
- package/assets/docs/workflows/projects/dispatch-ceiling.md +29 -33
- package/assets/docs/workflows/projects/implementation-execution.md +7 -4
- package/assets/docs/workflows/projects/lifecycle.md +4 -3
- package/assets/public-package-versions.json +4 -4
- package/assets/skills/oat-dispatch-subagents/SKILL.md +1 -1
- package/assets/skills/oat-dispatch-subagents/references/provider-cursor.md +27 -15
- package/assets/skills/oat-project-autonomous/SKILL.md +1 -1
- package/assets/skills/oat-project-autonomous/references/gate-inventory.md +4 -3
- package/assets/skills/oat-project-complete/SKILL.md +60 -1
- package/assets/skills/oat-project-document/references/docs/autonomy-contract.md +4 -3
- package/assets/skills/oat-project-implement/SKILL.md +18 -2
- package/assets/skills/oat-project-implement/references/completion-and-closeout.md +17 -15
- package/assets/skills/oat-project-implement/references/dispatch-and-dry-run.md +15 -9
- package/assets/skills/oat-project-implement/references/docs/autonomy-contract.md +4 -3
- package/assets/skills/oat-project-implement/references/phase-execution.md +11 -5
- package/assets/skills/oat-project-import-plan/SKILL.md +30 -8
- package/assets/skills/oat-project-plan/SKILL.md +30 -8
- package/assets/skills/oat-project-plan-writing/SKILL.md +12 -9
- package/assets/skills/oat-project-pr-final/references/docs/autonomy-contract.md +4 -3
- package/assets/skills/oat-project-quick-start/SKILL.md +30 -8
- package/assets/skills/oat-project-quick-start/references/docs/autonomy-contract.md +4 -3
- package/assets/skills/oat-project-review-provide/SKILL.md +19 -11
- package/assets/skills/oat-project-review-provide-remote/SKILL.md +27 -4
- package/assets/skills/oat-project-summary/SKILL.md +122 -18
- package/assets/templates/project-log.md +47 -0
- package/dist/commands/config/index.d.ts.map +1 -1
- package/dist/commands/config/index.js +41 -0
- package/dist/commands/doctor/index.d.ts +2 -1
- package/dist/commands/doctor/index.d.ts.map +1 -1
- package/dist/commands/doctor/index.js +37 -1
- package/dist/commands/gate/index.d.ts +3 -1
- package/dist/commands/gate/index.d.ts.map +1 -1
- package/dist/commands/gate/index.js +134 -7
- package/dist/commands/init/index.d.ts +1 -1
- package/dist/commands/init/index.d.ts.map +1 -1
- package/dist/commands/init/index.js +40 -8
- package/dist/commands/init/tools/shared/skill-manifest.d.ts +1 -1
- package/dist/commands/init/tools/shared/skill-manifest.d.ts.map +1 -1
- package/dist/commands/init/tools/shared/skill-manifest.js +1 -0
- package/dist/commands/project/dispatch-ceiling/index.d.ts.map +1 -1
- package/dist/commands/project/dispatch-ceiling/index.js +17 -9
- 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 +41 -0
- package/dist/commands/project/log/append.d.ts.map +1 -0
- package/dist/commands/project/log/append.js +241 -0
- package/dist/commands/project/log/check.d.ts +66 -0
- package/dist/commands/project/log/check.d.ts.map +1 -0
- package/dist/commands/project/log/check.js +194 -0
- package/dist/commands/project/log/grammar.d.ts +28 -0
- package/dist/commands/project/log/grammar.d.ts.map +1 -0
- package/dist/commands/project/log/grammar.js +31 -0
- package/dist/commands/project/log/index.d.ts +9 -0
- package/dist/commands/project/log/index.d.ts.map +1 -0
- package/dist/commands/project/log/index.js +13 -0
- package/dist/commands/project/log/rollup.d.ts +40 -0
- package/dist/commands/project/log/rollup.d.ts.map +1 -0
- package/dist/commands/project/log/rollup.js +203 -0
- package/dist/commands/project/log/synthesize.d.ts +23 -0
- package/dist/commands/project/log/synthesize.d.ts.map +1 -0
- package/dist/commands/project/log/synthesize.js +112 -0
- package/dist/commands/project/new/index.d.ts +1 -0
- package/dist/commands/project/new/index.d.ts.map +1 -1
- package/dist/commands/project/new/index.js +7 -0
- package/dist/commands/project/new/scaffold.d.ts +1 -0
- package/dist/commands/project/new/scaffold.d.ts.map +1 -1
- package/dist/commands/project/new/scaffold.js +24 -0
- package/dist/commands/shared/codex-strays.d.ts +9 -0
- package/dist/commands/shared/codex-strays.d.ts.map +1 -1
- package/dist/commands/shared/codex-strays.js +4 -0
- package/dist/commands/status/index.d.ts +7 -1
- package/dist/commands/status/index.d.ts.map +1 -1
- package/dist/commands/status/index.js +53 -17
- package/dist/commands/sync/apply.d.ts.map +1 -1
- package/dist/commands/sync/apply.js +50 -24
- package/dist/commands/sync/dry-run.d.ts.map +1 -1
- package/dist/commands/sync/dry-run.js +31 -18
- package/dist/commands/sync/index.d.ts.map +1 -1
- package/dist/commands/sync/index.js +34 -25
- package/dist/commands/sync/sync.types.d.ts +26 -11
- package/dist/commands/sync/sync.types.d.ts.map +1 -1
- package/dist/commands/sync/sync.utils.d.ts.map +1 -1
- package/dist/commands/sync/sync.utils.js +3 -2
- package/dist/config/oat-config.d.ts +3 -0
- package/dist/config/oat-config.d.ts.map +1 -1
- package/dist/config/oat-config.js +7 -0
- package/dist/config/resolve.d.ts.map +1 -1
- package/dist/config/resolve.js +2 -0
- package/dist/engine/index.d.ts +1 -1
- package/dist/engine/index.d.ts.map +1 -1
- package/dist/engine/index.js +1 -1
- package/dist/engine/scanner.d.ts +3 -1
- package/dist/engine/scanner.d.ts.map +1 -1
- package/dist/engine/scanner.js +4 -2
- package/dist/providers/ceiling/registry.d.ts +2 -0
- package/dist/providers/ceiling/registry.d.ts.map +1 -1
- package/dist/providers/ceiling/registry.js +20 -4
- package/dist/providers/codex/codec/sync-extension.d.ts +11 -10
- package/dist/providers/codex/codec/sync-extension.d.ts.map +1 -1
- package/dist/providers/codex/codec/sync-extension.js +42 -14
- package/dist/providers/cursor/codec/catalog.d.ts +18 -0
- package/dist/providers/cursor/codec/catalog.d.ts.map +1 -0
- package/dist/providers/cursor/codec/catalog.js +39 -0
- package/dist/providers/cursor/codec/materialize.d.ts +24 -0
- package/dist/providers/cursor/codec/materialize.d.ts.map +1 -0
- package/dist/providers/cursor/codec/materialize.js +166 -0
- package/dist/providers/cursor/codec/shared.d.ts +14 -0
- package/dist/providers/cursor/codec/shared.d.ts.map +1 -0
- package/dist/providers/cursor/codec/shared.js +76 -0
- package/dist/providers/cursor/codec/sync-extension.d.ts +37 -0
- package/dist/providers/cursor/codec/sync-extension.d.ts.map +1 -0
- package/dist/providers/cursor/codec/sync-extension.js +393 -0
- package/dist/providers/cursor/index.d.ts +3 -0
- package/dist/providers/cursor/index.d.ts.map +1 -1
- package/dist/providers/cursor/index.js +3 -0
- package/dist/providers/identity/availability.d.ts +7 -0
- package/dist/providers/identity/availability.d.ts.map +1 -1
- package/dist/providers/identity/availability.js +23 -0
- package/dist/providers/shared/index.d.ts +2 -0
- package/dist/providers/shared/index.d.ts.map +1 -1
- package/dist/providers/shared/index.js +1 -0
- package/dist/providers/shared/materialization-extension.d.ts +44 -0
- package/dist/providers/shared/materialization-extension.d.ts.map +1 -0
- package/dist/providers/shared/materialization-extension.js +26 -0
- package/package.json +2 -2
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: oat-project-review-provide-remote
|
|
3
|
-
version: 1.0.
|
|
3
|
+
version: 1.0.4
|
|
4
4
|
description: Use when reviewing a GitHub PR opened on another machine for an active OAT project and posting findings back as a single PR review. Resolves the project from the PR diff, reads project artifacts for mode-aware review, and posts via gh api.
|
|
5
5
|
disable-model-invocation: true
|
|
6
6
|
user-invocable: true
|
|
@@ -234,6 +234,16 @@ producer stamps, configured defaults, or reviewer self-report as runtime
|
|
|
234
234
|
confirmation. Leave report runtime identity not-reported unless independently
|
|
235
235
|
observed.
|
|
236
236
|
|
|
237
|
+
For a concrete managed Cursor target, require
|
|
238
|
+
`providers.cursor.dispatchArgs.variant` and launch the exact resolver-selected
|
|
239
|
+
native reviewer variant first. Keep mapped Cursor model strings opaque inside
|
|
240
|
+
the resolver and materialized definition; do not add a Task-level model
|
|
241
|
+
argument. Only a recorded pre-start native role-selection rejection of that
|
|
242
|
+
exact variant before any reviewer starts permits another target-preserving
|
|
243
|
+
route. After acceptance, continue only through the existing reviewer handle;
|
|
244
|
+
timeout, interruption, malformed output, or `BLOCKED` never authorizes a
|
|
245
|
+
replacement launch.
|
|
246
|
+
|
|
237
247
|
This resolver command is independent of lifecycle gates. Reusable `oat gate
|
|
238
248
|
review` commands must remain provider-neutral and must not contain or add a
|
|
239
249
|
provider/model `--target` argument.
|
|
@@ -249,7 +259,9 @@ provider/model `--target` argument.
|
|
|
249
259
|
Detection:
|
|
250
260
|
|
|
251
261
|
- Claude Code: Task-style subagent dispatch with `subagent_type: "oat-reviewer"` (resolves from `.claude/agents/oat-reviewer.md`).
|
|
252
|
-
- Cursor:
|
|
262
|
+
- Cursor: use the exact resolver-selected native reviewer variant for a
|
|
263
|
+
concrete managed target. Use base `oat-reviewer` only for an explicit
|
|
264
|
+
inherit/default exception.
|
|
253
265
|
- Codex multi-agent: verify `[features] multi_agent = true`; if the host requires explicit authorization before `spawn_agent`, announce `authorization required` and ask one concise confirmation before selecting a lower tier. If authorized -> Tier 1; if declined -> Tier 2/3 fallback.
|
|
254
266
|
- If the runtime can dispatch reviewer work -> Tier 1. If subagent dispatch is unavailable -> Tier 2. If the user requests inline / confirms a fresh session -> Tier 3.
|
|
255
267
|
|
|
@@ -260,7 +272,16 @@ Build the dispatch payload and spawn the reviewer in structured-output mode. Thi
|
|
|
260
272
|
- Set `oat_output_mode: structured` in the dispatch payload (the flag `.agents/agents/oat-reviewer.md` recognizes). In this mode the reviewer returns a `StructuredFindings` object in-memory and writes NO artifact under `reviews/`.
|
|
261
273
|
- Include the project context (`oat_project`, `oat_review_scope`, `oat_review_head_sha`), the Review Scope metadata block, a pointer to the posted-review-body schema (`design.md` → Data Models → Posted-review-body), and the resolved narrowing range (`<prior_sha>..<HEAD>` or none).
|
|
262
274
|
- If a worktree was resolved in Step 2, include its path so the reviewer reads from the checkout.
|
|
263
|
-
-
|
|
275
|
+
- For Cursor concrete managed dispatch, invoke
|
|
276
|
+
`providers.cursor.dispatchArgs.variant` as the exact native agent type. Do
|
|
277
|
+
not substitute base `oat-reviewer` or add a concrete model argument.
|
|
278
|
+
- The reviewer returns `StructuredFindings` (summary + findings array +
|
|
279
|
+
`verification_commands`). Tier 2/3 is eligible only when dispatch is
|
|
280
|
+
unavailable before launch or the exact native role is explicitly rejected
|
|
281
|
+
before any reviewer starts; record that pre-start outcome and do not retry
|
|
282
|
+
at Tier 1. Once a reviewer is accepted, malformed structured output is a
|
|
283
|
+
terminal validation failure: surface the error, block the review, and do not
|
|
284
|
+
launch another reviewer.
|
|
264
285
|
|
|
265
286
|
**Step 5c: Tier 2 — Fresh session (recommended fallback).** If subagent dispatch is unavailable and the user is not already in a fresh session, provide fresh-session instructions and exit. (If Codex reported `authorization required` and the user later authorizes, return to Tier 1.)
|
|
266
287
|
|
|
@@ -371,7 +392,9 @@ At completion, report:
|
|
|
371
392
|
- OAT project resolved from the diff (or `--project` override) and validated; project artifacts read read-only for mode-aware context.
|
|
372
393
|
- PR content acquired via ephemeral worktree (or diff-only fallback) without mutating the caller's working tree.
|
|
373
394
|
- Prior provide-remote reviews detected and filtered to this `(project, scope)`; re-review narrowing applied only after the stale-SHA guard passes.
|
|
374
|
-
- Review executed via Tier 1 (`oat-reviewer` structured-output, NO artifact) /
|
|
395
|
+
- Review executed via Tier 1 (`oat-reviewer` structured-output, NO artifact) /
|
|
396
|
+
Tier 2 (fresh session) / Tier 3 (inline), with fallthrough limited to
|
|
397
|
+
dispatch unavailability or explicit pre-start native role rejection.
|
|
375
398
|
- Findings produced with consistent 4-tier severities and file:line references.
|
|
376
399
|
- Inline comments mapped to in-diff positions; out-of-diff findings downgraded to the body, never dropped.
|
|
377
400
|
- Posted-review body carries the marker block first (with `oat_project` + `oat_review_scope`), correct severity counts, and the minor-fix nudge when minors are present.
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: oat-project-summary
|
|
3
|
-
version: 1.3.
|
|
3
|
+
version: 1.3.3
|
|
4
4
|
description: Use when the user requests or confirms summarizing an active OAT project — e.g. "summarize the project", "generate the summary", "run oat-project-summary", or confirms a previously offered summary run. Do NOT auto-invoke when implementation completes. Generates summary.md from project artifacts as institutional memory.
|
|
5
5
|
disable-model-invocation: false
|
|
6
6
|
user-invocable: true
|
|
7
|
-
allowed-tools: Read, Write, Bash(git:*), Bash(oat config:*), Bash(oat decision:*), Glob, Grep, AskUserQuestion
|
|
7
|
+
allowed-tools: Read, Write, Bash(git:*), Bash(oat config:*), Bash(oat decision:*), Bash(oat project log:*), Glob, Grep, AskUserQuestion
|
|
8
8
|
---
|
|
9
9
|
|
|
10
10
|
# Project Summary
|
|
@@ -36,16 +36,17 @@ When executing this skill, provide lightweight progress feedback so the user can
|
|
|
36
36
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
37
37
|
|
|
38
38
|
- Before multi-step work, print step indicators, e.g.:
|
|
39
|
-
- `[1/
|
|
40
|
-
- `[2/
|
|
41
|
-
- `[3/
|
|
42
|
-
- `[4/
|
|
43
|
-
- `[5/
|
|
39
|
+
- `[1/6] Resolving project + reading artifacts…`
|
|
40
|
+
- `[2/6] Checking project log + existing summary…`
|
|
41
|
+
- `[3/6] Generating / updating summary sections…`
|
|
42
|
+
- `[4/6] Rolling up project observations…`
|
|
43
|
+
- `[5/6] Promoting key decisions to reference/decisions/ (if PJM installed)…`
|
|
44
|
+
- `[6/6] Committing…`
|
|
44
45
|
|
|
45
46
|
**BLOCKED Activities:**
|
|
46
47
|
|
|
47
48
|
- ❌ No implementation work
|
|
48
|
-
- ❌ No
|
|
49
|
+
- ❌ No hand-editing project artifacts (other than summary.md)
|
|
49
50
|
- ❌ No creating tasks or modifying plan
|
|
50
51
|
- ❌ No hand-authoring decision files or editing `reference/decisions/index.md` inside its managed markers
|
|
51
52
|
|
|
@@ -53,6 +54,10 @@ When executing this skill, provide lightweight progress feedback so the user can
|
|
|
53
54
|
|
|
54
55
|
- ✅ Reading all project artifacts
|
|
55
56
|
- ✅ Creating or updating summary.md
|
|
57
|
+
- ✅ Using `oat project log append` and `oat project log rollup` as the only
|
|
58
|
+
writers for project-log promotion and roll-up
|
|
59
|
+
- ✅ Offering follow-up-marked project-log entries to
|
|
60
|
+
`oat-pjm-add-backlog-item`
|
|
56
61
|
- ✅ Committing summary.md changes
|
|
57
62
|
- ✅ Promoting the summary's Key Decisions into canonical `reference/decisions/` records via `oat decision new` (Step 7), gated on the PJM tool pack being installed
|
|
58
63
|
|
|
@@ -120,6 +125,8 @@ Read all available artifacts for synthesis:
|
|
|
120
125
|
- `"$PROJECT_PATH/plan.md"` — phases, tasks, reviews, deferred items
|
|
121
126
|
- `"$PROJECT_PATH/implementation.md"` — task outcomes, deviations, challenges, review notes
|
|
122
127
|
- `"$PROJECT_PATH/state.md"` — associated issues, workflow mode
|
|
128
|
+
- `"$PROJECT_PATH/project-log.md"` — optional append-only workflow
|
|
129
|
+
observations; never hand-edit
|
|
123
130
|
- `"$PROJECT_PATH/oat-execution-learnings.md"` — optional append-only
|
|
124
131
|
autonomous-run observations and recommendations
|
|
125
132
|
|
|
@@ -128,6 +135,34 @@ Read all available artifacts for synthesis:
|
|
|
128
135
|
If `oat-execution-learnings.md` is absent, do not infer autonomous learnings
|
|
129
136
|
from other artifacts and do not add an Autonomous Execution Learnings section.
|
|
130
137
|
|
|
138
|
+
### Step 2.5: Check Project Log and Offer Ledger Graduation
|
|
139
|
+
|
|
140
|
+
Run the read-only status probe before authoring or refreshing `summary.md`:
|
|
141
|
+
|
|
142
|
+
```bash
|
|
143
|
+
PROJECT_LOG_CHECK=$(oat project log check --project "$PROJECT_PATH" --json)
|
|
144
|
+
PROJECT_LOG_PROMOTION_APPENDED="false"
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
Route on the structured result. `status: "absent"` is inert. When the entry
|
|
148
|
+
counts show one or more entries, keep the log in the summary flow even if task,
|
|
149
|
+
revision, and autonomous-learning tracking fields are otherwise current.
|
|
150
|
+
|
|
151
|
+
Before roll-up, inspect `project`-scoped judgments for observations that are
|
|
152
|
+
reusable across projects and offer ledger graduation. For every observation the
|
|
153
|
+
user selects, invoke `oat project log append` with the original judgment type
|
|
154
|
+
and area, `--scope general`, and a body that references the original entry's
|
|
155
|
+
exact heading. The new body may explain why the observation is reusable, but it
|
|
156
|
+
must not copy the full original entry. Request the append result as structured
|
|
157
|
+
JSON; whenever it reports `status: "appended"`, set
|
|
158
|
+
`PROJECT_LOG_PROMOTION_APPENDED="true"` so the commit step includes the mutated
|
|
159
|
+
project log.
|
|
160
|
+
|
|
161
|
+
Ledger graduation is append-only: never edit, annotate, strike through, or add
|
|
162
|
+
side metadata to the original entry. The newly appended `general` judgment is
|
|
163
|
+
the promotion, and the later `rollup` command naturally selects it for the
|
|
164
|
+
ledger.
|
|
165
|
+
|
|
131
166
|
### Step 3: Check for Existing Summary
|
|
132
167
|
|
|
133
168
|
```bash
|
|
@@ -154,7 +189,7 @@ test -f "$PROJECT_PATH/summary.md"
|
|
|
154
189
|
identifiers (timestamp, category, and title) with the source pointers in
|
|
155
190
|
the existing `## Autonomous Execution Learnings` section. Treat missing,
|
|
156
191
|
added, or changed recommendations as `learnings_changed`.
|
|
157
|
-
- If `oat_summary_last_task == current_last_task` AND `oat_summary_revision_count == current_rev_count` AND learnings are absent or unchanged: **No changes detected. Skip update.** Report: "Summary is current. No updates needed."
|
|
192
|
+
- If `oat_summary_last_task == current_last_task` AND `oat_summary_revision_count == current_rev_count` AND learnings are absent or unchanged AND the project-log check reports no entries: **No changes detected. Skip update.** Report: "Summary is current. No updates needed."
|
|
158
193
|
- If `current_rev_count > oat_summary_revision_count`: New revision phases exist. Update: Revision History, What Was Implemented, Follow-up Items.
|
|
159
194
|
- If `current_last_task > oat_summary_last_task`: New tasks completed. Update: What Was Implemented, Notable Challenges, Tradeoffs Made.
|
|
160
195
|
- If `learnings_changed`: update Autonomous Execution Learnings even when
|
|
@@ -192,6 +227,7 @@ For each section, synthesize content from the relevant artifacts. Apply these ru
|
|
|
192
227
|
| Revision History | plan.md p-revN phases, implementation.md revision notes |
|
|
193
228
|
| Follow-up Items | implementation.md deferred findings, plan.md deferred items |
|
|
194
229
|
| Associated Issues | state.md `associated_issues` field |
|
|
230
|
+
| Workflow Observations | project-log.md via `oat project log rollup` only |
|
|
195
231
|
| Autonomous Execution Learnings | oat-execution-learnings.md dated entries |
|
|
196
232
|
|
|
197
233
|
**Autonomous Execution Learnings (conditional):**
|
|
@@ -232,6 +268,17 @@ entries, omit the entire section. If the file is absent, this behavior is inert:
|
|
|
232
268
|
remove the template placeholder during a first render and make no
|
|
233
269
|
learnings-driven update on a re-run.
|
|
234
270
|
|
|
271
|
+
**Workflow Observations coexistence contract:**
|
|
272
|
+
|
|
273
|
+
Keep `## Workflow Observations` and `## Autonomous Execution Learnings` as
|
|
274
|
+
distinct summary sections. Author the autonomous-execution section first, then
|
|
275
|
+
perform the project-log roll-up in Step 6. Because the roll-up command writes
|
|
276
|
+
every project-log entry, keep the project-log observation in Workflow
|
|
277
|
+
Observations and represent any overlap from Autonomous Execution Learnings with
|
|
278
|
+
a one-line cross-reference instead of copying it there. The roll-up command
|
|
279
|
+
remains the only writer of Workflow Observations—never hand-implement its
|
|
280
|
+
section or ledger writes.
|
|
281
|
+
|
|
235
282
|
**For incremental updates (re-run):**
|
|
236
283
|
|
|
237
284
|
Only update sections affected by the new content. Do not rewrite the entire summary. Preserve existing section content and append/modify as needed.
|
|
@@ -253,11 +300,50 @@ oat_summary_includes_revisions: [{ list of p-revN IDs reflected }]
|
|
|
253
300
|
---
|
|
254
301
|
```
|
|
255
302
|
|
|
256
|
-
### Step 6:
|
|
303
|
+
### Step 6: Roll Up Project Observations and Offer Backlog Graduation
|
|
304
|
+
|
|
305
|
+
Run this step after `summary.md` has been authored or refreshed, including the
|
|
306
|
+
distinct `## Autonomous Execution Learnings` section when its source artifact
|
|
307
|
+
exists.
|
|
308
|
+
|
|
309
|
+
When Step 2.5 found entries, run:
|
|
310
|
+
|
|
311
|
+
```bash
|
|
312
|
+
PROJECT_LOG_LEDGER_PATH=$(oat config get workflow.projectLogLedgerPath)
|
|
313
|
+
PROJECT_LOG_LEDGER_APPENDED="false"
|
|
314
|
+
PROJECT_LOG_ROLLUP=$(oat project log rollup --project "$PROJECT_PATH" --json)
|
|
315
|
+
```
|
|
316
|
+
|
|
317
|
+
`PROJECT_LOG_LEDGER_PATH` must be the effective resolved path, including the
|
|
318
|
+
default when no override exists. If it cannot be resolved, stop before roll-up
|
|
319
|
+
because a later `ledgerOutcome: "appended"` could not be staged safely.
|
|
320
|
+
|
|
321
|
+
Route only on the structured `ProjectLogRollupResult`:
|
|
322
|
+
|
|
323
|
+
- `status: "ok"` with `ledgerOutcome: "appended"`: set
|
|
324
|
+
`PROJECT_LOG_LEDGER_APPENDED="true"` and proceed.
|
|
325
|
+
- `status: "ok"` with `ledgerOutcome: "deduplicated"`: proceed without staging
|
|
326
|
+
the unchanged ledger.
|
|
327
|
+
- `status: "ok"` with `ledgerOutcome: "skipped_permitted"`: proceed and report
|
|
328
|
+
that the ledger was permissibly skipped because the default reference layer
|
|
329
|
+
is absent.
|
|
330
|
+
- `status: "failed"` or `ledgerOutcome: "failed"`: surface the failure to the
|
|
331
|
+
user and stop before commit. Do not describe the summary as fully rolled up.
|
|
332
|
+
|
|
333
|
+
The command mechanically writes or updates `## Workflow Observations` and
|
|
334
|
+
appends/deduplicates eligible `general` judgments in the configured ledger. Do
|
|
335
|
+
not reproduce either write by hand.
|
|
336
|
+
|
|
337
|
+
Separately inspect follow-up-marked project-log entries and offer backlog
|
|
338
|
+
graduation through `oat-pjm-add-backlog-item`. Backlog graduation creates a
|
|
339
|
+
tracked work item; it is not ledger graduation and must not replace the
|
|
340
|
+
append-based `project` → `general` promotion in Step 2.5.
|
|
341
|
+
|
|
342
|
+
### Step 7: Promote Key Decisions to Canonical Decision Records
|
|
257
343
|
|
|
258
344
|
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.
|
|
259
345
|
|
|
260
|
-
**
|
|
346
|
+
**7.1 — PJM gate (auto, no prompt).** Check whether the PJM tool pack is installed:
|
|
261
347
|
|
|
262
348
|
```bash
|
|
263
349
|
PJM_ENABLED=$(oat config get tools.project-management 2>/dev/null || echo "")
|
|
@@ -266,9 +352,9 @@ PJM_ENABLED=$(oat config get tools.project-management 2>/dev/null || echo "")
|
|
|
266
352
|
- If `PJM_ENABLED` is `true` → perform the promotion automatically. Do NOT ask the user.
|
|
267
353
|
- Otherwise (any other value, empty, or unset) → **skip this entire step silently.** Do not print a warning or prompt.
|
|
268
354
|
|
|
269
|
-
**
|
|
355
|
+
**7.2 — Skip if nothing to promote.** If `summary.md` has no `## Key Decisions` section, or that section has no decision content, skip the step. There is nothing to promote.
|
|
270
356
|
|
|
271
|
-
**
|
|
357
|
+
**7.3 — Ensure the decisions surface exists.** The canonical decisions root is `.oat/repo/reference/decisions` (the `oat decision` default; pass `--decisions-root <path>` only for an explicit override). If its managed index is missing — i.e. `.oat/repo/reference/decisions/index.md` does not exist — initialize it first so `oat decision new` can succeed:
|
|
272
358
|
|
|
273
359
|
```bash
|
|
274
360
|
test -f .oat/repo/reference/decisions/index.md || oat decision init
|
|
@@ -276,7 +362,7 @@ test -f .oat/repo/reference/decisions/index.md || oat decision init
|
|
|
276
362
|
|
|
277
363
|
`oat decision init` is idempotent; running it when the scaffold already exists is harmless.
|
|
278
364
|
|
|
279
|
-
**
|
|
365
|
+
**7.4 — Idempotent, date-independent promotion (critical).** For each decision in `## Key Decisions`:
|
|
280
366
|
|
|
281
367
|
1. **Derive title + complete sections.** Ground every value in the Key Decision and its project artifacts:
|
|
282
368
|
- The bold lead-in / first clause becomes the **title** (a short noun phrase).
|
|
@@ -308,7 +394,7 @@ Because of the date-independent slug dedup, this step is **safe to run every tim
|
|
|
308
394
|
|
|
309
395
|
**Status value:** use `--status accepted`. The decision template's status field (`.oat/templates/decision.md`) is free-form, and the canonical accepted/decided value in the decision vocabulary (`proposed` → `accepted` → `superseded`) is `accepted`. A Key Decision in a completed project's summary represents a decision that was made and shipped, so `accepted` is the correct status.
|
|
310
396
|
|
|
311
|
-
**
|
|
397
|
+
**7.5 — Report, don't prompt.** After processing all Key Decisions, print a short informational summary, e.g.:
|
|
312
398
|
|
|
313
399
|
```
|
|
314
400
|
Promoted N key decision(s) to reference/decisions/:
|
|
@@ -318,14 +404,25 @@ Promoted N key decision(s) to reference/decisions/:
|
|
|
318
404
|
|
|
319
405
|
This is informational only. There is no interactive prompt anywhere in this step.
|
|
320
406
|
|
|
321
|
-
### Step
|
|
407
|
+
### Step 8: Commit
|
|
322
408
|
|
|
323
409
|
```bash
|
|
324
410
|
git add "$PROJECT_PATH/summary.md"
|
|
411
|
+
if [ "$PROJECT_LOG_PROMOTION_APPENDED" = "true" ]; then
|
|
412
|
+
git add "$PROJECT_PATH/project-log.md"
|
|
413
|
+
fi
|
|
414
|
+
if [ "$PROJECT_LOG_LEDGER_APPENDED" = "true" ]; then
|
|
415
|
+
git add "$PROJECT_LOG_LEDGER_PATH"
|
|
416
|
+
fi
|
|
325
417
|
git commit -m "docs: generate summary for {project-name}"
|
|
326
418
|
```
|
|
327
419
|
|
|
328
|
-
|
|
420
|
+
These conditional paths are required: append-based promotion mutates
|
|
421
|
+
`project-log.md`, while `ledgerOutcome: "appended"` mutates the effective
|
|
422
|
+
repository ledger. A permitted skip or deduplicated ledger does not add a
|
|
423
|
+
ledger staging path.
|
|
424
|
+
|
|
425
|
+
If decision records were promoted in Step 7, also stage `.oat/repo/reference/decisions/` so the new `DR-*.md` records and the regenerated `index.md` land with the summary.
|
|
329
426
|
|
|
330
427
|
If this is a re-run (incremental update):
|
|
331
428
|
|
|
@@ -333,7 +430,7 @@ If this is a re-run (incremental update):
|
|
|
333
430
|
git commit -m "docs: update summary for {project-name}"
|
|
334
431
|
```
|
|
335
432
|
|
|
336
|
-
### Step
|
|
433
|
+
### Step 9: Output Summary
|
|
337
434
|
|
|
338
435
|
```
|
|
339
436
|
Summary generated for {project-name}.
|
|
@@ -360,5 +457,12 @@ Summary tracks: last task {task_id}, {N} revision phases
|
|
|
360
457
|
follow-ups, and Workflow issues with source-entry pointers
|
|
361
458
|
- When `oat-execution-learnings.md` is absent, no Autonomous Execution
|
|
362
459
|
Learnings section is rendered and normal summary behavior is unchanged
|
|
460
|
+
- Project-log ledger graduation appends a new referencing `general` judgment
|
|
461
|
+
before roll-up and never mutates the original `project` judgment
|
|
462
|
+
- `oat project log rollup --json` owns the distinct Workflow Observations
|
|
463
|
+
section and ledger writes; `failed` stops the summary flow while
|
|
464
|
+
`skipped_permitted` proceeds with a note
|
|
465
|
+
- Follow-up-marked project-log entries use backlog graduation separately from
|
|
466
|
+
ledger graduation
|
|
363
467
|
- When the PJM tool pack is installed, each Key Decision is promoted to a canonical `reference/decisions/DR-YYMMDD-slug` record via `oat decision new` (status `accepted`), deduped on the date-independent slug so re-runs never create duplicate records
|
|
364
468
|
- When the PJM tool pack is not installed, decision promotion is skipped silently with no prompt
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
---
|
|
2
|
+
oat_generated: false
|
|
3
|
+
oat_template: true
|
|
4
|
+
oat_template_name: project-log
|
|
5
|
+
purpose: project-observations
|
|
6
|
+
oat_last_updated: YYYY-MM-DD
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Project Log: {Project Name}
|
|
10
|
+
|
|
11
|
+
This append-only log serves two audiences: the project team learning from this project's execution, and maintainers improving the general OAT workflow and tooling.
|
|
12
|
+
|
|
13
|
+
## Logging contract
|
|
14
|
+
|
|
15
|
+
Append when something breaks, surprises you, requires a workaround, or works notably well enough to preserve as do-not-regress evidence. Record evidence, not a running narrative. Prior entries are never edited or struck through; append corrections as a new judgment entry that references the original entry and explains the correction. Add a version note to tool-related observations. Create entries only with `oat project log append`; run `oat project log append --help` for the complete entry contract. Reference supporting artifacts by path instead of inlining them. Never record secret values such as tokens, keys, signed URLs, or credentials because this log rolls up into tracked surfaces; reference secrets by name or source, never by value.
|
|
16
|
+
|
|
17
|
+
Judgment entries default to 1–3 sentences covering what happened, the impact or workaround, and any follow-up. High-value entries may instead use this structured body:
|
|
18
|
+
|
|
19
|
+
```text
|
|
20
|
+
Observation: What happened and the supporting evidence.
|
|
21
|
+
Impact: Why it mattered or what workaround was required.
|
|
22
|
+
Recommendation: What should change or be preserved.
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
Shared tracked surfaces must be written only from the root checkout, never from parallel worktrees.
|
|
26
|
+
|
|
27
|
+
## Entry format
|
|
28
|
+
|
|
29
|
+
Judgment entries:
|
|
30
|
+
|
|
31
|
+
```text
|
|
32
|
+
### YYYY-MM-DD · <project|general> · <bug|friction|worked-well|feedback> · <area>
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Structural entries:
|
|
36
|
+
|
|
37
|
+
```text
|
|
38
|
+
### YYYY-MM-DD · structural · <producer> · <ref>
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Entries
|
|
42
|
+
|
|
43
|
+
Entries are chronological and append-only.
|
|
44
|
+
|
|
45
|
+
## End-of-run synthesis (pending — do not skip at project completion)
|
|
46
|
+
|
|
47
|
+
Summarize the overall verdict, adopted adjustments, and entries graduated to the repo ledger or backlog. Roll up durable observations into tracked surfaces before archiving this project log.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/config/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,mBAAmB,EAAE,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEhF,OAAO,EAEL,KAAK,aAAa,EACnB,MAAM,iCAAiC,CAAC;AAezC,OAAO,EAML,KAAK,SAAS,EACd,KAAK,cAAc,EAGnB,KAAK,UAAU,EAehB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAEL,KAAK,cAAc,EAEpB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAGL,KAAK,8BAA8B,EACnC,KAAK,yBAAyB,EAC/B,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EACL,mCAAmC,EACnC,0BAA0B,EAC3B,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/config/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,mBAAmB,EAAE,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEhF,OAAO,EAEL,KAAK,aAAa,EACnB,MAAM,iCAAiC,CAAC;AAezC,OAAO,EAML,KAAK,SAAS,EACd,KAAK,cAAc,EAGnB,KAAK,UAAU,EAehB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAEL,KAAK,cAAc,EAEpB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAGL,KAAK,8BAA8B,EACnC,KAAK,yBAAyB,EAC/B,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EACL,mCAAmC,EACnC,0BAA0B,EAC3B,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAyFpC,UAAU,yBAAyB;IACjC,mBAAmB,EAAE,CACnB,OAAO,EAAE,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC,CAAC,CAAC,KAC/C,cAAc,CAAC;IACpB,kBAAkB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACrD,aAAa,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;IACxD,cAAc,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACvE,kBAAkB,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;IAClE,mBAAmB,EAAE,CACnB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,cAAc,KACnB,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,cAAc,EAAE,CAAC,aAAa,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;IAC/D,eAAe,EAAE,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9E,mBAAmB,EAAE,CACnB,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,MAAM,CAAC,UAAU,KACnB,OAAO,CAAC,MAAM,CAAC,CAAC;IACrB,sBAAsB,EAAE,CACtB,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,EACrB,GAAG,EAAE,MAAM,CAAC,UAAU,KACnB,OAAO,CAAC,cAAc,CAAC,CAAC;IAC7B,iBAAiB,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IACzC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5C,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,aAAa,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACzE,kBAAkB,EAAE,CAClB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,yBAAyB,KAC/B,OAAO,CAAC,8BAA8B,CAAC,CAAC;IAC7C,mCAAmC,EAAE,OAAO,mCAAmC,CAAC;IAChF,0BAA0B,EAAE,OAAO,0BAA0B,CAAC;IAC9D,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC;CAC/B;AAkhED,wBAAgB,mBAAmB,CACjC,SAAS,GAAE,OAAO,CAAC,yBAAyB,CAAM,GACjD,OAAO,CAsKT"}
|
|
@@ -57,6 +57,8 @@ const KEY_ORDER = [
|
|
|
57
57
|
'workflow.autoNarrowReReviewScope',
|
|
58
58
|
'workflow.autoArtifactReview.plan',
|
|
59
59
|
'workflow.autoArtifactReview.analysis',
|
|
60
|
+
'workflow.projectLog',
|
|
61
|
+
'workflow.projectLogLedgerPath',
|
|
60
62
|
'workflow.designMode',
|
|
61
63
|
'workflow.dispatchPolicy.mode',
|
|
62
64
|
'workflow.dispatchPolicy.policy',
|
|
@@ -464,6 +466,28 @@ const CONFIG_CATALOG = [
|
|
|
464
466
|
owningCommand: 'oat config set workflow.autoArtifactReview.analysis <true|false>',
|
|
465
467
|
description: 'Automatically run the bounded accuracy-review loop for generated analysis artifacts before apply workflows consume them. Resolution: local > shared > user > default.',
|
|
466
468
|
},
|
|
469
|
+
{
|
|
470
|
+
key: 'workflow.projectLog',
|
|
471
|
+
group: 'Workflow Preferences (3-layer: local > shared > user)',
|
|
472
|
+
file: '.oat/config.local.json | .oat/config.json | ~/.oat/config.json',
|
|
473
|
+
scope: 'workflow',
|
|
474
|
+
type: 'true | false | auto',
|
|
475
|
+
defaultValue: 'auto',
|
|
476
|
+
mutability: 'read/write',
|
|
477
|
+
owningCommand: 'oat config set workflow.projectLog <true|false|auto>',
|
|
478
|
+
description: 'Controls the append-only per-project observation log. auto creates it on first append; an existing artifact always remains enabled. Resolution: local > shared > user > default.',
|
|
479
|
+
},
|
|
480
|
+
{
|
|
481
|
+
key: 'workflow.projectLogLedgerPath',
|
|
482
|
+
group: 'Workflow Preferences (3-layer: local > shared > user)',
|
|
483
|
+
file: '.oat/config.local.json | .oat/config.json | ~/.oat/config.json',
|
|
484
|
+
scope: 'workflow',
|
|
485
|
+
type: 'string',
|
|
486
|
+
defaultValue: '.oat/repo/reference/project-observations.md',
|
|
487
|
+
mutability: 'read/write',
|
|
488
|
+
owningCommand: 'oat config set workflow.projectLogLedgerPath <repo-relative-path>',
|
|
489
|
+
description: 'Repo-relative ledger path used by project-log rollup. Resolution: local > shared > user > default.',
|
|
490
|
+
},
|
|
467
491
|
{
|
|
468
492
|
key: 'workflow.designMode',
|
|
469
493
|
group: 'Workflow Preferences (3-layer: local > shared > user)',
|
|
@@ -745,6 +769,23 @@ function parseWorkflowValue(key, rawValue) {
|
|
|
745
769
|
if (WORKFLOW_BOOLEAN_KEYS.has(key)) {
|
|
746
770
|
return parseBooleanValue(key, rawValue);
|
|
747
771
|
}
|
|
772
|
+
if (key === 'workflow.projectLog') {
|
|
773
|
+
const normalized = rawValue.trim().toLowerCase();
|
|
774
|
+
if (normalized === 'true' || normalized === 'false') {
|
|
775
|
+
return normalized === 'true';
|
|
776
|
+
}
|
|
777
|
+
if (normalized === 'auto') {
|
|
778
|
+
return normalized;
|
|
779
|
+
}
|
|
780
|
+
throw new Error(`Invalid value for ${key}: expected one of true | false | auto, got '${rawValue}'`);
|
|
781
|
+
}
|
|
782
|
+
if (key === 'workflow.projectLogLedgerPath') {
|
|
783
|
+
const normalized = rawValue.trim();
|
|
784
|
+
if (!normalized) {
|
|
785
|
+
throw new Error(`Invalid value for ${key}: expected a non-empty string path`);
|
|
786
|
+
}
|
|
787
|
+
return normalized;
|
|
788
|
+
}
|
|
748
789
|
if (key === 'workflow.postImplementSequence') {
|
|
749
790
|
const normalized = rawValue.trim();
|
|
750
791
|
if (normalized.startsWith('{') || normalized.startsWith('[')) {
|
|
@@ -2,7 +2,7 @@ import { type CommandContext, type GlobalOptions } from '../../app/command-conte
|
|
|
2
2
|
import { type PjmDoctorOptions } from '../pjm/doctor.js';
|
|
3
3
|
import { type OatConfig, type OatLocalConfig, type UserConfig } from '../../config/oat-config.js';
|
|
4
4
|
import { type Manifest } from '../../manifest/index.js';
|
|
5
|
-
import { type MatrixCellAvailabilityResponse, type ValidateMatrixCellOptions } from '../../providers/identity/availability.js';
|
|
5
|
+
import { type CursorMaterializedModelDiagnostic, type MatrixCellAvailabilityResponse, type ValidateMatrixCellOptions } from '../../providers/identity/availability.js';
|
|
6
6
|
import { createDispatchValidationPassContext, validateDispatchMatrixRefs } from '../../providers/identity/dispatch-validation.js';
|
|
7
7
|
import type { ConcreteScope } from '../../shared/types.js';
|
|
8
8
|
import { type DoctorCheck } from '../../ui/output.js';
|
|
@@ -24,6 +24,7 @@ interface DoctorDependencies {
|
|
|
24
24
|
readOatLocalConfig: (repoRoot: string) => Promise<OatLocalConfig>;
|
|
25
25
|
readUserConfig: (userConfigDir: string) => Promise<UserConfig>;
|
|
26
26
|
validateMatrixCell: (provider: string, value: string, options: ValidateMatrixCellOptions) => Promise<MatrixCellAvailabilityResponse>;
|
|
27
|
+
diagnoseCursorMaterializedModels: (ladderModelIds: readonly string[], options: ValidateMatrixCellOptions) => Promise<CursorMaterializedModelDiagnostic[]>;
|
|
27
28
|
createDispatchValidationPassContext: typeof createDispatchValidationPassContext;
|
|
28
29
|
validateDispatchMatrixRefs: typeof validateDispatchMatrixRefs;
|
|
29
30
|
processEnv: NodeJS.ProcessEnv;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/doctor/index.ts"],"names":[],"mappings":"AAWA,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,aAAa,EACnB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAGL,KAAK,gBAAgB,EACtB,MAAM,sBAAsB,CAAC;AAY9B,OAAO,EAEL,KAAK,SAAS,EACd,KAAK,cAAc,EAGnB,KAAK,UAAU,EAChB,MAAM,oBAAoB,CAAC;AAI5B,OAAO,EAAgB,KAAK,QAAQ,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/doctor/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,8 +18,9 @@ import { codexAdapter } from '../../providers/codex/index.js';
|
|
|
18
18
|
import { isOatManagedCodexRoleFile } from '../../providers/codex/codec/shared.js';
|
|
19
19
|
import { copilotAdapter } from '../../providers/copilot/index.js';
|
|
20
20
|
import { cursorAdapter } from '../../providers/cursor/index.js';
|
|
21
|
+
import { CURSOR_MODEL_PIN_MAPPINGS } from '../../providers/cursor/codec/catalog.js';
|
|
21
22
|
import { geminiAdapter } from '../../providers/gemini/index.js';
|
|
22
|
-
import { validateMatrixCell, } from '../../providers/identity/availability.js';
|
|
23
|
+
import { diagnoseCursorMaterializedModels, validateMatrixCell, } from '../../providers/identity/availability.js';
|
|
23
24
|
import { createDispatchValidationPassContext, validateDispatchMatrixRefs, } from '../../providers/identity/dispatch-validation.js';
|
|
24
25
|
import { formatDoctorResults } from '../../ui/output.js';
|
|
25
26
|
import { Command } from 'commander';
|
|
@@ -137,6 +138,7 @@ function createDependencies() {
|
|
|
137
138
|
readOatLocalConfig,
|
|
138
139
|
readUserConfig,
|
|
139
140
|
validateMatrixCell,
|
|
141
|
+
diagnoseCursorMaterializedModels,
|
|
140
142
|
createDispatchValidationPassContext,
|
|
141
143
|
validateDispatchMatrixRefs,
|
|
142
144
|
processEnv: process.env,
|
|
@@ -147,6 +149,36 @@ function createDependencies() {
|
|
|
147
149
|
checkStaleInvocations,
|
|
148
150
|
};
|
|
149
151
|
}
|
|
152
|
+
async function createCursorMaterializedModelsCheck(scopeRoot, dependencies) {
|
|
153
|
+
const diagnostics = await dependencies.diagnoseCursorMaterializedModels(CURSOR_MODEL_PIN_MAPPINGS.map((mapping) => mapping.ladderModelId), { cwd: scopeRoot, env: dependencies.processEnv });
|
|
154
|
+
const missing = diagnostics.filter((diagnostic) => diagnostic.availability === 'missing');
|
|
155
|
+
const unvalidated = diagnostics.filter((diagnostic) => diagnostic.availability === 'unvalidated');
|
|
156
|
+
if (missing.length > 0) {
|
|
157
|
+
return {
|
|
158
|
+
name: 'project:cursor_materialized_models',
|
|
159
|
+
description: 'Cursor materialized target catalog availability',
|
|
160
|
+
status: 'warn',
|
|
161
|
+
message: `Broad Cursor CLI catalog no longer lists: ${missing.map((entry) => entry.ladderModelId).join(', ')}. ` +
|
|
162
|
+
'This availability check does not verify definition pins or runtime identity.',
|
|
163
|
+
fix: 'Refresh Cursor model mappings and rerun `oat sync --scope project`.',
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
if (unvalidated.length > 0) {
|
|
167
|
+
return {
|
|
168
|
+
name: 'project:cursor_materialized_models',
|
|
169
|
+
description: 'Cursor materialized target catalog availability',
|
|
170
|
+
status: 'warn',
|
|
171
|
+
message: 'Cursor broad CLI catalog could not be checked. Definition pins and runtime identity were not tested.',
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
return {
|
|
175
|
+
name: 'project:cursor_materialized_models',
|
|
176
|
+
description: 'Cursor materialized target catalog availability',
|
|
177
|
+
status: 'pass',
|
|
178
|
+
message: `All ${diagnostics.length} mapped flat Cursor IDs remain listed in the broad CLI catalog. ` +
|
|
179
|
+
'This does not verify definition pins or runtime identity.',
|
|
180
|
+
};
|
|
181
|
+
}
|
|
150
182
|
function collectDispatchMatrixCellRefs(layers) {
|
|
151
183
|
return layers.flatMap(({ source, config }) => {
|
|
152
184
|
const providers = config.workflow?.dispatchCeiling?.providers ?? {};
|
|
@@ -505,6 +537,10 @@ async function runChecksForScope(scope, scopeRoot, userConfigDir, dependencies)
|
|
|
505
537
|
? undefined
|
|
506
538
|
: 'Install or enable a provider directory (e.g. .claude, .cursor, .codex).',
|
|
507
539
|
});
|
|
540
|
+
if (scope === 'project' &&
|
|
541
|
+
providers.some((provider) => provider.name === 'cursor' && provider.detected)) {
|
|
542
|
+
checks.push(await createCursorMaterializedModelsCheck(scopeRoot, dependencies));
|
|
543
|
+
}
|
|
508
544
|
checks.push(...(await runCodexChecksForScope(scope, scopeRoot, dirname(userConfigDir), dependencies)));
|
|
509
545
|
if (scope === 'project') {
|
|
510
546
|
checks.push(await dependencies.checkStaleInvocations(scopeRoot));
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { type CommandContext, type GlobalOptions } from '../../app/command-context.js';
|
|
2
|
+
import { appendProjectLog } from '../project/log/append.js';
|
|
2
3
|
import { type ExecTarget, type OatConfig, type OatLocalConfig, type UserConfig } from '../../config/oat-config.js';
|
|
3
4
|
import { type ResolvedConfig } from '../../config/resolve.js';
|
|
4
5
|
import { type ModelFamily } from '../../providers/identity/family.js';
|
|
@@ -24,6 +25,7 @@ interface GateCommandDependencies {
|
|
|
24
25
|
readGateRouteReceipt: typeof readGateRouteReceipt;
|
|
25
26
|
runProcess: (command: string, args: string[], options: ProcessRunOptions) => Promise<ProcessRunResult>;
|
|
26
27
|
parseReviewGateVerdict: typeof parseReviewGateVerdict;
|
|
28
|
+
appendProjectLog: typeof appendProjectLog;
|
|
27
29
|
processEnv: NodeJS.ProcessEnv;
|
|
28
30
|
writeGateRunMarker: (path: string, marker: GateRunMarker, warn: (message: string) => void) => Promise<boolean>;
|
|
29
31
|
removeGateRunMarker: (path: string, warn: (message: string) => void) => Promise<void>;
|
|
@@ -89,7 +91,7 @@ interface GateProducerIdentity {
|
|
|
89
91
|
contributingScopes?: string[];
|
|
90
92
|
contributingStampCount?: number;
|
|
91
93
|
diversityClaimable: boolean;
|
|
92
|
-
source: 'flag' | 'stamp' | 'aggregated-stamps' | 'unknown';
|
|
94
|
+
source: 'flag' | 'stamp' | 'aggregated-stamps' | 'environment' | 'unknown';
|
|
93
95
|
}
|
|
94
96
|
interface GateDiversityMetadata {
|
|
95
97
|
avoid: CrossProviderAvoid;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/gate/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,aAAa,EACnB,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/gate/index.ts"],"names":[],"mappings":"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"}
|