instar 1.3.1053 → 1.3.1054
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/data/standards-registry.meta.json +1 -1
- package/dist/monitoring/BurnVerifier.d.ts +2 -2
- package/dist/monitoring/BurnVerifier.d.ts.map +1 -1
- package/dist/monitoring/BurnVerifier.js +18 -12
- package/dist/monitoring/BurnVerifier.js.map +1 -1
- package/package.json +1 -1
- package/src/data/builtin-manifest.json +2 -2
- package/src/data/standards-registry.meta.json +1 -1
- package/upgrades/1.3.1054.md +26 -0
- package/upgrades/eli16/burn-verifier-missing-baseline.md +26 -0
- package/upgrades/side-effects/burn-verifier-missing-baseline.md +114 -0
|
@@ -24,8 +24,8 @@ export interface VerificationResult {
|
|
|
24
24
|
attributionKey: string;
|
|
25
25
|
preThrottleRate: number;
|
|
26
26
|
postThrottleRate: number;
|
|
27
|
-
ratio: number;
|
|
28
|
-
successfullyThrottled: boolean;
|
|
27
|
+
ratio: number | null;
|
|
28
|
+
successfullyThrottled: boolean | null;
|
|
29
29
|
verifiedAt: string;
|
|
30
30
|
}
|
|
31
31
|
export interface BurnVerifierDeps {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BurnVerifier.d.ts","sourceRoot":"","sources":["../../src/monitoring/BurnVerifier.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAMjE,MAAM,WAAW,kBAAkB;IACjC,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"BurnVerifier.d.ts","sourceRoot":"","sources":["../../src/monitoring/BurnVerifier.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAMjE,MAAM,WAAW,kBAAkB;IACjC,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,qBAAqB,EAAE,OAAO,GAAG,IAAI,CAAC;IACtC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC;IAC9C,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE;QACP,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,IAAI,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACtD;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA6B;IACpD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAwE;IACrG,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;IACnC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA4C;gBAEzD,IAAI,EAAE,gBAAgB;IAgBlC;;;;OAIG;IACH,oBAAoB,CAAC,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,gBAAgB,GAAG,IAAI;IAc5E;;;OAGG;IACH,eAAe,CAAC,cAAc,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,kBAAkB;IAuBpF,OAAO,CAAC,YAAY;IAmBpB,OAAO,CAAC,YAAY;CAUrB;AAID,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM,CAUnE"}
|
|
@@ -73,8 +73,10 @@ export class BurnVerifier {
|
|
|
73
73
|
const row = rows.find((r) => r.attributionKey === attributionKey);
|
|
74
74
|
const postThrottleTokens = row ? (row.freshTokens ?? row.totalTokens) : 0;
|
|
75
75
|
const postThrottleRate = postThrottleTokens * (60 * 60 * 1000 / this.sampleWindowMs);
|
|
76
|
-
const ratio = preThrottleRate > 0
|
|
77
|
-
|
|
76
|
+
const ratio = Number.isFinite(preThrottleRate) && preThrottleRate > 0 && Number.isFinite(postThrottleRate)
|
|
77
|
+
? postThrottleRate / preThrottleRate
|
|
78
|
+
: null;
|
|
79
|
+
const successfullyThrottled = ratio === null ? null : ratio < this.successRatio;
|
|
78
80
|
const result = {
|
|
79
81
|
attributionKey,
|
|
80
82
|
preThrottleRate,
|
|
@@ -88,16 +90,20 @@ export class BurnVerifier {
|
|
|
88
90
|
}
|
|
89
91
|
fireFollowUp(r) {
|
|
90
92
|
const friendlyName = humanize(r.attributionKey);
|
|
91
|
-
const text = r.successfullyThrottled
|
|
92
|
-
? `
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
`
|
|
93
|
+
const text = r.ratio === null || r.successfullyThrottled === null
|
|
94
|
+
? `Slowdown verification was inconclusive. I tried to verify ${friendlyName}, but the ` +
|
|
95
|
+
`before-slowdown rate was unavailable or zero. The current sample is ${formatRate(r.postThrottleRate)}, ` +
|
|
96
|
+
`but there is no measured baseline for a before-and-after comparison.`
|
|
97
|
+
: r.successfullyThrottled
|
|
98
|
+
? `Caught and contained. ${friendlyName}: before the slowdown it was running at about ` +
|
|
99
|
+
`${formatRate(r.preThrottleRate)}; now it is running at about ${formatRate(r.postThrottleRate)} ` +
|
|
100
|
+
`— a ${formatReduction(r.ratio)} drop. The throttle will lift on its own at the configured time, ` +
|
|
101
|
+
`or you can release it sooner from the original alert.`
|
|
102
|
+
: `Slowdown did not take effect. I tried to slow ${friendlyName} down, but the rate did ` +
|
|
103
|
+
`not drop (was ${formatRate(r.preThrottleRate)}, still at ${formatRate(r.postThrottleRate)}). ` +
|
|
104
|
+
`This usually means one of two things: the attribution is pointing at the wrong code path ` +
|
|
105
|
+
`and the real offender is elsewhere, or the offending path does not honour the slowdown. ` +
|
|
106
|
+
`You may need to look at this one manually.`;
|
|
101
107
|
this.fireTelegram(text);
|
|
102
108
|
}
|
|
103
109
|
fireTelegram(text) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BurnVerifier.js","sourceRoot":"","sources":["../../src/monitoring/BurnVerifier.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"BurnVerifier.js","sourceRoot":"","sources":["../../src/monitoring/BurnVerifier.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "./builtin-manifest.schema.json",
|
|
3
3
|
"schemaVersion": 1,
|
|
4
|
-
"generatedAt": "2026-07-29T11:
|
|
5
|
-
"instarVersion": "1.3.
|
|
4
|
+
"generatedAt": "2026-07-29T11:40:48.373Z",
|
|
5
|
+
"instarVersion": "1.3.1054",
|
|
6
6
|
"entryCount": 202,
|
|
7
7
|
"entries": {
|
|
8
8
|
"hook:session-start": {
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Upgrade Guide — vNEXT
|
|
2
|
+
|
|
3
|
+
<!-- assembled-by: assemble-next-md -->
|
|
4
|
+
<!-- bump: patch -->
|
|
5
|
+
|
|
6
|
+
## What Changed
|
|
7
|
+
|
|
8
|
+
Post-throttle verification now reports a missing or zero pre-throttle rate as
|
|
9
|
+
inconclusive. It returns nullable ratio and success fields instead of treating
|
|
10
|
+
an empty denominator as a perfect reduction.
|
|
11
|
+
|
|
12
|
+
## What to Tell Your User
|
|
13
|
+
|
|
14
|
+
Instar no longer says a slowdown was successful when it has no measured
|
|
15
|
+
before-rate to compare with the current sample.
|
|
16
|
+
|
|
17
|
+
## Summary of New Capabilities
|
|
18
|
+
|
|
19
|
+
- Explicit insufficient-evidence state for post-throttle verification.
|
|
20
|
+
|
|
21
|
+
## Evidence
|
|
22
|
+
|
|
23
|
+
- The regression enters the zero-before-rate state and asserts a null ratio, a
|
|
24
|
+
null success result, and an inconclusive follow-up message.
|
|
25
|
+
- Restoring the fabricated zero ratio makes the regression fail.
|
|
26
|
+
- Eleven focused tests and the full repository lint pass.
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Slowdown verification now distinguishes success from missing evidence
|
|
2
|
+
|
|
3
|
+
After Instar installs a token-use slowdown, it compares the rate from before the
|
|
4
|
+
slowdown with a fresh rate several minutes later. A real reduction can support
|
|
5
|
+
the “Caught and contained” follow-up, while a rate that did not fall triggers a
|
|
6
|
+
warning that the slowdown may not be connected to the offending path.
|
|
7
|
+
|
|
8
|
+
The old calculation had a third state that it forced into the success path. If
|
|
9
|
+
the before-rate was missing or zero, there was no denominator for the
|
|
10
|
+
comparison. The code substituted a ratio of zero, interpreted that as a
|
|
11
|
+
one-hundred-percent reduction, and could send a reassuring message saying a
|
|
12
|
+
component had been contained while both displayed rates were zero. No
|
|
13
|
+
before-and-after claim was actually measurable.
|
|
14
|
+
|
|
15
|
+
Verification results now represent that third state directly. Both the ratio
|
|
16
|
+
and `successfullyThrottled` are null when the before-rate is unavailable, zero,
|
|
17
|
+
or otherwise invalid. The follow-up says verification was inconclusive, gives
|
|
18
|
+
the current sample, and explains that there is no measured baseline. Positive
|
|
19
|
+
finite baselines continue through the existing success and failure paths
|
|
20
|
+
unchanged.
|
|
21
|
+
|
|
22
|
+
The regression enters the broken state with a zero before-rate and a zero
|
|
23
|
+
current sample. It asserts the two null fields, the explanatory message, and
|
|
24
|
+
the absence of “Caught and contained.” Restoring the old zero fallback makes
|
|
25
|
+
the test fail. This changes no throttle, threshold, timer, or release behavior;
|
|
26
|
+
it only prevents missing evidence from becoming false reassurance.
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
# Side-Effects Review — Burn-verifier missing baseline
|
|
2
|
+
|
|
3
|
+
**Version / slug:** `burn-verifier-missing-baseline`
|
|
4
|
+
**Date:** `2026-07-29`
|
|
5
|
+
**Author:** `instar-codey`
|
|
6
|
+
**Second-pass reviewer:** `not required`
|
|
7
|
+
|
|
8
|
+
## Summary of the change
|
|
9
|
+
|
|
10
|
+
`BurnVerifier.runVerification()` now returns `ratio: null` and
|
|
11
|
+
`successfullyThrottled: null` when no finite positive pre-throttle rate exists.
|
|
12
|
+
Its Telegram follow-up names the result as inconclusive instead of routing the
|
|
13
|
+
fabricated zero ratio through the successful “Caught and contained” message.
|
|
14
|
+
|
|
15
|
+
## Decision-point inventory
|
|
16
|
+
|
|
17
|
+
- Verification evidence sufficiency — modified — a finite positive before-rate
|
|
18
|
+
and a finite current rate are required for a ratio and success decision.
|
|
19
|
+
- Throttle success threshold — passed through — measured ratios are still
|
|
20
|
+
compared with the existing configured `successRatio`.
|
|
21
|
+
- Throttle installation and release — passed through — no actuation changes.
|
|
22
|
+
|
|
23
|
+
## 1. Over-block
|
|
24
|
+
|
|
25
|
+
No action is blocked. The new branch affects only a read-only verification
|
|
26
|
+
result and its follow-up message. A real zero before-rate cannot support a
|
|
27
|
+
percentage reduction because it has no usable denominator.
|
|
28
|
+
|
|
29
|
+
## 2. Under-block
|
|
30
|
+
|
|
31
|
+
The verifier still accepts every finite positive before-rate, including small
|
|
32
|
+
values, and applies the configured threshold exactly as before. It does not
|
|
33
|
+
attempt to infer a missing baseline from unrelated telemetry.
|
|
34
|
+
|
|
35
|
+
## 3. Level-of-abstraction fit
|
|
36
|
+
|
|
37
|
+
Evidence sufficiency belongs beside the ratio calculation that consumes the
|
|
38
|
+
baseline. The follow-up renderer then maps the nullable result to a third,
|
|
39
|
+
explicit message. This keeps the telemetry reader, throttle runbook, and
|
|
40
|
+
delivery path unchanged.
|
|
41
|
+
|
|
42
|
+
## 4. Signal vs authority compliance
|
|
43
|
+
|
|
44
|
+
**Required reference:** [docs/signal-vs-authority.md](../../docs/signal-vs-authority.md)
|
|
45
|
+
|
|
46
|
+
- [x] No — this change has no block/allow surface.
|
|
47
|
+
|
|
48
|
+
The verifier is a post-action signal. It reports whether the observed rates
|
|
49
|
+
support a success conclusion, but it does not install, retain, release, or
|
|
50
|
+
override a throttle.
|
|
51
|
+
|
|
52
|
+
## 4b. Judgment-point check
|
|
53
|
+
|
|
54
|
+
No heuristic judgment is added. A ratio either has a finite positive
|
|
55
|
+
denominator or it is not measurable. Existing measured results retain their
|
|
56
|
+
configured threshold.
|
|
57
|
+
|
|
58
|
+
## 5. Interactions
|
|
59
|
+
|
|
60
|
+
- **Shadowing:** the inconclusive branch is checked before the existing success
|
|
61
|
+
and failure messages, so unknown evidence cannot masquerade as either.
|
|
62
|
+
- **Double-fire:** one verification still produces exactly one follow-up.
|
|
63
|
+
- **Races:** timers, ledger reads, and shared state are unchanged.
|
|
64
|
+
- **Feedback loops:** the follow-up is informational and does not feed back into
|
|
65
|
+
throttle authority.
|
|
66
|
+
|
|
67
|
+
## 6. External surfaces
|
|
68
|
+
|
|
69
|
+
The result interface widens `ratio` and `successfullyThrottled` to nullable
|
|
70
|
+
fields. Repository search finds no production consumer outside `BurnVerifier`;
|
|
71
|
+
the live external effect is the Telegram follow-up. The new user-visible lead
|
|
72
|
+
is “Slowdown verification was inconclusive.” Existing success and failure
|
|
73
|
+
messages are unchanged for measurable inputs.
|
|
74
|
+
|
|
75
|
+
## 6b. Operator-surface quality
|
|
76
|
+
|
|
77
|
+
The new message states what could not be measured, includes the current sample,
|
|
78
|
+
and avoids a recommendation or success claim. It is sent on the same topic and
|
|
79
|
+
cadence as the existing verifier follow-up.
|
|
80
|
+
|
|
81
|
+
## 7. Multi-machine posture
|
|
82
|
+
|
|
83
|
+
**Machine-local by design.** Token-ledger telemetry and throttles belong to the
|
|
84
|
+
agent host that observed the burn. No replicated state, URL, or cross-machine
|
|
85
|
+
authority changes.
|
|
86
|
+
|
|
87
|
+
## 8. Rollback cost
|
|
88
|
+
|
|
89
|
+
Pure code rollback: restore the zero ratio and boolean-only result fields.
|
|
90
|
+
There is no persistent-state migration. Rollback would reintroduce false
|
|
91
|
+
success messages for missing baselines.
|
|
92
|
+
|
|
93
|
+
## Conclusion
|
|
94
|
+
|
|
95
|
+
Clear to ship as a small corrective PR. It adds the missing third outcome to a
|
|
96
|
+
read-only verification signal and does not change throttle behavior.
|
|
97
|
+
|
|
98
|
+
## Second-pass review
|
|
99
|
+
|
|
100
|
+
**Reviewer:** not required
|
|
101
|
+
**Independent read of the artifact:** Not required; the implementation changes
|
|
102
|
+
only a nullable metric result and its informational renderer. It does not alter
|
|
103
|
+
an action, threshold, lifecycle controller, or authority boundary.
|
|
104
|
+
|
|
105
|
+
## Evidence pointers
|
|
106
|
+
|
|
107
|
+
- `tests/unit/burn-detection-phase-6.test.ts`
|
|
108
|
+
- Eleven focused tests pass.
|
|
109
|
+
- Mutation proof: restoring ratio zero makes the new null assertion fail.
|
|
110
|
+
- Full repository lint, including TypeScript, passes.
|
|
111
|
+
|
|
112
|
+
## Class-Closure Declaration
|
|
113
|
+
|
|
114
|
+
No agent-authored-artifact defect — not applicable.
|