@open-agent-toolkit/cli 0.3.21 → 0.3.23
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/docs-tooling/add-docs-to-a-repo.md +3 -9
- package/assets/docs/reference/cli-reference.md +8 -3
- package/assets/docs/reference/configuration.md +3 -0
- package/assets/docs/reference/oat-directory-structure.md +1 -1
- package/assets/docs/reference/project-artifacts.md +141 -2
- package/assets/docs/reference/project-state-machine.md +2 -2
- package/assets/docs/workflows/advanced/autonomy.md +29 -12
- package/assets/docs/workflows/advanced/cursor-cloud.md +20 -6
- package/assets/docs/workflows/advanced/workflow-gates.md +9 -0
- package/assets/docs/workflows/projects/closeout/closeout-skills.md +24 -5
- package/assets/docs/workflows/projects/closeout/retro.md +6 -2
- package/assets/docs/workflows/projects/execution/implementation-execution.md +18 -4
- package/assets/docs/workflows/projects/execution/index.md +1 -1
- package/assets/docs/workflows/projects/execution/picking-up-projects.md +3 -2
- package/assets/docs/workflows/projects/execution/project-log.md +100 -11
- package/assets/docs/workflows/projects/lifecycle.md +3 -3
- package/assets/docs/workflows/projects/reviews/index.md +18 -0
- package/assets/public-package-versions.json +4 -4
- package/assets/skills/oat-cursor-cloud-projects/SKILL.md +12 -8
- package/assets/skills/oat-cursor-cloud-projects/references/cursor-cloud-mechanics.md +63 -2
- package/assets/skills/oat-docs/SKILL.md +14 -28
- package/assets/skills/oat-docs-analyze/SKILL.md +4 -2
- package/assets/skills/oat-docs-analyze/references/legacy-scaffold-checks.md +16 -0
- package/assets/skills/oat-docs-apply/SKILL.md +2 -2
- package/assets/skills/oat-docs-authoring/SKILL.md +2 -2
- package/assets/skills/oat-docs-authoring/references/lifecycle-boundaries.md +1 -2
- package/assets/skills/oat-docs-authoring/references/mkdocs-to-oat-fumadocs-refactor-guide.md +73 -0
- package/assets/skills/oat-docs-bootstrap/SKILL.md +44 -310
- package/assets/skills/oat-project-autonomous/SKILL.md +88 -26
- package/assets/skills/oat-project-autonomous/references/gate-inventory.md +1 -1
- package/assets/skills/oat-project-brief/SKILL.md +1 -1
- package/assets/skills/oat-project-brief/references/brief-contract.md +33 -27
- package/assets/skills/oat-project-brief/references/docs/autonomy-contract.md +1 -1
- package/assets/skills/oat-project-complete/SKILL.md +142 -25
- package/assets/skills/oat-project-complete-auto/SKILL.md +4 -4
- package/assets/skills/oat-project-dispatch-subagents/SKILL.md +10 -5
- package/assets/skills/oat-project-document/SKILL.md +1 -1
- package/assets/skills/oat-project-document/references/docs/autonomy-contract.md +1 -1
- package/assets/skills/oat-project-goal/SKILL.md +63 -15
- package/assets/skills/oat-project-goal/references/docs/autonomy-contract.md +1 -1
- package/assets/skills/oat-project-implement/SKILL.md +6 -6
- package/assets/skills/oat-project-implement/references/completion-and-closeout.md +28 -7
- package/assets/skills/oat-project-implement/references/dispatch-and-dry-run.md +10 -5
- package/assets/skills/oat-project-implement/references/docs/autonomy-contract.md +1 -1
- package/assets/skills/oat-project-implement/references/phase-execution.md +23 -9
- package/assets/skills/oat-project-implement/references/plan-and-resume.md +4 -4
- package/assets/skills/oat-project-lite/SKILL.md +1 -1
- package/assets/skills/oat-project-lite/references/docs/autonomy-contract.md +1 -1
- package/assets/skills/oat-project-pr-final/SKILL.md +6 -1
- package/assets/skills/oat-project-pr-final/references/docs/autonomy-contract.md +1 -1
- package/assets/skills/oat-project-pr-progress/SKILL.md +6 -1
- package/assets/skills/oat-project-quick-start/SKILL.md +1 -1
- package/assets/skills/oat-project-quick-start/references/docs/autonomy-contract.md +1 -1
- package/assets/skills/oat-project-reconcile/SKILL.md +13 -19
- package/assets/skills/oat-project-retro/SKILL.md +5 -2
- package/assets/skills/oat-project-retro/references/evidence-and-lanes.md +9 -3
- package/assets/skills/oat-project-review-provide/SKILL.md +28 -3
- package/assets/skills/oat-project-review-receive/SKILL.md +32 -18
- package/assets/skills/oat-project-review-receive-remote/SKILL.md +10 -6
- package/assets/skills/oat-project-revise/SKILL.md +9 -2
- package/assets/skills/oat-project-summary/SKILL.md +166 -37
- package/assets/skills/oat-worktree-bootstrap-auto/SKILL.md +3 -3
- package/assets/templates/docs-app-fuma/docs/contributing.md +6 -0
- package/assets/templates/docs-app-fuma/docs/getting-started.md +1 -1
- package/assets/templates/docs-app-fuma/next.config.js +5 -1
- package/assets/templates/implementation-brief.md +5 -36
- package/assets/templates/implementation.md +11 -81
- package/assets/templates/project-log.md +2 -31
- package/assets/templates/project-retro.md +4 -1
- package/assets/templates/summary.md +13 -5
- package/dist/commands/config/index.d.ts.map +1 -1
- package/dist/commands/config/index.js +44 -1
- package/dist/commands/docs/analyze.js +1 -1
- package/dist/commands/docs/apply.js +1 -1
- package/dist/commands/docs/init/scaffold.d.ts.map +1 -1
- package/dist/commands/docs/init/scaffold.js +35 -2
- package/dist/commands/project/archive/archive-utils.d.ts +205 -8
- package/dist/commands/project/archive/archive-utils.d.ts.map +1 -1
- package/dist/commands/project/archive/archive-utils.js +708 -44
- package/dist/commands/project/archive/index.d.ts.map +1 -1
- package/dist/commands/project/archive/index.js +1 -0
- package/dist/commands/project/archive/push-runner.d.ts +9 -1
- package/dist/commands/project/archive/push-runner.d.ts.map +1 -1
- package/dist/commands/project/archive/push-runner.js +56 -18
- package/dist/commands/project/archive/sync-runner.d.ts +28 -0
- package/dist/commands/project/archive/sync-runner.d.ts.map +1 -1
- package/dist/commands/project/archive/sync-runner.js +44 -22
- package/dist/commands/project/complete-state/index.d.ts.map +1 -1
- package/dist/commands/project/complete-state/index.js +45 -0
- package/dist/commands/project/dispatch/index.d.ts.map +1 -1
- package/dist/commands/project/dispatch/index.js +24 -2
- package/dist/commands/project/dispatch/record.d.ts +54 -1
- package/dist/commands/project/dispatch/record.d.ts.map +1 -1
- package/dist/commands/project/dispatch/record.js +229 -1
- package/dist/commands/project/index.d.ts.map +1 -1
- package/dist/commands/project/index.js +2 -0
- package/dist/commands/project/journal-check/evaluator.d.ts +17 -0
- package/dist/commands/project/journal-check/evaluator.d.ts.map +1 -0
- package/dist/commands/project/journal-check/evaluator.js +140 -0
- package/dist/commands/project/journal-check/index.d.ts +34 -0
- package/dist/commands/project/journal-check/index.d.ts.map +1 -0
- package/dist/commands/project/journal-check/index.js +163 -0
- package/dist/commands/project/journal-check/rules.d.ts +68 -0
- package/dist/commands/project/journal-check/rules.d.ts.map +1 -0
- package/dist/commands/project/journal-check/rules.js +994 -0
- package/dist/commands/project/journal-check/types.d.ts +63 -0
- package/dist/commands/project/journal-check/types.d.ts.map +1 -0
- package/dist/commands/project/journal-check/types.js +26 -0
- package/dist/commands/project/log/append.d.ts +6 -0
- package/dist/commands/project/log/append.d.ts.map +1 -1
- package/dist/commands/project/log/append.js +114 -6
- package/dist/commands/project/log/check.d.ts +23 -1
- package/dist/commands/project/log/check.d.ts.map +1 -1
- package/dist/commands/project/log/check.js +20 -3
- package/dist/commands/project/log/grammar.d.ts +37 -0
- package/dist/commands/project/log/grammar.d.ts.map +1 -1
- package/dist/commands/project/log/grammar.js +72 -0
- package/dist/commands/project/log/rollup.d.ts +87 -1
- package/dist/commands/project/log/rollup.d.ts.map +1 -1
- package/dist/commands/project/log/rollup.js +257 -5
- package/dist/config/oat-config.d.ts +14 -0
- package/dist/config/oat-config.d.ts.map +1 -1
- package/dist/config/oat-config.js +17 -0
- package/dist/config/resolve.d.ts.map +1 -1
- package/dist/config/resolve.js +5 -1
- package/dist/providers/identity/generic-dispatch-record.d.ts +33 -0
- package/dist/providers/identity/generic-dispatch-record.d.ts.map +1 -1
- package/dist/providers/identity/generic-dispatch-record.js +60 -1
- package/package.json +2 -2
|
@@ -11,16 +11,20 @@ would otherwise remain in agent transcripts, then roll that evidence into
|
|
|
11
11
|
tracked project and repository references before archiving the project.
|
|
12
12
|
|
|
13
13
|
The command group is the only supported writer for the artifact. Do not edit
|
|
14
|
-
entries or the synthesis section by hand.
|
|
14
|
+
entries or the synthesis section by hand. A new log starts with a two-line
|
|
15
|
+
header that links to this page; the entry contract lives here and in
|
|
16
|
+
`oat project log append --help` rather than in every log.
|
|
15
17
|
|
|
16
18
|
## Configure project logs
|
|
17
19
|
|
|
18
|
-
|
|
20
|
+
Four workflow keys control the feature:
|
|
19
21
|
|
|
20
|
-
| Key
|
|
21
|
-
|
|
|
22
|
-
| `workflow.projectLog`
|
|
23
|
-
| `workflow.projectLogLedgerPath`
|
|
22
|
+
| Key | Values | Default |
|
|
23
|
+
| -------------------------------------- | ------------------------ | --------------------------------------------- |
|
|
24
|
+
| `workflow.projectLog` | `auto`, `true`, `false` | `auto` |
|
|
25
|
+
| `workflow.projectLogLedgerPath` | repository-relative path | `.oat/repo/reference/project-observations.md` |
|
|
26
|
+
| `workflow.projectLogDigest.maxEntries` | positive integer | `12` |
|
|
27
|
+
| `workflow.projectLogDigest.maxLines` | positive integer | `60` |
|
|
24
28
|
|
|
25
29
|
```bash
|
|
26
30
|
oat config set workflow.projectLog auto --shared
|
|
@@ -35,6 +39,12 @@ current config value.
|
|
|
35
39
|
For one scaffold operation, `oat project new --with-project-log` forces
|
|
36
40
|
creation and `--no-project-log` suppresses it.
|
|
37
41
|
|
|
42
|
+
The two `workflow.projectLogDigest` keys bound the Workflow Observations digest
|
|
43
|
+
that roll-up writes into `summary.md` (see
|
|
44
|
+
[Promote and roll up observations](#promote-and-roll-up-observations)). They
|
|
45
|
+
are siblings of `workflow.projectLog`, resolve independently of it, and accept
|
|
46
|
+
only positive integers.
|
|
47
|
+
|
|
38
48
|
## Append entries
|
|
39
49
|
|
|
40
50
|
Judgment entries capture evidence about the project or reusable workflow:
|
|
@@ -57,6 +67,48 @@ Judgment flags:
|
|
|
57
67
|
- `--version-note <text>` — adds an `observed on` clause
|
|
58
68
|
- `--project <path>` — optional when an active project resolves
|
|
59
69
|
|
|
70
|
+
### Learning entries
|
|
71
|
+
|
|
72
|
+
A judgment entry can carry a learning category and a stable source identity.
|
|
73
|
+
Autonomous, cloud and goal runs record their learnings this way, so the log is
|
|
74
|
+
the one place learnings live; summary and retro read these entries first and a
|
|
75
|
+
legacy `oat-execution-learnings.md` second.
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
oat project log append \
|
|
79
|
+
--project .oat/projects/shared/example \
|
|
80
|
+
--type friction --scope project --area "cloud cache misses" \
|
|
81
|
+
--category environment-limited \
|
|
82
|
+
--source obs-2026-10-11-cache \
|
|
83
|
+
--origin oat-project-autonomous \
|
|
84
|
+
--idempotency-key obs-2026-10-11-cache \
|
|
85
|
+
--body "Observation: the runner cache missed on every run. Impact: builds doubled. Recommendation: warm the cache in setup."
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
- `--category <category>` — one of `gotcha`, `efficiency`,
|
|
89
|
+
`documentation-gap`, `candidate-skill-content`, `decision`, or
|
|
90
|
+
`environment-limited`, carried verbatim. Any other value is refused, and
|
|
91
|
+
`--category` without `--source` is refused.
|
|
92
|
+
- `--source <id>` — the stable per-observation source id, one word. Pass the
|
|
93
|
+
same id as `--idempotency-key` and a retried write appends nothing; the key
|
|
94
|
+
is found in the `**Source:**` line, so the body need not repeat it.
|
|
95
|
+
- `--origin <producer>` — the producer that recorded the learning.
|
|
96
|
+
|
|
97
|
+
These flags write a body head above the body:
|
|
98
|
+
|
|
99
|
+
```text
|
|
100
|
+
**Category:** environment-limited
|
|
101
|
+
**Source:** obs-2026-10-11-cache
|
|
102
|
+
**Origin:** oat-project-autonomous
|
|
103
|
+
**Recorded:** 2026-10-11T14:03:22Z
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
The heading grammar and the four judgment types are unchanged, and an entry
|
|
107
|
+
written without these flags is stored exactly as before. The flags are refused
|
|
108
|
+
on structural entries.
|
|
109
|
+
|
|
110
|
+
### Structural entries
|
|
111
|
+
|
|
60
112
|
Structural entries record lifecycle events without duplicating larger
|
|
61
113
|
artifacts:
|
|
62
114
|
|
|
@@ -185,7 +237,10 @@ oat project log check --project .oat/projects/shared/example --json
|
|
|
185
237
|
|
|
186
238
|
`check` reports whether the log is absent, ready, or still awaiting synthesis;
|
|
187
239
|
entry counts by class, type, and scope; the last entry date; and invalid
|
|
188
|
-
hand-written headings. It reads
|
|
240
|
+
hand-written headings. It reads `project-log.md` and checks only for the
|
|
241
|
+
presence of the legacy learnings file: `learnings` is `legacy` when the project
|
|
242
|
+
still has `oat-execution-learnings.md` (summary and retro read it after the
|
|
243
|
+
log) and `none` otherwise, in every status including `absent`.
|
|
189
244
|
|
|
190
245
|
It also reports whether the log carries a completion seal:
|
|
191
246
|
|
|
@@ -253,16 +308,50 @@ oat project log rollup \
|
|
|
253
308
|
--json
|
|
254
309
|
```
|
|
255
310
|
|
|
256
|
-
`rollup` writes
|
|
257
|
-
|
|
311
|
+
`rollup` writes a bounded observations digest into `summary.md` and appends
|
|
312
|
+
`general` judgments to `workflow.projectLogLedgerPath`. Ledger entries
|
|
258
313
|
deduplicate by date and area. The command is idempotent.
|
|
259
314
|
|
|
315
|
+
The digest is a projection, not a copy:
|
|
316
|
+
|
|
317
|
+
- Only judgment entries qualify. Structural entries are provenance and stay in
|
|
318
|
+
the log; they are counted, never rendered.
|
|
319
|
+
- Entries are ordered newest first, then `decision` and `gotcha` categories
|
|
320
|
+
ahead of the rest, then by heading text, and taken while both bounds hold:
|
|
321
|
+
at most `workflow.projectLogDigest.maxEntries` items and at most
|
|
322
|
+
`workflow.projectLogDigest.maxLines` lines for the whole section. Entries
|
|
323
|
+
beyond the bound are counted in a one-line trailer, never copied.
|
|
324
|
+
- Each item is concise: a line with date, type, area, scope, category and the
|
|
325
|
+
entry's source locator, then the first observation sentence and any
|
|
326
|
+
limitation or uncertainty line. A recommendation is rendered only for an
|
|
327
|
+
uncategorized entry; a categorized learning's recommendation belongs to the
|
|
328
|
+
summary's Autonomous Execution Learnings section, and the digest adds a
|
|
329
|
+
one-line cross-reference to it.
|
|
330
|
+
- The locator is a plain token, never a link:
|
|
331
|
+
`oat-project:<slug>#<entry-id>`, where the entry id is
|
|
332
|
+
`<date>-<type>-<area slug>-<n>` and `n` counts entries sharing that date,
|
|
333
|
+
type and area slug in log order. Archive export finalizes the token to the
|
|
334
|
+
archive identity.
|
|
335
|
+
- Live `.oat/projects/<scope>/<slug>/…` paths in rendered text are replaced by
|
|
336
|
+
a `(project file …)` label that keeps the project-relative remainder.
|
|
337
|
+
- When no judgment entry qualifies, the section is omitted: an existing
|
|
338
|
+
Workflow Observations section is removed and none is created.
|
|
339
|
+
|
|
340
|
+
The digest never feeds the ledger. Ledger graduation reads the complete
|
|
341
|
+
judgment set, so a `general` lesson the digest bound left out still graduates.
|
|
342
|
+
|
|
260
343
|
The structured result contains:
|
|
261
344
|
|
|
262
345
|
- `status`: `ok`, `failed`, or `ambiguous`
|
|
263
|
-
- `summarySection`: `written` or `
|
|
346
|
+
- `summarySection`: `written`, `updated`, or `omitted`
|
|
264
347
|
- `ledgerOutcome`: `appended`, `deduplicated`, `skipped_permitted`, or `failed`
|
|
265
|
-
- `entriesRolledUp`: number of log entries
|
|
348
|
+
- `entriesRolledUp`: number of log entries read, structural and judgment
|
|
349
|
+
- `digest`: the bounds used (`maxEntries`, `maxLines`), the `rendered` count,
|
|
350
|
+
`omitted` counts (`overBound`, `structural`, and `malformed` for a heading
|
|
351
|
+
that matches neither grammar and was skipped individually),
|
|
352
|
+
`omittedEntries` (the locator tokens of over-bound entries, no bodies), and
|
|
353
|
+
`byProducer` rendered/omitted counts keyed by a judgment's `**Origin:**` (or
|
|
354
|
+
`unattributed`) or a structural entry's producer
|
|
266
355
|
|
|
267
356
|
An `ambiguous` result carries only `status` and an `ambiguity` reason, and exits
|
|
268
357
|
1: the log's structure has two readings, so no count would mean anything and
|
|
@@ -66,7 +66,7 @@ Implementation closeout has one authoritative order:
|
|
|
66
66
|
4. Run the configured pre-approval sequence.
|
|
67
67
|
5. Record final HiLL approval when the final phase is a checkpoint.
|
|
68
68
|
6. Run the configured post-approval sequence.
|
|
69
|
-
7.
|
|
69
|
+
7. Check the journal (`oat project journal check --at implement-preflight`), then mark implementation complete and emit the implementation success output.
|
|
70
70
|
|
|
71
71
|
The configured exit gate is independent from the mandatory lifecycle review,
|
|
72
72
|
root-owned phase reviews, and optional `oat_phase_review_gate`. It must reach an
|
|
@@ -91,7 +91,7 @@ After implementation closeout finishes:
|
|
|
91
91
|
- GitHub PR feedback delegates to `oat-project-review-receive-remote`
|
|
92
92
|
- Review artifacts delegate to `oat-project-review-receive`
|
|
93
93
|
- After revision tasks complete, state returns to `pr_open`
|
|
94
|
-
5. **Complete** (`oat-project-complete`) — accepts
|
|
94
|
+
5. **Complete** (`oat-project-complete`) — accepts `pr_open` or `complete` (an `in_progress` project is routed back to `oat-project-implement`, because the journal and `state.md` must agree at completion), auto-refreshes `summary.md` before closeout when needed, and archives when selected by the workflow preference or completion prompt. Before any completion write it runs the read-only `oat project closeout-check`: a configured, autonomous, or lite closeout whose `oat_post_implement_sequence` snapshot is missing, malformed, or incomplete stops and routes back to `oat-project-implement`, and `oat project complete-state` refuses the same state. There is no override for that invariant. Completion then refreshes the journal's Final Summary and `summary.md` prose from observed facts, runs the summary staged, and validates the journal with `oat project journal check --at completion` before any roll-up, seal, archive or lifecycle write; a refusal stops completion with the reason, line and owner, and `complete-state` rechecks the same evaluator before its write. A journal-only override line under `## Deviations from Plan / Design` can cover an authorized gap such as lost commit evidence, never the closeout invariant; see the [CLI reference](../../reference/cli-reference.md) and [Project Artifacts](../../reference/project-artifacts.md#the-implementation-journal).
|
|
95
95
|
|
|
96
96
|
### Project-recap gate (non-lite)
|
|
97
97
|
|
|
@@ -157,7 +157,7 @@ On completion, OAT treats archive handling as an explicit closeout choice:
|
|
|
157
157
|
- If `.oat/config.json` sets `archive.awsProfile` and/or `archive.awsRegion`, those values are forwarded to every `aws` invocation triggered by completion (preflight checks + `aws s3 sync`) and override any ambient shell `AWS_PROFILE` / `AWS_DEFAULT_PROFILE` / `AWS_REGION` / `AWS_DEFAULT_REGION` values. The repo's archive-scoped credentials are treated as deliberate intent so users don't have to unset shell env vars before running completion. See [`config-and-local-state.md`](../../reference/config-and-local-state.md) for the full precedence chain.
|
|
158
158
|
- If `.oat/config.json` sets `archive.summaryExportPath`, completion copies `summary.md` to `<archive.summaryExportPath>/20260401-<project>.md`.
|
|
159
159
|
- Missing or unusable AWS CLI configuration blocks synced terminal cleanup when S3 durability is configured; when S3 sync is not configured, it is not part of the durability requirement.
|
|
160
|
-
- `oat repo archive sync` can later sync all archived projects, or one named archived project, back down from S3
|
|
160
|
+
- `oat repo archive sync` can later sync all archived projects, or one named archived project, back down from S3, materializing each snapshot into the local bare archive tree under its full local name (generation 2 of `<project>` restores to `<project>-g2`, never over generation 1). Archive names follow one contract, `<project>[-gN][-<scope>]` locally and `<YYYYMMDD>-<project>[-gN][-<scope>]` in S3, where `-<scope>` appears only when another scope's archive already held the unqualified name. An unnamed sync restores the latest dated snapshot of every local archive. A named sync takes an exact snapshot name first, then a full generation name such as `<project>-g2` or `<project>-g2-local`, then a generation family: `<project>-<scope>` restores that scope's latest generation, and the base `<project>` restores every family of the project (the unqualified one and each scope-qualified one) at its latest generation, then latest date. A project whose own name ends in `-gN` or `-<scope>` reads as that generation or qualifier, so its name can resolve to the same archive directory as a shorter-named project's; sync it by exact snapshot name to remove the ambiguity.
|
|
161
161
|
- Persisted archive metadata binds the snapshot to the source-ref SHA, allowing
|
|
162
162
|
an interrupted closeout or legacy complete record to resume without
|
|
163
163
|
rematerializing an active project. Dashboard and list surfaces omit fully
|
|
@@ -259,6 +259,24 @@ Final review `passed` gate requires:
|
|
|
259
259
|
A goal milestone delivery is gated by its passed, fresh integrated review and
|
|
260
260
|
exit carrier rather than by a `final` row.
|
|
261
261
|
|
|
262
|
+
## Receipts in the journal
|
|
263
|
+
|
|
264
|
+
`oat-project-review-receive` writes one receipt per received review: a
|
|
265
|
+
phase-scoped receipt in that phase's section of `implementation.md`, a final,
|
|
266
|
+
multi-phase, milestone or remote (PR) receipt under `## Reviews and Gates`,
|
|
267
|
+
never after `## References`. Each receipt lists every finding's identity and
|
|
268
|
+
substance, its disposition and rationale, the fix task or approved deferral it
|
|
269
|
+
links to, and the final outcome; approved deferrals are also lines under
|
|
270
|
+
`## Deferred Findings`. The review file path is a local-only citation: reviews
|
|
271
|
+
are not archived, so the journal and plan must stand without it, and an
|
|
272
|
+
unresolved review path is never a completion defect.
|
|
273
|
+
|
|
274
|
+
Code reviews run `oat project journal check --at review --scope <phases>`
|
|
275
|
+
first; its reasons reach the reviewer in the Review Scope. A finding that a
|
|
276
|
+
mechanical pointer or projection refresh resolves (stale overview totals, a
|
|
277
|
+
run line to re-render, a lagging resume pointer) is refresh-only and belongs to
|
|
278
|
+
closeout's refresh, never a fix task.
|
|
279
|
+
|
|
262
280
|
## Complexity review at budget exhaustion
|
|
263
281
|
|
|
264
282
|
When a review or gate budget runs out, another round of the same review is
|
|
@@ -5,7 +5,7 @@ disable-model-invocation: false
|
|
|
5
5
|
user-invocable: true
|
|
6
6
|
allowed-tools: Read, Write, Bash, Glob, Grep
|
|
7
7
|
metadata:
|
|
8
|
-
version: 1.1.
|
|
8
|
+
version: 1.1.4
|
|
9
9
|
---
|
|
10
10
|
|
|
11
11
|
# OAT in Cursor Cloud
|
|
@@ -33,7 +33,8 @@ end-to-end requests route to `oat-project-autonomous` after orientation.
|
|
|
33
33
|
|
|
34
34
|
- A shell and Node/npm are available.
|
|
35
35
|
- Read `references/cursor-cloud-mechanics.md` only when model-family identity,
|
|
36
|
-
dispatch-surface catalogs,
|
|
36
|
+
dispatch-surface catalogs, degraded review evidence, or a learning write is
|
|
37
|
+
needed.
|
|
37
38
|
|
|
38
39
|
## Mode Assertion
|
|
39
40
|
|
|
@@ -62,7 +63,7 @@ context without taking ownership of a lifecycle phase.
|
|
|
62
63
|
- Verifying or installing the supported OAT CLI.
|
|
63
64
|
- Comparing skill versions as a freshness check.
|
|
64
65
|
- Loading Cursor mechanics and org-layer context skills when relevant.
|
|
65
|
-
- Recording environment anomalies and degraded routes
|
|
66
|
+
- Recording environment anomalies and degraded routes as project-log learnings.
|
|
66
67
|
|
|
67
68
|
**Self-Correction Protocol:**
|
|
68
69
|
|
|
@@ -243,9 +244,10 @@ user version >= repo version
|
|
|
243
244
|
It never chooses the source:
|
|
244
245
|
|
|
245
246
|
- user version equal to or higher than repo → read the user copy;
|
|
246
|
-
- repo version higher than user → still read the user copy,
|
|
247
|
-
|
|
248
|
-
`
|
|
247
|
+
- repo version higher than user → still read the user copy, record the anomaly
|
|
248
|
+
as a learning through the project-log learning write in
|
|
249
|
+
`references/cursor-cloud-mechanics.md` (Learning Write), and flag the user
|
|
250
|
+
tier for refresh with `oat tools update` or an environment rebuild;
|
|
249
251
|
- if freshness is safety-critical, refresh and re-verify before continuing;
|
|
250
252
|
stop if the user tier cannot be refreshed safely.
|
|
251
253
|
|
|
@@ -283,8 +285,10 @@ the provider dispatch algorithm.
|
|
|
283
285
|
environment when integrated systems require them. Do not hard-depend on,
|
|
284
286
|
name, or emulate an absent org layer.
|
|
285
287
|
- When an expected skill, MCP server, CLI surface, or credential is absent,
|
|
286
|
-
record the gap in the active project's `
|
|
287
|
-
|
|
288
|
+
record the gap as a learning in the active project's `project-log.md` through
|
|
289
|
+
the Learning Write in `references/cursor-cloud-mechanics.md`; with the
|
|
290
|
+
project log disabled it warns once and records nothing. Continue only through
|
|
291
|
+
a documented integrity-preserving route.
|
|
288
292
|
|
|
289
293
|
Return an orientation summary:
|
|
290
294
|
|
|
@@ -92,10 +92,71 @@ That provider reference owns Cursor launch, acceptance, continuation, retry,
|
|
|
92
92
|
and recovery mechanics. `oat-project-dispatch-subagents` owns lifecycle scope
|
|
93
93
|
and policy adaptation. Do not duplicate those contracts here.
|
|
94
94
|
|
|
95
|
+
## Learning Write
|
|
96
|
+
|
|
97
|
+
Cloud learnings — environment anomalies, setup gaps, degraded checks, freshness
|
|
98
|
+
anomalies and missing skills, MCP servers, CLI surfaces or credentials — are
|
|
99
|
+
category-bearing judgment entries in the active project's `project-log.md`,
|
|
100
|
+
written only through `oat project log append`. Never create or append to
|
|
101
|
+
`oat-execution-learnings.md`.
|
|
102
|
+
|
|
103
|
+
Give each observation a stable, whitespace-free source id unique to this run
|
|
104
|
+
and observation (for example `cloud-<run id>-<NN>`) and retain it for retries;
|
|
105
|
+
it is both `--source` and `--idempotency-key`, so a replay appends nothing.
|
|
106
|
+
Write the learning title as `--area` and the body as `Observation:`,
|
|
107
|
+
`Impact:`, `Recommendation:` and, when it applies, `Uncertainty:` lines.
|
|
108
|
+
|
|
109
|
+
```bash
|
|
110
|
+
# Learning write (shared by oat-project-autonomous, oat-cursor-cloud-projects
|
|
111
|
+
# and oat-project-goal): oat_record_learning <category> <source-id> <title> <body>
|
|
112
|
+
oat_record_learning() {
|
|
113
|
+
local category="$1" source="$2" title="$3" body="$4" type result
|
|
114
|
+
case "$category" in
|
|
115
|
+
gotcha | environment-limited) type=friction ;;
|
|
116
|
+
efficiency | candidate-skill-content) type=worked-well ;;
|
|
117
|
+
documentation-gap | decision) type=feedback ;;
|
|
118
|
+
*)
|
|
119
|
+
echo "oat: unknown learning category '$category'" >&2
|
|
120
|
+
return 1
|
|
121
|
+
;;
|
|
122
|
+
esac
|
|
123
|
+
result=$(oat project log append --json --project "$PROJECT_PATH" \
|
|
124
|
+
--type "$type" --scope project --area "$title" \
|
|
125
|
+
--category "$category" \
|
|
126
|
+
--source "$source" \
|
|
127
|
+
--origin "${LEARNING_ORIGIN:?set to the producer skill name}" \
|
|
128
|
+
--idempotency-key "$source" \
|
|
129
|
+
--body "$body") || {
|
|
130
|
+
printf '%s\n' "$result" >&2
|
|
131
|
+
return 1
|
|
132
|
+
}
|
|
133
|
+
if printf '%s' "$result" | grep -Eq '"status": *"skipped"'; then
|
|
134
|
+
echo "oat: warning: project log disabled (workflow.projectLog=false); learning $source not recorded" >&2
|
|
135
|
+
fi
|
|
136
|
+
}
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
Set `LEARNING_ORIGIN=oat-cursor-cloud-projects`. Use the six categories
|
|
140
|
+
verbatim; an environment anomaly or a missing surface is usually
|
|
141
|
+
`environment-limited`, a stale user tier `gotcha`. The write maps the category
|
|
142
|
+
to the judgment type (`gotcha`, `environment-limited` → `friction`;
|
|
143
|
+
`efficiency`, `candidate-skill-content` → `worked-well`; `documentation-gap`,
|
|
144
|
+
`decision` → `feedback`).
|
|
145
|
+
|
|
146
|
+
Call it unconditionally; do not read `workflow.projectLog` yourself. The
|
|
147
|
+
append consults that flag only while `project-log.md` does not exist: with the
|
|
148
|
+
log disabled and absent it creates nothing and reports `status: skipped`, the
|
|
149
|
+
write prints one warning line, records nothing, and orientation continues. An
|
|
150
|
+
existing `project-log.md` keeps accepting categorized learnings whatever the
|
|
151
|
+
flag says (`DR-260718-automatic-create-on-first`). Commit `project-log.md`, when it
|
|
152
|
+
exists, with the next bookkeeping commit for the project (a synced project uses
|
|
153
|
+
`oat project push`).
|
|
154
|
+
|
|
95
155
|
## Degraded Route Evidence
|
|
96
156
|
|
|
97
157
|
Degradation is a pre-launch selection outcome, not a post-accept fallback.
|
|
98
|
-
Record it in the canonical dispatch record plus
|
|
158
|
+
Record it in the canonical dispatch record plus one learning (see Learning
|
|
159
|
+
Write).
|
|
99
160
|
|
|
100
161
|
Use this shape for the Cursor-specific evidence supplied to the generic record:
|
|
101
162
|
|
|
@@ -149,7 +210,7 @@ independence:
|
|
|
149
210
|
degradation:
|
|
150
211
|
present: true
|
|
151
212
|
reason: catalog-contained-one-dispatchable-family
|
|
152
|
-
learnings_entry:
|
|
213
|
+
learnings_entry: <learning source id>
|
|
153
214
|
```
|
|
154
215
|
|
|
155
216
|
Include the exact configured invocation evidence required by the generic record
|
|
@@ -6,7 +6,7 @@ disable-model-invocation: false
|
|
|
6
6
|
user-invocable: true
|
|
7
7
|
allowed-tools: Read, Glob, Grep, AskUserQuestion
|
|
8
8
|
metadata:
|
|
9
|
-
version: 1.0.
|
|
9
|
+
version: 1.0.7
|
|
10
10
|
---
|
|
11
11
|
|
|
12
12
|
# OAT Docs
|
|
@@ -89,29 +89,15 @@ Read the user's question from `$ARGUMENTS`. If no question was provided or the q
|
|
|
89
89
|
|
|
90
90
|
> "What would you like to know about OAT? I can help with workflows, CLI commands, skill authoring, configuration, project lifecycle, and more."
|
|
91
91
|
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
| ---------------- | --------------------------------------------------------------- | -------------------------------------------- |
|
|
96
|
-
| Getting started | `getting-started/quickstart.md`, `getting-started/bootstrap.md` | Installation, first project setup |
|
|
97
|
-
| Concepts | `getting-started/concepts.md` | Core OAT concepts and terminology |
|
|
98
|
-
| CLI commands | `reference/cli-reference.md` | Full CLI command reference |
|
|
99
|
-
| Tool packs | `getting-started/tool-packs.md` | Installing and managing skill packs |
|
|
100
|
-
| Skills | `contributing/skills.md` | Skill authoring, SKILL.md format |
|
|
101
|
-
| Workflows | `workflows/projects/` | Project lifecycle, state machine, artifacts |
|
|
102
|
-
| Ideas | `workflows/ideas/` | Idea capture and brainstorming |
|
|
103
|
-
| Provider sync | `provider-sync/` | Multi-provider sync, config, commands |
|
|
104
|
-
| Documentation | `docs-tooling/` | Docs analysis and apply workflows |
|
|
105
|
-
| Contributing | `contributing/` | Code contributions, design principles, hooks |
|
|
106
|
-
| File locations | `reference/file-locations.md` | Where OAT puts things |
|
|
107
|
-
| Directory layout | `reference/oat-directory-structure.md` | `.oat/` and `.agents/` structure |
|
|
108
|
-
| Troubleshooting | `reference/troubleshooting.md` | Common issues and fixes |
|
|
92
|
+
Read `DOCS_ROOT/index.md` and its `## Contents` section. Derive a temporary topic map from the installed labels, summaries, and link targets; do not assume OAT's repository layout or a fixed set of topic paths. Choose the entries that match the question and descend through their authored `index.md` Contents maps when needed. Resolve each link relative to its containing file and verify it exists before reading it.
|
|
93
|
+
|
|
94
|
+
If the installed index has no usable Contents or a linked target is missing, report that specific stale or incomplete installation. Search within `DOCS_ROOT` for the requested terms to find existing evidence, and recommend updating the installed docs when appropriate. Never invent a replacement path or fall back to the repository.
|
|
109
95
|
|
|
110
96
|
### Step 3: Search and Read Documentation
|
|
111
97
|
|
|
112
98
|
Based on the topic classification:
|
|
113
99
|
|
|
114
|
-
1. **Read the most relevant docs file(s)** — start with the primary match from the topic
|
|
100
|
+
1. **Read the most relevant docs file(s)** — start with the primary match from the topic map derived in Step 2. All paths are relative to `DOCS_ROOT` (`~/.oat/docs/`).
|
|
115
101
|
2. **Search for specific terms** — if the question mentions specific concepts, commands, or features, use Grep to find mentions across `~/.oat/docs/`.
|
|
116
102
|
3. **Follow cross-references** — if the primary doc references other pages, read those for complete context.
|
|
117
103
|
4. **Check the index** — read the `index.md` of relevant directories to discover additional relevant pages.
|
|
@@ -143,7 +129,7 @@ Frame these as suggestions, not automatic actions. Let the user decide.
|
|
|
143
129
|
```
|
|
144
130
|
Based on the docs, here's how OAT project workflows work: [answer]
|
|
145
131
|
|
|
146
|
-
|
|
132
|
+
Cite the installed workflow page discovered through Contents.
|
|
147
133
|
|
|
148
134
|
Would you like me to:
|
|
149
135
|
- Start a new project? (I'd invoke oat-project-lite for single-sitting work, oat-project-brief for one delivery planned as a Project Brief, oat-project-goal for an outcome delivered over several milestones, or oat-project-quick-start for a larger quick workflow)
|
|
@@ -190,7 +176,7 @@ Both create a project directory under your projects root
|
|
|
190
176
|
state.md, plan.md, and implementation.md; quick and spec-driven modes also use
|
|
191
177
|
discovery.md.
|
|
192
178
|
|
|
193
|
-
See:
|
|
179
|
+
See: the actual installed workflow and getting-started pages found through Contents.
|
|
194
180
|
|
|
195
181
|
Would you like me to create a project for you?
|
|
196
182
|
```
|
|
@@ -203,20 +189,20 @@ Would you like me to create a project for you?
|
|
|
203
189
|
|
|
204
190
|
```
|
|
205
191
|
Tool packs are bundles of related OAT skills that you install together.
|
|
206
|
-
|
|
192
|
+
Describe the packs listed by the installed tool-pack documentation, for example:
|
|
207
193
|
|
|
208
|
-
- **core** — Diagnostics and docs skills
|
|
209
|
-
|
|
194
|
+
- **core** — Diagnostics and docs skills.
|
|
195
|
+
Read the installed docs for scope and current membership.
|
|
210
196
|
- **workflows** — Project lifecycle skills (discover, plan, implement,
|
|
211
|
-
review, PR).
|
|
212
|
-
- **ideas** — Brainstorming and idea capture skills.
|
|
197
|
+
review, PR).
|
|
198
|
+
- **ideas** — Brainstorming and idea capture skills.
|
|
213
199
|
- **utility** — Cross-cutting tools (docs analysis, code review,
|
|
214
|
-
skill creation).
|
|
200
|
+
skill creation).
|
|
215
201
|
|
|
216
202
|
Install with: oat init tools
|
|
217
203
|
Manage with: oat tools list, oat tools update, oat tools outdated
|
|
218
204
|
|
|
219
|
-
See:
|
|
205
|
+
See: the installed tool-pack page discovered through Contents.
|
|
220
206
|
|
|
221
207
|
Would you like me to check which packs you have installed? (I'd run /oat-doctor --summary)
|
|
222
208
|
```
|
|
@@ -3,9 +3,9 @@ name: oat-docs-analyze
|
|
|
3
3
|
description: Run when you need to evaluate documentation structure, navigation, and coverage against the OAT documentation contract. Produces a severity-rated analysis artifact for oat-docs-apply.
|
|
4
4
|
disable-model-invocation: true
|
|
5
5
|
user-invocable: true
|
|
6
|
-
allowed-tools: Read, Write, Bash(git:*), Bash(oat docs nav sync --check:*), Glob, Grep, AskUserQuestion, Task
|
|
6
|
+
allowed-tools: Read, Write, Bash(git:*), Bash(oat config:*), Bash(oat docs nav sync --check:*), Bash(pnpm:*), Bash(bash:*), Bash(jq:*), Bash(mkdir:*), Bash(date:*), Bash(echo:*), Bash(cd:*), Bash(pwd:*), Glob, Grep, AskUserQuestion, Task
|
|
7
7
|
metadata:
|
|
8
|
-
version: '1.6.
|
|
8
|
+
version: '1.6.3'
|
|
9
9
|
---
|
|
10
10
|
|
|
11
11
|
# Docs Analysis
|
|
@@ -162,6 +162,8 @@ Capture the evidence sources that will justify later findings and recommendation
|
|
|
162
162
|
- existing `index.md` trees and repeated directory patterns
|
|
163
163
|
- exact missing or stale paths, commands, and page references
|
|
164
164
|
|
|
165
|
+
For framework apps, also read [Legacy scaffold checks](references/legacy-scaffold-checks.md). Apply those checks to the actual installed app, cite the observed file and source contract, and report discrepancies in Findings and Recommendations. These are read-only checks, not bootstrap post-patches. Do not change app-shell configuration during analysis or assume docs-apply can edit it; identify the manual upgrade needed when outside apply's current scope.
|
|
166
|
+
|
|
165
167
|
Do **not** infer docs structure conventions from a tiny sample of pages when the broader
|
|
166
168
|
tree or config disagrees.
|
|
167
169
|
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Legacy scaffold checks
|
|
2
|
+
|
|
3
|
+
Evaluate existing framework apps against the current contracts below. A match produces an evidence-backed finding in the analysis artifact, never an automatic rewrite. Cite the actual app path and line, the missing contract, confidence and a specific repair. Respect intentional user customization; when intent is unclear, use `ask_user`.
|
|
4
|
+
|
|
5
|
+
| Observed older shape | Finding and repair | Contract source |
|
|
6
|
+
| ------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- |
|
|
7
|
+
| Fumadocs `next.config.js` replaces `createDocsConfig` with `createMDX()({ reactStrictMode: true, turbopack: { root: __dirname } })` | High: static-export settings are missing and `__dirname` is invalid in ESM. Recommend a manual app-config upgrade to `createDocsConfig({ basePath, turbopack: { root: dirname(fileURLToPath(import.meta.url)) } })`, preserving `output: 'export'`, `trailingSlash`, `images.unoptimized`, base path and client environment. Verify the installed docs-config supports forwarding the root first. | `@open-agent-toolkit/docs-config` factory and the current Fumadocs template |
|
|
8
|
+
| Layout lacks Next `metadata`, or site title differs between branding, metadata and authored headings | Medium: site identity or document metadata is inconsistent. Report exact mismatches; titles belong in layout metadata and branding, not `createDocsConfig`. | Fumadocs layout template and Next metadata export |
|
|
9
|
+
| Getting Started has an empty description, bare commands with no working directory, or claims lint runs when package scripts disable it | Medium: setup guidance disagrees with package scripts or page metadata. Recommend corrected prose backed by the actual scripts. | Rendered scaffold package scripts and page frontmatter |
|
|
10
|
+
| Node prerequisite is a fixed old major or tells readers to guess from repo pins | Medium: compare `.nvmrc` first, then root `package.json` `engines.node`; quote the detected requirement. When neither exists, disclose the CLI minimum rather than claiming a repo pin. | Repository Node pin and current scaffold renderer |
|
|
11
|
+
| Authored `docs/index.md` says it is generated, or contributing lacks the generated-files boundary | Medium: distinguish authored `docs/index.md` from the generated app-root manifest. Document committed `docs/**/meta.json` and `oat docs nav sync` separately. | `oat docs generate-index` and `oat docs nav sync` |
|
|
12
|
+
| Contents links omit `.md` despite real Markdown targets | Medium: recommend `.md`-suffixed source links, which the build transforms into routes. | Authored Contents contract and docs-transforms links plugin |
|
|
13
|
+
| Contributing duplicates agent runtime rules rather than pointing to app-root `AGENTS.md` | Low: recommend consolidating runtime instructions into the existing agent guidance after approval; preserve custom rules. | Docs-app guidance and contributing audience boundary |
|
|
14
|
+
| MkDocs setup says `setup-docs.sh` creates a virtual environment, config calls `tooling` an object, or index points at an assumed `docs/index.md` | Medium: verify the actual script and `.oat/config.json`. The scaffold installs with the selected Python, uses a framework string, and seeds index/config as `mkdocs.yml`. | MkDocs setup script, documentation schema and scaffold config |
|
|
15
|
+
|
|
16
|
+
A user-owned dynamic app may intentionally omit static export. Do not apply a static-export finding to it without evidence that static output is required. Likewise, verify commands and filenames against the target repository; these patterns identify discrepancies, not authority to overwrite customization.
|
|
@@ -3,9 +3,9 @@ name: oat-docs-apply
|
|
|
3
3
|
description: Run when you have a docs analysis artifact and want to generate or update documentation structure and content. Creates a branch, applies approved changes, and optionally opens a PR.
|
|
4
4
|
disable-model-invocation: true
|
|
5
5
|
user-invocable: true
|
|
6
|
-
allowed-tools: Read, Write, Edit, Bash(git:*), Bash(gh:*), Glob, Grep, AskUserQuestion
|
|
6
|
+
allowed-tools: Read, Write, Edit, Bash(git:*), Bash(gh:*), Bash(oat:*), Bash(pnpm:*), Bash(bash:*), Bash(jq:*), Bash(mkdir:*), Bash(date:*), Bash(echo:*), Bash(cd:*), Bash(pwd:*), Glob, Grep, AskUserQuestion
|
|
7
7
|
metadata:
|
|
8
|
-
version: '1.4.
|
|
8
|
+
version: '1.4.4'
|
|
9
9
|
---
|
|
10
10
|
|
|
11
11
|
# Docs Apply
|
|
@@ -3,10 +3,10 @@ name: oat-docs-authoring
|
|
|
3
3
|
description: Use when authoring or restructuring targeted content inside an existing OAT Markdown surface or OAT/Fumadocs docs app. Preserves OAT docs navigation, generated indexes, and validation boundaries.
|
|
4
4
|
argument-hint: '[docs task or target path]'
|
|
5
5
|
disable-model-invocation: false
|
|
6
|
-
allowed-tools: Read, Write, Bash, Glob, Grep, AskUserQuestion
|
|
6
|
+
allowed-tools: Read, Write, Edit, Bash, Glob, Grep, AskUserQuestion
|
|
7
7
|
user-invocable: true
|
|
8
8
|
metadata:
|
|
9
|
-
version: '1.1.
|
|
9
|
+
version: '1.1.3'
|
|
10
10
|
---
|
|
11
11
|
|
|
12
12
|
# OAT Docs Authoring
|
|
@@ -42,8 +42,7 @@ Stop and reroute when you notice:
|
|
|
42
42
|
## Migration Pointer
|
|
43
43
|
|
|
44
44
|
Full MkDocs-to-OAT-Fumadocs migration is not bootstrap and is not targeted
|
|
45
|
-
authoring. Use the
|
|
46
|
-
when available, and keep the migration in an OAT project or explicit migration
|
|
45
|
+
authoring. Use the bundled [MkDocs-to-OAT-Fumadocs migration guide](mkdocs-to-oat-fumadocs-refactor-guide.md), and keep the migration in an OAT project or explicit migration
|
|
47
46
|
branch with owner-review items for unverifiable claims.
|
|
48
47
|
|
|
49
48
|
For migration-sensitive follow-up after the migration workflow has created a
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# MkDocs to OAT/Fumadocs migration guide
|
|
2
|
+
|
|
3
|
+
Use this standalone handoff for an explicitly approved migration of an existing MkDocs site. Bootstrap creates an app; targeted authoring edits content; neither performs a full migration. Keep migration work in an OAT project or an explicit migration branch, with the agreed scope and owner recorded before changes.
|
|
4
|
+
|
|
5
|
+
This guide is reconstructed from current OAT CLI, template and authoring contracts. The older project-local handoff mentioned in OAT's docs-authoring project summary was unavailable; this is not a copy of that historical document.
|
|
6
|
+
|
|
7
|
+
## Preflight: inventory before mutation
|
|
8
|
+
|
|
9
|
+
1. Read repository and docs-local instructions, `mkdocs.yml`, `.oat/config.json`, Python dependency files, docs package scripts and deployment workflows. Resolve the actual content root, published URL/base path and build output; do not assume `docs/` or GitHub Pages.
|
|
10
|
+
2. Inventory every source page, attachment, image, local link, anchor, nav entry and public URL. Record pages outside nav too. Keep a before/after mapping for every source path and URL; never silently drop an unlisted page.
|
|
11
|
+
3. Inventory MkDocs-specific features: admonitions, tabs, includes/macros, plugin-generated pages, API generation, Mermaid, custom assets/theme, search and redirects. Distinguish supported conversion from manual work and unsupported features.
|
|
12
|
+
4. Find claims requiring code/config evidence, confidential material, unresolved product behavior and owner-only knowledge. Record owner-review items rather than guessing or publishing uncertain claims.
|
|
13
|
+
5. Discover validation commands and required runtimes from scripts, CI and contributor instructions. Establish a baseline with exact commands and exit codes, including existing failures. Agree on the target app location, dependency policy, URL preservation strategy and deployment change with the user.
|
|
14
|
+
|
|
15
|
+
Produce an inventory and proposed migration scope for approval. Do not overwrite the MkDocs app, clear its configuration, delete Python tooling or switch deployment as a side effect of preparing a proposal.
|
|
16
|
+
|
|
17
|
+
## Phase 1: create the approved target app
|
|
18
|
+
|
|
19
|
+
Use `oat docs init --help` to inspect installed capabilities. Scaffold Fumadocs into an empty, approved destination with `--framework fumadocs`, a package/app name, site name, description and target directory. Bootstrap can guide this step, but creating a second app does not imply support for two active `documentation` entries: the current config describes one surface. Explicitly agree when the configured docs root will switch, and preserve the old config for rollback.
|
|
20
|
+
|
|
21
|
+
Read the rendered package scripts and configuration. The current Fumadocs template uses Next static export, trailing slashes and unoptimized images through `createDocsConfig`. For nested-standalone repos only, it forwards an ESM-safe app directory as `turbopack.root`; monorepo and single-package scaffolds use Next.js root discovery. Preserve the site's base path and `NEXT_PUBLIC_BASE_PATH`; set site identity through layout metadata and `DocsLayout` branding, not factory title options.
|
|
22
|
+
|
|
23
|
+
Install using the repository's package-manager conventions. Keep dependency or workspace changes visible in the migration diff. Do not delete the old site yet.
|
|
24
|
+
|
|
25
|
+
## Phase 2: migrate content without losing source
|
|
26
|
+
|
|
27
|
+
Copy approved content and assets into the target content root, retaining the source until parity is verified. Use the inventory to account for every file.
|
|
28
|
+
|
|
29
|
+
`oat docs migrate` converts supported MkDocs admonitions and injects missing frontmatter in `.md` files. It is a dry run by default; `--apply` writes changes. `--config` supplies MkDocs nav title hints, not a complete navigation or app migration. For example, from the repository root:
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
# Replace paths with the approved destination and preserved source config.
|
|
33
|
+
oat docs migrate --docs-dir apps/handbook/docs --config documentation/mkdocs.yml
|
|
34
|
+
# Review the preview and approve the content conversion before writing.
|
|
35
|
+
oat docs migrate --docs-dir apps/handbook/docs --config documentation/mkdocs.yml --apply
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
The command does not migrate app shells, deployment, plugins, macros, redirects or all Markdown extensions. Review seeded descriptions for meaningful content; metadata injection is not editorial completion. Convert unsupported syntax manually within the approved scope, preferring `.md` and using `.mdx` only where components require it. Preserve code examples, cautions, provenance and external attributions.
|
|
39
|
+
|
|
40
|
+
## Phase 3: preserve navigation, links and URLs
|
|
41
|
+
|
|
42
|
+
Create authored `index.md` pages with purpose and `## Contents` maps in each content directory. Map every retained page into the approved tree; use `.md` or `subdir/index.md` targets and the current dash-bullet Contents grammar. When consolidating `overview.md`, carry its content and inbound references into `index.md` and retain the old-URL mapping.
|
|
43
|
+
|
|
44
|
+
Run `oat docs nav sync --target-dir <app-root>` to generate committed `docs/**/meta.json` navigation from authored maps. Resolve unlisted pages explicitly. Do not hand-edit generated navigation. The separate app-root `index.md` manifest is generated by `oat docs generate-index` through the scaffold's `predev`/`prebuild`; it is not the authored root page.
|
|
45
|
+
|
|
46
|
+
Rewrite inbound links, relative assets and anchors using the before/after map. Test public URLs under the real base path. Choose an approved host-compatible recovery for moved URLs; do not assume Next redirects work with static export. If old URLs cannot be preserved, report the exact break and obtain a decision before deployment changes or source deletion.
|
|
47
|
+
|
|
48
|
+
## Phase 4: validate the migration
|
|
49
|
+
|
|
50
|
+
Discover and run the target app's actual lint, format, build and any link checks. Do not treat disabled/no-op scripts as validation. Run nav sync's read-only `--check` form to check committed navigation. Run existing repository gates required for package, config and workflow changes; keep exact exit codes and distinguish new failures from the baseline.
|
|
51
|
+
|
|
52
|
+
Inspect the static output and use the available browser to spot-check:
|
|
53
|
+
|
|
54
|
+
- landing and deeply nested pages, sidebar labels/order and search;
|
|
55
|
+
- old and new URLs, anchors, relative links and base-path assets;
|
|
56
|
+
- admonitions, tabs, tables, Mermaid, code blocks and custom components;
|
|
57
|
+
- title/description metadata, theme and layout behavior.
|
|
58
|
+
|
|
59
|
+
A successful build does not prove rendering or link parity. If a check cannot run, record the missing evidence and owner action; do not mark it verified. Review every inventory entry as migrated, deliberately retained, or explicitly approved for retirement, with a reason.
|
|
60
|
+
|
|
61
|
+
## Phase 5: review, switch and retain rollback
|
|
62
|
+
|
|
63
|
+
Present the content conservation diff, URL map, validation evidence, unresolved owner-review items, config changes and deployment proposal. Obtain user approval before switching the configured docs surface, changing publication workflows or retiring the old site. Use `oat-docs-analyze` for a read-only audit and the appropriate reviewed workflow for follow-up changes; do not assume docs-apply may edit app-shell or deployment configuration.
|
|
64
|
+
|
|
65
|
+
Only after parity and approval, remove obsolete MkDocs dependencies/configuration and update repository guidance to the new authored source, generated artifacts and commands. Keep an explicit rollback reference to the prior site/config/deployment. Package publishing and production deployment require their own authorization.
|
|
66
|
+
|
|
67
|
+
## Final report
|
|
68
|
+
|
|
69
|
+
Report the approved scope, changed files and commits; source-to-target page and URL dispositions; commands and exit codes; rendered spot checks; the configured docs root and publication behavior; known failures and unverified evidence; owner-review items and decisions; and the rollback reference. State whether the migration is ready for owner acceptance, rather than treating the absence of build errors as acceptance.
|
|
70
|
+
|
|
71
|
+
## Current contract references
|
|
72
|
+
|
|
73
|
+
Within this installed skill, read [lifecycle boundaries](lifecycle-boundaries.md), [the Fumadocs contract](oat-fumadocs-contract.md) and [validation](validation.md). Load `authoring-docs` from installed scope for universal evidence and writing guidance. Inspect installed CLI help and rendered templates before executing commands; the consuming repository's instructions and approved migration scope remain authoritative.
|