@open-agent-toolkit/cli 0.3.9 → 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/config/dispatch-matrix-recommendation.json +6 -6
- package/assets/docs/cli-utilities/configuration.md +12 -8
- 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 +14 -1
- 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/contributing/updating-model-guidance.md +34 -6
- package/assets/docs/contributing/verifying-cursor-pins.md +38 -9
- 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/providers.md +4 -4
- 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/dispatch-ceiling.md +21 -14
- package/assets/docs/workflows/projects/evidence-layers.md +6 -8
- package/assets/docs/workflows/projects/implementation-execution.md +34 -5
- 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/provider-cursor.md +5 -2
- 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 +8 -10
- 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 +4 -4
- 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/skills/subagent-orchestration/SKILL.md +1 -1
- package/assets/skills/subagent-orchestration/references/evidence-and-refresh.md +20 -8
- package/assets/skills/subagent-orchestration/references/provider-claude.md +25 -12
- package/assets/skills/subagent-orchestration/references/provider-codex.md +27 -18
- package/assets/skills/subagent-orchestration/references/provider-cursor.md +40 -10
- 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/claude/dispatch-envelope.d.ts.map +1 -1
- package/dist/providers/claude/dispatch-envelope.js +1 -0
- package/dist/providers/claude/targets.d.ts +1 -0
- package/dist/providers/claude/targets.d.ts.map +1 -1
- package/dist/providers/claude/targets.js +3 -1
- package/dist/providers/codex/codec/shared.d.ts +3 -0
- package/dist/providers/codex/codec/shared.d.ts.map +1 -1
- package/dist/providers/codex/codec/shared.js +4 -0
- package/dist/providers/cursor/codec/catalog.d.ts +2 -2
- package/dist/providers/cursor/codec/catalog.d.ts.map +1 -1
- package/dist/providers/cursor/codec/catalog.js +45 -0
- package/dist/providers/cursor/codec/mapping-validation.d.ts +4 -0
- package/dist/providers/cursor/codec/mapping-validation.d.ts.map +1 -0
- package/dist/providers/cursor/codec/mapping-validation.js +25 -0
- package/dist/providers/cursor/codec/materialize.d.ts.map +1 -1
- package/dist/providers/cursor/codec/materialize.js +2 -11
- package/dist/providers/cursor/codec/sync-extension.d.ts.map +1 -1
- package/dist/providers/cursor/codec/sync-extension.js +2 -11
- 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
|
@@ -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
|
|
|
@@ -85,13 +85,15 @@ Run the same command without `--dry-run` to replace bundled cells. Use
|
|
|
85
85
|
`--shared` or `--local` instead when that scope owns the ladder. Add
|
|
86
86
|
`--keep-existing` to fill only missing cells and preserve existing choices.
|
|
87
87
|
|
|
88
|
-
Version `2026-
|
|
89
|
-
GPT-6 Luna and Sol in Codex, then Sol xhigh, Astra high, and Astra xhigh in
|
|
88
|
+
Version `2026-10-01.1` is the current bundled recommendation. It prefers
|
|
89
|
+
GPT-6 Luna and GPT-6.1 Sol in Codex, then Sol 6.1 xhigh, Astra high, and Astra xhigh in
|
|
90
90
|
Codex Frontier. Astra's task advantage has not been measured locally; this is
|
|
91
91
|
an explicit user-directed preference, not acceptance by the separately
|
|
92
|
-
maintained model-selection policy.
|
|
92
|
+
maintained model-selection policy. Sonnet 5.5 medium replaces Sonnet 5 medium
|
|
93
|
+
in Claude Economy; the older generation stays supported for explicit cells.
|
|
94
|
+
Opus 5.5 low/medium/high remains in Claude High.
|
|
93
95
|
The Claude low option suits bounded intelligent recon in Balanced or High;
|
|
94
|
-
medium remains the implementation starting point under High. GPT-5.6 targets remain
|
|
96
|
+
medium remains the implementation starting point under High. GPT-6 Sol and GPT-5.6 targets remain
|
|
95
97
|
supported for explicit Codex and Cursor configurations. Cursor's preferred
|
|
96
98
|
ladder interleaves verified GPT-5.6 and Opus 5.5 mappings: Balanced adds
|
|
97
99
|
Opus 5.5 low above Terra high, High orders Sol medium, Opus low, Sol high,
|
|
@@ -249,19 +251,23 @@ oat_dispatch_policy:
|
|
|
249
251
|
The bundled ladder is a curated subset of the supported targets:
|
|
250
252
|
|
|
251
253
|
- **Codex:** GPT-6 Luna at `low` through `max` across Economy and Balanced;
|
|
252
|
-
GPT-6 Sol at `low` through `high` in High and `xhigh` in Frontier; then
|
|
254
|
+
GPT-6.1 Sol at `low` through `high` in High and `xhigh` in Frontier; then
|
|
253
255
|
GPT-6 Astra at `high` and `xhigh` in Frontier. Astra and Sol remain supported
|
|
254
|
-
at `low`, `medium`, `high`, `xhigh`, and `max`, while GPT-5.6 variants remain
|
|
256
|
+
at `low`, `medium`, `high`, `xhigh`, and `max`, while GPT-6 Sol and GPT-5.6 variants remain
|
|
255
257
|
available outside this preferred ladder.
|
|
256
|
-
- **Claude:** `haiku` and Sonnet 5 at Economy
|
|
257
|
-
|
|
258
|
+
- **Claude:** `haiku` and Sonnet 5.5 medium at Economy; Opus 5.5 low at
|
|
259
|
+
Balanced, low/medium/high at High, and xhigh/max at Frontier; Fable 5.1
|
|
260
|
+
high ends Frontier. Sonnet 5 remains supported for explicit configurations.
|
|
258
261
|
- **Cursor:** the preferred ladder uses approved Composer 2.5, GPT-5.6, Grok
|
|
259
262
|
4.6, Opus 5.5, and Fable 5.1 targets. The catalogue maps each flat ladder ID
|
|
260
|
-
to its separately verified
|
|
263
|
+
to its separately verified frontmatter model. Sonnet 5.5 exact-ID pins
|
|
264
|
+
remain supported outside the ladder; existing families keep their bracket
|
|
265
|
+
selectors. Grok 4.6 (`low`
|
|
261
266
|
through `xhigh`) and Fable 5.1 (`low` through `max`, thinking variants) were
|
|
262
267
|
approved from a 2026-09-25 [native desktop probe](../../contributing/verifying-cursor-pins.md);
|
|
263
268
|
targets outside the ladder remain available for explicit selection. Grok
|
|
264
|
-
4.7
|
|
269
|
+
4.7 stays outside the shipped catalogue pending its own approved mapping
|
|
270
|
+
and per-pin evidence; exact-ID support does not admit arbitrary CLI IDs.
|
|
265
271
|
|
|
266
272
|
The final candidate in a named tier defines that tier's reviewer ceiling. Lower
|
|
267
273
|
reviewer selection requires a separate reviewed contract; a normal reviewer
|
|
@@ -363,9 +369,9 @@ branch replaces, rather than supplements, preferred selection.
|
|
|
363
369
|
|
|
364
370
|
An effort-pinned Claude candidate must establish the exact generation and that
|
|
365
371
|
generation's supported effort. Current directly recognized generations include
|
|
366
|
-
`claude-fable-5-1`, `claude-fable-5`, `claude-opus-5-5`, `claude-sonnet-5`,
|
|
372
|
+
`claude-fable-5-1`, `claude-fable-5`, `claude-opus-5-5`, `claude-sonnet-5-5`, `claude-sonnet-5`,
|
|
367
373
|
`claude-opus-4-7`, `claude-opus-4-6`, and `claude-sonnet-4-6`.
|
|
368
|
-
Opus 5.5
|
|
374
|
+
Opus 5.5 and Sonnet 5.5 support `low`, `medium`, `high`, `xhigh`, and `max`; consult the
|
|
369
375
|
[updating guide](../../contributing/updating-model-guidance.md) before adding
|
|
370
376
|
further generations or rungs. Retired Opus 5.0 and 4.8 are no longer directly
|
|
371
377
|
recognized for effort-pinned dispatch.
|
|
@@ -413,8 +419,9 @@ Cursor selection, pin mapping, catalogue availability, and runtime identity are
|
|
|
413
419
|
separate evidence layers:
|
|
414
420
|
|
|
415
421
|
- The candidate ladder and resolver use an opaque flat ID.
|
|
416
|
-
- The materialized definition uses the mapping's explicit
|
|
417
|
-
|
|
422
|
+
- The materialized definition uses the mapping's explicit frontmatter model,
|
|
423
|
+
either a verified bracket selector or a separately verified exact ID.
|
|
424
|
+
Sonnet 5.5 uses exact IDs; existing families keep their bracket mappings.
|
|
418
425
|
- Mapping-specific native-launch evidence authorizes the shipped mapping data.
|
|
419
426
|
An approved mapping may carry a probe record whose `submittedSelector` must
|
|
420
427
|
equal the mapping's `frontmatterModel` and whose `resolvedModel` must equal
|
|
@@ -77,14 +77,12 @@ section.
|
|
|
77
77
|
|
|
78
78
|
For project-aware work, the calling workflow records each launch in its run
|
|
79
79
|
record in `implementation.md` (request ID, `Dispatch:` stamp, launch status,
|
|
80
|
-
terminal outcome)
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
does not persist a journal file. When a host opts in, the generic snake-case
|
|
87
|
-
fields remain authoritative. A namespaced `oat` block adds
|
|
80
|
+
terminal outcome); that run record is the only launch record.
|
|
81
|
+
`oat project dispatch record` validates a generic record and writes nothing.
|
|
82
|
+
Managed effort-pinned Claude launches pass the real resolver result, generated
|
|
83
|
+
definition, and proposed payload through it before launch, and that
|
|
84
|
+
validation-only call derives the configured invocation. In a validated record
|
|
85
|
+
the generic snake-case fields remain authoritative. A namespaced `oat` block adds
|
|
88
86
|
only canonical-role identity, proven pre-start rejection, fallback linkage,
|
|
89
87
|
and optional runtime observation. `oat project dispatch canonical-role`
|
|
90
88
|
prints the canonical-role-resolution event read-only, so callers do not
|
|
@@ -76,10 +76,10 @@ that scope.
|
|
|
76
76
|
Before a native launch, the root constructs and redacts the complete generic
|
|
77
77
|
dispatch record and OAT role event. When the host returns, it writes the
|
|
78
78
|
request ID, the `Dispatch:` stamp, and the accepted or `blocked-before-start`
|
|
79
|
-
result into the run record in `implementation.md
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
79
|
+
result into the run record in `implementation.md`, the only launch record.
|
|
80
|
+
Before an effort-pinned managed Claude launch, the root must run
|
|
81
|
+
`oat project dispatch record`, which writes nothing, as a validation-only
|
|
82
|
+
boundary. It supplies the real
|
|
83
83
|
resolver result, generated definition, and proposed launch payload, and launches
|
|
84
84
|
only the payload returned by the accepted envelope. An accepted launch closes
|
|
85
85
|
replacement. Only an explicit rejection proving no child started permits one
|
|
@@ -319,6 +319,32 @@ and start a new gate generation. Beyond the version's own exclusion set, no
|
|
|
319
319
|
implementation or closeout output path is excluded from the comparison. Legacy unqualified fingerprints retain the older
|
|
320
320
|
fail-closed descendant-path behavior and are not migrated in place.
|
|
321
321
|
|
|
322
|
+
There is no automatic test-only freshness exception. An operator can instead
|
|
323
|
+
waive named stale-making descendants of an `effective-delta-v1` or
|
|
324
|
+
`effective-delta-v2` generation (`DR-260927-operator-waiver-for-test-only`).
|
|
325
|
+
Each waiver is appended to `oat_implement_exit_gate.waivers` with who waived,
|
|
326
|
+
the reason, the covered `from_commit..to_commit` range, the effective-delta
|
|
327
|
+
fingerprint at the range end (in the generation's own version), and a UTC
|
|
328
|
+
timestamp. A waiver never rewrites `reviewed_head`, the implementation
|
|
329
|
+
fingerprint, `freshness_head`, or the freshness fingerprint, and an earlier
|
|
330
|
+
waiver is never edited. Agents write a waiver only on an explicit operator
|
|
331
|
+
instruction. Under `OAT_AUTONOMOUS=1` an attempted waiver write is refused,
|
|
332
|
+
and a run that finds a stale generation persists `stale` and starts a new gate
|
|
333
|
+
run instead of pausing. A waived generation stays fresh only while nothing
|
|
334
|
+
substantive lands after the covered range, under both versions; a malformed or
|
|
335
|
+
unverifiable waiver fails closed as stale. The project summary and the final PR
|
|
336
|
+
description's Verification section list every waiver.
|
|
337
|
+
|
|
338
|
+
The waiver is offered where staleness is found. Before an interactive
|
|
339
|
+
`oat-project-implement` run persists an allowed generation as `stale` because
|
|
340
|
+
of descendant commits no waiver covers, it lists those commits and asks the
|
|
341
|
+
operator to waive that range or start a new gate run; it persists `stale` only
|
|
342
|
+
when the operator declines. An autonomous run never offers a waiver and starts
|
|
343
|
+
a new gate run. An operator may also record a waiver before resuming
|
|
344
|
+
implementation, for example after `oat-project-next` reports stale state, by
|
|
345
|
+
giving the range, name, and reason in the instruction that resumes
|
|
346
|
+
`oat-project-implement`.
|
|
347
|
+
|
|
322
348
|
This narrow merge-only exemption relies on fresh repository CI, automated
|
|
323
349
|
review such as Bugbot, and lifecycle self-review to cover integration risk.
|
|
324
350
|
Those checks do not substitute for the semantic gate on the full
|
|
@@ -389,8 +415,11 @@ Provider controls remain exact: Codex uses
|
|
|
389
415
|
`providers.claude.dispatchArgs.variant` for an effort-pinned target and
|
|
390
416
|
`providers.claude.dispatchArgs.model` only for a legacy model-only target; and
|
|
391
417
|
Cursor uses `providers.cursor.dispatchArgs.variant`. Cursor launches that exact
|
|
392
|
-
resolver-selected native agent type first; the flat ID and
|
|
418
|
+
resolver-selected native agent type first; the flat ID and frontmatter pin
|
|
393
419
|
remain inside the explicit mapping and are never normalized by workflow prose.
|
|
420
|
+
A mapping may retain a verified bracket-form selector or use a separately
|
|
421
|
+
verified exact ID, as Sonnet 5.5 does. Exact IDs require an approved mapping
|
|
422
|
+
and native probe evidence; catalog presence alone never enables pass-through.
|
|
394
423
|
The launcher records this selection as `configured`, while runtime identity
|
|
395
424
|
remains `not-reported` without independent observation. Only a pre-start native
|
|
396
425
|
role-selection rejection permits another target-preserving route.
|
|
@@ -65,6 +65,12 @@ allowed and fresh disposition before pre-approval work starts. A
|
|
|
65
65
|
not inferred from missing state, and a null, missing, or unrecognized resolver
|
|
66
66
|
result fails closed as unresolved instead.
|
|
67
67
|
|
|
68
|
+
A later substantive change makes an allowed result stale, test-only changes
|
|
69
|
+
included. Only an operator can keep it fresh, by recording an append-only
|
|
70
|
+
exit-gate waiver for the exact commits; agents never issue one. An autonomous
|
|
71
|
+
run that finds a stale result persists `stale` and starts a new gate run; it
|
|
72
|
+
refuses only an attempted waiver write. The summary and PR description list every waiver.
|
|
73
|
+
|
|
68
74
|
After implementation closeout finishes:
|
|
69
75
|
|
|
70
76
|
1. **Summary** (`oat-project-summary`) — generates `summary.md` as institutional memory from project artifacts; PR-final and completion will auto-refresh it if you have not already run it or if it is stale
|
|
@@ -75,7 +81,7 @@ After implementation closeout finishes:
|
|
|
75
81
|
- GitHub PR feedback delegates to `oat-project-review-receive-remote`
|
|
76
82
|
- Review artifacts delegate to `oat-project-review-receive`
|
|
77
83
|
- After revision tasks complete, state returns to `pr_open`
|
|
78
|
-
5. **Complete** (`oat-project-complete`) — accepts any phase status (`pr_open`, `complete`, `in_progress`), auto-refreshes `summary.md` before closeout when needed, and archives when selected by the workflow preference or completion prompt
|
|
84
|
+
5. **Complete** (`oat-project-complete`) — accepts any phase status (`pr_open`, `complete`, `in_progress`), auto-refreshes `summary.md` before closeout when needed, and archives when selected by the workflow preference or completion prompt. Before any completion write it runs the read-only `oat project closeout-check`: a configured, autonomous, or lite closeout whose `oat_post_implement_sequence` snapshot is missing, malformed, or incomplete stops and routes back to `oat-project-implement`, and `oat project complete-state` refuses the same state. There is no override; see the [CLI reference](../../reference/cli-reference.md).
|
|
79
85
|
|
|
80
86
|
### Project-recap gate (non-lite)
|
|
81
87
|
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"title": "Workflow & Projects",
|
|
3
|
+
"pages": [
|
|
4
|
+
"lifecycle",
|
|
5
|
+
"retro",
|
|
6
|
+
"autonomy",
|
|
7
|
+
"cursor-cloud",
|
|
8
|
+
"design-modes",
|
|
9
|
+
"hill-checkpoints",
|
|
10
|
+
"dispatch-ceiling",
|
|
11
|
+
"orchestration-model",
|
|
12
|
+
"review-flavors",
|
|
13
|
+
"evidence-layers",
|
|
14
|
+
"programmatic-execution",
|
|
15
|
+
"artifacts",
|
|
16
|
+
"implementation-execution",
|
|
17
|
+
"reviewing-oat-prs",
|
|
18
|
+
"picking-up-projects",
|
|
19
|
+
"splitting",
|
|
20
|
+
"state-machine",
|
|
21
|
+
"reviews",
|
|
22
|
+
"pr-flow",
|
|
23
|
+
"repo-analysis"
|
|
24
|
+
]
|
|
25
|
+
}
|
|
@@ -76,14 +76,14 @@ sequenceDiagram
|
|
|
76
76
|
participant Root as Project root
|
|
77
77
|
participant Adapter as Project adapter
|
|
78
78
|
participant Engine as Dispatch engine
|
|
79
|
-
participant
|
|
79
|
+
participant Record as Run record in implementation.md
|
|
80
80
|
participant Phase as Phase implementer
|
|
81
81
|
|
|
82
82
|
Root->>Adapter: Phase + lifecycle authority
|
|
83
83
|
Adapter->>Engine: Provider-neutral dispatch request
|
|
84
84
|
Engine-->>Root: Exact route + request ID
|
|
85
85
|
Root->>Phase: Phase Scope
|
|
86
|
-
Root->>
|
|
86
|
+
Root->>Record: Accepted or blocked-before-start result
|
|
87
87
|
Phase-->>Root: Phase report + commits
|
|
88
88
|
```
|
|
89
89
|
|
|
@@ -125,10 +125,9 @@ launch.
|
|
|
125
125
|
The launcher constructs and redacts the complete generic record plus the
|
|
126
126
|
namespaced OAT role event before it calls the native host. When the host
|
|
127
127
|
returns, the calling workflow writes the accepted or `blocked-before-start`
|
|
128
|
-
state into its run record in `implementation.md
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
authority.
|
|
128
|
+
state into its run record in `implementation.md`, the only launch record.
|
|
129
|
+
`oat project dispatch record` validates a record and writes nothing; it never
|
|
130
|
+
launches a provider or changes selection authority.
|
|
132
131
|
|
|
133
132
|
An accepted handle owns the scope and closes replacement. One fresh fallback
|
|
134
133
|
record is legal only when the native wrapper proves no child started, links the
|
|
@@ -275,6 +275,12 @@ them. Adversarial reviewers receive the declared scope, questions, and
|
|
|
275
275
|
provisional statements. Neither pass receives gatherer reasoning, synthesis
|
|
276
276
|
prose, dossier paths, or earlier review conclusions.
|
|
277
277
|
|
|
278
|
+
Review briefs come only from the production brief generator. The packet
|
|
279
|
+
validator rebuilds every brief from the prior claim ledger and manifest with
|
|
280
|
+
that same generator and rejects any difference with `REVIEW_BRIEF_MISMATCH`, so
|
|
281
|
+
a brief carrying an injected claim, note, or source fails publication. A
|
|
282
|
+
review's dispositions must also be unique members of its brief's claims.
|
|
283
|
+
|
|
278
284
|
Each lane receives one explicit authority envelope and one unique output path.
|
|
279
285
|
Its enforcement is recorded as:
|
|
280
286
|
|
|
@@ -293,8 +299,17 @@ operation.
|
|
|
293
299
|
A structurally valid run can publish an honest `partial` packet. The manifest
|
|
294
300
|
and `packet.md` then identify the requested and achieved profiles, failed or
|
|
295
301
|
omitted passes, material gaps, affected claims, and required assurance
|
|
296
|
-
downgrades.
|
|
297
|
-
|
|
302
|
+
downgrades. Every claim a review kept below `verified` (an unresolved issue
|
|
303
|
+
scoped to it or global to its review, a coverage finding that names it, or a
|
|
304
|
+
non-affirming disposition) is listed under Review Downgrades with the review's
|
|
305
|
+
own text, even when it is not a key claim, so a `complete` packet cannot hide a
|
|
306
|
+
downgraded claim. A claim that a required review left without a disposition stays
|
|
307
|
+
`unresolved` and is listed there as not reviewed. A review's
|
|
308
|
+
`unresolvedIssues` entry may name the claim IDs it affects or apply to the
|
|
309
|
+
whole review; a legacy plain-string entry is read as review-wide. A material
|
|
310
|
+
coverage gap does not fail publication by itself: the claims it affects stay
|
|
311
|
+
below `verified` and the run publishes as an honest `partial`. A run may be partial even when it achieved the requested
|
|
312
|
+
profile if a material evidence gap remains. The achieved profile is derived from the
|
|
298
313
|
complete typed artifacts in the packet; each required pass without a complete
|
|
299
314
|
result needs a material `PASS_FAILED` or `PASS_OMITTED` gap. Each approved lane
|
|
300
315
|
must likewise have a complete artifact or a material outcome gap carrying its
|
|
@@ -310,7 +325,17 @@ honest `partial` packet at that achieved profile.
|
|
|
310
325
|
|
|
311
326
|
Status updates and the final handoff label each failure as `worker`,
|
|
312
327
|
`provider/dispatch`, `contract validation`, or `source availability`, and
|
|
313
|
-
say whether every accepted lane reached a terminal result.
|
|
328
|
+
say whether every accepted lane reached a terminal result.
|
|
329
|
+
|
|
330
|
+
A launch the provider rejects before any child is accepted, such as a Codex
|
|
331
|
+
agent-limit rejection, is a `provider/dispatch` failure, never a worker
|
|
332
|
+
failure, and every accepted artifact is kept. The approved `retryLimit` counts
|
|
333
|
+
these pre-acceptance admission retries per lane, and the controller makes at
|
|
334
|
+
most one per lane, so the approval preview's worst case is two attempts per
|
|
335
|
+
lane. The default of 0 allows none. If admission still fails, recon uses an
|
|
336
|
+
alternate route only when it was already approved; otherwise it stops with a
|
|
337
|
+
partial run and asks for a continuation amendment. An accepted lane is never
|
|
338
|
+
rerun to free capacity. Workers that
|
|
314
339
|
completed are never reported as failed because the controller could not
|
|
315
340
|
publish.
|
|
316
341
|
|