@vibe-commit/capture 0.4.1 → 0.4.3

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/post.js CHANGED
@@ -20,9 +20,10 @@
20
20
  import { createHash } from "node:crypto";
21
21
  import { agentForTranscript } from "./agents/registry.js";
22
22
  import { UNKNOWN_AGENT_ID } from "./agents/types.js";
23
+ import { recordInferredSkipped } from "./inferred_tally.js";
23
24
  import { classify, markDelivered, markHeld, markSkipped, nextSpan, resolveCaps, } from "./policy.js";
24
25
  import { fileState, isStopped, loadSessionState, saveSessionState, withFileState, } from "./state.js";
25
- import { dropRewrites, dropSpooled, isFullSha, settleSpooled } from "./spool.js";
26
+ import { INFERRED_SET_ASIDE_AFTER, dropInferredGroups, dropRewrites, dropSpooled, isFullSha, recordInferredAttempt, setAsideInferredGroup, settleSpooled, } from "./spool.js";
26
27
  import { CLIENT_VERSION, CLIENT_VERSION_HEADER } from "./version.js";
27
28
  /** Production data plane. Overridable for tests and for a self-hosted server. */
28
29
  export const DEFAULT_INGEST_URL = "https://api.vibecommit.ai/ingest/v1/session";
@@ -166,6 +167,10 @@ export function buildIngestHeaders(credential, delta) {
166
167
  if (delta.rewrites !== undefined && delta.rewrites.length > 0) {
167
168
  headers["x-rewrites"] = delta.rewrites.join(",");
168
169
  }
170
+ // `TODOS[177]` — same idiom: OMITTED, never sent empty; the spelling is fixed by `capInferred`.
171
+ if (delta.inferredRewrites !== undefined && delta.inferredRewrites.length > 0) {
172
+ headers["x-rewrites-inferred"] = delta.inferredRewrites.join(",");
173
+ }
169
174
  return headers;
170
175
  }
