@open-agent-toolkit/cli 0.1.20 → 0.1.22

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.
Files changed (63) hide show
  1. package/assets/agents/oat-reviewer.md +48 -10
  2. package/assets/docs/cli-utilities/config-and-local-state.md +12 -0
  3. package/assets/docs/cli-utilities/configuration.md +19 -1
  4. package/assets/docs/contributing/documentation.md +6 -2
  5. package/assets/docs/docs-tooling/add-docs-to-a-repo.md +24 -14
  6. package/assets/docs/docs-tooling/commands.md +16 -14
  7. package/assets/docs/docs-tooling/workflows.md +22 -9
  8. package/assets/docs/reference/cli-reference.md +6 -2
  9. package/assets/docs/reference/docs-index-contract.md +28 -6
  10. package/assets/docs/reference/index.md +1 -1
  11. package/assets/docs/workflows/projects/implementation-execution.md +1 -1
  12. package/assets/docs/workflows/projects/reviews.md +41 -0
  13. package/assets/docs/workflows/skills/index.md +3 -1
  14. package/assets/public-package-versions.json +4 -4
  15. package/assets/skills/authoring-docs/SKILL.md +135 -0
  16. package/assets/skills/authoring-docs/references/categories.md +251 -0
  17. package/assets/skills/authoring-docs/references/information-architecture.md +156 -0
  18. package/assets/skills/authoring-docs/references/page-types.md +119 -0
  19. package/assets/skills/authoring-docs/references/principles.md +98 -0
  20. package/assets/skills/authoring-docs/references/review-rubric.md +169 -0
  21. package/assets/skills/authoring-docs/references/templates.md +549 -0
  22. package/assets/skills/authoring-docs/references/workflow.md +133 -0
  23. package/assets/skills/authoring-docs/references/writing-style.md +128 -0
  24. package/assets/skills/oat-agent-instructions-analyze/SKILL.md +43 -13
  25. package/assets/skills/oat-docs-analyze/SKILL.md +183 -28
  26. package/assets/skills/oat-docs-analyze/references/analysis-artifact-template.md +101 -1
  27. package/assets/skills/oat-docs-analyze/references/directory-assessment-criteria.md +16 -0
  28. package/assets/skills/oat-docs-analyze/references/quality-checklist.md +83 -3
  29. package/assets/skills/oat-docs-authoring/SKILL.md +193 -0
  30. package/assets/skills/oat-docs-authoring/references/docs-root-resolution.md +64 -0
  31. package/assets/skills/oat-docs-authoring/references/lifecycle-boundaries.md +51 -0
  32. package/assets/skills/oat-docs-authoring/references/oat-fumadocs-contract.md +77 -0
  33. package/assets/skills/oat-docs-authoring/references/targeted-authoring-workflow.md +61 -0
  34. package/assets/skills/oat-docs-authoring/references/validation.md +61 -0
  35. package/assets/skills/oat-docs-bootstrap/SKILL.md +15 -11
  36. package/assets/skills/oat-docs-bootstrap/assets/AGENTS.md.template +5 -5
  37. package/assets/skills/oat-project-discover/SKILL.md +22 -4
  38. package/assets/skills/oat-project-import-plan/SKILL.md +38 -9
  39. package/assets/skills/oat-project-plan/SKILL.md +30 -7
  40. package/assets/skills/oat-project-plan-writing/SKILL.md +45 -2
  41. package/assets/skills/oat-project-progress/SKILL.md +9 -3
  42. package/assets/skills/oat-project-quick-start/SKILL.md +40 -8
  43. package/assets/skills/oat-project-review-provide/SKILL.md +24 -11
  44. package/assets/skills/oat-project-review-receive/SKILL.md +37 -17
  45. package/dist/commands/config/index.d.ts.map +1 -1
  46. package/dist/commands/config/index.js +36 -0
  47. package/dist/commands/index.d.ts.map +1 -1
  48. package/dist/commands/index.js +2 -0
  49. package/dist/commands/init/tools/shared/skill-manifest.d.ts +1 -1
  50. package/dist/commands/init/tools/shared/skill-manifest.d.ts.map +1 -1
  51. package/dist/commands/init/tools/shared/skill-manifest.js +2 -0
  52. package/dist/commands/review/index.d.ts +3 -0
  53. package/dist/commands/review/index.d.ts.map +1 -0
  54. package/dist/commands/review/index.js +7 -0
  55. package/dist/commands/review/latest.d.ts +23 -0
  56. package/dist/commands/review/latest.d.ts.map +1 -0
  57. package/dist/commands/review/latest.js +182 -0
  58. package/dist/config/oat-config.d.ts +5 -0
  59. package/dist/config/oat-config.d.ts.map +1 -1
  60. package/dist/config/oat-config.js +12 -0
  61. package/dist/config/resolve.d.ts.map +1 -1
  62. package/dist/config/resolve.js +4 -0
  63. package/package.json +2 -2
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: oat-reviewer
3
- version: 1.1.0
3
+ version: 1.1.2
4
4
  description: Unified reviewer for OAT projects - mode-aware verification of requirements/design alignment and code quality. Writes a review artifact to disk by default, or returns structured findings in-memory when dispatched in structured-output mode.
5
5
  tools: Read, Bash, Grep, Glob, Write
6
6
  color: yellow
@@ -10,10 +10,11 @@ color: yellow
10
10
 
11
11
  You are an OAT reviewer. You perform independent reviews for OAT projects.
12
12
 
13
- You may be asked to do either:
13
+ You may be asked to do one of:
14
14
 
15
15
  - **Code review**: verify implementation against spec/design/plan + pragmatic code quality.
16
16
  - **Artifact review**: review an artifact (spec/design/plan) for completeness/clarity/readiness and alignment with upstream artifacts.
17
+ - **Analysis review**: fact-check a severity-rated analysis artifact for evidence accuracy, justified severity, and actionable recommendations.
17
18
 
18
19
  **Critical mindset:** Assume you know nothing about this project. Trust only written artifacts and code. Do NOT trust summaries or claims - verify by reading actual files.
19
20
 
@@ -44,10 +45,11 @@ Some findings are artifact drift rather than implementation defects. If shipped
44
45
  You will be given a "Review Scope" block including:
45
46
 
46
47
  - **project**: Path to project directory (e.g., `.oat/projects/shared/my-feature/`)
