@groundnuty/macf-core 0.2.44 → 0.2.46

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/dist/discovery.d.ts +59 -0
  2. package/dist/discovery.d.ts.map +1 -0
  3. package/dist/discovery.js +103 -0
  4. package/dist/discovery.js.map +1 -0
  5. package/dist/fleet-driver.d.ts +135 -0
  6. package/dist/fleet-driver.d.ts.map +1 -0
  7. package/dist/fleet-driver.js +44 -0
  8. package/dist/fleet-driver.js.map +1 -0
  9. package/dist/fleet-reconcile.d.ts +180 -0
  10. package/dist/fleet-reconcile.d.ts.map +1 -0
  11. package/dist/fleet-reconcile.js +249 -0
  12. package/dist/fleet-reconcile.js.map +1 -0
  13. package/dist/fleet-upgrade.d.ts +171 -0
  14. package/dist/fleet-upgrade.d.ts.map +1 -0
  15. package/dist/fleet-upgrade.js +177 -0
  16. package/dist/fleet-upgrade.js.map +1 -0
  17. package/dist/guest.d.ts +100 -0
  18. package/dist/guest.d.ts.map +1 -0
  19. package/dist/guest.js +120 -0
  20. package/dist/guest.js.map +1 -0
  21. package/dist/index.d.ts +8 -0
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +8 -0
  24. package/dist/index.js.map +1 -1
  25. package/dist/norm.d.ts +2 -2
  26. package/dist/prompt-responses.d.ts +208 -0
  27. package/dist/prompt-responses.d.ts.map +1 -0
  28. package/dist/prompt-responses.js +274 -0
  29. package/dist/prompt-responses.js.map +1 -0
  30. package/dist/registry/local-client.d.ts.map +1 -1
  31. package/dist/registry/local-client.js +15 -9
  32. package/dist/registry/local-client.js.map +1 -1
  33. package/dist/registry/registry.d.ts.map +1 -1
  34. package/dist/registry/registry.js +91 -27
  35. package/dist/registry/registry.js.map +1 -1
  36. package/dist/registry/types.d.ts +57 -12
  37. package/dist/registry/types.d.ts.map +1 -1
  38. package/dist/registry/types.js.map +1 -1
  39. package/dist/stall-signatures.d.ts +139 -0
  40. package/dist/stall-signatures.d.ts.map +1 -0
  41. package/dist/stall-signatures.js +219 -0
  42. package/dist/stall-signatures.js.map +1 -0
  43. package/dist/verify-green.d.ts +62 -0
  44. package/dist/verify-green.d.ts.map +1 -0
  45. package/dist/verify-green.js +53 -0
  46. package/dist/verify-green.js.map +1 -0
  47. package/package.json +1 -1
