instar 1.3.784 → 1.3.786

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 (41) hide show
  1. package/dashboard/index.html +15 -2
  2. package/dist/core/routingSpendView.d.ts +36 -0
  3. package/dist/core/routingSpendView.d.ts.map +1 -1
  4. package/dist/core/routingSpendView.js +70 -0
  5. package/dist/core/routingSpendView.js.map +1 -1
  6. package/dist/core/types.d.ts +12 -0
  7. package/dist/core/types.d.ts.map +1 -1
  8. package/dist/core/types.js.map +1 -1
  9. package/dist/monitoring/FeatureMetricsLedger.d.ts +6 -0
  10. package/dist/monitoring/FeatureMetricsLedger.d.ts.map +1 -1
  11. package/dist/monitoring/FeatureMetricsLedger.js +7 -2
  12. package/dist/monitoring/FeatureMetricsLedger.js.map +1 -1
  13. package/dist/monitoring/ProviderCostReportStore.d.ts +138 -0
  14. package/dist/monitoring/ProviderCostReportStore.d.ts.map +1 -0
  15. package/dist/monitoring/ProviderCostReportStore.js +0 -0
  16. package/dist/monitoring/ProviderCostReportStore.js.map +1 -0
  17. package/dist/monitoring/ProviderReconciliationSweep.d.ts +72 -0
  18. package/dist/monitoring/ProviderReconciliationSweep.d.ts.map +1 -0
  19. package/dist/monitoring/ProviderReconciliationSweep.js +97 -0
  20. package/dist/monitoring/ProviderReconciliationSweep.js.map +1 -0
  21. package/dist/server/AgentServer.d.ts +3 -0
  22. package/dist/server/AgentServer.d.ts.map +1 -1
  23. package/dist/server/AgentServer.js +78 -0
  24. package/dist/server/AgentServer.js.map +1 -1
  25. package/dist/server/routes.d.ts +2 -0
  26. package/dist/server/routes.d.ts.map +1 -1
  27. package/dist/server/routes.js +42 -0
  28. package/dist/server/routes.js.map +1 -1
  29. package/dist/testing/selfActionRegistry.d.ts.map +1 -1
  30. package/dist/testing/selfActionRegistry.js +38 -0
  31. package/dist/testing/selfActionRegistry.js.map +1 -1
  32. package/package.json +1 -1
  33. package/scripts/lint-scrape-fixture-realness.js +17 -0
  34. package/scripts/routing-price-refresh.mjs +146 -4
  35. package/src/data/builtin-manifest.json +47 -47
  36. package/src/data/state-coherence-registry.json +1241 -1223
  37. package/src/scaffold/templates/jobs/instar/routing-price-web-verify.md +32 -0
  38. package/upgrades/1.3.785.md +56 -0
  39. package/upgrades/1.3.786.md +42 -0
  40. package/upgrades/side-effects/routing-spend-increment-1c.md +44 -0
  41. package/upgrades/side-effects/routing-spend-pr4-operator-additions.md +50 -0
@@ -5893,6 +5893,7 @@
5893
5893
  stat('Gross', usd(t.grossUsd)) +
5894
5894
  stat('Net (of subsidy/credits)', usd(t.netUsd)) +
5895
5895
  stat('Committed (cap-enforced)', usd(t.committedUsd)) +
5896
+ (typeof t.amortizedSubscriptionUsd === 'number' ? stat('Subscriptions (amortized)', '~' + usd(t.amortizedSubscriptionUsd)) : '') +
5896
5897
  stat('Tokens in', num(t.tokensIn)) +
5897
5898
  stat('Tokens out', num(t.tokensOut)) +
5898
5899
  (unpriced > 0 ? stat('Unpriced tokens', num(unpriced)) : '') +
@@ -5923,7 +5924,11 @@
5923
5924
  if (r.priceBasis === 'subscription-zero') basis = '<span style="color:var(--text-dim)">subscription — not per-token billed</span>';
5924
5925
  else if (r.priceBasis === 'no-matching-point') basis = '<span style="color:var(--red)">unpriced (no matching price)</span>';
5925
5926
  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
