@open-agent-toolkit/cli 0.2.21 → 0.2.23
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/config/dispatch-matrix-recommendation.json +6 -8
- package/assets/docs/workflows/projects/dispatch-ceiling.md +34 -8
- package/assets/public-package-versions.json +4 -4
- package/assets/skills/explainer-kit/SKILL.md +1 -1
- package/assets/skills/explainer-kit/scripts/lib/html-safety.mjs +8 -1
- package/assets/skills/explainer-kit/scripts/lib/qa.mjs +5 -5
- package/assets/skills/explainer-kit/scripts/lib/recipes.mjs +5 -4
- package/assets/skills/explainer-kit/scripts/render-qa.mjs +6 -1
- package/assets/skills/explainer-kit/scripts/run.mjs +3 -10
- package/assets/skills/oat-brainstorm/SKILL.md +1 -1
- package/assets/skills/oat-brainstorm/scripts/helper.js +18 -11
- package/assets/skills/oat-brainstorm/scripts/server.cjs +109 -55
- package/assets/skills/oat-explainer-kit/SKILL.md +1 -1
- package/assets/skills/oat-project-autonomous/references/gate-inventory.md +1 -1
- package/assets/skills/oat-project-document/references/docs/autonomy-contract.md +1 -1
- package/assets/skills/oat-project-implement/SKILL.md +4 -1
- package/assets/skills/oat-project-implement/references/dispatch-and-dry-run.md +64 -1
- package/assets/skills/oat-project-implement/references/docs/autonomy-contract.md +1 -1
- package/assets/skills/oat-project-pr-final/references/docs/autonomy-contract.md +1 -1
- package/assets/skills/oat-project-quick-start/references/docs/autonomy-contract.md +1 -1
- package/assets/skills/subagent-orchestration/SKILL.md +1 -1
- package/assets/skills/subagent-orchestration/references/model-selection-principles.md +18 -0
- package/dist/commands/init/tools/index.d.ts.map +1 -1
- package/dist/commands/init/tools/index.js +4 -4
- package/dist/engine/compute-plan.js +3 -3
- package/package.json +2 -2
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "2026-07-
|
|
2
|
+
"version": "2026-07-27.1",
|
|
3
3
|
"providers": {
|
|
4
4
|
"codex": {
|
|
5
5
|
"economy": {
|
|
@@ -115,20 +115,18 @@
|
|
|
115
115
|
},
|
|
116
116
|
"high": {
|
|
117
117
|
"candidates": [
|
|
118
|
-
"gpt-5.6-sol-medium",
|
|
119
|
-
"gpt-5.6-sol-high",
|
|
120
118
|
"claude-opus-5-thinking-medium",
|
|
121
|
-
"
|
|
119
|
+
"gpt-5.6-sol-medium",
|
|
120
|
+
"claude-opus-5-thinking-high",
|
|
121
|
+
"gpt-5.6-sol-high"
|
|
122
122
|
]
|
|
123
123
|
},
|
|
124
124
|
"frontier": {
|
|
125
125
|
"candidates": [
|
|
126
|
-
"claude-fable-5-thinking-high",
|
|
127
|
-
"claude-fable-5-thinking-xhigh",
|
|
128
126
|
"gpt-5.6-sol-xhigh",
|
|
129
|
-
"gpt-5.6-sol-max",
|
|
130
127
|
"claude-opus-5-thinking-xhigh",
|
|
131
|
-
"
|
|
128
|
+
"gpt-5.6-sol-max",
|
|
129
|
+
"claude-fable-5-thinking-high"
|
|
132
130
|
]
|
|
133
131
|
}
|
|
134
132
|
}
|
|
@@ -76,10 +76,36 @@ To pick up a new version, compare your
|
|
|
76
76
|
`workflow.dispatchCeiling.recommendationVersion` against the bundled version,
|
|
77
77
|
then either edit the affected cells by hand or clear them and re-adopt.
|
|
78
78
|
|
|
79
|
-
Version `2026-07-
|
|
80
|
-
`
|
|
81
|
-
`
|
|
82
|
-
|
|
79
|
+
Version `2026-07-27.1` is a live example. It interleaves the Cursor `high` and
|
|
80
|
+
`frontier` tiers so each alternates a GPT rung with a Claude rung, ending `high`
|
|
81
|
+
at `gpt-5.6-sol-high` and `frontier` at `claude-fable-5-thinking-high`. It also
|
|
82
|
+
drops `claude-opus-5-thinking-max` and `claude-fable-5-thinking-xhigh` from
|
|
83
|
+
`frontier`. Dropping the Opus max rung follows the non-monotonic top-end Opus
|
|
84
|
+
evidence recorded in `subagent-orchestration/references/evidence-and-refresh.md`,
|
|
85
|
+
which treats max as a route requiring justification rather than a strictly
|
|
86
|
+
better rung. Dropping the Fable xhigh rung is a recommendation judgment rather
|
|
87
|
+
than a measured finding: `subagent-orchestration/references/provider-claude.md`
|
|
88
|
+
permits either Fable rung for a qualified specialist case, and this ladder takes
|
|
89
|
+
the cheaper one absent a comparison favoring xhigh. The evidence record above
|
|
90
|
+
does not compare the two rungs. Both models remain in the pin catalog and stay
|
|
91
|
+
available to a hand-edited ladder. An adopter still on the prior version keeps their existing
|
|
92
|
+
Cursor tiers untouched until they take one of the actions above.
|
|
93
|
+
|
|
94
|
+
The terminal entries in that version are chosen, not incidental. Because the
|
|
95
|
+
final candidate in a tier is the target its implementation-phase self-review
|
|
96
|
+
pins, reordering a tier changes who reviews it even when the membership is
|
|
97
|
+
untouched. Cross-family independence for the external phase gate and the
|
|
98
|
+
lifecycle gate comes from `gates.execTargets` instead, which is configured
|
|
99
|
+
separately and is not drawn from this ladder.
|
|
100
|
+
|
|
101
|
+
Curating a ladder down has a consequence in the other direction. The
|
|
102
|
+
`subagent-orchestration` guidance names a route per task class, and a route you
|
|
103
|
+
prune becomes unreachable: the guidance still recommends it while the resolver
|
|
104
|
+
rejects it as unconfigured. A ladder whose `economy` tier drops its mechanical
|
|
105
|
+
route leaves mechanical work with nowhere to go but a higher tier. Keep at least
|
|
106
|
+
one reachable rung for each task class the project uses, and prefer more than
|
|
107
|
+
one candidate per tier, since a tier holding a single entry cannot express a
|
|
108
|
+
choice.
|
|
83
109
|
|
|
84
110
|
Before offering adoption, planning runs `oat config list --json` once and treats
|
|
85
111
|
its output as the effective boundary across shared, repo-local, user, and
|
|
@@ -213,10 +239,10 @@ candidate in each tier:
|
|
|
213
239
|
tiers.
|
|
214
240
|
- **Cursor:** verified multi-family flat IDs across Composer, Claude (Sonnet,
|
|
215
241
|
Opus, and Fable), GPT, and Grok. Two counts apply and they differ: the
|
|
216
|
-
bundled recommendation carries
|
|
217
|
-
while the materialization catalogue carries 18 flat IDs. The extra
|
|
218
|
-
are approved mappings deliberately kept out of the recommendation but
|
|
219
|
-
materializable. The catalogue maps each flat ladder ID to a separate
|
|
242
|
+
bundled recommendation carries 14 Cursor candidates across the four tiers,
|
|
243
|
+
while the materialization catalogue carries 18 flat IDs. The four extra
|
|
244
|
+
entries are approved mappings deliberately kept out of the recommendation but
|
|
245
|
+
still materializable. The catalogue maps each flat ladder ID to a separate
|
|
220
246
|
bracket-form frontmatter model; OAT does not derive or normalize either
|
|
221
247
|
value.
|
|
222
248
|
|
|
@@ -580,7 +580,14 @@ function srcsetCandidates(value) {
|
|
|
580
580
|
}
|
|
581
581
|
|
|
582
582
|
function compactUrl(value) {
|
|
583
|
-
|
|
583
|
+
// Strip C0 controls, ASCII space, and DEL without a control-char regex
|
|
584
|
+
// (oxlint/eslint no-control-regex flags those literals even when intentional).
|
|
585
|
+
let compact = '';
|
|
586
|
+
for (const ch of value) {
|
|
587
|
+
const code = ch.codePointAt(0);
|
|
588
|
+
if (code > 0x20 && code !== 0x7f) compact += ch;
|
|
589
|
+
}
|
|
590
|
+
return compact.toLowerCase();
|
|
584
591
|
}
|
|
585
592
|
|
|
586
593
|
// Shared with the render QA structural check so both call sites enforce one
|
|
@@ -770,7 +770,7 @@ function normalizeClaim(value) {
|
|
|
770
770
|
throw new TypeError('Cohesion claims must be strings, numbers, or booleans.');
|
|
771
771
|
}
|
|
772
772
|
|
|
773
|
-
function validateProbeResult(result,
|
|
773
|
+
function validateProbeResult(result, id, width, request) {
|
|
774
774
|
if (
|
|
775
775
|
!isPlainObject(result) ||
|
|
776
776
|
typeof result.pageOverflowX !== 'boolean' ||
|
|
@@ -779,7 +779,7 @@ function validateProbeResult(result, artifactId, width, request) {
|
|
|
779
779
|
!isPlainObject(result.keyboard)
|
|
780
780
|
) {
|
|
781
781
|
throw new TypeError(
|
|
782
|
-
`Browser probe for ${
|
|
782
|
+
`Browser probe for ${id} at ${width}px returned an invalid result.`,
|
|
783
783
|
);
|
|
784
784
|
}
|
|
785
785
|
if (
|
|
@@ -791,17 +791,17 @@ function validateProbeResult(result, artifactId, width, request) {
|
|
|
791
791
|
typeof result.animationsDisabled !== 'boolean')
|
|
792
792
|
) {
|
|
793
793
|
throw new TypeError(
|
|
794
|
-
`Browser layout probe for ${
|
|
794
|
+
`Browser layout probe for ${id} at ${width}px returned an invalid result.`,
|
|
795
795
|
);
|
|
796
796
|
}
|
|
797
797
|
if (request.themeToggle && !isPlainObject(result.themeToggle)) {
|
|
798
798
|
throw new TypeError(
|
|
799
|
-
`Browser theme probe for ${
|
|
799
|
+
`Browser theme probe for ${id} at ${width}px returned an invalid result.`,
|
|
800
800
|
);
|
|
801
801
|
}
|
|
802
802
|
if (request.scenario !== 'default' && !isPlainObject(result.deckLayout)) {
|
|
803
803
|
throw new TypeError(
|
|
804
|
-
`Browser deck probe for ${
|
|
804
|
+
`Browser deck probe for ${id} at ${width}px returned an invalid result.`,
|
|
805
805
|
);
|
|
806
806
|
}
|
|
807
807
|
}
|
|
@@ -116,9 +116,7 @@ export function evaluateExpansionProposals(recipe, proposals) {
|
|
|
116
116
|
const seenIds = new Set();
|
|
117
117
|
const acceptedByProfile = new Map();
|
|
118
118
|
const acceptedByType = new Map();
|
|
119
|
-
const maxPerType = new Map(
|
|
120
|
-
Object.entries(expansion.limits.maxPerType ?? {}),
|
|
121
|
-
);
|
|
119
|
+
const maxPerType = new Map(Object.entries(expansion.limits.maxPerType ?? {}));
|
|
122
120
|
|
|
123
121
|
if (!Array.isArray(proposals)) {
|
|
124
122
|
return {
|
|
@@ -180,7 +178,10 @@ export function evaluateExpansionProposals(recipe, proposals) {
|
|
|
180
178
|
// A declared type cap binds across profiles, so proposals cannot spread
|
|
181
179
|
// over sibling profiles that share one artifact type to evade it.
|
|
182
180
|
const typeCount = acceptedByType.get(profile.type) ?? 0;
|
|
183
|
-
if (
|
|
181
|
+
if (
|
|
182
|
+
maxPerType.has(profile.type) &&
|
|
183
|
+
typeCount >= maxPerType.get(profile.type)
|
|
184
|
+
) {
|
|
184
185
|
rejected.push({
|
|
185
186
|
...structuredClone(proposal),
|
|
186
187
|
status: 'rejected',
|
|
@@ -74,7 +74,12 @@ export async function runRenderQaStage({
|
|
|
74
74
|
};
|
|
75
75
|
}
|
|
76
76
|
|
|
77
|
-
return probeSiteArtifacts({
|
|
77
|
+
return probeSiteArtifacts({
|
|
78
|
+
siteDir,
|
|
79
|
+
artifacts,
|
|
80
|
+
probe: browserProbe,
|
|
81
|
+
widths,
|
|
82
|
+
});
|
|
78
83
|
}
|
|
79
84
|
|
|
80
85
|
async function probeSiteArtifacts({ siteDir, artifacts, probe, widths }) {
|
|
@@ -441,8 +441,7 @@ async function hydrateResumableState(state) {
|
|
|
441
441
|
state.resumedApprovalStatus = approval.status;
|
|
442
442
|
// Reopened stages rerun against the corrected content, so carrying their
|
|
443
443
|
// prior warnings forward would outlive the fix that resolved them.
|
|
444
|
-
const rerunning =
|
|
445
|
-
approval.status === 'rejected' ? REOPENED_ON_REJECTION : [];
|
|
444
|
+
const rerunning = approval.status === 'rejected' ? REOPENED_ON_REJECTION : [];
|
|
446
445
|
state.warnings.push(
|
|
447
446
|
...record.stages
|
|
448
447
|
.filter(({ id }) => !rerunning.includes(id))
|
|
@@ -1039,11 +1038,7 @@ async function authorArtifact(state, artifact, author, trust) {
|
|
|
1039
1038
|
}
|
|
1040
1039
|
const retained = {
|
|
1041
1040
|
...structuredClone(result),
|
|
1042
|
-
provenance: resolveAuthorProvenance(
|
|
1043
|
-
result.provenance,
|
|
1044
|
-
trust,
|
|
1045
|
-
artifact.id,
|
|
1046
|
-
),
|
|
1041
|
+
provenance: resolveAuthorProvenance(result.provenance, trust, artifact.id),
|
|
1047
1042
|
};
|
|
1048
1043
|
const retainedValidation = validateContract('author-result/v2', retained);
|
|
1049
1044
|
if (!retainedValidation.valid) {
|
|
@@ -1115,9 +1110,7 @@ function markdownContentModel(artifact, slug, markdown, artifactLinks) {
|
|
|
1115
1110
|
|
|
1116
1111
|
// Prose between the document title and the first `##` is authored content,
|
|
1117
1112
|
// so it is carried as a leading section rather than silently dropped.
|
|
1118
|
-
const bodyStart = titleMatch
|
|
1119
|
-
? titleMatch.index + titleMatch[0].length
|
|
1120
|
-
: 0;
|
|
1113
|
+
const bodyStart = titleMatch ? titleMatch.index + titleMatch[0].length : 0;
|
|
1121
1114
|
const lead = markdown.slice(bodyStart, headings[0].index).trim();
|
|
1122
1115
|
const authoredIds = new Set(
|
|
1123
1116
|
headings.map((heading) => slugify(heading[1].trim())),
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: oat-brainstorm
|
|
3
|
-
version: 1.1.
|
|
3
|
+
version: 1.1.2
|
|
4
4
|
description: Use when the user explicitly invokes the `brainstorm` verb, including `/oat-brainstorm`, "let's brainstorm", "brainstorm this", "can we brainstorm X", or "help me brainstorm X". For ambiguous exploratory phrasing ("I've been thinking", "what if", "help me think through"), do NOT auto-enter; respond conversationally and offer mode only after ≥2 sustained exploratory turns. Do NOT use for review, debug, PR, status, implementation, or active-workflow questions.
|
|
5
5
|
disable-model-invocation: false
|
|
6
6
|
user-invocable: true
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
(function() {
|
|
2
|
-
const WS_URL =
|
|
1
|
+
(function () {
|
|
2
|
+
const WS_URL = `ws://${window.location.host}`;
|
|
3
3
|
let ws = null;
|
|
4
4
|
let eventQueue = [];
|
|
5
5
|
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
ws = new WebSocket(WS_URL);
|
|
8
8
|
|
|
9
9
|
ws.onopen = () => {
|
|
10
|
-
eventQueue.forEach(e => ws.send(JSON.stringify(e)));
|
|
10
|
+
eventQueue.forEach((e) => ws.send(JSON.stringify(e)));
|
|
11
11
|
eventQueue = [];
|
|
12
12
|
};
|
|
13
13
|
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
type: 'click',
|
|
42
42
|
text: target.textContent.trim(),
|
|
43
43
|
choice: target.dataset.choice,
|
|
44
|
-
id: target.id || null
|
|
44
|
+
id: target.id || null,
|
|
45
45
|
});
|
|
46
46
|
|
|
47
47
|
// Update indicator bar (defer so toggleSelect runs first)
|
|
@@ -51,12 +51,16 @@
|
|
|
51
51
|
const container = target.closest('.options') || target.closest('.cards');
|
|
52
52
|
const selected = container ? container.querySelectorAll('.selected') : [];
|
|
53
53
|
if (selected.length === 0) {
|
|
54
|
-
indicator.textContent =
|
|
54
|
+
indicator.textContent =
|
|
55
|
+
'Click an option above, then return to the terminal';
|
|
55
56
|
} else if (selected.length === 1) {
|
|
56
|
-
const label =
|
|
57
|
-
|
|
57
|
+
const label =
|
|
58
|
+
selected[0]
|
|
59
|
+
.querySelector('h3, .content h3, .card-body h3')
|
|
60
|
+
?.textContent?.trim() || selected[0].dataset.choice;
|
|
61
|
+
indicator.innerHTML = `<span class="selected-text">${label} selected</span> — return to terminal to continue`;
|
|
58
62
|
} else {
|
|
59
|
-
indicator.innerHTML =
|
|
63
|
+
indicator.innerHTML = `<span class="selected-text">${selected.length} selected</span> — return to terminal to continue`;
|
|
60
64
|
}
|
|
61
65
|
}, 0);
|
|
62
66
|
});
|
|
@@ -64,11 +68,13 @@
|
|
|
64
68
|
// Frame UI: selection tracking
|
|
65
69
|
window.selectedChoice = null;
|
|
66
70
|
|
|
67
|
-
window.toggleSelect = function(el) {
|
|
71
|
+
window.toggleSelect = function (el) {
|
|
68
72
|
const container = el.closest('.options') || el.closest('.cards');
|
|
69
73
|
const multi = container && container.dataset.multiselect !== undefined;
|
|
70
74
|
if (container && !multi) {
|
|
71
|
-
container
|
|
75
|
+
container
|
|
76
|
+
.querySelectorAll('.option, .card')
|
|
77
|
+
.forEach((o) => o.classList.remove('selected'));
|
|
72
78
|
}
|
|
73
79
|
if (multi) {
|
|
74
80
|
el.classList.toggle('selected');
|
|
@@ -81,7 +87,8 @@
|
|
|
81
87
|
// Expose API for explicit use
|
|
82
88
|
window.brainstorm = {
|
|
83
89
|
send: sendEvent,
|
|
84
|
-
choice: (value, metadata = {}) =>
|
|
90
|
+
choice: (value, metadata = {}) =>
|
|
91
|
+
sendEvent({ type: 'choice', value, ...metadata }),
|
|
85
92
|
};
|
|
86
93
|
|
|
87
94
|
connect();
|
|
@@ -5,11 +5,14 @@ const path = require('path');
|
|
|
5
5
|
|
|
6
6
|
// ========== WebSocket Protocol (RFC 6455) ==========
|
|
7
7
|
|
|
8
|
-
const OPCODES = { TEXT: 0x01, CLOSE: 0x08, PING: 0x09, PONG:
|
|
8
|
+
const OPCODES = { TEXT: 0x01, CLOSE: 0x08, PING: 0x09, PONG: 0x0a };
|
|
9
9
|
const WS_MAGIC = '258EAFA5-E914-47DA-95CA-C5AB0DC85B11';
|
|
10
10
|
|
|
11
11
|
function computeAcceptKey(clientKey) {
|
|
12
|
-
return crypto
|
|
12
|
+
return crypto
|
|
13
|
+
.createHash('sha1')
|
|
14
|
+
.update(clientKey + WS_MAGIC)
|
|
15
|
+
.digest('base64');
|
|
13
16
|
}
|
|
14
17
|
|
|
15
18
|
function encodeFrame(opcode, payload) {
|
|
@@ -40,9 +43,9 @@ function decodeFrame(buffer) {
|
|
|
40
43
|
if (buffer.length < 2) return null;
|
|
41
44
|
|
|
42
45
|
const secondByte = buffer[1];
|
|
43
|
-
const opcode = buffer[0] &
|
|
46
|
+
const opcode = buffer[0] & 0x0f;
|
|
44
47
|
const masked = (secondByte & 0x80) !== 0;
|
|
45
|
-
let payloadLen = secondByte &
|
|
48
|
+
let payloadLen = secondByte & 0x7f;
|
|
46
49
|
let offset = 2;
|
|
47
50
|
|
|
48
51
|
if (!masked) throw new Error('Client frames must be masked');
|
|
@@ -73,18 +76,29 @@ function decodeFrame(buffer) {
|
|
|
73
76
|
|
|
74
77
|
// ========== Configuration ==========
|
|
75
78
|
|
|
76
|
-
const PORT =
|
|
79
|
+
const PORT =
|
|
80
|
+
process.env.BRAINSTORM_PORT || 49152 + Math.floor(Math.random() * 16383);
|
|
77
81
|
const HOST = process.env.BRAINSTORM_HOST || '127.0.0.1';
|
|
78
|
-
const URL_HOST =
|
|
82
|
+
const URL_HOST =
|
|
83
|
+
process.env.BRAINSTORM_URL_HOST ||
|
|
84
|
+
(HOST === '127.0.0.1' ? 'localhost' : HOST);
|
|
79
85
|
const SESSION_DIR = process.env.BRAINSTORM_DIR || '/tmp/brainstorm';
|
|
80
86
|
const CONTENT_DIR = path.join(SESSION_DIR, 'content');
|
|
81
87
|
const STATE_DIR = path.join(SESSION_DIR, 'state');
|
|
82
|
-
let ownerPid = process.env.BRAINSTORM_OWNER_PID
|
|
88
|
+
let ownerPid = process.env.BRAINSTORM_OWNER_PID
|
|
89
|
+
? Number(process.env.BRAINSTORM_OWNER_PID)
|
|
90
|
+
: null;
|
|
83
91
|
|
|
84
92
|
const MIME_TYPES = {
|
|
85
|
-
'.html': 'text/html',
|
|
86
|
-
'.
|
|
87
|
-
'.
|
|
93
|
+
'.html': 'text/html',
|
|
94
|
+
'.css': 'text/css',
|
|
95
|
+
'.js': 'application/javascript',
|
|
96
|
+
'.json': 'application/json',
|
|
97
|
+
'.png': 'image/png',
|
|
98
|
+
'.jpg': 'image/jpeg',
|
|
99
|
+
'.jpeg': 'image/jpeg',
|
|
100
|
+
'.gif': 'image/gif',
|
|
101
|
+
'.svg': 'image/svg+xml',
|
|
88
102
|
};
|
|
89
103
|
|
|
90
104
|
// ========== Templates and Constants ==========
|
|
@@ -98,9 +112,15 @@ h1 { color: #333; } p { color: #666; }</style>
|
|
|
98
112
|
<body><h1>Brainstorm Companion</h1>
|
|
99
113
|
<p>Waiting for the agent to push a screen...</p></body></html>`;
|
|
100
114
|
|
|
101
|
-
const frameTemplate = fs.readFileSync(
|
|
102
|
-
|
|
103
|
-
|
|
115
|
+
const frameTemplate = fs.readFileSync(
|
|
116
|
+
path.join(__dirname, 'frame-template.html'),
|
|
117
|
+
'utf-8',
|
|
118
|
+
);
|
|
119
|
+
const helperScript = fs.readFileSync(
|
|
120
|
+
path.join(__dirname, 'helper.js'),
|
|
121
|
+
'utf-8',
|
|
122
|
+
);
|
|
123
|
+
const helperInjection = `<script>\n${helperScript}\n</script>`;
|
|
104
124
|
|
|
105
125
|
// ========== Helper Functions ==========
|
|
106
126
|
|
|
@@ -114,9 +134,10 @@ function wrapInFrame(content) {
|
|
|
114
134
|
}
|
|
115
135
|
|
|
116
136
|
function getNewestScreen() {
|
|
117
|
-
const files = fs
|
|
118
|
-
.
|
|
119
|
-
.
|
|
137
|
+
const files = fs
|
|
138
|
+
.readdirSync(CONTENT_DIR)
|
|
139
|
+
.filter((f) => f.endsWith('.html'))
|
|
140
|
+
.map((f) => {
|
|
120
141
|
const fp = path.join(CONTENT_DIR, f);
|
|
121
142
|
return { path: fp, mtime: fs.statSync(fp).mtime.getTime() };
|
|
122
143
|
})
|
|
@@ -131,11 +152,13 @@ function handleRequest(req, res) {
|
|
|
131
152
|
if (req.method === 'GET' && req.url === '/') {
|
|
132
153
|
const screenFile = getNewestScreen();
|
|
133
154
|
let html = screenFile
|
|
134
|
-
? (raw => isFullDocument(raw) ? raw : wrapInFrame(raw))(
|
|
155
|
+
? ((raw) => (isFullDocument(raw) ? raw : wrapInFrame(raw)))(
|
|
156
|
+
fs.readFileSync(screenFile, 'utf-8'),
|
|
157
|
+
)
|
|
135
158
|
: WAITING_PAGE;
|
|
136
159
|
|
|
137
160
|
if (html.includes('</body>')) {
|
|
138
|
-
html = html.replace('</body>', helperInjection
|
|
161
|
+
html = html.replace('</body>', `${helperInjection}\n</body>`);
|
|
139
162
|
} else {
|
|
140
163
|
html += helperInjection;
|
|
141
164
|
}
|
|
@@ -166,14 +189,17 @@ const clients = new Set();
|
|
|
166
189
|
|
|
167
190
|
function handleUpgrade(req, socket) {
|
|
168
191
|
const key = req.headers['sec-websocket-key'];
|
|
169
|
-
if (!key) {
|
|
192
|
+
if (!key) {
|
|
193
|
+
socket.destroy();
|
|
194
|
+
return;
|
|
195
|
+
}
|
|
170
196
|
|
|
171
197
|
const accept = computeAcceptKey(key);
|
|
172
198
|
socket.write(
|
|
173
199
|
'HTTP/1.1 101 Switching Protocols\r\n' +
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
200
|
+
'Upgrade: websocket\r\n' +
|
|
201
|
+
'Connection: Upgrade\r\n' +
|
|
202
|
+
`Sec-WebSocket-Accept: ${accept}\r\n\r\n`,
|
|
177
203
|
);
|
|
178
204
|
|
|
179
205
|
let buffer = Buffer.alloc(0);
|
|
@@ -185,7 +211,7 @@ function handleUpgrade(req, socket) {
|
|
|
185
211
|
let result;
|
|
186
212
|
try {
|
|
187
213
|
result = decodeFrame(buffer);
|
|
188
|
-
} catch
|
|
214
|
+
} catch {
|
|
189
215
|
socket.end(encodeFrame(OPCODES.CLOSE, Buffer.alloc(0)));
|
|
190
216
|
clients.delete(socket);
|
|
191
217
|
return;
|
|
@@ -233,14 +259,18 @@ function handleMessage(text) {
|
|
|
233
259
|
console.log(JSON.stringify({ source: 'user-event', ...event }));
|
|
234
260
|
if (event.choice) {
|
|
235
261
|
const eventsFile = path.join(STATE_DIR, 'events');
|
|
236
|
-
fs.appendFileSync(eventsFile, JSON.stringify(event)
|
|
262
|
+
fs.appendFileSync(eventsFile, `${JSON.stringify(event)}\n`);
|
|
237
263
|
}
|
|
238
264
|
}
|
|
239
265
|
|
|
240
266
|
function broadcast(msg) {
|
|
241
267
|
const frame = encodeFrame(OPCODES.TEXT, Buffer.from(JSON.stringify(msg)));
|
|
242
268
|
for (const socket of clients) {
|
|
243
|
-
try {
|
|
269
|
+
try {
|
|
270
|
+
socket.write(frame);
|
|
271
|
+
} catch {
|
|
272
|
+
clients.delete(socket);
|
|
273
|
+
}
|
|
244
274
|
}
|
|
245
275
|
}
|
|
246
276
|
|
|
@@ -260,14 +290,15 @@ const debounceTimers = new Map();
|
|
|
260
290
|
// ========== Server Startup ==========
|
|
261
291
|
|
|
262
292
|
function startServer() {
|
|
263
|
-
if (!fs.existsSync(CONTENT_DIR))
|
|
293
|
+
if (!fs.existsSync(CONTENT_DIR))
|
|
294
|
+
fs.mkdirSync(CONTENT_DIR, { recursive: true });
|
|
264
295
|
if (!fs.existsSync(STATE_DIR)) fs.mkdirSync(STATE_DIR, { recursive: true });
|
|
265
296
|
|
|
266
297
|
// Track known files to distinguish new screens from updates.
|
|
267
298
|
// macOS fs.watch reports 'rename' for both new files and overwrites,
|
|
268
299
|
// so we can't rely on eventType alone.
|
|
269
300
|
const knownFiles = new Set(
|
|
270
|
-
fs.readdirSync(CONTENT_DIR).filter(f => f.endsWith('.html'))
|
|
301
|
+
fs.readdirSync(CONTENT_DIR).filter((f) => f.endsWith('.html')),
|
|
271
302
|
);
|
|
272
303
|
|
|
273
304
|
const server = http.createServer(handleRequest);
|
|
@@ -276,25 +307,31 @@ function startServer() {
|
|
|
276
307
|
const watcher = fs.watch(CONTENT_DIR, (eventType, filename) => {
|
|
277
308
|
if (!filename || !filename.endsWith('.html')) return;
|
|
278
309
|
|
|
279
|
-
if (debounceTimers.has(filename))
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
if (
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
310
|
+
if (debounceTimers.has(filename))
|
|
311
|
+
clearTimeout(debounceTimers.get(filename));
|
|
312
|
+
debounceTimers.set(
|
|
313
|
+
filename,
|
|
314
|
+
setTimeout(() => {
|
|
315
|
+
debounceTimers.delete(filename);
|
|
316
|
+
const filePath = path.join(CONTENT_DIR, filename);
|
|
317
|
+
|
|
318
|
+
if (!fs.existsSync(filePath)) return; // file was deleted
|
|
319
|
+
touchActivity();
|
|
320
|
+
|
|
321
|
+
if (!knownFiles.has(filename)) {
|
|
322
|
+
knownFiles.add(filename);
|
|
323
|
+
const eventsFile = path.join(STATE_DIR, 'events');
|
|
324
|
+
if (fs.existsSync(eventsFile)) fs.unlinkSync(eventsFile);
|
|
325
|
+
console.log(JSON.stringify({ type: 'screen-added', file: filePath }));
|
|
326
|
+
} else {
|
|
327
|
+
console.log(
|
|
328
|
+
JSON.stringify({ type: 'screen-updated', file: filePath }),
|
|
329
|
+
);
|
|
330
|
+
}
|
|
295
331
|
|
|
296
|
-
|
|
297
|
-
|
|
332
|
+
broadcast({ type: 'reload' });
|
|
333
|
+
}, 100),
|
|
334
|
+
);
|
|
298
335
|
});
|
|
299
336
|
watcher.on('error', (err) => console.error('fs.watch error:', err.message));
|
|
300
337
|
|
|
@@ -304,7 +341,7 @@ function startServer() {
|
|
|
304
341
|
if (fs.existsSync(infoFile)) fs.unlinkSync(infoFile);
|
|
305
342
|
fs.writeFileSync(
|
|
306
343
|
path.join(STATE_DIR, 'server-stopped'),
|
|
307
|
-
JSON.stringify({ reason, timestamp: Date.now() })
|
|
344
|
+
`${JSON.stringify({ reason, timestamp: Date.now() })}\n`,
|
|
308
345
|
);
|
|
309
346
|
watcher.close();
|
|
310
347
|
clearInterval(lifecycleCheck);
|
|
@@ -313,13 +350,19 @@ function startServer() {
|
|
|
313
350
|
|
|
314
351
|
function ownerAlive() {
|
|
315
352
|
if (!ownerPid) return true;
|
|
316
|
-
try {
|
|
353
|
+
try {
|
|
354
|
+
process.kill(ownerPid, 0);
|
|
355
|
+
return true;
|
|
356
|
+
} catch (e) {
|
|
357
|
+
return e.code === 'EPERM';
|
|
358
|
+
}
|
|
317
359
|
}
|
|
318
360
|
|
|
319
361
|
// Check every 60s: exit if owner process died or idle for 30 minutes
|
|
320
362
|
const lifecycleCheck = setInterval(() => {
|
|
321
363
|
if (!ownerAlive()) shutdown('owner process exited');
|
|
322
|
-
else if (Date.now() - lastActivity > IDLE_TIMEOUT_MS)
|
|
364
|
+
else if (Date.now() - lastActivity > IDLE_TIMEOUT_MS)
|
|
365
|
+
shutdown('idle timeout');
|
|
323
366
|
}, 60 * 1000);
|
|
324
367
|
lifecycleCheck.unref();
|
|
325
368
|
|
|
@@ -327,10 +370,17 @@ function startServer() {
|
|
|
327
370
|
// was wrong (common on WSL, Tailscale SSH, and cross-user scenarios).
|
|
328
371
|
// Disable monitoring and rely on the idle timeout instead.
|
|
329
372
|
if (ownerPid) {
|
|
330
|
-
try {
|
|
331
|
-
|
|
373
|
+
try {
|
|
374
|
+
process.kill(ownerPid, 0);
|
|
375
|
+
} catch (e) {
|
|
332
376
|
if (e.code !== 'EPERM') {
|
|
333
|
-
console.log(
|
|
377
|
+
console.log(
|
|
378
|
+
JSON.stringify({
|
|
379
|
+
type: 'owner-pid-invalid',
|
|
380
|
+
pid: ownerPid,
|
|
381
|
+
reason: 'dead at startup',
|
|
382
|
+
}),
|
|
383
|
+
);
|
|
334
384
|
ownerPid = null;
|
|
335
385
|
}
|
|
336
386
|
}
|
|
@@ -338,12 +388,16 @@ function startServer() {
|
|
|
338
388
|
|
|
339
389
|
server.listen(PORT, HOST, () => {
|
|
340
390
|
const info = JSON.stringify({
|
|
341
|
-
type: 'server-started',
|
|
342
|
-
|
|
343
|
-
|
|
391
|
+
type: 'server-started',
|
|
392
|
+
port: Number(PORT),
|
|
393
|
+
host: HOST,
|
|
394
|
+
url_host: URL_HOST,
|
|
395
|
+
url: `http://${URL_HOST}:${PORT}`,
|
|
396
|
+
screen_dir: CONTENT_DIR,
|
|
397
|
+
state_dir: STATE_DIR,
|
|
344
398
|
});
|
|
345
399
|
console.log(info);
|
|
346
|
-
fs.writeFileSync(path.join(STATE_DIR, 'server-info'), info
|
|
400
|
+
fs.writeFileSync(path.join(STATE_DIR, 'server-info'), `${info}\n`);
|
|
347
401
|
});
|
|
348
402
|
}
|
|
349
403
|
|
|
@@ -235,7 +235,7 @@ remains immutable baseline evidence for the original p01-t01 verification.
|
|
|
235
235
|
| `oat-project-import-plan/SKILL.md` | `f7ca8635452f -> NG`; `c2e5fa410069 -> NG`; `655d61df0a8f -> NG`; `dceff5cc04b5 -> NG`; `1af4957a1af2 -> IMPORT-01`; `45b699c1c0b5 -> IMPORT-01`; `ba6d120791c1 -> IMPORT-01`; `070ebc5259af -> IMPORT-03`; `c11552696e2e -> IMPORT-03`; `cfe661966baf -> IMPORT-04`; `baa91c0a0bf8 -> NG`; `e364e84b2702 -> NG`; `39031985a945 -> IMPORT-06`; `f106aa29a217 -> IMPORT-07`; `65038450aee3 -> IMPORT-07`; `bee4c4aa34c6 -> NG`; `3f0b53056edd -> IMPORT-09` |
|
|
236
236
|
| `oat-project-implement/SKILL.md` | `18980f6bc1a6 -> NG`; `ffb3af0ba8ef -> NG`; `e0355c7a05e9 -> IMPLEMENT-11+IMPLEMENT-13+IMPLEMENT-16`; `6296f41ae11c -> NG`; `a167d03559fa -> NG`; `cf317c17c586 -> IMPLEMENT-01`; `8ce8a09feca4 -> NG`; `bd0cb4988188 -> NG`; `28af4ee0055d -> NG` |
|
|
237
237
|
| `oat-project-implement/references/completion-and-closeout.md` | `f7dab9c1f96c -> IMPLEMENT-12`; `c69c17a069a8 -> IMPLEMENT-14`; `a97fa5634a68 -> IMPLEMENT-14`; `3af58881811c -> IMPLEMENT-14`; `4203e1f49d0f -> IMPLEMENT-14`; `c3bd2458a3d3 -> IMPLEMENT-13`; `95b5eafc070d -> IMPLEMENT-13`; `25ecbe9c998b -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `f6f24fd71da4 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `f18283bc1cf9 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `2c1ffc4a82dd -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `3454a07aa843 -> IMPLEMENT-16`; `0d86e2098cfb -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `d5fe597d266f -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `55a152e944c1 -> IMPLEMENT-16`; `effac7cbd573 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `9d2a34d8b148 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `d27462aaed26 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `9d52ecb17268 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `5b91aabe3757 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `fd0ad919f702 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `63bf28df1474 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `a4ed471dbc78 -> IMPLEMENT-16`; `6b7a64cec6e5 -> IMPLEMENT-16`; `0a4fdba0ebc0 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `a5033c2aada5 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `e77609eddba0 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `351156e8dde4 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `51d45bd2bbd1 -> IMPLEMENT-16`; `f7796ffcc804 -> IMPLEMENT-16`; `990d730cb494 -> IMPLEMENT-16`; `6ed28bb7d384 -> IMPLEMENT-16`; `8b7d4b5bcf1b -> IMPLEMENT-16`; `88aad500e6e9 -> IMPLEMENT-16`; `877e3e3f9eda -> IMPLEMENT-16`; `fc03c97f834e -> IMPLEMENT-16`; `12939a3da5e0 -> IMPLEMENT-16`; `bdb418335a88 -> IMPLEMENT-16`; `fba97e596ebd -> IMPLEMENT-16`; `3d0b5e2f14f0 -> IMPLEMENT-17`; `87f1424a8692 -> NG`; `6b1ec05182f0 -> IMPLEMENT-11`; `e6d696a27c91 -> NG`; `c77f8ccb52ad -> NG`; `48de2614c0ba -> IMPLEMENT-11`; `32d53f5212e5 -> IMPLEMENT-11`; `7cdb4a9c57b7 -> IMPLEMENT-11`; `16ffc0aa099b -> IMPLEMENT-11`; `d6868ea10b3f -> IMPLEMENT-11`; `4f05ff5567be -> IMPLEMENT-11`; `c70b47ae7a6d -> IMPLEMENT-11`; `5fafd093b58e -> NG`; `567d43ab0c2e -> NG`; `21ceaf7e658a -> NG`; `249427a9f475 -> NG`; `8a7ec13a9b7c -> NG`; `9aeb7fce2012 -> IMPLEMENT-18`; `f11a7cdda220 -> IMPLEMENT-18`; `4523ac029152 -> NG`; `6e87b08c4046 -> NG`; `baa6052c7f0a -> IMPLEMENT-18`; `27d3fad116b1 -> IMPLEMENT-18`; `2cfbeb4388a5 -> IMPLEMENT-18`; `c56ea56a56db -> NG`; `43e2e3c1380d -> IMPLEMENT-17`; `b49690277fb5 -> NG`; `df12304d6a36 -> NG`; `52eacac11fef -> IMPLEMENT-17`; `60092df6b17b -> IMPLEMENT-17`; `361872c6b00e -> IMPLEMENT-17`; `d2bc711a75fb -> IMPLEMENT-17` |
|
|
238
|
-
| `oat-project-implement/references/dispatch-and-dry-run.md` | `21b85f5e4daa -> IMPLEMENT-08`; `74c92b32bb2a -> IMPLEMENT-08`; `8efd2d0517ab -> IMPLEMENT-09`; `461ed9b3e495 -> IMPLEMENT-09`; `b5ad64fd744d -> NG`; `14ce436cfffa -> NG`; `043ca36da3e2 -> NG`; `a23e45c1dc8d -> NG`; `498143bb41a7 -> NG`; `4fe3eb179023 -> NG`; `7f75485e5a33 -> NG`; `8ec3a96df029 -> NG`; `16c3f96e758d -> NG`; `5915c41fe058 -> NG`; `f51e43eeac56 -> NG`; `fd41c25623cb -> NG`; `58a932ed6453 -> NG`; `4718bd3ce12d -> NG`; `58c444a2126b -> NG`; `2df3adae4120 -> NG`; `e75df892b55c -> NG`
|
|
238
|
+
| `oat-project-implement/references/dispatch-and-dry-run.md` | `21b85f5e4daa -> IMPLEMENT-08`; `74c92b32bb2a -> IMPLEMENT-08`; `8efd2d0517ab -> IMPLEMENT-09`; `461ed9b3e495 -> IMPLEMENT-09`; `b5ad64fd744d -> NG`; `14ce436cfffa -> NG`; `043ca36da3e2 -> NG`; `a23e45c1dc8d -> NG`; `498143bb41a7 -> NG`; `4fe3eb179023 -> NG`; `7f75485e5a33 -> NG`; `8ec3a96df029 -> NG`; `16c3f96e758d -> NG`; `5915c41fe058 -> NG`; `f51e43eeac56 -> NG`; `fd41c25623cb -> NG`; `58a932ed6453 -> NG`; `4718bd3ce12d -> NG`; `58c444a2126b -> NG`; `2df3adae4120 -> NG`; `e75df892b55c -> NG`; `8ba5dbd2a0d8 -> NG` |
|
|
239
239
|
| `oat-project-implement/references/docs/autonomy-contract.md` | `* -> NG` |
|
|
240
240
|
| `oat-project-implement/references/phase-execution.md` | `27737e814790 -> NG`; `6dda2b8e62e2 -> IMPLEMENT-10`; `b3197086bb1e -> IMPLEMENT-10` |
|
|
241
241
|
| `oat-project-implement/references/plan-and-resume.md` | `413829d31e32 -> IMPLEMENT-02`; `c7706cd8ad09 -> IMPLEMENT-03`; `a80a948df658 -> IMPLEMENT-03`; `b7ea139780ec -> IMPLEMENT-03+IMPLEMENT-04`; `8d438f2180ba -> IMPLEMENT-03`; `9e72e0518cda -> IMPLEMENT-03`; `3e177a1021e6 -> IMPLEMENT-03+IMPLEMENT-04`; `b59fc9eb9ce3 -> IMPLEMENT-03`; `a2b1d6855283 -> IMPLEMENT-03`; `44351a32e52a -> IMPLEMENT-03`; `b98b022f5523 -> IMPLEMENT-03`; `e9f5b949e214 -> IMPLEMENT-03`; `316fb6d9e980 -> IMPLEMENT-03`; `8b25a2c5c548 -> IMPLEMENT-03`; `1a59b1c0e705 -> IMPLEMENT-03`; `466cd562fc52 -> IMPLEMENT-03`; `083d896978d5 -> IMPLEMENT-03`; `f4ab11c13ae9 -> IMPLEMENT-03`; `7dc17ffcc1c4 -> IMPLEMENT-03`; `f731a90adabd -> IMPLEMENT-04`; `886ac01e7aa9 -> IMPLEMENT-04`; `b715db67df0c -> IMPLEMENT-04`; `2d9f26a539f3 -> IMPLEMENT-10`; `28384dee114f -> IMPLEMENT-05`; `f2591a4978b4 -> NG`; `8290823080b5 -> IMPLEMENT-06`; `f75789bf6c8e -> IMPLEMENT-07` |
|
|
@@ -235,7 +235,7 @@ remains immutable baseline evidence for the original p01-t01 verification.
|
|
|
235
235
|
| `oat-project-import-plan/SKILL.md` | `f7ca8635452f -> NG`; `c2e5fa410069 -> NG`; `655d61df0a8f -> NG`; `dceff5cc04b5 -> NG`; `1af4957a1af2 -> IMPORT-01`; `45b699c1c0b5 -> IMPORT-01`; `ba6d120791c1 -> IMPORT-01`; `070ebc5259af -> IMPORT-03`; `c11552696e2e -> IMPORT-03`; `cfe661966baf -> IMPORT-04`; `baa91c0a0bf8 -> NG`; `e364e84b2702 -> NG`; `39031985a945 -> IMPORT-06`; `f106aa29a217 -> IMPORT-07`; `65038450aee3 -> IMPORT-07`; `bee4c4aa34c6 -> NG`; `3f0b53056edd -> IMPORT-09` |
|
|
236
236
|
| `oat-project-implement/SKILL.md` | `18980f6bc1a6 -> NG`; `ffb3af0ba8ef -> NG`; `e0355c7a05e9 -> IMPLEMENT-11+IMPLEMENT-13+IMPLEMENT-16`; `6296f41ae11c -> NG`; `a167d03559fa -> NG`; `cf317c17c586 -> IMPLEMENT-01`; `8ce8a09feca4 -> NG`; `bd0cb4988188 -> NG`; `28af4ee0055d -> NG` |
|
|
237
237
|
| `oat-project-implement/references/completion-and-closeout.md` | `f7dab9c1f96c -> IMPLEMENT-12`; `c69c17a069a8 -> IMPLEMENT-14`; `a97fa5634a68 -> IMPLEMENT-14`; `3af58881811c -> IMPLEMENT-14`; `4203e1f49d0f -> IMPLEMENT-14`; `c3bd2458a3d3 -> IMPLEMENT-13`; `95b5eafc070d -> IMPLEMENT-13`; `25ecbe9c998b -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `f6f24fd71da4 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `f18283bc1cf9 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `2c1ffc4a82dd -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `3454a07aa843 -> IMPLEMENT-16`; `0d86e2098cfb -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `d5fe597d266f -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `55a152e944c1 -> IMPLEMENT-16`; `effac7cbd573 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `9d2a34d8b148 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `d27462aaed26 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `9d52ecb17268 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `5b91aabe3757 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `fd0ad919f702 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `63bf28df1474 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `a4ed471dbc78 -> IMPLEMENT-16`; `6b7a64cec6e5 -> IMPLEMENT-16`; `0a4fdba0ebc0 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `a5033c2aada5 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `e77609eddba0 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `351156e8dde4 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `51d45bd2bbd1 -> IMPLEMENT-16`; `f7796ffcc804 -> IMPLEMENT-16`; `990d730cb494 -> IMPLEMENT-16`; `6ed28bb7d384 -> IMPLEMENT-16`; `8b7d4b5bcf1b -> IMPLEMENT-16`; `88aad500e6e9 -> IMPLEMENT-16`; `877e3e3f9eda -> IMPLEMENT-16`; `fc03c97f834e -> IMPLEMENT-16`; `12939a3da5e0 -> IMPLEMENT-16`; `bdb418335a88 -> IMPLEMENT-16`; `fba97e596ebd -> IMPLEMENT-16`; `3d0b5e2f14f0 -> IMPLEMENT-17`; `87f1424a8692 -> NG`; `6b1ec05182f0 -> IMPLEMENT-11`; `e6d696a27c91 -> NG`; `c77f8ccb52ad -> NG`; `48de2614c0ba -> IMPLEMENT-11`; `32d53f5212e5 -> IMPLEMENT-11`; `7cdb4a9c57b7 -> IMPLEMENT-11`; `16ffc0aa099b -> IMPLEMENT-11`; `d6868ea10b3f -> IMPLEMENT-11`; `4f05ff5567be -> IMPLEMENT-11`; `c70b47ae7a6d -> IMPLEMENT-11`; `5fafd093b58e -> NG`; `567d43ab0c2e -> NG`; `21ceaf7e658a -> NG`; `249427a9f475 -> NG`; `8a7ec13a9b7c -> NG`; `9aeb7fce2012 -> IMPLEMENT-18`; `f11a7cdda220 -> IMPLEMENT-18`; `4523ac029152 -> NG`; `6e87b08c4046 -> NG`; `baa6052c7f0a -> IMPLEMENT-18`; `27d3fad116b1 -> IMPLEMENT-18`; `2cfbeb4388a5 -> IMPLEMENT-18`; `c56ea56a56db -> NG`; `43e2e3c1380d -> IMPLEMENT-17`; `b49690277fb5 -> NG`; `df12304d6a36 -> NG`; `52eacac11fef -> IMPLEMENT-17`; `60092df6b17b -> IMPLEMENT-17`; `361872c6b00e -> IMPLEMENT-17`; `d2bc711a75fb -> IMPLEMENT-17` |
|
|
238
|
-
| `oat-project-implement/references/dispatch-and-dry-run.md` | `21b85f5e4daa -> IMPLEMENT-08`; `74c92b32bb2a -> IMPLEMENT-08`; `8efd2d0517ab -> IMPLEMENT-09`; `461ed9b3e495 -> IMPLEMENT-09`; `b5ad64fd744d -> NG`; `14ce436cfffa -> NG`; `043ca36da3e2 -> NG`; `a23e45c1dc8d -> NG`; `498143bb41a7 -> NG`; `4fe3eb179023 -> NG`; `7f75485e5a33 -> NG`; `8ec3a96df029 -> NG`; `16c3f96e758d -> NG`; `5915c41fe058 -> NG`; `f51e43eeac56 -> NG`; `fd41c25623cb -> NG`; `58a932ed6453 -> NG`; `4718bd3ce12d -> NG`; `58c444a2126b -> NG`; `2df3adae4120 -> NG`; `e75df892b55c -> NG`
|
|
238
|
+
| `oat-project-implement/references/dispatch-and-dry-run.md` | `21b85f5e4daa -> IMPLEMENT-08`; `74c92b32bb2a -> IMPLEMENT-08`; `8efd2d0517ab -> IMPLEMENT-09`; `461ed9b3e495 -> IMPLEMENT-09`; `b5ad64fd744d -> NG`; `14ce436cfffa -> NG`; `043ca36da3e2 -> NG`; `a23e45c1dc8d -> NG`; `498143bb41a7 -> NG`; `4fe3eb179023 -> NG`; `7f75485e5a33 -> NG`; `8ec3a96df029 -> NG`; `16c3f96e758d -> NG`; `5915c41fe058 -> NG`; `f51e43eeac56 -> NG`; `fd41c25623cb -> NG`; `58a932ed6453 -> NG`; `4718bd3ce12d -> NG`; `58c444a2126b -> NG`; `2df3adae4120 -> NG`; `e75df892b55c -> NG`; `8ba5dbd2a0d8 -> NG` |
|
|
239
239
|
| `oat-project-implement/references/docs/autonomy-contract.md` | `* -> NG` |
|
|
240
240
|
| `oat-project-implement/references/phase-execution.md` | `27737e814790 -> NG`; `6dda2b8e62e2 -> IMPLEMENT-10`; `b3197086bb1e -> IMPLEMENT-10` |
|
|
241
241
|
| `oat-project-implement/references/plan-and-resume.md` | `413829d31e32 -> IMPLEMENT-02`; `c7706cd8ad09 -> IMPLEMENT-03`; `a80a948df658 -> IMPLEMENT-03`; `b7ea139780ec -> IMPLEMENT-03+IMPLEMENT-04`; `8d438f2180ba -> IMPLEMENT-03`; `9e72e0518cda -> IMPLEMENT-03`; `3e177a1021e6 -> IMPLEMENT-03+IMPLEMENT-04`; `b59fc9eb9ce3 -> IMPLEMENT-03`; `a2b1d6855283 -> IMPLEMENT-03`; `44351a32e52a -> IMPLEMENT-03`; `b98b022f5523 -> IMPLEMENT-03`; `e9f5b949e214 -> IMPLEMENT-03`; `316fb6d9e980 -> IMPLEMENT-03`; `8b25a2c5c548 -> IMPLEMENT-03`; `1a59b1c0e705 -> IMPLEMENT-03`; `466cd562fc52 -> IMPLEMENT-03`; `083d896978d5 -> IMPLEMENT-03`; `f4ab11c13ae9 -> IMPLEMENT-03`; `7dc17ffcc1c4 -> IMPLEMENT-03`; `f731a90adabd -> IMPLEMENT-04`; `886ac01e7aa9 -> IMPLEMENT-04`; `b715db67df0c -> IMPLEMENT-04`; `2d9f26a539f3 -> IMPLEMENT-10`; `28384dee114f -> IMPLEMENT-05`; `f2591a4978b4 -> NG`; `8290823080b5 -> IMPLEMENT-06`; `f75789bf6c8e -> IMPLEMENT-07` |
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: oat-project-implement
|
|
3
|
-
version: 2.2.
|
|
3
|
+
version: 2.2.1
|
|
4
4
|
description: Use when plan.md is ready for execution. Dispatches one phase implementer per phase, owns independent phase review and bounded fix routing, and supports plan-declared worktree-isolated parallel phases.
|
|
5
5
|
oat_gateable: true
|
|
6
6
|
argument-hint: '[--retry-limit <N>] [--dry-run]'
|
|
@@ -52,6 +52,9 @@ to be clean; each append is committed by the bookkeeping that owns it.
|
|
|
52
52
|
dispatch record at `$PROJECT_PATH/implementation.md#<run-anchor>`;
|
|
53
53
|
never mirror that record. Do not write the project log at acceptance; append
|
|
54
54
|
it with the phase-outcome entry after the child's report returns.
|
|
55
|
+
- Implementing a phase in the root during a Tier 1 run is a deviation, never a
|
|
56
|
+
silent default: record the phase ID, reason, and root model under a sibling
|
|
57
|
+
`Root-inline phase` heading at that run anchor. Sanctioned Tier 2 needs none.
|
|
55
58
|
- Before validating the review artifact or updating project bookkeeping, consume
|
|
56
59
|
exactly one brief artifact-mode confirmation of reconnaissance:
|
|
57
60
|
- `**Reconnaissance:** attempted`
|
|
@@ -105,6 +105,16 @@ Do not print `[0/N]` for this preflight step. The implementation denominator
|
|
|
105
105
|
is not established by capability detection; use the literal `[preflight]`
|
|
106
106
|
label above.
|
|
107
107
|
|
|
108
|
+
**Root-inline phases:** the preflight above records the tier reason once for the
|
|
109
|
+
run, so a sanctioned Tier 2 run needs no further per-phase record. Implementing
|
|
110
|
+
a phase in the root during a Tier 1 run is different: subagents were available
|
|
111
|
+
and approved, and the root took the work anyway. That is a deviation and must be
|
|
112
|
+
recorded, but no child was accepted, so the generic dispatch record cannot carry
|
|
113
|
+
it — that record is keyed on launch state the deviation does not have. Record it
|
|
114
|
+
instead under a `Root-inline phase` heading placed beside the generic record at
|
|
115
|
+
the same `$PROJECT_PATH/implementation.md#<run-anchor>`, giving the phase ID,
|
|
116
|
+
the reason the root did not dispatch, and the model the root was running.
|
|
117
|
+
|
|
108
118
|
**Tier lock:** tier is locked for the remainder of the run only after the
|
|
109
119
|
dispatch target is resolved. Subsequent phase-implementer, optional nested,
|
|
110
120
|
fix-continuation, and review dispatches use the same tier. Tier controls
|
|
@@ -187,11 +197,21 @@ Print before phase work:
|
|
|
187
197
|
```text
|
|
188
198
|
OAT Dispatch Tier: balanced (codex, managed capped — pinned-variant)
|
|
189
199
|
Resolved cap: high
|
|
200
|
+
Classified task class: default-implementation
|
|
201
|
+
Preferred effort: medium
|
|
202
|
+
Selected effort: medium
|
|
190
203
|
Source: project state
|
|
191
204
|
Provider default effort: medium
|
|
192
205
|
Note: OAT will use resolver-returned materialized Codex role names up to high. Base/unpinned roles resolve through the provider default only for explicit inherit/default behavior or the documented managed-uncapped reviewer exception.
|
|
193
206
|
```
|
|
194
207
|
|
|
208
|
+
The classification and the resolved cap are separate lines because they answer
|
|
209
|
+
separate questions: what the work needs, and what the policy permits. Here the
|
|
210
|
+
class resolved to `default-implementation` at `medium` effort while the cap
|
|
211
|
+
permitted `high`, so the selection sits below the ceiling. A stamp reporting
|
|
212
|
+
`not-classified` against a selected value equal to its cap is recording that the
|
|
213
|
+
first question went unasked.
|
|
214
|
+
|
|
195
215
|
If no policy resolves and the session is interactive, present the dispatch
|
|
196
216
|
policy prompt once before starting work. Print the unresolved-policy heading,
|
|
197
217
|
then generate the choice text from canonical CLI metadata immediately before
|
|
@@ -400,6 +420,28 @@ Cursor rules:
|
|
|
400
420
|
- Treat every configured Cursor candidate string as opaque. Do not normalize it
|
|
401
421
|
or infer capability from its spelling. The materialized mapping and resolver
|
|
402
422
|
alone translate it to a native variant.
|
|
423
|
+
- Select the concrete candidate before resolving, and select it through the
|
|
424
|
+
Task-Class Resolution contract in
|
|
425
|
+
`oat-dispatch-subagents/references/provider-cursor.md`, intersected with the
|
|
426
|
+
dated class guidance in the active `subagent-orchestration` selection
|
|
427
|
+
reference. That contract owns the decision; do not restate it here and do not
|
|
428
|
+
merge the two references. The Codex effort bands above are not a substitute:
|
|
429
|
+
they are defined on an effort axis Cursor does not expose, since Cursor
|
|
430
|
+
carries effort inside the candidate string and reports
|
|
431
|
+
`effort_axis=not-applicable`.
|
|
432
|
+
- Eligibility is wider than the ceiling tier. For implementation and fix work
|
|
433
|
+
every candidate from the lowest tier through the project's named maximum is
|
|
434
|
+
eligible, so a phase below the ceiling class has somewhere to land.
|
|
435
|
+
- The managed-capped route takes the exact-candidate branch above, so
|
|
436
|
+
`--candidate-model` is required. Omitting it does not ask the resolver to
|
|
437
|
+
choose; with no preferred value to compare against it takes the capped branch
|
|
438
|
+
and sets the selected value to the policy value, reporting
|
|
439
|
+
`selectionMode=capped` with the selected model equal to the cap. That pairing
|
|
440
|
+
is the signature of a skipped selection rather than evidence that the ceiling
|
|
441
|
+
was warranted, and it resolves without error, so nothing else will flag it.
|
|
442
|
+
- A ceiling is a maximum, not a target. Selecting the cap is correct only when
|
|
443
|
+
task-class resolution independently arrives there; reaching it because no
|
|
444
|
+
candidate was selected is a defect.
|
|
403
445
|
- For managed capped phase-implementer/fix dispatch, call
|
|
404
446
|
`oat project dispatch-ceiling resolve --provider cursor --role implementer --ceiling-tier <project-or-phase-tier> --candidate-model <opaque-model> --report-scope <phase-id> --report-action implementation --json`.
|
|
405
447
|
For bounded fixes, reuse the exact phase target with a bounded fix scope.
|
|
@@ -463,12 +505,13 @@ Requested controls: {model=<value|none>, effort=<value|none>, target=<value|unkn
|
|
|
463
505
|
Configured defaults: {provider default effort/model | unknown | not-applicable}
|
|
464
506
|
Runtime confirmation: {observed:<slug> | declared:<slug> | not-observable | mismatch:<detail>}
|
|
465
507
|
Preferred effort: {low | medium | high | xhigh | max | provider-default | not-applicable}
|
|
508
|
+
Classified task class: {mechanical-recon | intelligent-recon | default-implementation | hard-reasoning | consequential | not-classified}
|
|
466
509
|
OAT Dispatch Tier: {economy | balanced | high | frontier | uncapped | inherit host defaults | legacy capped}
|
|
467
510
|
Resolved cap: {resolved cap value | none}
|
|
468
511
|
Selected effort: {low | medium | high | xhigh | max | provider-default | not-applicable}
|
|
469
512
|
Policy source: {repo config | project state | preflight prompt}
|
|
470
513
|
Provider default effort: {value | unknown | not-applicable}
|
|
471
|
-
Selection mode: {capped | uncapped | review-target | no-review-target | inherit-default}
|
|
514
|
+
Selection mode: {candidate | capped | uncapped | review-target | no-review-target | inherit-default | unresolved}
|
|
472
515
|
Route level: {0 | 1 | ... | none}
|
|
473
516
|
Model axis: { selected:<value> | inherited | not-applicable | host-auto }
|
|
474
517
|
Effort axis: { selected:<value> | provider-default | inherited | not-applicable | host-auto }
|
|
@@ -477,6 +520,26 @@ Dispatch stamp: Dispatch: scope=<phase-or-task> action=<implementation|fix|revie
|
|
|
477
520
|
Rationale: {short rationale grounded in phase scope and any policy cap/uncapped/default behavior}
|
|
478
521
|
```
|
|
479
522
|
|
|
523
|
+
`Classified task class` carries the same value as the generic record's
|
|
524
|
+
`task_class` field in
|
|
525
|
+
`oat-dispatch-subagents/references/record-schema.md`, which is provider-neutral
|
|
526
|
+
across all five classes. Do not introduce a second vocabulary here. Where a
|
|
527
|
+
provider also classifies on an effort axis, that classification stays in
|
|
528
|
+
`Preferred effort`; Cursor reports `effort_axis=not-applicable` and carries the
|
|
529
|
+
class alone.
|
|
530
|
+
|
|
531
|
+
A managed-capped implementer or fix dispatch must carry a class. Because it
|
|
532
|
+
takes the exact-candidate branch, a correct one resolves to
|
|
533
|
+
`Selection mode: candidate`, or to `unresolved` when the requested candidate is
|
|
534
|
+
not selectable. `not-classified` is reserved for routes that make no selection,
|
|
535
|
+
and on a managed-capped route it pairs with `Selection mode: capped` to mark the
|
|
536
|
+
defect described under Cursor rules: the resolver reports `capped` precisely
|
|
537
|
+
because no candidate was supplied to select. That pairing is what distinguishes
|
|
538
|
+
a justified selection from a silent one.
|
|
539
|
+
|
|
540
|
+
Mirror the resolver's `selectionMode` values exactly. Omitting one forces a
|
|
541
|
+
correct dispatch to log a value that means something else.
|
|
542
|
+
|
|
480
543
|
For an explicit inherit/default fallback (for example a base `oat-reviewer`
|
|
481
544
|
under inherit policy), the log reads `Route: none; level=none`,
|
|
482
545
|
`Runtime confirmation: not-observable`, `Selection mode: inherit-default`,
|
|
@@ -235,7 +235,7 @@ remains immutable baseline evidence for the original p01-t01 verification.
|
|
|
235
235
|
| `oat-project-import-plan/SKILL.md` | `f7ca8635452f -> NG`; `c2e5fa410069 -> NG`; `655d61df0a8f -> NG`; `dceff5cc04b5 -> NG`; `1af4957a1af2 -> IMPORT-01`; `45b699c1c0b5 -> IMPORT-01`; `ba6d120791c1 -> IMPORT-01`; `070ebc5259af -> IMPORT-03`; `c11552696e2e -> IMPORT-03`; `cfe661966baf -> IMPORT-04`; `baa91c0a0bf8 -> NG`; `e364e84b2702 -> NG`; `39031985a945 -> IMPORT-06`; `f106aa29a217 -> IMPORT-07`; `65038450aee3 -> IMPORT-07`; `bee4c4aa34c6 -> NG`; `3f0b53056edd -> IMPORT-09` |
|
|
236
236
|
| `oat-project-implement/SKILL.md` | `18980f6bc1a6 -> NG`; `ffb3af0ba8ef -> NG`; `e0355c7a05e9 -> IMPLEMENT-11+IMPLEMENT-13+IMPLEMENT-16`; `6296f41ae11c -> NG`; `a167d03559fa -> NG`; `cf317c17c586 -> IMPLEMENT-01`; `8ce8a09feca4 -> NG`; `bd0cb4988188 -> NG`; `28af4ee0055d -> NG` |
|
|
237
237
|
| `oat-project-implement/references/completion-and-closeout.md` | `f7dab9c1f96c -> IMPLEMENT-12`; `c69c17a069a8 -> IMPLEMENT-14`; `a97fa5634a68 -> IMPLEMENT-14`; `3af58881811c -> IMPLEMENT-14`; `4203e1f49d0f -> IMPLEMENT-14`; `c3bd2458a3d3 -> IMPLEMENT-13`; `95b5eafc070d -> IMPLEMENT-13`; `25ecbe9c998b -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `f6f24fd71da4 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `f18283bc1cf9 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `2c1ffc4a82dd -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `3454a07aa843 -> IMPLEMENT-16`; `0d86e2098cfb -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `d5fe597d266f -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `55a152e944c1 -> IMPLEMENT-16`; `effac7cbd573 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `9d2a34d8b148 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `d27462aaed26 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `9d52ecb17268 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `5b91aabe3757 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `fd0ad919f702 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `63bf28df1474 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `a4ed471dbc78 -> IMPLEMENT-16`; `6b7a64cec6e5 -> IMPLEMENT-16`; `0a4fdba0ebc0 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `a5033c2aada5 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `e77609eddba0 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `351156e8dde4 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `51d45bd2bbd1 -> IMPLEMENT-16`; `f7796ffcc804 -> IMPLEMENT-16`; `990d730cb494 -> IMPLEMENT-16`; `6ed28bb7d384 -> IMPLEMENT-16`; `8b7d4b5bcf1b -> IMPLEMENT-16`; `88aad500e6e9 -> IMPLEMENT-16`; `877e3e3f9eda -> IMPLEMENT-16`; `fc03c97f834e -> IMPLEMENT-16`; `12939a3da5e0 -> IMPLEMENT-16`; `bdb418335a88 -> IMPLEMENT-16`; `fba97e596ebd -> IMPLEMENT-16`; `3d0b5e2f14f0 -> IMPLEMENT-17`; `87f1424a8692 -> NG`; `6b1ec05182f0 -> IMPLEMENT-11`; `e6d696a27c91 -> NG`; `c77f8ccb52ad -> NG`; `48de2614c0ba -> IMPLEMENT-11`; `32d53f5212e5 -> IMPLEMENT-11`; `7cdb4a9c57b7 -> IMPLEMENT-11`; `16ffc0aa099b -> IMPLEMENT-11`; `d6868ea10b3f -> IMPLEMENT-11`; `4f05ff5567be -> IMPLEMENT-11`; `c70b47ae7a6d -> IMPLEMENT-11`; `5fafd093b58e -> NG`; `567d43ab0c2e -> NG`; `21ceaf7e658a -> NG`; `249427a9f475 -> NG`; `8a7ec13a9b7c -> NG`; `9aeb7fce2012 -> IMPLEMENT-18`; `f11a7cdda220 -> IMPLEMENT-18`; `4523ac029152 -> NG`; `6e87b08c4046 -> NG`; `baa6052c7f0a -> IMPLEMENT-18`; `27d3fad116b1 -> IMPLEMENT-18`; `2cfbeb4388a5 -> IMPLEMENT-18`; `c56ea56a56db -> NG`; `43e2e3c1380d -> IMPLEMENT-17`; `b49690277fb5 -> NG`; `df12304d6a36 -> NG`; `52eacac11fef -> IMPLEMENT-17`; `60092df6b17b -> IMPLEMENT-17`; `361872c6b00e -> IMPLEMENT-17`; `d2bc711a75fb -> IMPLEMENT-17` |
|
|
238
|
-
| `oat-project-implement/references/dispatch-and-dry-run.md` | `21b85f5e4daa -> IMPLEMENT-08`; `74c92b32bb2a -> IMPLEMENT-08`; `8efd2d0517ab -> IMPLEMENT-09`; `461ed9b3e495 -> IMPLEMENT-09`; `b5ad64fd744d -> NG`; `14ce436cfffa -> NG`; `043ca36da3e2 -> NG`; `a23e45c1dc8d -> NG`; `498143bb41a7 -> NG`; `4fe3eb179023 -> NG`; `7f75485e5a33 -> NG`; `8ec3a96df029 -> NG`; `16c3f96e758d -> NG`; `5915c41fe058 -> NG`; `f51e43eeac56 -> NG`; `fd41c25623cb -> NG`; `58a932ed6453 -> NG`; `4718bd3ce12d -> NG`; `58c444a2126b -> NG`; `2df3adae4120 -> NG`; `e75df892b55c -> NG`
|
|
238
|
+
| `oat-project-implement/references/dispatch-and-dry-run.md` | `21b85f5e4daa -> IMPLEMENT-08`; `74c92b32bb2a -> IMPLEMENT-08`; `8efd2d0517ab -> IMPLEMENT-09`; `461ed9b3e495 -> IMPLEMENT-09`; `b5ad64fd744d -> NG`; `14ce436cfffa -> NG`; `043ca36da3e2 -> NG`; `a23e45c1dc8d -> NG`; `498143bb41a7 -> NG`; `4fe3eb179023 -> NG`; `7f75485e5a33 -> NG`; `8ec3a96df029 -> NG`; `16c3f96e758d -> NG`; `5915c41fe058 -> NG`; `f51e43eeac56 -> NG`; `fd41c25623cb -> NG`; `58a932ed6453 -> NG`; `4718bd3ce12d -> NG`; `58c444a2126b -> NG`; `2df3adae4120 -> NG`; `e75df892b55c -> NG`; `8ba5dbd2a0d8 -> NG` |
|
|
239
239
|
| `oat-project-implement/references/docs/autonomy-contract.md` | `* -> NG` |
|
|
240
240
|
| `oat-project-implement/references/phase-execution.md` | `27737e814790 -> NG`; `6dda2b8e62e2 -> IMPLEMENT-10`; `b3197086bb1e -> IMPLEMENT-10` |
|
|
241
241
|
| `oat-project-implement/references/plan-and-resume.md` | `413829d31e32 -> IMPLEMENT-02`; `c7706cd8ad09 -> IMPLEMENT-03`; `a80a948df658 -> IMPLEMENT-03`; `b7ea139780ec -> IMPLEMENT-03+IMPLEMENT-04`; `8d438f2180ba -> IMPLEMENT-03`; `9e72e0518cda -> IMPLEMENT-03`; `3e177a1021e6 -> IMPLEMENT-03+IMPLEMENT-04`; `b59fc9eb9ce3 -> IMPLEMENT-03`; `a2b1d6855283 -> IMPLEMENT-03`; `44351a32e52a -> IMPLEMENT-03`; `b98b022f5523 -> IMPLEMENT-03`; `e9f5b949e214 -> IMPLEMENT-03`; `316fb6d9e980 -> IMPLEMENT-03`; `8b25a2c5c548 -> IMPLEMENT-03`; `1a59b1c0e705 -> IMPLEMENT-03`; `466cd562fc52 -> IMPLEMENT-03`; `083d896978d5 -> IMPLEMENT-03`; `f4ab11c13ae9 -> IMPLEMENT-03`; `7dc17ffcc1c4 -> IMPLEMENT-03`; `f731a90adabd -> IMPLEMENT-04`; `886ac01e7aa9 -> IMPLEMENT-04`; `b715db67df0c -> IMPLEMENT-04`; `2d9f26a539f3 -> IMPLEMENT-10`; `28384dee114f -> IMPLEMENT-05`; `f2591a4978b4 -> NG`; `8290823080b5 -> IMPLEMENT-06`; `f75789bf6c8e -> IMPLEMENT-07` |
|
|
@@ -235,7 +235,7 @@ remains immutable baseline evidence for the original p01-t01 verification.
|
|
|
235
235
|
| `oat-project-import-plan/SKILL.md` | `f7ca8635452f -> NG`; `c2e5fa410069 -> NG`; `655d61df0a8f -> NG`; `dceff5cc04b5 -> NG`; `1af4957a1af2 -> IMPORT-01`; `45b699c1c0b5 -> IMPORT-01`; `ba6d120791c1 -> IMPORT-01`; `070ebc5259af -> IMPORT-03`; `c11552696e2e -> IMPORT-03`; `cfe661966baf -> IMPORT-04`; `baa91c0a0bf8 -> NG`; `e364e84b2702 -> NG`; `39031985a945 -> IMPORT-06`; `f106aa29a217 -> IMPORT-07`; `65038450aee3 -> IMPORT-07`; `bee4c4aa34c6 -> NG`; `3f0b53056edd -> IMPORT-09` |
|
|
236
236
|
| `oat-project-implement/SKILL.md` | `18980f6bc1a6 -> NG`; `ffb3af0ba8ef -> NG`; `e0355c7a05e9 -> IMPLEMENT-11+IMPLEMENT-13+IMPLEMENT-16`; `6296f41ae11c -> NG`; `a167d03559fa -> NG`; `cf317c17c586 -> IMPLEMENT-01`; `8ce8a09feca4 -> NG`; `bd0cb4988188 -> NG`; `28af4ee0055d -> NG` |
|
|
237
237
|
| `oat-project-implement/references/completion-and-closeout.md` | `f7dab9c1f96c -> IMPLEMENT-12`; `c69c17a069a8 -> IMPLEMENT-14`; `a97fa5634a68 -> IMPLEMENT-14`; `3af58881811c -> IMPLEMENT-14`; `4203e1f49d0f -> IMPLEMENT-14`; `c3bd2458a3d3 -> IMPLEMENT-13`; `95b5eafc070d -> IMPLEMENT-13`; `25ecbe9c998b -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `f6f24fd71da4 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `f18283bc1cf9 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `2c1ffc4a82dd -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `3454a07aa843 -> IMPLEMENT-16`; `0d86e2098cfb -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `d5fe597d266f -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `55a152e944c1 -> IMPLEMENT-16`; `effac7cbd573 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `9d2a34d8b148 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `d27462aaed26 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `9d52ecb17268 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `5b91aabe3757 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `fd0ad919f702 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `63bf28df1474 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `a4ed471dbc78 -> IMPLEMENT-16`; `6b7a64cec6e5 -> IMPLEMENT-16`; `0a4fdba0ebc0 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `a5033c2aada5 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `e77609eddba0 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `351156e8dde4 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `51d45bd2bbd1 -> IMPLEMENT-16`; `f7796ffcc804 -> IMPLEMENT-16`; `990d730cb494 -> IMPLEMENT-16`; `6ed28bb7d384 -> IMPLEMENT-16`; `8b7d4b5bcf1b -> IMPLEMENT-16`; `88aad500e6e9 -> IMPLEMENT-16`; `877e3e3f9eda -> IMPLEMENT-16`; `fc03c97f834e -> IMPLEMENT-16`; `12939a3da5e0 -> IMPLEMENT-16`; `bdb418335a88 -> IMPLEMENT-16`; `fba97e596ebd -> IMPLEMENT-16`; `3d0b5e2f14f0 -> IMPLEMENT-17`; `87f1424a8692 -> NG`; `6b1ec05182f0 -> IMPLEMENT-11`; `e6d696a27c91 -> NG`; `c77f8ccb52ad -> NG`; `48de2614c0ba -> IMPLEMENT-11`; `32d53f5212e5 -> IMPLEMENT-11`; `7cdb4a9c57b7 -> IMPLEMENT-11`; `16ffc0aa099b -> IMPLEMENT-11`; `d6868ea10b3f -> IMPLEMENT-11`; `4f05ff5567be -> IMPLEMENT-11`; `c70b47ae7a6d -> IMPLEMENT-11`; `5fafd093b58e -> NG`; `567d43ab0c2e -> NG`; `21ceaf7e658a -> NG`; `249427a9f475 -> NG`; `8a7ec13a9b7c -> NG`; `9aeb7fce2012 -> IMPLEMENT-18`; `f11a7cdda220 -> IMPLEMENT-18`; `4523ac029152 -> NG`; `6e87b08c4046 -> NG`; `baa6052c7f0a -> IMPLEMENT-18`; `27d3fad116b1 -> IMPLEMENT-18`; `2cfbeb4388a5 -> IMPLEMENT-18`; `c56ea56a56db -> NG`; `43e2e3c1380d -> IMPLEMENT-17`; `b49690277fb5 -> NG`; `df12304d6a36 -> NG`; `52eacac11fef -> IMPLEMENT-17`; `60092df6b17b -> IMPLEMENT-17`; `361872c6b00e -> IMPLEMENT-17`; `d2bc711a75fb -> IMPLEMENT-17` |
|
|
238
|
-
| `oat-project-implement/references/dispatch-and-dry-run.md` | `21b85f5e4daa -> IMPLEMENT-08`; `74c92b32bb2a -> IMPLEMENT-08`; `8efd2d0517ab -> IMPLEMENT-09`; `461ed9b3e495 -> IMPLEMENT-09`; `b5ad64fd744d -> NG`; `14ce436cfffa -> NG`; `043ca36da3e2 -> NG`; `a23e45c1dc8d -> NG`; `498143bb41a7 -> NG`; `4fe3eb179023 -> NG`; `7f75485e5a33 -> NG`; `8ec3a96df029 -> NG`; `16c3f96e758d -> NG`; `5915c41fe058 -> NG`; `f51e43eeac56 -> NG`; `fd41c25623cb -> NG`; `58a932ed6453 -> NG`; `4718bd3ce12d -> NG`; `58c444a2126b -> NG`; `2df3adae4120 -> NG`; `e75df892b55c -> NG`
|
|
238
|
+
| `oat-project-implement/references/dispatch-and-dry-run.md` | `21b85f5e4daa -> IMPLEMENT-08`; `74c92b32bb2a -> IMPLEMENT-08`; `8efd2d0517ab -> IMPLEMENT-09`; `461ed9b3e495 -> IMPLEMENT-09`; `b5ad64fd744d -> NG`; `14ce436cfffa -> NG`; `043ca36da3e2 -> NG`; `a23e45c1dc8d -> NG`; `498143bb41a7 -> NG`; `4fe3eb179023 -> NG`; `7f75485e5a33 -> NG`; `8ec3a96df029 -> NG`; `16c3f96e758d -> NG`; `5915c41fe058 -> NG`; `f51e43eeac56 -> NG`; `fd41c25623cb -> NG`; `58a932ed6453 -> NG`; `4718bd3ce12d -> NG`; `58c444a2126b -> NG`; `2df3adae4120 -> NG`; `e75df892b55c -> NG`; `8ba5dbd2a0d8 -> NG` |
|
|
239
239
|
| `oat-project-implement/references/docs/autonomy-contract.md` | `* -> NG` |
|
|
240
240
|
| `oat-project-implement/references/phase-execution.md` | `27737e814790 -> NG`; `6dda2b8e62e2 -> IMPLEMENT-10`; `b3197086bb1e -> IMPLEMENT-10` |
|
|
241
241
|
| `oat-project-implement/references/plan-and-resume.md` | `413829d31e32 -> IMPLEMENT-02`; `c7706cd8ad09 -> IMPLEMENT-03`; `a80a948df658 -> IMPLEMENT-03`; `b7ea139780ec -> IMPLEMENT-03+IMPLEMENT-04`; `8d438f2180ba -> IMPLEMENT-03`; `9e72e0518cda -> IMPLEMENT-03`; `3e177a1021e6 -> IMPLEMENT-03+IMPLEMENT-04`; `b59fc9eb9ce3 -> IMPLEMENT-03`; `a2b1d6855283 -> IMPLEMENT-03`; `44351a32e52a -> IMPLEMENT-03`; `b98b022f5523 -> IMPLEMENT-03`; `e9f5b949e214 -> IMPLEMENT-03`; `316fb6d9e980 -> IMPLEMENT-03`; `8b25a2c5c548 -> IMPLEMENT-03`; `1a59b1c0e705 -> IMPLEMENT-03`; `466cd562fc52 -> IMPLEMENT-03`; `083d896978d5 -> IMPLEMENT-03`; `f4ab11c13ae9 -> IMPLEMENT-03`; `7dc17ffcc1c4 -> IMPLEMENT-03`; `f731a90adabd -> IMPLEMENT-04`; `886ac01e7aa9 -> IMPLEMENT-04`; `b715db67df0c -> IMPLEMENT-04`; `2d9f26a539f3 -> IMPLEMENT-10`; `28384dee114f -> IMPLEMENT-05`; `f2591a4978b4 -> NG`; `8290823080b5 -> IMPLEMENT-06`; `f75789bf6c8e -> IMPLEMENT-07` |
|
|
@@ -235,7 +235,7 @@ remains immutable baseline evidence for the original p01-t01 verification.
|
|
|
235
235
|
| `oat-project-import-plan/SKILL.md` | `f7ca8635452f -> NG`; `c2e5fa410069 -> NG`; `655d61df0a8f -> NG`; `dceff5cc04b5 -> NG`; `1af4957a1af2 -> IMPORT-01`; `45b699c1c0b5 -> IMPORT-01`; `ba6d120791c1 -> IMPORT-01`; `070ebc5259af -> IMPORT-03`; `c11552696e2e -> IMPORT-03`; `cfe661966baf -> IMPORT-04`; `baa91c0a0bf8 -> NG`; `e364e84b2702 -> NG`; `39031985a945 -> IMPORT-06`; `f106aa29a217 -> IMPORT-07`; `65038450aee3 -> IMPORT-07`; `bee4c4aa34c6 -> NG`; `3f0b53056edd -> IMPORT-09` |
|
|
236
236
|
| `oat-project-implement/SKILL.md` | `18980f6bc1a6 -> NG`; `ffb3af0ba8ef -> NG`; `e0355c7a05e9 -> IMPLEMENT-11+IMPLEMENT-13+IMPLEMENT-16`; `6296f41ae11c -> NG`; `a167d03559fa -> NG`; `cf317c17c586 -> IMPLEMENT-01`; `8ce8a09feca4 -> NG`; `bd0cb4988188 -> NG`; `28af4ee0055d -> NG` |
|
|
237
237
|
| `oat-project-implement/references/completion-and-closeout.md` | `f7dab9c1f96c -> IMPLEMENT-12`; `c69c17a069a8 -> IMPLEMENT-14`; `a97fa5634a68 -> IMPLEMENT-14`; `3af58881811c -> IMPLEMENT-14`; `4203e1f49d0f -> IMPLEMENT-14`; `c3bd2458a3d3 -> IMPLEMENT-13`; `95b5eafc070d -> IMPLEMENT-13`; `25ecbe9c998b -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `f6f24fd71da4 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `f18283bc1cf9 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `2c1ffc4a82dd -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `3454a07aa843 -> IMPLEMENT-16`; `0d86e2098cfb -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `d5fe597d266f -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `55a152e944c1 -> IMPLEMENT-16`; `effac7cbd573 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `9d2a34d8b148 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `d27462aaed26 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `9d52ecb17268 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `5b91aabe3757 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `fd0ad919f702 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `63bf28df1474 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `a4ed471dbc78 -> IMPLEMENT-16`; `6b7a64cec6e5 -> IMPLEMENT-16`; `0a4fdba0ebc0 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `a5033c2aada5 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `e77609eddba0 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `351156e8dde4 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `51d45bd2bbd1 -> IMPLEMENT-16`; `f7796ffcc804 -> IMPLEMENT-16`; `990d730cb494 -> IMPLEMENT-16`; `6ed28bb7d384 -> IMPLEMENT-16`; `8b7d4b5bcf1b -> IMPLEMENT-16`; `88aad500e6e9 -> IMPLEMENT-16`; `877e3e3f9eda -> IMPLEMENT-16`; `fc03c97f834e -> IMPLEMENT-16`; `12939a3da5e0 -> IMPLEMENT-16`; `bdb418335a88 -> IMPLEMENT-16`; `fba97e596ebd -> IMPLEMENT-16`; `3d0b5e2f14f0 -> IMPLEMENT-17`; `87f1424a8692 -> NG`; `6b1ec05182f0 -> IMPLEMENT-11`; `e6d696a27c91 -> NG`; `c77f8ccb52ad -> NG`; `48de2614c0ba -> IMPLEMENT-11`; `32d53f5212e5 -> IMPLEMENT-11`; `7cdb4a9c57b7 -> IMPLEMENT-11`; `16ffc0aa099b -> IMPLEMENT-11`; `d6868ea10b3f -> IMPLEMENT-11`; `4f05ff5567be -> IMPLEMENT-11`; `c70b47ae7a6d -> IMPLEMENT-11`; `5fafd093b58e -> NG`; `567d43ab0c2e -> NG`; `21ceaf7e658a -> NG`; `249427a9f475 -> NG`; `8a7ec13a9b7c -> NG`; `9aeb7fce2012 -> IMPLEMENT-18`; `f11a7cdda220 -> IMPLEMENT-18`; `4523ac029152 -> NG`; `6e87b08c4046 -> NG`; `baa6052c7f0a -> IMPLEMENT-18`; `27d3fad116b1 -> IMPLEMENT-18`; `2cfbeb4388a5 -> IMPLEMENT-18`; `c56ea56a56db -> NG`; `43e2e3c1380d -> IMPLEMENT-17`; `b49690277fb5 -> NG`; `df12304d6a36 -> NG`; `52eacac11fef -> IMPLEMENT-17`; `60092df6b17b -> IMPLEMENT-17`; `361872c6b00e -> IMPLEMENT-17`; `d2bc711a75fb -> IMPLEMENT-17` |
|
|
238
|
-
| `oat-project-implement/references/dispatch-and-dry-run.md` | `21b85f5e4daa -> IMPLEMENT-08`; `74c92b32bb2a -> IMPLEMENT-08`; `8efd2d0517ab -> IMPLEMENT-09`; `461ed9b3e495 -> IMPLEMENT-09`; `b5ad64fd744d -> NG`; `14ce436cfffa -> NG`; `043ca36da3e2 -> NG`; `a23e45c1dc8d -> NG`; `498143bb41a7 -> NG`; `4fe3eb179023 -> NG`; `7f75485e5a33 -> NG`; `8ec3a96df029 -> NG`; `16c3f96e758d -> NG`; `5915c41fe058 -> NG`; `f51e43eeac56 -> NG`; `fd41c25623cb -> NG`; `58a932ed6453 -> NG`; `4718bd3ce12d -> NG`; `58c444a2126b -> NG`; `2df3adae4120 -> NG`; `e75df892b55c -> NG`
|
|
238
|
+
| `oat-project-implement/references/dispatch-and-dry-run.md` | `21b85f5e4daa -> IMPLEMENT-08`; `74c92b32bb2a -> IMPLEMENT-08`; `8efd2d0517ab -> IMPLEMENT-09`; `461ed9b3e495 -> IMPLEMENT-09`; `b5ad64fd744d -> NG`; `14ce436cfffa -> NG`; `043ca36da3e2 -> NG`; `a23e45c1dc8d -> NG`; `498143bb41a7 -> NG`; `4fe3eb179023 -> NG`; `7f75485e5a33 -> NG`; `8ec3a96df029 -> NG`; `16c3f96e758d -> NG`; `5915c41fe058 -> NG`; `f51e43eeac56 -> NG`; `fd41c25623cb -> NG`; `58a932ed6453 -> NG`; `4718bd3ce12d -> NG`; `58c444a2126b -> NG`; `2df3adae4120 -> NG`; `e75df892b55c -> NG`; `8ba5dbd2a0d8 -> NG` |
|
|
239
239
|
| `oat-project-implement/references/docs/autonomy-contract.md` | `* -> NG` |
|
|
240
240
|
| `oat-project-implement/references/phase-execution.md` | `27737e814790 -> NG`; `6dda2b8e62e2 -> IMPLEMENT-10`; `b3197086bb1e -> IMPLEMENT-10` |
|
|
241
241
|
| `oat-project-implement/references/plan-and-resume.md` | `413829d31e32 -> IMPLEMENT-02`; `c7706cd8ad09 -> IMPLEMENT-03`; `a80a948df658 -> IMPLEMENT-03`; `b7ea139780ec -> IMPLEMENT-03+IMPLEMENT-04`; `8d438f2180ba -> IMPLEMENT-03`; `9e72e0518cda -> IMPLEMENT-03`; `3e177a1021e6 -> IMPLEMENT-03+IMPLEMENT-04`; `b59fc9eb9ce3 -> IMPLEMENT-03`; `a2b1d6855283 -> IMPLEMENT-03`; `44351a32e52a -> IMPLEMENT-03`; `b98b022f5523 -> IMPLEMENT-03`; `e9f5b949e214 -> IMPLEMENT-03`; `316fb6d9e980 -> IMPLEMENT-03`; `8b25a2c5c548 -> IMPLEMENT-03`; `1a59b1c0e705 -> IMPLEMENT-03`; `466cd562fc52 -> IMPLEMENT-03`; `083d896978d5 -> IMPLEMENT-03`; `f4ab11c13ae9 -> IMPLEMENT-03`; `7dc17ffcc1c4 -> IMPLEMENT-03`; `f731a90adabd -> IMPLEMENT-04`; `886ac01e7aa9 -> IMPLEMENT-04`; `b715db67df0c -> IMPLEMENT-04`; `2d9f26a539f3 -> IMPLEMENT-10`; `28384dee114f -> IMPLEMENT-05`; `f2591a4978b4 -> NG`; `8290823080b5 -> IMPLEMENT-06`; `f75789bf6c8e -> IMPLEMENT-07` |
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: subagent-orchestration
|
|
3
|
-
version: 1.0.
|
|
3
|
+
version: 1.0.2
|
|
4
4
|
description: Use when delegating work to subagents or choosing a model for a task — routing by task class, selecting provider-specific models and effort, and verifying subagent claims. Covers OpenAI/Codex, Anthropic/Claude, and Cursor.
|
|
5
5
|
compatibility: Self-contained; no OAT installation required.
|
|
6
6
|
user-invocable: true
|
|
@@ -60,6 +60,15 @@ still require enough capability to use tools, follow scope, and return complete
|
|
|
60
60
|
evidence. Prefer scripts over models when a deterministic program fully solves
|
|
61
61
|
the task.
|
|
62
62
|
|
|
63
|
+
A named route is only usable where the harness can actually select it. The
|
|
64
|
+
models named per task class in these references are dated examples, and a
|
|
65
|
+
harness will often expose a different set. When a named route is unavailable,
|
|
66
|
+
substitute one meeting the same class floor, or move one class up; never fall
|
|
67
|
+
through to the strongest model on offer merely because the named one was
|
|
68
|
+
missing. Where a harness restricts selection to a configured set, keep enough
|
|
69
|
+
distinct entries that a classification has somewhere to land — a set holding a
|
|
70
|
+
single entry cannot express a choice, only a default.
|
|
71
|
+
|
|
63
72
|
## Escalation Boundaries
|
|
64
73
|
|
|
65
74
|
- Mechanical to intelligent recon when judgment is required to identify a
|
|
@@ -170,6 +179,15 @@ instantiations in provider guidance are dated and provisional unless a relevant
|
|
|
170
179
|
evaluation qualifies them. Reviewer independence never transfers authorization
|
|
171
180
|
away from the root.
|
|
172
181
|
|
|
182
|
+
One exception to effort following reasoning depth is worth stating so it does
|
|
183
|
+
not read as a contradiction. A quality gate may hold its reviewer at a fixed
|
|
184
|
+
configured rung regardless of the phase under review, because a gate that
|
|
185
|
+
varies its reviewer stops being comparable across runs and a regression becomes
|
|
186
|
+
indistinguishable from a change of reviewer. That is a determinism argument
|
|
187
|
+
rather than a depth argument, and it applies to the gate's own reviewer, not to
|
|
188
|
+
review generally: it neither raises the authoring route nor licenses treating
|
|
189
|
+
consequence as a reason for top effort elsewhere.
|
|
190
|
+
|
|
173
191
|
## Staleness
|
|
174
192
|
|
|
175
193
|
Read `evidence-and-refresh.md` when provider guidance is review-required or
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/commands/init/tools/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/commands/init/tools/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -947,11 +947,11 @@ export function createInitToolsCommand(overrides = {}) {
|
|
|
947
947
|
for (const packCommand of packCommands) {
|
|
948
948
|
command.addCommand(packCommand);
|
|
949
949
|
}
|
|
950
|
-
command.action(async (_options,
|
|
951
|
-
const context = dependencies.buildCommandContext(readGlobalOptions(
|
|
950
|
+
command.action(async (_options, actionCommand) => {
|
|
951
|
+
const context = dependencies.buildCommandContext(readGlobalOptions(actionCommand));
|
|
952
952
|
const selectedPacks = await runInitTools(context, dependencies);
|
|
953
|
-
setInstalledCanonicalPaths(
|
|
954
|
-
await reconcileAfterInstall(
|
|
953
|
+
setInstalledCanonicalPaths(actionCommand, canonicalPathsForPacks(selectedPacks));
|
|
954
|
+
await reconcileAfterInstall(actionCommand);
|
|
955
955
|
});
|
|
956
956
|
return command;
|
|
957
957
|
}
|
|
@@ -232,9 +232,9 @@ async function classifyObsoleteMappingRetirement(manifestEntry, scopeRoot) {
|
|
|
232
232
|
}
|
|
233
233
|
async function classifyOperation(canonicalEntry, providerPath, strategy, renderedContent) {
|
|
234
234
|
if (strategy === 'symlink') {
|
|
235
|
-
let
|
|
235
|
+
let providerStat;
|
|
236
236
|
try {
|
|
237
|
-
|
|
237
|
+
providerStat = await lstat(providerPath);
|
|
238
238
|
}
|
|
239
239
|
catch (error) {
|
|
240
240
|
if (typeof error === 'object' &&
|
|
@@ -248,7 +248,7 @@ async function classifyOperation(canonicalEntry, providerPath, strategy, rendere
|
|
|
248
248
|
}
|
|
249
249
|
throw error;
|
|
250
250
|
}
|
|
251
|
-
if (!
|
|
251
|
+
if (!providerStat.isSymbolicLink()) {
|
|
252
252
|
return {
|
|
253
253
|
operation: 'update_symlink',
|
|
254
254
|
reason: 'provider path is not a symlink',
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@open-agent-toolkit/cli",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.23",
|
|
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.2.
|
|
37
|
+
"@open-agent-toolkit/control-plane": "0.2.23"
|
|
38
38
|
},
|
|
39
39
|
"devDependencies": {
|
|
40
40
|
"@types/node": "^22.10.0",
|