@open-agent-toolkit/cli 0.1.15 → 0.1.16
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.
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: oat-project-split
|
|
3
|
-
version: 1.
|
|
3
|
+
version: 1.1.0
|
|
4
4
|
description: Use when a discovery or brainstorm should split one broad scope into coordinated OAT child projects.
|
|
5
5
|
argument-hint: '--plan-file <path>'
|
|
6
6
|
disable-model-invocation: true
|
|
@@ -73,10 +73,25 @@ The run command marks the parent `oat_phase: decomposition` and `oat_phase_statu
|
|
|
73
73
|
|
|
74
74
|
If a previous split wrote a coordination parent but did not finish all children, the run command resumes from `references/split-plan.json`. Do not reconstruct missing child seed data from slugs alone.
|
|
75
75
|
|
|
76
|
+
## Children Resume At Discovery (Revalidation Contract)
|
|
77
|
+
|
|
78
|
+
A split seeds children with inherited context, but that context is only a **starting point**. By the time an agent resumes a child it may be stale, so children must never be treated as discovered, planned, or implementation-ready just because the split wrote their files.
|
|
79
|
+
|
|
80
|
+
What the run command guarantees, and what reviewers should expect:
|
|
81
|
+
|
|
82
|
+
- **Child `state.md` routes to discovery.** Each child is written with `oat_phase: discovery` and `oat_phase_status: in_progress`, plus preserved `oat_parent`, `oat_siblings`, and `oat_depends_on` links. Resume, progress, and quick-start all key off `state.md`, so they pick the child back up at discovery — not at plan or implementation.
|
|
83
|
+
- **Child `discovery.md` is in progress with an unmet revalidation gate.** It carries `oat_status: in_progress` and `oat_inherited_context_revalidated: false`, an explicit "Inherited Context Revalidation Gate" section, and language stating that parent-derived scope is a seed, not a final decision. The discovery-completion gate blocks marking discovery complete until `oat_inherited_context_revalidated: true`.
|
|
84
|
+
- **Child discovery is never marked complete during split generation.** Seeding only provides a provisional starting point.
|
|
85
|
+
- **Placeholder `plan.md` cannot be mistaken for a real plan.** The seeded `plan.md` is re-marked as a not-started template (`oat_template: true`, `oat_template_name: plan`). Routing decisions read `state.md` (`oat_phase: discovery`), and `oat-project-next` treats `oat_template: true` as a still-a-template signal, so the placeholder never reads as plan-ready.
|
|
86
|
+
|
|
87
|
+
A child sitting at `discovery` / `in_progress` after a split is **expected work-in-progress**, not stale bookkeeping. Do not flag it as drift or "skipped discovery" — revalidating inherited context is the next intended step.
|
|
88
|
+
|
|
76
89
|
## Success Criteria
|
|
77
90
|
|
|
78
91
|
- Coordination parent exists and has no `spec.md`, `design.md`, `plan.md`, or `implementation.md`.
|
|
79
92
|
- Parent `state.md` records `oat_kind: coordination`, ordered `oat_children`, and terminal decomposition status.
|
|
80
93
|
- `references/split-plan.json` contains the full `SplitPlanDocument`.
|
|
81
|
-
- Every child
|
|
94
|
+
- Every child `state.md` records `oat_phase: discovery` and `oat_phase_status: in_progress` so resume/progress/quick-start route it back to discovery.
|
|
95
|
+
- Every child has seeded discovery content, parent/sibling/dependency links, `oat_inherited_context_revalidated: false`, and an explicit revalidation gate; no child discovery is marked complete by the split.
|
|
96
|
+
- Every child `plan.md` is a not-started template placeholder (`oat_template: true`) that never reads as plan-ready.
|
|
82
97
|
- `.oat/config.local.json.activeProject` points at the repo-relative initial child path.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { ChildPlan } from './child-plan.js';
|
|
2
2
|
import type { SplitProjectContext } from './write-parent.js';
|
|
3
|
-
declare const SEEDED_SECTIONS: readonly ["Origin", "Inherited Context", "Child Scope", "Known Dependencies", "Assumptions To Revalidate", "Likely Workflow Mode", "Sibling Projects"];
|
|
3
|
+
declare const SEEDED_SECTIONS: readonly ["Origin", "Inherited Context", "Inherited Context Revalidation Gate", "Child Scope", "Known Dependencies", "Assumptions To Revalidate", "Likely Workflow Mode", "Sibling Projects"];
|
|
4
4
|
export interface SeedChildrenResult {
|
|
5
5
|
childProjectPaths: string[];
|
|
6
6
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seed-children.d.ts","sourceRoot":"","sources":["../../../src/projects/split/seed-children.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAE1D,QAAA,MAAM,eAAe,
|
|
1
|
+
{"version":3,"file":"seed-children.d.ts","sourceRoot":"","sources":["../../../src/projects/split/seed-children.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAE1D,QAAA,MAAM,eAAe,+LASX,CAAC;AA0GX,MAAM,WAAW,kBAAkB;IACjC,iBAAiB,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED,wBAAsB,YAAY,CAChC,IAAI,EAAE,SAAS,EACf,OAAO,EAAE,mBAAmB,EAC5B,SAAS,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GACtB,OAAO,CAAC,kBAAkB,CAAC,CAoD7B;AAED,OAAO,EAAE,eAAe,EAAE,CAAC"}
|
|
@@ -7,6 +7,7 @@ import YAML from 'yaml';
|
|
|
7
7
|
const SEEDED_SECTIONS = [
|
|
8
8
|
'Origin',
|
|
9
9
|
'Inherited Context',
|
|
10
|
+
'Inherited Context Revalidation Gate',
|
|
10
11
|
'Child Scope',
|
|
11
12
|
'Known Dependencies',
|
|
12
13
|
'Assumptions To Revalidate',
|
|
@@ -53,16 +54,38 @@ function renderSeededDiscovery(plan, child) {
|
|
|
53
54
|
.map((candidate) => candidate.slug)
|
|
54
55
|
.filter((slug) => slug !== child.slug);
|
|
55
56
|
const sections = [
|
|
56
|
-
[
|
|
57
|
+
[
|
|
58
|
+
'Origin',
|
|
59
|
+
`Split from coordination parent \`${plan.parentSlug}\`. This child was seeded by \`oat-project-split\`; it is **not** discovered, planned, or implementation-ready yet and resumes at discovery.`,
|
|
60
|
+
],
|
|
57
61
|
[
|
|
58
62
|
'Inherited Context',
|
|
59
|
-
|
|
63
|
+
[
|
|
64
|
+
child.inheritedContext || 'No inherited context provided.',
|
|
65
|
+
'',
|
|
66
|
+
'> Provisional seed. This context was inherited from the parent split decision. It is a **starting point, not a final scope decision** — treat every inherited claim as an assumption until it is revalidated below.',
|
|
67
|
+
].join('\n'),
|
|
68
|
+
],
|
|
69
|
+
[
|
|
70
|
+
'Inherited Context Revalidation Gate',
|
|
71
|
+
[
|
|
72
|
+
'This project resumes at **discovery**, not planning or implementation. Inherited context may be stale by the time work resumes, so it must be revalidated before this discovery is completed.',
|
|
73
|
+
'',
|
|
74
|
+
'- [ ] Re-read the inherited context against the current codebase and sibling progress.',
|
|
75
|
+
'- [ ] Confirm or correct the child scope, dependencies, and assumptions below.',
|
|
76
|
+
'- [ ] When revalidation is complete, set `oat_inherited_context_revalidated: true` in this file.',
|
|
77
|
+
'',
|
|
78
|
+
'Discovery cannot be marked complete — and planning must not begin — while `oat_inherited_context_revalidated: false`. A child left in this state is expected work-in-progress, not stale bookkeeping.',
|
|
79
|
+
].join('\n'),
|
|
60
80
|
],
|
|
61
81
|
['Child Scope', child.description ?? child.slug],
|
|
62
82
|
['Known Dependencies', bulletList(child.knownDependencies)],
|
|
63
83
|
[
|
|
64
84
|
'Assumptions To Revalidate',
|
|
65
|
-
|
|
85
|
+
[
|
|
86
|
+
'- Revalidate inherited context before completing discovery.',
|
|
87
|
+
'- Confirm the child scope still matches reality before generating a plan.',
|
|
88
|
+
].join('\n'),
|
|
66
89
|
],
|
|
67
90
|
['Likely Workflow Mode', 'quick'],
|
|
68
91
|
['Sibling Projects', bulletList(siblingSlugs)],
|
|
@@ -111,8 +134,16 @@ export async function seedChildren(plan, context, onlySlugs) {
|
|
|
111
134
|
oat_siblings: siblings,
|
|
112
135
|
oat_depends_on: child.knownDependencies,
|
|
113
136
|
});
|
|
137
|
+
// Children resume at discovery, so their scaffolded plan.md is a
|
|
138
|
+
// placeholder only. Re-mark it as a not-started template (the scaffold
|
|
139
|
+
// strips these markers when rendering) so neither tooling nor agents can
|
|
140
|
+
// mistake the seed for an active or validated plan; routing keys off
|
|
141
|
+
// state.md (oat_phase: discovery) and oat-project-next treats
|
|
142
|
+
// oat_template: true as a still-a-template signal.
|
|
114
143
|
await updateFrontmatter(join(childRoot, 'plan.md'), {
|
|
115
144
|
oat_plan_source: 'quick',
|
|
145
|
+
oat_template: true,
|
|
146
|
+
oat_template_name: 'plan',
|
|
116
147
|
});
|
|
117
148
|
await writeFile(join(childRoot, 'discovery.md'), renderSeededDiscovery(plan, child), 'utf8');
|
|
118
149
|
childProjectPaths.push(scaffold.projectPath);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@open-agent-toolkit/cli",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.16",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Open Agent Toolkit CLI",
|
|
6
6
|
"homepage": "https://github.com/voxmedia/open-agent-toolkit/tree/main/packages/cli",
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
"ora": "^9.0.0",
|
|
35
35
|
"yaml": "2.8.2",
|
|
36
36
|
"zod": "^3.25.76",
|
|
37
|
-
"@open-agent-toolkit/control-plane": "0.1.
|
|
37
|
+
"@open-agent-toolkit/control-plane": "0.1.16"
|
|
38
38
|
},
|
|
39
39
|
"devDependencies": {
|
|
40
40
|
"@types/node": "^22.10.0",
|