171
176
  /**
@@ -241,6 +246,13 @@ function parseCommitsRetry(raw) {
241
246
  .map((s) => s.trim().toLowerCase())
242
247
  .filter((s) => isFullSha(s));
243
248
  }
249
+ /** `X-Rewrites-Inferred-Stored` → a non-negative integer, or `null` for absent/malformed. NEVER THROWS. */
250
+ function parseInferredStored(raw) {
251
+ if (raw === null)
252
+ return null;
253
+ const n = Number(raw.trim());
254
+ return Number.isInteger(n) && n >= 0 ? n : null;
255
+ }
244
256
  /**
245
257
  * One attempt. No retry, no backoff, no classification — `CR-018` owns all three.
246
258
  *
@@ -278,6 +290,7 @@ export async function send(url, headers, body, timeoutMs) {
278
290
  captureId: res.headers.get("x-capture-id"),
279
291
  commitsRetry: parseCommitsRetry(res.headers.get("x-commits-retry")),
280
292
  finalAck: parseFinalAck(res.headers.get("x-session-final")),
293
+ inferredStored: parseInferredStored(res.headers.get("x-rewrites-inferred-stored")),
281
294
  };
282
295
  }
283
296
  catch {
@@ -366,10 +379,12 @@ export async function deliver(ctx, eof, readBody) {
366
379
  head: ctx.head,
367
380
  commits: ctx.commits,
368
381
  rewrites: ctx.rewrites,
382
+ inferredRewrites: ctx.inferredRewrites,
369
383
  }), body, ctx.timeoutMs);
370
384
  const disposition = classify(outcome);
371
385
  const caps = resolveCaps(ctx.env);
372
386
  let next = ctx.byHook ? { ...session, seq, liveAt: ctx.nowMs } : { ...session, seq };
387
+ let inferredSetAsidePairs = 0;
373
388
  switch (disposition) {
374
389
  case "ok":
375
390
  next = withFileState(next, ctx.fileKey, markDelivered(current, span.to, ctx.nowMs));
@@ -454,6 +469,45 @@ export async function deliver(ctx, eof, readBody) {
454
469
  if (ctx.rewrites !== undefined && ctx.rewrites.length > 0) {
455
470
  dropRewrites(ctx.home, key, ctx.rewrites.length);
456
471
  }
472
+ // `TODOS[177]` — the INFERRED pairs have their own file and their own drop. ⛔ UNLIKE `rewrites` above, this one is
473
+ // CONDITIONAL on the server's per-request ack (`x-rewrites-inferred-stored`): a 2xx alone is "the delta was
474
+ // accepted", not "every inferred pair in it was recorded" (VG pre-review, 2026-10-08). Drop by GROUP IDENTITY,
475
+ // never by count — see `dropInferredGroups`'s own comment for why a count-based drop lost pairs under concurrency.
476
+ //
477
+ // ⛔⛔ PER-GROUP BOUND (VL, 2026-10-08, VG's head-of-line finding): `capInferred` sends exactly ONE group per
478
+ // request now, so `ctx.inferredGroups` has at most one member and the ack names it unambiguously.
479
+ // stored === sent → delivered, drop it.
480
+ // stored !== null, short → a real signal from a server that saw the group and recorded fewer than all of it:
481
+ // count an attempt; after `INFERRED_SET_ASIDE_AFTER` attempts, give up on it so it
482
+ // stops blocking the group behind it.
483
+ // stored === null → an old/absent-ack server said nothing at all: "keeping is right there" — no
484
+ // attempt is counted (an attempt means a signal was RECEIVED), nothing is set aside.
485
+ if (ctx.inferredRewrites !== undefined && ctx.inferredRewrites.length > 0 && ctx.inferredGroups !== undefined && ctx.inferredGroups.length > 0) {
486
+ const group = ctx.inferredGroups[0];
487
+ const stored = outcome.kind === "response" ? outcome.inferredStored : null;
488
+ if (stored === ctx.inferredRewrites.length) {
489
+ dropInferredGroups(ctx.home, key, [group]);
490
+ }
491
+ else if (stored !== null) {
492
+ // ⛔⛔ `stored !== null` ALONE, never `stored !== null && stored > 0` (VG's mutant G5, 2026-10-08): the
493
+ // real server (`ff67ef9`) writes a group in one atomic upsert, so a CARRIED group gets back either `n`
494
+ // (all stored, handled above) or exactly `0` (the write failed, the header was voided, or a replay) — it
495
+ // never answers `n-1`. An ack of `0` is a real signal ("the server saw this and stored none of it") and
496
+ // must count an attempt exactly like any other short ack, or a persistently-refused group is never set
497
+ // aside and head-of-line blocking comes back on the realistic path.
498
+ const attempts = recordInferredAttempt(ctx.home, key, group);
499
+ if (attempts >= INFERRED_SET_ASIDE_AFTER) {
500
+ setAsideInferredGroup(ctx.home, key, group, "short_ack");
501
+ // `TODOS[177]` follow-up (VL, 2026-10-08, VG's silent-loss finding): tally BEFORE any deletion can
502
+ // happen — `finalize` may delete this session's `.inferred.jsonl` outright once every group in it is
503
+ // resolved, and this tally is the ONLY record of `set_aside` left once that file is gone (VG's
504
+ // follow-up finding: an earlier version of this fix also kept a live gauge reading that same file,
505
+ // which double-counted these pairs once the group aged into the 7-day prune — removed).
506
+ recordInferredSkipped(ctx.home, key.repoKey, "set_aside", ctx.nowMs, ctx.inferredRewrites.length);
507
+ inferredSetAsidePairs = ctx.inferredRewrites.length;
508
+ }
509
+ }
510
+ }
457
511
  break;
458
512
  case "later":
459
513
  next = withFileState(next, ctx.fileKey, markHeld(current, span, ctx.nowMs, caps));
@@ -481,6 +535,8 @@ export async function deliver(ctx, eof, readBody) {
481
535
  disposition,
482
536
  detail: outcome.kind === "response" ? outcome.detail : null,
483
537
  finalAck: outcome.kind === "response" ? outcome.finalAck : null,
538
+ inferredStored: outcome.kind === "response" ? outcome.inferredStored : null,
539
+ inferredSetAsidePairs,
484
540
  };
485
541
  }
486
542
  //# sourceMappingURL=post.js.map
package/dist/post.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"post.js","sourceRoot":"","sources":["../src/post.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"post.js","sourceRoot":"","sources":["../src/post.ts"],"names":[],"mappings":"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"}
package/dist/spool.d.ts CHANGED
@@ -435,6 +435,126 @@ export declare function capSuccessors(pairs: readonly RewritePair[]): {
435
435
  pairs: string[];
436
436
  count: number;
437
437
  };
438
+ /** One INFERRED rewrite: the commit that was folded, the one that replaced it, and the patch-id of the squash (the evidence we store). */
439
+ export interface InferredPair {
440
+ readonly ancestor: string;
441
+ readonly successor: string;
442
+ readonly patchId: string;
443
+ }
444
+ /**
445
+ * How many inferred pairs one request may carry. ⛔ ITS OWN CONSTANT, and a WHOLE-GROUP budget, not a flat per-hook cap: `blame_commit`
446
+ * renders `squashed_from` as a plain list (mcp `blame.ts:454`), so a group split across requests would read as a complete answer when it
447
+ * is not — the same class of defect as [160]. One squash's fold is at most `MAX_INFERRED_COMMITS` (64) pairs (a larger fold is refused
448
+ * before it is ever spooled — "oversize", tallied, nothing sent), so 64 is also the largest a single group can be. `capInferred` packs
449
+ * whole groups, oldest first, up to this budget; a group that would not fit WHOLE waits, with everything after it, for a later request —
450
+ * never split. Measured on the wire (prod, invalid-bearer probe, 2026-10-08): 64 pairs = 7,871 bytes alongside a 10-pair exact-rewrites
451
+ * header (819 B) still returns 401 (passed the proxy and node's header layer); a 40,000 B control header returns 431, so the probe can see
452
+ * a real limit and did not hit it here.
453
+ */
454
+ export declare const MAX_INFERRED_PAIRS = 64;
455
+ /** `<repo>/<session>.inferred.jsonl`, beside the rewrite spool. */
456
+ export declare function inferredSpoolPath(home: string, key: SessionKey): string | null;
457
+ /** A 40-hex patch-id. Not `isFullSha`: the wire contract is `patchid40`, lowercase hex, exactly 40. */
458
+ export declare function isPatchId(value: unknown): value is string;
459
+ /** A group's identity on the wire and in the spool: one squash's successor + the patch-id that is its evidence. */
460
+ export interface InferredGroupId {
461
+ readonly successor: string;
462
+ readonly patchId: string;
463
+ }
464
+ /**
465
+ * Append inferred pairs as ONE GROUP LINE (they are the fold of one detected squash, so they share one successor and
466
+ * one patch-id by construction; grouped here anyway, defensively, in case a future caller ever passes more than one).
467
+ * A group whose identity is already on disk — spooled OR already delivered — is skipped whole: the same squash
468
+ * detected twice (a hook retried) must not duplicate it. Returns how many ancestor pairs were newly WRITTEN.
469
+ * ⛔ NEVER THROWS — this runs inside the user's `git commit`.
470
+ */
471
+ export declare function appendInferred(home: string, key: SessionKey, pairs: readonly InferredPair[]): number;
472
+ /**
473
+ * Every well-formed, still-ELIGIBLE inferred pair in the spool, oldest group first, ancestors in stored order
474
+ * within a group. "Eligible" excludes a group already DELIVERED and one already SET ASIDE (VL, 2026-10-08: a
475
+ * group that gave up after `INFERRED_SET_ASIDE_AFTER` short acks is never offered again; `inferred_tally.ts`'s
476
+ * `recordInferredSkipped(..., "set_aside", ...)` tallied it durably at that moment, for `status`). `capInferred`
477
+ * takes `pairs[0]`'s group as the one it sends, so this function's ORDER is load-bearing: the oldest eligible
478
+ * group must come first.
479
+ */
480
+ export declare function readInferred(home: string, key: SessionKey): InferredPair[];
481
+ /**
482
+ * How many inferred pairs this REPO has spooled right now, across every session, waiting on an ack that has not
483
+ * (yet) come back `n == sent` (VL, 2026-10-08: "count it in status, e.g. `inferred_unacknowledged`"). A live gauge,
484
+ * not a cumulative tally like `inferred_tally.ts`'s oversize/sha256 — a pair stops counting the moment it is
485
+ * acknowledged, same as `commitsWaitingForRepo`'s shape for the exact-commit spool.
486
+ */
487
+ export declare function inferredUnacknowledgedForRepo(home: string, repoKey: string): number;
488
+ /**
489
+ * Mark groups DELIVERED, by identity — never by position. Called ONLY after the server's 2xx AND its per-request ack
490
+ * (`x-rewrites-inferred-stored`) confirms every pair of every named group actually landed. An append-only tombstone
491
+ * mark, so a concurrent `appendInferred` for a DIFFERENT group racing this call is never clobbered: there is no file
492
+ * rewrite here to lose it inside. ⛔ NEVER THROWS.
493
+ */
494
+ export declare function dropInferredGroups(home: string, key: SessionKey, groups: readonly InferredGroupId[]): boolean;
495
+ /**
496
+ * The inferred pairs this hook will carry, in WIRE SPELLING — `<ancestor40>:<successor40>:<patchid40>`, lowercase hex, colon-separated —
497
+ * and the identity of the ONE group carried (`groups`, length 0 or 1 — plural for call-site symmetry with `dropInferredGroups`, never
498
+ * more than one member). Only 40-hex shas ride this header; a sha256 repository's pair is not spooled at all.
499
+ *
500
+ * ⛔⛔ ONE GROUP PER REQUEST (VL, 2026-10-08, VG's head-of-line finding over `vg-evidence/177-gate-7dde49e/hol.mjs`). The earlier
501
+ * version packed as many WHOLE groups as fit under `MAX_INFERRED_PAIRS` — correct for the concurrency bug, but it made the ack
502
+ * (`x-rewrites-inferred-stored`, ONE NUMBER per request) ambiguous whenever more than one group rode the same request: a short ack
503
+ * could not say WHICH group was short, so the client had to keep ALL of them, and the head group — if a server persistently
504
+ * refused or shorted it — blocked every group behind it forever (measured: 40+30 under a short ack reads `40,40,40,40,…` on every
505
+ * hook; the 30 is never sent). Sending exactly `readInferred(...)`'s FIRST eligible group makes `n` name exactly that group:
506
+ * `n == size` is unambiguous. A single group is never larger than `MAX_INFERRED_COMMITS` (64) by construction (a bigger fold is
507
+ * refused before it is ever spooled), so it always fits; `MAX_INFERRED_PAIRS` stays as that upper bound's own name.
508
+ */
509
+ export declare function capInferred(pairs: readonly InferredPair[]): {
510
+ pairs: string[];
511
+ count: number;
512
+ groups: readonly InferredGroupId[];
513
+ };
514
+ /**
515
+ * ⛔ PER-GROUP BOUND (VL, 2026-10-08). A SHORT ack (the header is present but `n < sent`) is a real signal the
516
+ * server has an issue with THIS group — unlike an ABSENT ack (an old server, which says nothing at all and is
517
+ * never counted: "keeping is right there"). Each short ack counts ONE attempt, by identity, append-only like the
518
+ * `delivered` mark. After `INFERRED_SET_ASIDE_AFTER` attempts the group is given up on (`setAsideInferredGroup`),
519
+ * so a persistently-refused group blocks its neighbours for at most that many hook cycles, never forever.
520
+ */
521
+ export declare const INFERRED_SET_ASIDE_AFTER = 3;
522
+ /** Record one short-ack attempt against a group, by identity. Returns the attempt count AFTER this one. ⛔ NEVER THROWS. */
523
+ export declare function recordInferredAttempt(home: string, key: SessionKey, group: InferredGroupId): number;
524
+ /**
525
+ * Give up on a group: it is never offered again (`readInferred` excludes it), but it is NOT deleted — it stays on
526
+ * disk, covered by the 7-day orphan prune like everything else here. Not counted by a live gauge here (VL,
527
+ * 2026-10-08, VG's double-count finding, item (b)): `recordInferredSkipped(..., "set_aside", ...)` at the call
528
+ * site is the ONE place this is counted, so a set-aside group is a sentence exactly once, never twice. ⛔ NEVER
529
+ * THROWS.
530
+ */
531
+ export declare function setAsideInferredGroup(home: string, key: SessionKey, group: InferredGroupId, reason: "short_ack"): boolean;
532
+ /**
533
+ * Whether EVERY group ever spooled for this session is resolved — delivered or set aside, none still pending —
534
+ * so the file can be deleted outright rather than waiting on the 7-day prune. Called ONLY by `finalize` after its
535
+ * drain loop ends, and ONLY because the session is then over: no concurrent `appendInferred` can still be running
536
+ * for a session finalize just confirmed is finished (the hook that would call it is the one deciding the session
537
+ * is over).
538
+ */
539
+ export declare function inferredFullyResolved(home: string, key: SessionKey): boolean;
540
+ /** Delete a fully-resolved inferred spool file outright, rather than leaving dead marks for the 7-day prune to find. ⛔ NEVER THROWS. */
541
+ export declare function deleteInferredSpool(home: string, key: SessionKey): boolean;
542
+ export declare const INFERRED_PRUNE_TTL_MS: number;
543
+ /**
544
+ * Prune `.inferred.jsonl` files whose mtime is more than 7 days old — the file as a whole, by the SAME rename
545
+ * -then-settle discipline as `pruneOrphanPending` (see that function's header for the race it narrows). Called from
546
+ * the Stop/SessionEnd hooks only, alongside `pruneOrphanPending`, never from `post-commit` or `status`.
547
+ *
548
+ * ⛔⛔ `pairs` is new (VL, 2026-10-08, VG's silent-loss finding): the CALLER must feed it to
549
+ * `recordInferredSkipped(..., "pruned", ..., pairs)` so a discard still shows up in `status` after this function's
550
+ * own rename-then-delete removes the file the live gauges read. `lines` (group count) is kept as `pruneExpiredInferred`
551
+ * already returned it and an existing test pins that shape; `pairs` is the one the tally wants.
552
+ */
553
+ export declare function pruneExpiredInferred(home: string, repoKey: string, nowMs: number): {
554
+ files: number;
555
+ lines: number;
556
+ pairs: number;
557
+ };
438
558
  /** `<sessions dir>/rebase-amends.jsonl` — per REPO, because a rebase has no session of its own. */
439
559
  export declare function rebaseAmendsPath(home: string, repoKey: string): string | null;
440
560
  /** Remember `amend` pairs seen DURING a rebase. Never throws: this runs inside the user's `git rebase`. */