@open-agent-toolkit/cli 0.3.30 → 0.3.32

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 (34) hide show
  1. package/assets/bundle-metadata.json +1 -1
  2. package/assets/docs/docs-tooling/add-docs-to-a-repo.md +1 -1
  3. package/assets/docs/docs-tooling/check.md +24 -24
  4. package/assets/docs/docs-tooling/commands.md +1 -0
  5. package/assets/docs/docs-tooling/workflows.md +46 -19
  6. package/assets/docs/reference/configuration.md +1 -1
  7. package/assets/docs/reference/docs-index-contract.md +1 -0
  8. package/assets/public-package-versions.json +4 -4
  9. package/assets/skills/oat-agent-instructions-analyze/SKILL.md +2 -2
  10. package/assets/skills/oat-docs-analyze/SKILL.md +30 -16
  11. package/assets/skills/oat-docs-analyze/references/analysis-artifact-template.md +7 -4
  12. package/assets/skills/oat-docs-analyze/references/quality-checklist.md +2 -2
  13. package/assets/skills/oat-docs-analyze/scripts/package-drift.mjs +57 -12
  14. package/assets/skills/oat-docs-apply/SKILL.md +20 -12
  15. package/assets/skills/oat-docs-apply/references/apply-plan-template.md +3 -2
  16. package/dist/commands/config/index.d.ts.map +1 -1
  17. package/dist/commands/config/index.js +5 -0
  18. package/dist/commands/docs/check/reader-rules.d.ts.map +1 -1
  19. package/dist/commands/docs/check/reader-rules.js +8 -3
  20. package/dist/commands/docs/index-generate/generator.d.ts +9 -1
  21. package/dist/commands/docs/index-generate/generator.d.ts.map +1 -1
  22. package/dist/commands/docs/index-generate/generator.js +17 -6
  23. package/dist/commands/docs/index-generate/index.d.ts +1 -1
  24. package/dist/commands/docs/index-generate/index.d.ts.map +1 -1
  25. package/dist/commands/docs/index-generate/index.js +24 -12
  26. package/dist/commands/docs/init/content.d.ts +2 -3
  27. package/dist/commands/docs/init/content.d.ts.map +1 -1
  28. package/dist/commands/docs/init/content.js +3 -10
  29. package/dist/config/documentation-ia.d.ts +19 -0
  30. package/dist/config/documentation-ia.d.ts.map +1 -0
  31. package/dist/config/documentation-ia.js +42 -0
  32. package/dist/config/oat-config.d.ts.map +1 -1
  33. package/dist/config/oat-config.js +5 -1
  34. package/package.json +3 -3
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "oatVersion": "0.3.30"
3
+ "oatVersion": "0.3.32"
4
4
  }
@@ -69,7 +69,7 @@ For framework apps, it wraps `oat docs init` with a seven-step guided flow: pref
69
69
 
70
70
  What the framework path adds over the raw CLI:
71
71
 
