instar 1.3.490 → 1.3.492
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/dashboard/index.html +30 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +3 -0
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/server.d.ts.map +1 -1
- package/dist/commands/server.js +199 -1
- package/dist/commands/server.js.map +1 -1
- package/dist/config/ConfigDefaults.d.ts.map +1 -1
- package/dist/config/ConfigDefaults.js +11 -0
- package/dist/config/ConfigDefaults.js.map +1 -1
- package/dist/core/CartographerSweepEngine.d.ts +55 -11
- package/dist/core/CartographerSweepEngine.d.ts.map +1 -1
- package/dist/core/CartographerSweepEngine.js +276 -95
- package/dist/core/CartographerSweepEngine.js.map +1 -1
- package/dist/core/CartographerTree.d.ts +77 -1
- package/dist/core/CartographerTree.d.ts.map +1 -1
- package/dist/core/CartographerTree.js +257 -5
- package/dist/core/CartographerTree.js.map +1 -1
- package/dist/core/GuardPostureStore.d.ts +38 -0
- package/dist/core/GuardPostureStore.d.ts.map +1 -0
- package/dist/core/GuardPostureStore.js +87 -0
- package/dist/core/GuardPostureStore.js.map +1 -0
- package/dist/core/MachinePoolRegistry.d.ts +16 -0
- package/dist/core/MachinePoolRegistry.d.ts.map +1 -1
- package/dist/core/MachinePoolRegistry.js +24 -1
- package/dist/core/MachinePoolRegistry.js.map +1 -1
- package/dist/core/PeerPresencePuller.d.ts +9 -0
- package/dist/core/PeerPresencePuller.d.ts.map +1 -1
- package/dist/core/PeerPresencePuller.js +1 -1
- package/dist/core/PeerPresencePuller.js.map +1 -1
- package/dist/core/PostUpdateMigrator.d.ts.map +1 -1
- package/dist/core/PostUpdateMigrator.js +43 -2
- package/dist/core/PostUpdateMigrator.js.map +1 -1
- package/dist/core/cartographerDetect.d.ts +133 -0
- package/dist/core/cartographerDetect.d.ts.map +1 -0
- package/dist/core/cartographerDetect.js +431 -0
- package/dist/core/cartographerDetect.js.map +1 -0
- package/dist/core/cartographerDetect.worker.d.ts +2 -0
- package/dist/core/cartographerDetect.worker.d.ts.map +1 -0
- package/dist/core/cartographerDetect.worker.js +37 -0
- package/dist/core/cartographerDetect.worker.js.map +1 -0
- package/dist/core/types.d.ts +29 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js.map +1 -1
- package/dist/monitoring/ActiveWorkSilenceSentinel.d.ts +8 -0
- package/dist/monitoring/ActiveWorkSilenceSentinel.d.ts.map +1 -1
- package/dist/monitoring/ActiveWorkSilenceSentinel.js +8 -0
- package/dist/monitoring/ActiveWorkSilenceSentinel.js.map +1 -1
- package/dist/monitoring/ContextWedgeSentinel.d.ts +8 -0
- package/dist/monitoring/ContextWedgeSentinel.d.ts.map +1 -1
- package/dist/monitoring/ContextWedgeSentinel.js +8 -0
- package/dist/monitoring/ContextWedgeSentinel.js.map +1 -1
- package/dist/monitoring/GuardPostureTripwire.d.ts +3 -27
- package/dist/monitoring/GuardPostureTripwire.d.ts.map +1 -1
- package/dist/monitoring/GuardPostureTripwire.js +8 -76
- package/dist/monitoring/GuardPostureTripwire.js.map +1 -1
- package/dist/monitoring/GuardRegistry.d.ts +48 -0
- package/dist/monitoring/GuardRegistry.d.ts.map +1 -0
- package/dist/monitoring/GuardRegistry.js +49 -0
- package/dist/monitoring/GuardRegistry.js.map +1 -0
- package/dist/monitoring/SessionReaper.d.ts +7 -0
- package/dist/monitoring/SessionReaper.d.ts.map +1 -1
- package/dist/monitoring/SessionReaper.js +9 -0
- package/dist/monitoring/SessionReaper.js.map +1 -1
- package/dist/monitoring/SessionWatchdog.d.ts +8 -0
- package/dist/monitoring/SessionWatchdog.d.ts.map +1 -1
- package/dist/monitoring/SessionWatchdog.js +8 -0
- package/dist/monitoring/SessionWatchdog.js.map +1 -1
- package/dist/monitoring/SocketDisconnectSentinel.d.ts +8 -0
- package/dist/monitoring/SocketDisconnectSentinel.d.ts.map +1 -1
- package/dist/monitoring/SocketDisconnectSentinel.js +8 -0
- package/dist/monitoring/SocketDisconnectSentinel.js.map +1 -1
- package/dist/monitoring/guardManifest.d.ts +67 -0
- package/dist/monitoring/guardManifest.d.ts.map +1 -0
- package/dist/monitoring/guardManifest.js +536 -0
- package/dist/monitoring/guardManifest.js.map +1 -0
- package/dist/monitoring/guardPosture.d.ts +77 -0
- package/dist/monitoring/guardPosture.d.ts.map +1 -0
- package/dist/monitoring/guardPosture.js +198 -0
- package/dist/monitoring/guardPosture.js.map +1 -0
- package/dist/monitoring/guardPostureView.d.ts +100 -0
- package/dist/monitoring/guardPostureView.d.ts.map +1 -0
- package/dist/monitoring/guardPostureView.js +294 -0
- package/dist/monitoring/guardPostureView.js.map +1 -0
- package/dist/monitoring/probes/GuardPostureProbe.d.ts +82 -0
- package/dist/monitoring/probes/GuardPostureProbe.d.ts.map +1 -0
- package/dist/monitoring/probes/GuardPostureProbe.js +384 -0
- package/dist/monitoring/probes/GuardPostureProbe.js.map +1 -0
- package/dist/scaffold/templates.d.ts.map +1 -1
- package/dist/scaffold/templates.js +9 -0
- package/dist/scaffold/templates.js.map +1 -1
- package/dist/scheduler/JobScheduler.d.ts +10 -0
- package/dist/scheduler/JobScheduler.d.ts.map +1 -1
- package/dist/scheduler/JobScheduler.js +12 -0
- package/dist/scheduler/JobScheduler.js.map +1 -1
- package/dist/server/AgentServer.d.ts +8 -0
- package/dist/server/AgentServer.d.ts.map +1 -1
- package/dist/server/AgentServer.js +2 -0
- package/dist/server/AgentServer.js.map +1 -1
- package/dist/server/CapabilityIndex.d.ts.map +1 -1
- package/dist/server/CapabilityIndex.js +11 -0
- package/dist/server/CapabilityIndex.js.map +1 -1
- package/dist/server/peerUrlGuard.d.ts +35 -0
- package/dist/server/peerUrlGuard.d.ts.map +1 -0
- package/dist/server/peerUrlGuard.js +93 -0
- package/dist/server/peerUrlGuard.js.map +1 -0
- package/dist/server/routes.d.ts +14 -0
- package/dist/server/routes.d.ts.map +1 -1
- package/dist/server/routes.js +239 -25
- package/dist/server/routes.js.map +1 -1
- package/package.json +3 -2
- package/scripts/lint-guard-manifest.js +264 -0
- package/scripts/lint-no-direct-destructive.js +4 -0
- package/scripts/lint-no-mainthread-cartographer-walk.js +101 -0
- package/src/data/builtin-manifest.json +65 -65
- package/src/data/state-coherence-registry.json +54 -18
- package/src/scaffold/templates.ts +9 -0
- package/upgrades/1.3.491.md +37 -0
- package/upgrades/1.3.492.md +31 -0
- package/upgrades/side-effects/cartographer-sweep-eventloop-safety.md +110 -0
- package/upgrades/side-effects/guard-posture-endpoint.md +101 -0
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GuardPostureStore — durable last-known guard posture per machine
|
|
3
|
+
* (GUARD-POSTURE-ENDPOINT-SPEC §2.3(c)).
|
|
4
|
+
*
|
|
5
|
+
* The in-memory pool registry is rebuilt from heartbeats, so last-known
|
|
6
|
+
* posture would evaporate on a local server restart — defeating dark-peer
|
|
7
|
+
* honesty in exactly the GAP-001 topology (a week-dark Mini + the laptop's
|
|
8
|
+
* routine update restarts). This store persists each machine's most recent
|
|
9
|
+
* posture block alongside the RECEIVER-side receipt time, reloads at boot,
|
|
10
|
+
* and lets the pool view render "as of <age> ago" for a peer that has been
|
|
11
|
+
* dark for days.
|
|
12
|
+
*
|
|
13
|
+
* Identity rule: callers key records on the REGISTRY's machine identity
|
|
14
|
+
* (the heartbeat ingestion chokepoint already does) — a body-claimed
|
|
15
|
+
* machineId never reaches this store.
|
|
16
|
+
*/
|
|
17
|
+
import fs from 'node:fs';
|
|
18
|
+
import path from 'node:path';
|
|
19
|
+
/** Field-wise posture equality EXCLUDING generatedAt (which changes every
|
|
20
|
+
* beat by construction and must not defeat write-on-change). */
|
|
21
|
+
export function postureSemanticsEqual(a, b) {
|
|
22
|
+
return (a.onConfirmed === b.onConfirmed &&
|
|
23
|
+
a.onUnverified === b.onUnverified &&
|
|
24
|
+
a.onStale === b.onStale &&
|
|
25
|
+
a.onDryRun === b.onDryRun &&
|
|
26
|
+
a.offDeviant === b.offDeviant &&
|
|
27
|
+
a.offRuntimeDivergent === b.offRuntimeDivergent &&
|
|
28
|
+
a.divergedPendingRestart === b.divergedPendingRestart &&
|
|
29
|
+
a.errored === b.errored &&
|
|
30
|
+
a.missing === b.missing &&
|
|
31
|
+
a.offDeviantKeys.length === b.offDeviantKeys.length &&
|
|
32
|
+
a.offDeviantKeys.every((k, i) => k === b.offDeviantKeys[i]) &&
|
|
33
|
+
a.offRuntimeDivergentKeys.length === b.offRuntimeDivergentKeys.length &&
|
|
34
|
+
a.offRuntimeDivergentKeys.every((k, i) => k === b.offRuntimeDivergentKeys[i]));
|
|
35
|
+
}
|
|
36
|
+
export class GuardPostureStore {
|
|
37
|
+
filePath;
|
|
38
|
+
machines = {};
|
|
39
|
+
constructor(stateDir) {
|
|
40
|
+
this.filePath = path.join(stateDir, 'state', 'guard-posture-peers.json');
|
|
41
|
+
this.load();
|
|
42
|
+
}
|
|
43
|
+
load() {
|
|
44
|
+
try {
|
|
45
|
+
const parsed = JSON.parse(fs.readFileSync(this.filePath, 'utf-8'));
|
|
46
|
+
if (parsed && typeof parsed === 'object' && parsed.machines && typeof parsed.machines === 'object') {
|
|
47
|
+
// Retention bound: a peer dark beyond 90 days drops to "unknown"
|
|
48
|
+
// rather than rendering a quarter-year-old posture forever (and the
|
|
49
|
+
// file stays bounded across pool churn).
|
|
50
|
+
const cutoff = Date.now() - 90 * 24 * 60 * 60 * 1000;
|
|
51
|
+
this.machines = Object.fromEntries(Object.entries(parsed.machines).filter(([, v]) => (v?.receivedAtMs ?? 0) >= cutoff));
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
// @silent-fallback-ok — absent/corrupt store starts empty; the next
|
|
56
|
+
// heartbeat repopulates it. Posture honesty degrades to "unknown",
|
|
57
|
+
// never to invented data.
|
|
58
|
+
this.machines = {};
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/** Persist a machine's posture (write-on-change: a SEMANTICALLY unchanged
|
|
62
|
+
* posture refreshes nothing on disk, so the 30s heartbeat loop doesn't
|
|
63
|
+
* churn fs — `generatedAt` is always fresh and deliberately excluded from
|
|
64
|
+
* the comparison; perf review 2026-06-12 finding #2). */
|
|
65
|
+
record(machineId, posture, receivedAtMs) {
|
|
66
|
+
const prev = this.machines[machineId];
|
|
67
|
+
this.machines[machineId] = { posture, receivedAtMs };
|
|
68
|
+
if (prev && postureSemanticsEqual(prev.posture, posture))
|
|
69
|
+
return;
|
|
70
|
+
try {
|
|
71
|
+
fs.mkdirSync(path.dirname(this.filePath), { recursive: true });
|
|
72
|
+
const tmp = `${this.filePath}.tmp`;
|
|
73
|
+
/* state-registry: guard-posture-peers */
|
|
74
|
+
fs.writeFileSync(tmp, JSON.stringify({ version: 1, machines: this.machines }, null, 2));
|
|
75
|
+
fs.renameSync(tmp, this.filePath);
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
// @silent-fallback-ok — a failed persist keeps the in-memory copy
|
|
79
|
+
// serving; durability degrades for this beat only and the next changed
|
|
80
|
+
// beat retries.
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
get(machineId) {
|
|
84
|
+
return this.machines[machineId] ?? null;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=GuardPostureStore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GuardPostureStore.js","sourceRoot":"","sources":["../../src/core/GuardPostureStore.ts"],"names":[],"mappings":"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"}
|
|
@@ -51,6 +51,11 @@ export interface HeartbeatObservation {
|
|
|
51
51
|
/** The machine's self-reported LLM-account quota state (quota-aware placement,
|
|
52
52
|
* 2026-06-05). Absent = unknown (older heartbeats) = treated as not blocked. */
|
|
53
53
|
quotaState?: MachineCapacity['quotaState'];
|
|
54
|
+
/** Compact guard-posture summary (GUARD-POSTURE-ENDPOINT-SPEC §2.3). The
|
|
55
|
+
* caller keys the observation on the REGISTRY's machine identity — this
|
|
56
|
+
* field is the peer's self-reported DATA, never its identity. Absent =
|
|
57
|
+
* older peer / no posture (renders "unknown"). */
|
|
58
|
+
guardPosture?: MachineCapacity['guardPosture'];
|
|
54
59
|
}
|
|
55
60
|
export interface MachinePoolRegistryDeps {
|
|
56
61
|
/** Returns {machineId, nickname, hardware?, capabilities?} for every known machine. */
|
|
@@ -71,6 +76,17 @@ export interface MachinePoolRegistryDeps {
|
|
|
71
76
|
/** Fired when a machine is removed from placement for clock skew (Attention item). */
|
|
72
77
|
onClockQuarantine?: (machineId: string, reason: string) => void;
|
|
73
78
|
logger?: (msg: string) => void;
|
|
79
|
+
/** Durable last-known guard posture (GUARD-POSTURE-ENDPOINT-SPEC §2.3(c)).
|
|
80
|
+
* When wired, every posture-carrying heartbeat persists, and `assemble`
|
|
81
|
+
* falls back to the stored copy (with its REAL receipt age) for a machine
|
|
82
|
+
* with no live observation — dark-peer honesty across local restarts. */
|
|
83
|
+
postureStore?: {
|
|
84
|
+
record: (machineId: string, posture: NonNullable<MachineCapacity['guardPosture']>, receivedAtMs: number) => void;
|
|
85
|
+
get: (machineId: string) => {
|
|
86
|
+
posture: NonNullable<MachineCapacity['guardPosture']>;
|
|
87
|
+
receivedAtMs: number;
|
|
88
|
+
} | null;
|
|
89
|
+
} | null;
|
|
74
90
|
}
|
|
75
91
|
/**
|
|
76
92
|
* Tracks live per-machine state (router-observed timestamp + clock-skew FSM) and
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MachinePoolRegistry.d.ts","sourceRoot":"","sources":["../../src/core/MachinePoolRegistry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAIpF,+DAA+D;AAC/D,wBAAgB,eAAe,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,eAAe,CAWvE;AAID,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,eAAe,CAAC;IACxB,2FAA2F;IAC3F,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,MAAM,mBAAmB,GAC3B,MAAM,GACN,QAAQ,GACR,SAAS,GACT,OAAO,GACP,aAAa,CAAC;AAElB,eAAO,MAAM,wBAAwB,EAAE,iBAA0D,CAAC;AAElG;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,iBAAiB,EAC1B,SAAS,EAAE,OAAO,GACjB;IAAE,IAAI,EAAE,iBAAiB,CAAC;IAAC,UAAU,EAAE,mBAAmB,CAAA;CAAE,CAyB9D;AAED,wEAAwE;AACxE,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAE3E;AAID,oEAAoE;AACpE,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,uEAAuE;IACvE,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,eAAe,CAAC,aAAa,CAAC,CAAC;IAC7C,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;qFACiF;IACjF,UAAU,CAAC,EAAE,eAAe,CAAC,YAAY,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"MachinePoolRegistry.d.ts","sourceRoot":"","sources":["../../src/core/MachinePoolRegistry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAIpF,+DAA+D;AAC/D,wBAAgB,eAAe,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,eAAe,CAWvE;AAID,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,eAAe,CAAC;IACxB,2FAA2F;IAC3F,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,MAAM,mBAAmB,GAC3B,MAAM,GACN,QAAQ,GACR,SAAS,GACT,OAAO,GACP,aAAa,CAAC;AAElB,eAAO,MAAM,wBAAwB,EAAE,iBAA0D,CAAC;AAElG;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,iBAAiB,EAC1B,SAAS,EAAE,OAAO,GACjB;IAAE,IAAI,EAAE,iBAAiB,CAAC;IAAC,UAAU,EAAE,mBAAmB,CAAA;CAAE,CAyB9D;AAED,wEAAwE;AACxE,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAE3E;AAID,oEAAoE;AACpE,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,uEAAuE;IACvE,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,eAAe,CAAC,aAAa,CAAC,CAAC;IAC7C,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;qFACiF;IACjF,UAAU,CAAC,EAAE,eAAe,CAAC,YAAY,CAAC,CAAC;IAC3C;;;uDAGmD;IACnD,YAAY,CAAC,EAAE,eAAe,CAAC,cAAc,CAAC,CAAC;CAChD;AAED,MAAM,WAAW,uBAAuB;IACtC,uFAAuF;IACvF,YAAY,EAAE,MAAM,KAAK,CAAC;QACxB,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,eAAe,CAAC;QAC3B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;QACxB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;QAC3B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;KAC3B,CAAC,CAAC;IACH,4CAA4C;IAC5C,oBAAoB,EAAE,MAAM,CAAC;IAC7B,oEAAoE;IACpE,mBAAmB,EAAE,MAAM,CAAC;IAC5B,yCAAyC;IACzC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,sFAAsF;IACtF,iBAAiB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAChE,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B;;;8EAG0E;IAC1E,YAAY,CAAC,EAAE;QACb,MAAM,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC,EAAE,YAAY,EAAE,MAAM,KAAK,IAAI,CAAC;QACjH,GAAG,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK;YAAE,OAAO,EAAE,WAAW,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC,CAAC;YAAC,YAAY,EAAE,MAAM,CAAA;SAAE,GAAG,IAAI,CAAC;KACpH,GAAG,IAAI,CAAC;CACV;AAED;;;;GAIG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,CAAC,CAA0B;IAC5C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAWrB;gBAEQ,IAAI,EAAE,uBAAuB;IAIzC,OAAO,CAAC,GAAG;IAIX,uFAAuF;IACvF,eAAe,CAAC,GAAG,EAAE,oBAAoB,GAAG,mBAAmB;IAkC/D,0EAA0E;IAC1E,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,eAAe;IAInD,uEAAuE;IACvE,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAK/C,sFAAsF;IACtF,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI;IAMtD,qEAAqE;IACrE,aAAa,IAAI,eAAe,EAAE;IAIlC,OAAO,CAAC,QAAQ;CA0CjB"}
|
|
@@ -95,7 +95,17 @@ export class MachinePoolRegistry {
|
|
|
95
95
|
}
|
|
96
96
|
}
|
|
97
97
|
const { next, sideEffect } = clockSkewTransition(prev?.skew ?? INITIAL_CLOCK_SKEW_STATE, divergent);
|
|
98
|
-
|
|
98
|
+
// Posture handling (GUARD-POSTURE-ENDPOINT-SPEC §2.3): a beat WITH a block
|
|
99
|
+
// stamps a fresh receiver-side receipt time and persists durably; a beat
|
|
100
|
+
// WITHOUT one (older peer / lighter beat) carries the previous block
|
|
101
|
+
// forward UNCHANGED — including its original receipt time, so the
|
|
102
|
+
// rendered age stays honest.
|
|
103
|
+
let posture = prev?.posture;
|
|
104
|
+
if (obs.guardPosture) {
|
|
105
|
+
posture = { block: obs.guardPosture, receivedAtMs: nowMs };
|
|
106
|
+
this.d.postureStore?.record(obs.machineId, obs.guardPosture, nowMs);
|
|
107
|
+
}
|
|
108
|
+
this.observed.set(obs.machineId, { routerReceivedAtMs: nowMs, obs, skew: next, posture });
|
|
99
109
|
if (sideEffect === 'removed') {
|
|
100
110
|
this.d.onClockQuarantine?.(obs.machineId, `clock divergence > ${this.d.clockSkewToleranceMs}ms on 2 consecutive heartbeats — removed from placement`);
|
|
101
111
|
this.d.logger?.(`[pool] machine ${obs.machineId} clock-skew quarantined`);
|
|
@@ -145,6 +155,19 @@ export class MachinePoolRegistry {
|
|
|
145
155
|
hardware: known.hardware,
|
|
146
156
|
clockSkewStatus: live?.skew.status ?? 'ok',
|
|
147
157
|
quotaState: live?.obs.quotaState,
|
|
158
|
+
// Guard posture: live observation first, durable last-known second —
|
|
159
|
+
// a machine with no posture EVER received carries neither field
|
|
160
|
+
// (renders "guards: unknown", never "0 on / 0 off").
|
|
161
|
+
...(() => {
|
|
162
|
+
const p = live?.posture ?? this.d.postureStore?.get(known.machineId) ?? null;
|
|
163
|
+
if (!p)
|
|
164
|
+
return {};
|
|
165
|
+
const block = 'block' in p ? p.block : p.posture;
|
|
166
|
+
return {
|
|
167
|
+
guardPosture: block,
|
|
168
|
+
guardPostureReceivedAt: new Date(p.receivedAtMs).toISOString(),
|
|
169
|
+
};
|
|
170
|
+
})(),
|
|
148
171
|
};
|
|
149
172
|
}
|
|
150
173
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MachinePoolRegistry.js","sourceRoot":"","sources":["../../src/core/MachinePoolRegistry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AAGzB,wEAAwE;AAExE,+DAA+D;AAC/D,MAAM,UAAU,eAAe,CAAC,aAAsB;IACpD,MAAM,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC;IACvB,OAAO;QACL,QAAQ,EAAE,EAAE,CAAC,QAAQ,EAAE;QACvB,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE;QACf,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,SAAS;QAC7C,QAAQ,EAAE,IAAI,CAAC,MAAM;QACrB,aAAa,EAAE,EAAE,CAAC,QAAQ,EAAE;QAC5B,QAAQ,EAAE,EAAE,CAAC,QAAQ,EAAE;QACvB,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC5C,CAAC;AACJ,CAAC;AAiBD,MAAM,CAAC,MAAM,wBAAwB,GAAsB,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC,EAAE,CAAC;AAElG;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CACjC,OAA0B,EAC1B,SAAkB;IAElB,QAAQ,OAAO,CAAC,MAAM,EAAE,CAAC;QACvB,KAAK,IAAI;YACP,OAAO,SAAS;gBACd,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,0BAA0B,EAAE,iBAAiB,EAAE,CAAC,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE;gBAC9F,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;QAC3E,KAAK,0BAA0B;YAC7B,OAAO,SAAS;gBACd,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,CAAC,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE;gBAC5F,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;QAC5E,KAAK,uBAAuB;YAC1B,IAAI,SAAS,EAAE,CAAC;gBACd,OAAO,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,CAAC,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;YACjG,CAAC;YACD,iEAAiE;YACjE,IAAI,OAAO,CAAC,iBAAiB,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBACvC,OAAO,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC,EAAE,EAAE,UAAU,EAAE,aAAa,EAAE,CAAC;YACrF,CAAC;YACD,OAAO;gBACL,IAAI,EAAE,EAAE,MAAM,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,OAAO,CAAC,iBAAiB,GAAG,CAAC,EAAE;gBAC3F,UAAU,EAAE,MAAM;aACnB,CAAC;QACJ;YACE,OAAO,EAAE,IAAI,EAAE,wBAAwB,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;IAClE,CAAC;AACH,CAAC;AAED,wEAAwE;AACxE,MAAM,UAAU,0BAA0B,CAAC,MAAuB;IAChE,OAAO,MAAM,KAAK,uBAAuB,CAAC;AAC5C,CAAC;
|
|
1
|
+
{"version":3,"file":"MachinePoolRegistry.js","sourceRoot":"","sources":["../../src/core/MachinePoolRegistry.ts"],"names":[],"mappings":"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"}
|
|
@@ -66,6 +66,14 @@ export interface PeerCapacity {
|
|
|
66
66
|
blockedUntil?: string;
|
|
67
67
|
reason?: string;
|
|
68
68
|
};
|
|
69
|
+
/**
|
|
70
|
+
* The peer's compact guard-posture summary (GUARD-POSTURE-ENDPOINT-SPEC
|
|
71
|
+
* §2.3). Carried in the peer's session-status response (its
|
|
72
|
+
* getCapacity(self) includes it); the A2 lesson above applies verbatim —
|
|
73
|
+
* narrowing it away on receive would blind the pool view to every peer's
|
|
74
|
+
* posture. Absent from old peers = no posture ("guards: unknown").
|
|
75
|
+
*/
|
|
76
|
+
guardPosture?: import('./types.js').GuardPostureSummary;
|
|
69
77
|
}
|
|
70
78
|
/** One stream slice of a journal-sync delta (mirrors MeshRpc's `journal-sync.batch`). */
|
|
71
79
|
export interface JournalDeltaStream {
|
|
@@ -95,6 +103,7 @@ export interface PeerPresencePullerDeps {
|
|
|
95
103
|
blockedUntil?: string;
|
|
96
104
|
reason?: string;
|
|
97
105
|
};
|
|
106
|
+
guardPosture?: import('./types.js').GuardPostureSummary;
|
|
98
107
|
}) => void;
|
|
99
108
|
/** Wall clock — injectable for tests. Defaults to `Date`. */
|
|
100
109
|
now?: () => Date;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PeerPresencePuller.d.ts","sourceRoot":"","sources":["../../src/core/PeerPresencePuller.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,6FAA6F;AAC7F,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CACpB;AAED,sFAAsF;AACtF,MAAM,WAAW,YAAY;IAC3B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACzE;;;;OAIG;IACH,iBAAiB,CAAC,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAA;KAAE,CAAC;IACpE;;;;;;;OAOG;IACH,UAAU,CAAC,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"PeerPresencePuller.d.ts","sourceRoot":"","sources":["../../src/core/PeerPresencePuller.ts"],"names":[],"mappings":"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"}
|
|
@@ -47,7 +47,7 @@ export class PeerPresencePuller {
|
|
|
47
47
|
if (!cap)
|
|
48
48
|
return null;
|
|
49
49
|
const seen = cap.selfReportedLastSeen ?? (this.d.now?.() ?? new Date()).toISOString();
|
|
50
|
-
this.d.recordHeartbeat({ machineId: m.machineId, selfReportedLastSeen: seen, loadAvg: cap.loadAvg, ...(cap.quotaState ? { quotaState: cap.quotaState } : {}) });
|
|
50
|
+
this.d.recordHeartbeat({ machineId: m.machineId, selfReportedLastSeen: seen, loadAvg: cap.loadAvg, ...(cap.quotaState ? { quotaState: cap.quotaState } : {}), ...(cap.guardPosture ? { guardPosture: cap.guardPosture } : {}) });
|
|
51
51
|
// REPLICATION-GATED journal-delta drive — only when the server wired the
|
|
52
52
|
// delta deps (i.e. replication.enabled === true). Otherwise a complete
|
|
53
53
|
// no-op (engine/transport stay dark). Never throws into the puller.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PeerPresencePuller.js","sourceRoot":"","sources":["../../src/core/PeerPresencePuller.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;
|
|
1
|
+
{"version":3,"file":"PeerPresencePuller.js","sourceRoot":"","sources":["../../src/core/PeerPresencePuller.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PostUpdateMigrator.d.ts","sourceRoot":"","sources":["../../src/core/PostUpdateMigrator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAwCH,OAAO,EAEL,KAAK,YAAY,EACjB,KAAK,qBAAqB,EAC3B,MAAM,yBAAyB,CAAC;AAyBjC,MAAM,WAAW,eAAe;IAC9B,wBAAwB;IACxB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,kCAAkC;IAClC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,2CAA2C;IAC3C,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,MAAM,CAAiB;IAC/B;;;;;;OAMG;IACH,OAAO,CAAC,UAAU,CAAiC;gBAEvC,MAAM,EAAE,cAAc;IAIlC;;;;;;;;;;;;;;OAcG;IACH,OAAO,CAAC,oBAAoB;IA0B5B;;;;;;;;;;;OAWG;IACH,YAAY,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI;IAItC;;;;;;OAMG;IACG,eAAe,CACnB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,qBAAqB,CAAC;IAIjC,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,kBAAkB;IAO1B;;;;OAIG;IACH,OAAO,CAAC,YAAY;IASpB;;;OAGG;IACH,OAAO,IAAI,eAAe;IA2E1B,OAAO,CAAC,0BAA0B;IAqElC;;;;;;;;;;;;;;;;;;OAkBG;IACH,OAAO,CAAC,uCAAuC;IAqC/C;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,0BAA0B;IAmFlC,OAAO,CAAC,0BAA0B;IAmDlC;;;;;;;;;;OAUG;IACH,OAAO,CAAC,kCAAkC;IAwH1C;;;;;;;;;;;;;;;;;;;OAmBG;IACH,OAAO,CAAC,kCAAkC;IA8C1C;;;;;;;;OAQG;IACH,OAAO,CAAC,kCAAkC;IA2B1C,OAAO,CAAC,uBAAuB;IAwE/B,OAAO,CAAC,4CAA4C;IA+CpD;;;;;;;OAOG;IACH,OAAO,CAAC,iCAAiC;IA0BzC;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,oCAAoC;IAmB5C;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,yCAAyC;IAWjD;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,kCAAkC;IAW1C,OAAO,CAAC,yBAAyB;IA6FjC;;;;;;;;;;OAUG;IACG,YAAY,IAAI,OAAO,CAAC,eAAe,CAAC;YA4BhC,uBAAuB;IAkGrC,OAAO,CAAC,0BAA0B;IAkGlC,OAAO,CAAC,0BAA0B;IAoElC,OAAO,CAAC,oBAAoB;IAuH5B,OAAO,CAAC,8BAA8B;IA2EtC;;;;OAIG;IACH,OAAO,CAAC,gBAAgB;IAaxB;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,0BAA0B;IA8BlC;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,4BAA4B;IAwBpC;;;;;;;;;;OAUG;IACH,OAAO,CAAC,sBAAsB;IAwB9B;;;;;;;;;OASG;IACH,OAAO,CAAC,wCAAwC;IAuBhD;;;;;;;;OAQG;IACH,OAAO,CAAC,2CAA2C;IAuBnD;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,kCAAkC;IAuB1C;;;;;;;;;;;;;;;;OAgBG;IACH,OAAO,CAAC,mCAAmC;IAmK3C;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAW5B;;;;;;;;;OASG;IACH,OAAO,CAAC,kBAAkB;IA2B1B;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;IACH,OAAO,CAAC,yBAAyB;IA4HjC;6EACyE;IACzE,OAAO,CAAC,wBAAwB;IAShC;sDACkD;IAClD,OAAO,CAAC,wBAAwB;IAQhC;;;;OAIG;IACH,OAAO,CAAC,YAAY;IAkQpB;;;;;;;;OAQG;IACH,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,GAAG,IAAI;IA6CvE;;;;OAIG;IACH,OAAO,CAAC,iBAAiB;IAkEzB;;;OAGG;IACH,OAAO,CAAC,wBAAwB;IAkChC;;;;;;;;;OASG;IACH,OAAO,CAAC,wBAAwB;IAoEhC;;;;;;OAMG;IACH,OAAO,CAAC,oBAAoB;IAiE5B;;;;;OAKG;IACH,OAAO,CAAC,2BAA2B;IA8BnC;;;;OAIG;IACH,OAAO,CAAC,wBAAwB;IAyIhC;;;;;;OAMG;IACH,OAAO,CAAC,8BAA8B;IAwDtC,OAAO,CAAC,0BAA0B;IA8DlC;;;OAGG;IACH,OAAO,CAAC,eAAe;
|
|
1
|
+
{"version":3,"file":"PostUpdateMigrator.d.ts","sourceRoot":"","sources":["../../src/core/PostUpdateMigrator.ts"],"names":[],"mappings":"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"}
|
|
@@ -3042,6 +3042,14 @@ setTimeout(() => process.exit(0), 2000);
|
|
|
3042
3042
|
patched = true;
|
|
3043
3043
|
result.upgraded.push('CLAUDE.md: added Cartographer Doc-Freshness section');
|
|
3044
3044
|
}
|
|
3045
|
+
// Event-loop safety (fix instar#1069) — /health + /stale now serve a cached
|
|
3046
|
+
// snapshot; freshnessSweep.framework is the supported off-Claude routing knob.
|
|
3047
|
+
// Keyed on its OWN marker so it is idempotent and independent of the blocks above.
|
|
3048
|
+
if (!content.includes('serves a cached snapshot')) {
|
|
3049
|
+
content += `\n### Cartographer event-loop safety (fix instar#1069)\n\nThe cartographer never runs a whole-tree walk on the server's event loop: the freshness sweep's "what's stale?" detect runs in a worker thread, and every \`/cartographer/*\` read route **serves a cached snapshot** instead of recomputing live.\n- \`GET /cartographer/health\` + \`GET /cartographer/stale\` carry \`snapshot\` (\`present\`/\`absent\`/\`detect-failing\`), \`generatedAt\`, \`headSha\`, \`snapshotStale\`, and \`lastDetectStatus\`. \`absent\` just means no detect has run yet — not an error. \`/stale\` is a bounded sample with a \`total\` + \`truncated\` flag.\n- The off-Claude model is selected by \`cartographer.freshnessSweep.framework\` (default \`codex-cli\`) — a manual \`sessions.componentFrameworks\` override is no longer required. The boot log line \`Cartographer sweep routing: <fw> (source: …)\` shows what resolved.\n- Rollback knob: \`cartographer.freshnessSweep.detectInWorker: false\` runs the SAME bounded detect synchronously (still never the old full walk).\n`;
|
|
3050
|
+
patched = true;
|
|
3051
|
+
result.upgraded.push('CLAUDE.md: added Cartographer event-loop-safety section');
|
|
3052
|
+
}
|
|
3045
3053
|
// Standards Enforcement Coverage (cartographer-conformance-audit spec #3) — the
|
|
3046
3054
|
// registry-wide enforcement-coverage audit. Keyed on this spec's OWN marker
|
|
3047
3055
|
// ('Standards Enforcement Coverage') so it is independent of specs #1/#2 and
|
|
@@ -3846,8 +3854,11 @@ Beyond the one-awake-machine model: with the pool enabled I run conversations ac
|
|
|
3846
3854
|
// section predate GET /sessions?scope=pool (every session, every machine, each
|
|
3847
3855
|
// tagged with its machine — the dashboard cross-machine sessions list). Append
|
|
3848
3856
|
// the line so deployed agents can answer "what's running across my machines?"
|
|
3849
|
-
// from the API. Idempotent via the unique `scope=pool` marker
|
|
3850
|
-
|
|
3857
|
+
// from the API. Idempotent via the unique `sessions?scope=pool` marker
|
|
3858
|
+
// (route-qualified: other sections legitimately mention `?scope=pool` for
|
|
3859
|
+
// their own routes — e.g. the Guard Posture section's /guards?scope=pool —
|
|
3860
|
+
// so a bare `scope=pool` sniff would falsely block this append).
|
|
3861
|
+
if (content.includes('Multi-Machine Session Pool (active-active') && !content.includes('sessions?scope=pool')) {
|
|
3851
3862
|
const poolSessions = `
|
|
3852
3863
|
- **Every session, every machine:** the dashboard sessions list shows ALL sessions across the pool, each tagged with the machine it runs on. API: \`GET /sessions?scope=pool\` → \`{ sessions: [...each with machineId/machineNickname...], pool: { peersOk, failed } }\`. An unreachable peer degrades to a \`failed\` entry — local sessions always answer.
|
|
3853
3864
|
- **Post-transfer closeout (automatic):** when a topic moves to another machine, the OLD machine's session for it is closed automatically (immediately on an explicit "move", or within ~2 reaper ticks for any other path) — no duplicate sessions doing duplicate work. The close is recorded in the reap-log with reason "topic moved to <machine>"; protected sessions are never auto-closed.
|
|
@@ -3982,6 +3993,31 @@ At every server boot the guard posture (every \`monitoring.*\` enabled flag + \`
|
|
|
3982
3993
|
else {
|
|
3983
3994
|
result.skipped.push('CLAUDE.md: Guard-Posture Tripwire section already present');
|
|
3984
3995
|
}
|
|
3996
|
+
// Guard Posture endpoint (GUARD-POSTURE-ENDPOINT-SPEC §4 Agent Awareness +
|
|
3997
|
+
// §2.5 interim hazard containment). The tripwire section above only covers
|
|
3998
|
+
// boot-time TRANSITIONS; this teaches the steady-state read surface
|
|
3999
|
+
// (GET /guards, ?scope=pool) plus the PATCH /config one-level-deep-merge
|
|
4000
|
+
// hazard (a partial block erases sibling tuning — lived 2026-06-11).
|
|
4001
|
+
// Byte-identical to the generateClaudeMd block (Migration Parity).
|
|
4002
|
+
// Idempotent via content-sniffing on the section heading.
|
|
4003
|
+
if (!content.includes('Guard Posture — which safety systems are genuinely on')) {
|
|
4004
|
+
const section = `
|
|
4005
|
+
### Guard Posture — which safety systems are genuinely on (\`GET /guards\`)
|
|
4006
|
+
|
|
4007
|
+
Every guard (monitoring sentinels, reapers, the scheduler, …) is graded by what can be VERIFIED, never by what the config wishes: \`on-confirmed\` / \`on-unverified\` / \`on-stale\` / \`on-dry-run\` / \`off\` (\`dark-default\` = ships-dark, quiet vs \`diverged-from-default\` = default-on but currently off — the load-shed signature) / \`diverged-pending-restart\` / \`errored\` / \`missing\` / \`off-runtime-divergent\`. Only the "off that shouldn't be off" and runtime-contradiction classes alert — a ships-dark feature that is off is normal, never noise.
|
|
4008
|
+
- This machine: \`curl -H "Authorization: Bearer $AUTH" http://localhost:${port}/guards\`
|
|
4009
|
+
- Every machine (heartbeat-fresh, or last-known posture with its age for a dark peer): \`curl -H "Authorization: Bearer $AUTH" "http://localhost:${port}/guards?scope=pool"\`
|
|
4010
|
+
- **When to use** (PROACTIVE — this is the trigger): "are my guards on?" / "why didn't the watchdog/reaper fire on machine X?" / a post-incident sweep after ANY load-shed → read \`/guards?scope=pool\` and report the deviant rows instead of guessing from config memory. The Machines dashboard tab shows each machine's last-known posture with its age — even for a peer that is currently dark.
|
|
4011
|
+
- **HAZARD — re-enabling a guard via \`PATCH /config\`**: send the guard's FULL config block (the merge is one-level-deep and a partial block erases sibling tuning); read the current block from the source machine first (\`GET /guards\` shows posture; the config block itself comes from that machine's config).
|
|
4012
|
+
- Three complementary layers, one shared inventory: the Guard-Posture Tripwire covers enabled→disabled transitions at boot (\`logs/guard-posture.jsonl\`); \`/guards\` is the steady-state read; the GuardPostureProbe raises ONE aggregated Attention item when an anomaly persists across consecutive probes.
|
|
4013
|
+
`;
|
|
4014
|
+
content += '\n' + section;
|
|
4015
|
+
patched = true;
|
|
4016
|
+
result.upgraded.push('CLAUDE.md: added Guard Posture (/guards) capability section');
|
|
4017
|
+
}
|
|
4018
|
+
else {
|
|
4019
|
+
result.skipped.push('CLAUDE.md: Guard Posture (/guards) capability section already present');
|
|
4020
|
+
}
|
|
3985
4021
|
// AgentWorktreeReaper report (RESPONSIBLE-RESOURCE-USAGE — OS resource hygiene).
|
|
3986
4022
|
// Tells the agent the "which stale worktrees can be reclaimed?" read-surface
|
|
3987
4023
|
// exists. Without it, an agent asked about worktree disk/sprawl has no grounded
|
|
@@ -6215,6 +6251,11 @@ Create worktrees for collaborator repos with \`instar worktree create <branch>\`
|
|
|
6215
6251
|
// `git add .` path so contributors can't accidentally commit pr-gate
|
|
6216
6252
|
// secrets from the project directory.
|
|
6217
6253
|
this.addGitignoreEntry(projectGitignore, '.instar/secrets/pr-gate/', result, 'project .gitignore');
|
|
6254
|
+
// fix instar#1069: the cartographer index (67MB on a real tree) + the per-host
|
|
6255
|
+
// snapshot are per-machine runtime state, never committable. The header in
|
|
6256
|
+
// cartographer-freshness.mjs historically (wrongly) claimed this was gitignored;
|
|
6257
|
+
// this entry makes it true. Idempotent (addGitignoreEntry no-ops if present).
|
|
6258
|
+
this.addGitignoreEntry(projectGitignore, '.instar/cartographer/', result, 'project .gitignore');
|
|
6218
6259
|
}
|
|
6219
6260
|
/**
|
|
6220
6261
|
* PR-REVIEW-HARDENING Phase A — ensure pr-gate state paths are backed up.
|