+ const netCell = r.priceBasis === 'subscription-zero'
5928
+ ? (typeof r.amortizedSubscriptionUsd === 'number'
5929
+ ? '<span title="' + escapeHtml(String(r.amortizationDerivation || '')) + '">~' + usd(r.amortizedSubscriptionUsd) + ' <span style="color:var(--text-dim);font-size:10px">amortized ⓘ</span></span>'
5930
+ : '<span style="color:var(--text-dim)">$0 (subscription)</span>')
5931
+ : usd(r.netUsd);
5927
5932
  return '<tr style="border-top:1px solid var(--border)">' +
5928
5933
  td('<b>' + escapeHtml(String(r.door)) + '</b>') +
5929
5934
  td(escapeHtml(String(r.modelId))) +
@@ -5935,7 +5940,15 @@
5935
5940
  td(basis) +
5936
5941
  '</tr>';
5937
5942
  }).join('') +
5938
- '</tbody></table>';
5943
+ '</tbody></table>' +
5944
+ (function () {
5945
+ // "Show the math": each door's amortization derivation, verbatim, once.
5946
+ const der = {}; rows.forEach((r) => { if (r.amortizationDerivation) der[r.door] = r.amortizationDerivation; });
5947
+ const lines = Object.values(der);
5948
+ return lines.length
5949
+ ? '<div style="font-size:11px;color:var(--text-dim);margin-top:8px;line-height:1.5"><b>Amortization math:</b><br>' + lines.map((l) => escapeHtml(String(l))).join('<br>') + '</div>'
5950
+ : '';
5951
+ })();
5939
5952
  }
5940
5953
 
5941
5954
  // Paid-door caps
