instar 1.3.780 → 1.3.781

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 (42) hide show
  1. package/dashboard/index.html +161 -0
  2. package/dist/core/PostUpdateMigrator.d.ts +21 -0
  3. package/dist/core/PostUpdateMigrator.d.ts.map +1 -1
  4. package/dist/core/PostUpdateMigrator.js +59 -0
  5. package/dist/core/PostUpdateMigrator.js.map +1 -1
  6. package/dist/core/routingPriceAuthority.d.ts +0 -0
  7. package/dist/core/routingPriceAuthority.d.ts.map +1 -0
  8. package/dist/core/routingPriceAuthority.js +0 -0
  9. package/dist/core/routingPriceAuthority.js.map +1 -0
  10. package/dist/core/routingSpendView.d.ts +172 -0
  11. package/dist/core/routingSpendView.d.ts.map +1 -0
  12. package/dist/core/routingSpendView.js +215 -0
  13. package/dist/core/routingSpendView.js.map +1 -0
  14. package/dist/core/types.d.ts +25 -0
  15. package/dist/core/types.d.ts.map +1 -1
  16. package/dist/core/types.js.map +1 -1
  17. package/dist/monitoring/FeatureMetricsLedger.d.ts +74 -2
  18. package/dist/monitoring/FeatureMetricsLedger.d.ts.map +1 -1
  19. package/dist/monitoring/FeatureMetricsLedger.js +233 -8
  20. package/dist/monitoring/FeatureMetricsLedger.js.map +1 -1
  21. package/dist/scaffold/templates.d.ts.map +1 -1
  22. package/dist/scaffold/templates.js +2 -1
  23. package/dist/scaffold/templates.js.map +1 -1
  24. package/dist/server/AgentServer.d.ts +1 -0
  25. package/dist/server/AgentServer.d.ts.map +1 -1
  26. package/dist/server/AgentServer.js +35 -2
  27. package/dist/server/AgentServer.js.map +1 -1
  28. package/dist/server/CapabilityIndex.d.ts.map +1 -1
  29. package/dist/server/CapabilityIndex.js +12 -0
  30. package/dist/server/CapabilityIndex.js.map +1 -1
  31. package/dist/server/routes.d.ts +3 -0
  32. package/dist/server/routes.d.ts.map +1 -1
  33. package/dist/server/routes.js +46 -0
  34. package/dist/server/routes.js.map +1 -1
  35. package/package.json +1 -1
  36. package/scripts/routing-price-refresh.mjs +216 -0
  37. package/scripts/routing-prices.manifest.json +64 -0
  38. package/src/data/builtin-manifest.json +64 -64
  39. package/src/scaffold/templates/jobs/instar/routing-price-refresh.md +30 -0
  40. package/src/scaffold/templates.ts +2 -1
  41. package/upgrades/1.3.781.md +25 -0
  42. package/upgrades/side-effects/routing-spend-increment-a.md +84 -0
@@ -2752,6 +2752,7 @@
2752
2752
  <button class="tab" data-tab="resources" onclick="switchTab('resources')">Resource Usage</button>
2753
2753
  <button class="tab" data-tab="llm-activity" onclick="switchTab('llm-activity')">LLM Activity</button>
2754
2754
  <button class="tab" data-tab="routing-map" onclick="switchTab('routing-map')">Routing Map</button>
2755
+ <button class="tab" data-tab="spend" onclick="switchTab('spend')">Spend</button>
2755
2756
  <button class="tab" data-tab="threadline" onclick="switchTab('threadline')">Threadline</button>
2756
2757
  <button class="tab" data-tab="evidence" onclick="switchTab('evidence')">Evidence</button>
2757
2758
  <button class="tab" data-tab="process-health" onclick="switchTab('process-health')">Process Health</button>
@@ -3373,6 +3374,56 @@
3373
3374
  </div>
3374
3375
  </div>
3375
3376
 