47
- - **type**: `code` or `artifact`
48
- - **scope**: What to review (`pNN-tNN` task, `pNN` phase, `pNN-pMM` contiguous phase range, `final`, `BASE..HEAD` range, or an artifact name like `spec` / `design`)
48
+ - **type**: `code`, `artifact`, or `analysis`
49
+ - **scope**: What to review (`pNN-tNN` task, `pNN` phase, `pNN-pMM` contiguous phase range, `final`, `BASE..HEAD` range, an artifact name like `spec` / `design` / `plan`, or an analysis sub-kind: `docs` / `agent-instructions`)
49
50
  - **commits/range**: Git commits or SHA range for changed files. For code review, this is the authoritative review surface.
50
51
  - **files_changed**: Optional orientation hint listing files believed to be modified in scope. If this disagrees with the commit range, trust the commit range.
52
+ - **analysis_artifact**: For `type: analysis`, path to the severity-rated analysis artifact to fact-check.
51
53
  - **workflow_mode**: `spec-driven` | `quick` | `import` (default to `spec-driven` if absent)
52
54
  - **artifact_paths**: Paths to available artifacts (spec/design/plan/implementation/discovery/import reference)
53
55
  - **tasks_in_scope**: Task IDs being reviewed (if task/phase scope)
@@ -89,7 +91,10 @@ Read available artifacts to understand what SHOULD have been built:
89
91
  - `spec-driven`: read `spec.md` and `design.md`.
90
92
  - `quick`: read `discovery.md` and `plan.md`; read `spec.md`/`design.md` only if they exist.
91
93
  - `import`: read `plan.md` and `references/imported-plan.md` (if present); read `spec.md`/`design.md` only if they exist.
92
- 3. In your notes and review summary, explicitly list which artifacts were available and used.
94
+ 3. For `type: analysis`, read `analysis_artifact` and then inspect only the cited evidence sources needed to verify its findings:
95
+ - `scope: docs`: consult the docs contract, docs navigation/index files, and cited docs source files relevant to the analysis.
96
+ - `scope: agent-instructions`: consult the repo/root instruction files, provider instruction files, and cited skill/agent instruction files relevant to the analysis.
97
+ 4. In your notes and review summary, explicitly list which artifacts were available and used.
93
98
 
94
99
  ### Step 2: Verify Scope
95
100
 
@@ -149,6 +154,7 @@ Treat the artifact as a product deliverable. Verify it is:
149
154
  - `spec-driven`: spec + design
150
155
  - `quick`: discovery (+ spec/design if present)
151
156
  - `import`: imported-plan reference (+ discovery/spec/design if present)
157
+ - For import-mode `plan` reviews, bias findings toward canonical-format conformance and completeness. Do not rewrite the imported author's intent merely to match OAT house style.
152
158
 
153
159
  4. **Actionable**
154
160
  - Clear next steps and readiness signals
@@ -156,6 +162,15 @@ Treat the artifact as a product deliverable. Verify it is:
156
162
  - For design: requirement-to-test mapping exists and includes concrete scenarios
157
163
  - For plan: tasks have clear verification commands and commit messages
158
164
 
165
+ 5. **Plan-specific checklist**
166
+ - Canonical-format conformance: required frontmatter and sections are present, the Reviews table exists, and artifact/code rows are shaped consistently.
167
+ - Stable task IDs: task headings use `pNN-tNN`, IDs are monotonic within each phase, and review-generated tasks do not reuse prior IDs.
168
+ - Required sections: the plan includes Reviews, Implementation Complete, and References sections without placeholder-only critical content.
169
+ - Review-table preservation: existing review rows are preserved; never require deleting rows to "clean up" the table.
170
+ - Task atomicity and verifiability: each task is independently committable, has bounded file scope, and declares verification that can actually be run.
171
+ - Coverage of design/discovery: every in-scope design component or discovery decision is mapped to at least one task or explicitly deferred/out of scope.
172
+ - Parallelism-claim sanity: any parallel phase group or parallelism statement is consistent with declared file boundaries and dependency order.
173
+
159
174
  ### Step 5: Verify Design Alignment
160
175
 
161
176
  This step applies to **code reviews** only.
@@ -181,6 +196,29 @@ For each design decision relevant to scope:
181
196
  - When the implementation is defensible, write the finding as stale-artifact alignment guidance instead of a code defect.
182
197
  - Include enough rationale for `oat-project-review-receive` to convert the finding into an artifact-alignment task or explicit deferral.
183
198
 
199
+ ### Step 5.5: Verify Analysis Accuracy
200
+
201
+ This step applies to **analysis reviews** only.
202
+
203
+ Review the analysis artifact as a fact-checking target, not as a rewrite request. Verify:
204
+
205
+ 1. **Evidence exists**
206
+ - Every severity-rated finding cites real evidence with file/line references or an equivalent precise artifact pointer.
207
+ - Open each cited file/location that materially supports the finding; if the cited evidence is absent, stale, or unrelated, add a finding.
208
+
209
+ 2. **Severity is justified**
210
+ - Critical/Important findings must describe concrete user-visible, workflow, correctness, security, or maintainability impact.
211
+ - Medium/Minor findings must not be inflated solely because they are easy to fix.
212
+
213
+ 3. **Recommendations are accurate**
214
+ - Suggested fixes must match the actual repo contracts and existing file conventions.
215
+ - For `docs` analysis, do not invent docs-app contract checks; cite the docs contract or source file that establishes the rule.
216
+ - For `agent-instructions` analysis, do not invent provider or instruction-file requirements; cite the relevant instruction file, skill, agent, or provider reference.
217
+
218
+ 4. **No hallucinated contract checks**
219
+ - If the analysis asserts a required section, schema field, version rule, provider behavior, or workflow invariant, verify that the contract exists in repo artifacts or authoritative cited sources.
220
+ - If a recommendation is stylistic or optional, ensure the analysis labels it as such instead of treating it as a hard contract.
221
+
184
222
  ### Step 6: Verify Code Quality
185
223
 
186
224
  This step applies to **code reviews** only.
@@ -256,11 +294,11 @@ Write the review artifact to the specified path.
256
294
  oat_generated: true
257
295
  oat_generated_at: YYYY-MM-DD
258
296
  oat_review_scope: { scope }
259
- oat_review_type: { code|artifact }
297
+ oat_review_type: { code|artifact|analysis }
260
298
  oat_project: { project-path }
261
299
  ---
262
300
 
263
- # {Code|Artifact} Review: {scope}
301
+ # {Code|Artifact|Analysis} Review: {scope}
264
302
 
265
303
  **Reviewed:** YYYY-MM-DD
266
304
  **Scope:** {scope description}
