@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.
Files changed (26) hide show
  1. package/assets/config/dispatch-matrix-recommendation.json +6 -8
  2. package/assets/docs/workflows/projects/dispatch-ceiling.md +34 -8
  3. package/assets/public-package-versions.json +4 -4
  4. package/assets/skills/explainer-kit/SKILL.md +1 -1
  5. package/assets/skills/explainer-kit/scripts/lib/html-safety.mjs +8 -1
  6. package/assets/skills/explainer-kit/scripts/lib/qa.mjs +5 -5
  7. package/assets/skills/explainer-kit/scripts/lib/recipes.mjs +5 -4
  8. package/assets/skills/explainer-kit/scripts/render-qa.mjs +6 -1
  9. package/assets/skills/explainer-kit/scripts/run.mjs +3 -10
  10. package/assets/skills/oat-brainstorm/SKILL.md +1 -1
  11. package/assets/skills/oat-brainstorm/scripts/helper.js +18 -11
  12. package/assets/skills/oat-brainstorm/scripts/server.cjs +109 -55
  13. package/assets/skills/oat-explainer-kit/SKILL.md +1 -1
  14. package/assets/skills/oat-project-autonomous/references/gate-inventory.md +1 -1
  15. package/assets/skills/oat-project-document/references/docs/autonomy-contract.md +1 -1
  16. package/assets/skills/oat-project-implement/SKILL.md +4 -1
  17. package/assets/skills/oat-project-implement/references/dispatch-and-dry-run.md +64 -1
  18. package/assets/skills/oat-project-implement/references/docs/autonomy-contract.md +1 -1
  19. package/assets/skills/oat-project-pr-final/references/docs/autonomy-contract.md +1 -1
  20. package/assets/skills/oat-project-quick-start/references/docs/autonomy-contract.md +1 -1
  21. package/assets/skills/subagent-orchestration/SKILL.md +1 -1
  22. package/assets/skills/subagent-orchestration/references/model-selection-principles.md +18 -0
  23. package/dist/commands/init/tools/index.d.ts.map +1 -1
  24. package/dist/commands/init/tools/index.js +4 -4
  25. package/dist/engine/compute-plan.js +3 -3
  26. package/package.json +2 -2
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "2026-07-25.1",
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
- "claude-opus-5-thinking-high"
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
- "claude-opus-5-thinking-max"
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-25.1` is a live example: it adds Opus 5 rungs to the Cursor
80
- `balanced`, `high`, and `frontier` tiers and drops `claude-sonnet-5-high` from
81
- `economy`. An adopter still on the prior version keeps their existing Cursor
82
- tiers untouched until they take one of those actions.
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 16 Cursor candidates across the four tiers,
217
- while the materialization catalogue carries 18 flat IDs. The extra entries
218
- are approved mappings deliberately kept out of the recommendation but still
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
 
@@ -1,6 +1,6 @@
1
1
  {
2
- "cli": "0.2.21",
3
- "docs-config": "0.2.21",
4
- "docs-theme": "0.2.21",
5
- "docs-transforms": "0.2.21"
2
+ "cli": "0.2.23",
3
+ "docs-config": "0.2.23",
4
+ "docs-theme": "0.2.23",
5
+ "docs-transforms": "0.2.23"
6
6
  }
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: explainer-kit
3
- version: 2.0.0
3
+ version: 2.0.1
4
4
  description: Use when building destination-neutral visual explainer artifacts from explicit, versioned inputs.
5
5
  user-invocable: true
6
6
  allowed-tools: Read, Write, Edit, Bash, Grep, Glob, Agent, mcp__*
@@ -580,7 +580,14 @@ function srcsetCandidates(value) {
580
580
  }
581
581
 
582
582
  function compactUrl(value) {
583
- return value.replace(/[\u0000-\u0020\u007f]+/g, '').toLowerCase();
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, artifactId, width, request) {
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 ${artifactId} at ${width}px returned an invalid result.`,
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 ${artifactId} at ${width}px returned an invalid result.`,
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 ${artifactId} at ${width}px returned an invalid result.`,
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 ${artifactId} at ${width}px returned an invalid result.`,
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 (maxPerType.has(profile.type) && typeCount >= maxPerType.get(profile.type)) {
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({ siteDir, artifacts, probe: browserProbe, widths });
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.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 = 'ws://' + window.location.host;
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 = 'Click an option above, then return to the terminal';
54
+ indicator.textContent =
55
+ 'Click an option above, then return to the terminal';
55
56
  } else if (selected.length === 1) {
56
- const label = selected[0].querySelector('h3, .content h3, .card-body h3')?.textContent?.trim() || selected[0].dataset.choice;
57
- indicator.innerHTML = '<span class="selected-text">' + label + ' selected</span> — return to terminal to continue';
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 = '<span class="selected-text">' + selected.length + ' selected</span> — return to terminal to continue';
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.querySelectorAll('.option, .card').forEach(o => o.classList.remove('selected'));
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 = {}) => sendEvent({ type: '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: 0x0A };
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.createHash('sha1').update(clientKey + WS_MAGIC).digest('base64');
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] & 0x0F;
46
+ const opcode = buffer[0] & 0x0f;
44
47
  const masked = (secondByte & 0x80) !== 0;
45
- let payloadLen = secondByte & 0x7F;
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 = process.env.BRAINSTORM_PORT || (49152 + Math.floor(Math.random() * 16383));
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 = process.env.BRAINSTORM_URL_HOST || (HOST === '127.0.0.1' ? 'localhost' : 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 ? Number(process.env.BRAINSTORM_OWNER_PID) : null;
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', '.css': 'text/css', '.js': 'application/javascript',
86
- '.json': 'application/json', '.png': 'image/png', '.jpg': 'image/jpeg',
87
- '.jpeg': 'image/jpeg', '.gif': 'image/gif', '.svg': 'image/svg+xml'
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(path.join(__dirname, 'frame-template.html'), 'utf-8');
102
- const helperScript = fs.readFileSync(path.join(__dirname, 'helper.js'), 'utf-8');
103
- const helperInjection = '<script>\n' + helperScript + '\n</script>';
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.readdirSync(CONTENT_DIR)
118
- .filter(f => f.endsWith('.html'))
119
- .map(f => {
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))(fs.readFileSync(screenFile, 'utf-8'))
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 + '\n</body>');
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) { socket.destroy(); return; }
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
- 'Upgrade: websocket\r\n' +
175
- 'Connection: Upgrade\r\n' +
176
- 'Sec-WebSocket-Accept: ' + accept + '\r\n\r\n'
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 (e) {
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) + '\n');
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 { socket.write(frame); } catch (e) { clients.delete(socket); }
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)) fs.mkdirSync(CONTENT_DIR, { recursive: true });
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)) clearTimeout(debounceTimers.get(filename));
280
- debounceTimers.set(filename, setTimeout(() => {
281
- debounceTimers.delete(filename);
282
- const filePath = path.join(CONTENT_DIR, filename);
283
-
284
- if (!fs.existsSync(filePath)) return; // file was deleted
285
- touchActivity();
286
-
287
- if (!knownFiles.has(filename)) {
288
- knownFiles.add(filename);
289
- const eventsFile = path.join(STATE_DIR, 'events');
290
- if (fs.existsSync(eventsFile)) fs.unlinkSync(eventsFile);
291
- console.log(JSON.stringify({ type: 'screen-added', file: filePath }));
292
- } else {
293
- console.log(JSON.stringify({ type: 'screen-updated', file: filePath }));
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
- broadcast({ type: 'reload' });
297
- }, 100));
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() }) + '\n'
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 { process.kill(ownerPid, 0); return true; } catch (e) { return e.code === 'EPERM'; }
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) shutdown('idle timeout');
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 { process.kill(ownerPid, 0); }
331
- catch (e) {
373
+ try {
374
+ process.kill(ownerPid, 0);
375
+ } catch (e) {
332
376
  if (e.code !== 'EPERM') {
333
- console.log(JSON.stringify({ type: 'owner-pid-invalid', pid: ownerPid, reason: 'dead at startup' }));
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', port: Number(PORT), host: HOST,
342
- url_host: URL_HOST, url: 'http://' + URL_HOST + ':' + PORT,
343
- screen_dir: CONTENT_DIR, state_dir: STATE_DIR
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 + '\n');
400
+ fs.writeFileSync(path.join(STATE_DIR, 'server-info'), `${info}\n`);
347
401
  });
348
402
  }
349
403
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: oat-explainer-kit
3
- version: 1.0.2
3
+ version: 1.0.3
4
4
  description: Use when building project explainers or recaps from OAT configuration, state, and lifecycle artifacts.
5
5
  disable-model-invocation: false
6
6
  user-invocable: true
@@ -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.0
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.1
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, command) => {
951
- const context = dependencies.buildCommandContext(readGlobalOptions(command));
950
+ command.action(async (_options, actionCommand) => {
951
+ const context = dependencies.buildCommandContext(readGlobalOptions(actionCommand));
952
952
  const selectedPacks = await runInitTools(context, dependencies);
953
- setInstalledCanonicalPaths(command, canonicalPathsForPacks(selectedPacks));
954
- await reconcileAfterInstall(command);
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 stat;
235
+ let providerStat;
236
236
  try {
237
- stat = await lstat(providerPath);
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 (!stat.isSymbolicLink()) {
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.21",
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.21"
37
+ "@open-agent-toolkit/control-plane": "0.2.23"
38
38
  },
39
39
  "devDependencies": {
40
40
  "@types/node": "^22.10.0",