@open-agent-toolkit/cli 0.2.75 → 0.2.77
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/bundle-metadata.json +1 -1
- package/assets/docs/cli-utilities/config-and-local-state.md +3 -3
- package/assets/docs/cli-utilities/configuration.md +3 -1
- package/assets/docs/cli-utilities/index.md +1 -0
- package/assets/docs/cli-utilities/tool-packs.md +1 -1
- package/assets/docs/reference/file-locations.md +1 -1
- package/assets/docs/reference/oat-directory-structure.md +1 -1
- package/assets/public-package-versions.json +4 -4
- package/assets/skills/explainer-kit/SKILL.md +1 -1
- package/assets/skills/explainer-kit/scripts/bundle.mjs +26 -2
- package/assets/skills/explainer-kit/scripts/record.mjs +26 -3
- package/assets/skills/explainer-kit/scripts/verify.mjs +26 -3
- package/assets/skills/oat-doctor/SKILL.md +153 -193
- package/assets/skills/oat-explainer-kit/SKILL.md +1 -1
- package/assets/skills/oat-explainer-kit/scripts/check-terminal-outcome.mjs +25 -5
- package/assets/skills/oat-project-autonomous/references/gate-inventory.md +1 -1
- package/assets/skills/oat-project-complete/SKILL.md +1 -1
- package/assets/skills/oat-project-complete/scripts/consume-persisted-recap-intent.mjs +26 -6
- package/assets/skills/oat-project-complete/scripts/execute-synced-archive-entry.mjs +26 -6
- package/assets/skills/oat-project-complete/scripts/finalize-synced-archive.mjs +7 -0
- package/assets/skills/oat-project-complete/scripts/parse-completion-retry-fields.mjs +26 -5
- package/assets/skills/oat-project-complete/scripts/parse-synced-archive-resume-fields.mjs +26 -5
- package/assets/skills/oat-project-complete/scripts/recover-completion-receipts.mjs +26 -6
- package/assets/skills/oat-project-complete/scripts/resolve-completion-retry.mjs +26 -6
- package/assets/skills/oat-project-complete/scripts/resolve-synced-archive-entry.mjs +26 -5
- package/assets/skills/oat-project-complete/scripts/validate-durable-archive-receipt.mjs +7 -0
- package/assets/skills/oat-project-complete/scripts/validate-nonarchive-lifecycle-receipt.mjs +126 -95
- package/assets/skills/oat-project-document/references/docs/autonomy-contract.md +1 -1
- package/assets/skills/oat-project-implement/SKILL.md +1 -1
- package/assets/skills/oat-project-implement/references/docs/autonomy-contract.md +1 -1
- package/assets/skills/oat-project-implement/scripts/capture-dirty-tree.mjs +3 -0
- package/assets/skills/oat-project-lite/references/docs/autonomy-contract.md +1 -1
- package/assets/skills/oat-project-pr-final/references/docs/autonomy-contract.md +1 -1
- package/assets/skills/oat-project-quick-start/SKILL.md +9 -6
- package/assets/skills/oat-project-quick-start/references/docs/autonomy-contract.md +1 -1
- package/assets/skills/recon/SKILL.md +1 -1
- package/assets/skills/recon/scripts/create-review-brief.mjs +25 -5
- package/assets/skills/recon/scripts/prepare-routing.mjs +26 -2
- package/assets/skills/recon/scripts/render-packet.mjs +25 -5
- package/assets/skills/recon/scripts/validate-artifact.mjs +25 -5
- package/assets/skills/recon/scripts/validate-packet.mjs +25 -5
- package/assets/templates/implementation.md +1 -1
- package/dist/commands/config/index.d.ts.map +1 -1
- package/dist/commands/config/index.js +18 -1
- 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 +1 -1
- package/package.json +2 -2
|
@@ -1,47 +1,49 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: oat-doctor
|
|
3
|
-
description: Use when you
|
|
3
|
+
description: Use when you want to check the health of your OAT setup in one place — config, project management (PJM), agent instructions, docs, and installed tools — and then work through what it finds. Sweeps read-only, reports by area, and dives into an area on request, teaching from the bundled docs and offering exact fix commands.
|
|
4
4
|
argument-hint: '[--summary]'
|
|
5
5
|
disable-model-invocation: true
|
|
6
6
|
user-invocable: true
|
|
7
7
|
allowed-tools: Read, Bash, Glob, Grep, AskUserQuestion
|
|
8
8
|
metadata:
|
|
9
|
-
version:
|
|
9
|
+
version: 2.0.0
|
|
10
10
|
---
|
|
11
11
|
|
|
12
12
|
# OAT Doctor
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
One place to look at everything OAT knows about this checkout and this user. A run has three stages: a read-only **sweep** over five areas, a grouped **report**, and a **dive** into any area the person picks. Dives teach from the bundled docs and offer fixes; they do not apply them.
|
|
15
15
|
|
|
16
16
|
## Prerequisites
|
|
17
17
|
|
|
18
18
|
- OAT CLI installed and available as `oat` in PATH.
|
|
19
|
-
- At least one `oat init` has been run (project or user level).
|
|
19
|
+
- At least one `oat init` has been run (project or user level). When nothing is initialized, the sweep still runs: every area then offers its bootstrap.
|
|
20
20
|
|
|
21
21
|
## Mode Assertion
|
|
22
22
|
|
|
23
23
|
**OAT MODE: Doctor (Diagnostic)**
|
|
24
24
|
|
|
25
|
-
**Purpose:** Inspect OAT setup and
|
|
25
|
+
**Purpose:** Inspect OAT setup, explain what it finds, and offer the exact fix. The sweep and the dives never write.
|
|
26
26
|
|
|
27
27
|
**BLOCKED Activities:**
|
|
28
28
|
|
|
29
|
-
- No editing configuration files, skills, or
|
|
30
|
-
- No
|
|
31
|
-
- No
|
|
29
|
+
- No editing configuration files, skills, templates, instruction files, PJM files, or docs.
|
|
30
|
+
- No creating, modifying, or deleting any file.
|
|
31
|
+
- No running any mutating command, with exactly one carve-out below.
|
|
32
|
+
|
|
33
|
+
**The one carve-out:** after a dive has named a fix as one of `oat config set`, `oat config unset`, `oat config adopt`, `oat pjm init`, `oat instructions sync`, `oat tools update`, or `oat tools install`, and the person has approved that exact command, run it once and report the result. Nothing else is ever run; a hand-off to another skill (`oat-docs-bootstrap`, `oat-agent-instructions-analyze`, `oat-agent-instructions-apply`, `oat-pjm-*`) is an invocation the person starts.
|
|
32
34
|
|
|
33
35
|
**ALLOWED Activities:**
|
|
34
36
|
|
|
35
|
-
- Running `oat` CLI commands with `--json`
|
|
36
|
-
- Reading files to inspect
|
|
37
|
-
-
|
|
38
|
-
- Presenting diagnostic findings and recommendations to the user.
|
|
37
|
+
- Running `oat` CLI commands with `--json` for read-only data gathering, projected to the fields named below.
|
|
38
|
+
- Reading files to inspect state, and reading `~/.oat/docs/` to explain it.
|
|
39
|
+
- Presenting findings, explanations, and recommendations.
|
|
39
40
|
|
|
40
41
|
**Self-Correction Protocol:**
|
|
41
42
|
If you catch yourself:
|
|
42
43
|
|
|
43
|
-
- About to run a mutating command → STOP and present it as a recommendation instead.
|
|
44
|
-
- Editing a file to fix a problem → STOP and tell the
|
|
44
|
+
- About to run a mutating command that is not the one approved carve-out → STOP and present it as a recommendation instead.
|
|
45
|
+
- Editing a file to fix a problem → STOP and tell the person the fix command or the owning skill.
|
|
46
|
+
- Explaining a config key from memory → STOP and read the `describe` entry and the docs section named for its group.
|
|
45
47
|
|
|
46
48
|
**Recovery:**
|
|
47
49
|
|
|
@@ -56,21 +58,11 @@ Print a phase banner once at start:
|
|
|
56
58
|
OAT ▸ DOCTOR
|
|
57
59
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
58
60
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
- `[
|
|
62
|
-
- `[2/4] Checking for outdated skills…`
|
|
63
|
-
- `[3/4] Inspecting configuration…`
|
|
64
|
-
- `[4/4] Reporting findings…`
|
|
61
|
+
- `[1/3] Sweeping config, PJM, agent instructions, docs, and tools…`
|
|
62
|
+
- `[2/3] Reporting findings…`
|
|
63
|
+
- `[3/3] Diving into {area}…` (once per dive)
|
|
65
64
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
- `[1/6] Gathering installed tools…`
|
|
69
|
-
- `[2/6] Checking for outdated skills…`
|
|
70
|
-
- `[3/6] Inspecting configuration…`
|
|
71
|
-
- `[4/6] Discovering available packs…`
|
|
72
|
-
- `[5/6] Checking sync status…`
|
|
73
|
-
- `[6/6] Building dashboard…`
|
|
65
|
+
Summary mode (`--summary`) prints `[1/2] Gathering installed tools…` and `[2/2] Building dashboard…` instead.
|
|
74
66
|
|
|
75
67
|
## Process
|
|
76
68
|
|
|
@@ -78,157 +70,172 @@ OAT ▸ DOCTOR
|
|
|
78
70
|
|
|
79
71
|
Read `$ARGUMENTS`:
|
|
80
72
|
|
|
81
|
-
-
|
|
82
|
-
- Otherwise → **
|
|
73
|
+
- `--summary` → **summary mode** (Step 4 only).
|
|
74
|
+
- Otherwise → **sweep mode** (Steps 1–3).
|
|
83
75
|
|
|
84
|
-
|
|
76
|
+
Report-only rule: when `OAT_NON_INTERACTIVE=1` is set, or no user-response channel exists, the run ends after Step 2's report. Never prompt in that case, and never run a fix.
|
|
85
77
|
|
|
86
|
-
|
|
87
|
-
TOOLS_JSON=$(oat tools list --json --scope all 2>/dev/null || echo '{"tools":[]}')
|
|
88
|
-
```
|
|
78
|
+
### Step 1: Sweep
|
|
89
79
|
|
|
90
|
-
|
|
80
|
+
Run the seven commands below and the four file checks. Every command call is projected to the fields named here with `node -e` (or `jq` when present); never print or read a raw payload — `oat doctor --json` is about 410 KB and `oat tools list --json` about 626 KB on a mid-sized repository, and neither fits a working context.
|
|
91
81
|
|
|
92
|
-
|
|
82
|
+
A command has **failed** only when its stdout does not parse as JSON, or the process is killed or times out. A non-zero exit with parseable JSON is a findings result: `oat doctor` and `oat pjm doctor` both exit 1 whenever any check warns, which is the normal state of a healthy repository. A failed command becomes one `warning` finding for its area whose summary names the command and quotes the first line of stderr; the sweep continues.
|
|
93
83
|
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
84
|
+
| # | Command | Projection | Feeds |
|
|
85
|
+
| --- | --------------------------------------- | ---------------------------------------------------------------------------------------- | -------------------------------------------- |
|
|
86
|
+
| 1 | `oat doctor --json --scope all` | `.checks[] \| {name, status, message}` — drop `packEvidence` and `providerRefreshAdvice` | config, tools, docs (by the check map below) |
|
|
87
|
+
| 2 | `oat pjm doctor --json` | `.adoption` and `.checks[] \| {name, status, message}` | PJM |
|
|
88
|
+
| 3 | `oat config dump --json` | `.shared`, `.local`, `.user` (the three surface objects) | config, docs |
|
|
89
|
+
| 4 | `oat config describe --json` | `.entries[] \| {key, group, file, scope, defaultValue, owningCommand, deprecated}` | config |
|
|
90
|
+
| 5 | `oat instructions validate --json` | `.summary` and `.entries[] \| select(.status != "ok") \| {agentsPath, status, detail}` | agent instructions |
|
|
91
|
+
| 6 | `oat tools list --json --scope all` | `.tools[] \| {name, pack, scope, status}` | tools |
|
|
92
|
+
| 7 | `oat tools outdated --json --scope all` | `.tools[] \| {name, version, bundledVersion, scope}` | tools |
|
|
97
93
|
|
|
98
|
-
|
|
94
|
+
File checks (read-only):
|
|
99
95
|
|
|
100
|
-
|
|
96
|
+
- **Root instructions headings.** Read `AGENTS.md` at the repository root (and `CLAUDE.md` when it is a file rather than a pointer). Note which of these headings are present: `## Tool Packs` (written by `oat tools install --project-guidance`), `### Project Management` and `### Decision Records` (written by `oat pjm init`), `## Documentation` (written by `oat docs init` / `oat-docs-bootstrap`).
|
|
97
|
+
- **Sync config surfaces.** Read `.oat/sync/config.json` and `~/.oat/sync/config.json` when present, keys only. `oat config dump` does not carry the `Sync/Provider` and `User Sync` groups, so this is their only set-state source.
|
|
98
|
+
- **Docs surface.** Detect an existing docs surface the way `oat-docs-bootstrap`'s preflight does: `documentation.root` in the dump; a docs app under `apps/docs` or `apps/*-docs`, or any `apps/*` with a `source.config.*`, a `next.config.*` beside a `docs/` directory, or `mkdocs.yml`; a root `mkdocs.yml`; a root `docs/` or `documentation/` directory.
|
|
99
|
+
- **`documentation.root` on disk.** When the dump sets it, check that the directory exists.
|
|
101
100
|
|
|
102
|
-
|
|
103
|
-
CONFIG_JSON=$(oat config list --json 2>/dev/null || echo '{"configs":[]}')
|
|
104
|
-
```
|
|
101
|
+
#### Finding rules
|
|
105
102
|
|
|
106
|
-
|
|
103
|
+
Each finding is one line with an **area**, a **severity**, a one-line **summary**, its **evidence** (a check name, a key and its surface, or a file path), and a **fix path** (an exact command, an owning skill, or none). Severities:
|
|
107
104
|
|
|
108
|
-
-
|
|
109
|
-
-
|
|
110
|
-
-
|
|
111
|
-
- **Synced project health:** Report `project:synced_tracked_artifacts`,
|
|
112
|
-
`project:synced_gitignore`, `project:synced_projects`,
|
|
113
|
-
`project:synced_editor_hint`, and per-project
|
|
114
|
-
`project:synced_<slug>_<kind>` checks without treating an absent checkout as
|
|
115
|
-
proof that no synced project exists.
|
|
105
|
+
- `error` — a lifecycle skill would fail or write to the wrong place.
|
|
106
|
+
- `warning` — drift the person should fix soon.
|
|
107
|
+
- `info` — a teaching opportunity or a fact with no fix path.
|
|
116
108
|
|
|
117
|
-
|
|
109
|
+
**Config**
|
|
118
110
|
|
|
119
|
-
|
|
111
|
+
- `activeProject` or `lastPausedProject` set to a path that does not exist → `error`; fix `oat config set activeProject ''` / `oat config set lastPausedProject ''` (the CLI refuses `unset` for these two lifecycle keys). `activeIdea` set to a missing path → `error`; fix `oat config unset activeIdea --local` (or `--user` for a user-level value).
|
|
112
|
+
- A set key whose `describe` entry carries `deprecated` → `warning`; summary names the key and its `deprecated.supersededBy`; when `deprecated.legacyValues` is present the finding fires only when the set value is one of those values; fix = the entry's `owningCommand` for the successor.
|
|
113
|
+
- A key set on a surface that is not one of the surfaces its `describe` entry's `file` names → `warning`; fix `oat config unset <key> --<surface>` then `oat config set <key> <value> --<right surface>`.
|
|
114
|
+
- The `dispatch-matrix` recommendation is reported only through the `project:dispatch_matrix` check (command 1, config area); there is no separate rule for it, so one gap is one finding. Its fix is `oat config adopt dispatch-matrix --shared`, and the config dive explains it from `workflow.dispatchCeiling.recommendationVersion` in the dump.
|
|
115
|
+
- A documented key group with nothing set on any surface → one `info` per group, expanded only in the dive.
|
|
116
|
+
- Synced project health: `project:synced_tracked_artifacts`, `project:synced_gitignore`, `project:synced_projects`, `project:synced_editor_hint`, and per-project `project:synced_<slug>_<kind>` checks from command 1 → severity from status, summary from the message; report them without treating an absent checkout as proof that no synced project exists (an absent checkout is materialized by `oat project pull`, which the check's message names).
|
|
120
117
|
|
|
121
|
-
|
|
118
|
+
**PJM**
|
|
122
119
|
|
|
123
|
-
|
|
120
|
+
- `adoption.state` `none` → `error` (PJM not adopted; fix `oat pjm init`); `partial-initialization` → `error` (declared but canonical files missing; fix `oat pjm init`, which completes the layout); `inferred-legacy` → `warning` (a pre-adoption layout the CLI recognizes; fix `oat pjm init` to declare it); `declared` is healthy.
|
|
121
|
+
- Any other `pjm:*` check with status `fail` → `error`; `warn` → `warning`; the fix path is the one the check's message implies (see the PJM dive for the map). `pjm:adoption` is excluded here: the `adoption.state` rule above owns adoption, so it is one finding with one severity.
|
|
122
|
+
- A `pjm:*` check name the PJM dive does not know → `info` with its message.
|
|
124
123
|
|
|
125
|
-
|
|
126
|
-
Your OAT setup has {N} warning(s).
|
|
124
|
+
**Agent instructions**
|
|
127
125
|
|
|
128
|
-
|
|
129
|
-
|
|
126
|
+
- An entry with status `missing` or `content_mismatch` (the entry literal; the summary counter is spelled `contentMismatch`) → `error`; fix `oat instructions sync` (`--force` for a content mismatch the person confirms is stale).
|
|
127
|
+
- An entry with status `stray` → `warning`; fix `oat instructions sync` after the person decides whether the stray file should exist.
|
|
128
|
+
- A CLI-written heading absent while its capability is present → `warning`: no `## Tool Packs` while any pack is installed at project scope (fix `oat tools install <pack> --project-guidance`); no `### Project Management` or `### Decision Records` while PJM adoption is `declared` (fix `oat pjm init`, which rewrites the guidance); no `## Documentation` while a docs surface exists (fix: `oat-docs-bootstrap`).
|
|
129
|
+
- Content quality beyond presence is not judged here; route to `oat-agent-instructions-analyze`.
|
|
130
130
|
|
|
131
|
-
|
|
132
|
-
Run: oat config set activeProject ""
|
|
131
|
+
**Docs**
|
|
133
132
|
|
|
134
|
-
|
|
135
|
-
|
|
133
|
+
- A docs surface detected with no `documentation` config → `warning`; fix: run `oat-docs-bootstrap`, which detects the existing surface and offers the audit.
|
|
134
|
+
- `documentation.root` set but absent on disk → `error`; fix `oat config unset documentation.root --shared` or `oat-docs-bootstrap`.
|
|
135
|
+
- No docs surface and no `documentation` config (an uninitialized or docs-less repository) → `info`; fix: run `oat-docs-bootstrap` to set one up. This is what makes an empty repository offer its docs bootstrap alongside the other areas.
|
|
136
136
|
|
|
137
|
-
|
|
138
|
-
Run: oat init tools
|
|
139
|
-
```
|
|
137
|
+
**Tools**
|
|
140
138
|
|
|
141
|
-
|
|
139
|
+
- An outdated tool → `warning`; fix `oat tools update <name> --scope <scope>` (or `oat tools update --scope <scope>` for all).
|
|
140
|
+
- The same pack installed at both scopes → `warning`; fix `oat tools migrate --pack <pack> --from project --to user` (or the reverse).
|
|
141
|
+
- A pack enabled under `tools.*` in the dump but with no installed skill → `warning`; fix `oat tools install <pack>`.
|
|
142
142
|
|
|
143
|
-
|
|
144
|
-
Your OAT setup looks good. No issues found.
|
|
145
|
-
```
|
|
146
|
-
|
|
147
|
-
Stop here for check mode.
|
|
148
|
-
|
|
149
|
-
### Step 5: Summary Mode — Discover Available Packs
|
|
143
|
+
**`oat doctor` checks** (command 1). Any check with status `fail` or `warn` becomes a finding, severity from status, evidence = the check name, summary = its message, by this map (a semantic map, not a prefix rule):
|
|
150
144
|
|
|
151
|
-
|
|
145
|
+
| Check names | Area |
|
|
146
|
+
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- |
|
|
147
|
+
| `project:dispatch_matrix`, `project:synced_*` | config |
|
|
148
|
+
| `project:manifest`, `project:providers`, `project:symlink_support`, `project:canonical_directories`, `project:codex_*`, `project:skill_versions`, `project:cursor_materialized_models`, and their `user:` twins; `project:pack_state`, `user:pack_state`, `packs:*` | tools |
|
|
149
|
+
| `project:stale_invocations` | docs (it cites doc and script file:line) |
|
|
150
|
+
| `pjm:*` | suppressed — `oat pjm doctor` reports the same checks and the PJM area owns them |
|
|
151
|
+
| any other name | `info` in tools, with the message |
|
|
152
152
|
|
|
153
|
-
|
|
153
|
+
### Step 2: Report
|
|
154
154
|
|
|
155
|
-
|
|
156
|
-
it, and lists every skill that pack ships.
|
|
155
|
+
Print the findings grouped by area in this order: config, PJM, agent instructions, docs, tools. Within an area, errors first, then warnings. Print `info` findings as one count per area; they expand only in a dive. An area with no findings prints `(ok)`.
|
|
157
156
|
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
157
|
+
```text
|
|
158
|
+
OAT ▸ DOCTOR
|
|
159
|
+
Config (1 error, 1 warning, 4 info)
|
|
160
|
+
✖ activeProject points at .oat/projects/shared/x, which does not exist [config.local]
|
|
161
|
+
→ oat config set activeProject ''
|
|
162
|
+
⚠ workflow.postImplementSequence uses the legacy value "docs-pr" [shared]
|
|
163
|
+
→ prefer the structured form: oat config describe workflow.postImplementSequence
|
|
164
|
+
PJM (ok)
|
|
165
|
+
Agent instructions (1 warning)
|
|
166
|
+
⚠ AGENTS.md has no "### Project Management" section although PJM is adopted [AGENTS.md]
|
|
167
|
+
→ oat pjm init (or: run oat-agent-instructions-analyze)
|
|
168
|
+
Docs (1 warning)
|
|
169
|
+
⚠ docs/ exists but .oat/config.json has no documentation section [docs/]
|
|
170
|
+
→ run oat-docs-bootstrap; it detects the surface and offers the audit
|
|
171
|
+
Tools (ok)
|
|
172
|
+
```
|
|
163
173
|
|
|
164
|
-
|
|
174
|
+
When every area is `(ok)` and no `info` exists, print `Your OAT setup looks good. No issues found.` and stop.
|
|
165
175
|
|
|
166
|
-
`
|
|
176
|
+
Under the report-only rule, stop here. Otherwise ask, with `AskUserQuestion`, which area to dive into: offer each area that has findings (errors, warnings, or info), plus `all` and `done`. Repeat after each dive until the person picks `done`.
|
|
167
177
|
|
|
168
|
-
|
|
169
|
-
- oat-agent-instructions-apply, oat-docs-analyze
|
|
170
|
-
- oat-docs-apply, oat-docs-authoring, oat-docs-bootstrap
|
|
178
|
+
### Step 3: Dives
|
|
171
179
|
|
|
172
|
-
|
|
180
|
+
Every dive has the same shape:
|
|
173
181
|
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
- oat-project-lite, oat-project-new, oat-project-next, oat-project-open
|
|
179
|
-
- oat-project-plan, oat-project-plan-writing, oat-project-pr-final
|
|
180
|
-
- oat-project-pr-progress, oat-project-progress, oat-project-promote-spec-driven
|
|
181
|
-
- oat-project-quick-start, oat-project-reconcile, oat-project-retro
|
|
182
|
-
- oat-project-retro-file, oat-project-revise, oat-project-review-provide
|
|
183
|
-
- oat-project-review-provide-remote, oat-project-review-receive
|
|
184
|
-
- oat-project-review-receive-remote, oat-project-spec, oat-project-split
|
|
185
|
-
- oat-project-summary, oat-repo-knowledge-index, oat-worktree-bootstrap
|
|
186
|
-
- oat-worktree-bootstrap-auto, oat-wave-execute, oat-wave-program
|
|
187
|
-
- oat-wrap-up
|
|
182
|
+
1. **Restate** the area's findings with their evidence, expanding the `info` lines.
|
|
183
|
+
2. **Teach** from the bundled docs and, for config, from the `describe` entries: name the page and section, read it at run time, and explain in two or three sentences what the thing does, when the person would want it, and which surface owns it. Quote nothing from memory. When `~/.oat/docs/` is absent, say so and offer `oat tools install core`; do not invent an explanation.
|
|
184
|
+
3. **Answer** the person's questions from the same sources.
|
|
185
|
+
4. **Offer** each fix as the exact command (the `describe` entry's `owningCommand` for config keys) or the owning skill, then stop. If the person approves a listed carve-out command, run that one command and report the result; otherwise the person runs it.
|
|
188
186
|
|
|
189
|
-
`
|
|
187
|
+
Docs citations below name a page under `~/.oat/docs/` (the same tree as `apps/oat-docs/docs/`) and a `##` heading; a citation must be a prefix of the real heading.
|
|
190
188
|
|
|
191
|
-
|
|
192
|
-
- subagent-orchestration, oat-repo-improve, oat-repo-maintainability-review
|
|
193
|
-
- oat-review-provide, oat-review-provide-remote, oat-review-receive
|
|
194
|
-
- oat-review-receive-remote
|
|
189
|
+
#### Config dive
|
|
195
190
|
|
|
196
|
-
`
|
|
191
|
+
Walk every distinct `group` value in the `describe` output — nine today, including `PJM Remote Shared Policy`, `Explainer Defaults (local > shared)`, and `User Sync (~/.oat/sync/config.json)`; never a hard-coded list. For each group, say what is set (from the dump or the sync files), what is deprecated, and what is unset; for an unset group, teach it from the entry descriptions and its docs section:
|
|
197
192
|
|
|
198
|
-
|
|
199
|
-
|
|
193
|
+
| Group | Docs section |
|
|
194
|
+
| ------------------------------------------------------------------ | ------------------------------------------------------------------------------- |
|
|
195
|
+
| The five surfaces themselves (which file owns what) | `cli-utilities/configuration.md` § The five config surfaces |
|
|
196
|
+
| `Shared Repo (.oat/config.json)` | `cli-utilities/configuration.md` § Shared repo config you will touch most often |
|
|
197
|
+
| `Repo Local (.oat/config.local.json)`, `User (~/.oat/config.json)` | `cli-utilities/configuration.md` § Repo-local and user state |
|
|
198
|
+
| `Workflow Preferences` (dispatch policy keys) | `cli-utilities/configuration.md` § Dispatch policy resolution |
|
|
199
|
+
| `Workflow Preferences` (everything else) | `cli-utilities/configuration.md` § Workflow preferences |
|
|
200
|
+
| `Workflow Preferences` (gate keys) | `cli-utilities/workflow-gates.md` § Gate config |
|
|
201
|
+
| `Sync/Provider`, `User Sync` | `cli-utilities/configuration.md` § Provider sync config is different |
|
|
202
|
+
| `PJM Remote Shared Policy` | `cli-utilities/remote-project-management.md` |
|
|
203
|
+
| the `pjm.*` keys under Shared Repo | `cli-utilities/backlog-lifecycle.md` § Adoption comes first |
|
|
204
|
+
| `Explainer Defaults` | the entry descriptions (`oat config describe explainers.defaults.style`) |
|
|
200
205
|
|
|
201
|
-
`
|
|
206
|
+
A deprecated key is explained through its `deprecated.supersededBy` and the successor's `owningCommand`.
|
|
202
207
|
|
|
203
|
-
|
|
204
|
-
- recon, skeptic, synthesize
|
|
208
|
+
#### PJM dive
|
|
205
209
|
|
|
206
|
-
`
|
|
210
|
+
State the adoption state (`declared`, `inferred-legacy`, `partial-initialization`, or `none`) and what it means (`cli-utilities/backlog-lifecycle.md` § Adoption comes first). Then each non-passing check and its fix:
|
|
207
211
|
|
|
208
|
-
|
|
212
|
+
| Check | Fix path |
|
|
213
|
+
| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
214
|
+
| `pjm:adoption` | not reported separately: the `adoption.state` rule owns it; fix `oat pjm init` |
|
|
215
|
+
| `pjm:canonical_files`, `pjm:template_frontmatter`, `pjm:top_level_layout` | `oat pjm init` re-creates canonical files; unknown top-level folders are the person's to move (`cli-utilities/backlog-lifecycle.md` § Catching lifecycle drift) |
|
|
216
|
+
| `pjm:legacy_monoliths`, `pjm:loose_reference_files`, `pjm:second_roadmap` | structural drift: `cli-utilities/backlog-lifecycle.md` § Catching lifecycle drift and the migration guidance it links; `oat-pjm-update-repo-reference` for the reference records |
|
|
217
|
+
| `pjm:backlog_terminal_in_items`, `pjm:backlog_completed_unarchived` | `oat backlog archive <id>` for each named item, then `oat backlog regenerate-index` |
|
|
218
|
+
| `pjm:backlog_invalid_status`, `pjm:backlog_archived_open`, `pjm:backlog_duplicate_id` | edit the named item's frontmatter (the person), then `oat backlog regenerate-index` |
|
|
219
|
+
| `pjm:remote_schema`, `pjm:remote_binding_ids`, `pjm:remote_metadata_state`, `pjm:remote_storage_content`, `pjm:remote_policy`, `pjm:remote_concurrent_intents`, `pjm:remote_operations`, `pjm:remote_retention`, `pjm:remote_host_capability` | emitted only when a remote binding is adopted: `oat-pjm-remote` (reconcile or refresh) and `cli-utilities/remote-project-management.md` |
|
|
220
|
+
| any other `pjm:*` name | `info` with the check's message; no fix path is invented |
|
|
209
221
|
|
|
210
|
-
|
|
222
|
+
#### Agent instructions dive
|
|
211
223
|
|
|
212
|
-
-
|
|
213
|
-
- **Partially installed:** some but not all pack skills found
|
|
214
|
-
- **Not installed:** no pack skills found
|
|
215
|
-
- **Missing skills:** specific skills in the manifest but not in installed list (highlights newly-added skills after CLI upgrades)
|
|
224
|
+
Explain the sync strategy in use (`oat instructions validate --json` `.summary`) and each non-`ok` entry with its path. Explain each missing heading: what the CLI writes there and why an agent needs it (`cli-utilities/bootstrap.md` for `## Tool Packs`; `cli-utilities/backlog-lifecycle.md` § Adoption comes first for the PJM sections). Offer `oat instructions sync`, `oat tools install <pack> --project-guidance`, or `oat pjm init` as the finding names; for wording and coverage beyond presence, hand off to `oat-agent-instructions-analyze` then `oat-agent-instructions-apply`.
|
|
216
225
|
|
|
217
|
-
|
|
226
|
+
#### Docs dive
|
|
218
227
|
|
|
219
|
-
|
|
228
|
+
Say what surface was detected and what `documentation.*` says. This dive owns no docs logic: hand off to `oat-docs-bootstrap`, which detects the existing surface and offers the audit (`oat-docs-analyze` then `oat-docs-apply`), or `oat config unset documentation.root --shared` when the root is gone.
|
|
220
229
|
|
|
221
|
-
|
|
222
|
-
SYNC_STATUS=$(oat sync --dry-run --json --scope project 2>/dev/null || echo '{}')
|
|
223
|
-
```
|
|
230
|
+
#### Tools dive
|
|
224
231
|
|
|
225
|
-
|
|
232
|
+
List outdated tools with installed and bundled versions and scope, packs at both scopes, and packs enabled but not installed, each with its command. Explain scopes from `cli-utilities/tool-packs.md`.
|
|
226
233
|
|
|
227
|
-
### Step
|
|
234
|
+
### Step 4: Summary Mode (`--summary`)
|
|
228
235
|
|
|
229
|
-
|
|
236
|
+
Keep the dashboard. Gather `oat tools list --json --scope all` (projected to `{name, pack, scope, status}`) and `oat tools outdated --json --scope all`, group the tools by `pack`, and print:
|
|
230
237
|
|
|
231
|
-
```
|
|
238
|
+
```text
|
|
232
239
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
233
240
|
OAT ▸ DOCTOR SUMMARY
|
|
234
241
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
@@ -237,75 +244,28 @@ OAT ▸ DOCTOR SUMMARY
|
|
|
237
244
|
|
|
238
245
|
| Pack | Scope | Skills | Status |
|
|
239
246
|
| --------- | ------- | ------ | -------- |
|
|
240
|
-
| core | user | 2
|
|
241
|
-
| workflows | project | 40
|
|
242
|
-
| ideas | user | 4/4 | current |
|
|
243
|
-
| utility | project | 10/10 | outdated |
|
|
247
|
+
| core | user | 2 | current |
|
|
248
|
+
| workflows | project | 40 | outdated |
|
|
244
249
|
|
|
245
250
|
## Outdated Skills
|
|
246
251
|
|
|
247
|
-
| Skill
|
|
248
|
-
|
|
|
249
|
-
| oat-project-implement
|
|
250
|
-
|
|
251
|
-
## Available But Not Installed
|
|
252
|
-
|
|
253
|
-
- **docs** pack: authoring-docs, oat-agent-instructions-analyze, oat-agent-instructions-apply, oat-docs-analyze, oat-docs-apply, oat-docs-authoring, oat-docs-bootstrap (7 skills available)
|
|
254
|
-
→ Run: oat tools install docs --scope {scope}
|
|
255
|
-
- **project-management** pack: oat-pjm-add-backlog-item, oat-pjm-decision, oat-pjm-remote, oat-pjm-update-repo-reference, oat-pjm-review-backlog (5 skills available)
|
|
256
|
-
→ Run: oat tools install project-management --scope {scope}
|
|
257
|
-
- **research** pack: analyze, compare, deep-research, recon, skeptic, synthesize (6 skills available)
|
|
258
|
-
→ Run: oat tools install research --scope {scope}
|
|
259
|
-
|
|
260
|
-
## Configuration
|
|
261
|
-
|
|
262
|
-
| Key | Value | Source |
|
|
263
|
-
| -------------------- | ------------------------- | ------- |
|
|
264
|
-
| activeProject | .oat/projects/shared/foo | local |
|
|
265
|
-
| activeIdea | (not set) | - |
|
|
266
|
-
| projects.root | .oat/projects/shared | default |
|
|
267
|
-
| projects.defaultScope | synced | default |
|
|
268
|
-
| documentation.root | (not set) | - |
|
|
269
|
-
| worktrees.root | (not set) | - |
|
|
270
|
-
|
|
271
|
-
### Config Key Explanations
|
|
272
|
-
|
|
273
|
-
Read config key descriptions from `~/.oat/docs/reference/file-locations.md` and `~/.oat/docs/guide/cli-reference.md`. If docs are not available, use these fallback descriptions:
|
|
274
|
-
|
|
275
|
-
- **activeProject:** Path to the currently active OAT project. Set automatically by project skills.
|
|
276
|
-
- **activeIdea:** Path to the currently active idea. Set by oat-idea-new.
|
|
277
|
-
- **lastPausedProject:** Path to the last paused project for quick resume.
|
|
278
|
-
- **projects.root:** Base directory for all OAT projects. Default: `.oat/projects/shared`.
|
|
279
|
-
- **projects.defaultScope:** Scope used by project creation when `--scope` is omitted. Default: `synced`; supported values are `shared`, `local`, and `synced`.
|
|
280
|
-
- **documentation.root:** Root directory for documentation. Used by docs skills.
|
|
281
|
-
- **documentation.config:** Path to docs config file (e.g., mkdocs.yml).
|
|
282
|
-
- **documentation.tooling:** Docs tooling in use (e.g., mkdocs, fumadocs).
|
|
283
|
-
- **documentation.requireForProjectCompletion:** Whether docs update is required before project completion.
|
|
284
|
-
- **workflow.autoReviewAtHillCheckpoints:** When true, completing a HiLL checkpoint auto-triggers the lifecycle review. Default unset. This does not control Tier 1 per-phase `oat-reviewer` gates. Can be overridden per-project via `oat_auto_review_at_hill_checkpoints` in plan.md frontmatter. Legacy `autoReviewAtCheckpoints` and `oat_auto_review_at_checkpoints` are still read as fallbacks.
|
|
285
|
-
- **worktrees.root:** Base directory for git worktrees. Used by worktree-bootstrap skills.
|
|
286
|
-
|
|
287
|
-
## Sync Status
|
|
288
|
-
|
|
289
|
-
{In sync / N pending changes across M providers}
|
|
290
|
-
|
|
291
|
-
## Warnings
|
|
292
|
-
|
|
293
|
-
{Same warnings as check mode, if any}
|
|
252
|
+
| Skill | Installed | Available | Scope |
|
|
253
|
+
| --------------------- | --------- | --------- | ------- |
|
|
254
|
+
| oat-project-implement | 1.1.0 | 1.2.0 | project |
|
|
294
255
|
|
|
295
256
|
## Recommendations
|
|
296
257
|
|
|
297
|
-
- Run `oat tools update` to update outdated skills.
|
|
298
|
-
- Run `oat
|
|
299
|
-
- Run `oat sync --scope project` to sync provider views.
|
|
258
|
+
- Run `oat tools update --scope {scope}` to update outdated skills.
|
|
259
|
+
- Run `oat-doctor` (no arguments) for the config, PJM, instructions, and docs sweep.
|
|
300
260
|
```
|
|
301
261
|
|
|
302
|
-
|
|
262
|
+
The pack list comes from the `pack` field of `oat tools list`; the skill carries no pack manifest. Omit empty sections.
|
|
303
263
|
|
|
304
264
|
## Success Criteria
|
|
305
265
|
|
|
306
|
-
- ✅
|
|
307
|
-
- ✅
|
|
308
|
-
- ✅
|
|
309
|
-
- ✅
|
|
310
|
-
- ✅
|
|
311
|
-
- ✅ No
|
|
266
|
+
- ✅ The sweep runs all seven commands and four file checks, projected, and never aborts on a non-zero exit with parseable JSON.
|
|
267
|
+
- ✅ The report groups findings by area and severity, folds `info` into counts, and ends with the area prompt (or ends at the report under the report-only rule).
|
|
268
|
+
- ✅ Every dive explains from the bundled docs and `describe` entries, names a fix path per finding, and applies nothing except one approved carve-out command.
|
|
269
|
+
- ✅ Every `pjm:*` check the CLI defines has a fix path or the generic `info` rule.
|
|
270
|
+
- ✅ Summary mode still prints the dashboard from live `oat tools list` output.
|
|
271
|
+
- ✅ No file is modified by the sweep, the report, or a dive.
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { createHash } from 'node:crypto';
|
|
2
|
+
import { realpathSync } from 'node:fs';
|
|
2
3
|
import { lstat, readFile, realpath } from 'node:fs/promises';
|
|
3
4
|
import {
|
|
4
5
|
basename,
|
|
@@ -9,7 +10,7 @@ import {
|
|
|
9
10
|
resolve,
|
|
10
11
|
sep,
|
|
11
12
|
} from 'node:path';
|
|
12
|
-
import {
|
|
13
|
+
import { fileURLToPath } from 'node:url';
|
|
13
14
|
|
|
14
15
|
import { validateContract } from '../../explainer-kit/scripts/lib/contracts.mjs';
|
|
15
16
|
import { isFlowFailureStage } from '../../explainer-kit/scripts/lib/failure.mjs';
|
|
@@ -324,10 +325,29 @@ function recapOutcomeError(message) {
|
|
|
324
325
|
return error;
|
|
325
326
|
}
|
|
326
327
|
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
328
|
+
/**
|
|
329
|
+
* Direct invocation, compared as canonical paths on both sides. Comparing a raw
|
|
330
|
+
* `process.argv[1]` against `import.meta.url` makes this script a silent no-op
|
|
331
|
+
* that exits 0 whenever the skill is reached through a symlinked install root,
|
|
332
|
+
* and canonicalizing only one side has the same effect under
|
|
333
|
+
* `--preserve-symlinks-main`, which keeps the link in `import.meta.url`.
|
|
334
|
+
* A path that cannot be canonicalized is not a module Node loaded as the entry
|
|
335
|
+
* point, so a thrown `realpathSync` means "not invoked directly" and returns
|
|
336
|
+
* `false`; it never masks a direct run.
|
|
337
|
+
*/
|
|
338
|
+
function isDirectInvocation(invokedPath) {
|
|
339
|
+
if (!invokedPath) return false;
|
|
340
|
+
try {
|
|
341
|
+
return (
|
|
342
|
+
realpathSync(fileURLToPath(import.meta.url)) ===
|
|
343
|
+
realpathSync(resolve(invokedPath))
|
|
344
|
+
);
|
|
345
|
+
} catch {
|
|
346
|
+
return false;
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
if (isDirectInvocation(process.argv[1])) {
|
|
331
351
|
main(process.argv.slice(2))
|
|
332
352
|
.then((result) => {
|
|
333
353
|
process.stdout.write(`${JSON.stringify(result)}\n`);
|
|
@@ -242,7 +242,7 @@ remains immutable baseline evidence for the original p01-t01 verification.
|
|
|
242
242
|
| Skill root / file | Stable prompt-site mappings |
|
|
243
243
|
| -------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
244
244
|
| `oat-project-new/SKILL.md` | `f7ca8635452f -> NG`; `dceff5cc04b5 -> NG`; `1af4957a1af2 -> NEW-01`; `45b699c1c0b5 -> NEW-01`; `ba6d120791c1 -> NEW-01`; `33ce6a6c30aa -> NEW-02`; `0f5a90f34f63 -> NG`; `d0ea3a91261d -> NG` |
|
|
245
|
-
| `oat-project-quick-start/SKILL.md` | `f7ca8635452f -> NG`; `c493a38b89f2 -> QS-04`; `655d61df0a8f -> NG`; `dceff5cc04b5 -> NG`; `1af4957a1af2 -> QS-01`; `141d0a20099b -> QS-01`; `45b699c1c0b5 -> QS-01`; `ba6d120791c1 -> QS-01`; `1a5ee85164ff -> QS-02`; `af8e2bea90d7 -> QS-04`; `a823cf5aeaec -> QS-04`; `7753dc323083 -> QS-04`; `1f557da5e03c -> QS-04`; `1564ca151111 -> NG`; `c24787334ade -> QS-05`; `021ba03c82c5 -> QS-05`; `5d1a9d1b661d -> QS-05`; `318f304ee3b3 -> QS-05`; `cc700d4d2cab -> QS-05`; `7ef6aa642400 -> QS-05`; `4d389b234556 -> QS-05`; `84c506dac106 -> QS-05`; `caf7622a2e02 -> QS-05`; `8917190b2e98 -> QS-06`; `5a028d846aa5 -> QS-06`; `b1d92192b8ca -> QS-06`; `bdbb18955cc4 -> QS-06`; `6d159a2e8f8e -> QS-06`; `61a9849f4dfc -> QS-06`; `31cb92052ea6 -> QS-06`; `
|
|
245
|
+
| `oat-project-quick-start/SKILL.md` | `f7ca8635452f -> NG`; `c493a38b89f2 -> QS-04`; `655d61df0a8f -> NG`; `dceff5cc04b5 -> NG`; `1af4957a1af2 -> QS-01`; `141d0a20099b -> QS-01`; `45b699c1c0b5 -> QS-01`; `ba6d120791c1 -> QS-01`; `1a5ee85164ff -> QS-02`; `af8e2bea90d7 -> QS-04`; `a823cf5aeaec -> QS-04`; `7753dc323083 -> QS-04`; `1f557da5e03c -> QS-04`; `1564ca151111 -> NG`; `c24787334ade -> QS-05`; `021ba03c82c5 -> QS-05`; `5d1a9d1b661d -> QS-05`; `318f304ee3b3 -> QS-05`; `cc700d4d2cab -> QS-05`; `7ef6aa642400 -> QS-05`; `4d389b234556 -> QS-05`; `84c506dac106 -> QS-05`; `caf7622a2e02 -> QS-05`; `8917190b2e98 -> QS-06`; `5a028d846aa5 -> QS-06`; `b1d92192b8ca -> QS-06`; `bdbb18955cc4 -> QS-06`; `6d159a2e8f8e -> QS-06`; `61a9849f4dfc -> QS-06`; `31cb92052ea6 -> QS-06`; `ed1ed94c6d32 -> QS-07`; `1b4d962822b2 -> QS-07`; `1c37d3834054 -> QS-07`; `2cb069a2590b -> NG`; `fd0aff270853 -> NG`; `a114b27f8b4b -> NG`; `77dc8e1b728a -> QS-08`; `d3e3fba65b96 -> QS-09`; `71c2a0ba99bf -> QS-09`; `f47f9f9c0d03 -> QS-09`; `224a4b43fb29 -> QS-10`; `744f130d4116 -> QS-12`; `bee4c4aa34c6 -> NG`; `3f0b53056edd -> QS-12`; `857e91aa3095 -> NG`; `b4af2220eb91 -> QS-12` |
|
|
246
246
|
| `oat-project-lite/SKILL.md` | `f7ca8635452f -> NG`; `ccb52f3fe44f -> NG`; `d09c1d63de1e -> NG`; `74b3049abec0 -> NG`; `973d0ae8a3dc -> NG`; `2d41ff5e5312 -> NG`; `5d4905b0be0c -> NG`; `f83829edf0a9 -> LITE-03`; `1515a1f4cded -> LITE-03`; `d0ff7aed2105 -> NG`; `22a862d34014 -> NG`; `3f5d2168fae3 -> LITE-05`; `c42b996db4f1 -> LITE-05`; `b2f7560edf76 -> LITE-05`; `92d354802e4c -> LITE-05`; `ccd2225b1a37 -> LITE-05`; `89266e7d2643 -> NG`; `b018d0fc3536 -> LITE-09`; `e2d7d177f04e -> LITE-09`; `60db88220f98 -> NG`; `43ae7872602f -> NG` |
|
|
247
247
|
| `oat-project-lite/SKILL.md` | `b8a40746b272 -> NG`; `090e205f5959 -> LITE-10` |
|
|
248
248
|
| `oat-project-quick-start/references/docs/autonomy-contract.md` | `* -> NG` |
|