@open-agent-toolkit/cli 0.3.10 → 0.3.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -1
- package/assets/bundle-metadata.json +1 -1
- package/assets/docs/cli-utilities/meta.json +13 -0
- package/assets/docs/cli-utilities/tool-packs.md +8 -2
- package/assets/docs/cli-utilities/workflow-gates.md +13 -0
- package/assets/docs/contributing/code.md +8 -2
- package/assets/docs/contributing/documentation.md +7 -1
- package/assets/docs/contributing/meta.json +15 -0
- package/assets/docs/docs-tooling/add-docs-to-a-repo.md +14 -5
- package/assets/docs/docs-tooling/commands.md +26 -8
- package/assets/docs/docs-tooling/meta.json +4 -0
- package/assets/docs/docs-tooling/workflows.md +2 -2
- package/assets/docs/guide/meta.json +4 -0
- package/assets/docs/meta.json +14 -0
- package/assets/docs/provider-sync/instruction-sync.md +8 -0
- package/assets/docs/provider-sync/meta.json +11 -0
- package/assets/docs/provider-sync/scope-and-surface.md +3 -4
- package/assets/docs/reference/cli-reference.md +5 -2
- package/assets/docs/reference/docs-index-contract.md +22 -6
- package/assets/docs/reference/file-locations.md +7 -2
- package/assets/docs/reference/index.md +1 -1
- package/assets/docs/reference/meta.json +10 -0
- package/assets/docs/reference/troubleshooting.md +41 -6
- package/assets/docs/workflows/ideas/meta.json +4 -0
- package/assets/docs/workflows/meta.json +4 -0
- package/assets/docs/workflows/projects/cursor-cloud.md +8 -3
- package/assets/docs/workflows/projects/evidence-layers.md +6 -8
- package/assets/docs/workflows/projects/implementation-execution.md +30 -4
- package/assets/docs/workflows/projects/lifecycle.md +7 -1
- package/assets/docs/workflows/projects/meta.json +25 -0
- package/assets/docs/workflows/projects/orchestration-model.md +5 -6
- package/assets/docs/workflows/skills/meta.json +10 -0
- package/assets/docs/workflows/skills/recon.md +28 -3
- package/assets/public-package-versions.json +4 -4
- package/assets/skills/oat-cursor-cloud-projects/SKILL.md +30 -16
- package/assets/skills/oat-dispatch-subagents/SKILL.md +4 -12
- package/assets/skills/oat-dispatch-subagents/references/managed-claude-example.json +1 -1
- package/assets/skills/oat-dispatch-subagents/references/provider-codex.md +51 -0
- package/assets/skills/oat-dispatch-subagents/references/record-schema.md +8 -7
- package/assets/skills/oat-docs-analyze/SKILL.md +28 -3
- package/assets/skills/oat-docs-apply/SKILL.md +3 -3
- package/assets/skills/oat-docs-authoring/SKILL.md +1 -1
- package/assets/skills/oat-docs-authoring/references/oat-fumadocs-contract.md +5 -2
- package/assets/skills/oat-docs-bootstrap/SKILL.md +4 -3
- package/assets/skills/oat-docs-bootstrap/assets/AGENTS.md.template +3 -3
- package/assets/skills/oat-pjm-decision/SKILL.md +3 -2
- package/assets/skills/oat-project-autonomous/references/gate-inventory.md +4 -4
- package/assets/skills/oat-project-complete/SKILL.md +47 -2
- package/assets/skills/oat-project-design/SKILL.md +10 -6
- package/assets/skills/oat-project-discover/SKILL.md +3 -3
- package/assets/skills/oat-project-dispatch-subagents/SKILL.md +3 -10
- package/assets/skills/oat-project-document/references/docs/autonomy-contract.md +4 -4
- package/assets/skills/oat-project-implement/SKILL.md +1 -1
- package/assets/skills/oat-project-implement/references/completion-and-closeout.md +135 -3
- package/assets/skills/oat-project-implement/references/dispatch-and-dry-run.md +7 -9
- package/assets/skills/oat-project-implement/references/docs/autonomy-contract.md +4 -4
- package/assets/skills/oat-project-implement/references/plan-and-resume.md +1 -1
- package/assets/skills/oat-project-import-plan/SKILL.md +3 -3
- package/assets/skills/oat-project-lite/references/docs/autonomy-contract.md +4 -4
- package/assets/skills/oat-project-new/SKILL.md +3 -3
- package/assets/skills/oat-project-next/SKILL.md +50 -7
- package/assets/skills/oat-project-plan/SKILL.md +4 -4
- package/assets/skills/oat-project-plan-writing/SKILL.md +2 -2
- package/assets/skills/oat-project-pr-final/SKILL.md +11 -1
- package/assets/skills/oat-project-pr-final/references/docs/autonomy-contract.md +4 -4
- package/assets/skills/oat-project-promote-spec-driven/SKILL.md +2 -2
- package/assets/skills/oat-project-quick-start/SKILL.md +12 -8
- package/assets/skills/oat-project-quick-start/references/docs/autonomy-contract.md +4 -4
- package/assets/skills/oat-project-retro/SKILL.md +6 -3
- package/assets/skills/oat-project-review-provide/SKILL.md +2 -2
- package/assets/skills/oat-project-review-provide-remote/SKILL.md +2 -2
- package/assets/skills/oat-project-spec/SKILL.md +3 -3
- package/assets/skills/oat-project-summary/SKILL.md +22 -3
- package/assets/skills/oat-repo-improve/SKILL.md +2 -2
- package/assets/skills/recon/SKILL.md +24 -3
- package/assets/skills/recon/references/packet-contract.md +36 -6
- package/assets/skills/recon/references/profiles.md +3 -0
- package/assets/skills/recon/references/worker-contract.md +16 -3
- package/assets/skills/recon/scripts/create-review-brief.mjs +17 -86
- package/assets/skills/recon/scripts/lib/contracts.mjs +158 -41
- package/assets/skills/recon/scripts/lib/review-binding.mjs +123 -0
- package/assets/skills/recon/scripts/lib/routing.mjs +5 -2
- package/assets/skills/recon/scripts/reconcile-ledger.mjs +18 -7
- package/assets/skills/recon/scripts/render-packet.mjs +93 -1
- package/assets/skills/recon/scripts/validate-packet.mjs +119 -88
- package/assets/templates/state.md +1 -0
- package/dist/commands/backlog/new.d.ts +2 -2
- package/dist/commands/backlog/new.d.ts.map +1 -1
- package/dist/commands/backlog/new.js +2 -2
- package/dist/commands/decision/new.d.ts +2 -2
- package/dist/commands/decision/new.d.ts.map +1 -1
- package/dist/commands/decision/new.js +2 -2
- package/dist/commands/docs/nav/contents.d.ts +9 -0
- package/dist/commands/docs/nav/contents.d.ts.map +1 -1
- package/dist/commands/docs/nav/contents.js +7 -2
- package/dist/commands/docs/nav/fumadocs.d.ts +51 -0
- package/dist/commands/docs/nav/fumadocs.d.ts.map +1 -0
- package/dist/commands/docs/nav/fumadocs.js +301 -0
- package/dist/commands/docs/nav/sync.d.ts +31 -1
- package/dist/commands/docs/nav/sync.d.ts.map +1 -1
- package/dist/commands/docs/nav/sync.js +163 -6
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +2 -0
- package/dist/commands/instructions/instructions.utils.d.ts +19 -0
- package/dist/commands/instructions/instructions.utils.d.ts.map +1 -1
- package/dist/commands/instructions/instructions.utils.js +89 -17
- package/dist/commands/instructions/sync/sync.d.ts.map +1 -1
- package/dist/commands/instructions/sync/sync.js +49 -2
- package/dist/commands/pjm/init.d.ts.map +1 -1
- package/dist/commands/pjm/init.js +2 -2
- package/dist/commands/project/closeout-check/closeout-invariant.d.ts +97 -0
- package/dist/commands/project/closeout-check/closeout-invariant.d.ts.map +1 -0
- package/dist/commands/project/closeout-check/closeout-invariant.js +301 -0
- package/dist/commands/project/closeout-check/index.d.ts +38 -0
- package/dist/commands/project/closeout-check/index.d.ts.map +1 -0
- package/dist/commands/project/closeout-check/index.js +117 -0
- package/dist/commands/project/complete-state/index.d.ts +4 -0
- package/dist/commands/project/complete-state/index.d.ts.map +1 -1
- package/dist/commands/project/complete-state/index.js +11 -13
- package/dist/commands/project/dispatch/index.d.ts.map +1 -1
- package/dist/commands/project/dispatch/index.js +6 -30
- package/dist/commands/project/dispatch/record.d.ts +9 -18
- package/dist/commands/project/dispatch/record.d.ts.map +1 -1
- package/dist/commands/project/dispatch/record.js +15 -212
- package/dist/commands/project/index.d.ts.map +1 -1
- package/dist/commands/project/index.js +2 -0
- package/dist/commands/project/new/scaffold.d.ts +0 -1
- package/dist/commands/project/new/scaffold.d.ts.map +1 -1
- package/dist/commands/project/new/scaffold.js +19 -20
- package/dist/commands/project/promote/promote.d.ts +2 -2
- package/dist/commands/project/promote/promote.d.ts.map +1 -1
- package/dist/commands/project/promote/promote.js +13 -11
- package/dist/commands/shared/frontmatter.d.ts +21 -0
- package/dist/commands/shared/frontmatter.d.ts.map +1 -1
- package/dist/commands/shared/frontmatter.js +70 -4
- package/dist/commands/shared/template-source.d.ts +29 -0
- package/dist/commands/shared/template-source.d.ts.map +1 -0
- package/dist/commands/{pjm → shared}/template-source.js +24 -7
- package/dist/commands/state/generate.js +2 -2
- package/dist/commands/template/index.d.ts +10 -0
- package/dist/commands/template/index.d.ts.map +1 -0
- package/dist/commands/template/index.js +87 -0
- package/dist/commands/template/resolve.d.ts +31 -0
- package/dist/commands/template/resolve.d.ts.map +1 -0
- package/dist/commands/template/resolve.js +86 -0
- package/dist/fs/io.d.ts +0 -41
- package/dist/fs/io.d.ts.map +1 -1
- package/dist/fs/io.js +2 -414
- package/dist/providers/identity/absolute-paths.d.ts +4 -13
- package/dist/providers/identity/absolute-paths.d.ts.map +1 -1
- package/dist/providers/identity/absolute-paths.js +4 -17
- package/dist/providers/identity/generic-dispatch-record.d.ts +1 -1
- package/dist/providers/identity/generic-dispatch-record.js +2 -2
- package/dist/providers/identity/oat-dispatch-record.d.ts +4 -357
- package/dist/providers/identity/oat-dispatch-record.d.ts.map +1 -1
- package/dist/providers/identity/oat-dispatch-record.js +4 -236
- package/dist/release/public-package-contract.d.ts.map +1 -1
- package/dist/release/public-package-contract.js +12 -4
- package/dist/validation/skills.d.ts.map +1 -1
- package/dist/validation/skills.js +32 -6
- package/package.json +2 -2
- package/dist/commands/pjm/template-source.d.ts +0 -14
- package/dist/commands/pjm/template-source.d.ts.map +0 -1
package/README.md
CHANGED
|
@@ -62,7 +62,8 @@ Use these commands when you want structured runtime/project state out of the CLI
|
|
|
62
62
|
- `oat config dump --json` - emit merged OAT config with per-key source attribution
|
|
63
63
|
- `oat project status --json` - emit the active project's full parsed control-plane state
|
|
64
64
|
- `oat project list --json` - emit summary state for tracked projects under the configured projects root
|
|
65
|
-
- `oat project
|
|
65
|
+
- `oat project closeout-check <project-path> --json` - report whether a configured, autonomous, or lite closeout's `oat_post_implement_sequence` snapshot permits terminal completion, and which step or approval owns it next (read-only)
|
|
66
|
+
- `oat project complete-state <project-path>` - emit the canonical completed lifecycle shape into a tracked project's `state.md`; refuses the same incomplete closeout `closeout-check` reports
|
|
66
67
|
|
|
67
68
|
## Requirements
|
|
68
69
|
|
|
@@ -528,14 +528,20 @@ repository that adopted PJM with a user-scope pack is diagnosed correctly.
|
|
|
528
528
|
|
|
529
529
|
### Template precedence
|
|
530
530
|
|
|
531
|
-
PJM templates resolve through three tiers, first match
|
|
531
|
+
Project lifecycle and PJM templates resolve through three tiers, first match
|
|
532
|
+
wins (idea templates instead follow the ideas scope the ideas skills select):
|
|
532
533
|
|
|
533
534
|
1. **Repository** — `.oat/templates/<name>` in this repo. An existing repository
|
|
534
535
|
template is an owner override and is never rewritten by pack updates.
|
|
535
536
|
2. **User** — `~/.oat/templates/<name>`, the managed default that
|
|
536
|
-
`oat tools update --pack
|
|
537
|
+
`oat tools update --pack <pack> --scope user` keeps current (`workflows`
|
|
538
|
+
for project lifecycle templates, `project-management` for PJM templates).
|
|
537
539
|
3. **Bundle** — the templates shipped inside the installed CLI.
|
|
538
540
|
|
|
541
|
+
`oat template resolve <name>` reports which tier wins, and lifecycle skills
|
|
542
|
+
copy their templates with `oat template resolve <name> --output <path>`, so a
|
|
543
|
+
user-scope-only install needs no repository `.oat/templates/` directory.
|
|
544
|
+
|
|
539
545
|
Delete a repository template to fall back to the managed user default. If a
|
|
540
546
|
template is missing from all three tiers, the command errors rather than
|
|
541
547
|
inventing content.
|
|
@@ -194,6 +194,19 @@ bookkeeping. Implementation, test, skill, template, workflow configuration, or
|
|
|
194
194
|
unknown changed paths make the result stale and require a current final review
|
|
195
195
|
and a new gate generation.
|
|
196
196
|
|
|
197
|
+
An operator can waive specific stale-making descendants, such as a test-only
|
|
198
|
+
fix, instead of rerunning the gate. The waiver is an append-only entry in
|
|
199
|
+
`oat_implement_exit_gate.waivers` recording who waived, the reason, the covered
|
|
200
|
+
commit range, the effective-delta fingerprint at the range end, and a UTC
|
|
201
|
+
timestamp; it never rewrites earlier provenance. Waivers are operator-only:
|
|
202
|
+
agents never infer or self-issue one, and an `OAT_AUTONOMOUS=1` run refuses to
|
|
203
|
+
write one. A later substantive change after the covered range makes the
|
|
204
|
+
generation stale again, and a malformed waiver fails closed. An interactive
|
|
205
|
+
implement run offers the waiver before it persists `stale`; an operator can
|
|
206
|
+
also give it when resuming implementation after `oat-project-next` reports
|
|
207
|
+
stale state. See
|
|
208
|
+
[Implementation Execution](../workflows/projects/implementation-execution.md).
|
|
209
|
+
|
|
197
210
|
Only an artifact with `oat_review_invocation: gate` and the matching
|
|
198
211
|
`oat_gate_run_id` can satisfy configured-gate provenance. A normal final
|
|
199
212
|
review, phase review, or manually produced independent review cannot substitute
|
|
@@ -70,8 +70,14 @@ local `origin/main` tracking ref (falling back to a local `main` branch when no
|
|
|
70
70
|
release fails locally the same way it fails in CI. Fetch first (`git fetch
|
|
71
71
|
origin`) so that ref is current; a
|
|
72
72
|
checkout with neither `origin/main` nor `main` skips the whole gate (CI uses
|
|
73
|
-
`fetch-depth: 0`). Test
|
|
74
|
-
|
|
73
|
+
`fetch-depth: 0`). Test-only changes do not require the bump
|
|
74
|
+
(`DR-260927-test-only-paths-skip`): each public package's
|
|
75
|
+
`versionPolicyIgnorePatterns` in
|
|
76
|
+
`packages/cli/src/release/public-package-contract.ts` lists exactly the test
|
|
77
|
+
paths its `tsconfig.json` leaves out of `dist` (for `packages/cli`,
|
|
78
|
+
`src/**/*.test.ts` and `src/**/__tests__/**`), and a contract test fails if
|
|
79
|
+
the two diverge. A test helper or fixture that compiles into `dist` still
|
|
80
|
+
counts as a publishable change.
|
|
75
81
|
|
|
76
82
|
CI runs neither `pnpm lint` nor `pnpm format`. `pnpm check` covers the
|
|
77
83
|
formatting of `.agents/skills/**`, `apps/oat-docs/docs`, and `tools/smoke`
|
|
@@ -62,7 +62,13 @@ Documentation should ship with the code it explains. This page covers the core d
|
|
|
62
62
|
pnpm -w run cli:source -- docs generate-index --docs-dir apps/oat-docs/docs --output apps/oat-docs/index.md
|
|
63
63
|
```
|
|
64
64
|
|
|
65
|
-
-
|
|
65
|
+
- Then refresh the sidebar navigation. `oat docs nav sync` rewrites the committed `meta.json` files from the `## Contents` maps and reports any page no map lists; list the page in its directory's `## Contents` rather than editing `meta.json`. The build runs the read-only `--check` form and fails while the navigation is stale or a page is unlisted:
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
pnpm -w run cli:source -- docs nav sync --target-dir apps/oat-docs
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
- In MkDocs apps, the same `oat docs nav sync` command refreshes the `nav:` block in `mkdocs.yml` instead.
|
|
66
72
|
- Use [Markdown Features](markdown-features.md) for supported syntax and examples.
|
|
67
73
|
|
|
68
74
|
## Agent guidance
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"title": "Contributing",
|
|
3
|
+
"pages": [
|
|
4
|
+
"code",
|
|
5
|
+
"documentation",
|
|
6
|
+
"markdown-features",
|
|
7
|
+
"skills",
|
|
8
|
+
"design-principles",
|
|
9
|
+
"commit-conventions",
|
|
10
|
+
"hooks-and-safety",
|
|
11
|
+
"smoke-testing",
|
|
12
|
+
"updating-model-guidance",
|
|
13
|
+
"verifying-cursor-pins"
|
|
14
|
+
]
|
|
15
|
+
}
|
|
@@ -143,15 +143,24 @@ Core rules:
|
|
|
143
143
|
- the `## Contents` section should map sibling pages and immediate child directories
|
|
144
144
|
- `## Contents` links should use `.md`-suffixed relative targets, including `subdir/index.md` for child directories
|
|
145
145
|
|
|
146
|
-
|
|
146
|
+
Regenerate navigation after adding or moving pages. In **MkDocs** apps this
|
|
147
|
+
rewrites the `nav:` block in `mkdocs.yml`; in **Fumadocs** apps it writes the
|
|
148
|
+
committed `meta.json` files and reports any page no `## Contents` map lists:
|
|
147
149
|
|
|
148
150
|
```bash
|
|
149
151
|
oat docs nav sync --target-dir apps/my-docs
|
|
150
152
|
```
|
|
151
153
|
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
run
|
|
154
|
+
Generated Fumadocs `meta.json` is strict: a page no `## Contents` map lists
|
|
155
|
+
stays out of the sidebar. The `prebuild` script that `oat docs init` scaffolds
|
|
156
|
+
for Fumadocs does not run the read-only check. To make builds fail on stale
|
|
157
|
+
navigation or an unlisted page, as `apps/oat-docs` does, append
|
|
158
|
+
`&& oat docs nav sync --check` to it; the script runs from the app directory,
|
|
159
|
+
which `--target-dir` defaults to.
|
|
160
|
+
|
|
161
|
+
**Fumadocs** apps also have an app-root docs index manifest, generated from
|
|
162
|
+
the Markdown file tree automatically via `predev`/`prebuild` hooks. You can
|
|
163
|
+
also run it manually:
|
|
155
164
|
|
|
156
165
|
```bash
|
|
157
166
|
oat docs generate-index --docs-dir docs
|
|
@@ -205,7 +214,7 @@ Important:
|
|
|
205
214
|
3. `oat docs init --app-name my-docs`
|
|
206
215
|
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
|
|
207
216
|
5. Author docs with `index.md` + `## Contents`
|
|
208
|
-
6. `oat docs nav sync --target-dir apps/my-docs` (
|
|
217
|
+
6. `oat docs nav sync --target-dir apps/my-docs` (both frameworks), plus `oat docs generate-index` (Fumadocs)
|
|
209
218
|
7. `/oat-docs-analyze`
|
|
210
219
|
8. `/oat-docs-apply`
|
|
211
220
|
9. Repeat as the codebase changes
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: Docs App Commands
|
|
3
|
-
description: 'Docs scaffolding CLI surface for Fumadocs/MkDocs, migration helpers, Fumadocs index generation, and
|
|
3
|
+
description: 'Docs scaffolding CLI surface for Fumadocs/MkDocs, migration helpers, Fumadocs index generation, and nav sync for both frameworks.'
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Docs App Commands
|
|
@@ -11,7 +11,7 @@ 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 Fumadocs app-root index manifests, and syncing MkDocs 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 or Fumadocs 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
|
|
|
@@ -22,7 +22,7 @@ and **MkDocs Material**.
|
|
|
22
22
|
| `oat docs init` | Scaffold a new docs app (Fumadocs or MkDocs). |
|
|
23
23
|
| `oat docs migrate` | Convert MkDocs admonitions to GFM callouts and inject frontmatter. |
|
|
24
24
|
| `oat docs generate-index` | Generate a Fumadocs app-root docs index manifest from the Markdown file tree. |
|
|
25
|
-
| `oat docs nav sync` | Regenerate
|
|
25
|
+
| `oat docs nav sync` | Regenerate `mkdocs.yml` nav or Fumadocs `meta.json` from `index.md` maps. |
|
|
26
26
|
| `oat docs analyze` | CLI entrypoint that points users to the `oat-docs-analyze` skill. |
|
|
27
27
|
| `oat docs apply` | CLI entrypoint that points users to the `oat-docs-apply` skill. |
|
|
28
28
|
|
|
@@ -30,7 +30,7 @@ and **MkDocs Material**.
|
|
|
30
30
|
|
|
31
31
|
Use the framework-specific generated-artifact command:
|
|
32
32
|
|
|
33
|
-
- Fumadocs apps run `fumadocs-mdx` and `oat docs generate-index`. In this repo, `predev` and `prebuild` regenerate `apps/oat-docs/index.md` from `apps/oat-docs/docs`.
|
|
33
|
+
- Fumadocs apps run `fumadocs-mdx` and `oat docs generate-index`. In this repo, `predev` and `prebuild` regenerate `apps/oat-docs/index.md` from `apps/oat-docs/docs`. Run `oat docs nav sync` yourself after structural changes to rewrite the committed `meta.json` sidebar files from authored directory `index.md` `## Contents` sections; the hooks never write them. `prebuild` runs `oat docs nav sync --check`, so a build fails when those files are stale or a page is unlisted.
|
|
34
34
|
- MkDocs apps use `oat docs nav sync` to regenerate the `nav:` block in `mkdocs.yml` from authored directory `index.md` `## Contents` sections.
|
|
35
35
|
|
|
36
36
|
Both frameworks keep authored `## Contents` sections as the source of local discovery. The generated artifact differs by framework.
|
|
@@ -183,17 +183,35 @@ script hooks.
|
|
|
183
183
|
|
|
184
184
|
## `oat docs nav sync`
|
|
185
185
|
|
|
186
|
-
Use nav sync
|
|
186
|
+
Use nav sync after adding, removing, renaming, or reordering docs pages.
|
|
187
187
|
|
|
188
188
|
The command reads only the reserved `## Contents` section from each directory
|
|
189
|
-
`index.md
|
|
190
|
-
|
|
191
|
-
|
|
189
|
+
`index.md`. It detects the framework from the app directory:
|
|
190
|
+
|
|
191
|
+
- **MkDocs** (`mkdocs.yml`): regenerates the `nav:` block in `mkdocs.yml`.
|
|
192
|
+
- **Fumadocs** (`source.config.ts`): writes one `meta.json` per docs directory
|
|
193
|
+
that has an `index.md`. `pages` follows the `## Contents` order with no
|
|
194
|
+
`"..."` rest entry, so a page no map lists stays out of the sidebar and is
|
|
195
|
+
reported by path (`unlisted` in `--json`). A link to a page in another
|
|
196
|
+
directory becomes a Fumadocs link entry, and the folder `title` comes from
|
|
197
|
+
the `index.md` frontmatter `title` or first heading. Files are compared by
|
|
198
|
+
meaning, so a rerun with no docs changes writes nothing. Commit the
|
|
199
|
+
generated `meta.json` files.
|
|
200
|
+
|
|
201
|
+
Use `--check` in builds and CI. It computes the same navigation, writes
|
|
202
|
+
nothing, and exits 1 when any generated file would change or, for Fumadocs,
|
|
203
|
+
any page or folder is unlisted, naming each one (`stale` and `unlisted` in
|
|
204
|
+
`--json`). This repository's `apps/oat-docs` `prebuild` runs it, so
|
|
205
|
+
`pnpm build:docs` fails on stale navigation.
|
|
206
|
+
|
|
207
|
+
Fumadocs apps also regenerate the root markdown manifest with
|
|
208
|
+
`oat docs generate-index`; the two commands write different artifacts.
|
|
192
209
|
|
|
193
210
|
Example:
|
|
194
211
|
|
|
195
212
|
```bash
|
|
196
213
|
oat docs nav sync --target-dir apps/oat-docs
|
|
214
|
+
oat docs nav sync --target-dir apps/oat-docs --check
|
|
197
215
|
```
|
|
198
216
|
|
|
199
217
|
Related reference:
|
|
@@ -18,7 +18,7 @@ Install the workflow skills with `oat tools install docs` (preferred) or
|
|
|
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
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
|
|
21
|
+
- `oat docs nav sync` regenerates MkDocs `mkdocs.yml` nav, or strict Fumadocs `meta.json` files, 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
|
|
@@ -67,7 +67,7 @@ skills.
|
|
|
67
67
|
5. Keep local `## Contents` sections current
|
|
68
68
|
6. Refresh generated artifacts:
|
|
69
69
|
- **MkDocs:** `oat docs nav sync`
|
|
70
|
-
- **Fumadocs:** `oat docs generate-index` (runs automatically via `predev`/`prebuild` hooks)
|
|
70
|
+
- **Fumadocs:** `oat docs nav sync` for the committed `meta.json` sidebar files (it reports pages no `## Contents` map lists), and `oat docs generate-index` for the root manifest (runs automatically via `predev`/`prebuild` hooks)
|
|
71
71
|
7. Run `oat-docs-analyze`; by default it verifies the generated analysis artifact
|
|
72
72
|
through `workflow.autoArtifactReview.analysis`
|
|
73
73
|
8. Review the artifact and run `oat-docs-apply`
|
|
@@ -401,6 +401,14 @@ oat instructions validate --strategy symlink
|
|
|
401
401
|
|
|
402
402
|
This keeps validation, preview, and repair aligned to the same expected file shape.
|
|
403
403
|
|
|
404
|
+
`--force` never overwrites a `CLAUDE.md` that an `AGENTS.md` resolves to,
|
|
405
|
+
whether through a symlink, a symlink chain, or a hard link, because that
|
|
406
|
+
`CLAUDE.md` holds the only copy of the instructions behind the link. Sync plans
|
|
407
|
+
a `skip` for it instead, with a reason such as
|
|
408
|
+
`AGENTS.md resolves to this CLAUDE.md, so it holds the instructions; kept`, and
|
|
409
|
+
leaves the file unchanged under every shim strategy, including in
|
|
410
|
+
`--dry-run` previews. Resolve that link by hand before repairing the pair.
|
|
411
|
+
|
|
404
412
|
## Manual-Repair Cases
|
|
405
413
|
|
|
406
414
|
Some states are intentionally surfaced as drift but not auto-repaired.
|
|
@@ -43,8 +43,8 @@ Rules are currently project-scoped canonical content. Unlike skills and agents,
|
|
|
43
43
|
- `oat providers inspect`
|
|
44
44
|
- `oat providers set`
|
|
45
45
|
- `oat providers codex materialize`
|
|
46
|
-
- `oat project dispatch record` (project-aware dispatch evidence
|
|
47
|
-
provider launcher)
|
|
46
|
+
- `oat project dispatch record` (validates project-aware dispatch evidence and
|
|
47
|
+
writes nothing; never a provider launcher)
|
|
48
48
|
- `oat project dispatch canonical-role` (read-only; prints the
|
|
49
49
|
canonical-role-resolution event that `oat project dispatch record` accepts)
|
|
50
50
|
|
|
@@ -112,8 +112,7 @@ role-selection rejection and do not permit fallback.
|
|
|
112
112
|
|
|
113
113
|
Project workflows construct and redact the complete dispatch payload before
|
|
114
114
|
the native call, then record its accepted or `blocked-before-start` result in
|
|
115
|
-
the project's run record
|
|
116
|
-
directory is optional and off by default. The generic
|
|
115
|
+
the project's run record, which is the only launch record. The generic
|
|
117
116
|
record remains provider-neutral. OAT-specific canonical role, rejection,
|
|
118
117
|
fallback, and runtime facts live only under its `oat` namespace. A qualifying
|
|
119
118
|
fallback is a fresh request that preserves exact target and controls and is
|
|
@@ -53,6 +53,7 @@ The first practical expansion path is to keep improving the existing owners: [Do
|
|
|
53
53
|
| `oat docs ...` | Docs app bootstrap, migration, index generation, nav sync, and docs workflow entrypoints. | [Docs Tooling Commands](../docs-tooling/commands.md) |
|
|
54
54
|
| `oat status` / `oat sync` / `oat providers ...` | Provider sync, drift inspection, provider configuration, and adoption behavior. | [Provider Sync](../provider-sync/index.md) |
|
|
55
55
|
| `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) |
|
|
56
|
+
| `oat template resolve` | Resolve a lifecycle template in repository, user, then bundle order and optionally copy it into place. | [File Locations](file-locations.md) |
|
|
56
57
|
| `oat review ...` | Review artifact discovery helpers, including latest-review resolution for project and ad-hoc review flows. | [Reviews](../workflows/projects/reviews.md) |
|
|
57
58
|
| `oat repo ...` | Repository-level workflows such as archive sync and PR-comment analysis. | [Repository Analysis](../workflows/projects/repo-analysis.md) |
|
|
58
59
|
|
|
@@ -149,12 +150,14 @@ Notable commands introduced in the current CLI surface:
|
|
|
149
150
|
- `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.
|
|
150
151
|
- `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.
|
|
151
152
|
- `oat project promote <project-path> --to quick [--json]` - promote an authored lite project to quick mode. The command derives `discovery.md` from the lite plan's Summary, Decisions, Assumptions, Out of Scope, and Validation Criteria; carries Product Behavior into Success Criteria and Technical Design into a carried-forward discovery section when those adaptive sections are present; preserves the original as `references/lite-plan.md`; and scaffolds a fresh quick `plan.md`. It refuses unsupported targets, non-lite or unreadable projects, an existing lite-plan reference, invalid authored sections, unresolved scope, unavailable templates, failed writes, or failed persistence. JSON output is `{ status: "promoted" | "refused", reason, files }`; `reason` is the stable categorical contract and refused results exit non-zero.
|
|
153
|
+
- `oat template resolve <name> [--output <path>] [--json]` - resolve a template in repository (`<repo>/.oat/templates/`), user (`~/.oat/templates/`), then bundled order and report `name`, `found`, `tier` (`repository` | `user` | `bundle`), and `path`. `path` is set only for the repository and user tiers; it is `null` for the bundled tier, so callers never depend on a package-manager path. `<name>` accepts `plan` or `plan.md` and rejects path separators and `..`. `--output <path>` copies the resolved content to that file, replacing an existing file, and does not create missing parent directories; JSON output adds the absolute `output` path. A template missing from every tier exits 1 with `found: false`. Lifecycle skills use `--output` to copy their artifact templates, so a user-scope-only install works without a repository `.oat/templates/` directory.
|
|
152
154
|
- `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`, `kind` (`project` or `adhoc`), `archived`, and `actionable`, with `null` values when no review exists. Archived project reviews remain discoverable as history but return `actionable: false`.
|
|
153
155
|
- `oat project list --json` - summary state for tracked projects under the configured projects root
|
|
154
|
-
- `oat project
|
|
156
|
+
- `oat project closeout-check <project-path> [--autonomous] [--json]` - read-only check of the closeout invariant: a closeout that must snapshot its post-implementation sequence cannot reach terminal completion until its `oat_post_implement_sequence` snapshot exists, every stored step is recorded complete, approval is recorded, and the snapshot reached `status: complete`. A snapshot is required when the effective layered `workflow.postImplementSequence` is configured, when the closeout is autonomous (`--autonomous`, or `OAT_AUTONOMOUS=1` in the environment even without the flag), or when `oat_workflow_mode` is `lite`. Once a snapshot exists its recorded state is authoritative and current configuration is not consulted. JSON output reports `status` (`complete`, `not_required`, or `incomplete`), the missing `invariant` (`snapshot_missing`, `snapshot_malformed`, `sequence_failed`, `pre_approval_step_pending`, `approval_pending`, `post_approval_step_pending`, or `sequence_not_complete`), `route` (`oat-project-implement` when incomplete), `nextOwner` (the next stored step and its skill, or the approval), and the evaluated `inputs`. An incomplete or malformed result exits 1.
|
|
157
|
+
- `oat project complete-state <project-path> [--archived] [--autonomous]` - apply the canonical completed-state mutation to a project's `state.md`; used by `oat-project-complete` during lifecycle closeout. It first evaluates the same closeout invariant as `oat project closeout-check` and refuses, with the same message and without writing, a configured, autonomous, or lite closeout whose snapshot is absent, malformed, or incomplete. A project whose implementation finished before closeout snapshots existed recovers by running `oat-project-implement`, which persists the snapshot (`completion-and-closeout.md` Step 15) and completes its stored steps; there is no override flag. An unconfigured, interactive, non-lite closeout without a snapshot completes as before.
|
|
155
158
|
- `oat project archive [project-path] [--project-recap-run <project-relative-path>] [--no-commit]` - archive a tracked project through the same local move, summary export, and configured S3 upload path used by completion. When omitted, the project path falls back to the active project. The optional recap path must identify a `project-recap` run inside the project's `explainers/` directory. Archive stages the selected complete package into `.oat/repo/reference/project-recaps/<YYYYMMDD-project-slug>/`, verifies every manifest-declared file byte, then atomically installs the export before deleting the active project. Existing destinations, incomplete inventory coverage, stale bytes, path escapes, and recipe mismatches fail without removing the active project. For synced projects, a configured S3 upload must succeed before terminal cleanup. Successful closeout makes `refs/oat/completed/<project>` authoritative, deletes the tracked JSON record and nested checkout, and leaves archive metadata sufficient for an idempotent recordless retry. With `--json`, the terminal receipt reports `completedRef`, `verifiedSourceSha`, whether `activeAliasDisposition` was `retained` or `removed`, whether `recordRetired` completed, and the parent `lifecycleCommit`. `--no-commit` is a manual/library-only option: for a synced project it still removes the checkout but deliberately leaves `lifecycleCommit` null. Never pass it through `oat-project-complete`, which requires that receipt.
|
|
156
159
|
- `oat repo archive sync [project-name]` - hydrate archived project snapshots from the configured repo-scoped S3 archive into `.oat/projects/archived/`. The old `oat project archive sync` path remains as a deprecated shim.
|
|
157
|
-
- `oat project dispatch record --event-file <json-file-or-dash
|
|
160
|
+
- `oat project dispatch record --event-file <json-file-or-dash>` - validate one generic dispatch record plus its namespaced OAT evidence event and print the result with `status: validated-only`. The command writes nothing; launches are recorded in the calling workflow's run record. Managed, effort-pinned Claude launches run it before launch: the input carries `claudeLaunch` with the real resolver result, generated definition, and proposed payload, plus `recordBase` and `event`. The command validates their agreement and derives the configured invocation fields; callers cannot copy those fields into `recordBase`. One validation run reports every violation across `claudeLaunch`, `recordBase`, and `event` in a single error message, one `stage path: message` line each; the `recordBase` cross-field rules run even when a required field is missing, checks that need a value that failed to parse are skipped and named on a final line, secret-shaped values and absolute paths are scrubbed from the message, and the exit code stays 1. A validated input per role is published at `.agents/skills/oat-dispatch-subagents/references/managed-claude-example.json`. The command validates evidence only — it never launches a provider. A `runtime-observation` event may carry either a finished `observation` or the provider `metadata` envelope (`provider`, `observedAt`, `entries`) to normalize, but not both. `entries` may be raw provider output: they are projected through the owning parser's allowlist, are never echoed in the output, and both forms have their `match` derived from the record's configured invocation rather than trusted from the caller, with the observation's `provider` bound to the record's. With `--json`, the result adds `runtimeIdentity` with separate `configured` and `observed` objects plus a `match` of `matching`, `mismatching`, `not-comparable`, or `null`; observation is corroboration only and never overrides configured invocation. Error output is redacted on a best-effort basis; absolute paths in identity fields are rejected outright, while some prose forms (colon-prefixed, URL routes) can survive. See [Evidence Layers](../workflows/projects/evidence-layers.md).
|
|
158
161
|
- `oat project dispatch canonical-role --role <name> --request-id <id> --skill-dir <dir> [--json]` - resolve a canonical role through the loaded, user (`$HOME/.agents`), and project (`<repo>/.agents`) tiers and print the `canonical-role-resolution` event that `oat project dispatch record` accepts unchanged: redacted `canonicalPath` and `selectedPath` in the form `<loaded|user|project>/agents/<name>.md`, the role's `contentDigest`, and `candidateMisses`. `--skill-dir` is required because the loaded tier is derived from the loaded skill's directory; a missing or invalid directory exits 1 with a redacted error. An unknown role prints `missing` evidence with its recovery commands. Read-only; the dependency is the `workflows` pack.
|
|
159
162
|
- `oat project validate-plan --project-path <path>` - validates `oat_plan_parallel_groups` metadata in `plan.md`; exits non-zero on invalid. Lite plans must contain exactly one phase, declare no parallel groups, and give every Validation Criteria bullet either a backticked command or a `manual:` instruction. See [Implementation Execution](../workflows/projects/implementation-execution.md#parallel-phase-groups).
|
|
160
163
|
- `oat project log append|check|synthesize|rollup` - manage the optional append-only project observation log: append validated judgment or structural entries, inspect grammar and synthesis status, complete end-of-run synthesis, and roll observations into `summary.md` plus the configured repository ledger. See [Project Log](../cli-utilities/project-log.md).
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: Docs Index Contract
|
|
3
|
-
description: 'Docs source contract: authored index.md maps, generated Fumadocs manifests, and MkDocs nav sync.'
|
|
3
|
+
description: 'Docs source contract: authored index.md maps, generated Fumadocs manifests and meta.json navigation, and MkDocs nav sync.'
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Docs Index Contract
|
|
@@ -15,7 +15,7 @@ OAT docs navigation starts from authored `docs/**/index.md` files. Each `## Cont
|
|
|
15
15
|
- Every `## Contents` link should use a `.md`-suffixed relative target, including child directory links such as `subdir/index.md`.
|
|
16
16
|
- Do not hand-edit generated navigation or generated root-index artifacts.
|
|
17
17
|
- 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.
|
|
18
|
-
-
|
|
18
|
+
- Run `oat docs nav sync` after adding, removing, renaming, or reordering pages. It regenerates the framework's navigation from authored `## Contents` maps and preserves the order declared in each local map: the `nav:` block in `mkdocs.yml` for MkDocs, and one `meta.json` per docs directory for Fumadocs.
|
|
19
19
|
|
|
20
20
|
## `## Contents` format
|
|
21
21
|
|
|
@@ -37,7 +37,7 @@ Notes:
|
|
|
37
37
|
|
|
38
38
|
## Fumadocs Generation
|
|
39
39
|
|
|
40
|
-
For this Fumadocs app, rendered page routing
|
|
40
|
+
For this Fumadocs app, rendered page routing comes from the Fumadocs file/source pipeline over `apps/oat-docs/docs`, and the sidebar order comes from the committed `meta.json` files that `oat docs nav sync` writes (see [Fumadocs Nav Sync](#fumadocs-nav-sync)). The generated root manifest, `apps/oat-docs/index.md`, is an inventory for agents and tooling; it is not the rendered sidebar/page-tree source.
|
|
41
41
|
|
|
42
42
|
`oat docs generate-index` walks the Markdown file tree under `docs/` and writes the app-root generated manifest. The app scripts run:
|
|
43
43
|
|
|
@@ -46,7 +46,7 @@ fumadocs-mdx
|
|
|
46
46
|
pnpm -w run cli:source -- docs generate-index --docs-dir apps/oat-docs/docs --output apps/oat-docs/index.md
|
|
47
47
|
```
|
|
48
48
|
|
|
49
|
-
`oat docs generate-index` rewrites the generated root manifest from the docs source tree.
|
|
49
|
+
`oat docs generate-index` rewrites the generated root manifest from the docs source tree. Run it after adding, removing, or retiring pages in this Fumadocs app, and run `oat docs nav sync` as well so the sidebar's `meta.json` files follow the same change. The two commands produce different artifacts: `generate-index` writes the agent-facing inventory and `nav sync` writes the sidebar navigation.
|
|
50
50
|
|
|
51
51
|
Fumadocs generated behavior:
|
|
52
52
|
|
|
@@ -54,6 +54,22 @@ Fumadocs generated behavior:
|
|
|
54
54
|
- Reordering a `## Contents` block does not reorder the generated manifest's file-tree sort.
|
|
55
55
|
- Generated manifests should carry an autogen warning and are rewritten by `predev` / `prebuild`.
|
|
56
56
|
|
|
57
|
+
## Fumadocs Nav Sync
|
|
58
|
+
|
|
59
|
+
In a Fumadocs app (detected by its `source.config.ts`), `oat docs nav sync --target-dir <docs-app-dir>` writes one `meta.json` beside every docs directory `index.md`. The files are generated and committed; edit the `## Contents` map, not the `meta.json`.
|
|
60
|
+
|
|
61
|
+
Fumadocs generated behavior:
|
|
62
|
+
|
|
63
|
+
- `pages` follows the order of the directory's `## Contents` links. The root list starts with `index`; a child directory appears by its folder name, and its own `index.md` becomes that folder's landing page. A folder whose `meta.json` keeps `root: true` also lists `index` first, because Fumadocs gives a root folder no implicit landing page.
|
|
64
|
+
- Navigation is strict: there is no `"..."` rest entry. A page or folder that no `## Contents` map lists stays out of the sidebar, and the command reports it by path in its human output and in `--json` (`unlisted`). Add the page to its directory's `## Contents` map to show it.
|
|
65
|
+
- A `## Contents` link to a page in another directory is written as a Fumadocs link entry such as `[Writing Skills](/contributing/skills)`, so each page belongs to exactly one folder.
|
|
66
|
+
- The folder `title` comes from the `index.md` frontmatter `title`, falling back to its first `#` heading.
|
|
67
|
+
- Keys nav sync does not own, such as `icon` or `defaultOpen`, are kept.
|
|
68
|
+
- Existing files are compared by meaning, not bytes, so a second run with no docs changes writes nothing, even after a formatter rewrites the files.
|
|
69
|
+
- `.md` and `.mdx` pages can both be listed; each appears in `pages` by its file name without the extension.
|
|
70
|
+
|
|
71
|
+
`oat docs nav sync --check` computes the same result and writes nothing. It exits 1 when a `meta.json` file would change or a page or folder is unlisted, and names each one. In this app, `prebuild` runs it, so `pnpm build:docs` fails until the `## Contents` maps and the committed `meta.json` files agree.
|
|
72
|
+
|
|
57
73
|
## MkDocs Nav Sync
|
|
58
74
|
|
|
59
75
|
MkDocs apps use `oat docs nav sync --target-dir <docs-app-dir>` to walk the docs tree from `docs/index.md` downward and regenerate the `nav:` block in `mkdocs.yml` from discovered directory `index.md` files.
|
|
@@ -69,7 +85,7 @@ MkDocs generated behavior:
|
|
|
69
85
|
|
|
70
86
|
- Edit authored files under `docs/`, especially the nearest `index.md` and `## Contents`.
|
|
71
87
|
- Do not hand-edit a Fumadocs app-root generated `index.md`; regenerate it from the docs source tree.
|
|
72
|
-
- Do not hand-maintain MkDocs `nav:` entries when the local workflow uses `oat docs nav sync`.
|
|
88
|
+
- Do not hand-maintain MkDocs `nav:` entries or Fumadocs `meta.json` `pages` lists when the local workflow uses `oat docs nav sync`.
|
|
73
89
|
- 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.
|
|
74
90
|
|
|
75
91
|
## Authoring guidance
|
|
@@ -77,7 +93,7 @@ MkDocs generated behavior:
|
|
|
77
93
|
- Use `index.md` as the local discovery surface for humans and agents.
|
|
78
94
|
- Add a short topic description next to each link so agents can choose the right file without opening every page.
|
|
79
95
|
- Update `## Contents` whenever you add, remove, rename, or reorder docs files in a directory.
|
|
80
|
-
- Regenerate the framework-specific
|
|
96
|
+
- Regenerate the framework-specific artifacts after structural changes: `nav sync` for MkDocs `mkdocs.yml` and Fumadocs `meta.json` navigation, plus `generate-index` for Fumadocs root manifests.
|
|
81
97
|
- Refresh or freshness-check the generated artifact before committing structural docs changes.
|
|
82
98
|
|
|
83
99
|
## If You Are Trying To...
|
|
@@ -38,7 +38,12 @@ columns are ordinary states.
|
|
|
38
38
|
|
|
39
39
|
Project-scope templates under `.oat/templates/` are owner overrides that OAT
|
|
40
40
|
seeds once and never rewrites; the managed default lives at user scope and in
|
|
41
|
-
the bundle. PJM templates resolve repository → user →
|
|
41
|
+
the bundle. Project lifecycle and PJM templates resolve repository → user →
|
|
42
|
+
bundle. Run `oat template resolve <name>` to see which tier supplies one, or
|
|
43
|
+
add `--output <path>` to copy it. Idea templates under `ideas/` are different:
|
|
44
|
+
the ideas skills select `.oat/templates/ideas/` or `~/.oat/templates/ideas/` by
|
|
45
|
+
the ideas scope, and `oat template resolve` does not search nested
|
|
46
|
+
directories.
|
|
42
47
|
|
|
43
48
|
Pack intent is stored per scope:
|
|
44
49
|
|
|
@@ -172,7 +177,7 @@ Archive sync surfaces:
|
|
|
172
177
|
- `packages/cli/src/commands/docs/init/` — scaffold a docs app (Fumadocs or MkDocs)
|
|
173
178
|
- `packages/cli/src/commands/docs/migrate/` — convert MkDocs admonitions to GFM callouts
|
|
174
179
|
- `packages/cli/src/commands/docs/index-generate/` — generate a docs index from markdown files
|
|
175
|
-
- `packages/cli/src/commands/docs/nav/` — regenerate mkdocs.yml nav from index.md sections
|
|
180
|
+
- `packages/cli/src/commands/docs/nav/` — regenerate mkdocs.yml nav or Fumadocs meta.json from index.md sections
|
|
176
181
|
- `packages/cli/src/commands/instructions/`
|
|
177
182
|
- `packages/cli/src/commands/project/`
|
|
178
183
|
- `packages/cli/src/commands/internal/`
|
|
@@ -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) - Authored `index.md` maps, `.md` links, generated Fumadocs manifests, and MkDocs nav sync boundaries.
|
|
16
|
+
- [Docs Index Contract](docs-index-contract.md) - Authored `index.md` maps, `.md` links, generated Fumadocs manifests, and MkDocs and Fumadocs 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
|
|
|
@@ -97,6 +97,27 @@ Use [Instruction Sync](../provider-sync/instruction-sync.md) for the full strate
|
|
|
97
97
|
- Per-pack install commands no longer accept the previously inert `--force`
|
|
98
98
|
option.
|
|
99
99
|
|
|
100
|
+
## A skill fails with `unknown command 'template'` or `'closeout-check'`
|
|
101
|
+
|
|
102
|
+
Lifecycle skills from OAT 0.3.11 copy their templates with
|
|
103
|
+
`oat template resolve` and check closeout with `oat project closeout-check`.
|
|
104
|
+
An older `oat` on `PATH` rejects both:
|
|
105
|
+
|
|
106
|
+
```text
|
|
107
|
+
error: unknown command 'template'
|
|
108
|
+
error: unknown command 'closeout-check'
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
`oat-project-complete` treats a failed closeout check as an incomplete
|
|
112
|
+
closeout, so with an older CLI it stops and routes back to
|
|
113
|
+
`oat-project-implement` even when every closeout step is done. This happens
|
|
114
|
+
when the skills a host loads are newer than the CLI, for example repository
|
|
115
|
+
skills from a newer checkout run against an older global CLI.
|
|
116
|
+
|
|
117
|
+
Check `oat --version`. Install `@open-agent-toolkit/cli` 0.3.11 or later, then
|
|
118
|
+
refresh the installed skills to that CLI's bundle with
|
|
119
|
+
`oat tools update --all`.
|
|
120
|
+
|
|
100
121
|
## `sync` reports an unsafe provider parent
|
|
101
122
|
|
|
102
123
|
Errors containing `Unsafe provider parent`, `symbolic links are not allowed in
|
|
@@ -200,7 +221,13 @@ OAT could not read the canonical managed-pack inventory. `oat status` keeps the
|
|
|
200
221
|
rest of the report available and returns `packs.availability.status` as
|
|
201
222
|
`unavailable` in JSON, with an empty `packs.states` array and a structured
|
|
202
223
|
diagnostic. `oat doctor` emits the same condition as a warning instead of
|
|
203
|
-
stopping its other checks.
|
|
224
|
+
stopping its other checks.
|
|
225
|
+
|
|
226
|
+
The diagnostic message redacts only the roots that are part of the run: the
|
|
227
|
+
project root becomes a relative path (or `.`) when project scope is checked,
|
|
228
|
+
and the home root becomes `~` when user scope is checked. Redaction is a literal
|
|
229
|
+
replacement of those exact root paths, so a path outside them, such as a global
|
|
230
|
+
bundle path in an assets error, stays absolute in the message.
|
|
204
231
|
|
|
205
232
|
Rebuild the CLI workspace, then rerun the command named in the diagnostic:
|
|
206
233
|
|
|
@@ -269,16 +296,24 @@ oat pjm init
|
|
|
269
296
|
scaffold — rerun `oat pjm init`), or `none`. `oat pjm init` records
|
|
270
297
|
`pjm.initialized` in `.oat/config.json` after verifying the canonical scaffold.
|
|
271
298
|
|
|
272
|
-
## A
|
|
299
|
+
## A template change is not taking effect
|
|
300
|
+
|
|
301
|
+
Project lifecycle and PJM templates resolve repository → user → bundle, first
|
|
302
|
+
match wins (idea templates follow the ideas scope instead). A repository
|
|
303
|
+
template under `.oat/templates/` is an owner override that pack updates never
|
|
304
|
+
rewrite, so it shadows the managed user default. Check which tier supplies a
|
|
305
|
+
template:
|
|
273
306
|
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
307
|
+
```bash
|
|
308
|
+
oat template resolve plan
|
|
309
|
+
```
|
|
277
310
|
|
|
278
311
|
Delete the repository copy to fall back to the managed default, or update the
|
|
279
|
-
managed default itself
|
|
312
|
+
managed default itself (`workflows` owns the project lifecycle templates,
|
|
313
|
+
`project-management` the PJM templates):
|
|
280
314
|
|
|
281
315
|
```bash
|
|
316
|
+
oat tools update --pack workflows --scope user
|
|
282
317
|
oat tools update --pack project-management --scope user
|
|
283
318
|
```
|
|
284
319
|
|
|
@@ -95,9 +95,14 @@ dispatch records, prompts, logs, or the VM image.
|
|
|
95
95
|
## User-scope asset precedence
|
|
96
96
|
|
|
97
97
|
In provisioned cloud environments, the user-scope installation is the execution
|
|
98
|
-
source for
|
|
99
|
-
|
|
100
|
-
|
|
98
|
+
source for skills and scripts. The user tier is refreshed from the published
|
|
99
|
+
package during environment setup; repository copies of skills and scripts are
|
|
100
|
+
compatibility context, not an override.
|
|
101
|
+
|
|
102
|
+
Templates are the exception. They resolve repository, then user, then bundled,
|
|
103
|
+
the same order as everywhere else, because a repository template is an owner
|
|
104
|
+
override. Agents resolve and copy them with `oat template resolve <name>
|
|
105
|
+
--output <destination>` rather than reading `~/.oat/templates/` directly.
|
|
101
106
|
|
|
102
107
|
For skills, compare frontmatter versions as a freshness check:
|
|
103
108
|
|