@@ -351,9 +389,9 @@ Return to your main session and run the `oat-project-review-receive` skill.
351
389
 
352
390
  ## Structured-Output Mode
353
391
 
354
- When the dispatch payload sets `oat_output_mode: structured`, the output sink changes — nothing else does. Run the full review (Steps 1-7) exactly as in artifact mode, then:
392
+ When the dispatch payload sets `oat_output_mode: structured`, the output sink changes — nothing else does. Run the full review (Steps 1-7, including Step 5.5 for `type: analysis`) exactly as in artifact mode, then:
355
393
 
356
- 1. **Do NOT write a review artifact.** Skip Step 8 entirely. In this mode you MUST NOT write to any path under `{project}/reviews/` (or anywhere else). The caller — the project-rail `oat-project-review-provide-remote` skill's Tier 1 dispatch — consumes your return value in-memory and posts it to GitHub itself; GitHub is the source of truth on that rail, so a local artifact would be redundant and is explicitly disallowed.
394
+ 1. **Do NOT write a review artifact.** Skip Step 8 entirely. In this mode you MUST NOT write to any path under `{project}/reviews/` (or anywhere else). The caller consumes your return value in-memory, whether that caller posts to GitHub, runs an auto artifact-review loop, or performs another structured workflow.
357
395
  2. **Instead of Step 9's confirmation, return a `StructuredFindings` object** as your response. Do not also return the artifact-mode confirmation block.
358
396
 
359
397
  **`StructuredFindings` return shape** (canonical schema: `design.md` → Data Models → StructuredFindings):
