instar 1.3.1004 → 1.3.1005
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/messaging/imessage/IMessageAdapter.d.ts +21 -0
- package/dist/messaging/imessage/IMessageAdapter.d.ts.map +1 -1
- package/dist/messaging/imessage/IMessageAdapter.js +25 -1
- package/dist/messaging/imessage/IMessageAdapter.js.map +1 -1
- package/package.json +1 -1
- package/scripts/recheck-parked-tests.mjs +185 -0
- package/src/data/builtin-manifest.json +2 -2
- package/upgrades/1.3.1005.md +235 -0
- package/upgrades/side-effects/imessage-connected-at.md +62 -0
- package/upgrades/side-effects/parked-test-recheck.md +71 -0
- package/upgrades/side-effects/selfdisable-escalation.md +78 -0
- package/upgrades/1.3.1004.md +0 -111
|
@@ -52,6 +52,27 @@ export declare class IMessageAdapter implements MessagingAdapter {
|
|
|
52
52
|
private auditLog;
|
|
53
53
|
private messageHandler;
|
|
54
54
|
private started;
|
|
55
|
+
/**
|
|
56
|
+
* The instant the adapter actually connected, or null when it is not connected.
|
|
57
|
+
*
|
|
58
|
+
* Previously `getConnectionInfo()` computed this inline as
|
|
59
|
+
* `started ? new Date().toISOString() : undefined` — i.e. it returned the moment the CALLER
|
|
60
|
+
* ASKED, never the moment the connection was established. Asking three times produced three
|
|
61
|
+
* different "connection times", all of them wrong, and each looked more precise than the state
|
|
62
|
+
* field beside it. A fabricated timestamp is worse than an absent one: it invites arithmetic
|
|
63
|
+
* (uptime, staleness) on a number that means nothing.
|
|
64
|
+
*
|
|
65
|
+
* CONTRACT-EVIDENCE: EXEMPT — this change touches no API-contract surface. It adds a private
|
|
66
|
+
* field, assigns it inside the existing start()/stop() paths, and reads it in
|
|
67
|
+
* getConnectionInfo(). Every call into `this.backend` (connect, disconnect, send, poll) is
|
|
68
|
+
* byte-for-byte unchanged, and no request/response shape crosses the Messages boundary. The
|
|
69
|
+
* decisive test for the exemption is whether a live-API contract run could confirm or falsify
|
|
70
|
+
* the change: it could not — correctness here depends entirely on WHEN a local field is
|
|
71
|
+
* assigned, which a real Messages account cannot observe or contradict. The marker covers this
|
|
72
|
+
* specific edit only; the next change to this file's API surface must remove it and run
|
|
73
|
+
* `npm run test:contract` for real.
|
|
74
|
+
*/
|
|
75
|
+
private connectedAtIso;
|
|
55
76
|
private authorizedContacts;
|
|
56
77
|
private receivedMessageIds;
|
|
57
78
|
private lastInboundFrom;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IMessageAdapter.d.ts","sourceRoot":"","sources":["../../../src/messaging/imessage/IMessageAdapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAOH,OAAO,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtF,OAAO,EAAE,aAAa,EAAE,KAAK,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAC1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAEnE,OAAO,EAAiB,KAAK,UAAU,EAAE,KAAK,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAItG,OAAO,KAAK,EAIV,cAAc,EACf,MAAM,YAAY,CAAC;AAYpB,qBAAa,eAAgB,YAAW,gBAAgB;IACtD,QAAQ,CAAC,QAAQ,cAAc;IAG/B,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAU;IACtC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAU;IAC/C,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAS;IAC7C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAoB;IAChD,OAAO,CAAC,SAAS,CAAqB;IAGtC,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,MAAM,CAAgB;IAC9B,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAC;IACrC,OAAO,CAAC,QAAQ,CAAyB;IACzC,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,WAAW,CAAsB;IACzC,OAAO,CAAC,QAAQ,CAAmB;IAGnC,OAAO,CAAC,cAAc,CAAsD;IAC5E,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,kBAAkB,CAAc;IACxC,OAAO,CAAC,kBAAkB,CAAqB;IAC/C,OAAO,CAAC,eAAe,CAA6B;IACpD,OAAO,CAAC,iBAAiB,CAAgC;IACzD,OAAO,CAAC,WAAW,CAA6B;IAGhD,eAAe,EAAE,CAAC,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAC,GAAG,IAAI,CAAQ;IAC3D,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,IAAI,CAAQ;gBAExF,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,MAAM;IAkFvD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"IMessageAdapter.d.ts","sourceRoot":"","sources":["../../../src/messaging/imessage/IMessageAdapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -64,6 +64,27 @@ export class IMessageAdapter {
|
|
|
64
64
|
// State
|
|
65
65
|
messageHandler = null;
|
|
66
66
|
started = false;
|
|
67
|
+
/**
|
|
68
|
+
* The instant the adapter actually connected, or null when it is not connected.
|
|
69
|
+
*
|
|
70
|
+
* Previously `getConnectionInfo()` computed this inline as
|
|
71
|
+
* `started ? new Date().toISOString() : undefined` — i.e. it returned the moment the CALLER
|
|
72
|
+
* ASKED, never the moment the connection was established. Asking three times produced three
|
|
73
|
+
* different "connection times", all of them wrong, and each looked more precise than the state
|
|
74
|
+
* field beside it. A fabricated timestamp is worse than an absent one: it invites arithmetic
|
|
75
|
+
* (uptime, staleness) on a number that means nothing.
|
|
76
|
+
*
|
|
77
|
+
* CONTRACT-EVIDENCE: EXEMPT — this change touches no API-contract surface. It adds a private
|
|
78
|
+
* field, assigns it inside the existing start()/stop() paths, and reads it in
|
|
79
|
+
* getConnectionInfo(). Every call into `this.backend` (connect, disconnect, send, poll) is
|
|
80
|
+
* byte-for-byte unchanged, and no request/response shape crosses the Messages boundary. The
|
|
81
|
+
* decisive test for the exemption is whether a live-API contract run could confirm or falsify
|
|
82
|
+
* the change: it could not — correctness here depends entirely on WHEN a local field is
|
|
83
|
+
* assigned, which a real Messages account cannot observe or contradict. The marker covers this
|
|
84
|
+
* specific edit only; the next change to this file's API surface must remove it and run
|
|
85
|
+
* `npm run test:contract` for real.
|
|
86
|
+
*/
|
|
87
|
+
connectedAtIso = null;
|
|
67
88
|
authorizedContacts; // normalized E.164
|
|
68
89
|
receivedMessageIds = new Set();
|
|
69
90
|
lastInboundFrom = new Map(); // normalized contact → timestamp
|
|
@@ -145,12 +166,15 @@ export class IMessageAdapter {
|
|
|
145
166
|
this._logStartupWarnings();
|
|
146
167
|
await this.backend.connect();
|
|
147
168
|
this.started = true;
|
|
169
|
+
// Recorded HERE, once, at the moment it is true — not synthesised later on read.
|
|
170
|
+
this.connectedAtIso = new Date().toISOString();
|
|
148
171
|
// Start stall detection
|
|
149
172
|
this.stallDetector.start();
|
|
150
173
|
console.log('[imessage] Adapter started (backend: native)');
|
|
151
174
|
}
|
|
152
175
|
async stop() {
|
|
153
176
|
this.started = false;
|
|
177
|
+
this.connectedAtIso = null;
|
|
154
178
|
this.stallDetector.stop();
|
|
155
179
|
await this.backend.disconnect();
|
|
156
180
|
console.log('[imessage] Adapter stopped');
|
|
@@ -206,7 +230,7 @@ export class IMessageAdapter {
|
|
|
206
230
|
getConnectionInfo() {
|
|
207
231
|
return {
|
|
208
232
|
state: this.backend.state,
|
|
209
|
-
connectedAt: this.
|
|
233
|
+
connectedAt: this.connectedAtIso ?? undefined,
|
|
210
234
|
lastError: undefined,
|
|
211
235
|
reconnectAttempts: 0,
|
|
212
236
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IMessageAdapter.js","sourceRoot":"","sources":["../../../src/messaging/imessage/IMessageAdapter.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"IMessageAdapter.js","sourceRoot":"","sources":["../../../src/messaging/imessage/IMessageAdapter.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* recheck-parked-tests.mjs — the EXIT PATH for `FLAKY_TESTS`.
|
|
4
|
+
*
|
|
5
|
+
* THE DEFECT THIS CLOSES. `vitest.push.config.ts`'s `FLAKY_TESTS` array excludes tests from the
|
|
6
|
+
* push/CI gate. Adding an entry costs nothing — the file is classified as ordinary config, so
|
|
7
|
+
* removing a guard from CI needs no ELI16, no side-effects review, no trace. And NOTHING ever
|
|
8
|
+
* re-checks whether a parked test could come back. Entry is free; exit is impossible. The ungated
|
|
9
|
+
* surface can therefore only grow.
|
|
10
|
+
*
|
|
11
|
+
* That is not theoretical. Measured on 2026-07-27, three consecutive runs each:
|
|
12
|
+
*
|
|
13
|
+
* notification-spam-prevention.test.ts parked "assertion mismatch, emoji vs keyword" 15/15/15 PASS
|
|
14
|
+
* message-formatter.test.ts parked "expects /msg reply format" 17/17/17 PASS
|
|
15
|
+
* ReflectionConsolidator.test.ts parked "pattern detection non-deterministic" 16/16/16 PASS
|
|
16
|
+
*
|
|
17
|
+
* All three were repaired at some point and never re-armed. Note the INVERSE of the lesson already
|
|
18
|
+
* recorded in that same file: the 2026-06-05 pair ROTTED while parked; these were FIXED while parked.
|
|
19
|
+
* Nobody noticed either way, because nothing looks. A fourth entry,
|
|
20
|
+
* `tests/unit/slack-stall-active-gate.test.ts`, does not exist on disk at all — an exclusion that
|
|
21
|
+
* excludes nothing.
|
|
22
|
+
*
|
|
23
|
+
* ── WHAT THIS IS, AND WHAT IT DELIBERATELY IS NOT ────────────────────────────────────────────────
|
|
24
|
+
*
|
|
25
|
+
* It is a SIGNAL. It reports which parked entries now pass deterministically and which point at
|
|
26
|
+
* missing files. It NEVER re-arms anything and never edits the config.
|
|
27
|
+
*
|
|
28
|
+
* That restraint is the design, not timidity: re-arming is a JUDGEMENT about whether the reason for
|
|
29
|
+
* parking still holds. "Passes on this machine" does not establish "passes in CI" — a third of the
|
|
30
|
+
* list is parked for a native-binding failure whose stated scope is literally "on this machine", and
|
|
31
|
+
* CI is a different environment where it may genuinely fail. A tool that auto-re-armed on a local
|
|
32
|
+
* green would be exactly the confident-wrong-answer this whole area is about.
|
|
33
|
+
*
|
|
34
|
+
* ── WHY IT IS CHEAP ENOUGH TO ACTUALLY RUN ──────────────────────────────────────────────────────
|
|
35
|
+
*
|
|
36
|
+
* A tool nobody runs is a decoration, and running ~90 test files repeatedly is not something anyone
|
|
37
|
+
* will do. So the default is bounded: the missing-file scan is free (no test execution at all), and
|
|
38
|
+
* only a small ROTATING slice is executed per invocation, chosen from a stable hash of the day. Over
|
|
39
|
+
* successive runs the whole list is covered without any single run being expensive.
|
|
40
|
+
*
|
|
41
|
+
* Usage:
|
|
42
|
+
* node scripts/recheck-parked-tests.mjs # missing-file scan + rotating slice
|
|
43
|
+
* node scripts/recheck-parked-tests.mjs --slice 20 # widen the slice
|
|
44
|
+
* node scripts/recheck-parked-tests.mjs --missing-only # free: no test execution
|
|
45
|
+
* node scripts/recheck-parked-tests.mjs --json # machine-readable
|
|
46
|
+
* node scripts/recheck-parked-tests.mjs --runs 3 # runs per file (default 2)
|
|
47
|
+
*
|
|
48
|
+
* Always exits 0. It reports; it does not gate. Making it a gate would recreate the original
|
|
49
|
+
* problem from the other side — a red build for a test somebody parked on purpose.
|
|
50
|
+
*/
|
|
51
|
+
|
|
52
|
+
import fs from 'node:fs';
|
|
53
|
+
import path from 'node:path';
|
|
54
|
+
import { fileURLToPath } from 'node:url';
|
|
55
|
+
import { spawnSync } from 'node:child_process';
|
|
56
|
+
|
|
57
|
+
const ROOT = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..');
|
|
58
|
+
const CONFIG = path.join(ROOT, 'vitest.push.config.ts');
|
|
59
|
+
|
|
60
|
+
function parseArgs(argv) {
|
|
61
|
+
const out = { slice: 6, runs: 2, json: false, missingOnly: false };
|
|
62
|
+
for (let i = 2; i < argv.length; i++) {
|
|
63
|
+
const a = argv[i];
|
|
64
|
+
if (a === '--json') out.json = true;
|
|
65
|
+
else if (a === '--missing-only') out.missingOnly = true;
|
|
66
|
+
else if (a === '--slice') out.slice = Number(argv[++i]);
|
|
67
|
+
else if (a === '--runs') out.runs = Number(argv[++i]);
|
|
68
|
+
}
|
|
69
|
+
if (!Number.isFinite(out.slice) || out.slice < 0) out.slice = 6;
|
|
70
|
+
if (!Number.isFinite(out.runs) || out.runs < 1) out.runs = 2;
|
|
71
|
+
return out;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Read the parked entries out of the config.
|
|
76
|
+
*
|
|
77
|
+
* Deliberately a literal parse of the array rather than importing the config: importing would
|
|
78
|
+
* execute it, and this must be safe to run against a config that does not load.
|
|
79
|
+
*/
|
|
80
|
+
function readParkedEntries() {
|
|
81
|
+
const src = fs.readFileSync(CONFIG, 'utf-8');
|
|
82
|
+
const m = /const FLAKY_TESTS = \[(.*?)\n\];/s.exec(src);
|
|
83
|
+
if (!m) throw new Error(`could not locate FLAKY_TESTS in ${path.relative(ROOT, CONFIG)}`);
|
|
84
|
+
|
|
85
|
+
// Parse LINE BY LINE and skip comments. A naive /'([^']+)'/g over the whole block also matches
|
|
86
|
+
// apostrophes inside the prose — "the test's own beforeAll" yields a bogus entry `s own`. That is
|
|
87
|
+
// not hypothetical: the first version of this script reported 42 dangling entries, nearly all of
|
|
88
|
+
// them fragments of the explanatory comment added when two tests were re-armed. The array is
|
|
89
|
+
// heavily commented BY DESIGN (those comments are what stop the next person re-parking on a wrong
|
|
90
|
+
// label), so the parser has to tolerate prose rather than the prose having to stay terse.
|
|
91
|
+
const entries = [];
|
|
92
|
+
for (const raw of m[1].split('\n')) {
|
|
93
|
+
const line = raw.trim();
|
|
94
|
+
if (line.startsWith('//') || line.startsWith('*') || line.startsWith('/*')) continue;
|
|
95
|
+
const e = /^'([^']+)',?$/.exec(line);
|
|
96
|
+
if (e) entries.push(e[1]);
|
|
97
|
+
}
|
|
98
|
+
return entries;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/** Stable rotation so successive runs cover the whole list without any run being expensive. */
|
|
102
|
+
function rotatingSlice(items, size, dayKey) {
|
|
103
|
+
if (size <= 0 || items.length === 0) return [];
|
|
104
|
+
let h = 0;
|
|
105
|
+
for (const c of dayKey) h = (h * 31 + c.charCodeAt(0)) >>> 0;
|
|
106
|
+
const start = h % items.length;
|
|
107
|
+
return Array.from({ length: Math.min(size, items.length) }, (_, i) => items[(start + i) % items.length]);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
function runOnce(file) {
|
|
111
|
+
const res = spawnSync(
|
|
112
|
+
process.execPath,
|
|
113
|
+
['./node_modules/.bin/vitest', 'run', file, '--reporter=basic'],
|
|
114
|
+
{ cwd: ROOT, encoding: 'utf-8', timeout: 300_000, env: { ...process.env } },
|
|
115
|
+
);
|
|
116
|
+
const out = `${res.stdout ?? ''}${res.stderr ?? ''}`;
|
|
117
|
+
if (res.status === 0) return 'pass';
|
|
118
|
+
if (res.error || res.status === null) return 'errored';
|
|
119
|
+
return /Tests\s+\d+\s+failed/.test(out) ? 'fail' : 'errored';
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
const opts = parseArgs(process.argv);
|
|
123
|
+
const entries = readParkedEntries();
|
|
124
|
+
|
|
125
|
+
// Glob patterns cannot be resolved to a single file; report them rather than pretending.
|
|
126
|
+
const isGlob = (e) => e.includes('*');
|
|
127
|
+
const concrete = entries.filter((e) => !isGlob(e));
|
|
128
|
+
const globs = entries.filter(isGlob);
|
|
129
|
+
|
|
130
|
+
const missing = concrete.filter((e) => !fs.existsSync(path.join(ROOT, e)));
|
|
131
|
+
const present = concrete.filter((e) => fs.existsSync(path.join(ROOT, e)));
|
|
132
|
+
|
|
133
|
+
const results = [];
|
|
134
|
+
if (!opts.missingOnly) {
|
|
135
|
+
const dayKey = new Date().toISOString().slice(0, 10);
|
|
136
|
+
for (const file of rotatingSlice(present, opts.slice, dayKey)) {
|
|
137
|
+
const runs = Array.from({ length: opts.runs }, () => runOnce(file));
|
|
138
|
+
const verdict = runs.every((r) => r === 'pass')
|
|
139
|
+
? 'deterministic-pass'
|
|
140
|
+
: runs.every((r) => r === 'fail')
|
|
141
|
+
? 'deterministic-fail'
|
|
142
|
+
: runs.includes('errored')
|
|
143
|
+
? 'could-not-run'
|
|
144
|
+
: 'genuinely-flaky';
|
|
145
|
+
results.push({ file, runs, verdict });
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
const report = {
|
|
150
|
+
parkedTotal: entries.length,
|
|
151
|
+
concrete: concrete.length,
|
|
152
|
+
globPatterns: globs,
|
|
153
|
+
missingFiles: missing,
|
|
154
|
+
checked: results,
|
|
155
|
+
note:
|
|
156
|
+
'SIGNAL ONLY — nothing is re-armed. A local deterministic-pass does NOT establish that the ' +
|
|
157
|
+
'test passes in CI; a third of this list is parked for an environment reason whose stated ' +
|
|
158
|
+
'scope is "on this machine". Re-arming remains a judgement.',
|
|
159
|
+
};
|
|
160
|
+
|
|
161
|
+
if (opts.json) {
|
|
162
|
+
console.log(JSON.stringify(report, null, 2));
|
|
163
|
+
} else {
|
|
164
|
+
console.log(`\nParked tests: ${report.parkedTotal} entries (${concrete.length} concrete, ${globs.length} glob patterns)\n`);
|
|
165
|
+
if (missing.length) {
|
|
166
|
+
console.log(` ENTRIES POINTING AT NOTHING (${missing.length}) — excluding a file that does not exist:`);
|
|
167
|
+
for (const f of missing) console.log(` - ${f}`);
|
|
168
|
+
console.log('');
|
|
169
|
+
} else {
|
|
170
|
+
console.log(' No dangling entries.\n');
|
|
171
|
+
}
|
|
172
|
+
if (results.length) {
|
|
173
|
+
console.log(` RE-CHECKED THIS RUN (rotating slice of ${results.length}, ${opts.runs} runs each):`);
|
|
174
|
+
for (const r of results) console.log(` ${r.verdict.padEnd(20)} ${r.file}`);
|
|
175
|
+
const back = results.filter((r) => r.verdict === 'deterministic-pass');
|
|
176
|
+
if (back.length) {
|
|
177
|
+
console.log(`\n ${back.length} entr${back.length === 1 ? 'y' : 'ies'} now pass deterministically HERE.`);
|
|
178
|
+
console.log(' That is a prompt to look, not a verdict: re-arming is a judgement about whether');
|
|
179
|
+
console.log(' the environment reason still holds, and CI is a different environment.');
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
console.log(`\n${report.note}\n`);
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
process.exit(0);
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "./builtin-manifest.schema.json",
|
|
3
3
|
"schemaVersion": 1,
|
|
4
|
-
"generatedAt": "2026-07-27T15:
|
|
5
|
-
"instarVersion": "1.3.
|
|
4
|
+
"generatedAt": "2026-07-27T15:52:35.456Z",
|
|
5
|
+
"instarVersion": "1.3.1005",
|
|
6
6
|
"entryCount": 202,
|
|
7
7
|
"entries": {
|
|
8
8
|
"hook:session-start": {
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
# Upgrade Guide — vNEXT
|
|
2
|
+
|
|
3
|
+
<!-- assembled-by: assemble-next-md -->
|
|
4
|
+
<!-- bump: patch -->
|
|
5
|
+
|
|
6
|
+
## What Changed
|
|
7
|
+
|
|
8
|
+
`GET /channels` covers WhatsApp and iMessage. Both adapters existed but had no registry row — a gap
|
|
9
|
+
recorded explicitly when the direct user channels shipped, and a hole in the registry's own
|
|
10
|
+
"absence is impossible" property, since a channel with no row cannot report that it is missing.
|
|
11
|
+
|
|
12
|
+
WhatsApp is read from `getStatus().state`, a real state machine rather than a boolean, so
|
|
13
|
+
`qr-pending` maps to `reachable-no-credential` — the link is alive and waiting for a human to scan a
|
|
14
|
+
pairing code, and a restart will not help. `connecting`/`reconnecting` report `unknown` with the phase
|
|
15
|
+
named rather than being guessed; `disconnected`/`closed` are `broken`; an unrecognised state is
|
|
16
|
+
`unknown`, never `working`.
|
|
17
|
+
|
|
18
|
+
iMessage is read from `getConnectionInfo().state`, deliberately NOT the sibling `connectedAt` — that
|
|
19
|
+
field is computed as `started ? new Date().toISOString() : undefined`, so it reports the moment you
|
|
20
|
+
asked rather than the moment it connected. A source ratchet fails if anyone wires it in.
|
|
21
|
+
|
|
22
|
+
`IMessageAdapter.getConnectionInfo().connectedAt` was computed inline as
|
|
23
|
+
`started ? new Date().toISOString() : undefined`, so it reported the moment of the READ rather than
|
|
24
|
+
the moment of connection. Three reads produced three different "connection times", all wrong.
|
|
25
|
+
|
|
26
|
+
The instant is now captured once, immediately after `started` flips true in `start()`, and cleared in
|
|
27
|
+
`stop()`. An adapter that never connected reports no time.
|
|
28
|
+
|
|
29
|
+
Adds `scripts/recheck-parked-tests.mjs` — the missing EXIT PATH for `vitest.push.config.ts`'s
|
|
30
|
+
`FLAKY_TESTS`. Entry to that list costs nothing (the file is classified as ordinary config, so
|
|
31
|
+
removing a guard from CI needs no artifact), and nothing ever re-checked whether a parked test could
|
|
32
|
+
return. Entry free, exit impossible, ungated surface monotonically growing.
|
|
33
|
+
|
|
34
|
+
The script reports which parked entries now pass deterministically and which point at files that no
|
|
35
|
+
longer exist. It never re-arms and never edits config.
|
|
36
|
+
|
|
37
|
+
Skipping the host-wide test-runner bound via `INSTAR_HOST_TEST_SEMAPHORE=off` printed a deterministic
|
|
38
|
+
warning — identical on every run. The shared detector that counts sustained self-disables was consumed
|
|
39
|
+
only by `dev:preflight`, hours downstream.
|
|
40
|
+
|
|
41
|
+
Measured on 2026-07-27: an agent self-disabled the bound 37 times in about three hours and read the
|
|
42
|
+
same warning 37 times as routine output. The detector's threshold is 3.
|
|
43
|
+
|
|
44
|
+
The skip warning now also reports the current count, that this is no longer an exception, and that
|
|
45
|
+
`dev:preflight` fails on the signature. It reuses the shared detector, so the number in the warning
|
|
46
|
+
and the number that fails preflight cannot drift.
|
|
47
|
+
|
|
48
|
+
`scripts/lib/classify-tier.mjs` no longer treats a `.config` FILENAME reference as evidence of a
|
|
49
|
+
config surface. The `\.config\b` alternative in `CONFIG_SURFACE_HINT` matched any text containing
|
|
50
|
+
`.config`, including filenames — so a script that merely READ `vitest.push.config.ts`, combined with
|
|
51
|
+
an ordinary object literal, fired "new capability: new config key added" and raised that change's risk
|
|
52
|
+
floor to 2.
|
|
53
|
+
|
|
54
|
+
## What to Tell Your User
|
|
55
|
+
|
|
56
|
+
Your agent can now tell you whether WhatsApp and iMessage are actually working, alongside Telegram and
|
|
57
|
+
Slack.
|
|
58
|
+
|
|
59
|
+
The useful part is what it says when WhatsApp is waiting for you to scan a pairing code. That is not
|
|
60
|
+
broken — the connection is fine, it just needs you for a moment — and restarting things would not fix
|
|
61
|
+
it. It now says exactly that, instead of lumping it in with a dropped connection.
|
|
62
|
+
|
|
63
|
+
It is also careful about what it does not know. If a link is mid-connection it says so rather than
|
|
64
|
+
guessing, and a working link means the connection was up when it checked, not a promise that a message
|
|
65
|
+
to one particular person will arrive.
|
|
66
|
+
|
|
67
|
+
If your agent uses iMessage, the "connected since" time it reported was never real — it was recomputed
|
|
68
|
+
as the current time every time anything asked, so it always said "just now".
|
|
69
|
+
|
|
70
|
+
That is a small thing that could have caused a confident wrong answer, because a precise-looking
|
|
71
|
+
timestamp invites questions like how long has this been up or did it drop recently. Those would all
|
|
72
|
+
have been answered with a number that meant nothing.
|
|
73
|
+
|
|
74
|
+
It now records the moment it actually connects, and reports nothing at all when it is not connected —
|
|
75
|
+
which is the honest answer rather than a placeholder.
|
|
76
|
+
|
|
77
|
+
None — internal change (no user-facing surface).
|
|
78
|
+
|
|
79
|
+
None — internal change (no user-facing surface).
|
|
80
|
+
|
|
81
|
+
None — internal change (no user-facing surface).
|
|
82
|
+
|
|
83
|
+
## Summary of New Capabilities
|
|
84
|
+
|
|
85
|
+
No new endpoint, command, or config key. `GET /channels` gains `user-whatsapp` and `user-imessage`
|
|
86
|
+
rows with live-state verdicts.
|
|
87
|
+
|
|
88
|
+
No new endpoint, command, or config key. The iMessage connection-info object now reports a real
|
|
89
|
+
connect instant instead of the current time.
|
|
90
|
+
|
|
91
|
+
None — internal change (no user-facing surface).
|
|
92
|
+
|
|
93
|
+
None — internal change (no user-facing surface).
|
|
94
|
+
|
|
95
|
+
None — internal change (no user-facing surface).
|
|
96
|
+
|
|
97
|
+
## Evidence
|
|
98
|
+
|
|
99
|
+
Falsified by flattening `qr-pending` to `broken` in production:
|
|
100
|
+
|
|
101
|
+
```
|
|
102
|
+
× THE STATE A BOOLEAN LOSES: qr-pending is reachable-no-credential, not broken
|
|
103
|
+
→ expected 'broken' to be 'reachable-no-credential'
|
|
104
|
+
Tests 1 failed | 15 passed (16)
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
Restored byte-identical. Green across every suite touching the change:
|
|
108
|
+
`Test Files 5 passed (5) · Tests 59 passed (59)` (`user-channel-wa-imessage`,
|
|
109
|
+
`user-channel-liveness`, `channel-registry`, `channel-registry-claims`, `channels-route`);
|
|
110
|
+
`tsc --noEmit` exit 0. The integration test pinning the exact channel set and the audience partition
|
|
111
|
+
was updated in this change rather than left for CI to catch.
|
|
112
|
+
|
|
113
|
+
Falsified by restoring the inline expression:
|
|
114
|
+
|
|
115
|
+
```
|
|
116
|
+
× THE FIX: getConnectionInfo no longer manufactures a timestamp on read
|
|
117
|
+
→ expected 'getConnectionInfo(): ConnectionInfo {…' not to match /new Date\(\)/
|
|
118
|
+
Tests 1 failed | 3 passed (4)
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
Restored byte-identical. Green across every iMessage suite:
|
|
122
|
+
`Test Files 4 passed (4) · Tests 64 passed (64)`; `tsc --noEmit` exit 0. No production consumer reads
|
|
123
|
+
the field — verified by grep; the only references are comments explaining why the channel-registry row
|
|
124
|
+
deliberately does not use it.
|
|
125
|
+
|
|
126
|
+
Measured on current main, three consecutive runs each: `notification-spam-prevention.test.ts`
|
|
127
|
+
15/15/15, `message-formatter.test.ts` 17/17/17, `ReflectionConsolidator.test.ts` 16/16/16 — all parked
|
|
128
|
+
as broken or non-deterministic, all repaired at some point and never re-armed. Note the inverse of the
|
|
129
|
+
2026-06-05 note in that same file: those tests rotted while parked; these were fixed while parked.
|
|
130
|
+
Nobody noticed either way. Plus one dangling entry: `tests/unit/slack-stall-active-gate.test.ts` is
|
|
131
|
+
excluded and does not exist.
|
|
132
|
+
|
|
133
|
+
Falsified by restoring the naive parser:
|
|
134
|
+
|
|
135
|
+
```
|
|
136
|
+
× THE PARSER: prose in the array does not become an entry → s own
|
|
137
|
+
× finds the dangling entry ... → expected 42 to be less than 5
|
|
138
|
+
× REGRESSION: an apostrophe in a comment cannot corrupt the parse
|
|
139
|
+
Tests 3 failed | 2 passed (5)
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
Restored byte-identical; 5 passed.
|
|
143
|
+
|
|
144
|
+
Live, against the real ledger:
|
|
145
|
+
|
|
146
|
+
```
|
|
147
|
+
WARN: SKIPPING the host-wide test-runner bound (reason: off) — posture: off. …
|
|
148
|
+
WARN: this is self-disable #39 on this host within the detector's window (threshold 3).
|
|
149
|
+
WARN: that is no longer an exception — it is the pattern the detector exists to find.
|
|
150
|
+
WARN: `instar dev:preflight` FAILS on this signature …
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
Falsified by reverting the mapping to the originally-guessed field name:
|
|
154
|
+
|
|
155
|
+
```
|
|
156
|
+
× THE FIX: fires on the detector's real output shape → expected null not to be null
|
|
157
|
+
× fires exactly AT the threshold
|
|
158
|
+
Tests 2 failed | 3 passed (5)
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
Restored byte-identical. Green: `Test Files 3 passed (3) · Tests 121 passed (121)`; `tsc --noEmit`
|
|
162
|
+
exit 0.
|
|
163
|
+
|
|
164
|
+
Falsified by restoring the alternative:
|
|
165
|
+
|
|
166
|
+
```
|
|
167
|
+
× does NOT fire on a mere .config FILENAME reference — the reproduction of the real case
|
|
168
|
+
→ reading a .config filename is not adding a config key: expected 2 to be 1
|
|
169
|
+
Tests 1 failed | 48 passed (49)
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
Restored byte-identical; 49 passed, including all 47 pre-existing classifier tests unchanged. A second
|
|
173
|
+
new test iterates every remaining anchor (`ConfigDefaults`, `defaultConfig`, `InstarConfig`,
|
|
174
|
+
`configSchema`) and asserts the floor still rises — narrowing a check must not blind it.
|
|
175
|
+
|
|
176
|
+
## Also in this change: the Telegram row now names its subject
|
|
177
|
+
|
|
178
|
+
Found by checking the shipped feature on a running agent rather than only in tests. `/capabilities`
|
|
179
|
+
reported `telegram: { configured: true, adapter: true, bidirectional: true }` while `/channels`
|
|
180
|
+
reported `user-telegram: unknown — the Telegram poll loop is not running` — the config surface and the
|
|
181
|
+
live surface disagreeing, which is exactly what this registry exists to expose.
|
|
182
|
+
|
|
183
|
+
But the row was measuring the SERVER process's adapter and presenting it as the channel's state. On a
|
|
184
|
+
lifeline deployment inbound never goes through that adapter: a separate lifeline process polls and
|
|
185
|
+
forwards, and the server logs "Telegram relay wired (via lifeline callback forwarding)". Inbound was
|
|
186
|
+
healthy; a stopped server poller is normal there.
|
|
187
|
+
|
|
188
|
+
That is the same scope error the `threadline-relay` row was fixed for in #1667 — a true statement
|
|
189
|
+
whose subject is unstated, so the reader concludes something about a path that was never measured.
|
|
190
|
+
The verdict stays `unknown` (what it can see is genuinely undetermined); it now names the server
|
|
191
|
+
adapter and says plainly that this alone does not mean messages are not arriving.
|
|
192
|
+
|
|
193
|
+
## Known limits
|
|
194
|
+
|
|
195
|
+
`working` means the link was up when probed — not that a message to a particular chat or contact
|
|
196
|
+
would land. Neither row probes a round-trip, because a status read must not send. iMessage is bound to
|
|
197
|
+
the host running its backend, recorded as a real cost of choosing it.
|
|
198
|
+
|
|
199
|
+
`lastError` and `reconnectAttempts` in the same object are still hardcoded `undefined` / `0`. They are
|
|
200
|
+
the same class of defect and are deliberately not fixed here — inventing values for them would repeat
|
|
201
|
+
the error this corrects. The field also says nothing about connection quality.
|
|
202
|
+
|
|
203
|
+
It never re-arms — a local deterministic-pass does not establish a CI pass, and a third of the list is
|
|
204
|
+
parked for a native-binding reason whose stated scope is "on this machine". Glob entries are reported
|
|
205
|
+
rather than resolved. Only a rotating slice runs per invocation, so a single run does not survey the
|
|
206
|
+
whole list; the output says how many it checked.
|
|
207
|
+
|
|
208
|
+
Louder text only — it cannot refuse a run, and making the kill switch refuse was considered and
|
|
209
|
+
rejected (a kill switch that stops working after three uses is not a kill switch). It fires only for
|
|
210
|
+
`reason: 'off'`; the spoofed-CI skip is not escalated, since that path has a different population and
|
|
211
|
+
no measurement behind it.
|
|
212
|
+
|
|
213
|
+
If a genuine config-key addition mentions only a `*.config.ts` filename and none of the remaining
|
|
214
|
+
anchors, its floor will no longer rise. The remaining anchors cover this repo's actual config
|
|
215
|
+
surfaces, and the both-sides test guards against a future narrowing that blinds the check — but this
|
|
216
|
+
is a heuristic over diff text and always was.
|
|
217
|
+
|
|
218
|
+
## Correction
|
|
219
|
+
|
|
220
|
+
The first (naive) parser reported 92 parked entries; the true count is 91. That wrong number was
|
|
221
|
+
published in the release note of the earlier re-arm change. Recorded rather than silently fixed.
|
|
222
|
+
|
|
223
|
+
## Built-in caution
|
|
224
|
+
|
|
225
|
+
Two implementations of this produced no output and no error — one un-awaited promise, one guessed data
|
|
226
|
+
shape swallowed by the best-effort catch. Both were found by running it and reading the output. The
|
|
227
|
+
fallible mapping is now a pure exported function pinned against the detector's real shape, so a future
|
|
228
|
+
shape change fails a test rather than vanishing into the catch.
|
|
229
|
+
|
|
230
|
+
## Why it mattered
|
|
231
|
+
|
|
232
|
+
The floor is what makes a tier declaration meaningful: declaring under it is permitted but audited as
|
|
233
|
+
a deliberate override. A floor that fires on a filename teaches authors that below-floor declarations
|
|
234
|
+
are routine, which is how a real floor gets argued past later. A noisy guard degrades the guard it
|
|
235
|
+
belongs to.
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# Side-effects review — iMessage connectedAt is recorded, not synthesised
|
|
2
|
+
|
|
3
|
+
**Change:** `IMessageAdapter.getConnectionInfo().connectedAt` returned
|
|
4
|
+
`started ? new Date().toISOString() : undefined` — the time of the READ, never the time of the
|
|
5
|
+
connection. It now returns a value captured once at connect and cleared on stop.
|
|
6
|
+
|
|
7
|
+
**Decision point touched?** No. Status reporting only; nothing gates on this field.
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## 1. Over-block
|
|
12
|
+
|
|
13
|
+
None — nothing is rejected or blocked. The only behavioural change is that a value which was always
|
|
14
|
+
populated-while-running can now be `undefined` in one new case: an adapter whose `started` flag is
|
|
15
|
+
true but which has not passed through `start()` in this process (not reachable through the public
|
|
16
|
+
API, since `start()` is what sets `started`).
|
|
17
|
+
|
|
18
|
+
## 2. Under-block
|
|
19
|
+
|
|
20
|
+
The field is now accurate about connect time but still says nothing about connection QUALITY — a
|
|
21
|
+
long-lived connection that has been failing to deliver reports the same timestamp as a healthy one.
|
|
22
|
+
Unchanged by this and not claimed.
|
|
23
|
+
|
|
24
|
+
Also unchanged: `lastError` and `reconnectAttempts` in the same object are still hardcoded
|
|
25
|
+
`undefined` / `0`. They are the same class of defect — fields that look informative and carry no
|
|
26
|
+
information — and are deliberately NOT fixed here, because inventing values for them would repeat
|
|
27
|
+
the error this change corrects. Named rather than silently left.
|
|
28
|
+
|
|
29
|
+
## 3. Level-of-abstraction fit
|
|
30
|
+
|
|
31
|
+
Correct: the adapter is the only thing that knows when it connected, so it is the only place the
|
|
32
|
+
instant can be recorded honestly. Nothing downstream can reconstruct it.
|
|
33
|
+
|
|
34
|
+
## 4. Signal vs authority compliance
|
|
35
|
+
|
|
36
|
+
Pure signal, unchanged in authority. It makes an existing signal truthful rather than adding one.
|
|
37
|
+
|
|
38
|
+
## 5. Interactions
|
|
39
|
+
|
|
40
|
+
No production consumer reads `connectedAt` — verified by grep across `src/`; the only references are
|
|
41
|
+
comments in `userChannels.ts` and `routes.ts` explaining why the channel-registry row deliberately
|
|
42
|
+
does NOT use it. Those comments remain accurate: the row is built on `state`, which is the right
|
|
43
|
+
liveness signal regardless of this fix.
|
|
44
|
+
|
|
45
|
+
`ConnectionInfo.connectedAt` is already optional in the type, so returning `undefined` when not
|
|
46
|
+
connected requires no type change.
|
|
47
|
+
|
|
48
|
+
## 6. External surfaces
|
|
49
|
+
|
|
50
|
+
None directly. The value appears in whatever surfaces render `getConnectionInfo()`. Anything that was
|
|
51
|
+
displaying it was displaying fiction; it will now show a real instant or nothing.
|
|
52
|
+
|
|
53
|
+
## 7. Multi-machine posture
|
|
54
|
+
|
|
55
|
+
Machine-local by design and inherently so: the adapter and its backend run on one host, and a
|
|
56
|
+
connection instant is a fact about THIS process. There is no state to replicate and a cross-machine
|
|
57
|
+
view would be meaningless — another machine's connect time says nothing about this one's.
|
|
58
|
+
|
|
59
|
+
## 8. Rollback cost
|
|
60
|
+
|
|
61
|
+
Trivial: restore the inline expression and drop the field. No persisted state, no schema, no
|
|
62
|
+
migration. Rolling back restores a fabricated timestamp, so it should carry a reason.
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# Side-effects review — parked-test re-check (the exit path for FLAKY_TESTS)
|
|
2
|
+
|
|
3
|
+
**Change:** adds `scripts/recheck-parked-tests.mjs`, which reports which `FLAKY_TESTS` entries now
|
|
4
|
+
pass deterministically and which point at files that no longer exist. Read-only; never edits config.
|
|
5
|
+
|
|
6
|
+
**Decision point touched?** No gate is added or changed. It informs a human judgement (should this
|
|
7
|
+
test be re-armed?) that currently has no prompt at all.
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## 1. Over-block
|
|
12
|
+
|
|
13
|
+
None possible: the script always exits 0 and modifies nothing. Making it a gate was considered and
|
|
14
|
+
rejected — a red build for a test somebody parked deliberately would recreate the original problem
|
|
15
|
+
from the other side.
|
|
16
|
+
|
|
17
|
+
## 2. Under-block
|
|
18
|
+
|
|
19
|
+
Deliberate and central: it does NOT re-arm. A local deterministic-pass does not establish a CI pass,
|
|
20
|
+
and roughly a third of the list is parked for a native-binding failure whose stated scope is literally
|
|
21
|
+
"on this machine" while CI is a different environment. Auto-re-arming on local green would be the
|
|
22
|
+
confident-wrong-answer this area keeps producing.
|
|
23
|
+
|
|
24
|
+
It also cannot evaluate glob entries (`tests/unit/threadline/**`) — those are reported separately
|
|
25
|
+
rather than resolved, because a glob is not a file and pretending otherwise would put fake entries in
|
|
26
|
+
the missing list.
|
|
27
|
+
|
|
28
|
+
Bounded by default: only a rotating slice is executed per run. So a single run does NOT survey the
|
|
29
|
+
whole list, and the output says how many were checked. Under-coverage that announces itself.
|
|
30
|
+
|
|
31
|
+
## 3. Level-of-abstraction fit
|
|
32
|
+
|
|
33
|
+
Correct. The gap is that the exclusion list has an entry path and no exit path; this is the exit
|
|
34
|
+
path's reporting half. The complementary half — requiring evidence on ADDITIONS — is tracked
|
|
35
|
+
separately (ACT-1341) and is a gate change, not a report.
|
|
36
|
+
|
|
37
|
+
## 4. Signal vs authority compliance
|
|
38
|
+
|
|
39
|
+
Pure signal, and deliberately so. Per `docs/signal-vs-authority.md` it produces information for an
|
|
40
|
+
authority (a human) that already exists; it holds none itself.
|
|
41
|
+
|
|
42
|
+
## 5. Interactions
|
|
43
|
+
|
|
44
|
+
Reads `vitest.push.config.ts` by literal parse rather than importing it — importing would execute the
|
|
45
|
+
config, and this must remain safe to run against a config that does not load. It executes vitest as a
|
|
46
|
+
subprocess for the sampled files; those runs go through the normal host test-runner bound like any
|
|
47
|
+
other.
|
|
48
|
+
|
|
49
|
+
No production code touched. Nothing imports the script.
|
|
50
|
+
|
|
51
|
+
## 6. External surfaces
|
|
52
|
+
|
|
53
|
+
None. A developer-facing script; no endpoint, no config key, no agent-visible behaviour.
|
|
54
|
+
|
|
55
|
+
## 7. Multi-machine posture
|
|
56
|
+
|
|
57
|
+
Not applicable in the replication sense, and that is itself the point: the answer it produces is
|
|
58
|
+
about THIS machine's environment, and the script says so in its own output note. A cross-machine
|
|
59
|
+
merged view would be actively misleading, since the whole question is whether a local environment
|
|
60
|
+
reason still holds.
|
|
61
|
+
|
|
62
|
+
## 8. Rollback cost
|
|
63
|
+
|
|
64
|
+
Trivial — delete the script and its test. No state, no schema, no consumers.
|
|
65
|
+
|
|
66
|
+
## A correction this change surfaced
|
|
67
|
+
|
|
68
|
+
The first implementation's naive parser produced a count of 92 parked entries. The true count is 91.
|
|
69
|
+
That wrong number was published in the release note of the earlier re-arm change (`#1668`). It is
|
|
70
|
+
recorded here rather than silently corrected, because a plausible-but-wrong number that reached an
|
|
71
|
+
artifact is exactly the failure class this repository keeps finding.
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# Side-effects review — escalate the self-disable warning at the point of use
|
|
2
|
+
|
|
3
|
+
**Change:** when the test-runner bound is skipped via `INSTAR_HOST_TEST_SEMAPHORE=off`, the existing
|
|
4
|
+
deterministic warning is followed by an escalation naming how many self-disables the shared detector
|
|
5
|
+
already sees in its window, and that `dev:preflight` fails on the signature.
|
|
6
|
+
|
|
7
|
+
**Decision point touched?** No gate, no blocking, no new authority. It adds output to an existing
|
|
8
|
+
logging path. The bound's behaviour is unchanged in every posture.
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## 1. Over-block
|
|
13
|
+
|
|
14
|
+
None possible — it prints lines. It cannot refuse, delay, or fail a run. Explicitly considered and
|
|
15
|
+
rejected: making the chokepoint REFUSE on a sustained pattern. The kill switch exists for genuine
|
|
16
|
+
emergencies, and a kill switch that stops working after three uses is not a kill switch. Escalating
|
|
17
|
+
the signal is the correct lever; removing the escape hatch is not.
|
|
18
|
+
|
|
19
|
+
## 2. Under-block
|
|
20
|
+
|
|
21
|
+
It is only louder text. A reader determined to ignore it still can, and someone scripting `off`
|
|
22
|
+
permanently will see it scroll past forever. This narrows the gap between the moment of the decision
|
|
23
|
+
and the moment of the consequence; it does not close it.
|
|
24
|
+
|
|
25
|
+
It also fires only for `reason === 'off'`. The other loud skip (spoofed CI on a dev host) is graded
|
|
26
|
+
"like off" by the spec and is NOT escalated here — deliberate scope, since that path has a different
|
|
27
|
+
population and I have no measurement for it.
|
|
28
|
+
|
|
29
|
+
## 3. Level-of-abstraction fit
|
|
30
|
+
|
|
31
|
+
Correct: the chokepoint is where the decision is observable at the moment it is made. The detector
|
|
32
|
+
already existed but was consumed only by `dev:preflight`, hours downstream. This wires the same
|
|
33
|
+
detector to the earliest surface, and reuses it rather than re-counting so threshold and window
|
|
34
|
+
cannot drift between the two consumers.
|
|
35
|
+
|
|
36
|
+
## 4. Signal vs authority compliance
|
|
37
|
+
|
|
38
|
+
Pure signal, and deliberately kept so. The escalation informs; the human or agent decides; the
|
|
39
|
+
existing preflight check retains whatever authority it had.
|
|
40
|
+
|
|
41
|
+
## 5. Interactions
|
|
42
|
+
|
|
43
|
+
`skipLine` becomes async and is awaited at all seven call sites in `globalSetup`. That is load-bearing
|
|
44
|
+
rather than cosmetic: the first implementation used fire-and-forget and the escalation never printed,
|
|
45
|
+
because globalSetup returns before the promise settles.
|
|
46
|
+
|
|
47
|
+
The lookup dynamically imports `scripts/lib/test-runner-selfdisable-patterns.mjs` from a test setup
|
|
48
|
+
file. Wrapped so a resolution failure degrades to the plain line.
|
|
49
|
+
|
|
50
|
+
Adds one ledger read (bounded to the detector's own `DEFAULT_MAX_EVENTS`) per SKIPPED run only — never
|
|
51
|
+
on the acquire path.
|
|
52
|
+
|
|
53
|
+
## 6. External surfaces
|
|
54
|
+
|
|
55
|
+
None. Test-run stderr only; no endpoint, no config key, no user-facing behaviour.
|
|
56
|
+
|
|
57
|
+
## 7. Multi-machine posture
|
|
58
|
+
|
|
59
|
+
Machine-local by design and inherently so: the ledger records what THIS host did, and the bound is a
|
|
60
|
+
per-host concurrency limit. A cross-machine count would be meaningless — another machine's
|
|
61
|
+
self-disables say nothing about this one's.
|
|
62
|
+
|
|
63
|
+
## 8. Rollback cost
|
|
64
|
+
|
|
65
|
+
Trivial: drop the escalation block and revert `skipLine` to sync. No state, no schema, no consumers.
|
|
66
|
+
|
|
67
|
+
## What this change's own construction demonstrated
|
|
68
|
+
|
|
69
|
+
Two implementations produced NO output and NO error. The first attached the lookup to an un-awaited
|
|
70
|
+
promise; the second guessed the detector's shape and had the mistake swallowed by the best-effort
|
|
71
|
+
catch that exists so a louder warning cannot break a run. Both were found by running it and reading
|
|
72
|
+
the output, not by anything failing.
|
|
73
|
+
|
|
74
|
+
That is the same failure class as the change's subject, twice, inside the change. The response was
|
|
75
|
+
structural rather than resolving to be careful: the fallible mapping is now a pure exported function
|
|
76
|
+
pinned against the detector's real output shape, so a future shape change fails a test instead of
|
|
77
|
+
disappearing into the catch. The catch stays — it is correct that this cannot break a run — but it no
|
|
78
|
+
longer has anything unverified to hide.
|
package/upgrades/1.3.1004.md
DELETED
|
@@ -1,111 +0,0 @@
|
|
|
1
|
-
# Upgrade Guide — vNEXT
|
|
2
|
-
|
|
3
|
-
<!-- assembled-by: assemble-next-md -->
|
|
4
|
-
<!-- bump: patch -->
|
|
5
|
-
|
|
6
|
-
## What Changed
|
|
7
|
-
|
|
8
|
-
`GET /channels` covers WhatsApp and iMessage. Both adapters existed but had no registry row — a gap
|
|
9
|
-
recorded explicitly when the direct user channels shipped, and a hole in the registry's own
|
|
10
|
-
"absence is impossible" property, since a channel with no row cannot report that it is missing.
|
|
11
|
-
|
|
12
|
-
WhatsApp is read from `getStatus().state`, a real state machine rather than a boolean, so
|
|
13
|
-
`qr-pending` maps to `reachable-no-credential` — the link is alive and waiting for a human to scan a
|
|
14
|
-
pairing code, and a restart will not help. `connecting`/`reconnecting` report `unknown` with the phase
|
|
15
|
-
named rather than being guessed; `disconnected`/`closed` are `broken`; an unrecognised state is
|
|
16
|
-
`unknown`, never `working`.
|
|
17
|
-
|
|
18
|
-
iMessage is read from `getConnectionInfo().state`, deliberately NOT the sibling `connectedAt` — that
|
|
19
|
-
field is computed as `started ? new Date().toISOString() : undefined`, so it reports the moment you
|
|
20
|
-
asked rather than the moment it connected. A source ratchet fails if anyone wires it in.
|
|
21
|
-
|
|
22
|
-
`scripts/lib/classify-tier.mjs` no longer treats a `.config` FILENAME reference as evidence of a
|
|
23
|
-
config surface. The `\.config\b` alternative in `CONFIG_SURFACE_HINT` matched any text containing
|
|
24
|
-
`.config`, including filenames — so a script that merely READ `vitest.push.config.ts`, combined with
|
|
25
|
-
an ordinary object literal, fired "new capability: new config key added" and raised that change's risk
|
|
26
|
-
floor to 2.
|
|
27
|
-
|
|
28
|
-
## What to Tell Your User
|
|
29
|
-
|
|
30
|
-
Your agent can now tell you whether WhatsApp and iMessage are actually working, alongside Telegram and
|
|
31
|
-
Slack.
|
|
32
|
-
|
|
33
|
-
The useful part is what it says when WhatsApp is waiting for you to scan a pairing code. That is not
|
|
34
|
-
broken — the connection is fine, it just needs you for a moment — and restarting things would not fix
|
|
35
|
-
it. It now says exactly that, instead of lumping it in with a dropped connection.
|
|
36
|
-
|
|
37
|
-
It is also careful about what it does not know. If a link is mid-connection it says so rather than
|
|
38
|
-
guessing, and a working link means the connection was up when it checked, not a promise that a message
|
|
39
|
-
to one particular person will arrive.
|
|
40
|
-
|
|
41
|
-
None — internal change (no user-facing surface).
|
|
42
|
-
|
|
43
|
-
## Summary of New Capabilities
|
|
44
|
-
|
|
45
|
-
No new endpoint, command, or config key. `GET /channels` gains `user-whatsapp` and `user-imessage`
|
|
46
|
-
rows with live-state verdicts.
|
|
47
|
-
|
|
48
|
-
None — internal change (no user-facing surface).
|
|
49
|
-
|
|
50
|
-
## Evidence
|
|
51
|
-
|
|
52
|
-
Falsified by flattening `qr-pending` to `broken` in production:
|
|
53
|
-
|
|
54
|
-
```
|
|
55
|
-
× THE STATE A BOOLEAN LOSES: qr-pending is reachable-no-credential, not broken
|
|
56
|
-
→ expected 'broken' to be 'reachable-no-credential'
|
|
57
|
-
Tests 1 failed | 15 passed (16)
|
|
58
|
-
```
|
|
59
|
-
|
|
60
|
-
Restored byte-identical. Green across every suite touching the change:
|
|
61
|
-
`Test Files 5 passed (5) · Tests 59 passed (59)` (`user-channel-wa-imessage`,
|
|
62
|
-
`user-channel-liveness`, `channel-registry`, `channel-registry-claims`, `channels-route`);
|
|
63
|
-
`tsc --noEmit` exit 0. The integration test pinning the exact channel set and the audience partition
|
|
64
|
-
was updated in this change rather than left for CI to catch.
|
|
65
|
-
|
|
66
|
-
Falsified by restoring the alternative:
|
|
67
|
-
|
|
68
|
-
```
|
|
69
|
-
× does NOT fire on a mere .config FILENAME reference — the reproduction of the real case
|
|
70
|
-
→ reading a .config filename is not adding a config key: expected 2 to be 1
|
|
71
|
-
Tests 1 failed | 48 passed (49)
|
|
72
|
-
```
|
|
73
|
-
|
|
74
|
-
Restored byte-identical; 49 passed, including all 47 pre-existing classifier tests unchanged. A second
|
|
75
|
-
new test iterates every remaining anchor (`ConfigDefaults`, `defaultConfig`, `InstarConfig`,
|
|
76
|
-
`configSchema`) and asserts the floor still rises — narrowing a check must not blind it.
|
|
77
|
-
|
|
78
|
-
## Also in this change: the Telegram row now names its subject
|
|
79
|
-
|
|
80
|
-
Found by checking the shipped feature on a running agent rather than only in tests. `/capabilities`
|
|
81
|
-
reported `telegram: { configured: true, adapter: true, bidirectional: true }` while `/channels`
|
|
82
|
-
reported `user-telegram: unknown — the Telegram poll loop is not running` — the config surface and the
|
|
83
|
-
live surface disagreeing, which is exactly what this registry exists to expose.
|
|
84
|
-
|
|
85
|
-
But the row was measuring the SERVER process's adapter and presenting it as the channel's state. On a
|
|
86
|
-
lifeline deployment inbound never goes through that adapter: a separate lifeline process polls and
|
|
87
|
-
forwards, and the server logs "Telegram relay wired (via lifeline callback forwarding)". Inbound was
|
|
88
|
-
healthy; a stopped server poller is normal there.
|
|
89
|
-
|
|
90
|
-
That is the same scope error the `threadline-relay` row was fixed for in #1667 — a true statement
|
|
91
|
-
whose subject is unstated, so the reader concludes something about a path that was never measured.
|
|
92
|
-
The verdict stays `unknown` (what it can see is genuinely undetermined); it now names the server
|
|
93
|
-
adapter and says plainly that this alone does not mean messages are not arriving.
|
|
94
|
-
|
|
95
|
-
## Known limits
|
|
96
|
-
|
|
97
|
-
`working` means the link was up when probed — not that a message to a particular chat or contact
|
|
98
|
-
would land. Neither row probes a round-trip, because a status read must not send. iMessage is bound to
|
|
99
|
-
the host running its backend, recorded as a real cost of choosing it.
|
|
100
|
-
|
|
101
|
-
If a genuine config-key addition mentions only a `*.config.ts` filename and none of the remaining
|
|
102
|
-
anchors, its floor will no longer rise. The remaining anchors cover this repo's actual config
|
|
103
|
-
surfaces, and the both-sides test guards against a future narrowing that blinds the check — but this
|
|
104
|
-
is a heuristic over diff text and always was.
|
|
105
|
-
|
|
106
|
-
## Why it mattered
|
|
107
|
-
|
|
108
|
-
The floor is what makes a tier declaration meaningful: declaring under it is permitted but audited as
|
|
109
|
-
a deliberate override. A floor that fires on a filename teaches authors that below-floor declarations
|
|
110
|
-
are routine, which is how a real floor gets argued past later. A noisy guard degrades the guard it
|
|
111
|
-
belongs to.
|