72
- - **Preflight + conflict resolution.** Detects existing `documentation` config / docs app dir / root `AGENTS.md` section and walks a deliberate resolution choice (replace, abort, repair, or deferred second-app) before any mutation.
72
+ - **Preflight + existing-docs front door.** Detects existing `documentation` config / docs app dir / root `AGENTS.md` section and defaults to audit (`oat-docs-analyze` then approved `oat-docs-apply`), then exits before scaffolding. Replacement requires an explicit choice; a second app remains unsupported. See [IA selection and existing-docs routing](workflows.md#ia-selection-and-guidance).
73
73
  - **Richer inputs.** Asks for a **site name** separate from the package name, so layout branding and page metadata converge on the same display title. `createDocsConfig()` handles runtime configuration, not titles.
74
74
  - **CLI-owned guidance.** Fresh Fumadocs and MkDocs apps include app-root `AGENTS.md`, a reader-first Getting Started stub, a human contributor entry and `docs/contributing/docs-toolchain.md`. Commands state their working directory. Bootstrap observes this output; older CLIs missing it get analyze/manual CLI-template upgrade advice, rather than a second template owner. Existing and Markdown surfaces are preserved. Nested-standalone Fumadocs still uses the ESM-safe Turbopack root while monorepo and single-package apps use Next root discovery.
75
75
  - **Agent Markdown.** Fumadocs exports `/llms.txt`, `/llms-full.txt` and `/llms/<page-slugs>/content.md` (root `/llms/content.md`) from loaded `.md` readers. MDX and configured non-readers are excluded. Source headers identify how to resolve authored relative links; rendered and Markdown URLs include the deployment base path once.
@@ -69,30 +69,30 @@ fenced examples do not become headings, links, groups or diagrams. YAML
69
69
  frontmatter, GFM/reference links, explicit heading IDs, static HTML and supported
70
70
  recursive tabs participate.
71
71
 
72
- | Rule ID | Default behavior |
73
- | ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
74
- | `directory-index` | Error for a reader-bearing directory without `index.md` and a nonempty dash-bullet Contents map, invalid map grammar or unresolved strict Contents target. Ancestors of reader pages participate. |
75
- | `root-width` | Flat root Contents links warn above `rootWarn: 10`, error above `rootError: 14`. Real groups exempt the width. |
76
- | `contents-width` | Ungrouped Contents links warn above `contentsWarn: 10`, error above `contentsError: 15`. `catalog: true` or the recognized OAT generated-index marker exempts only this width rule. |
77
- | `leaf-size` | Direct reader pages include index. A leaf has no reader-bearing child directory: index-only errors; two total pages warn. |
78
- | `folder-size` | Direct reader pages including index warn above `folderWarn: 12`, error above `folderError: 20`, unless the index has real groups. |
79
- | `depth` | Content root is depth 0; warn at `depthWarn: 4`, error at `depthError: 5`. |
80
- | `page-length` | Warn above `pageLines: 500` physical source lines. Explicit `type: reference` or `reference`/`references` path segments use `referenceLines: 1000` and warn above `referenceH3: 40` real H3 headings. No default length error limit. |
81
- | `frontmatter` | Unreadable source, invalid YAML or a non-mapping frontmatter document errors. Read failures use relative paths and safe error codes; invalid metadata skips description validation while independent body checks continue at physical positions. |
82
- | `description` | Missing/empty frontmatter description errors; character lengths below `descriptionMin: 40` or above `descriptionMax: 160` warn. |
83
- | `h1` | Error unless each page has exactly one real H1. |
84
- | `links` | Error for unresolved in-root source links/anchors. No network checking. Ordinary escaping links are provenance warnings and their targets are not read. Contents links retain stricter local-map rules. |
85
- | `contents-description` | Error for descriptions ending in an ellipsis/truncation. |
86
- | `overview` | Warn below `overviewWords: 10` before Contents. |
87
- | `contents-separator` | Warn when Contents descriptions mix separators in a tree. |
88
- | `navigation` | Error for explicit navigation drift using declared ownership semantics; hand-authored/undeclared absent optional meta/pages/nav skips comparison. Nav-sync freshness stays strict; Markdown skips it. |
89
- | `commands` | Error for missing literal contributor scripts; implicit pnpm shorthand also accepts installed package/workspace `.bin` entries. Explicit pnpm run/npm run stays script-only; unresolved context errors; echo scripts warn. |
90
- | `mermaid` | Parse every real Mermaid fence using the pinned Mermaid parser. Invalid syntax errors. |
91
- | `diagram-pairs` | Diagram light/dark SVG siblings and both page references are required. Conventional diagram paths and explicit paired references participate; ordinary logos are not diagrams. |
92
- | `diagram-accessibility` | Mermaid missing `accTitle`/`accDescr` warns. SVGs require `role="img"`, nonempty title/desc. Rendered diagrams without page-visible explanatory text or an associated long description warn. |
93
- | `diagram-freshness` | Warn when changed Mermaid lacks both associated SVG changes; association follows the actual section/tab group. Missing usable Git comparison is explicitly unverified. |
94
- | `image-alt` | Warn for empty, filename/slug-like or longer than `altMax: 155` image alt text. |
95
- | `provenance` | Warn for planning/backlog/home paths, configured ticket/milestone patterns and ordinary links escaping the root. Legitimate reader docs remain visible. |
72
+ | Rule ID | Default behavior |
73
+ | ----------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
74
+ | `directory-index` | Error for a reader-bearing directory without `index.md` and a nonempty dash-bullet Contents map, invalid map grammar or unresolved strict Contents target. Ancestors of reader pages participate. |
75
+ | `root-width` | Flat root Contents links warn above `rootWarn: 10`, error above `rootError: 14`. Real groups exempt the width. |
76
+ | `contents-width` | Ungrouped Contents links warn above `contentsWarn: 10`, error above `contentsError: 15`. `catalog: true` or the recognized OAT generated-index marker exempts only this width rule. |
77
+ | `leaf-size` | Direct reader pages include index. A leaf has no reader-bearing child directory: index-only errors; two total pages warn. |
78
+ | `folder-size` | Direct reader pages including index warn above `folderWarn: 12`, error above `folderError: 20`, unless the index has real groups. |
79
+ | `depth` | Content root is depth 0; warn at `depthWarn: 4`, error at `depthError: 5`. |
80
+ | `page-length` | Warn above `pageLines: 500` physical source lines. Explicit `type: reference` or `reference`/`references` path segments use `referenceLines: 1000` and warn above `referenceH3: 40` real H3 headings. No default length error limit. `line` is the first physical line past the line limit, or the first H3 past the heading limit. |
81
+ | `frontmatter` | Unreadable source, invalid YAML or a non-mapping frontmatter document errors. Read failures use relative paths and safe error codes; invalid metadata skips description validation while independent body checks continue at physical positions. |
82
+ | `description` | Missing/empty frontmatter description errors; character lengths below `descriptionMin: 40` or above `descriptionMax: 160` warn. |
83
+ | `h1` | Error unless each page has exactly one real H1. |
84
+ | `links` | Error for unresolved in-root source links/anchors. No network checking. Ordinary escaping links are provenance warnings and their targets are not read. Contents links retain stricter local-map rules. |
85
+ | `contents-description` | Error for descriptions ending in an ellipsis/truncation. |
86
+ | `overview` | Warn below `overviewWords: 10` before Contents. |
87
+ | `contents-separator` | Warn when Contents descriptions mix separators in a tree. |
88
+ | `navigation` | Error for explicit navigation drift using declared ownership semantics; hand-authored/undeclared absent optional meta/pages/nav skips comparison. Nav-sync freshness stays strict; Markdown skips it. |
89
+ | `commands` | Error for missing literal contributor scripts; implicit pnpm shorthand also accepts installed package/workspace `.bin` entries. Explicit pnpm run/npm run stays script-only; unresolved context errors; echo scripts warn. |
90
+ | `mermaid` | Parse every real Mermaid fence using the pinned Mermaid parser. Invalid syntax errors. |
91
+ | `diagram-pairs` | Diagram light/dark SVG siblings and both page references are required. Conventional diagram paths and explicit paired references participate; ordinary logos are not diagrams. |
92
+ | `diagram-accessibility` | Mermaid missing `accTitle`/`accDescr` warns. SVGs require `role="img"`, nonempty title/desc. Rendered diagrams without page-visible explanatory text or an associated long description warn. |
93
+ | `diagram-freshness` | Warn when changed Mermaid lacks both associated SVG changes; association follows the actual section/tab group. Missing usable Git comparison is explicitly unverified. |
94
+ | `image-alt` | Warn for empty, filename/slug-like or longer than `altMax: 155` image alt text. |
95
+ | `provenance` | Warn for planning/backlog/home paths, configured ticket/milestone patterns and ordinary links escaping the root. Legitimate reader docs remain visible. |
96
96
 
97
97
  These are lint limits, distinct from authoring targets for concise pages and
98
98
  focused maps. `documentation.nonReaderPaths` uses the existing
@@ -226,6 +226,7 @@ Key behavior:
226
226
  - refuses a symlink chain that exceeds its own 32-hop cap, naming the path you supplied or the CLI derived rather than an intermediate link, and addressing the flag that owns it: an unusable **output** chain names `--output` and exits `1`; an unusable **docs directory** chain names `--docs-dir` and, when the directory was derived from `documentation.root` rather than passed explicitly, also names the `oat config set documentation.root <path>` repair and exits `2` as unusable path configuration. That cap governs the dangling links the command walks itself; a chain the operating system refuses first surfaces as its own `ELOOP` error with exit `1`, which is what a too-deep chain reports on a platform whose own limit is 32 or lower
227
227
  - writes configuration only for the Fumadocs manifest transition — recording the manifest it just wrote inside `documentation.root` in `documentation.index`, when `documentation.tooling` is `fumadocs` or the config declares neither `tooling` nor `config`. Markdown and MkDocs configurations are never written, and `documentation.root` and `documentation.config` are never modified
228
228
  - prepends an `AUTOGENERATED` warning comment to the output and rewrites the file on every run; do not hand-edit the generated `index.md`
229
+ - writes each link relative to the output file, so links resolve from where the manifest sits: a Fumadocs app-root `index.md` links `docs/guide.md` and `docs/index.md`, never itself. Whitespace, `#`, `?`, `%`, `&`, backslashes, parentheses and angle brackets in link paths are percent-encoded (UTF-8). Starting in 0.3.32; earlier manifests used docs-directory-relative links
229
230
  - should be freshness-checked against authored `docs/**/index.md` `## Contents` maps before treating it as navigation evidence
230
231
  - ordering: authored local Contents orders surviving direct entries in the hierarchical inventory; cross-directory links order the containing entry without duplicates. Child directory titles use index frontmatter, then H1, then slug. Remaining entries use index/directories/files/lexical fallback and are flagged `[unlisted in Contents]` when Contents exists. Missing Contents keeps fallback; malformed present Contents is an error
231
232
  - reports the derived docs directory in human output and as `docsDir` / `docsDirSource` under `--json`, alongside `excludes` — the effective exclusion list, `documentation.excludes`, applicable `documentation.nonReaderPaths`, then the `--exclude` flags, exactly as handed to the generator
@@ -19,7 +19,9 @@ Install the workflow skills with `oat tools install docs` (preferred) or
19
19
  - `oat docs migrate` converts MkDocs admonitions to GFM callouts and injects frontmatter
20
20
  - `oat docs generate-index` generates a Fumadocs app-root docs index manifest from the Markdown file tree
21
21
  - `oat docs nav sync` regenerates MkDocs `mkdocs.yml` nav, or strict Fumadocs `meta.json` files, from `index.md` `## Contents` sections
22
- - `oat docs analyze` and `oat docs apply` expose the workflow surface in CLI help
22
+ - [`oat docs check`](check.md) checks reader pages, navigation, contributor commands and diagrams without building a site
23
+ - [`oat docs literals`](commands.md#oat-docs-literals) supplies bounded inline-code occurrence evidence for analyze
24
+ - `oat docs analyze` and `oat docs apply` expose guidance pointers in CLI help; the skills perform analysis and apply
23
25
 
24
26
  ### Skills
25
27
 
@@ -93,8 +95,9 @@ Diagram: bootstrap once, then analyze, approve and apply only agreed improvement
93
95
  Q -->|"all skipped"| STOP
94
96
  ```
95
97
 
96
- - **Setup, once.** `oat-docs-bootstrap` checks the repo without writing, asks
97
- you to confirm its inputs, then runs `oat docs init`. Plain Markdown setup validates authored files,
98
+ - **Fresh setup or explicit adoption.** `oat-docs-bootstrap` checks the repo without writing, asks
99
+ you to confirm its inputs, then runs `oat docs init`. Existing docs default to
100
+ [analyze then approved apply](#ia-selection-and-guidance) and exit before scaffolding. Plain Markdown setup validates authored files,
98
101
  configuration and guidance without installing app dependencies or building a
99
102
  site. Fumadocs and MkDocs setup inspects CLI-owned scaffold output, installs
100
103
  dependencies, verifies the build and provides a walkthrough.
@@ -277,9 +280,10 @@ with a docs app simply because one can be scaffolded.
277
280
 
278
281
  Preflight only reads. It checks declared documentation configuration before
279
282
  discovery and checks framework evidence before assuming a populated
280
- directory is plain Markdown. The skill then summarizes your choices and asks
281
- you to confirm them before it runs `oat docs init`. The two setup paths
282
- differ from that point on.
283
+ directory is plain Markdown. Existing docs default to analyze then approved
284
+ apply and exit before scaffolding. For fresh setup or explicit adoption, the
285
+ skill summarizes your choices and asks you to confirm them before it runs
286
+ `oat docs init`. The two setup paths differ from that point on.
283
287
 
284
288
  **Plain Markdown path:** Use this when you want plain Markdown files and no
285
289
  site runtime. The skill collects a title, a dedicated repository-relative
@@ -352,8 +356,9 @@ pages, grouped headings in one flat index often suffice.
352
356
  For fresh Markdown/framework setup and explicit adoption, bootstrap proposes
353
357
  two plausible two-level trees with 5–8 representative page placements each,
354
358
  page jobs, nearest presets and tradeoffs. Analyze's `--ia` does the same in its
355
- existing analysis artifact and review loop. These are **skill arguments**;
356
- they do not add CLI bootstrap commands or flags to `oat docs init`.
359
+ existing analysis artifact and review loop. `--ia` and `--ia-guidance` are
360
+ **skill arguments**, not `oat docs init` flags. The CLI accepts the approved
361
+ selection through the paired [`--ia-preset` and `--planned-pages` flags](commands.md#approved-preset-readers).
357
362
 
358
363
  Resolve advisory sources in this order: explicit `--ia-guidance <path|url>` or
359
364
  conversation, repo `documentation.guidance`, user config, then the installed
@@ -372,8 +377,15 @@ proposal becomes durable only after approval: bootstrap/apply use `oat decision
372
377
  and an Information architecture section in the framework docs-app `AGENTS.md`
373
378
  or Markdown contributing page, plus the shared `documentation.ia` mirror.
374
379
  Authored records stay authoritative; missing/conflicting records become `ask_user`.
375
- Preset scaffolds and Feature/QA validation page templates are a later delivery;
376
- the IA Proposal template is available now.
380
+ Fresh empty targets can now materialize all six presets and their relevant
381
+ page-template subsets, including Feature and QA validation templates, through
382
+ that opt-in flag pair. Counts below 15 collapse reader tracks into grouped root
383
+ headings; 15 or more creates tracks, while `flat-small` always stays flat.
384
+ `contributing/templates/**` is excluded from reader navigation, checks and
385
+ manifests. See [preset mappings and template subsets](commands.md#approved-preset-readers),
386
+ including the MkDocs rendered-route limitation. Selection does not create the
387
+ separate approved IA decision; the IA Proposal template remains the selection
388
+ artifact.
377
389
 
378
390
  ## oat-docs-analyze
379
391
 
@@ -454,8 +466,10 @@ navigation or generated-artifact refreshes, plus a structured result listing
454
466
  applied, skipped (ID/reason), and failed IDs. Markdown retains its authored
455
467
  index and needs no framework build or nav sync; Fumadocs sidebar metadata is
456
468
  regenerated only with recorded `navOwner: nav-sync`. Hand-authored navigation
457
- gets approved edits and read-only Contents membership/order comparison;
458
- undeclared ownership becomes `ask_user`. The summary
469
+ gets approved edits and read-only Contents membership/order comparison.
470
+ [Absent optional metadata/pages/nav skips comparison](check.md); implicit
471
+ Fumadocs order is not checked. Explicit lists remain checked and nav-sync
472
+ freshness stays strict. Undeclared ownership becomes `ask_user`. The summary
459
473
  reports the applied plan and checks.
460
474
 
461
475
  **What it does without asking:** Nothing changes until you approve the plan.
@@ -481,7 +495,7 @@ work.
481
495
  ## Approval, IA records and restructuring
482
496
 
483
497
  Every analyze recommendation has a stable ID and `approval: explicit | default`.
484
- `apply all` covers only non-blocked default content repairs. Docs-package updates,
498
+ `apply all` covers only non-blocked default content repairs. Docs tooling updates,
485
499
  restructure blocks and work outside Markdown scope require individual approval
486
500
  by ID; unattended runs skip explicit items even when their IDs were supplied,
487
501
  with reason `explicit_requires_interactive_approval`. Kickoff consent is not
@@ -524,13 +538,26 @@ canonical-source judgment; not-found is initially unverified. It cannot prove
524
538
  runtime behavior, registry membership or scenario correctness. Accepted IA,
525
539
  source citations and existing recommendation approval classes still govern.
526
540
 
527
- For framework apps, offline drift compares installed `@open-agent-toolkit/docs-*` packages to the
541
+ For framework apps, offline drift compares installed `@open-agent-toolkit/docs-*` packages, and
542
+ the app's own `@open-agent-toolkit/cli` when the app declares it, to the
528
543
  running CLI's bundled `public-package-versions.json`, never registry latest.
529
- Missing installations are unverified. The recommendation includes the exact
530
- upgrade command. Individual tooling approval permits only docs-app `@open-agent-toolkit/docs-*`
531
- dependency bumps (and resulting lockfile), the admonition/frontmatter conversions
532
- already supported by `oat docs migrate`, and build verification. App config,
533
- routes and package scripts remain manual required changes.
544
+ The app-local CLI matters because its `oat docs generate-index` runs in
545
+ `predev`/`prebuild`: a stale local CLI writes a different manifest than yours, so
546
+ its drift joins the docs-package drift in the same tooling update.
547
+ Older installed packages produce an explicit drift recommendation with the
548
+ exact upgrade command. Equal versions are current. Newer packages are `ahead`: select
549
+ or update the intended CLI installation before re-analysis, without a package
550
+ downgrade command. Missing installations or bundle metadata and non-orderable
551
+ versions are `unverified` and require manual verification; hoisted-only packages
552
+ also remain unverified. Neither ahead nor unverified supplies a package-update
553
+ command or authorizes an upgrade. Individual tooling approval permits only
554
+ docs-app `@open-agent-toolkit/docs-*` dependency bumps, a bump of the app's own
555
+ `@open-agent-toolkit/cli` in the dependency section it already uses (with the
556
+ resulting lockfile), regenerating the app's generated manifest with that upgraded
557
+ CLI, the admonition/frontmatter conversions already supported by
558
+ `oat docs migrate`, and build verification. Other application dependencies,
559
+ framework upgrades, app config, routes and package scripts remain manual
560
+ required changes.
534
561
 
535
562
  ## Related docs
536
563
 
@@ -94,7 +94,7 @@ Common keys in `.oat/config.json`:
94
94
  - `worktrees.root` — where OAT-managed worktrees live
95
95
  - `git.defaultBranch` — base branch fallback for PR workflows
96
96
  - `documentation.root`, `documentation.tooling`, `documentation.config` — docs-surface ownership. With tooling `markdown`, root is the literal content directory (including nested `docs`) and `documentation.index` is authored `<root>/index.md`; Markdown adds no framework config. Framework roots retain app/source semantics. Use `oat docs init --framework markdown` or explicit `--adopt` for setup; optional manifests need external output and never change the authored index. See [Documentation path resolution](oat-directory-structure.md#documentation-path-resolution)
97
- - `documentation.ia` — shared repository-only mirror of the accepted authored IA. Set JSON with required `preset` and repo-relative `decision`, optional `tracks: [{path, principle}]`, and optional `verification: "triad" | "agent-only" | "none"`. The decision record plus Information architecture section in framework docs-app `AGENTS.md` or Markdown contributing page remain authoritative. Use `oat config set documentation.ia '{"preset":"Flat Small","decision":".oat/repo/reference/decisions/DR-example.md","verification":"none"}'`; unset removes the mirror only. Invalid shapes/paths are rejected; neither `--user` nor `--local` is supported.
97
+ - `documentation.ia` — shared repository-only mirror of the accepted authored IA. Set JSON with required `preset` (one of the `oat docs init --ia-preset` IDs: `product-engineering-qa`, `consumer-maintainer`, `domain-engineering`, `task-type`, `toolkit-cli` or `flat-small`; the matching approved label, such as `Flat Small`, is accepted as an exact alias) and repo-relative `decision`, optional `tracks: [{path, principle}]`, and optional `verification: "triad" | "agent-only" | "none"`. The decision record plus Information architecture section in framework docs-app `AGENTS.md` or Markdown contributing page remain authoritative. Use `oat config set documentation.ia '{"preset":"flat-small","decision":".oat/repo/reference/decisions/DR-example.md","verification":"none"}'`; unset removes the mirror only. Invalid shapes, unknown presets and absolute, URL or `..` paths are rejected, both when set and when stored config is read: from 0.3.32 a stored unknown preset makes config-reading commands fail until repaired with `oat config set documentation.ia '<JSON>'` or `oat config unset documentation.ia --shared`; the CLI does not check that the decision file exists, and analyze reports a missing record as `ask_user`; neither `--user` nor `--local` is supported.
98
98
  - `documentation.navOwner` — shared `nav-sync | hand-authored`, independent of recorded IA, for Fumadocs/MkDocs only. Set with `oat config set documentation.navOwner hand-authored`. Absent is undeclared (`get --json` reports null/default), never implied nav-sync; analyze asks the operator and no automatic regeneration is authorized. Markdown ignores this field. Fresh Fumadocs/MkDocs init explicitly seeds nav-sync and generates navigation after scaffold/config succeeds. Existing apps are not regenerated through bootstrap; explicit nav-sync commands retain their behavior.
99
99
  - `documentation.guidance` — advisory Markdown IA source paths/URLs, as a string or ordered non-empty string array. Repo config overrides user config; explicit skill input overrides both. Absent values use the installed `authoring-docs` IA reference. Use `oat config set documentation.guidance ./docs/ia/index.md` or `oat config set documentation.guidance '["~/guidance/index.md","https://example.com/docs/index.md"]' --user`. Arrays retain order; commas in paths are literal. `--local` is unsupported. `get --json` reports `shared`, `user`, or `default` provenance; `unset` reveals the next tier. Only locators are stored, with unrelated config fields preserved. Sources stay read-only, external packs have `index.md` and `## Contents`, and local AGENTS/contributing rules remain authoritative. Conflicts become `ask_user`. See [IA selection](../docs-tooling/workflows.md#ia-selection-and-guidance).
100
100
  - `documentation.nonReaderPaths` — shared repository-only array of content-root-relative globs for drafts/templates. Set with `oat config set documentation.nonReaderPaths 'templates/,drafts/**'`; empty value clears and `unset` removes it. Entries are trimmed/de-duplicated; non-arrays, empty or non-string entries are rejected. Local/user writes are refused. The [bounded grammar](../docs-tooling/commands.md#exclusion-patterns) matches nav inventory, explicit Contents targets, nav checks and manifests only for the configured app/content root; excluded metadata is not rewritten. Fumadocs source collections also exclude rendering when wired through OAT source config. Pinned MkDocs 1.4.2 still renders excluded pages as routes; only nav/manifest exclusion is supported.
@@ -73,6 +73,7 @@ Fumadocs generated behavior:
73
73
  - The inventory stays hierarchical. Each local Contents orders its surviving direct entries; a cross-directory link orders its containing direct entry without duplicating the page. Child directory titles come from their index frontmatter title, then H1, then slug, independently of nav labels.
74
74
  - Remaining entries use deterministic index/directories/files/lexical fallback and carry `[unlisted in Contents]` when a Contents map exists. With no Contents map the inventory keeps its fallback order; malformed present Contents reports the shared grammar errors.
75
75
  - Generated manifests should carry an autogen warning and are rewritten by `predev` / `prebuild`.
76
+ - Manifest links are relative to the manifest file, so the app-root `index.md` links docs pages as `docs/<path>.md`.
76
77
 
77
78
  ## Fumadocs Nav Sync
78
79
 
@@ -1,6 +1,6 @@
1
1
  {
2
- "cli": "0.3.30",
3
- "docs-config": "0.3.30",
4
- "docs-theme": "0.3.30",
5
- "docs-transforms": "0.3.30"
2
+ "cli": "0.3.32",
3
+ "docs-config": "0.3.32",
4
+ "docs-theme": "0.3.32",
5
+ "docs-transforms": "0.3.32"
6
6
  }
@@ -5,7 +5,7 @@ disable-model-invocation: true
5
5
  user-invocable: true
6
6
  allowed-tools: Read, Write, Bash(git:*), Glob, Grep, AskUserQuestion, Task
7
7
  metadata:
8
- version: 1.12.4
8
+ version: 1.12.5
9
9
  ---
10
10
 
11
11
  # Agent Instructions Analysis
@@ -455,7 +455,7 @@ Use the `analysis` target:
455
455
  Follow the canonical loop exactly:
456
456
 
457
457
  1. Resolve `workflow.autoArtifactReview.analysis`; missing config means enabled, and only explicit `false` skips the loop.
458
- 2. Resolve `oat_orchestration_retry_limit`; default to `2` if unavailable.
458
+ 2. Resolve the retry bound from `oat_orchestration_retry_limit` in the active OAT project's `state.md` frontmatter; it is not an `oat config` key. Default to `2` when no project is active or the value is absent or invalid.
459
459
  3. Dispatch `oat-reviewer` in structured mode via Tier 1 subagent when available, falling back to the same reviewer prompt inline when needed.
460
460
  4. Apply Critical and High fixes when they are local to the analysis artifact, companion bundle, and unambiguous.
461
461
  5. Offer Medium and Low fixes rather than applying them silently.
@@ -4,9 +4,9 @@ description: Run when you need to evaluate documentation structure, navigation,
4
4
  argument-hint: '[target] [--ia] [--ia-guidance <path|url>]'
5
5
  disable-model-invocation: true
6
6
  user-invocable: true
7
- allowed-tools: Read, Write, Bash(git:*), Bash(oat config:*), Bash(oat docs nav sync --check:*), Bash(oat docs check:*), Bash(oat docs literals:*), Bash(pnpm:*), Bash(bash:*), Bash(jq:*), Bash(node:*), Bash(mkdir:*), Bash(date:*), Bash(echo:*), Bash(cd:*), Bash(pwd:*), Glob, Grep, AskUserQuestion, Task
7
+ allowed-tools: Read, Write, Bash(git:*), Bash(oat config:*), Bash(oat docs nav sync --check:*), Bash(oat docs check:*), Bash(oat docs literals:*), Bash(pnpm:*), Bash(bash:*), Bash(jq:*), Bash(node:*), Bash(command -v:*), Bash(sed:*), Bash(npm root -g:*), Bash(test:*), Bash(oat --version), Bash(mkdir:*), Bash(date:*), Bash(echo:*), Bash(cd:*), Bash(pwd:*), Glob, Grep, AskUserQuestion, Task
8
8
  metadata:
9
- version: '1.7.4'
9
+ version: '1.8.0'
10
10
  ---
11
11
 
12
12
  # Docs Analysis
@@ -323,7 +323,9 @@ In `full` mode, evaluate the whole docs surface.
323
323
  Read the authored IA decision and `## Information architecture` section in the
324
324
  docs-app AGENTS.md (Fumadocs/MkDocs) or contributing page (Markdown).
325
325
  `documentation.ia` is a repository-only mirror: compare preset, decision path,
326
- tracks/principles and verification overlay to those authored sources. The
326
+ tracks/principles and verification overlay to those authored sources. A preset
327
+ ID and its approved label (for example `flat-small` and Flat Small) name the
328
+ same preset, not a contradiction. The
327
329
  authored record is authoritative; missing/broken records or contradictory
328
330
  mirrors become `ask_user` findings. No recorded IA means `ask_user` to choose
329
331
  and record one, not an inferred preset. Keep ordinary contract analysis useful
@@ -556,7 +558,10 @@ suppressions or automatic navigation ownership.
556
558
 
557
559
  If a generated root index or manifest exists:
558
560
 
559
- 1. Compare generated entries with the authored `## Contents` graph.
561
+ 1. Compare generated entries with the authored `## Contents` graph. Current
562
+ manifests link relative to the manifest file (an app-root manifest links
563
+ `docs/<page>.md`); links relative to the docs directory instead mean an older
564
+ CLI wrote it, so cite the CLI that regenerates it rather than content drift.
560
565
  2. Flag generated output that is missing, ignored/local-only when local guidance
561
566
  expects a tracked artifact, stale, ordered differently from authored maps, or
562
567
  unclear because generator semantics are undocumented.
@@ -616,18 +621,23 @@ record whether app migration is relevant only when evidence or user intent suppo
616
621
 
617
622
  For framework apps read their package.json and installed docs packages against
618
623
  the running CLI's bundled `assets/public-package-versions.json`, without network.
624
+ The helper covers the `@open-agent-toolkit/docs-*` packages and, when the app
625
+ declares it in any dependency section, the app-local `@open-agent-toolkit/cli`
626
+ whose `oat docs generate-index` runs in `predev`/`prebuild`; a stale local CLI
627
+ writes a different manifest than the running CLI.
619
628
  Run this skill's production helper after resolving this skill's own directory:
620
629
 
621
630
  ```bash
622
631
  node "$SKILL_DIR/scripts/package-drift.mjs" --app "<docs-app-dir>" --cli "$(command -v oat)"
623
632
  ```
624
633
 
625
- If a package-manager wrapper prevents locating the CLI root, discover the bundle
626
- from that invoked installation offline. Inspect `command -v oat` and, for a shell
627
- shim, read its `exec` lines or `cmd-shim-target` comment (for example,
628
- `sed -n '1,160p' "$(command -v oat)"`). Resolve a relative JavaScript target from
629
- the shim's directory; do not evaluate copied shell text. Locate that target's
630
- package root containing `package.json` named `@open-agent-toolkit/cli` and
634
+ `--cli` follows a direct install to its package root. For a POSIX shell shim,
635
+ such as a pnpm global `oat`, the helper reads the shim as text without executing
636
+ it: the `# cmd-shim-target=` comment first, then relative `exec` targets resolved
637
+ from the shim's real directory. If the helper still reports that it cannot
638
+ locate the running CLI bundle (a wrapper it cannot parse), locate the invoked
639
+ installation offline without evaluating wrapper text: find its JavaScript entry
640
+ and that entry's package root containing `package.json` named `@open-agent-toolkit/cli` and
631
641
  `assets/public-package-versions.json`. `pnpm root -g` or `npm root -g` can help
632
642
  locate it, but newer pnpm installations may nest it in a hashed directory; use
633
643
  the actual shim target, never another checkout's bundle. Bind the inspected paths:
@@ -655,8 +665,11 @@ The helper reports declared and installed versions, target versions and commands
655
665
  for orderable targets. If the app uses a different package manager, translate the
656
666
  command to its documented equivalent preserving package, exact target and
657
667
  dependency section. Cite the manifest, installed package path, bundle path and
658
- exact command. Report older-package drift as `tooling-update`, `approval: explicit`;
659
- describe unsupported scaffold repairs separately as `manual`. Markdown has no
668
+ exact command. Report older docs-package drift and older app-local CLI drift
669
+ together as one `tooling-update`, `approval: explicit`, listing each drifting
670
+ package's exact command in its own dependency section; apply's approved tooling
671
+ update bumps them and regenerates the manifest with the upgraded app-local CLI.
672
+ Describe unsupported scaffold repairs separately as `manual`. Markdown has no
660
673
  app-package drift check. This helper reads only and never upgrades anything.
661
674
 
662
675
  ### Step 7: Severity-Rate Findings
@@ -672,9 +685,10 @@ Use these defaults:
672
685
 
673
686
  Give every recommendation a unique stable ID (`R-001`, etc.) and
674
687
  `approval: explicit | default`; preserve IDs through review and never reuse a
675
- retired ID for a different change. `explicit` covers docs-package updates,
676
- restructure blocks and anything outside the Markdown scope (including authored
677
- IA decision/config writes). `default` covers ordinary in-scope content repairs.
688
+ retired ID for a different change. `explicit` covers tooling updates (docs
689
+ packages and the app-local CLI), restructure blocks and anything outside the
690
+ Markdown scope (including authored IA decision/config writes). `default` covers
691
+ ordinary in-scope content repairs.
678
692
  Missing evidence, `omit` and `ask_user` remain independent blockers regardless
679
693
  of approval class. Capture exact targets and commands; an explicit class is not
680
694
  permission to perform unsupported work. Apply's one input is this artifact plus
@@ -723,7 +737,7 @@ Use the `analysis` target:
723
737
  Follow the canonical loop exactly:
724
738
 
725
739
  1. Resolve `workflow.autoArtifactReview.analysis`; missing config means enabled, and only explicit `false` skips the loop.
726
- 2. Resolve `oat_orchestration_retry_limit`; default to `2` if unavailable.
740
+ 2. Resolve the retry bound from `oat_orchestration_retry_limit` in the active OAT project's `state.md` frontmatter; it is not an `oat config` key. Default to `2` when no project is active or the value is absent or invalid.
727
741
  3. Dispatch `oat-reviewer` in structured mode via Tier 1 subagent when available, falling back to the same reviewer prompt inline when needed.
728
742
  4. Apply Critical and High fixes when they are local to the analysis artifact and unambiguous.
729
743
  5. Offer Medium and Low fixes rather than applying them silently.
@@ -47,12 +47,15 @@ Do not invent missing audiences or choose an IA without approval.
47
47
  - Bundle metadata: {running CLI public-package-versions.json path or unverified}
48
48
  - Docs app manifest: {path; Markdown: not applicable}
49
49
 
50
- | Package | Declared / installed | Bundled | Status | Exact upgrade command | Recommendation ID |
51
- | ----------------------------- | ----------------------------------- | --------- | -------------------------------------- | ------------------------------------------------------------------------------ | ------------------------------------------------------- |
52
- | {@open-agent-toolkit/docs-\*} | {range / actual version or missing} | {version} | {current / drift / ahead / unverified} | {drift only: helper upgrade command adapted to actual manager; otherwise none} | {drift only: R-NNN; approval: explicit; otherwise none} |
50
+ | Package | Declared / installed | Bundled | Status | Exact upgrade command | Recommendation ID |
51
+ | --------------------------------------------- | ----------------------------------- | --------- | -------------------------------------- | ------------------------------------------------------------------------------ | ------------------------------------------------------- |
52
+ | {@open-agent-toolkit/docs-\* or declared cli} | {range / actual version or missing} | {version} | {current / drift / ahead / unverified} | {drift only: helper upgrade command adapted to actual manager; otherwise none} | {drift only: R-NNN; approval: explicit; otherwise none} |
53
53
 
54
54
  Only older installed packages (`drift`) receive a package-upgrade command and
55
- stable recommendation ID with `approval: explicit`. `current` needs no tooling
55
+ stable recommendation ID with `approval: explicit`. Docs-package drift and
56
+ app-local `@open-agent-toolkit/cli` drift share one `tooling-update` ID, each row
57
+ keeping its own dependency section in its command; apply then regenerates the
58
+ manifest with the upgraded app-local CLI. `current` needs no tooling
56
59
  recommendation, even if the helper emits a reinstall command. For `ahead`, select
57
60
  or update the intended CLI installation, then re-analyze; do not recommend a docs
58
61
  package downgrade. `unverified` requires manual verification before a package
@@ -38,8 +38,8 @@ Use this checklist when evaluating a docs surface.
38
38
 
39
39
  - Opening code fences have language identifiers.
40
40
  - Shell command examples follow the repo's documented fence convention; default
41
- to `sh` unless local guidance uses `bash` or the block requires Bash-only
42
- syntax.
41
+ to `bash` unless the example is POSIX-only (`sh`) or local guidance requires
42
+ another fence.
43
43
  - Headings are non-empty.
44
44
  - Each authored page has at most one document-level H1 unless the file is an
45
45
  intentional imported README or generated/imported artifact.
@@ -1,18 +1,15 @@
1
1
  #!/usr/bin/env node
2
2
  // Read-only, offline comparison used by oat-docs-analyze. No package resolution or install.
3
- import { readFile, realpath } from 'node:fs/promises';
4
- import { dirname, join, resolve } from 'node:path';
3
+ import { open, readFile, realpath } from 'node:fs/promises';
4
+ import { dirname, isAbsolute, join, resolve } from 'node:path';
5
5
  import { parseArgs } from 'node:util';
6
6
 
7
7
  const shellQuote = (value) =>
8
8
  `'${value.replaceAll("'", String.fromCharCode(39, 92, 39, 39))}'`;
9
9
 
10
- async function versionsForCli(executable) {
11
- if (!executable)
12
- throw new Error(
13
- 'Provide --cli with the installed oat executable or --versions with its bundled public-package-versions.json.',
14
- );
15
- let directory = dirname(await realpath(executable));
10
+ // Walk up from a real file to the installed CLI package root.
11
+ async function cliPackageFor(file) {
12
+ let directory = dirname(file);
16
13
  for (;;) {
17
14
  try {
18
15
  const pkg = JSON.parse(
@@ -24,14 +21,60 @@ async function versionsForCli(executable) {
24
21
  if (error.code !== 'ENOENT') throw error;
25
22
  }
26
23
  const parent = dirname(directory);
27
- if (parent === directory)
28
- throw new Error(
29
- 'Cannot locate the running CLI bundle through this wrapper; supply --versions from that installed CLI.',
30
- );
24
+ if (parent === directory) return null;
31
25
  directory = parent;
32
26
  }
33
27
  }
34
28
 
29
+ // Package-manager shims (pnpm, cmd-shim) are POSIX shell scripts. Parse them as
30
+ // text and never execute them: the `# cmd-shim-target=` comment names the
31
+ // absolute entry; `exec` lines name it relative to the shim's real directory.
32
+ async function shimTargets(file) {
33
+ const handle = await open(file, 'r');
34
+ let text;
35
+ try {
36
+ const { size } = await handle.stat();
37
+ if (size > 65536) return [];
38
+ text = await handle.readFile('utf8');
39
+ } finally {
40
+ await handle.close();
41
+ }
42
+ const [shebang = ''] = text.split(/\r?\n/, 1);
43
+ if (!/^#!.*\b(?:sh|bash|dash|ksh|zsh)\b/.test(shebang)) return [];
44
+ const base = dirname(file);
45
+ const targets = [];
46
+ for (const match of text.matchAll(/^#\s*cmd-shim-target=(.+?)\s*$/gm))
47
+ targets.push(isAbsolute(match[1]) ? match[1] : resolve(base, match[1]));
48
+ for (const match of text.matchAll(/"\$basedir\/([^"$`\\]+\.(?:c|m)?js)"/g))
49
+ targets.push(resolve(base, match[1]));
50
+ return [...new Set(targets)];
51
+ }
52
+
53
+ async function versionsForCli(executable) {
54
+ if (!executable)
55
+ throw new Error(
56
+ 'Provide --cli with the installed oat executable or --versions with its bundled public-package-versions.json.',
57
+ );
58
+ const file = await realpath(executable);
59
+ const targets = await shimTargets(file);
60
+ // Direct installs resolve to the bundle entry itself; shims are never walked
61
+ // from their own location, which can sit above an unrelated package.
62
+ for (const target of targets.length > 0 ? targets : [file]) {
63
+ let entry;
64
+ try {
65
+ entry = await realpath(target);
66
+ } catch (error) {
67
+ if (error.code === 'ENOENT' || error.code === 'ENOTDIR') continue;
68
+ throw error;
69
+ }
70
+ const found = await cliPackageFor(entry);
71
+ if (found) return found;
72
+ }
73
+ throw new Error(
74
+ 'Cannot locate the running CLI bundle through this wrapper; supply --versions from that installed CLI.',
75
+ );
76
+ }
77
+
35
78
  try {
36
79
  const { values } = parseArgs({
37
80
  options: {
@@ -58,6 +101,8 @@ try {
58
101
  for (const [name, declared] of Object.entries(manifest[section] ?? {})) {
59
102
  if (
60
103
  ![
104
+ // The app-local CLI runs generate-index in predev/prebuild.
105
+ '@open-agent-toolkit/cli',
61
106
  '@open-agent-toolkit/docs-config',
62
107
  '@open-agent-toolkit/docs-theme',
63
108
  '@open-agent-toolkit/docs-transforms',
@@ -5,7 +5,7 @@ disable-model-invocation: true
5
5
  user-invocable: true
6
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.6'
8
+ version: '1.4.7'
9
9
  ---
10
10
 
11
11
  # Docs Apply
@@ -276,6 +276,9 @@ a conflict with config becomes `ask_user`, never a config-driven rewrite.
276
276
  Mirror the accepted record using shared repo config only:
277
277
  `oat config set documentation.ia '<JSON>'`, with exactly `{preset, decision,
278
278
  tracks?: [{path, principle}], verification?: 'triad'|'agent-only'|'none'}`.
279
+ Write `preset` as the canonical ID (`product-engineering-qa`,
280
+ `consumer-maintainer`, `domain-engineering`, `task-type`, `toolkit-cli` or
281
+ `flat-small`) of the approved label.
279
282
  `decision` is repo-relative; preserve guidance and unrelated config. For a
280
283
  framework surface, separately record the operator's approved sidebar owner via
281
284
  `oat config set documentation.navOwner nav-sync` or `hand-authored`. Missing
@@ -315,21 +318,26 @@ after each block, preserving residual findings instead of claiming a clean run.
315
318
  #### Individually approved tooling update
316
319
 
317
320
  A `tooling-update` recommendation has `approval: explicit`. Even with individual
318
- approval, its out-of-Markdown allowance is only these three operations:
319
-
320
- 1. Bump the docs app's existing `@open-agent-toolkit/docs-*` dependencies to the
321
- bundled versions using the artifact's exact upgrade command (preserve dependency
322
- section and package manager; include its resulting lockfile only). Never downgrade
323
- an installed version: `ahead` or `unverified` requires CLI selection/update or
324
- manual verification before re-analysis, not a docs-package tooling update.
325
- 2. Run `oat docs migrate --docs-dir <authored-root> --apply` only for its currently
321
+ approval, its out-of-Markdown allowance is only these four operations:
322
+
323
+ 1. Bump the docs app's existing `@open-agent-toolkit/docs-*` dependencies, and the
324
+ app's own `@open-agent-toolkit/cli` dependency when the app declares it, to the
325
+ bundled versions using the artifact's exact upgrade commands (preserve each
326
+ dependency section and the package manager; include the resulting lockfile only).
327
+ Never downgrade an installed version: `ahead` or `unverified` requires CLI
328
+ selection/update or manual verification before re-analysis, not a tooling update.
329
+ 2. After a CLI bump, regenerate the app's generated manifest (`index.md`) with that
330
+ upgraded app-local CLI, using the `oat docs generate-index` invocation from the
331
+ app's existing `predev`/`prebuild` scripts; inspect the diff.
332
+ 3. Run `oat docs migrate --docs-dir <authored-root> --apply` only for its currently
326
333
  supported admonition conversions and injected frontmatter; inspect the diff.
327
- 3. Run the docs build verifier from the app's existing scripts.
334
+ 4. Run the docs build verifier from the app's existing scripts.
328
335
 
329
336
  Scaffold changes the CLI cannot make (app config, routes, package scripts) are
330
337
  `manual`: report the required change and ID without editing those files. This
331
- allowance does not permit application dependencies, host settings, arbitrary
332
- migrations or an app-shell rebuild. Other out-of-scope prohibitions remain.
338
+ allowance does not permit other application dependencies, framework upgrades,
339
+ host settings, arbitrary migrations or an app-shell rebuild. Other out-of-scope
340
+ prohibitions remain.
333
341
 
334
342
  When approved actions involve docs app creation or nav updates:
335
343
 
@@ -85,8 +85,9 @@ blocked pending a fresh analysis rather than guessed.
85
85
 
86
86
  - Record IA: {adoption.state from target pjm doctor; decision command/path;
87
87
  framework AGENTS or Markdown contributing section; shared mirror JSON}
88
- - Tooling update: {individually approved ID; exact docs-app docs-\* upgrade
89
- command; supported migrate conversions; existing build verifier}
88
+ - Tooling update: {individually approved ID; exact docs-app docs-\* and declared
89
+ app-local cli upgrade commands; manifest regeneration with that cli; supported
90
+ migrate conversions; existing build verifier}
90
91
  - Unsupported app config/routes/scripts: {manual required changes; no edits}
91
92
 
92
93
  ## Summary of Actions
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/config/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/config/index.ts"],"names":[],"mappings":"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"}
@@ -12,6 +12,7 @@ import { normalizeDispatchMatrix, validateDispatchRouteTarget, walkDispatchMatri
12
12
  import { formatDispatchNotices, terminalReviewerNoticesForMatrix, } from '../../config/dispatch-notices.js';
13
13
  import { dispatchPolicyModeDescription, dispatchPolicyPolicyDescription, managedDispatchPolicyValueList, } from '../../config/dispatch-policy-options.js';
14
14
  import { normalizeDocumentationCheck } from '../../config/documentation-check.js';
15
+ import { DocumentationIaPresetError } from '../../config/documentation-ia.js';
15
16
  import { parseJsonConfig } from '../../config/json.js';
16
17
  import { DEFAULT_INSTRUCTION_SYNC_STRATEGY, INSTRUCTION_SYNC_STRATEGIES, VALID_DISPATCH_POLICY_MODES, VALID_MANAGED_DISPATCH_POLICIES, MAX_GATE_TIMEOUT_MS, MIN_GATE_TIMEOUT_MS, isValidGateTimeoutMs, isValidProjectLogDigestBound, normalizeWorkflowPostImplementSequence, normalizeDocumentationGuidance, normalizeDocumentationIa, normalizeDocumentationNavOwner, readOatConfig, readOatConfigForDefaultScopeRepair, readOatConfigForDocumentationExcludesRepair, readOatConfigForInstructionPointerExcludesRepair, readOatConfigForInstructionSyncStrategyRepair, readOatConfigWithWarnings, readOatLocalConfig, readUserConfig, writeOatConfig, writeOatLocalConfig, writeUserConfig, VALID_POST_IMPLEMENT_LEGACY_SEQUENCES, } from '../../config/oat-config.js';
17
18
  import { getOwnKey, setOwnKey } from '../../config/own-keys.js';
@@ -1871,6 +1872,10 @@ async function setConfigValue(repoRoot, userConfigDir, key, rawValue, surface, d
1871
1872
  catch (error) {
1872
1873
  if (key === 'documentation.check')
1873
1874
  throw error;
1875
+ if (error instanceof DocumentationIaPresetError)
1876
+ throw new Error(`Invalid ${key} value: ${error.detail}.`, {
1877
+ cause: error,
1878
+ });
1874
1879
  throw new Error(`Invalid ${key} value: ${key === 'documentation.ia' ? 'expected IA JSON with preset, repo-relative decision, optional tracks and verification' : key === 'documentation.navOwner' ? 'expected nav-sync or hand-authored' : 'expected a non-empty path/URL string or ordered non-empty string array'}.`, { cause: error });
1875
1880
  }
1876
1881
  let raw = { version: 1 };
@@ -1 +1 @@
1
- {"version":3,"file":"reader-rules.d.ts","sourceRoot":"","sources":["../../../../src/commands/docs/check/reader-rules.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAML,KAAK,WAAW,EACjB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAY,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAEvD,wBAAsB,YAAY,CAChC,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,UAAU,EAAE,EACnB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC,CAuVf;AAED,wBAAgB,eAAe,CAC7B,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,UAAU,EAAE,EACnB,MAAM,EAAE,MAAM,GACb,IAAI,CA+CN"}
1
+ {"version":3,"file":"reader-rules.d.ts","sourceRoot":"","sources":["../../../../src/commands/docs/check/reader-rules.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAML,KAAK,WAAW,EACjB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAY,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAEvD,wBAAsB,YAAY,CAChC,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,UAAU,EAAE,EACnB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC,CA4Vf;AAED,wBAAgB,eAAe,CAC7B,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,UAAU,EAAE,EACnB,MAAM,EAAE,MAAM,GACb,IAAI,CA+CN"}
@@ -116,10 +116,15 @@ export async function checkReaders(target, pages, report) {
116
116
  const lines = p.source.split(/\r?\n/).length - (p.source.endsWith('\n') ? 1 : 0);
117
117
  const limit = reference ? t.referenceLines : t.pageLines;
118
118
  if (lines > limit)
119
- report('page-length', 'warn', p.path, `Page has ${lines} physical source lines; limit ${limit}${reference ? ' for reference pages' : ''}.`);
120
- const h3 = p.nodes.filter((n) => n.type === 'heading' && n.depth === 3).length;
119
+ report('page-length', 'warn', p.path, `Page has ${lines} physical source lines; limit ${limit}${reference ? ' for reference pages' : ''}.`,
120
+ // The first physical line past the limit.
121
+ limit + 1);
122
+ const h3Nodes = p.nodes.filter((n) => n.type === 'heading' && n.depth === 3);
123
+ const h3 = h3Nodes.length;
121
124
  if (reference && h3 > t.referenceH3)
122
- report('page-length', 'warn', p.path, `Reference page has ${h3} real H3 headings; limit ${t.referenceH3}.`);
125
+ report('page-length', 'warn', p.path, `Reference page has ${h3} real H3 headings; limit ${t.referenceH3}.`,
126
+ // The first H3 past the limit.
127
+ h3Nodes[t.referenceH3]?.position?.start.line ?? 1);
123
128
  for (const link of p.links) {
124
129
  const href = link.href;
125
130
  if (/^(?:[a-z][a-z\d+.-]*:|\/\/)/i.test(href))
@@ -17,5 +17,13 @@ export interface GenerateIndexOptions {
17
17
  excludes?: string[];
18
18
  }
19
19
  export declare function generateIndex(docsDir: string, options?: GenerateIndexOptions): Promise<IndexEntry[]>;
20
- export declare function renderIndex(entries: IndexEntry[]): string;
20
+ export interface RenderIndexOptions {
21
+ /**
22
+ * POSIX path from the manifest's directory to the indexed docs directory.
23
+ * Entry paths are docs-relative; this prefix makes each link resolve from
24
+ * the file the manifest is written to.
25
+ */
26
+ linkBase?: string;
27
+ }
28
+ export declare function renderIndex(entries: IndexEntry[], options?: RenderIndexOptions): string;
21
29
  //# sourceMappingURL=generator.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../../../src/commands/docs/index-generate/generator.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAC1E,YAAY,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAEzE,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,UAAU,EAAE,CAAC;IACxB,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAgLD,wBAAsB,aAAa,CACjC,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,UAAU,EAAE,CAAC,CAMvB;AAuBD,wBAAgB,WAAW,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,MAAM,CAMzD"}
1
+ {"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../../../src/commands/docs/index-generate/generator.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAC1E,YAAY,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAEzE,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,UAAU,EAAE,CAAC;IACxB,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAgLD,wBAAsB,aAAa,CACjC,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,UAAU,EAAE,CAAC,CAMvB;AAED,MAAM,WAAW,kBAAkB;IACjC;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAyCD,wBAAgB,WAAW,CACzB,OAAO,EAAE,UAAU,EAAE,EACrB,OAAO,GAAE,kBAAuB,GAC/B,MAAM,CAMR"}
@@ -1,5 +1,5 @@
1
1
  import { readdir, readFile } from 'node:fs/promises';
2
- import { join, relative, resolve } from 'node:path';
2
+ import { join, posix, relative, resolve } from 'node:path';
3
3
  import { hasIndexContents, parseIndexContents, } from '../../docs/nav/contents.js';
4
4
  import { resolveFolderTitle } from '../../docs/nav/fumadocs.js';
5
5
  import { createExclusionMatcher, } from '../../docs/shared/exclusions.js';
@@ -151,24 +151,35 @@ async function collectEntries(docsDir, relativeBase, matcher) {
151
151
  export async function generateIndex(docsDir, options = {}) {
152
152
  return collectEntries(docsDir, '', createExclusionMatcher(options.excludes ?? []));
153
153
  }
154
- function renderEntries(entries, indent) {
154
+ /**
155
+ * Percent-encode the characters that end, split or rewrite a CommonMark link
156
+ * destination (whitespace, `#`, `?`, parentheses, angle brackets, `&` entity
157
+ * starts and `\` escapes) and `%` itself, as UTF-8 bytes, so any supported
158
+ * filesystem path renders as a resolvable link.
159
+ */
160
+ function linkDestination(path) {
161
+ return path.replace(/[%\s#?()<>&\\]/g, (char) => [...Buffer.from(char, 'utf8')]
162
+ .map((byte) => `%${byte.toString(16).toUpperCase().padStart(2, '0')}`)
163
+ .join(''));
164
+ }
165
+ function renderEntries(entries, indent, linkBase) {
155
166
  const lines = [];
156
167
  const prefix = ' '.repeat(indent);
157
168
  for (const entry of entries) {
158
169
  if (entry.children) {
159
170
  lines.push(`${prefix}- ${entry.title}${entry.unlisted ? ' [unlisted in Contents]' : ''}`);
160
- lines.push(...renderEntries(entry.children, indent + 1));
171
+ lines.push(...renderEntries(entry.children, indent + 1, linkBase));
161
172
  }
162
173
  else {
163
174
  const desc = entry.description ? ` — ${entry.description}` : '';
164
- lines.push(`${prefix}- [${entry.title}](${entry.path})${desc}${entry.unlisted ? ' [unlisted in Contents]' : ''}`);
175
+ lines.push(`${prefix}- [${entry.title}](${linkDestination(linkBase ? posix.join(linkBase, entry.path) : entry.path)})${desc}${entry.unlisted ? ' [unlisted in Contents]' : ''}`);
165
176
  }
166
177
  }
167
178
  return lines;
168
179
  }
169
- export function renderIndex(entries) {
180
+ export function renderIndex(entries, options = {}) {
170
181
  if (entries.length === 0) {
171
182
  return '';
172
183
  }
173
- return `${renderEntries(entries, 0).join('\n')}\n`;
184
+ return `${renderEntries(entries, 0, options.linkBase ?? '').join('\n')}\n`;
174
185
  }
@@ -4,7 +4,7 @@ import { Command } from 'commander';
4
4
  export declare const GENERATED_INDEX_WARNING = "<!-- AUTOGENERATED by `oat docs generate-index`. Do not hand-edit; run `oat docs generate-index` to regenerate. -->";
5
5
  interface IndexGenerateFileDependencies {
6
6
  generateIndex: (docsDir: string, options: import('./generator.js').GenerateIndexOptions) => Promise<import('./generator.js').IndexEntry[]>;
7
- renderIndex: (entries: import('./generator.js').IndexEntry[]) => string;
7
+ renderIndex: (entries: import('./generator.js').IndexEntry[], options?: import('./generator.js').RenderIndexOptions) => string;
8
8
  writeFile: (path: string, content: string, encoding: BufferEncoding) => Promise<void>;
9
9
  readOatConfig: (repoRoot: string) => Promise<OatConfig>;
10
10
  writeOatConfig: (repoRoot: string, config: OatConfig) => Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/commands/docs/index-generate/index.ts"],"names":[],"mappings":"AAWA,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,aAAa,EACnB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,KAAK,SAAS,EAGf,MAAM,oBAAoB,CAAC;AAI5B,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;AAI5C,eAAO,MAAM,uBAAuB,wHACmF,CAAC;AA2BxH,UAAU,6BAA6B;IACrC,aAAa,EAAE,CACb,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,OAAO,aAAa,EAAE,oBAAoB,KAChD,OAAO,CAAC,OAAO,aAAa,EAAE,UAAU,EAAE,CAAC,CAAC;IACjD,WAAW,EAAE,CAAC,OAAO,EAAE,OAAO,aAAa,EAAE,UAAU,EAAE,KAAK,MAAM,CAAC;IACrE,SAAS,EAAE,CACT,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,cAAc,KACrB,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,aAAa,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;IACxD,cAAc,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACvE,eAAe,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAClD,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9C,iBAAiB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC5D,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5C,iBAAiB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;CAC7D;AAED,UAAU,yBAAyB;IACjC,mBAAmB,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,cAAc,CAAC;IAChE,QAAQ,EAAE,6BAA6B,CAAC;CACzC;AAmrBD,wBAAgB,8BAA8B,CAC5C,SAAS,GAAE,OAAO,CAAC,yBAAyB,CAAM,GACjD,OAAO,CAgCT"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/commands/docs/index-generate/index.ts"],"names":[],"mappings":"AAWA,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,aAAa,EACnB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,KAAK,SAAS,EAGf,MAAM,oBAAoB,CAAC;AAI5B,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;AAI5C,eAAO,MAAM,uBAAuB,wHACmF,CAAC;AA2BxH,UAAU,6BAA6B;IACrC,aAAa,EAAE,CACb,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,OAAO,aAAa,EAAE,oBAAoB,KAChD,OAAO,CAAC,OAAO,aAAa,EAAE,UAAU,EAAE,CAAC,CAAC;IACjD,WAAW,EAAE,CACX,OAAO,EAAE,OAAO,aAAa,EAAE,UAAU,EAAE,EAC3C,OAAO,CAAC,EAAE,OAAO,aAAa,EAAE,kBAAkB,KAC/C,MAAM,CAAC;IACZ,SAAS,EAAE,CACT,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,cAAc,KACrB,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,aAAa,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;IACxD,cAAc,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACvE,eAAe,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAClD,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9C,iBAAiB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC5D,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5C,iBAAiB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;CAC7D;AAED,UAAU,yBAAyB;IACjC,mBAAmB,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,cAAc,CAAC;IAChE,QAAQ,EAAE,6BAA6B,CAAC;CACzC;AAgsBD,wBAAgB,8BAA8B,CAC5C,SAAS,GAAE,OAAO,CAAC,yBAAyB,CAAM,GACjD,OAAO,CAgCT"}
@@ -430,19 +430,31 @@ async function runIndexGenerate(context, options, deps) {
430
430
  const entries = await deps.generateIndex(docsDir, {
431
431
  excludes: resolved.excludes,
432
432
  });
433
- const content = buildGeneratedIndexOutput(deps.renderIndex(entries), resolved.config.documentation?.tooling);
433
+ // Links are written relative to the manifest file, which always sits outside
434
+ // the docs directory it indexes. When this run records the manifest in
435
+ // `documentation.index`, links resolve from that recorded (real) location.
436
+ // Otherwise only the output's directory is canonicalized: a symlinked
437
+ // directory alias cannot skew the prefix, and a file symlink is read from its
438
+ // own location.
439
+ const indexPath = isFumadocsManifestTransition(resolved, canonical)
440
+ ? buildDocumentationIndexValue(resolved, canonical)
441
+ : null;
442
+ const outputDir = indexPath !== null
443
+ ? dirname(canonical.outputPath)
444
+ : ((await canonicalizeOrNull(dirname(outputPath), deps, {
445
+ kind: 'output',
446
+ })) ?? dirname(outputPath));
447
+ const linkBase = normalizeToPosixPath(relative(outputDir, canonical.docsDir));
448
+ const content = buildGeneratedIndexOutput(deps.renderIndex(entries, { linkBase }), resolved.config.documentation?.tooling);
434
449
  await deps.writeFile(outputPath, content, 'utf8');
435
- if (isFumadocsManifestTransition(resolved, canonical)) {
436
- const indexPath = buildDocumentationIndexValue(resolved, canonical);
437
- if (indexPath !== null && config.documentation?.index !== indexPath) {
438
- await deps.writeOatConfig(repoRoot, {
439
- ...config,
440
- documentation: {
441
- ...config.documentation,
442
- index: indexPath,
443
- },
444
- });
445
- }
450
+ if (indexPath !== null && config.documentation?.index !== indexPath) {
451
+ await deps.writeOatConfig(repoRoot, {
452
+ ...config,
453
+ documentation: {
454
+ ...config.documentation,
455
+ index: indexPath,
456
+ },
457
+ });
446
458
  }
447
459
  if (context.json) {
448
460
  context.logger.json({
@@ -1,7 +1,6 @@
1
- export declare const IA_PRESETS: readonly ['product-engineering-qa', 'consumer-maintainer', 'domain-engineering', 'task-type', 'toolkit-cli', 'flat-small'];
2
- export type IaPreset = (typeof IA_PRESETS)[number];
1
+ import { type IaPresetId } from '../../../config/documentation-ia.js';
3
2
  export interface PresetSelection {
4
- iaPreset?: IaPreset;
3
+ iaPreset?: IaPresetId;
5
4
  plannedPages?: number;
6
5
  }
7
6
  /** Validate the opt-in pair before planning or writing any scaffold files. */
@@ -1 +1 @@
1
- {"version":3,"file":"content.d.ts","sourceRoot":"","sources":["../../../../src/commands/docs/init/content.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,UAAU,YACrB,wBAAwB,EACxB,qBAAqB,EACrB,oBAAoB,EACpB,WAAW,EACX,aAAa,EACb,YAAY,CACJ,CAAC;AACX,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC;AACnD,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,8EAA8E;AAC9E,wBAAgB,sBAAsB,CACpC,MAAM,CAAC,EAAE,MAAM,EACf,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GACtB,eAAe,CAiBjB;AAmSD,wBAAgB,sBAAsB,CAAC,KAAK,GAAE,MAAM,EAAO,GAAG,MAAM,EAAE,CAErE;AAQD,sFAAsF;AACtF,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,eAAe,GAAG;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,OAAO,CAAC;CACnB,GACA,OAAO,CAAC;IACT,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC3C,QAAQ,EAAE,MAAM,CAAC;CAClB,GAAG,IAAI,CAAC,CAwFR"}
1
+ {"version":3,"file":"content.d.ts","sourceRoot":"","sources":["../../../../src/commands/docs/init/content.ts"],"names":[],"mappings":"AAGA,OAAO,EAAiB,KAAK,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAC1E,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,UAAU,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,8EAA8E;AAC9E,wBAAgB,sBAAsB,CACpC,MAAM,CAAC,EAAE,MAAM,EACf,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GACtB,eAAe,CAiBjB;AAmSD,wBAAgB,sBAAsB,CAAC,KAAK,GAAE,MAAM,EAAO,GAAG,MAAM,EAAE,CAErE;AAQD,sFAAsF;AACtF,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,eAAe,GAAG;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,OAAO,CAAC;CACnB,GACA,OAAO,CAAC;IACT,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC3C,QAAQ,EAAE,MAAM,CAAC;CAClB,GAAG,IAAI,CAAC,CAwFR"}
@@ -1,21 +1,14 @@
1
1
  import { readFile } from 'node:fs/promises';
2
2
  import { join } from 'node:path';
3
- export const IA_PRESETS = [
4
- 'product-engineering-qa',
5
- 'consumer-maintainer',
6
- 'domain-engineering',
7
- 'task-type',
8
- 'toolkit-cli',
9
- 'flat-small',
10
- ];
3
+ import { IA_PRESET_IDS } from '../../../config/documentation-ia.js';
11
4
  /** Validate the opt-in pair before planning or writing any scaffold files. */
12
5
  export function resolvePresetSelection(preset, count) {
13
6
  if (preset === undefined && count === undefined)
14
7
  return {};
15
8
  if (preset === undefined || count === undefined)
16
9
  throw new Error('--ia-preset and --planned-pages are required together.');
17
- if (!IA_PRESETS.includes(preset))
18
- throw new Error(`Unknown IA preset "${preset}". Choose: ${IA_PRESETS.join(', ')}.`);
10
+ if (!IA_PRESET_IDS.includes(preset))
11
+ throw new Error(`Unknown IA preset "${preset}". Choose: ${IA_PRESET_IDS.join(', ')}.`);
19
12
  if (!/^\d+$/.test(String(count)) ||
20
13
  !Number.isSafeInteger(Number(count)) ||
21
14
  Number(count) < 1)
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Canonical IA preset IDs: the values `oat docs init --ia-preset` accepts and
3
+ * the spelling documented for the `documentation.ia` mirror.
4
+ */
5
+ export declare const IA_PRESET_IDS: readonly ['product-engineering-qa', 'consumer-maintainer', 'domain-engineering', 'task-type', 'toolkit-cli', 'flat-small'];
6
+ export type IaPresetId = (typeof IA_PRESET_IDS)[number];
7
+ /**
8
+ * Approved preset labels from the authoring-docs preset table. Authored IA
9
+ * records name these labels, and existing mirrors store them, so the mirror
10
+ * accepts each label as an exact alias of its ID.
11
+ */
12
+ export declare const IA_PRESET_LABELS: Readonly<Record<IaPresetId, string>>;
13
+ export declare function isDocumentationIaPreset(value: string): boolean;
14
+ /** An unknown preset in an otherwise well-formed `documentation.ia` value. */
15
+ export declare class DocumentationIaPresetError extends Error {
16
+ readonly detail: string;
17
+ constructor(configPath: string, preset: string);
18
+ }
19
+ //# sourceMappingURL=documentation-ia.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"documentation-ia.d.ts","sourceRoot":"","sources":["../../src/config/documentation-ia.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,aAAa,YACxB,wBAAwB,EACxB,qBAAqB,EACrB,oBAAoB,EACpB,WAAW,EACX,aAAa,EACb,YAAY,CACJ,CAAC;AACX,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAExD;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,EAAE,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAOjE,CAAC;AAOF,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE9D;AAED,8EAA8E;AAC9E,qBAAa,0BAA2B,SAAQ,KAAK;IACnD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAExB,YAAY,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAO7C;CACF"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Canonical IA preset IDs: the values `oat docs init --ia-preset` accepts and
3
+ * the spelling documented for the `documentation.ia` mirror.
4
+ */
5
+ export const IA_PRESET_IDS = [
6
+ 'product-engineering-qa',
7
+ 'consumer-maintainer',
8
+ 'domain-engineering',
9
+ 'task-type',
10
+ 'toolkit-cli',
11
+ 'flat-small',
12
+ ];
13
+ /**
14
+ * Approved preset labels from the authoring-docs preset table. Authored IA
15
+ * records name these labels, and existing mirrors store them, so the mirror
16
+ * accepts each label as an exact alias of its ID.
17
+ */
18
+ export const IA_PRESET_LABELS = {
19
+ 'product-engineering-qa': 'Product/Engineering/QA',
20
+ 'consumer-maintainer': 'Consumer and Maintainer',
21
+ 'domain-engineering': 'Domain Engineering',
22
+ 'task-type': 'Task Type',
23
+ 'toolkit-cli': 'Toolkit and CLI',
24
+ 'flat-small': 'Flat Small',
25
+ };
26
+ const ACCEPTED_PRESETS = new Set([
27
+ ...IA_PRESET_IDS,
28
+ ...Object.values(IA_PRESET_LABELS),
29
+ ]);
30
+ export function isDocumentationIaPreset(value) {
31
+ return ACCEPTED_PRESETS.has(value);
32
+ }
33
+ /** An unknown preset in an otherwise well-formed `documentation.ia` value. */
34
+ export class DocumentationIaPresetError extends Error {
35
+ detail;
36
+ constructor(configPath, preset) {
37
+ const detail = `unknown preset "${preset}"; expected one of ${IA_PRESET_IDS.join(', ')} (or its approved label)`;
38
+ super(`Invalid documentation.ia in ${configPath}: ${detail}. Repair with oat config set documentation.ia '<JSON>' or oat config unset documentation.ia --shared.`);
39
+ this.name = 'DocumentationIaPresetError';
40
+ this.detail = detail;
41
+ }
42
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"oat-config.d.ts","sourceRoot":"","sources":["../../src/config/oat-config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"oat-config.d.ts","sourceRoot":"","sources":["../../src/config/oat-config.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,7 @@ import { atomicWriteJson, dirExists, fileExists } from '../fs/io.js';
6
6
  import { normalizeToPosixPath, validateRealPathWithinScope } from '../fs/paths.js';
7
7
  import { normalizeDispatchMatrix, } from './dispatch-matrix.js';
8
8
  import { normalizeDocumentationCheck, } from './documentation-check.js';
9
+ import { DocumentationIaPresetError, isDocumentationIaPreset, } from './documentation-ia.js';
9
10
  import { parseJsonConfig } from './json.js';
10
11
  import { resolveUserSyncConfig } from './user-sync-config.js';
11
12
  export { VALID_DISPATCH_MATRIX_TIERS, isCodexMaterializedRouteTarget, isWorkflowDispatchCandidateLadder, isWorkflowDispatchFallbackRoute, toWorkflowDispatchCandidateLadder, validateDispatchRouteTarget, } from './dispatch-matrix.js';
@@ -1580,8 +1581,11 @@ export function normalizeDocumentationIa(value, configPath) {
1580
1581
  nonempty(track.principle))))) {
1581
1582
  throw new Error(`Invalid documentation.ia in ${configPath}: expected { preset, decision (repo-relative path), tracks?: [{ path, principle }], verification?: triad|agent-only|none }. Repair with oat config set documentation.ia '<JSON>' or oat config unset documentation.ia --shared.`);
1582
1583
  }
1584
+ const preset = value.preset.trim();
1585
+ if (!isDocumentationIaPreset(preset))
1586
+ throw new DocumentationIaPresetError(configPath, preset);
1583
1587
  return {
1584
- preset: value.preset.trim(),
1588
+ preset,
1585
1589
  decision: value.decision.trim(),
1586
1590
  ...(value.tracks !== undefined
1587
1591
  ? {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@open-agent-toolkit/cli",
3
- "version": "0.3.30",
3
+ "version": "0.3.32",
4
4
  "private": false,
5
5
  "description": "Open Agent Toolkit CLI",
6
6
  "homepage": "https://github.com/voxmedia/open-agent-toolkit/tree/main/packages/cli",
@@ -42,8 +42,8 @@
42
42
  "unified": "11.0.5",
43
43
  "yaml": "2.8.2",
44
44
  "zod": "^3.25.76",
45
- "@open-agent-toolkit/control-plane": "0.3.30",
46
- "@open-agent-toolkit/docs-transforms": "0.3.30"
45
+ "@open-agent-toolkit/docs-transforms": "0.3.32",
46
+ "@open-agent-toolkit/control-plane": "0.3.32"
47
47
  },
48
48
  "devDependencies": {
49
49
  "@types/jsdom": "28.0.3",