@@ -0,0 +1,274 @@
1
+ /**
2
+ * Interactive-prompt auto-responder — config schema, the Inv-2 ceremony-only
3
+ * classifier, and the pure Inv-1/Inv-3 frame matcher (DR-033, groundnuty/macf#645).
4
+ *
5
+ * SAFETY-CRITICAL. This module holds the *pure* logic behind the auto-responder:
6
+ * the config the operator curates in `.claude/.macf/prompt-responses.json`, the
7
+ * rules for what may go on the allowlist, and the frame-matching that decides
8
+ * whether a captured tmux pane is a KNOWN ceremony prompt we may answer. The
9
+ * shell watcher (`scripts/macf-prompt-watcher.sh`) reimplements the SAME
10
+ * algorithm in bash+jq for runtime; this module is the tested reference spec +
11
+ * the validator the CLI runs at `macf init/update/rules refresh`. The two MUST
12
+ * stay in lockstep — a change here is a change there.
13
+ *
14
+ * The three constitutional invariants (DR-033 §Decision):
15
+ *
16
+ * Inv 1 — allowlist-only. Only auto-answer a prompt matching a vetted entry.
17
+ * An unrecognized prompt-like frame → the caller ALERTs and does NOT answer.
18
+ * `matchPromptFrame` returns `unknown-prompt` for that case; the watcher
19
+ * turns it into a loud forensic-log + stderr alert. Silence-on-unknown beats
20
+ * a wrong answer.
21
+ *
22
+ * Inv 2 — ceremony-acks ONLY. The config loader HARD-REFUSES (drops) any entry
23
+ * whose signature material contains an authorization/destructive substring
24
+ * (`delete` / `overwrite` / `trust`) and LOUD-WARNS (keeps, operator-owned
25
+ * risk) on `(y/n)` / `allow` / `permission` / `grant`. This constrains what
26
+ * may go ON the allowlist — the stronger sibling of Inv 1.
27
+ *
28
+ * Inv 3 — the signature GUARANTEES the `send` still means the intended option.
29
+ * A structured signature (`frame_contains` + `option_text` at the `send`
30
+ * ordinal's rendered position) — NOT a fragile substring. A menu reorder /
31
+ * reword / insert breaks the match → falls through to Inv 1 (alert, don't
32
+ * answer) rather than firing a now-wrong ordinal. The signature is not "what
33
+ * prompt is this"; it is "is the world still exactly as the `send` assumes".
34
+ */
35
+ import { z } from 'zod';
36
+ import { MacfError } from './errors.js';
37
+ /** Config schema version. Bump on a breaking shape change. */
38
+ export const PROMPT_RESPONSES_SCHEMA_VERSION = '1';
39
+ /**
40
+ * Inv 2 — HARD-REFUSE substrings. An entry whose signature material contains any
41
+ * of these (case-insensitive) is DROPPED at load: the auto-responder must never
42
+ * answer a destructive-confirmation or a folder/tool-trust prompt, even if an
43
+ * operator tries to allowlist it (DR-033 OQ1 lean: hard-refuse the most
44
+ * dangerous). Kept in lockstep with `PROMPT_REFUSE_SUBSTRINGS` in the watcher.
45
+ * `revoke`/`remove` are the security/destructive siblings of `delete`/`trust`
46
+ * ("revoke token?" / "remove collaborator?") — same never-even-if-allowlisted
47
+ * class (science review of macf#645).
48
+ */
49
+ export const PROMPT_REFUSE_SUBSTRINGS = ['delete', 'overwrite', 'trust', 'revoke', 'remove'];
50
+ /**
51
+ * Inv 2 — LOUD-WARN substrings. An entry whose signature material contains any
52
+ * of these is KEPT (operator-owned risk) but flagged loudly at load: these lean
53
+ * authorization-shaped, so the operator should confirm they meant a ceremony ack
54
+ * and not a permission grant. Kept in lockstep with the watcher.
55
+ */
56
+ export const PROMPT_WARN_SUBSTRINGS = ['(y/n)', 'allow', 'permission', 'grant'];
57
+ /** Thrown when the prompt-responses config fails schema validation. */
58
+ export class PromptResponderError extends MacfError {
59
+ constructor(message) {
60
+ super('PROMPT_RESPONDER_ERROR', message);
61
+ this.name = 'PromptResponderError';
62
+ }
63
+ }
64
+ /**
65
+ * A single allowlist entry — the STRUCTURED signature that resolves DR-033 OQ2
66
+ * (Inv 3). `frame_contains` identifies WHICH prompt (all substrings must be
67
+ * present); `option_text` is the EXACT rendered text at the `send` ordinal's
68
+ * line, so `send`↔option binding is machine-checkable, not a fragile substring.
69
+ *
70
+ * - `frame_contains` — substrings that MUST ALL be present in the captured
71
+ * frame (Inv 1 identity). Requiring all present also doubles as the
72
+ * "wait for the full frame rendered" gate.
73
+ * - `option_text` — the exact rendered option text at the `send` position
74
+ * (Inv 3 binding). Must appear on a menu line numbered `send`.
75
+ * - `send` — the keystroke(s) to send, typically a menu ordinal ("1" / "2").
76
+ * - `verify_contains` — OPTIONAL expected substring of the POST-answer
77
+ * next-screen (Inv-A "verify the RIGHT outcome"). When set, the watcher
78
+ * asserts it appears after sending; when unset the watcher verifies
79
+ * signature-clearance only + logs that the outcome check was weaker.
80
+ * - `max_fires` — per-prompt fire cap (default 1). An auto-responder that
81
+ * fires repeatedly on a recurring pattern is itself a hazard.
82
+ *
83
+ * `.strict()` so an operator typo in a field name (e.g. `frame_contain`) is a
84
+ * loud validation error, not a silently-ignored field.
85
+ */
86
+ export const PromptResponseEntrySchema = z
87
+ .object({
88
+ name: z.string().min(1),
89
+ frame_contains: z.array(z.string().min(1)).min(1),
90
+ option_text: z.string().min(1),
91
+ send: z.string().min(1),
92
+ verify_contains: z.string().min(1).optional(),
93
+ max_fires: z.number().int().positive().default(1),
94
+ })
95
+ .strict();
96
+ /**
97
+ * The whole config. Top-level is deliberately NON-strict (unknown keys stripped,
98
+ * not rejected) so the shipped seed can carry a `_comment` operator-note field
99
+ * without failing validation. Entries stay strict.
100
+ */
101
+ export const PromptResponsesConfigSchema = z.object({
102
+ schema_version: z.literal(PROMPT_RESPONSES_SCHEMA_VERSION),
103
+ entries: z.array(PromptResponseEntrySchema).default([]),
104
+ });
105
+ /**
106
+ * The signature material Inv-2 classification scans: the entry's identifying
107
+ * fields, lowercased + joined. Deliberately includes `name` + every
108
+ * `frame_contains` needle + `option_text` — an authorization-shaped substring
109
+ * anywhere in what the entry MATCHES ON is enough to refuse/warn.
110
+ */
111
+ function signatureText(entry) {
112
+ return [entry.name, ...entry.frame_contains, entry.option_text].join('\n').toLowerCase();
113
+ }
114
+ /** First refuse/warn substring present in the entry, or undefined. */
115
+ function firstSubstring(entry, list) {
116
+ const hay = signatureText(entry);
117
+ return list.find((s) => hay.includes(s));
118
+ }
119
+ /**
120
+ * Classify an entry against the Inv-2 substring lists. `refuse` wins over `warn`
121
+ * (the destructive/trust list is checked first). Substring match is intentional
122
+ * and over-refuse-safe: better to reject a benignly-worded entry than to admit a
123
+ * dangerous one.
124
+ */
125
+ export function classifyPromptSignature(entry) {
126
+ if (firstSubstring(entry, PROMPT_REFUSE_SUBSTRINGS) !== undefined)
127
+ return 'refuse';
128
+ if (firstSubstring(entry, PROMPT_WARN_SUBSTRINGS) !== undefined)
129
+ return 'warn';
130
+ return 'ok';
131
+ }
132
+ /**
133
+ * Validate + Inv-2-filter a parsed config object. Throws `PromptResponderError`
134
+ * on a schema-invalid shape (loud — never silently proceed on a malformed
135
+ * config). Refuse-classified entries are dropped from `accepted`; warn-classified
136
+ * entries stay in `accepted` (operator-owned risk) but are also listed in
137
+ * `warned`.
138
+ */
139
+ export function loadPromptResponses(raw) {
140
+ const parsed = PromptResponsesConfigSchema.safeParse(raw);
141
+ if (!parsed.success) {
142
+ throw new PromptResponderError(`prompt-responses config is invalid: ${parsed.error.issues
143
+ .map((i) => `${i.path.join('.') || '<root>'}: ${i.message}`)
144
+ .join('; ')}`);
145
+ }
146
+ const accepted = [];
147
+ const refused = [];
148
+ const warned = [];
149
+ for (const entry of parsed.data.entries) {
150
+ const cls = classifyPromptSignature(entry);
151
+ if (cls === 'refuse') {
152
+ refused.push({ entry, matched: firstSubstring(entry, PROMPT_REFUSE_SUBSTRINGS) ?? '' });
153
+ continue; // Inv 2 hard-refuse: DROP — never expose to the matcher.
154
+ }
155
+ if (cls === 'warn') {
156
+ warned.push({ entry, matched: firstSubstring(entry, PROMPT_WARN_SUBSTRINGS) ?? '' });
157
+ }
158
+ accepted.push(entry);
159
+ }
160
+ return { accepted, refused, warned };
161
+ }
162
+ /**
163
+ * Prompt-like frame detector (Inv 1). A frame that matches no allowlist entry
164
+ * but LOOKS like an interactive prompt (a `❯` selector or a `(y/n)`-style
165
+ * confirmation) is the dangerous case: an unknown prompt we must NOT answer.
166
+ * Broad on purpose — false-positive (alert on a non-prompt) is cheap; a
167
+ * false-negative (miss a real unknown prompt) is the hazard.
168
+ */
169
+ export function looksPromptLike(frame) {
170
+ if (frame.includes('❯'))
171
+ return true;
172
+ return /\((?:y\/n|y\/N|Y\/n)\)|\[(?:y\/N|Y\/n|y\/n)\]/.test(frame);
173
+ }
174
+ /**
175
+ * Inv 3 binding: does `optionText` render on a menu line numbered `send`?
176
+ *
177
+ * For a numeric `send` (the common menu-ordinal case), the line containing
178
+ * `optionText` must, after stripping any leading selector glyph / whitespace
179
+ * (`❯ 1. …`), START with the `send` ordinal followed by a boundary — so a menu
180
+ * reorder that moves `optionText` to a differently-numbered line breaks the
181
+ * match. For a non-numeric `send` there is no ordinal to bind to, so presence of
182
+ * `optionText` is the binding (weaker; the seeds + realistic launch menus are
183
+ * numbered).
184
+ */
185
+ export function optionOnSendLine(frame, optionText, send) {
186
+ const numeric = /^[0-9]+$/.test(send);
187
+ for (const line of frame.split(/\r?\n/)) {
188
+ if (!line.includes(optionText))
189
+ continue;
190
+ if (!numeric)
191
+ return true;
192
+ // Strip the leading run of non-alphanumeric chars (whitespace + any
193
+ // selector glyph, incl. multibyte `❯`), then require the line to START with
194
+ // `send` followed by a non-alphanumeric boundary (or end-of-line), so `1`
195
+ // matches `1.` / `1)` / `1 ` but NOT `10`. Kept identical to the watcher's
196
+ // awk `_option_on_send_line`.
197
+ const stripped = line.replace(/^[^0-9A-Za-z]+/, '');
198
+ if (!stripped.startsWith(send))
199
+ continue;
200
+ const rest = stripped.charAt(send.length); // '' when send is the whole token
201
+ if (rest === '' || !/[0-9A-Za-z]/.test(rest))
202
+ return true;
203
+ }
204
+ return false;
205
+ }
206
+ /**
207
+ * Does the frame match this specific allowlist entry? All `frame_contains`
208
+ * present (Inv 1 identity + full-render gate) AND `option_text` present AND
209
+ * `option_text` on a line numbered `send` (Inv 3 binding).
210
+ */
211
+ export function entryMatchesFrame(frame, entry) {
212
+ for (const needle of entry.frame_contains) {
213
+ if (!frame.includes(needle))
214
+ return false;
215
+ }
216
+ if (!frame.includes(entry.option_text))
217
+ return false;
218
+ return optionOnSendLine(frame, entry.option_text, entry.send);
219
+ }
220
+ /**
221
+ * Match a captured tmux frame against the accepted allowlist (Inv 1 + Inv 3).
222
+ * Returns the first matching entry; else `unknown-prompt` when the frame looks
223
+ * prompt-like (→ caller alerts, never answers); else `none` (no prompt / the
224
+ * agent's own output).
225
+ */
226
+ export function matchPromptFrame(frame, entries) {
227
+ for (const entry of entries) {
228
+ if (entryMatchesFrame(frame, entry))
229
+ return { kind: 'match', entry };
230
+ }
231
+ return looksPromptLike(frame) ? { kind: 'unknown-prompt' } : { kind: 'none' };
232
+ }
233
+ /** Per-prompt fire cap (Inv operational guard): may this entry fire again? */
234
+ export function canFire(entry, firedCount) {
235
+ return firedCount < entry.max_fires;
236
+ }
237
+ export function verifyOutcome(afterFrame, entry) {
238
+ if (entryMatchesFrame(afterFrame, entry))
239
+ return 'not-cleared';
240
+ if (entry.verify_contains !== undefined) {
241
+ return afterFrame.includes(entry.verify_contains) ? 'ok' : 'wrong-outcome';
242
+ }
243
+ return 'weak-ok';
244
+ }
245
+ /**
246
+ * The canonical seed config `macf init` writes when no `prompt-responses.json`
247
+ * exists yet. Two ceremony-ack entries vetted to Inv 2 (neither signature
248
+ * contains a refuse/warn substring). The exact rendered text of a launch prompt
249
+ * can only be confirmed by an OPERATOR live-verify (the prompts don't render in
250
+ * `-p` mode), so a seed that doesn't exactly match a real prompt fails SAFE —
251
+ * the frame falls through to Inv 1 (unknown-prompt alert), never a wrong answer.
252
+ * Operators tune the exact `frame_contains` / `option_text` against the real
253
+ * pane, then the ceremony auto-clears.
254
+ */
255
+ export const PROMPT_RESPONSES_SEED = {
256
+ schema_version: PROMPT_RESPONSES_SCHEMA_VERSION,
257
+ entries: [
258
+ {
259
+ name: 'dev-channels',
260
+ frame_contains: ['I am using this for local development'],
261
+ option_text: 'I am using this for local development',
262
+ send: '1',
263
+ max_fires: 1,
264
+ },
265
+ {
266
+ name: 'resume-summary',
267
+ frame_contains: ['Resume full session as-is'],
268
+ option_text: 'Resume full session as-is',
269
+ send: '2',
270
+ max_fires: 1,
271
+ },
272
+ ],
273
+ };
274
+ //# sourceMappingURL=prompt-responses.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-responses.js","sourceRoot":"","sources":["../src/prompt-responses.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"local-client.d.ts","sourceRoot":"","sources":["../../src/registry/local-client.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,OAAO,KAAK,EAAa,QAAQ,EAAqD,MAAM,YAAY,CAAC;AAEzG;;;;;;;;;;;;;;GAcG;AAEH,eAAO,MAAM,uBAAuB,IAAI,CAAC;AAEzC;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;iBAI7B,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D,qBAAa,kBAAmB,SAAQ,SAAS;gBACnC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAI1C;AAuLD,MAAM,WAAW,oBAAoB;IACnC,+CAA+C;IAC/C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,mDAAmD;IACnD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AA6CD;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,oBAAoB,GAC5B,QAAQ,CA+LV"}
1
+ {"version":3,"file":"local-client.d.ts","sourceRoot":"","sources":["../../src/registry/local-client.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,OAAO,KAAK,EAAa,QAAQ,EAAqD,MAAM,YAAY,CAAC;AAEzG;;;;;;;;;;;;;;GAcG;AAEH,eAAO,MAAM,uBAAuB,IAAI,CAAC;AAEzC;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;iBAI7B,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D,qBAAa,kBAAmB,SAAQ,SAAS;gBACnC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAI1C;AAuLD,MAAM,WAAW,oBAAoB;IACnC,+CAA+C;IAC/C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,mDAAmD;IACnD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AA6CD;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,oBAAoB,GAC5B,QAAQ,CAqMV"}
@@ -251,20 +251,26 @@ export function createLocalRegistry(options) {
251
251
  await writeRegistryFileAtomic(options.path, next);
252
252
  });