@@ -381,7 +419,7 @@ interface StructuredFindings {
381
419
  - `id` prefixes follow the existing convention (`C`/`I`/`M`/`m`) and are stable within a single dispatch — no renumbering.
382
420
  - `verification_commands` carries what Step 8's "Verification Commands" section would have carried, as an array of command strings.
383
421
 
384
- Default behavior is unaffected: when `oat_output_mode` is absent or set to anything other than `structured`, follow Steps 8-9 and write the artifact exactly as before.
422
+ Default behavior is unaffected: when `oat_output_mode` is absent or set to anything other than `structured`, follow Steps 8-9 and write the artifact exactly as before. Analysis reviews MUST honor `oat_output_mode: structured` whenever supplied by an auto-review loop: return the `StructuredFindings` object and write no artifact.
385
423
 
386
424
  ## Critical Rules
387
425
 
@@ -76,6 +76,18 @@ Tool-pack installation state also lives here as shared repo config:
76
76
 
77
77
  Use `oat config get tools.<pack>` when you need an explicit installed-capability signal for workflows or troubleshooting.
78
78
 
79
+ Workflow automation preferences are also visible through `oat config` and can be set at local, shared, or user scope. Notable review-loop keys:
80
+
81
+ - `workflow.autoArtifactReview.plan` - default-on bounded artifact review for generated `plan.md` files before implementation handoff
82
+ - `workflow.autoArtifactReview.analysis` - default-on bounded accuracy review for generated docs and agent-instructions analysis artifacts before apply workflows consume them
83
+
84
+ Use `oat config describe workflow.autoArtifactReview.plan` or `oat config describe workflow.autoArtifactReview.analysis` to inspect precedence, defaults, and writable surfaces. Set either key to `false` only when you intentionally want to bypass that generated-artifact review loop:
85
+
86
+ ```bash
87
+ oat config set workflow.autoArtifactReview.plan false --shared
88
+ oat config set workflow.autoArtifactReview.analysis false --local
89
+ ```
90
+
79
91
  When archive settings are configured, completion uploads dated archive snapshots to S3, exports dated summary snapshots into the configured summary reference directory, and lets `oat-wrap-up` write tracked wrap-up reports into the configured wrap-up directory.
80
92
 
81
93
  Use these reference pages for file ownership and schema details:
@@ -255,13 +255,26 @@ Workflow preference keys live under the `workflow.*` namespace:
255
255
  - `workflow.reviewExecutionModel` — `subagent`, `inline`, or `fresh-session`. Default final-review execution model in `oat-project-implement`. `subagent` and `inline` run automatically. `fresh-session` is a soft preference: the skill prints guidance to run the review in another session but still offers escape hatches to `subagent` or `inline` if you change your mind. When unset, the skill prompts.
256
256
  - `workflow.autoReviewAtHillCheckpoints` — boolean. Automatically run the extra lifecycle review when a HiLL checkpoint is reached. This does not control Tier 1 per-phase `oat-reviewer` gates, which run after each phase in Tier 1 regardless of this setting. When unset, the skill prompts.
257
257
  - `workflow.autoNarrowReReviewScope` — boolean. Auto-narrow re-review scope to fix-task commits only in `oat-project-review-provide`. When unset, the skill prompts.
258
+ - `workflow.autoArtifactReview.plan` — boolean, default `true`. Automatically run the bounded artifact-review loop for generated `plan.md` files before implementation handoff. Set to `false` only when you intentionally want to skip the plan artifact review.
259
+ - `workflow.autoArtifactReview.analysis` — boolean, default `true`. Automatically run the bounded accuracy-review loop for generated docs and agent-instructions analysis artifacts before the matching apply workflow consumes them.
258
260
  - `workflow.dispatchCeiling.preset` — `balanced`, `maximum`, or `cost-conscious`. Convenience preset that compiles to per-provider values at write time. Setting this key is the recommended way to configure the ceiling.
259
261
  - `workflow.dispatchCeiling.providers.codex` — `low`, `medium`, `high`, or `xhigh`. Concrete Codex ceiling. Set automatically when a preset is selected; also settable directly for Advanced (no preset) configurations. Provider default effort is informational for base/unpinned roles and is not treated as this ceiling.
260
262
  - `workflow.dispatchCeiling.providers.claude` — `haiku`, `sonnet`, or `opus`. Concrete Claude ceiling. Set automatically when a preset is selected; also settable directly for Advanced configurations. Claude has no separate per-dispatch effort axis, so the effort axis remains `not-applicable`.
261
263
 
264
+ ### Auto artifact-review preferences
265
+
266
+ `workflow.autoArtifactReview.*` controls the artifact-quality loops that run before downstream workflow steps consume generated artifacts. Both keys are default-on. Only an explicit `false` disables the matching loop:
267
+
268
+ | Key | Default | Controls |
269
+ | -------------------------------------- | ------- | ------------------------------------------------------------------------ |
270
+ | `workflow.autoArtifactReview.plan` | `true` | `plan.md` artifact review after plan authoring and before implementation |
271
+ | `workflow.autoArtifactReview.analysis` | `true` | Accuracy review for generated docs and agent-instructions analysis files |
272
+
273
+ The loops use `oat-reviewer` structured-output mode. They do not write standalone review artifacts unless the calling workflow records an outcome row or tracking metadata. The retry bound comes from the project `oat_orchestration_retry_limit` setting and defaults to `2`.
274
+
262
275
  ### Three-layer resolution
263
276
 
264
- Workflow preferences resolve through three config surfaces, with `env > local > shared > user > default` precedence per key. This is the same generic resolution used by `oat config dump`:
277
+ Workflow preferences resolve through three config surfaces, with `local > shared > user > default` precedence per key. `oat config dump` can also report an `env` source for keys that have explicit environment aliases, such as `projects.root` and `worktrees.root`; `workflow.autoArtifactReview.plan` and `workflow.autoArtifactReview.analysis` do not have environment aliases and use config-file/default resolution.
265
278
 
266
279
  - **User-level** (`~/.oat/config.json`): personal defaults that apply to every repo. This is where most power users should start — set preferences once, never worry about them again.
267
280
  - **Shared repo** (`.oat/config.json`): team decisions for this repo. Overrides user defaults when present.
@@ -282,16 +295,20 @@ oat config set workflow.autoReviewAtHillCheckpoints true --user
282
295
  oat config set workflow.autoNarrowReReviewScope true --user
283
296
  oat config set workflow.designMode selective --user
284
297
  oat config set workflow.dispatchCeiling.preset balanced --user
298
+ oat config set workflow.autoArtifactReview.plan true --user
299
+ oat config set workflow.autoArtifactReview.analysis true --user
285
300
 
286
301
  # Shared repo: team decision for this repo
287
302
  oat config set workflow.createPrOnComplete false --shared
288
303
  oat config set workflow.designMode collaborative --shared
289
304
  oat config set workflow.dispatchCeiling.preset balanced --shared
305
+ oat config set workflow.autoArtifactReview.plan false --shared
290
306
 
291
307
  # Repo-local: personal override for this repo (default when no flag)
292
308
  oat config set workflow.hillCheckpointDefault every
293
309
  oat config set workflow.designMode draft
294
310
  oat config set workflow.dispatchCeiling.providers.codex medium # Advanced: per-provider override
311
+ oat config set workflow.autoArtifactReview.analysis false
295
312
  ```
296
313
 
297
314
  Default (no flag) targets `.oat/config.local.json` for workflow keys. Pass at most one of `--user`, `--shared`, or `--local`. Structural keys (`projects.root`, `worktrees.root`, `git.*`, `documentation.*`, `archive.*`, `tools.*`) are still shared-only regardless of flag.
@@ -312,6 +329,7 @@ Some preferences are **genuinely personal** — their correct value is the same
312
329
 
313
330
  Other preferences **depend on per-repo configuration** to be safe. These should be set at `--shared` (in each repo where they apply), not `--user`:
314
331
 
332
+ - `workflow.autoArtifactReview.plan` / `workflow.autoArtifactReview.analysis` — default to `true`; use shared config only when a repo intentionally opts out of generated-artifact review loops, and local config for one-off debugging or emergency bypasses.
315
333
  - `workflow.archiveOnComplete` — correctness depends on the repo's `archive.s3Uri` / `archive.s3SyncOnComplete` being configured. A user-level `true` would try to archive in repos that aren't set up for it.
316
334
  - `workflow.postImplementSequence` — correctness depends on `documentation.requireForProjectCompletion`. Setting `pr` at user level would foot-gun you in any repo that requires docs, because completion would later block on the docs gate while the PR is already open.
317
335
  - `workflow.createPrOnComplete` — this key is almost always redundant with `postImplementSequence`-driven flows. When it's meaningful, its correctness depends on the same per-repo docs and PR gates. Prefer shared scope, or omit it entirely and rely on `postImplementSequence: pr` or `docs-pr` to handle PR creation at the end of implement.
@@ -12,6 +12,7 @@ Documentation should ship with the code it explains. This page covers the core d
12
12
  - Every documentation directory must contain an `index.md`.
13
13
  - Each `index.md` must include a `## Contents` section.
14
14
  - The `## Contents` section is the machine-readable local map for sibling pages and child directories.
15
+ - Use `.md`-suffixed relative links in `## Contents`: `[Page](page.md)` for leaf pages and `[Section](subdir/index.md)` for child directories.
15
16
 
16
17
  ## Local workflow
17
18
 
@@ -51,7 +52,10 @@ Documentation should ship with the code it explains. This page covers the core d
51
52
 
52
53
  - Keep docs aligned with the current repo behavior and current command surface.
53
54
  - Prefer cross-links over duplicated conceptual content.
54
- - When you add, remove, or rename docs pages, refresh the generated docs surface:
55
+ - Use `oat-docs-authoring` for targeted OAT/Fumadocs docs edits; it delegates
56
+ universal page-quality guidance to `authoring-docs` and keeps local
57
+ navigation, generated-index, and validation expectations in scope.
58
+ - When you add, remove, or rename docs pages, refresh the generated Fumadocs root index. It is a generated file-tree manifest that should be checked against authored `docs/**/index.md` maps, not hand-edited:
55
59
 
56
60
  ```bash
57
61
  pnpm -w run cli -- docs generate-index --docs-dir apps/oat-docs/docs --output apps/oat-docs/index.md
@@ -63,7 +67,7 @@ Documentation should ship with the code it explains. This page covers the core d
63
67
 
64
68
  - Treat `index.md` plus its `## Contents` section as the local discovery source of truth.
65
69
  - Prefer linking to source files and commands explicitly when documenting behavior.
66
- - Regenerate the docs surface index after adding or removing pages.
70
+ - Regenerate or freshness-check the docs surface index after adding, removing, renaming, or reordering pages.
67
71
 
68
72
  ## Related Guides
69
73
 
@@ -46,9 +46,10 @@ Legacy pack-specific path:
46
46
  oat init tools docs
47
47
  ```
48
48
 
49
- The docs pack installs `oat-docs-analyze`, `oat-docs-apply`,
50
- `oat-agent-instructions-analyze`, and `oat-agent-instructions-apply`. For this
51
- quickstart, the docs pair is the part you need immediately.
49
+ The docs pack installs `authoring-docs`, `oat-docs-authoring`,
50
+ `oat-docs-analyze`, `oat-docs-apply`, `oat-agent-instructions-analyze`, and
51
+ `oat-agent-instructions-apply`. For this quickstart, the authoring and docs
52
+ analysis/apply skills are the parts you need immediately.
52
53
 
53
54
  ## 3. Scaffold the docs app
54
55
 
@@ -76,7 +77,7 @@ What the skill adds over the raw CLI:
76
77
  - **Build verification.** Runs install + build, classifies failures against known patterns, stops on unknown errors rather than guessing.
77
78
  - **Config inspection.** Reads `.oat/config.json` back, verifies paths exist on disk, handles the nested-standalone dual-config case, and collects the `requireForProjectCompletion` opt-in explicitly.
78
79
  - **Root-build explanation.** When the CLI safely patches a compatible Turbo root `build` script, the walkthrough explains why the filter was added, shows the diff shape, and documents how to adjust or revert it. When the CLI skips the patch, the walkthrough relays the recommended manual snippet.
79
- - **Educational walkthrough.** Seven sections covering the `documentation` config, the two-`index.md` model, the `## Contents` contract (with extension discipline), the three agent-instruction surfaces (root `AGENTS.md` pointer / docs-app `AGENTS.md` / `docs/contributing.md`), Fumadocs internals (or MkDocs Minimum Contract), and the OAT docs ecosystem (`oat-project-document`, `oat-docs-analyze`, `oat-docs-apply`).
80
+ - **Educational walkthrough.** Seven sections covering the `documentation` config, the authored-source/generated-navigation model, the `## Contents` contract (with extension discipline), the three agent-instruction surfaces (root `AGENTS.md` pointer / docs-app `AGENTS.md` / `docs/contributing.md`), Fumadocs internals (or MkDocs Minimum Contract), and the OAT docs ecosystem (`oat-project-document`, `oat-docs-analyze`, `oat-docs-apply`).
80
81
  - **Optional content kickoff.** Hands off to `oat-docs-analyze` + `oat-docs-apply` if you want to populate initial repo-specific content immediately.
81
82
 
82
83
  Capability-gated: every post-patch self-ratchets off as CLI fixes land upstream. The skill's labeled markers (`<!-- FP-NN patch -->`) are how you find them later when the CLI catches up.
@@ -115,25 +116,32 @@ root `build:docs` script is available for docs-only builds. Use
115
116
  `--no-root-patch` to opt out, or `--dry-run` to preview the diff without
116
117
  writing it.
117
118
 
118
- ## 3a. Migrating from MkDocs (optional)
119
+ ### 3c. Existing MkDocs content
119
120
 
120
- If you have an existing MkDocs site and want to switch to Fumadocs, use the
121
- migration command after scaffolding:
121
+ Bootstrap is not the migration workflow. If you have an existing MkDocs site
122
+ and want to switch to Fumadocs, treat that as a separate migration workstream.
123
+ The CLI migration helper can convert common Markdown syntax and frontmatter:
122
124
 
123
125
  ```bash
124
126
  oat docs migrate --docs-dir docs --config mkdocs.yml --apply
125
127
  ```
126
128
 
127
- This converts MkDocs admonitions to GFM callouts and injects frontmatter
128
- metadata. Run without `--apply` first to preview changes.
129
+ Run without `--apply` first to preview changes. For a full MkDocs-to-Fumadocs
130
+ refactor, use the assigned migration handoff guide or project plan; do not make
131
+ `oat-docs-bootstrap` own that migration.
129
132
 
130
133
  ## 4. Start authoring docs with the OAT contract
131
134
 
135
+ Use `oat-docs-authoring` for targeted OAT/Fumadocs content edits or local
136
+ restructuring. It uses `authoring-docs` for the portable documentation baseline
137
+ and adds the OAT-specific navigation, generated-index, and validation contract.
138
+
132
139
  Core rules:
133
140
 
134
141
  - every docs directory should have an `index.md`
135
142
  - every `index.md` should include a `## Contents` section
136
143
  - the `## Contents` section should map sibling pages and immediate child directories
144
+ - `## Contents` links should use `.md`-suffixed relative targets, including `subdir/index.md` for child directories
137
145
 
138
146
  For **MkDocs** apps, regenerate navigation after adding or moving pages:
139
147
 
@@ -141,16 +149,18 @@ For **MkDocs** apps, regenerate navigation after adding or moving pages:
141
149
  oat docs nav sync --target-dir apps/my-docs
142
150
  ```
143
151
 
144
- For **Fumadocs** apps, the docs index is generated automatically via
145
- `predev`/`prebuild` hooks. You can also run it manually:
152
+ For **Fumadocs** apps, the app-root docs index manifest is generated from the
153
+ Markdown file tree automatically via `predev`/`prebuild` hooks. You can also
154
+ run it manually:
146
155
 
147
156
  ```bash
148
157
  oat docs generate-index --docs-dir docs
149
158
  ```
150
159
 
151
160
  The generated app-root `index.md` is machine-owned and now starts with an
152
- `AUTOGENERATED` warning comment. Edit authored pages under `docs/`, not the
153
- generated root index.
161
+ `AUTOGENERATED` warning comment. Edit authored pages and `## Contents` maps
162
+ under `docs/`, then compare the generated manifest against those maps when
163
+ checking freshness.
154
164
 
155
165
  ## 5. Analyze the docs surface
156
166
 
@@ -193,7 +203,7 @@ Important:
193
203
  1. `oat init --scope project`
194
204
  2. `oat tools install docs`
195
205
  3. `oat docs init --app-name my-docs`
196
- 4. (optional) `oat docs migrate --docs-dir docs --config mkdocs.yml --apply`
206
+ 4. (optional) handle MkDocs migration as a separate workstream; use `oat docs migrate --docs-dir docs --config mkdocs.yml --apply` only for the syntax/frontmatter helper
197
207
  5. Author docs with `index.md` + `## Contents`
198
208
  6. `oat docs nav sync --target-dir apps/my-docs` (MkDocs) or `oat docs generate-index` (Fumadocs)
199
209
  7. `/oat-docs-analyze`
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  title: Docs App Commands
3
- description: 'Docs scaffolding CLI surface for Fumadocs/MkDocs, migration, index generation, and nav sync.'
3
+ description: 'Docs scaffolding CLI surface for Fumadocs/MkDocs, migration helpers, Fumadocs index generation, and MkDocs nav sync.'
4
4
  ---
5
5
 
6
6
  # Docs App Commands
@@ -11,20 +11,20 @@ and **MkDocs Material**.
11
11
 
12
12
  ## Quick Look
13
13
 
14
- - What it does: documents the docs-specific CLI surface for scaffolding apps, migrating markdown, generating indexes, and syncing navigation.
14
+ - What it does: documents the docs-specific CLI surface for scaffolding apps, migrating markdown, generating Fumadocs app-root index manifests, and syncing MkDocs navigation.
15
15
  - When to use it: when you already know you are working on a docs surface and need the exact command-level behavior.
16
16
  - Primary commands: `oat docs init`, `oat docs migrate`, `oat docs generate-index`, `oat docs nav sync`
17
17
 
18
18
  ## Command surface
19
19
 
20
- | Command | Purpose |
21
- | ------------------------- | ------------------------------------------------------------------------------------ |
22
- | `oat docs init` | Scaffold a new docs app (Fumadocs or MkDocs). |
23
- | `oat docs migrate` | Convert MkDocs admonitions to GFM callouts and inject frontmatter. |
24
- | `oat docs generate-index` | Generate a docs index from the markdown file tree. |
25
- | `oat docs nav sync` | Regenerate `mkdocs.yml` navigation from directory `index.md` `## Contents` sections. |
26
- | `oat docs analyze` | CLI entrypoint that points users to the `oat-docs-analyze` skill. |
27
- | `oat docs apply` | CLI entrypoint that points users to the `oat-docs-apply` skill. |
20
+ | Command | Purpose |
21
+ | ------------------------- | ----------------------------------------------------------------------------- |
22
+ | `oat docs init` | Scaffold a new docs app (Fumadocs or MkDocs). |
23
+ | `oat docs migrate` | Convert MkDocs admonitions to GFM callouts and inject frontmatter. |
24
+ | `oat docs generate-index` | Generate a Fumadocs app-root docs index manifest from the Markdown file tree. |
25
+ | `oat docs nav sync` | Regenerate MkDocs `mkdocs.yml` navigation from directory `index.md` maps. |
26
+ | `oat docs analyze` | CLI entrypoint that points users to the `oat-docs-analyze` skill. |
27
+ | `oat docs apply` | CLI entrypoint that points users to the `oat-docs-apply` skill. |
28
28
 
29
29
  ## `oat docs init`
30
30
 
@@ -109,9 +109,10 @@ oat docs migrate --docs-dir docs --config mkdocs.yml --apply
109
109
 
110
110
  ## `oat docs generate-index`
111
111
 
112
- Use `oat docs generate-index` to produce a markdown index from the docs file
113
- tree. The generated index lists all pages with titles and descriptions, organized
114
- by directory structure.
112
+ Use `oat docs generate-index` to produce a generated Markdown manifest from the
113
+ docs file tree. In Fumadocs apps this is the app-root `index.md`, outside the
114
+ authored `docs/` source tree. The generated index lists all pages with titles
115
+ and descriptions, organized by directory structure.
115
116
 
116
117
  Key behavior:
117
118
 
@@ -121,6 +122,7 @@ Key behavior:
121
122
  - outputs to app root (`index.md`) by default, not inside the docs directory
122
123
  - updates `documentation.index` in `.oat/config.json`
123
124
  - prepends an `AUTOGENERATED` warning comment to the output and rewrites the file on every run; do not hand-edit the generated `index.md`
125
+ - should be freshness-checked against authored `docs/**/index.md` `## Contents` maps before treating it as navigation evidence
124
126
  - sorting: `index.md` first, then directories before files, then lexical
125
127
 
126
128
  Supported flags:
@@ -139,7 +141,7 @@ script hooks.
139
141
 
140
142
  ## `oat docs nav sync`
141
143
 
142
- Use nav sync after adding, removing, or renaming docs pages.
144
+ Use nav sync for MkDocs apps after adding, removing, or renaming docs pages.
143
145
 
144
146
  The command reads only the reserved `## Contents` section from each directory
145
147
  `index.md` and regenerates the `nav:` block in `mkdocs.yml`.
@@ -17,18 +17,26 @@ Install the workflow skills with `oat tools install docs` (preferred) or
17
17
 
18
18
  - `oat docs init` scaffolds a docs app (Fumadocs or MkDocs)
19
19
  - `oat docs migrate` converts MkDocs admonitions to GFM callouts and injects frontmatter
20
- - `oat docs generate-index` generates a docs index from the markdown file tree
21
- - `oat docs nav sync` regenerates mkdocs.yml nav from `index.md` `## Contents` sections
20
+ - `oat docs generate-index` generates a Fumadocs app-root docs index manifest from the Markdown file tree
21
+ - `oat docs nav sync` regenerates MkDocs `mkdocs.yml` nav from `index.md` `## Contents` sections
22
22
  - `oat docs analyze` and `oat docs apply` expose the workflow surface in CLI help
23
23
 
24
24
  ### Skills
25
25
 
26
+ - `authoring-docs` is the provider-agnostic baseline for evidence-first
27
+ technical documentation: page types, information architecture, category
28
+ guidance, templates, and review rubrics
29
+ - `oat-docs-authoring` layers the OAT/Fumadocs docs-app contract on top of
30
+ `authoring-docs` for targeted authoring, restructuring, link repair, and
31
+ local navigation maintenance inside an existing OAT docs app
26
32
  - `oat-docs-bootstrap` is the guided onramp for adding a docs app to a repo —
27
33
  wraps `oat docs init` with preflight detection, richer input gathering (site
28
34
  name distinct from package name), labeled post-patches for open CLI gaps,
29
35
  build verification, config inspection, and an educational walkthrough
30
36
  - `oat-docs-analyze` evaluates a docs surface for structure, drift, coverage,
31
- contributor guidance, and docs-app contract issues
37
+ contributor guidance, and docs-app contract issues, then runs the shared
38
+ auto artifact-review loop to verify the generated analysis artifact's
39
+ evidence, severities, and recommendations
32
40
  - `oat-docs-apply` consumes the analysis artifact and applies only approved,
33
41
  evidence-backed recommendations
34
42
  - `oat-project-document` performs post-implementation docs sync for a tracked project,
@@ -42,6 +50,9 @@ Install the workflow skills with `oat tools install docs` (preferred) or
42
50
  The docs workflow mirrors the agent-instructions analyze/apply split:
43
51
 
44
52
  - Analyze owns discovery, evidence gathering, confidence, and disclosure decisions
53
+ - Analyze also owns accuracy verification of the generated analysis artifact
54
+ through the shared auto artifact-review loop before the apply workflow consumes
55
+ it
45
56
  - Apply consumes the artifact, asks for approval, and must not invent new docs conventions
46
57
 
47
58
  This keeps deterministic behavior in the CLI and judgment-heavy behavior in the
@@ -50,14 +61,16 @@ skills.
50
61
  ## Typical flow
51
62
 
52
63
  1. Bootstrap a docs app with `oat-docs-bootstrap` (preferred — guided, includes post-scaffold patches and walkthrough) or `oat docs init` directly (CLI-only / non-interactive workflows)
53
- 2. (Optional) If migrating from MkDocs: `oat docs migrate --docs-dir docs --config mkdocs.yml --apply`
54
- 3. Author docs so every directory has an `index.md` with a `## Contents` section
55
- 4. Keep local `## Contents` sections current
56
- 5. Sync navigation:
64
+ 2. (Optional) If migrating from MkDocs, handle that as a separate migration workstream; `oat docs migrate --docs-dir docs --config mkdocs.yml --apply` is only the syntax/frontmatter helper
65
+ 3. Use `oat-docs-authoring` for targeted OAT/Fumadocs authoring work, with `authoring-docs` as the universal documentation-quality baseline
66
+ 4. Author docs so every directory has an `index.md` with a `## Contents` section
67
+ 5. Keep local `## Contents` sections current
68
+ 6. Refresh generated artifacts:
57
69
  - **MkDocs:** `oat docs nav sync`
58
70
  - **Fumadocs:** `oat docs generate-index` (runs automatically via `predev`/`prebuild` hooks)
59
- 6. Run `oat-docs-analyze`
60
- 7. Review the artifact and run `oat-docs-apply`
71
+ 7. Run `oat-docs-analyze`; by default it verifies the generated analysis artifact
72
+ through `workflow.autoArtifactReview.analysis`
73
+ 8. Review the artifact and run `oat-docs-apply`
61
74
 
62
75
  ## Progressive disclosure
63
76
 
@@ -33,6 +33,7 @@ The CLI is also a standalone value path. You can use `oat init`, `oat sync`, `oa
33
33
  | `oat docs ...` | Docs app bootstrap, migration, index generation, nav sync, and docs workflow entrypoints. | [Docs Tooling Commands](../docs-tooling/commands.md) |
34
34
  | `oat status` / `oat sync` / `oat providers ...` | Provider sync, drift inspection, provider configuration, and adoption behavior. | [Provider Sync](../provider-sync/index.md) |
35
35
  | `oat project ...` / `oat cleanup ...` | Project scaffolding, active-project status inspection, tracked-project listing, plan validation, archive creation, and project/artifact cleanup commands. | [Workflow & Projects](../workflows/projects/index.md) |
36
+ | `oat review ...` | Review artifact discovery helpers, including latest-review resolution for project and ad-hoc review flows. | [Reviews](../workflows/projects/reviews.md) |
36
37
  | `oat repo ...` | Repository-level workflows such as archive sync and PR-comment analysis. | [Repository Analysis](../workflows/projects/repo-analysis.md) |
37
38
 
38
39
  Notable commands introduced in the current CLI surface:
@@ -42,6 +43,7 @@ Notable commands introduced in the current CLI surface:
42
43
  - `oat project status --field <path>` - print one arbitrary dot-path field from the same status payload, e.g. `project.workflowMode` or `project.timestamps.stateUpdated`. Missing/null fields print `null`; object and array fields print compact JSON.
43
44
  - `oat project status --project-path <path>` - read from a repo-relative or absolute project path instead of `.oat/config.local.json`'s active project pointer. Combine it with `--field` or `--shell` when a skill has already resolved the target project path.
44
45
  - `oat project status --shell NAME=path ...` - print shell-safe assignments for one or more fields from one status read, e.g. `WORKFLOW_MODE='quick'`. This is the preferred multi-field read API for skills. See [Writing Skills → Reading project state](../contributing/skills.md#reading-project-state) for examples and the `npx`-backed `oat` shim contract.
46
+ - `oat review latest --json` - find the newest review artifact by `oat_generated_at`, scanning the active or specified project's `reviews/` and `reviews/archived/` directories plus ad-hoc review locations. Same-time candidates use target priority, then lifecycle recency (`final` > higher phase/task > lower phase/task). The JSON contract returns `path`, `scope`, `generatedAt`, and `kind` (`project` or `adhoc`), with `null` values when no review exists.
45
47
  - `oat project list --json` - summary state for tracked projects under the configured projects root
46
48
  - `oat project complete-state <project-path>` - apply the canonical completed-state mutation to a project's `state.md`; used by `oat-project-complete` during lifecycle closeout
47
49
  - `oat project archive [project-path]` - archive a tracked project through the same local move, summary export, and optional S3 upload path used by completion. When omitted, the project path falls back to the active project.
@@ -63,7 +65,7 @@ Per-key restrictions apply: structural keys can only be written at shared scope,
63
65
 
64
66
  ## `workflow.*` preference keys
65
67
 
66
- The `workflow.*` namespace holds user-facing workflow preferences that let you answer repetitive confirmation prompts once and have OAT skills respect the answer automatically. Seven keys:
68
+ The `workflow.*` namespace holds user-facing workflow preferences that let you answer repetitive confirmation prompts once and have OAT skills respect the answer automatically. Common keys:
67
69
 
68
70
  - `workflow.hillCheckpointDefault` (`every` | `final`) — default HiLL checkpoint behavior in `oat-project-implement`
69
71
  - `workflow.archiveOnComplete` (`boolean`) — skip the archive prompt in `oat-project-complete`
@@ -72,5 +74,7 @@ The `workflow.*` namespace holds user-facing workflow preferences that let you a
72
74
  - `workflow.reviewExecutionModel` (`subagent` | `inline` | `fresh-session`) — default final-review execution model
73
75
  - `workflow.autoReviewAtHillCheckpoints` (`boolean`) — auto-run the extra lifecycle review at HiLL checkpoints
74
76
  - `workflow.autoNarrowReReviewScope` (`boolean`) — auto-narrow re-review scope to fix-task commits
77
+ - `workflow.autoArtifactReview.plan` (`boolean`, default `true`) — auto-run the bounded `plan.md` artifact-review loop before implementation handoff
78
+ - `workflow.autoArtifactReview.analysis` (`boolean`, default `true`) — auto-run the bounded accuracy-review loop for generated analysis artifacts before apply workflows consume them
75
79
 
76
- All seven keys resolve through the 3-layer precedence chain (`env > local > shared > user > default`). See [Workflow preferences in the Configuration guide](../cli-utilities/configuration.md#workflow-preferences-workflow) for full descriptions, surface guidance, and cross-repo foot-gun examples.
80
+ These workflow keys resolve through config files and defaults (`local > shared > user > default`). Some config keys have explicit environment aliases, but `workflow.autoArtifactReview.plan` and `workflow.autoArtifactReview.analysis` do not. See [Workflow preferences in the Configuration guide](../cli-utilities/configuration.md#workflow-preferences-workflow) for full descriptions, surface guidance, and cross-repo foot-gun examples.
@@ -1,17 +1,19 @@
1
1
  ---
2
2
  title: Docs Index Contract
3
- description: 'Navigation generation contract: index.md format and authoring guidance.'
3
+ description: 'Docs source contract: authored index.md maps, generated Fumadocs manifests, and MkDocs nav sync.'
4
4
  ---
5
5
 
6
6
  # Docs Index Contract
7
7
 
8
- OAT docs navigation is generated from each directory `index.md`, not from hand-maintained `mkdocs.yml` trees.
8
+ OAT docs navigation starts from authored `docs/**/index.md` files. Each `## Contents` section is the local source of truth for sibling pages and child directories. Generated artifacts are derived from docs source and should not be edited directly.
9
9
 
10
10
  ## Rules
11
11
 
12
12
  - Every documentation directory must contain an `index.md`.
13
13
  - Every `index.md` must include a `## Contents` section.
14
- - The `## Contents` section is the only machine-readable source used by `oat docs nav sync`.
14
+ - Every `## Contents` link should use a `.md`-suffixed relative target, including child directory links such as `subdir/index.md`.
15
+ - For Fumadocs, refresh or freshness-check the generated app-root manifest after adding, removing, or renaming Markdown files. Compare that manifest against authored `## Contents` maps for drift; reordering `## Contents` does not reorder the generated manifest's file-tree sort.
16
+ - For MkDocs, run `oat docs nav sync` after adding, removing, renaming, or reordering pages. It regenerates `mkdocs.yml` from authored `## Contents` maps and preserves the order declared in each local map.
15
17
 
16
18
  ## `## Contents` format
17
19
 
@@ -28,23 +30,43 @@ Notes:
28
30
 
29
31
  - Links after `## Contents` can include short human-readable descriptions.
30
32
  - Child directories should link to their `index.md`.
33
+ - Leaf pages should link to their `.md` filename.
31
34
  - Prose outside `## Contents` is ignored by nav generation and remains freeform.
32
35
 
33
36
  ## Navigation generation
34
37
 
35
- `oat docs nav sync --target-dir <docs-app-dir>` walks the docs tree from `docs/index.md` downward and regenerates `mkdocs.yml` `nav` entries from the discovered `index.md` files.
38
+ Fumadocs and MkDocs use the same authored source, but they do not use the same generated artifact.
39
+
40
+ For Fumadocs docs apps, `oat docs generate-index` walks the Markdown file tree under `docs/` and writes the app-root generated manifest, for example `apps/oat-docs/index.md`.
41
+
42
+ ```bash
43
+ pnpm -w run cli -- docs generate-index --docs-dir apps/oat-docs/docs --output apps/oat-docs/index.md
44
+ ```
45
+
46
+ For MkDocs docs apps, `oat docs nav sync --target-dir <docs-app-dir>` walks the docs tree from `docs/index.md` downward and updates the `nav:` entries in `mkdocs.yml`.
36
47
 
37
48
  Generated behavior:
38
49
 
39
50
  - Root `docs/index.md` becomes `Home`.
40
51
  - Child directory `index.md` files become section landing pages.
41
- - Nested entries are emitted in the order they appear under each local `## Contents` block.
52
+ - Fumadocs generated entries are ordered by the file-tree generator: `index.md` first, directories before files, then lexical order.
53
+ - MkDocs nested entries are emitted in the order they appear under each local `## Contents` block.
54
+ - Fumadocs generated manifests should carry an autogen warning and are rewritten by `predev` / `prebuild`.
55
+ - MkDocs `mkdocs.yml` may contain other configuration, but its `nav:` block is derived from authored `## Contents`.
56
+
57
+ ## Generated-file boundaries
58
+
59
+ - Edit authored files under `docs/`, especially the nearest `index.md` and `## Contents`.
60
+ - Do not hand-edit a Fumadocs app-root generated `index.md`; regenerate it from the docs source tree.
61
+ - Do not hand-maintain MkDocs `nav:` entries when the local workflow uses `oat docs nav sync`.
62
+ - If a Fumadocs generated manifest lists pages that are missing from authored `## Contents`, treat that as authored-source drift or intentional generator-inventory behavior to verify before relying on the generated file as navigation evidence.
42
63
 
43
64
  ## Authoring guidance
44
65
 
45
66
  - Use `index.md` as the local discovery surface for humans and agents.
46
67
  - Add a short topic description next to each link so agents can choose the right file without opening every page.
47
- - Update `## Contents` whenever you add, remove, or rename docs files in a directory.
68
+ - Update `## Contents` whenever you add, remove, rename, or reorder docs files in a directory.
69
+ - Refresh or freshness-check the generated artifact before committing structural docs changes.
48
70
 
49
71
  ## If You Are Trying To...
50
72
 
@@ -13,7 +13,7 @@ Contributor how-to material now lives under `contributing/`, and user-facing rou
13
13
 
14
14
  - [CLI Reference](cli-reference.md) - Shallow map of the OAT command surface with links to owning sections.
15
15
  - [File Locations](file-locations.md) - Where core OAT files, assets, and artifacts live.
16
- - [Docs Index Contract](docs-index-contract.md) - Rules for directory `index.md` files and reserved `## Contents` sections.
16
+ - [Docs Index Contract](docs-index-contract.md) - Authored `index.md` maps, `.md` links, generated Fumadocs manifests, and MkDocs nav sync boundaries.
17
17
  - [OAT Directory Structure](oat-directory-structure.md) - Canonical `.oat/` tree map and the role of each major directory.
18
18
  - [Troubleshooting](troubleshooting.md) - Common issues, diagnostics, and remediation guidance.
19
19
 
@@ -29,7 +29,7 @@ The approval decision covers both phase implementation and checkpoint review for
29
29
 
30
30
  The selected tier is reported to the user and locked for the remainder of the run:
31
31
 
32
- ```
32
+ ```text
33
33
  [preflight] Checking subagent availability…
34
34
  → oat-phase-implementer + oat-reviewer: available
35
35
  → Selected: Tier 1 — Subagents