3377
+ <!-- Spend tab — the read-only Routing Control Room spend/caps view (Increment A,
3378
+ docs/specs/routing-control-room-spend-alerts.md). Immutable token usage priced ON
3379
+ READ + every metered paid-door key with its caps and honest not-live/$0 state.
3380
+ Read-only: data from /routing-spend/summary + /routing-spend/caps. No money controls
3381
+ (caps adjust, go-live, alerts are later, dark increments). -->
3382
+ <div id="spendPanel" style="display:none;flex-direction:column;padding:20px;gap:16px;overflow-y:auto">
3383
+ <div style="display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap">
3384
+ <h2 style="margin:0">Spend</h2>
3385
+ <div style="display:flex;gap:8px;align-items:center">
3386
+ <select id="spendGrain" onchange="loadRoutingSpend()" style="padding:6px 8px">
3387
+ <option value="day" selected>Daily</option>
3388
+ <option value="hour">Hourly (30d)</option>
3389
+ <option value="month">Monthly</option>
3390
+ <option value="total">Total</option>
3391
+ </select>
3392
+ <button onclick="loadRoutingSpend()" style="padding:6px 12px">Refresh</button>
3393
+ </div>
3394
+ </div>
3395
+ <div style="font-size:12px;color:var(--text-dim);line-height:1.4">
3396
+ What the internal AI calls cost, and where the paid-door caps sit. The dollar figures are a
3397
+ <b>reporting</b> view — immutable token counts priced against a reviewed price list on read, so a
3398
+ price correction reflows automatically. <b>No paid door is live yet</b>, so metered spend is $0;
3399
+ subscription/CLI doors are <b>$0 (not per-token billed)</b>. This is read-only — money caps and the
3400
+ go-live control are a later increment.
3401
+ </div>
3402
+
3403
+ <!-- Headline totals -->
3404
+ <div id="spendHeadlineCard" style="border:1px solid var(--border);border-radius:8px;padding:16px">
3405
+ <div id="spendHeadlineBody" style="font-size:13px;overflow-x:auto">
3406
+ <div style="color:var(--text-dim)">Loading...</div>
3407
+ </div>
3408
+ </div>
3409
+
3410
+ <!-- Per door/model spend -->
3411
+ <div style="border:1px solid var(--border);border-radius:8px;padding:16px;display:flex;flex-direction:column;gap:8px">
3412
+ <div style="font-weight:600">By door &amp; model</div>
3413
+ <div id="spendRowsBody" style="font-size:13px;overflow-x:auto">
3414
+ <div style="color:var(--text-dim)">Loading...</div>
3415
+ </div>
3416
+ </div>
3417
+
3418
+ <!-- Paid-door caps -->
3419
+ <div style="border:1px solid var(--border);border-radius:8px;padding:16px;display:flex;flex-direction:column;gap:8px">
3420
+ <div style="font-weight:600">Paid-door caps</div>
3421
+ <div id="spendCapsBody" style="font-size:13px;overflow-x:auto">
3422
+ <div style="color:var(--text-dim)">Loading...</div>
3423
+ </div>
3424
+ </div>
3425
+ </div>
3426
+
3376
3427
  <!-- Evidence Tab (WikiClaim Phase 4) — per-entity evidence + reverse "what cites this?" view.
3377
3428
  Spec: docs/specs/OPENCLAW-IMPORT-WIKICLAIM-EVIDENCE-SPEC.md § Phase 4 (line 343). -->
3378
3429
  <!-- process-health tab -->
@@ -5046,6 +5097,12 @@
5046
5097
  display: ['flex'],
5047
5098
  onActivate: () => { if (typeof loadRoutingMap === 'function') loadRoutingMap(); },
5048
5099
  },
5100
+ {
5101
+ id: 'spend',
5102
+ panels: ['spendPanel'],
5103
+ display: ['flex'],
5104
+ onActivate: () => { if (typeof loadRoutingSpend === 'function') loadRoutingSpend(); },
5105
+ },
5049
5106
  {
5050
5107
  id: 'threadline',
5051
5108
  panels: ['threadlineTab'],
@@ -5810,6 +5867,110 @@
5810
5867
  }
5811
5868
  }
5812
5869
 