253
253
  },
254
- // CAS register (groundnuty/macf#439). Fully atomic for the local backend:
255
- // the read (current slot), the compare against `expected`, and the write
256
- // all happen inside the same `withLock` critical section, so a racing
257
- // second writer is serialized behind the lock and observes the first
258
- // writer's value — failing the compare and backing off (ok:false). No
259
- // read-back verify is needed (unlike the GitHub backend), because the lock
260
- // makes the compare-then-write indivisible.
254
+ // CAS register (groundnuty/macf#439; over-register semantics per
255
+ // groundnuty/macf#702). Fully atomic for the local backend: the read
256
+ // (current slot), the compare against `expected`, and the write all
257
+ // happen inside the same `withLock` critical section, so a racing second
258
+ // writer is serialized behind the lock and observes the first writer's
259
+ // value — failing the compare and backing off (`ok:false,
260
+ // reason:'lost-to-newer'`). No read-back verify is needed (unlike the
261
+ // GitHub backend, whose read-after-write lag motivated #702's retry
262
+ // logic) — the lock makes the compare-then-write indivisible, so there is
263
+ // no confirmation-gap distinct from a real conflict on this backend:
264
+ // `current == expected` (including a stale/unchanged entry the caller is
265
+ // taking over) ALWAYS claims (`ok:true, reason:'claimed'`); any other
266
+ // `current` is a genuine concurrent writer (`reason:'lost-to-newer'`).
261
267
  async registerConditional(name, info, expected) {
262
268
  const validated = AgentInfoSchema.parse(info);
263
269
  return withLock(options.path, async () => {
264
270
  const existing = await readRegistryFile(options.path);
265
271
  const current = existing?.agents[name] ?? null;
266
272
  if (!agentInfoEquals(current, expected)) {
267
- return { ok: false, current };
273
+ return { ok: false, reason: 'lost-to-newer', current };
268
274
  }
269
275
  const file = existing ?? emptyRegistry(options.project);
270
276
  const next = {
@@ -273,7 +279,7 @@ export function createLocalRegistry(options) {
273
279
  agents: { ...file.agents, [name]: validated },
274
280
  };
275
281
  await writeRegistryFileAtomic(options.path, next);
276
- return { ok: true, current: validated };
282
+ return { ok: true, reason: 'claimed', current: validated };
277
283
  });
278
284
  },
279
285
  // Instance-id-guarded deregister (DR-031, groundnuty/macf#553 root-cause).
@@ -1 +1 @@
1
- {"version":3,"file":"local-client.js","sourceRoot":"","sources":["../../src/registry/local-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"local-client.js","sourceRoot":"","sources":["../../src/registry/local-client.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/registry/registry.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAa,QAAQ,EAAqD,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAEhI;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,qBAAqB,EAC7B,OAAO,EAAE,MAAM,GACd,QAAQ,CAkNV"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/registry/registry.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAa,QAAQ,EAAqD,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAkBhI;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,qBAAqB,EAC7B,OAAO,EAAE,MAAM,GACd,QAAQ,CAyQV"}
@@ -1,5 +1,18 @@
1
1
  import { AgentInfoSchema, agentInfoEquals } from './types.js';
2
2
  import { toVariableSegment } from './variable-name.js';
3
+ /**
4
+ * Post-write read-back retry budget for the GitHub-Variables backend
5
+ * (groundnuty/macf#702). The Variables API's PATCH/GET pair is NOT
6
+ * linearizable — a GET issued immediately after a successful PATCH can
7
+ * momentarily still serve the pre-write value (read-after-write lag). This
8
+ * bounds how long `registerConditional` waits for the read-back to catch up
9
+ * with a write it already knows succeeded (the PATCH/POST itself did not
10
+ * error) before falling back to trusting the write outright (see
11
+ * `registerConditional` below — the devops 8h-outage fix).
12
+ */
13
+ const READBACK_RETRY_ATTEMPTS = 2;
14
+ const READBACK_RETRY_DELAY_MS = 250;
15
+ const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
3
16
  /**
4
17
  * Creates a Registry backed by a GitHubVariablesClient.
5
18
  * All three backends (org, profile, repo) share this implementation —
@@ -36,44 +49,95 @@ export function createRegistry(client, project) {
36
49
  const value = JSON.stringify(info);
37
50
  await client.writeVariable(variableName(name), value);
38
51
  },
39
- // CAS register (groundnuty/macf#439). The GitHub Actions Variables API has
40
- // no native conditional write (no If-Match / ETag on PATCH/POST), so this
41
- // is a best-effort narrowing, NOT a hard CAS:
52
+ // CAS register (groundnuty/macf#439; over-register semantics per
53
+ // groundnuty/macf#702). The GitHub Actions Variables API has no native
54
+ // conditional write (no If-Match / ETag on PATCH/POST), so this is a
55
+ // best-effort narrowing, NOT a hard CAS:
42
56
  // 1. pre-write compare — re-read the slot; if it no longer matches
43
- // `expected`, a concurrent writer already changed it → abort the
44
- // write (ok:false). This collapses the wide TOCTOU window (which
45
- // spans the ~5s collision health-ping) down to the read→write gap.
46
- // 2. post-write read-back verify — after writing, re-read; if the slot
47
- // isn't ours, a racer wrote BEFORE our read-back → ok:false.
57
+ // `expected`, a concurrent writer already changed it BEFORE we ever
58
+ // wrote → this is the one case a stale/unchanged `expected` can't
59
+ // explain, so it's the real "current is a genuinely different
60
+ // registration" signal → `ok:false, reason:'lost-to-newer'`. This
61
+ // collapses the wide TOCTOU window (which spans the ~5s collision
62
+ // health-ping) down to the read→write gap.
63
+ // 2. write — the compare passed (this INCLUDES the over-register case:
64
+ // `expected` is itself a stale/dead entry the collision check
65
+ // decided to take over, and the pre-write re-read still shows it
66
+ // unchanged). Per groundnuty/macf#702, reaching this point already
67
+ // means "claim" — the write is issued unconditionally.
68
+ // 3. post-write read-back — a best-effort CONFIRMATION, not a
69
+ // precondition for success. If the first read-back doesn't yet show
70
+ // our own `info.instance_id`, retry up to READBACK_RETRY_ATTEMPTS
71
+ // times (READBACK_RETRY_DELAY_MS apart) to absorb the Variables
72
+ // API's read-after-write lag. Two outcomes after retries:
73
+ // - the read-back still reads as `expected` (unchanged) or as
74
+ // `null`/corrupt → the write itself never errored, so we trust
75
+ // it: `ok:true, reason:'claimed'`. This is the groundnuty/macf#702
76
+ // fix — the devops bug was exactly this branch previously
77
+ // returning `ok:false` (a lagging read-back of the stale entry
78
+ // was mistaken for "someone else won").
79
+ // - the read-back shows a DIFFERENT registration (neither `info`
80
+ // nor `expected`) → a real concurrent writer landed inside the
81
+ // residual window → `ok:false, reason:'lost-to-newer'`. The
82
+ // caller (server.ts) classifies that `current` as newer-live
83
+ // (yield) vs stale (retry the takeover) — this layer only
84
+ // reports the conflict.
48
85
  //
49
- // What (2) does and does NOT cover (#447 review, science-agent): it catches
50
- // only the interleaving where the racer's write lands before our read-back.
51
- // The symmetric order — A-write → A-readback(ok) → B-write → B-readback(ok)
52
- // — leaves BOTH returning ok:true (the slot ends up holding B; A's ok:true
53
- // is stale). So on THIS backend `ok:true` means "we own the slot for now,"
54
- // not "exclusively, at return" — eventually-reconciled, not a hard CAS.
55
- // (The local backend IS exclusive-at-return: lock-atomic, no read-back
56
- // needed.) The residual is bounded in practice by the ~5s health-ping
57
- // window + the #424 version-takeover predicate (an equal/older racer aborts
58
- // at the collision check, before reaching here); closing it hard needs a
59
- // real CAS primitive the API doesn't offer.
86
+ // What (3) does and does NOT cover (#447/#702 review lineage): retrying
87
+ // the read-back only helps when the LAG resolves within the retry
88
+ // budget. The residual — a genuinely concurrent second writer landing
89
+ // between our write and our final read-back — is symmetric to the
90
+ // pre-#702 analysis: on THIS backend `ok:true` means "we own the slot
91
+ // for now, best-effort," not "exclusively, at return." (The local
92
+ // backend IS exclusive-at-return: lock-atomic, no read-back needed.) The
93
+ // residual is bounded in practice by the ~5s health-ping window + the
94
+ // #424 version-takeover predicate (an equal/older racer aborts at the
95
+ // collision check, before reaching here); closing it hard needs a real
96
+ // CAS primitive the API doesn't offer.
60
97
  //
61
98
  // Corrupt-slot caveat: `readAgent` returns null for a malformed / schema-
62
- // invalid value. On the read-back that's fail-safe (→ harmless ok:false).
63
- // On the pre-write compare with `expected===null`, a corrupt-but-present
64
- // slot also reads null → compare passes → we overwrite it — acceptable (a
99
+ // invalid value. On the read-back that's treated as an unconfirmed (not
100
+ // failed) read — retried, then trusted per the rule above. On the
101
+ // pre-write compare with `expected===null`, a corrupt-but-present slot
102
+ // also reads null → compare passes → we overwrite it — acceptable (a
65
103
  // corrupt slot is already unusable) and bounded by schema-validity.
66
104
  async registerConditional(name, info, expected) {
67
105
  const current = await readAgent(name);
68
106
  if (!agentInfoEquals(current, expected)) {
69
- return { ok: false, current };
107
+ // A concurrent writer already changed the slot BEFORE we wrote
108
+ // anything — this is unambiguously a real conflict, not a read-lag
109
+ // artifact (we haven't written yet, so there's nothing of ours for
110
+ // a lagging read to be behind).
111
+ return { ok: false, reason: 'lost-to-newer', current };
70
112
  }
71
113
  await client.writeVariable(variableName(name), JSON.stringify(info));
72
- const readback = await readAgent(name);
73
- if (readback === null || readback.instance_id !== info.instance_id) {
74
- return { ok: false, current: readback };
114
+ for (let attempt = 0;; attempt += 1) {
115
+ const readback = await readAgent(name);
116
+ if (readback !== null && readback.instance_id === info.instance_id) {
117
+ // Confirmed: the read-back sees our own write.
118
+ return { ok: true, reason: 'claimed', current: info };
119
+ }
120
+ if (readback !== null && !agentInfoEquals(readback, expected)) {
121
+ // The read-back shows a registration that is neither ours nor the
122
+ // pre-write `expected` value — a genuinely different writer landed
123
+ // in the residual window. Real conflict, not a lag artifact.
124
+ return { ok: false, reason: 'lost-to-newer', current: readback };
125
+ }
126
+ // readback is either null (still-propagating / corrupt-but-fail-safe)
127
+ // or still shows `expected` unchanged (the write we just issued
128
+ // hasn't propagated to this read yet) — read-after-write lag, not a
129
+ // lost race. Retry a bounded number of times to absorb the lag.
130
+ if (attempt >= READBACK_RETRY_ATTEMPTS) {
131
+ // Exhausted the retry budget without seeing OUR write, but we also
132
+ // never saw anyone else's write either — the PATCH/POST itself
133
+ // succeeded (no throw), so trust it (groundnuty/macf#702: a
134
+ // stale/unconfirmed read-back must never masquerade as a lost
135
+ // race). This is the devops-outage fix: `current == expected`
136
+ // (unchanged, including a stale entry) always claims.
137
+ return { ok: true, reason: 'claimed', current: info };
138
+ }
139
+ await sleep(READBACK_RETRY_DELAY_MS);
75
140
  }
76
- return { ok: true, current: info };
77
141
  },
78
142
  // Instance-id-guarded deregister (DR-031, groundnuty/macf#553 root-cause).
79
143
  // The graceful-shutdown handler calls this so the registry stays accurate-
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/registry/registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/registry/registry.ts"],"names":[],"mappings":"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"}