@@ -44,6 +44,14 @@ export interface SpendSummaryRow {
44
44
  netUsd: number;
45
45
  /** The cap-enforced (committed-at-time-of-use) figure — 0 until Increment B's money ledger exists. */
46
46
  committedUsd: number;
47
+ /**
48
+ * Amortized subscription cost for a CLI door with an operator-declared monthly
49
+ * price (REPORTING-only; operator decision 2026-07-07). Null when undeclared
50
+ * or not a subscription door.
51
+ */
52
+ amortizedSubscriptionUsd: number | null;
53
+ /** The VISIBLE derivation of the amortized figure — the "show the math" contract. */
54
+ amortizationDerivation: string | null;
47
55
  priceBasis: PriceBasis;
48
56
  /** How the dollar figure was derived (Layer 1c). Always internal-derived / subscription / unpriced in Increment A. */
49
57
  costBasis: CostBasis;
@@ -68,6 +76,8 @@ export interface SpendSummaryTotals {
68
76
  committedUsd: number;
69
77
  unpricedTokensIn: number;
70
78
  unpricedTokensOut: number;
79
+ /** Amortized subscription total (counted ONCE per door) — null when none declared. */
80
+ amortizedSubscriptionUsd?: number | null;
71
81
  }
72
82
  export interface SpendSummary {
73
83
  grain: SpendGrain;
@@ -145,6 +155,32 @@ export interface BuildSpendSummaryOptions {
145
155
  tokenRollupRetentionDays: number;
146
156
  /** Machine whose overlay/credits produced the adjustments (pool-merge label). */
147
157
  adjustmentsSource?: string | null;
158
+ /**
159
+ * Layer 1c: superseded-resolved daily provider-cost aggregates. Where a
160
+ * (door, modelId) row has provider-reported dollars, the row PREFERS them
161
+ * (`costBasis: 'provider-reported'`, `providerReportedUsd` set) — the
162
+ * read-time expression of "ground on the provider". Absent/empty ⇒ every
163
+ * row stays internal-derived (a labeled, first-class basis).
164
+ */
165
+ providerDaily?: Array<{
166
+ day: string;
167
+ door: string;
168
+ modelId: string;
169
+ providerCostUsd: number;
170
+ reportedCalls: number;
171
+ }>;
172
+ /** Layer 1c: latest signed reconciliation driftPct per door (display-only). */
173
+ driftByDoor?: Record<string, number>;
174
+ /**
175
+ * Operator-declared subscription costs per CLI door (reporting-only). The
176
+ * composer amortizes by CALENDAR TIME over the door's ACTIVE days in the
177
+ * window and emits the full derivation string (operator decision 2026-07-07:
178
+ * "amortize but make sure we can show the math and how everything is derived").
179
+ */
180
+ subscriptions?: Record<string, {
181
+ monthlyUsd: number;
182
+ label?: string;
183
+ }>;
148
184
  }
149
185
  /**
150
186
  * Compose the priced spend summary. Buckets are priced AS-OF each bucket's start
@@ -1 +1 @@
1
- {"version":3,"file":"routingSpendView.d.ts","sourceRoot":"","sources":["../../src/core/routingSpendView.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"routingSpendView.d.ts","sourceRoot":"","sources":["../../src/core/routingSpendView.ts"],"names":[],"mappings":"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"}
@@ -84,6 +84,8 @@ function regrain(buckets, grain) {
84
84
  export function buildRoutingSpendSummary(opts) {
85
85
  const graded = regrain(opts.buckets, opts.grain);
86
86
  const rowAcc = new Map();
87
+ /** Distinct ACTIVE UTC days per door (for calendar-time subscription amortization). */
88
+ const activeDaysByDoor = new Map();
87
89
  for (const b of graded) {
88
90
  // For total-grain the as-of is "now" (a single collapsed bucket has no meaningful
89
91
  // per-day price regime); every other grain prices at its own bucket start.
@@ -108,6 +110,8 @@ export function buildRoutingSpendSummary(opts) {
108
110
  costBasis: costBasisFor(res.priceBasis),
109
111
  providerReportedUsd: null,
110
112
  providerDriftPct: null,
113
+ amortizedSubscriptionUsd: null,
114
+ amortizationDerivation: null,
111
115
  priceStale: res.priceStale,
112
116
  notLiveYet: METERED_ROUTING_DOORS.has(b.door),
113
117
  unpricedTokensIn: 0,
@@ -123,9 +127,66 @@ export function buildRoutingSpendSummary(opts) {
123
127
  // The row's basis reflects its latest bucket (buckets arrive day-ASC).
124
128
  row.priceBasis = res.priceBasis;
125
129
  row.costBasis = costBasisFor(res.priceBasis);
130
+ {
131
+ const days = activeDaysByDoor.get(b.door) ?? new Set();
132
+ days.add(new Date(b.bucketStartMs).toISOString().slice(0, 10));
133
+ activeDaysByDoor.set(b.door, days);
134
+ }
126
135
  row.priceStale = res.priceStale;
127
136
  rowAcc.set(key, row);
128
137
  }
138
+ // Amortized subscription display (operator decision 2026-07-07 — reporting-only,
139
+ // never a gate input): a CLI door with a declared monthly price is amortized by
140
+ // CALENDAR TIME over its ACTIVE days in the window, with the FULL derivation
141
+ // visible ("show the math and how everything is derived"). 30.4375 = the average
142
+ // Gregorian month (365.25 / 12) — named in the derivation, never hidden.
143
+ if (opts.subscriptions) {
144
+ const AVG_DAYS_PER_MONTH = 30.4375;
145
+ for (const row of rowAcc.values()) {
146
+ const sub = opts.subscriptions[row.door];
147
+ if (!sub || !(sub.monthlyUsd > 0) || row.doorClass !== 'cli')
148
+ continue;
149
+ const days = activeDaysByDoor.get(row.door)?.size ?? 0;
150
+ if (days === 0)
151
+ continue;
152
+ const perDay = sub.monthlyUsd / AVG_DAYS_PER_MONTH;
153
+ // A door's subscription is shared across its models: allocate the door's
154
+ // per-day cost across the door's rows proportionally by token volume so the
155
+ // door-level sum stays exact. Simpler and exact-at-door-level: attach the
156
+ // full door figure to each row but label it DOOR-LEVEL in the derivation,
157
+ // and count it ONCE per door in the totals.
158
+ const amortized = Math.round(perDay * days * 1e4) / 1e4;
159
+ row.amortizedSubscriptionUsd = amortized;
160
+ row.amortizationDerivation =
161
+ `${sub.label ?? row.door}: $${sub.monthlyUsd.toFixed(2)}/mo ÷ 30.4375 avg days/mo = ` +
162
+ `$${perDay.toFixed(4)}/day × ${days} active day(s) in this window = $${amortized.toFixed(4)} ` +
163
+ `(DOOR-level calendar-time allocation — subscriptions bill by time, not tokens; ` +
164
+ `shown once per door, token volume alongside for context; reporting-only, never cap-enforced).`;
165
+ }
166
+ }
167
+ // Layer 1c provider-preferred basis: sum the daily provider aggregates per
168
+ // (door, modelId) and prefer them where present (spec §Layer 2 read contract).
169
+ if (opts.providerDaily && opts.providerDaily.length > 0) {
170
+ const provByRow = new Map();
171
+ for (const p of opts.providerDaily) {
172
+ const k = `${p.door}|${p.modelId}`;
173
+ provByRow.set(k, (provByRow.get(k) ?? 0) + p.providerCostUsd);
174
+ }
175
+ for (const [k, usd] of provByRow) {
176
+ const row = rowAcc.get(k);
177
+ if (!row)
178
+ continue;
179
+ row.providerReportedUsd = Math.round(usd * 1e6) / 1e6;
180
+ row.costBasis = 'provider-reported';
181
+ }
182
+ }
183
+ if (opts.driftByDoor) {
184
+ for (const row of rowAcc.values()) {
185
+ const d = opts.driftByDoor[row.door];
186
+ if (typeof d === 'number' && Number.isFinite(d))
187
+ row.providerDriftPct = d;
188
+ }
189
+ }
129
190
  const rows = Array.from(rowAcc.values()).map((r) => {
130
191
  r.grossUsd = round6(r.grossUsd);
131
192
  r.subsidyUsd = round6(r.subsidyUsd);
@@ -152,6 +213,15 @@ export function buildRoutingSpendSummary(opts) {
152
213
  totals.subsidyUsd = round6(totals.subsidyUsd);
153
214
  totals.creditUsd = round6(creditTotal);
154
215
  totals.netUsd = round6(Math.max(0, totals.grossUsd - totals.subsidyUsd - totals.creditUsd));
216
+ {
217
+ // Amortized subscription total: each door's DOOR-LEVEL figure counted once.
218
+ const perDoor = new Map();
219
+ for (const r of rows) {
220
+ if (typeof r.amortizedSubscriptionUsd === 'number')
221
+ perDoor.set(r.door, r.amortizedSubscriptionUsd);
222
+ }
223
+ totals.amortizedSubscriptionUsd = perDoor.size > 0 ? round6([...perDoor.values()].reduce((a, b) => a + b, 0)) : null;
224
+ }
155
225
  const horizonNote = opts.grain === 'hour'
156
226
  ? 'Hourly detail is computed on read from raw rows within the short raw-retention window; hourly beyond that horizon is not offered.'
157
227
  : `Total is within the ${opts.tokenRollupRetentionDays}-day rollup horizon (daily/monthly/total survive; hourly does not).`;
@@ -1 +1 @@
1
- {"version":3,"file":"routingSpendView.js","sourceRoot":"","sources":["../../src/core/routingSpendView.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"routingSpendView.js","sourceRoot":"","sources":["../../src/core/routingSpendView.ts"],"names":[],"mappings":"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"}
@@ -3148,6 +3148,18 @@ export interface InstarConfig {
3148
3148
  };
3149
3149
  /** Provider-report store retention (days); default 400 (Layer 1c — capture lands with the reconciliation PR). */
3150
3150
  providerReportRetentionDays?: number;
3151
+ /**
3152
+ * Operator-declared subscription costs per CLI door (REPORTING-ONLY — never a
3153
+ * gate input; operator decision 2026-07-07: "amortize but show the math").
3154
+ * The spend view amortizes each declared monthly price over the reporting
3155
+ * window by CALENDAR TIME (subscriptions bill by time, not tokens) and shows
3156
+ * the full derivation next to the figure. Absent doors keep the honest
3157
+ * "$0 (subscription — not per-token billed)" display.
3158
+ */
3159
+ subscriptions?: Record<string, {
3160
+ monthlyUsd: number;
3161
+ label?: string;
3162
+ }>;
3151
3163
  /** Provider-reconciliation sweep config (Layer 1c — inert until the reconciliation PR). */
3152
3164
  reconciliation?: {
3153
3165
  sweepIntervalHours?: number;