5870
+ // Routing Control Room — read-only spend/caps view (Increment A). Data from
5871
+ // /routing-spend/summary + /routing-spend/caps. Honest $0 / not-live-yet labelling.
5872
+ async function loadRoutingSpend() {
5873
+ const headEl = document.getElementById('spendHeadlineBody');
5874
+ const rowsEl = document.getElementById('spendRowsBody');
5875
+ const capsEl = document.getElementById('spendCapsBody');
5876
+ const grain = (document.getElementById('spendGrain') || {}).value || 'day';
5877
+ const usd = (n) => '$' + (Number(n) || 0).toFixed(4);
5878
+ const num = (n) => (Number(n) || 0).toLocaleString();
5879
+ const th = (t, right) => '<th style="padding:6px 8px;' + (right ? 'text-align:right' : 'text-align:left') + '">' + t + '</th>';
5880
+ const td = (v, right) => '<td style="padding:6px 8px;vertical-align:top;' + (right ? 'text-align:right' : '') + '">' + v + '</td>';
5881
+ try {
5882
+ const [summary, caps] = await Promise.all([
5883
+ apiFetch('/routing-spend/summary?grain=' + encodeURIComponent(grain)),
5884
+ apiFetch('/routing-spend/caps'),
5885
+ ]);
5886
+
5887
+ // Headline totals
5888
+ const t = summary.totals || {};
5889
+ const unpriced = (Number(t.unpricedTokensIn) || 0) + (Number(t.unpricedTokensOut) || 0);
5890
+ const stat = (label, val) => '<div style="min-width:120px"><div style="font-size:11px;color:var(--text-dim)">' + label + '</div><div style="font-size:18px;font-weight:600">' + val + '</div></div>';
5891
+ headEl.innerHTML =
5892
+ '<div style="display:flex;gap:20px;flex-wrap:wrap">' +
5893
+ stat('Gross', usd(t.grossUsd)) +
5894
+ stat('Net (of subsidy/credits)', usd(t.netUsd)) +
5895
+ stat('Committed (cap-enforced)', usd(t.committedUsd)) +
5896
+ stat('Tokens in', num(t.tokensIn)) +
5897
+ stat('Tokens out', num(t.tokensOut)) +
5898
+ (unpriced > 0 ? stat('Unpriced tokens', num(unpriced)) : '') +
5899
+ '</div>' +
5900
+ '<div style="font-size:11px;color:var(--text-dim);margin-top:10px;line-height:1.4">' +
5901
+ escapeHtml(String(summary.note || '')) + '<br>' +
5902
+ escapeHtml(String(summary.horizonNote || '')) +
5903
+ (summary.providerGroundingNote ? '<br>' + escapeHtml(String(summary.providerGroundingNote)) : '') +
5904
+ (summary.reportingBasis ? '<br>Basis: ' + escapeHtml(String(summary.reportingBasis.note || '')) : '') +
5905
+ '</div>';
5906
+
5907
+ // Per door/model rows
5908
+ const rows = summary.rows || [];
5909
+ if (rows.length === 0) {
5910
+ rowsEl.innerHTML = '<div style="color:var(--text-dim)">No internal-LLM usage recorded in this window yet.</div>';
5911
+ } else {
5912
+ rowsEl.innerHTML =
5913
+ '<table style="width:100%;border-collapse:collapse;font-size:12px;min-width:720px">' +
5914
+ '<thead><tr style="color:var(--text-dim)">' +
5915
+ th('Door') + th('Model') + th('Class') + th('Tokens in', true) + th('Tokens out', true) +
5916
+ th('Gross', true) + th('Net', true) + th('Price basis') +
5917
+ '</tr></thead><tbody>' +
5918
+ rows.map((r) => {
5919
+ const cls = r.doorClass === 'metered'
5920
+ ? 'metered' + (r.notLiveYet ? ' · not live' : '')
5921
+ : escapeHtml(String(r.doorClass));
5922
+ let basis;
5923
+ if (r.priceBasis === 'subscription-zero') basis = '<span style="color:var(--text-dim)">subscription — not per-token billed</span>';
5924
+ else if (r.priceBasis === 'no-matching-point') basis = '<span style="color:var(--red)">unpriced (no matching price)</span>';
5925
+ else basis = escapeHtml(String(r.priceBasis)) + (r.priceStale ? ' <span style="color:var(--red)">(stale)</span>' : '');
5926
+ const netCell = r.priceBasis === 'subscription-zero' ? '<span style="color:var(--text-dim)">$0 (subscription)</span>' : usd(r.netUsd);
5927
+ return '<tr style="border-top:1px solid var(--border)">' +
5928
+ td('<b>' + escapeHtml(String(r.door)) + '</b>') +
5929
+ td(escapeHtml(String(r.modelId))) +
5930
+ td(escapeHtml(cls)) +
5931
+ td(num(r.tokensIn), true) +
5932
+ td(num(r.tokensOut), true) +
5933
+ td(usd(r.grossUsd), true) +
5934
+ td(netCell, true) +
5935
+ td(basis) +
5936
+ '</tr>';
5937
+ }).join('') +
5938
+ '</tbody></table>';
5939
+ }
5940
+
5941
+ // Paid-door caps
5942
+ const keys = caps.keys || [];
5943
+ capsEl.innerHTML =
5944
+ '<div style="font-size:11px;color:var(--text-dim);margin-bottom:8px">' + escapeHtml(String(caps.note || '')) + '</div>' +
5945
+ '<table style="width:100%;border-collapse:collapse;font-size:12px;min-width:640px">' +
5946
+ '<thead><tr style="color:var(--text-dim)">' +
5947
+ th('Key') + th('Provider') + th('Door') + th('Daily cap', true) + th('Lifetime cap', true) +
5948
+ th('Committed', true) + th('Status') +
5949
+ '</tr></thead><tbody>' +
5950
+ keys.map((k) =>
5951
+ '<tr style="border-top:1px solid var(--border)">' +
5952
+ td('<b>' + escapeHtml(String(k.keyRef)) + '</b>') +
5953
+ td(escapeHtml(String(k.provider))) +
5954
+ td(escapeHtml(String(k.door))) +
5955
+ td(usd(k.dailyCapUsd), true) +
5956
+ td(usd(k.lifetimeCapUsd), true) +
5957
+ td(usd(k.committedDayUsd) + ' / ' + usd(k.committedLifetimeUsd), true) +
5958
+ td('<span style="color:var(--text-dim)">' + escapeHtml(String(k.goLiveState)) + (k.frozen ? ' · frozen' : '') + '</span>') +
5959
+ '</tr>').join('') +
5960
+ '</tbody></table>' +
5961
+ '<div style="font-size:11px;color:var(--text-dim);margin-top:8px">' + escapeHtml(String(caps.singleMachineNote || '')) + '</div>';
5962
+ } catch (err) {
5963
+ const m = err && err.message ? String(err.message) : String(err);
5964
+ if (/503|not enabled|unavailable/i.test(m)) {
5965
+ headEl.innerHTML = '<div style="color:var(--text-dim)">The spend view isn\'t enabled on this agent (it\'s a development-agent surface, dark on the fleet).</div>';
5966
+ } else {
5967
+ headEl.innerHTML = '<div style="color:var(--red)">Error: ' + escapeHtml(m) + '</div>';
5968
+ }
5969
+ rowsEl.innerHTML = '';
5970
+ capsEl.innerHTML = '';
5971
+ }
5972
+ }
5973
+
5813
5974
  async function loadResources() {
5814
5975
  const headlineEl = document.getElementById('resourcesHeadlineBody');
5815
5976
  const sourcesEl = document.getElementById('resourcesSourcesBody');
@@ -43,6 +43,13 @@ export declare function PLAYWRIGHT_PROFILE_REGISTRY_CLAUDEMD_SECTION(port: numbe
43
43
  * migrateClaudeMd (Migration Parity).
44
44
  */
45
45
  export declare function DOORWAY_REGISTRY_CLAUDEMD_SECTION(port: number): string;
46
+ /**
47
+ * CLAUDE.md awareness block for the Routing Control Room spend VIEW (Increment A — the
48
+ * read-only spend/caps surface). The unique heading substring `Routing Spend view` is the
49
+ * content-sniff marker used by migrateClaudeMd (Migration Parity). Read-only; the money
50
+ * controls (caps adjust, go-live, gate) are Increment B and NOT surfaced as capabilities.
51
+ */
52
+ export declare function ROUTING_SPEND_CLAUDEMD_SECTION(port: number): string;
46
53
  export interface MigrationResult {
47
54
  /** What was upgraded */
48
55
  upgraded: string[];
@@ -175,6 +182,20 @@ export declare function migrateConfigActionClaimSlackDevGate(config: Record<stri
175
182
  * reaches agents on a `schemaVersion` bump, not by writing a chain blob into every config.
176
183
  */
177
184
  export declare function migrateConfigNatureRoutingDark(config: Record<string, unknown>): boolean;
185
+ /**
186
+ * Routing Control Room spend VIEW (docs/specs/routing-control-room-spend-alerts.md,
187
+ * § Migration parity): SEED the top-level `routingSpend` block DARK on existing agents so
188
+ * the update path reaches deployed agents (not only new agents via init). Added ONLY when
189
+ * ABSENT — never clobbers an operator/agent that already configured it (existence-checked,
190
+ * idempotent).
191
+ *
192
+ * CRITICAL — `enabled` is DELIBERATELY OMITTED (the #1001 pattern): the route + the ledger
193
+ * construction resolve it via `resolveDevAgentGate(routingSpend.enabled, config)`, so a
194
+ * seeded `enabled:false` would force-dark even a development agent. Only the INERT retention
195
+ * knob is seeded; NO money-authority value ever lives in config (those are Increment B's
196
+ * PIN-only store).
197
+ */
198
+ export declare function migrateConfigRoutingSpendDark(config: Record<string, unknown>): boolean;
178
199
  /**
179
200
  * "Self-Unblock Before Escalating" (docs/specs/self-unblock-before-escalating.md):
180
201
  * the two nested blockerLedger sub-features — selfUnblockChecklist + durableVaultSession
@@ -1 +1 @@
1
- {"version":3,"file":"PostUpdateMigrator.d.ts","sourceRoot":"","sources":["../../src/core/PostUpdateMigrator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PostUpdateMigrator.d.ts","sourceRoot":"","sources":["../../src/core/PostUpdateMigrator.ts"],"names":[],"mappings":"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"}
@@ -162,6 +162,23 @@ A durable map from each of my **doorways** (the ways I reach LLMs — Claude Cod
162
162
  - **When to use** (PROACTIVE — this is the trigger): user asks "what models can I reach?" / "is my model map current?" / "which doorways are live?" → read \`GET /doorways\`, don't guess. A \`503 registry-unavailable-no-instar-source\` just means this is a pure end-user install with no source registry.
163
163
  `;
164
164
  }
165
+ /**
166
+ * CLAUDE.md awareness block for the Routing Control Room spend VIEW (Increment A — the
167
+ * read-only spend/caps surface). The unique heading substring `Routing Spend view` is the
168
+ * content-sniff marker used by migrateClaudeMd (Migration Parity). Read-only; the money
169
+ * controls (caps adjust, go-live, gate) are Increment B and NOT surfaced as capabilities.
170
+ */
171
+ export function ROUTING_SPEND_CLAUDEMD_SECTION(port) {
172
+ return `\n### Routing Spend view — what am I spending on routing? (\`GET /routing-spend/summary\`, \`GET /routing-spend/caps\`)
173
+
174
+ A READ-ONLY window on internal-LLM spend and the paid-door caps (docs/specs/routing-control-room-spend-alerts.md, Increment A). It turns the immutable token record (\`feature_metrics\`) into dollars by joining a reviewed price manifest ON READ — so "what did we spend, and where do the caps sit?" is a READ, not a guess. It gates NOTHING and books NOTHING (the money ledger + O(1) gate + PIN cap controls are Increment B, not built yet).
175
+ - Spend rollup (per door/model + totals): \`curl -H "Authorization: Bearer $AUTH" "http://localhost:${port}/routing-spend/summary?grain=day"\` → per-row \`{ door, modelId, doorClass, tokensIn/Out/Cached, grossUsd, subsidyUsd, netUsd, committedUsd, priceBasis, priceStale, notLiveYet, unpricedTokens* }\` + \`totals\` + \`reportingBasis\`. Grains: \`hour|day|month|total\`.
176
+ - Caps + paid-door status: \`curl -H "Authorization: Bearer $AUTH" http://localhost:${port}/routing-spend/caps\` → each metered key \`{ keyRef, provider, door, lifetimeCapUsd, dailyCapUsd, frozen, committedLifetimeUsd, committedDayUsd, goLiveState }\`. **Honest state:** no paid door is live yet, so committed spend is \`$0\` and \`goLiveState:"not-live"\` everywhere; subscription/CLI doors show \`$0 (subscription — not per-token billed)\`.
177
+ - Dashboard: the **Spend** tab renders both surfaces in plain language — point the user there rather than pasting curl output.
178
+ - Dev-gated: the routes are LIVE on a development agent, DARK on the fleet (\`503\` when off; \`routingSpend.enabled\` overrides the gate). Money caps + go-live + alerts are later, dark increments.
179
+ - **When to use** (PROACTIVE — this is the trigger): user asks "what am I spending on routing / the internal LLM calls?" / "where do my paid-door caps sit?" / "is any paid door live?" → read \`GET /routing-spend/summary\` + \`/caps\`, or send them to the Spend tab; do NOT guess.
180
+ `;
181
+ }
165
182
  /**
166
183
  * CLAUDE.md note for the second wedge-signature family (2026-06-05 EXO
167
184
  * incident) + the API fresh-respawn lever. Appended to NEW installs as part of
@@ -428,6 +445,28 @@ export function migrateConfigNatureRoutingDark(config) {
428
445
  };
429
446
  return true;
430
447
  }
448
+ /**
449
+ * Routing Control Room spend VIEW (docs/specs/routing-control-room-spend-alerts.md,
450
+ * § Migration parity): SEED the top-level `routingSpend` block DARK on existing agents so
451
+ * the update path reaches deployed agents (not only new agents via init). Added ONLY when
452
+ * ABSENT — never clobbers an operator/agent that already configured it (existence-checked,
453
+ * idempotent).
454
+ *
455
+ * CRITICAL — `enabled` is DELIBERATELY OMITTED (the #1001 pattern): the route + the ledger
456
+ * construction resolve it via `resolveDevAgentGate(routingSpend.enabled, config)`, so a
457
+ * seeded `enabled:false` would force-dark even a development agent. Only the INERT retention
458
+ * knob is seeded; NO money-authority value ever lives in config (those are Increment B's
459
+ * PIN-only store).
460
+ */
461
+ export function migrateConfigRoutingSpendDark(config) {
462
+ if (Object.prototype.hasOwnProperty.call(config, 'routingSpend'))
463
+ return false; // already present
464
+ config.routingSpend = {
465
+ // `enabled` OMITTED so resolveDevAgentGate decides (live on a dev agent, dark fleet).
466
+ tokenRollupRetentionDays: 400,
467
+ };
468
+ return true;
469
+ }
431
470
  /**
432
471
  * "Self-Unblock Before Escalating" (docs/specs/self-unblock-before-escalating.md):
433
472
  * the two nested blockerLedger sub-features — selfUnblockChecklist + durableVaultSession
@@ -4625,6 +4664,15 @@ setTimeout(() => process.exit(0), 2000);
4625
4664
  patched = true;
4626
4665
  result.upgraded.push('CLAUDE.md: added Doorway/Model Knowledge Registry section');
4627
4666
  }
4667
+ // Routing Spend view (routing-control-room-spend-alerts, Increment A) — Agent
4668
+ // Awareness Standard + Migration Parity: existing agents learn the read-only spend/caps
4669
+ // surfaces + the Spend tab via this appended section. Same text as generateClaudeMd.
4670
+ // Content-sniff on the unique heading keeps it idempotent.
4671
+ if (!content.includes('Routing Spend view')) {
4672
+ content += ROUTING_SPEND_CLAUDEMD_SECTION(port);
4673
+ patched = true;
4674
+ result.upgraded.push('CLAUDE.md: added Routing Spend view section');
4675
+ }
4628
4676
  // The Agent Carries the Loop (agent-owned-followthrough C1+C2) — agent
4629
4677
  // awareness for the owner⟂blockedOn commitment model + the probe + that the
4630
4678
  // user is never status-pinged for an agent-owned commitment. Content-sniffed.
@@ -8768,6 +8816,17 @@ Two layers keep my machine-to-machine \"ropes\" (Tailscale / LAN / Cloudflare) h
8768
8816
  else {
8769
8817
  result.skipped.push('config.json: sessions.natureRouting already present or no sessions block (no seed)');
8770
8818
  }
8819
+ // Routing Control Room spend VIEW (Increment A): SEED the top-level routingSpend block
8820
+ // DARK (tokenRollupRetentionDays only; `enabled` OMITTED so the developmentAgent gate
8821
+ // resolves it live-on-dev / dark-fleet). Existence-checked — never clobbers an operator
8822
+ // who already configured it.
8823
+ if (migrateConfigRoutingSpendDark(config)) {
8824
+ patched = true;
8825
+ result.upgraded.push('config.json: seeded dark routingSpend (tokenRollupRetentionDays:400; enabled omitted for the developmentAgent gate)');
8826
+ }
8827
+ else {
8828
+ result.skipped.push('config.json: routingSpend already present (no seed)');
8829
+ }
8771
8830
  // "Self-Unblock Before Escalating" (CMT-1519): the two nested blockerLedger
8772
8831
  // dev-gated sub-features (selfUnblockChecklist + durableVaultSession) OMIT
8773
8832
  // `enabled`. Strip a default-shaped `false` so the developmentAgent gate resolves