instar 1.3.1003 → 1.3.1004

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.
@@ -0,0 +1,72 @@
1
+ # Side-effects review — tier classifier no longer treats a .config FILENAME as a config surface
2
+
3
+ **Change:** removes the `\.config\b` alternative from `CONFIG_SURFACE_HINT` in
4
+ `scripts/lib/classify-tier.mjs`. That alternative matched a filename REFERENCE, so a diff that merely
5
+ read `*.config.ts` satisfied the config-surface gate and, combined with any object literal, raised the
6
+ risk floor for "new config key added".
7
+
8
+ **Decision point touched?** Yes — the risk floor of the instar-dev tier gate. This LOWERS the floor in
9
+ one specific false-positive case, so it is a loosening and reviewed as such.
10
+
11
+ ---
12
+
13
+ ## 1. Over-block
14
+
15
+ This change exists to remove one. The over-block was concrete: a read-only developer script that adds
16
+ no config key had its floor raised to 2 purely for naming `vitest.push.config.ts`.
17
+
18
+ ## 2. Under-block
19
+
20
+ The real risk of the change, stated plainly: narrowing a heuristic can blind it. If a genuine
21
+ config-key addition mentions ONLY a `*.config.ts` filename and none of the remaining anchors
22
+ (`ConfigDefaults`, `config.json`, `defaultConfig`, `InstarConfig`, `configSchema`), its floor will no
23
+ longer rise.
24
+
25
+ Bounded two ways. The remaining anchors cover the actual config surfaces in this repo — a diff adding
26
+ a real key names the module, the file, or the type. And a test now iterates EVERY remaining anchor and
27
+ asserts the floor still rises, so a future narrowing that blinds the check fails.
28
+
29
+ Residual: this is a heuristic over diff text and always was. It deters accidental omission; it is not
30
+ a boundary against a determined author. Unchanged by this.
31
+
32
+ ## 3. Level-of-abstraction fit
33
+
34
+ Correct — the defect is in the hint regex and the fix is in the hint regex. A broader alternative
35
+ (requiring the anchor on the SAME line as the key) was considered and rejected as a larger behavioural
36
+ change than the evidence supports: one bad alternative was identified precisely, so one alternative is
37
+ removed.
38
+
39
+ ## 4. Signal vs authority compliance
40
+
41
+ The classifier is a SIGNAL that informs a declared tier; the agent holds the authority and the
42
+ declaration is audited. This change makes the signal more accurate without altering who decides. Per
43
+ `docs/signal-vs-authority.md` that is the intended direction.
44
+
45
+ ## 5. Interactions
46
+
47
+ `CONFIG_SURFACE_HINT` is used only to gate the `key: value` pattern inside the new-capability check.
48
+ No other risk signal is affected; the `export class` and router patterns are untouched. All 47
49
+ pre-existing classifier tests pass unchanged, plus 2 new ones.
50
+
51
+ Changes to this file alter tier decisions for FUTURE commits only. Nothing recorded in past decision
52
+ audits is rewritten.
53
+
54
+ ## 6. External surfaces
55
+
56
+ None. Development-time classifier; no endpoint, no config key, no runtime behaviour, not user-facing.
57
+
58
+ ## 7. Multi-machine posture
59
+
60
+ Not applicable: a pure function over diff text, identical on every checkout, with no state, no
61
+ persistence, and nothing to replicate or reconcile.
62
+
63
+ ## 8. Rollback cost
64
+
65
+ Trivial — restore the alternative. The regression test would then fail, which is the correct signal
66
+ that the rollback reintroduces the false positive rather than a silent revert.
67
+
68
+ ## Disclosure
69
+
70
+ I hit this false positive myself and declared Tier 1 under the raised floor without reading it first.
71
+ That declaration and its deliberate re-declaration are both in the decision audit. This change fixes
72
+ the classifier; it does not excuse the declaration.