@open-agent-toolkit/cli 0.2.41 → 0.2.45
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/agents/oat-phase-implementer.md +11 -1
- package/assets/bundle-metadata.json +1 -1
- package/assets/docs/cli-utilities/configuration.md +11 -1
- package/assets/docs/quickstart.md +9 -0
- package/assets/docs/reference/cli-reference.md +56 -1
- package/assets/docs/reference/file-locations.md +18 -1
- package/assets/docs/reference/oat-directory-structure.md +20 -4
- package/assets/docs/workflows/projects/artifacts.md +27 -1
- package/assets/docs/workflows/projects/implementation-execution.md +22 -0
- package/assets/docs/workflows/projects/index.md +6 -0
- package/assets/docs/workflows/projects/lifecycle.md +19 -5
- package/assets/docs/workflows/projects/picking-up-projects.md +75 -0
- package/assets/docs/workflows/projects/pr-flow.md +22 -1
- package/assets/docs/workflows/projects/reviewing-oat-prs.md +60 -0
- package/assets/public-package-versions.json +4 -4
- package/assets/skills/oat-brainstorm/SKILL.md +135 -32
- package/assets/skills/oat-brainstorm/references/destinations.md +9 -6
- package/assets/skills/oat-cursor-cloud-projects/SKILL.md +11 -1
- package/assets/skills/oat-doctor/SKILL.md +8 -1
- package/assets/skills/oat-project-autonomous/SKILL.md +45 -1
- package/assets/skills/oat-project-autonomous/references/gate-inventory.md +8 -8
- package/assets/skills/oat-project-capture/SKILL.md +29 -9
- package/assets/skills/oat-project-complete/SKILL.md +610 -38
- package/assets/skills/oat-project-complete/scripts/parse-completion-retry-fields.mjs +265 -0
- package/assets/skills/oat-project-complete/scripts/recover-completion-receipts.mjs +764 -0
- package/assets/skills/oat-project-complete/scripts/resolve-completion-retry.mjs +134 -0
- package/assets/skills/oat-project-complete/scripts/validate-nonarchive-lifecycle-receipt.mjs +160 -0
- package/assets/skills/oat-project-design/SKILL.md +33 -9
- package/assets/skills/oat-project-discover/SKILL.md +16 -3
- package/assets/skills/oat-project-document/SKILL.md +10 -4
- package/assets/skills/oat-project-document/references/docs/autonomy-contract.md +8 -8
- package/assets/skills/oat-project-implement/SKILL.md +14 -3
- package/assets/skills/oat-project-implement/references/completion-and-closeout.md +18 -6
- package/assets/skills/oat-project-implement/references/docs/autonomy-contract.md +8 -8
- package/assets/skills/oat-project-implement/references/phase-execution.md +9 -3
- package/assets/skills/oat-project-implement/references/plan-and-resume.md +3 -0
- package/assets/skills/oat-project-import-plan/SKILL.md +15 -9
- package/assets/skills/oat-project-new/SKILL.md +7 -5
- package/assets/skills/oat-project-next/SKILL.md +32 -10
- package/assets/skills/oat-project-plan/SKILL.md +18 -3
- package/assets/skills/oat-project-pr-final/SKILL.md +23 -2
- package/assets/skills/oat-project-pr-final/references/docs/autonomy-contract.md +8 -8
- package/assets/skills/oat-project-pr-progress/SKILL.md +23 -2
- package/assets/skills/oat-project-progress/SKILL.md +23 -9
- package/assets/skills/oat-project-promote-spec-driven/SKILL.md +20 -2
- package/assets/skills/oat-project-quick-start/SKILL.md +48 -18
- package/assets/skills/oat-project-quick-start/references/docs/autonomy-contract.md +8 -8
- package/assets/skills/oat-project-reconcile/SKILL.md +14 -10
- package/assets/skills/oat-project-retro/SKILL.md +3 -3
- package/assets/skills/oat-project-retro/references/apply-procedure.md +102 -6
- package/assets/skills/oat-project-retro-file/SKILL.md +57 -6
- package/assets/skills/oat-project-review-provide/SKILL.md +45 -4
- package/assets/skills/oat-project-review-receive/SKILL.md +16 -7
- package/assets/skills/oat-project-review-receive-remote/SKILL.md +9 -3
- package/assets/skills/oat-project-revise/SKILL.md +12 -3
- package/assets/skills/oat-project-spec/SKILL.md +16 -3
- package/assets/skills/oat-project-summary/SKILL.md +113 -13
- package/assets/skills/oat-wave-execute/SKILL.md +34 -2
- package/assets/skills/oat-worktree-bootstrap/SKILL.md +13 -1
- package/assets/skills/oat-worktree-bootstrap-auto/SKILL.md +13 -1
- package/dist/commands/config/index.d.ts +1 -0
- package/dist/commands/config/index.d.ts.map +1 -1
- package/dist/commands/config/index.js +30 -2
- package/dist/commands/doctor/index.d.ts +2 -0
- package/dist/commands/doctor/index.d.ts.map +1 -1
- package/dist/commands/doctor/index.js +27 -3
- package/dist/commands/doctor/synced-projects.d.ts +12 -0
- package/dist/commands/doctor/synced-projects.d.ts.map +1 -0
- package/dist/commands/doctor/synced-projects.js +208 -0
- package/dist/commands/init/gitattributes.d.ts +4 -0
- package/dist/commands/init/gitattributes.d.ts.map +1 -0
- package/dist/commands/init/gitattributes.js +12 -0
- package/dist/commands/init/gitignore.d.ts +8 -1
- package/dist/commands/init/gitignore.d.ts.map +1 -1
- package/dist/commands/init/gitignore.js +146 -41
- package/dist/commands/init/index.d.ts +2 -0
- package/dist/commands/init/index.d.ts.map +1 -1
- package/dist/commands/init/index.js +3 -0
- package/dist/commands/init/managed-block.d.ts +10 -0
- package/dist/commands/init/managed-block.d.ts.map +1 -0
- package/dist/commands/init/managed-block.js +40 -0
- package/dist/commands/init/tools/workflows/install-workflows.js +1 -1
- package/dist/commands/local/index.d.ts.map +1 -1
- package/dist/commands/local/index.js +5 -1
- package/dist/commands/local/sync.d.ts +4 -0
- package/dist/commands/local/sync.d.ts.map +1 -1
- package/dist/commands/local/sync.js +123 -2
- package/dist/commands/pjm/adoption.d.ts +2 -0
- package/dist/commands/pjm/adoption.d.ts.map +1 -1
- package/dist/commands/pjm/adoption.js +1 -1
- package/dist/commands/project/archive/archive-utils.d.ts +24 -0
- package/dist/commands/project/archive/archive-utils.d.ts.map +1 -1
- package/dist/commands/project/archive/archive-utils.js +349 -22
- package/dist/commands/project/archive/index.d.ts.map +1 -1
- package/dist/commands/project/archive/index.js +1 -0
- package/dist/commands/project/archive/push-runner.d.ts +5 -1
- package/dist/commands/project/archive/push-runner.d.ts.map +1 -1
- package/dist/commands/project/archive/push-runner.js +33 -4
- package/dist/commands/project/complete-state/index.d.ts.map +1 -1
- package/dist/commands/project/complete-state/index.js +3 -1
- package/dist/commands/project/index.d.ts.map +1 -1
- package/dist/commands/project/index.js +12 -0
- package/dist/commands/project/links/compute.d.ts +9 -0
- package/dist/commands/project/links/compute.d.ts.map +1 -0
- package/dist/commands/project/links/compute.js +27 -0
- package/dist/commands/project/links/index.d.ts +17 -0
- package/dist/commands/project/links/index.d.ts.map +1 -0
- package/dist/commands/project/links/index.js +72 -0
- package/dist/commands/project/links/refresh.d.ts +26 -0
- package/dist/commands/project/links/refresh.d.ts.map +1 -0
- package/dist/commands/project/links/refresh.js +92 -0
- package/dist/commands/project/links/render.d.ts +24 -0
- package/dist/commands/project/links/render.d.ts.map +1 -0
- package/dist/commands/project/links/render.js +68 -0
- package/dist/commands/project/list.d.ts +5 -0
- package/dist/commands/project/list.d.ts.map +1 -1
- package/dist/commands/project/list.js +182 -9
- package/dist/commands/project/migrate/index.d.ts +22 -0
- package/dist/commands/project/migrate/index.d.ts.map +1 -0
- package/dist/commands/project/migrate/index.js +79 -0
- package/dist/commands/project/new/index.d.ts +2 -0
- package/dist/commands/project/new/index.d.ts.map +1 -1
- package/dist/commands/project/new/index.js +14 -2
- package/dist/commands/project/new/scaffold.d.ts +22 -1
- package/dist/commands/project/new/scaffold.d.ts.map +1 -1
- package/dist/commands/project/new/scaffold.js +287 -69
- package/dist/commands/project/open/index.d.ts +16 -0
- package/dist/commands/project/open/index.d.ts.map +1 -1
- package/dist/commands/project/open/index.js +151 -19
- package/dist/commands/project/pause/index.d.ts +8 -0
- package/dist/commands/project/pause/index.d.ts.map +1 -1
- package/dist/commands/project/pause/index.js +129 -19
- package/dist/commands/project/prune/index.d.ts +21 -0
- package/dist/commands/project/prune/index.d.ts.map +1 -0
- package/dist/commands/project/prune/index.js +95 -0
- package/dist/commands/project/pull/index.d.ts +28 -0
- package/dist/commands/project/pull/index.d.ts.map +1 -0
- package/dist/commands/project/pull/index.js +157 -0
- package/dist/commands/project/push/index.d.ts +22 -0
- package/dist/commands/project/push/index.d.ts.map +1 -0
- package/dist/commands/project/push/index.js +100 -0
- package/dist/commands/project/scope/index.d.ts +17 -0
- package/dist/commands/project/scope/index.d.ts.map +1 -0
- package/dist/commands/project/scope/index.js +107 -0
- package/dist/commands/project/split/run.d.ts +4 -0
- package/dist/commands/project/split/run.d.ts.map +1 -1
- package/dist/commands/project/split/run.js +48 -10
- package/dist/commands/project/sync/git.d.ts +18 -0
- package/dist/commands/project/sync/git.d.ts.map +1 -0
- package/dist/commands/project/sync/git.js +60 -0
- package/dist/commands/project/sync/record.d.ts +22 -0
- package/dist/commands/project/sync/record.d.ts.map +1 -0
- package/dist/commands/project/sync/record.js +133 -0
- package/dist/commands/project/sync/ref-sync.d.ts +120 -0
- package/dist/commands/project/sync/ref-sync.d.ts.map +1 -0
- package/dist/commands/project/sync/ref-sync.js +962 -0
- package/dist/commands/project/sync/resolve-target.d.ts +27 -0
- package/dist/commands/project/sync/resolve-target.d.ts.map +1 -0
- package/dist/commands/project/sync/resolve-target.js +159 -0
- package/dist/commands/shared/oat-paths.d.ts +4 -1
- package/dist/commands/shared/oat-paths.d.ts.map +1 -1
- package/dist/commands/shared/oat-paths.js +2 -2
- package/dist/commands/shared/project-scope.d.ts +23 -0
- package/dist/commands/shared/project-scope.d.ts.map +1 -0
- package/dist/commands/shared/project-scope.js +106 -0
- package/dist/commands/tools/migrate/index.js +1 -1
- package/dist/commands/tools/shared/pack-inventory.d.ts.map +1 -1
- package/dist/commands/tools/shared/pack-inventory.js +11 -0
- package/dist/commands/tools/shared/pack-lifecycle.js +1 -1
- package/dist/commands/tools/shared/pack-reconcile.d.ts.map +1 -1
- package/dist/commands/tools/shared/pack-reconcile.js +4 -1
- package/dist/commands/tools/update/index.d.ts.map +1 -1
- package/dist/commands/tools/update/index.js +20 -10
- package/dist/commands/tools/update/update-tools.d.ts +2 -0
- package/dist/commands/tools/update/update-tools.d.ts.map +1 -1
- package/dist/config/oat-config.d.ts +6 -3
- package/dist/config/oat-config.d.ts.map +1 -1
- package/dist/config/oat-config.js +41 -7
- package/dist/config/resolve.d.ts.map +1 -1
- package/dist/config/resolve.js +2 -1
- package/dist/fs/io.d.ts +2 -1
- package/dist/fs/io.d.ts.map +1 -1
- package/dist/fs/io.js +5 -2
- package/dist/projects/split/finalize.d.ts.map +1 -1
- package/dist/projects/split/finalize.js +55 -2
- package/dist/projects/split/resume.d.ts +3 -0
- package/dist/projects/split/resume.d.ts.map +1 -1
- package/dist/projects/split/resume.js +34 -7
- package/dist/projects/split/seed-children.d.ts.map +1 -1
- package/dist/projects/split/seed-children.js +6 -0
- package/dist/projects/split/write-parent.d.ts +7 -0
- package/dist/projects/split/write-parent.d.ts.map +1 -1
- package/dist/projects/split/write-parent.js +7 -4
- package/dist/release/public-package-contract.d.ts.map +1 -1
- package/dist/release/public-package-contract.js +1 -0
- package/dist/validation/skills.d.ts.map +1 -1
- package/dist/validation/skills.js +434 -0
- package/package.json +4 -4
- package/dist/__tests__/skills/split-flow-fixtures.d.ts +0 -50
- package/dist/__tests__/skills/split-flow-fixtures.d.ts.map +0 -1
- package/dist/__tests__/skills/split-flow-fixtures.js +0 -161
- package/dist/commands/__tests__/helpers.d.ts +0 -12
- package/dist/commands/__tests__/helpers.d.ts.map +0 -1
- package/dist/commands/__tests__/helpers.js +0 -36
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: oat-phase-implementer
|
|
3
|
-
version: 1.
|
|
3
|
+
version: 1.1.1
|
|
4
4
|
description: Implements one plan phase end-to-end, commits each task separately, self-checks between tasks, and handles bounded review fixes when resumed by oat-project-implement.
|
|
5
5
|
tools: Read, Write, Edit, Bash, Grep, Glob, Task
|
|
6
6
|
color: cyan
|
|
@@ -131,6 +131,16 @@ After formatting, run the repository's applicable gate set over the produced
|
|
|
131
131
|
diff, explicitly including artifact writes. This supplements rather than
|
|
132
132
|
replaces every task and phase verification command below.
|
|
133
133
|
|
|
134
|
+
## Synced-Scope Bookkeeping
|
|
135
|
+
|
|
136
|
+
Artifact and recovery-ledger bookkeeping commits must first resolve scope with
|
|
137
|
+
`oat project scope "$PROJECT_PATH" --format value`. A `synced` project uses
|
|
138
|
+
`oat project push` with the original bookkeeping message; other scopes keep the
|
|
139
|
+
existing scoped `git add` and `git commit` commands. Scope resolution fails
|
|
140
|
+
closed. A nonzero project-push exit stops bookkeeping until the reported
|
|
141
|
+
recovery is resolved and the push is retried. Planned code task commits such as
|
|
142
|
+
`feat(pNN-tNN)` are unchanged.
|
|
143
|
+
|
|
134
144
|
## Prevention and Post-Commit Recovery
|
|
135
145
|
|
|
136
146
|
Prevention is the first recovery control. Before every planned task commit:
|
|
@@ -76,7 +76,17 @@ Earlier CLI versions returned `config.json` / `config.local.json` / `env` / `def
|
|
|
76
76
|
|
|
77
77
|
Common keys in `.oat/config.json`:
|
|
78
78
|
|
|
79
|
-
- `projects.root` —
|
|
79
|
+
- `projects.root` — shared-scope project root. Relative values resolve from the
|
|
80
|
+
repository root; absolute values remain absolute. OAT derives the `local`
|
|
81
|
+
and `synced` roots as sibling directories named `local` and `synced` under
|
|
82
|
+
this root's parent, so a custom value relocates all three scope roots as one
|
|
83
|
+
layout. Synced project creation requires the derived `synced` root to resolve
|
|
84
|
+
inside the repository; an external absolute root remains usable for `shared`
|
|
85
|
+
and `local` projects but is rejected before any synced checkout, ref, record,
|
|
86
|
+
active pointer, or Git index mutation.
|
|
87
|
+
- `projects.defaultScope` — scope used by project creation when `--scope` is
|
|
88
|
+
omitted (`synced` by default). `OAT_PROJECTS_DEFAULT_SCOPE` overrides the
|
|
89
|
+
configured value for the current process.
|
|
80
90
|
- `worktrees.root` — where OAT-managed worktrees live
|
|
81
91
|
- `git.defaultBranch` — base branch fallback for PR workflows
|
|
82
92
|
- `documentation.root`, `documentation.tooling`, `documentation.config` — docs-surface ownership
|
|
@@ -9,6 +9,15 @@ Use this page to choose the OAT path that matches what you are actually trying t
|
|
|
9
9
|
|
|
10
10
|
This page is intentionally lightweight. It is not the full command manual. Once you choose a path, continue into the owning section for the deeper operational detail.
|
|
11
11
|
|
|
12
|
+
## Prerequisites
|
|
13
|
+
|
|
14
|
+
- Node.js 22.17 or newer
|
|
15
|
+
- Git 2.31 or newer
|
|
16
|
+
|
|
17
|
+
OAT does not run an up-front Git version check. Git compatibility is evaluated
|
|
18
|
+
best-effort by each command, and a missing or unsupported Git operation exits as
|
|
19
|
+
a system error.
|
|
20
|
+
|
|
12
21
|
## Choose a Path
|
|
13
22
|
|
|
14
23
|
### Provider Sync
|
|
@@ -56,6 +56,61 @@ The first practical expansion path is to keep improving the existing owners: [Do
|
|
|
56
56
|
|
|
57
57
|
Notable commands introduced in the current CLI surface:
|
|
58
58
|
|
|
59
|
+
- `oat project new <slug> --scope shared|local|synced [--force]` - create a
|
|
60
|
+
project in an explicit scope. Without `--scope`, creation uses
|
|
61
|
+
`projects.defaultScope`, which defaults to `synced`. Project slugs are
|
|
62
|
+
unique across all scopes by default, including recorded or remotely
|
|
63
|
+
published synced projects. `--force` deliberately permits a duplicate; use
|
|
64
|
+
an explicit project path with `project open` or `project pause` whenever a
|
|
65
|
+
slug is ambiguous across scopes.
|
|
66
|
+
- `oat project scope [project] --format value|json` - resolve a project's
|
|
67
|
+
storage scope without inspecting its path manually.
|
|
68
|
+
- `oat project push [project] [--message <message>]` - commit pending synced
|
|
69
|
+
artifacts, reconcile with the exact project ref on `origin`, publish it, and
|
|
70
|
+
refresh an open PR's artifact-links block. Use `--no-refresh-pr` to skip the
|
|
71
|
+
PR edit. With `--json`, success returns `status` (`pushed` or `up-to-date`),
|
|
72
|
+
the full project-ref `sha`, the retained `ref`, and optional `prRefresh`;
|
|
73
|
+
conflict and rejected outcomes return their corresponding `status` and exit
|
|
74
|
+
nonzero.
|
|
75
|
+
- `oat project pull [project] [--no-commit]` - fetch and materialize or update a synced
|
|
76
|
+
checkout. Resolve a rebase conflict and run `pull --continue`, or use
|
|
77
|
+
`pull --abort` to return to the pre-pull state. Coordination children are
|
|
78
|
+
pulled by default; `--no-children` limits the operation to the selected
|
|
79
|
+
project. When pull adopts a remote project with no local discovery record,
|
|
80
|
+
`--no-commit` leaves the new record uncommitted for the caller to persist.
|
|
81
|
+
With `--json`, the receipt includes `status`, `sha`, and `ref`, plus
|
|
82
|
+
`conflicts` when applicable and per-child results when coordination children
|
|
83
|
+
were requested.
|
|
84
|
+
- `oat project links [project] --format markdown|json` - render SHA-pinned
|
|
85
|
+
links for the linkable artifacts on the project ref. On GitHub origins the
|
|
86
|
+
artifacts become full-SHA blob links; other hosts degrade to the retained ref
|
|
87
|
+
and short SHA without guessing a web URL. `--durable-summary <path>` accepts
|
|
88
|
+
only a path contained in the repository, normalizes it repository-relative,
|
|
89
|
+
and renders it as a code span rather than a guessed remote link.
|
|
90
|
+
- `oat project pause [project]` - persist the pause state and clear the active
|
|
91
|
+
project pointer. If synced publication is declined or fails after the pause
|
|
92
|
+
commit is created, that clean commit is retained; address the publication
|
|
93
|
+
failure and rerun `pause` to publish it.
|
|
94
|
+
- `oat project prune [project] [--force] [--no-commit]` - remove every
|
|
95
|
+
checkout, the local and remote project refs, and the tracked record. When the
|
|
96
|
+
project is omitted, the active project is used. This is the explicit
|
|
97
|
+
destructive operation; `--force` may discard dirty or unpushed artifacts,
|
|
98
|
+
while `--no-commit` leaves the parent-record deletion for a library caller to
|
|
99
|
+
commit. If remote deletion succeeds but local checkout removal fails, the
|
|
100
|
+
local ref, record, and checkouts are retained. Resolve the reported local
|
|
101
|
+
obstruction and retry `prune --force`; do not run `project push`, which would
|
|
102
|
+
republish the deleted remote ref.
|
|
103
|
+
- `oat project migrate <path> --to synced [--no-commit]` - migrate an existing
|
|
104
|
+
shared project to synced storage while preserving its artifacts and
|
|
105
|
+
retargeting the active project pointer. `--no-commit` leaves the parent
|
|
106
|
+
record and source-tree transition uncommitted for a library caller.
|
|
107
|
+
- `oat project list --scope shared|local|synced` - filter tracked projects by
|
|
108
|
+
scope. Add `--remote` to discover project refs that do not yet have a local
|
|
109
|
+
record or checkout, and `--include-coordination` to include coordination
|
|
110
|
+
parents. A malformed discovery record with no materialized checkout appears
|
|
111
|
+
as a `recorded-invalid` row. When the checkout is materialized, its existing
|
|
112
|
+
row instead carries the restore hint and `recordError` parse diagnostic in
|
|
113
|
+
`--json` output.
|
|
59
114
|
- `oat tools migrate --pack <pack> --from <scope> --to <scope>` - move one installed pack between project and user scope. Always previews first, installs and re-inventories the destination before touching the source, and offers source removal only after the destination is verified complete. Declining or running non-interactively leaves the pack installed at both scopes rather than failing. `--dry-run` stops after the preview; there is no force flag. See [Tool Packs](../cli-utilities/tool-packs.md#oat-tools-migrate).
|
|
60
115
|
- `oat pjm doctor --json` - read-only repository PJM diagnostics whose result carries an additive `adoption` object (`state` of `declared` | `inferred-legacy` | `partial-initialization` | `none`, `repoRoot`, and `recovery`). This, not `oat tools has project-management`, is the check that answers whether _this repository_ adopted PJM.
|
|
61
116
|
- `oat config dump --json` - merged config with source attribution
|
|
@@ -66,7 +121,7 @@ Notable commands introduced in the current CLI surface:
|
|
|
66
121
|
- `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`.
|
|
67
122
|
- `oat project list --json` - summary state for tracked projects under the configured projects root
|
|
68
123
|
- `oat project complete-state <project-path>` - apply the canonical completed-state mutation to a project's `state.md`; used by `oat-project-complete` during lifecycle closeout
|
|
69
|
-
- `oat project archive [project-path] [--project-recap-run <project-relative-path>]` - archive a tracked project through the same local move, summary export, and optional S3 upload path used by completion. When omitted, the project path falls back to the active project. 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 immutable file byte, then atomically installs the export before deleting the active project. Existing destinations, incomplete legacy hash coverage, stale bytes, path escapes, and recipe mismatches fail without removing the active project.
|
|
124
|
+
- `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 optional 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 immutable file byte, then atomically installs the export before deleting the active project. Existing destinations, incomplete legacy hash coverage, stale bytes, path escapes, and recipe mismatches fail without removing the active project. `--no-commit` is a manual/library-only option: for a synced project it still removes the checkout but deliberately omits the lifecycle commit receipt. Never pass it through `oat-project-complete`, which requires that receipt.
|
|
70
125
|
- `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.
|
|
71
126
|
- `oat project validate-plan --project-path <path>` - validates `oat_plan_parallel_groups` metadata in `plan.md`; exits non-zero on invalid. See [Implementation Execution](../workflows/projects/implementation-execution.md#parallel-phase-groups).
|
|
72
127
|
- `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).
|
|
@@ -52,6 +52,8 @@ Pack intent is stored per scope:
|
|
|
52
52
|
- Local runtime config (per-developer state): `.oat/config.local.json`
|
|
53
53
|
- Active idea: `activeIdea` in `.oat/config.local.json` (repo) or `~/.oat/config.json` (user)
|
|
54
54
|
- Projects root config: `projects.root` in `.oat/config.json` (read via `oat config get projects.root`)
|
|
55
|
+
- Default project scope: `projects.defaultScope` in `.oat/config.json`
|
|
56
|
+
(`synced` by default; override with `OAT_PROJECTS_DEFAULT_SCOPE`)
|
|
55
57
|
- Archive config: `archive.s3Uri`, `archive.s3SyncOnComplete`, `archive.summaryExportPath`, `archive.wrapUpExportPath`, `archive.awsProfile`, and `archive.awsRegion` in `.oat/config.json`
|
|
56
58
|
- Workflow gate config: `workflow.gates.skills` and `workflow.gates.execTargets` in `.oat/config.json`, `.oat/config.local.json`, or `~/.oat/config.json` (manage via `oat gate`)
|
|
57
59
|
- Project sync manifest/config: `.oat/sync/`
|
|
@@ -87,16 +89,31 @@ Config ownership note:
|
|
|
87
89
|
## Project artifact trees
|
|
88
90
|
|
|
89
91
|
- Shared: `.oat/projects/shared/<project>/`
|
|
92
|
+
- Synced checkout: `.oat/projects/synced/<project>/` (gitignored nested
|
|
93
|
+
worktree)
|
|
94
|
+
- Synced record: `.oat/projects/synced/<project>.json` (tracked on the parent
|
|
95
|
+
branch)
|
|
96
|
+
- Synced ref: `refs/oat/projects/<project>` on `origin`
|
|
90
97
|
- Local: `.oat/projects/local/<project>/`
|
|
91
98
|
- Archived: `.oat/projects/archived/<project>/`
|
|
92
99
|
|
|
100
|
+
The OAT-managed block in the repository root `.gitattributes` marks shared
|
|
101
|
+
project artifacts as generated for repository hosting UIs. `oat init` and
|
|
102
|
+
`oat tools update` own that block; preserve non-OAT entries outside its markers
|
|
103
|
+
and do not hand-edit the managed entry.
|
|
104
|
+
|
|
93
105
|
Archive sync surfaces:
|
|
94
106
|
|
|
95
107
|
- Local archive root: `.oat/projects/archived/`
|
|
96
108
|
- Remote archive base: `archive.s3Uri` in `.oat/config.json`
|
|
97
109
|
- Archive sync command: `oat repo archive sync` or `oat repo archive sync <project-name>`
|
|
98
110
|
- Remote archive snapshot shape: `<archive.s3Uri>/<repo-slug>/projects/YYYYMMDD-<project-name>/`
|
|
99
|
-
- Summary export target:
|
|
111
|
+
- Summary export target:
|
|
112
|
+
`<repo>/<archive.summaryExportPath>/YYYYMMDD-<project-name>.md` when
|
|
113
|
+
configured. The archive report returns this absolute filesystem path, while
|
|
114
|
+
`oat project links --durable-summary` normalizes a contained path to a
|
|
115
|
+
repository-relative code span. It does not invent a GitHub-style URL for
|
|
116
|
+
non-GitHub remotes.
|
|
100
117
|
- Wrap-up export target: `<repo>/<archive.wrapUpExportPath>/YYYY-MM-DD-wrap-up-<label>.md` when configured; otherwise `oat-wrap-up` falls back to `<repo>/.oat/repo/reference/wrap-ups/`
|
|
101
118
|
|
|
102
119
|
## Ideas — project level (gitignored)
|
|
@@ -24,6 +24,9 @@ Project scope is used for project workflows and repo-local sync state. User scop
|
|
|
24
24
|
config.local.json
|
|
25
25
|
projects/
|
|
26
26
|
shared/
|
|
27
|
+
synced/
|
|
28
|
+
<project>.json
|
|
29
|
+
<project>/
|
|
27
30
|
local/
|
|
28
31
|
archived/
|
|
29
32
|
ideas/
|
|
@@ -47,7 +50,7 @@ Project scope is used for project workflows and repo-local sync state. User scop
|
|
|
47
50
|
| `.oat/config.json` | Shared repo runtime config for non-sync settings | Includes `worktrees.root`, `projects.root`, `git.defaultBranch`, `archive.*`, and `documentation.*` |
|
|
48
51
|
| `.oat/config.local.json` | Local per-developer runtime state | Gitignored; includes `activeProject`, `lastPausedProject`, `activeIdea` |
|
|
49
52
|
| `.oat/state.md` | Generated repo state dashboard | Gitignored; rebuilt with `oat state refresh` from config, project artifacts, and knowledge metadata |
|
|
50
|
-
| `.oat/projects/` | OAT project artifacts | `shared`, `local`, `archived`
|
|
53
|
+
| `.oat/projects/` | OAT project artifacts | `shared`, `synced`, `local`, and lifecycle `archived` locations |
|
|
51
54
|
| `.oat/ideas/` | Project-level ideas store | Often gitignored |
|
|
52
55
|
| `.oat/sync/` | Interop sync state/config | See details below |
|
|
53
56
|
| `.oat/templates/` | Artifact templates used by OAT skills | Source for scaffolding. Includes `docs-app-fuma/` (Fumadocs) and `docs-app-mkdocs/` (MkDocs) templates. |
|
|
@@ -105,6 +108,7 @@ Current schema keys:
|
|
|
105
108
|
| `version` | `number` | `1` | Schema version |
|
|
106
109
|
| `worktrees.root` | `string` | `".worktrees"` | Root directory for git worktrees (repo-relative or absolute) |
|
|
107
110
|
| `projects.root` | `string` | `".oat/projects/shared"` | Default root directory for OAT projects |
|
|
111
|
+
| `projects.defaultScope` | `string` | `"synced"` | Scope used by project creation when `--scope` is omitted: `shared`, `local`, or `synced`. Environment override: `OAT_PROJECTS_DEFAULT_SCOPE`. |
|
|
108
112
|
| `localPaths` | `string[]` | - | Gitignored directories to sync between main repo and worktrees. Supports glob patterns. Managed via `oat local add/remove`. |
|
|
109
113
|
| `documentation.root` | `string` | - | Root directory containing documentation source files (e.g., `apps/docs/docs`) |
|
|
110
114
|
| `documentation.tooling` | `string` | - | Documentation framework identifier (`mkdocs` or `fumadocs`) |
|
|
@@ -139,7 +143,8 @@ Example:
|
|
|
139
143
|
{
|
|
140
144
|
"version": 1,
|
|
141
145
|
"projects": {
|
|
142
|
-
"root": ".oat/projects/shared"
|
|
146
|
+
"root": ".oat/projects/shared",
|
|
147
|
+
"defaultScope": "synced"
|
|
143
148
|
},
|
|
144
149
|
"worktrees": {
|
|
145
150
|
"root": ".worktrees"
|
|
@@ -173,12 +178,23 @@ For repo-relative values (levels 3-4), paths are resolved from the repository ro
|
|
|
173
178
|
Each OAT project lives under:
|
|
174
179
|
|
|
175
180
|
- `.oat/projects/shared/<project>/`
|
|
181
|
+
- `.oat/projects/synced/<project>/` for a gitignored nested worktree whose
|
|
182
|
+
history is published to `refs/oat/projects/<project>`
|
|
183
|
+
- `.oat/projects/synced/<project>.json` for the tracked discovery record that
|
|
184
|
+
identifies the ref, remote, and active or complete status
|
|
176
185
|
- `.oat/projects/local/<project>/`
|
|
177
186
|
- `.oat/projects/archived/<project>/`
|
|
178
187
|
|
|
179
|
-
|
|
188
|
+
Completion and archive sync behavior:
|
|
180
189
|
|
|
181
|
-
- `oat-project-complete`
|
|
190
|
+
- When archiving is selected, `oat-project-complete` archives locally into
|
|
191
|
+
`.oat/projects/archived/<project>/`. For a synced project, the snapshot omits
|
|
192
|
+
the nested checkout's `.git` pointer and `reviews/`, then completion marks
|
|
193
|
+
the tracked record complete, removes the nested worktree, and retains the
|
|
194
|
+
project ref so pinned links keep resolving.
|
|
195
|
+
- When archiving is disabled or declined, completion leaves the synced
|
|
196
|
+
checkout and ref in place, pushes the finalized artifacts, and exact-path
|
|
197
|
+
commits the tracked record as complete.
|
|
182
198
|
- If `archive.s3SyncOnComplete=true` and `archive.s3Uri` is configured, completion also uploads a dated snapshot such as `<archive.s3Uri>/<repo-slug>/projects/20260401-<project>/`.
|
|
183
199
|
- `oat repo archive sync` syncs all repo archived projects down from S3 into `.oat/projects/archived/`.
|
|
184
200
|
- `oat repo archive sync <project-name>` syncs the latest dated remote snapshot for a single project into `.oat/projects/archived/<project-name>/`.
|
|
@@ -5,7 +5,33 @@ description: 'Project artifact contracts: state.md, spec.md, design.md, plan.md,
|
|
|
5
5
|
|
|
6
6
|
# Project Artifacts
|
|
7
7
|
|
|
8
|
-
Project artifacts
|
|
8
|
+
Project artifacts use one of three active scopes:
|
|
9
|
+
|
|
10
|
+
- `shared` artifacts live directly on the feature branch under
|
|
11
|
+
`.oat/projects/shared/<project>/`.
|
|
12
|
+
- `synced` artifacts live in a gitignored nested worktree at
|
|
13
|
+
`.oat/projects/synced/<project>/`, backed by
|
|
14
|
+
`refs/oat/projects/<project>` on `origin`. The feature branch tracks only
|
|
15
|
+
`.oat/projects/synced/<project>.json`.
|
|
16
|
+
- `local` artifacts stay untracked on the current machine under
|
|
17
|
+
`.oat/projects/local/<project>/`.
|
|
18
|
+
|
|
19
|
+
`projects.defaultScope` controls creation when a command does not pass
|
|
20
|
+
`--scope`; its default is `synced`.
|
|
21
|
+
|
|
22
|
+
## Synced artifact bookkeeping
|
|
23
|
+
|
|
24
|
+
Lifecycle skills write the same project files in every scope. After a synced
|
|
25
|
+
write, they use `oat project push` instead of staging the artifact path on the
|
|
26
|
+
parent branch. The command makes an artifact commit in the nested checkout,
|
|
27
|
+
rebases it on the fetched project ref, and pushes only that ref. Arrival skills
|
|
28
|
+
run `oat project pull` before reading artifacts so a record or remote ref can
|
|
29
|
+
materialize the checkout first.
|
|
30
|
+
|
|
31
|
+
The tracked JSON record is routing metadata, not a copy of the project. It
|
|
32
|
+
identifies the slug, `origin`, ref, status, and archive snapshot when present.
|
|
33
|
+
The project ref remains the source of truth for active artifact content and
|
|
34
|
+
history.
|
|
9
35
|
|
|
10
36
|
## Core artifacts
|
|
11
37
|
|
|
@@ -406,6 +406,28 @@ For a plan-declared parallel group, the root:
|
|
|
406
406
|
Containment, ownership, base, or fixture-readiness failure in smoke mode aborts
|
|
407
407
|
the run. It never authorizes replacement or sequential degradation.
|
|
408
408
|
|
|
409
|
+
## Synced projects in worktrees
|
|
410
|
+
|
|
411
|
+
A tracked `.oat/projects/synced/<project>.json` record lets every repository
|
|
412
|
+
worktree discover the same synced project without putting its artifacts on the
|
|
413
|
+
feature branch. On arrival, project skills run `oat project pull` before they
|
|
414
|
+
read state. Pull fetches the exact `refs/oat/projects/<project>` ref and, when
|
|
415
|
+
needed, materializes a fresh nested checkout at
|
|
416
|
+
`.oat/projects/synced/<project>/`.
|
|
417
|
+
|
|
418
|
+
Each parent worktree gets an independent detached nested checkout. Those
|
|
419
|
+
checkouts do not share an index or working tree; they reconcile artifact
|
|
420
|
+
history through the project ref on `origin`. If a pull or push encounters an
|
|
421
|
+
overlapping change, resolve the files in the nested checkout and run
|
|
422
|
+
`oat project pull --continue`. Use `oat project pull --abort` to restore the
|
|
423
|
+
pre-pull state instead.
|
|
424
|
+
|
|
425
|
+
`oat local sync` skips these nested repositories, so local-path hydration does
|
|
426
|
+
not copy or overwrite synced artifact checkouts. Removing a parent worktree
|
|
427
|
+
also needs no special nested-checkout cleanup: the ignored nested worktree does
|
|
428
|
+
not prevent parent removal, and the next `oat project pull` prunes stale Git
|
|
429
|
+
worktree registrations before materializing or updating the current checkout.
|
|
430
|
+
|
|
409
431
|
## Codex Depth
|
|
410
432
|
|
|
411
433
|
Default execution needs the root-to-phase-agent depth. `agents.max_depth >= 2`
|
|
@@ -24,6 +24,8 @@ Projects are where the workflow layer becomes concrete: lifecycle phases, `state
|
|
|
24
24
|
- [Programmatic Execution](programmatic-execution.md) - Per-harness headless/CLI execution surfaces and where OAT uses them.
|
|
25
25
|
- [Project Artifacts](artifacts.md) - What lives in `state.md`, `discovery.md`, `plan.md`, `implementation.md`, and related files.
|
|
26
26
|
- [Implementation Execution](implementation-execution.md) - Phase dispatch, runtime selection, review/fix loop, and dry-run behavior.
|
|
27
|
+
- [Reviewing OAT PRs](reviewing-oat-prs.md) - Read synced-project records and SHA-pinned reviewer links in a PR.
|
|
28
|
+
- [Picking Up Projects](picking-up-projects.md) - Continue a synced project on another machine or from another user.
|
|
27
29
|
- [Project Splitting](splitting.md) - How broad discoveries or brainstorms become coordination parents and child projects.
|
|
28
30
|
- [State Machine](state-machine.md) - Lifecycle and review status transitions across a project.
|
|
29
31
|
- [Reviews](reviews.md) - How review request/receive loops work inside OAT projects.
|
|
@@ -50,6 +52,8 @@ This sub-section is the deep technical surface for how tracked OAT projects exec
|
|
|
50
52
|
- Split broad scopes into coordination parents and focused children in [Project Splitting](splitting.md).
|
|
51
53
|
- Understand lifecycle and review transitions in [State Machine](state-machine.md).
|
|
52
54
|
- Learn review and PR expectations in [Reviews](reviews.md) and [PR Flow](pr-flow.md).
|
|
55
|
+
- Review a synced project's durable context in [Reviewing OAT PRs](reviewing-oat-prs.md).
|
|
56
|
+
- Continue remote project work with [Picking Up Projects](picking-up-projects.md).
|
|
53
57
|
|
|
54
58
|
## Go Deeper
|
|
55
59
|
|
|
@@ -68,4 +72,6 @@ This sub-section is the deep technical surface for how tracked OAT projects exec
|
|
|
68
72
|
- [State Machine](state-machine.md) - Lifecycle and review status transitions across a project.
|
|
69
73
|
- [Reviews](reviews.md) - How review request/receive loops work inside OAT projects.
|
|
70
74
|
- [PR Flow](pr-flow.md) - Progress and final PR generation expectations.
|
|
75
|
+
- [Reviewing OAT PRs](reviewing-oat-prs.md) - Record metadata, pinned links, and editor discovery for synced projects.
|
|
76
|
+
- [Picking Up Projects](picking-up-projects.md) - Remote discovery, adopting pull, coordination children, and retention boundaries.
|
|
71
77
|
- [Repository PR Comment Analysis](repo-analysis.md) - Repo-wide PR comment collection and triage workflows.
|
|
@@ -70,13 +70,23 @@ After implementation closeout finishes:
|
|
|
70
70
|
- GitHub PR feedback delegates to `oat-project-review-receive-remote`
|
|
71
71
|
- Review artifacts delegate to `oat-project-review-receive`
|
|
72
72
|
- After revision tasks complete, state returns to `pr_open`
|
|
73
|
-
5. **Complete** (`oat-project-complete`) — accepts any phase status (`pr_open`, `complete`, `in_progress`), auto-refreshes `summary.md` before closeout when needed, and
|
|
73
|
+
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
|
|
74
74
|
|
|
75
75
|
### Completion archive behavior
|
|
76
76
|
|
|
77
|
-
On completion, OAT
|
|
78
|
-
|
|
79
|
-
-
|
|
77
|
+
On completion, OAT treats archive handling as an explicit closeout choice:
|
|
78
|
+
|
|
79
|
+
- When archiving is selected, the local archive is written to `.oat/projects/archived/<project>/`.
|
|
80
|
+
- When archiving is disabled or declined, durable projects remain at their
|
|
81
|
+
active path. Synced completion still finalizes and pushes the project ref,
|
|
82
|
+
commits the discovery record as `complete`, retains the checkout and ref, and
|
|
83
|
+
attests a selected recap against the project-ref history.
|
|
84
|
+
- For a synced project, closeout first finalizes the project artifacts and
|
|
85
|
+
pushes them to `refs/oat/projects/<project>`. Archive then requires a clean,
|
|
86
|
+
fully pushed checkout; copies it without the `.git` pointer or `reviews/`;
|
|
87
|
+
marks the tracked record complete; commits the record and configured durable
|
|
88
|
+
exports on the parent branch; removes the nested checkout; and retains the
|
|
89
|
+
ref. This order keeps SHA-pinned PR links valid after completion.
|
|
80
90
|
- If `.oat/config.json` enables `archive.s3SyncOnComplete` and sets `archive.s3Uri`, completion also attempts an S3 upload for a dated snapshot such as `<archive.s3Uri>/<repo-slug>/projects/20260401-<project>/`.
|
|
81
91
|
- If `.oat/config.json` sets `archive.awsProfile` and/or `archive.awsRegion`, those values are forwarded to every `aws` invocation triggered by completion (preflight checks + `aws s3 sync`) and override any ambient shell `AWS_PROFILE` / `AWS_DEFAULT_PROFILE` / `AWS_REGION` / `AWS_DEFAULT_REGION` values. The repo's archive-scoped credentials are treated as deliberate intent so users don't have to unset shell env vars before running completion. See [`config-and-local-state.md`](../../cli-utilities/config-and-local-state.md) for the full precedence chain.
|
|
82
92
|
- If `.oat/config.json` sets `archive.summaryExportPath`, completion copies `summary.md` to `<archive.summaryExportPath>/20260401-<project>.md`.
|
|
@@ -130,7 +140,7 @@ summary, documentation, PR, or project completion.
|
|
|
130
140
|
|
|
131
141
|
### Retrospective completion safety net
|
|
132
142
|
|
|
133
|
-
Before an interactive completion
|
|
143
|
+
Before an interactive completion closes the project,
|
|
134
144
|
`oat-project-complete` checks for
|
|
135
145
|
`{PROJECT_PATH}/references/project-retro.md`. If the artifact is missing, it
|
|
136
146
|
offers to generate one before completion. If the artifact exists, completion
|
|
@@ -292,6 +302,10 @@ Capture lane progression:
|
|
|
292
302
|
## Operational rules
|
|
293
303
|
|
|
294
304
|
- Keep `state.md`, `plan.md`, and `implementation.md` synchronized.
|
|
305
|
+
- For a synced project, publish lifecycle artifact writes with
|
|
306
|
+
`oat project push`; do not stage `.oat/projects/synced/<project>/` on the
|
|
307
|
+
parent branch.
|
|
308
|
+
- On arrival, run `oat project pull` before reading a synced project's state.
|
|
295
309
|
- Stop at configured HiLL checkpoints.
|
|
296
310
|
- Do not move lifecycle forward when required review gates are unresolved.
|
|
297
311
|
- Project entry skills (`oat-project-new`, `oat-project-quick-start`, and `oat-project-import-plan`) surface inherited dirty git state before scaffolding. If the dirty list includes `.oat/sync/manifest.json`, `.claude/`, `.cursor/`, or `.codex/`, the skill calls out that those paths are typically sync output and offers Commit now, Proceed anyway, or Abort.
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Picking Up Projects
|
|
3
|
+
description: Continue a synced OAT project on another machine or from another user through its dedicated Git ref.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Picking Up a Project on Another Machine or From Another User
|
|
7
|
+
|
|
8
|
+
Synced projects travel through ordinary Git refs on `origin`. Their artifact
|
|
9
|
+
history is independent from the implementation branch, so a teammate or a
|
|
10
|
+
second machine can continue the project even before the branch carrying its
|
|
11
|
+
record file merges.
|
|
12
|
+
|
|
13
|
+
## Discover and adopt
|
|
14
|
+
|
|
15
|
+
From any checkout with access to `origin`:
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
oat project list --remote
|
|
19
|
+
oat project pull <project>
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
`list --remote` discovers `refs/oat/projects/*` directly. `pull` can adopt a
|
|
23
|
+
remote project that has no local record yet: it writes the record and creates
|
|
24
|
+
the nested checkout. When the selected project is a coordination parent, pull
|
|
25
|
+
also discovers and pulls its child projects by default. Pass `--no-children`
|
|
26
|
+
only when you intentionally want the selected project alone.
|
|
27
|
+
|
|
28
|
+
After adoption, set or open the project through the normal lifecycle command
|
|
29
|
+
you are using. Arrival-aware project skills pull before reading its artifacts.
|
|
30
|
+
|
|
31
|
+
## What travels
|
|
32
|
+
|
|
33
|
+
- The project ref carries the complete active artifact tree and its history.
|
|
34
|
+
- The tracked JSON record travels once the branch containing it is shared or
|
|
35
|
+
merged.
|
|
36
|
+
- Coordination relationships travel in the artifacts and records pulled with
|
|
37
|
+
the project.
|
|
38
|
+
|
|
39
|
+
## What does not travel automatically
|
|
40
|
+
|
|
41
|
+
- `local` projects never leave their original machine.
|
|
42
|
+
- GitHub forks copy branches and tags, but not the `refs/oat/*` namespace. A
|
|
43
|
+
fork collaborator needs access to the upstream remote or an explicit ref
|
|
44
|
+
transfer.
|
|
45
|
+
- A normal `git clone` fetches branches and tags, not custom OAT refs. OAT
|
|
46
|
+
handles remote discovery with `ls-remote` and explicitly fetches the selected
|
|
47
|
+
project ref during sync operations such as `pull`; do not expect a generic
|
|
48
|
+
clone or `git fetch` to materialize the checkout.
|
|
49
|
+
|
|
50
|
+
## Why retained refs remain durable
|
|
51
|
+
|
|
52
|
+
`refs/oat/projects/<project>` is a real Git ref locally and on `origin`. The
|
|
53
|
+
objects reachable from it remain garbage-collection roots even when no nested
|
|
54
|
+
checkout exists. Branch pruning, remote-tracking-ref pruning, and
|
|
55
|
+
`git worktree prune` do not delete the project ref. Completion deliberately
|
|
56
|
+
retains it so pinned PR links remain valid.
|
|
57
|
+
|
|
58
|
+
Only the explicit destructive operation `oat project prune` removes the local
|
|
59
|
+
and remote project refs. Treat it as permanent project-history deletion and
|
|
60
|
+
review its warnings before using `--force`.
|
|
61
|
+
|
|
62
|
+
## Archive contents
|
|
63
|
+
|
|
64
|
+
When archive is selected, completion copies a synced project into
|
|
65
|
+
`.oat/projects/archived/<project>/` without the nested checkout's `.git`
|
|
66
|
+
pointer or `reviews/`. S3 snapshots also omit `pr/`, following the existing
|
|
67
|
+
archive policy. When archive is disabled or declined, the active synced
|
|
68
|
+
checkout remains in place. Both paths retain the project ref and commit the
|
|
69
|
+
tracked record as `complete`; only the archive path records an archive snapshot.
|
|
70
|
+
|
|
71
|
+
## Related
|
|
72
|
+
|
|
73
|
+
- [Reviewing OAT PRs](reviewing-oat-prs.md)
|
|
74
|
+
- [Project Artifacts](artifacts.md)
|
|
75
|
+
- [Implementation Execution](implementation-execution.md#synced-projects-in-worktrees)
|
|
@@ -34,6 +34,25 @@ GitHub PR body policy:
|
|
|
34
34
|
- Keep YAML frontmatter in local artifact
|
|
35
35
|
- Strip frontmatter from submitted PR body
|
|
36
36
|
|
|
37
|
+
## Synced project links
|
|
38
|
+
|
|
39
|
+
For a synced project, PR creation follows a six-step order:
|
|
40
|
+
|
|
41
|
+
1. write and format the local PR artifact;
|
|
42
|
+
2. run `oat project push` so the project ref contains the latest artifacts;
|
|
43
|
+
3. run `oat project links --format markdown` to generate the delimited links
|
|
44
|
+
block from that exact ref commit;
|
|
45
|
+
4. include the block in the submitted PR body;
|
|
46
|
+
5. persist `oat_pr_status` and `oat_pr_url` in `state.md`; and
|
|
47
|
+
6. push again so subsequent artifact writes can refresh the open PR body.
|
|
48
|
+
|
|
49
|
+
The generated block links only `discovery.md`, `design.md`, and `summary.md`
|
|
50
|
+
when present. The URLs are pinned to the project ref's exact commit SHA rather
|
|
51
|
+
than a moving branch name. `plan.md`, `state.md`, `implementation.md`, and
|
|
52
|
+
`reviews/` are intentionally excluded because they contain agent-facing
|
|
53
|
+
execution detail rather than the reviewer-oriented project narrative. See
|
|
54
|
+
[Reviewing OAT PRs](reviewing-oat-prs.md).
|
|
55
|
+
|
|
37
56
|
## Post-PR state
|
|
38
57
|
|
|
39
58
|
After `oat-project-pr-final` creates the PR, `state.md` transitions to `oat_phase_status: pr_open`. This signals "awaiting human review" rather than "done."
|
|
@@ -57,7 +76,9 @@ Both completion orderings are supported:
|
|
|
57
76
|
|
|
58
77
|
An open PR is not a completion blocker. When completion archives project
|
|
59
78
|
artifacts, the archive-aware flow regenerates and synchronizes the open PR body
|
|
60
|
-
so its artifact links remain valid.
|
|
79
|
+
so its artifact links remain valid. Synced completion retains the project ref,
|
|
80
|
+
which keeps its SHA-pinned links resolvable after the nested checkout is
|
|
81
|
+
removed.
|
|
61
82
|
|
|
62
83
|
## Reference artifacts
|
|
63
84
|
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Reviewing OAT PRs
|
|
3
|
+
description: Understand synced-project records, SHA-pinned artifact links, and the reviewer-facing PR experience.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Reviewing OAT PRs
|
|
7
|
+
|
|
8
|
+
A PR for a synced OAT project contains the implementation diff without placing
|
|
9
|
+
the agent-facing project tree on the feature branch. Reviewers get durable
|
|
10
|
+
project context through a small tracked record and a generated links block in
|
|
11
|
+
the PR body.
|
|
12
|
+
|
|
13
|
+
## The synced record
|
|
14
|
+
|
|
15
|
+
`.oat/projects/synced/<project>.json` is tracked on the feature branch. It
|
|
16
|
+
names the project slug, `origin`, `refs/oat/projects/<project>`, whether the
|
|
17
|
+
project is active or complete, and the archive snapshot when completion has
|
|
18
|
+
created one. It is discovery and lifecycle metadata; the project artifacts
|
|
19
|
+
themselves live on the project ref.
|
|
20
|
+
|
|
21
|
+
## The artifact links block
|
|
22
|
+
|
|
23
|
+
`oat project links` generates a delimited Markdown block for the PR body. Each
|
|
24
|
+
URL points at the exact project-ref commit current when the block was rendered,
|
|
25
|
+
so later pushes cannot silently change the content behind an existing link.
|
|
26
|
+
`oat project push` refreshes the block when the project's `state.md` identifies
|
|
27
|
+
an open PR.
|
|
28
|
+
|
|
29
|
+
The block includes the reviewer-oriented artifacts that exist:
|
|
30
|
+
|
|
31
|
+
- `discovery.md` for problem framing and constraints;
|
|
32
|
+
- `design.md` for the selected architecture; and
|
|
33
|
+
- `summary.md` for the concise outcome and durable decisions.
|
|
34
|
+
|
|
35
|
+
It does not link `plan.md`, `state.md`, `implementation.md`, or `reviews/`.
|
|
36
|
+
Those files are operational agent context, can be noisy or transient, and are
|
|
37
|
+
not part of the stable reviewer narrative. The implementation diff and normal
|
|
38
|
+
PR review remain authoritative for the code change.
|
|
39
|
+
|
|
40
|
+
## Editor discovery
|
|
41
|
+
|
|
42
|
+
The project checkout is a nested Git worktree. VS Code and Cursor may not show
|
|
43
|
+
it in Source Control unless repository scanning includes nested repositories.
|
|
44
|
+
Add the synced root to `git.scanRepositories` in workspace settings when you
|
|
45
|
+
want editor Git integration for these checkouts:
|
|
46
|
+
|
|
47
|
+
```json
|
|
48
|
+
{
|
|
49
|
+
"git.scanRepositories": [".oat/projects/synced"]
|
|
50
|
+
}
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
This setting is an editor convenience. OAT's `push`, `pull`, and `links`
|
|
54
|
+
commands do not depend on editor discovery.
|
|
55
|
+
|
|
56
|
+
## Related
|
|
57
|
+
|
|
58
|
+
- [PR Flow](pr-flow.md)
|
|
59
|
+
- [Project Artifacts](artifacts.md)
|
|
60
|
+
- [Picking Up Projects](picking-up-projects.md)
|