@vibe-commit/capture 0.1.0

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 (141) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +66 -0
  3. package/dist/agents/claude_code.d.ts +11 -0
  4. package/dist/agents/claude_code.js +162 -0
  5. package/dist/agents/claude_code.js.map +1 -0
  6. package/dist/agents/codex_cli.d.ts +15 -0
  7. package/dist/agents/codex_cli.js +67 -0
  8. package/dist/agents/codex_cli.js.map +1 -0
  9. package/dist/agents/cursor.d.ts +21 -0
  10. package/dist/agents/cursor.js +89 -0
  11. package/dist/agents/cursor.js.map +1 -0
  12. package/dist/agents/registry.d.ts +184 -0
  13. package/dist/agents/registry.js +212 -0
  14. package/dist/agents/registry.js.map +1 -0
  15. package/dist/agents/types.d.ts +279 -0
  16. package/dist/agents/types.js +67 -0
  17. package/dist/agents/types.js.map +1 -0
  18. package/dist/commands/connect.d.ts +36 -0
  19. package/dist/commands/connect.js +499 -0
  20. package/dist/commands/connect.js.map +1 -0
  21. package/dist/commands/context.d.ts +45 -0
  22. package/dist/commands/context.js +14 -0
  23. package/dist/commands/context.js.map +1 -0
  24. package/dist/commands/report.d.ts +105 -0
  25. package/dist/commands/report.js +430 -0
  26. package/dist/commands/report.js.map +1 -0
  27. package/dist/commands/status.d.ts +29 -0
  28. package/dist/commands/status.js +236 -0
  29. package/dist/commands/status.js.map +1 -0
  30. package/dist/commands/why.d.ts +349 -0
  31. package/dist/commands/why.js +937 -0
  32. package/dist/commands/why.js.map +1 -0
  33. package/dist/consent.d.ts +59 -0
  34. package/dist/consent.js +111 -0
  35. package/dist/consent.js.map +1 -0
  36. package/dist/copy/claims.d.ts +79 -0
  37. package/dist/copy/claims.js +343 -0
  38. package/dist/copy/claims.js.map +1 -0
  39. package/dist/copy/grades.d.ts +117 -0
  40. package/dist/copy/grades.js +96 -0
  41. package/dist/copy/grades.js.map +1 -0
  42. package/dist/copy/index.d.ts +12 -0
  43. package/dist/copy/index.js +13 -0
  44. package/dist/copy/index.js.map +1 -0
  45. package/dist/copy/strings.d.ts +1328 -0
  46. package/dist/copy/strings.js +1243 -0
  47. package/dist/copy/strings.js.map +1 -0
  48. package/dist/copy/time.d.ts +27 -0
  49. package/dist/copy/time.js +43 -0
  50. package/dist/copy/time.js.map +1 -0
  51. package/dist/credential.d.ts +211 -0
  52. package/dist/credential.js +298 -0
  53. package/dist/credential.js.map +1 -0
  54. package/dist/exit.d.ts +59 -0
  55. package/dist/exit.js +60 -0
  56. package/dist/exit.js.map +1 -0
  57. package/dist/git.d.ts +299 -0
  58. package/dist/git.js +653 -0
  59. package/dist/git.js.map +1 -0
  60. package/dist/hooks/entry.d.ts +277 -0
  61. package/dist/hooks/entry.js +1092 -0
  62. package/dist/hooks/entry.js.map +1 -0
  63. package/dist/hooks/post_commit.d.ts +59 -0
  64. package/dist/hooks/post_commit.js +160 -0
  65. package/dist/hooks/post_commit.js.map +1 -0
  66. package/dist/hooks/post_rewrite.d.ts +59 -0
  67. package/dist/hooks/post_rewrite.js +161 -0
  68. package/dist/hooks/post_rewrite.js.map +1 -0
  69. package/dist/hooks/session_end.d.ts +101 -0
  70. package/dist/hooks/session_end.js +120 -0
  71. package/dist/hooks/session_end.js.map +1 -0
  72. package/dist/index.d.ts +34 -0
  73. package/dist/index.js +360 -0
  74. package/dist/index.js.map +1 -0
  75. package/dist/install.d.ts +153 -0
  76. package/dist/install.js +284 -0
  77. package/dist/install.js.map +1 -0
  78. package/dist/json.d.ts +100 -0
  79. package/dist/json.js +94 -0
  80. package/dist/json.js.map +1 -0
  81. package/dist/oauth/discovery.d.ts +96 -0
  82. package/dist/oauth/discovery.js +163 -0
  83. package/dist/oauth/discovery.js.map +1 -0
  84. package/dist/oauth/lock.d.ts +100 -0
  85. package/dist/oauth/lock.js +287 -0
  86. package/dist/oauth/lock.js.map +1 -0
  87. package/dist/oauth/loopback.d.ts +85 -0
  88. package/dist/oauth/loopback.js +124 -0
  89. package/dist/oauth/loopback.js.map +1 -0
  90. package/dist/oauth/pkce.d.ts +58 -0
  91. package/dist/oauth/pkce.js +77 -0
  92. package/dist/oauth/pkce.js.map +1 -0
  93. package/dist/oauth/read.d.ts +120 -0
  94. package/dist/oauth/read.js +144 -0
  95. package/dist/oauth/read.js.map +1 -0
  96. package/dist/oauth/session.d.ts +80 -0
  97. package/dist/oauth/session.js +112 -0
  98. package/dist/oauth/session.js.map +1 -0
  99. package/dist/oauth/signin.d.ts +178 -0
  100. package/dist/oauth/signin.js +225 -0
  101. package/dist/oauth/signin.js.map +1 -0
  102. package/dist/oauth/token.d.ts +139 -0
  103. package/dist/oauth/token.js +183 -0
  104. package/dist/oauth/token.js.map +1 -0
  105. package/dist/paths.d.ts +366 -0
  106. package/dist/paths.js +460 -0
  107. package/dist/paths.js.map +1 -0
  108. package/dist/policy.d.ts +195 -0
  109. package/dist/policy.js +244 -0
  110. package/dist/policy.js.map +1 -0
  111. package/dist/post.d.ts +302 -0
  112. package/dist/post.js +384 -0
  113. package/dist/post.js.map +1 -0
  114. package/dist/project.d.ts +99 -0
  115. package/dist/project.js +192 -0
  116. package/dist/project.js.map +1 -0
  117. package/dist/redact.d.ts +175 -0
  118. package/dist/redact.js +700 -0
  119. package/dist/redact.js.map +1 -0
  120. package/dist/runtime.d.ts +30 -0
  121. package/dist/runtime.js +37 -0
  122. package/dist/runtime.js.map +1 -0
  123. package/dist/spawn_budget.d.ts +101 -0
  124. package/dist/spawn_budget.js +124 -0
  125. package/dist/spawn_budget.js.map +1 -0
  126. package/dist/spool.d.ts +390 -0
  127. package/dist/spool.js +556 -0
  128. package/dist/spool.js.map +1 -0
  129. package/dist/state.d.ts +109 -0
  130. package/dist/state.js +217 -0
  131. package/dist/state.js.map +1 -0
  132. package/dist/system_message.d.ts +101 -0
  133. package/dist/system_message.js +141 -0
  134. package/dist/system_message.js.map +1 -0
  135. package/dist/term.d.ts +112 -0
  136. package/dist/term.js +134 -0
  137. package/dist/term.js.map +1 -0
  138. package/dist/version.d.ts +16 -0
  139. package/dist/version.js +17 -0
  140. package/dist/version.js.map +1 -0
  141. package/package.json +50 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entry.js","sourceRoot":"","sources":["../../src/hooks/entry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * `vibecommit post-commit` — the verb git's own `post-commit` hook invokes.
3
+ *
4
+ * ## This is the only place a commit is ever OBSERVED (`CR-170`, D154)
5
+ *
6
+ * `observed` had no producer in any repo, and the alternative — inferring
7
+ * commits from a `Bash(git commit)` tool_use — yields NO EDGE AT ALL for
8
+ * `make`, `just`, `gh`, an alias or a script, which is the common path (D56).
9
+ * A commit hook sees all of them, because git runs it regardless of who typed
10
+ * what.
11
+ *
12
+ * ⛔ **AND IT SEES ONLY COMMITS.** `post-commit` does not fire for `git pull`
13
+ * (a merge runs `post-merge`), `checkout` or `reset` — so the three conditions
14
+ * a polling design had to GUESS at are structural here rather than heuristic.
15
+ * That is the whole argument for the mechanism, and it is why ref moves are
16
+ * observed separately, by `headRef` on the Claude Code hook path.
17
+ *
18
+ * ## ⛔ THIS RUNS INSIDE THE USER'S `git commit`
19
+ *
20
+ * Three rules follow, and none of them is defensive tidiness:
21
+ *
22
+ * - **Never throws, always exits 0.** MEASURED 2026-08-17: git ignores
23
+ * `post-commit`'s exit code entirely (a hook exiting 7 leaves `git commit`
24
+ * at 0), so this cannot break a commit — but an uncaught exception would
25
+ * still print a stack into the terminal where someone is working.
26
+ * - **Never writes to stdout or stderr.** That output lands in their commit.
27
+ * - **No network.** Delivery belongs on the hook path, which already has a
28
+ * credential, a budget and a retry story. This writes a line and returns.
29
+ *
30
+ * ⚠ **NO SPAWN BUDGET IS ARMED HERE, deliberately.** `spawn_budget.ts` is opt-in
31
+ * and only `runHook` arms it, so the probes below get their own ceilings. That
32
+ * is correct: this is git's process, not the 5s Claude Code hook path, and
33
+ * `TODOS[87]`'s watchdog does not exist here to be defeated.
34
+ */
35
+ export interface PostCommitEnvironment {
36
+ readonly home: string;
37
+ readonly cwd: string;
38
+ /**
39
+ * ⛔ **THE COMMITTING PROCESS'S OWN ENVIRONMENT — the first rung of the ladder
40
+ * (`M1`, D183 §1).**
41
+ *
42
+ * Passed, never read from `process.env` here, for the reason every other
43
+ * function on this path takes it: a module that reads the real environment
44
+ * cannot be tested without the developer's own session id — and this one WOULD
45
+ * pick it up, because Claude Code exports `CLAUDE_CODE_SESSION_ID` into the
46
+ * Bash tool env and git passes it straight through to us.
47
+ */
48
+ readonly env: NodeJS.ProcessEnv;
49
+ }
50
+ /**
51
+ * Observe the commit that just happened, or do nothing.
52
+ *
53
+ * Returns the spool entry written, or null — exposed as a value rather than
54
+ * kept internal so the tests can assert WHAT was observed, not merely that the
55
+ * call survived. Every refusal below is a `null`, and each is a different
56
+ * reason with the same silence.
57
+ */
58
+ export declare function runPostCommit(ctx: PostCommitEnvironment): number;
59
+ export declare function observe(ctx: PostCommitEnvironment): boolean;
@@ -0,0 +1,160 @@
1
+ /**
2
+ * `vibecommit post-commit` — the verb git's own `post-commit` hook invokes.
3
+ *
4
+ * ## This is the only place a commit is ever OBSERVED (`CR-170`, D154)
5
+ *
6
+ * `observed` had no producer in any repo, and the alternative — inferring
7
+ * commits from a `Bash(git commit)` tool_use — yields NO EDGE AT ALL for
8
+ * `make`, `just`, `gh`, an alias or a script, which is the common path (D56).
9
+ * A commit hook sees all of them, because git runs it regardless of who typed
10
+ * what.
11
+ *
12
+ * ⛔ **AND IT SEES ONLY COMMITS.** `post-commit` does not fire for `git pull`
13
+ * (a merge runs `post-merge`), `checkout` or `reset` — so the three conditions
14
+ * a polling design had to GUESS at are structural here rather than heuristic.
15
+ * That is the whole argument for the mechanism, and it is why ref moves are
16
+ * observed separately, by `headRef` on the Claude Code hook path.
17
+ *
18
+ * ## ⛔ THIS RUNS INSIDE THE USER'S `git commit`
19
+ *
20
+ * Three rules follow, and none of them is defensive tidiness:
21
+ *
22
+ * - **Never throws, always exits 0.** MEASURED 2026-08-17: git ignores
23
+ * `post-commit`'s exit code entirely (a hook exiting 7 leaves `git commit`
24
+ * at 0), so this cannot break a commit — but an uncaught exception would
25
+ * still print a stack into the terminal where someone is working.
26
+ * - **Never writes to stdout or stderr.** That output lands in their commit.
27
+ * - **No network.** Delivery belongs on the hook path, which already has a
28
+ * credential, a budget and a retry story. This writes a line and returns.
29
+ *
30
+ * ⚠ **NO SPAWN BUDGET IS ARMED HERE, deliberately.** `spawn_budget.ts` is opt-in
31
+ * and only `runHook` arms it, so the probes below get their own ceilings. That
32
+ * is correct: this is git's process, not the 5s Claude Code hook path, and
33
+ * `TODOS[87]`'s watchdog does not exist here to be defeated.
34
+ */
35
+ import { EXIT } from "../exit.js";
36
+ import { DEFAULT_AGENT_ID, dialectFor } from "../agents/registry.js";
37
+ import { isProjectAllowed } from "../consent.js";
38
+ import { gitProbe, headRef } from "../git.js";
39
+ import { resolveProjectKeys } from "../project.js";
40
+ import { activeSessionFor, appendSpool } from "../spool.js";
41
+ /**
42
+ * Observe the commit that just happened, or do nothing.
43
+ *
44
+ * Returns the spool entry written, or null — exposed as a value rather than
45
+ * kept internal so the tests can assert WHAT was observed, not merely that the
46
+ * call survived. Every refusal below is a `null`, and each is a different
47
+ * reason with the same silence.
48
+ */
49
+ export function runPostCommit(ctx) {
50
+ try {
51
+ observe(ctx);
52
+ }
53
+ catch {
54
+ // The contract is silence. There is no channel to report on and no caller
55
+ // who could act: git has already made the commit.
56
+ }
57
+ return EXIT.ok;
58
+ }
59
+ export function observe(ctx) {
60
+ // ⛔ BOTH KEYS, AND ONLY ONE OF THE SIX USES BELOW MOVES (`D184 §1`). The
61
+ // consent gate keys on the git COMMON DIR; the session bucket, the `repoKey`
62
+ // and every `git -C` in this function stay on the worktree TOPLEVEL. They were
63
+ // one value until `D184` and the variable name did not change, so read what
64
+ // each line DOES with it — `resolveProjectKeys` exists so taking the wrong one
65
+ // has to be deliberate.
66
+ //
67
+ // ⚠ +1 spawn on git's own process, accepted on the record (`D184 §6`): this
68
+ // hook arms no spawn budget (`:30-33`), so the probe takes its own 5s ceiling
69
+ // and the watchdog `TODOS[87]` defeats does not exist on this path.
70
+ const keys = resolveProjectKeys(ctx.cwd);
71
+ if (keys === null)
72
+ return false;
73
+ const toplevel = keys.worktree;
74
+ // ⛔ THE CONSENT GATE, on the same key the Claude Code hook uses. A repo the
75
+ // user declined must not have its commits recorded either.
76
+ //
77
+ // ⛔ IT IS `keys.consent` OR THE COMMIT GATE IS A HALF-FLIP. `entry.ts` checks
78
+ // the common dir and `connect` grants it; a `post_commit` still checking the
79
+ // toplevel would refuse every commit in every repository — silently, because
80
+ // silence is this file's whole contract — while transcript capture worked
81
+ // fine. That asymmetry is invisible to any cell that grants and checks through
82
+ // one helper (`D184 §9`).
83
+ if (!isProjectAllowed(ctx.home, keys.consent))
84
+ return false;
85
+ // ⛔ THE SESSION GATE — WHICH SESSION, NOT WHOSE HANDS.
86
+ //
87
+ // ⚠ **This comment used to say it is "the one that keeps a HUMAN'S commit
88
+ // out", and that has been FALSE since `CR-170` shipped** — not since D5, and
89
+ // not because of the ladder. `activeSessionFor` gates on a session being active
90
+ // in this clone and has never inspected authorship; the paragraph three lines
91
+ // below already said so, in this same file, about this same hook. Corrected as
92
+ // a comment fix.
93
+ //
94
+ // What the gate really does is refuse when no capture session is live here, and
95
+ // — since the ladder — SAY HOW IT DECIDED. `sole_live_session` still writes for
96
+ // a human's commit in a clone with one live session, exactly as it did at HEAD.
97
+ const active = activeSessionFor(ctx.home, toplevel, envSessionId(ctx.env));
98
+ if (active === null)
99
+ return false;
100
+ const head = headRef(toplevel);
101
+ // No HEAD means a repository with no commits, which cannot be the state
102
+ // immediately after one — so this is a git we could not read, not a case.
103
+ if (head === null)
104
+ return false;
105
+ return appendSpool(ctx.home, { repoKey: toplevel, sessionId: active.sessionId }, {
106
+ sha: head.sha,
107
+ branch: head.branch,
108
+ at: committedAt(toplevel),
109
+ // ⚠ Gathered here because it is FREE here and impossible later: the file
110
+ // list is a property of the commit, and reconstructing it server-side
111
+ // would need the repository. It stays in the spool for wave 2 and never
112
+ // reaches a header (`CR-170` §4).
113
+ files: changedFiles(toplevel),
114
+ // ⛔ RECORDED AT OBSERVATION TIME, because the evidence expires. By the
115
+ // time the next hook delivers this line, the environment belonged to a
116
+ // process that has exited and the mtimes have all moved on — the rung
117
+ // could not be re-derived from anything then, only re-guessed.
118
+ attribution: active.attribution,
119
+ });
120
+ }
121
+ /**
122
+ * The committing session's own id, or null.
123
+ *
124
+ * ⛔ **THE DIALECT ANSWERS, NOT THIS FILE.** `sessionIdFromEnv` is a required
125
+ * member precisely so a new agent has to declare its own variable rather than
126
+ * inherit a guess (`D3`), and reading `CLAUDE_CODE_SESSION_ID` here would put a
127
+ * second, quieter copy of that knowledge outside the registry.
128
+ *
129
+ * ⚠ **`DEFAULT_AGENT_ID`, because git hands this hook no `--agent=` flag** — the
130
+ * installed script is `vibecommit post-commit`, with no argv to read. Asking
131
+ * every dialect instead would be identical today (the other two answer `null`,
132
+ * UNMEASURED) and would invent a precedence rule nobody has needed yet.
133
+ *
134
+ * ⚠ A value from the WRONG agent is survivable by construction: the ladder's
135
+ * first rung requires a live state file to agree with it, and an id that
136
+ * corroborates nothing drops to the HOLD rung rather than naming anyone.
137
+ */
138
+ function envSessionId(env) {
139
+ return dialectFor(DEFAULT_AGENT_ID).sessionIdFromEnv(env);
140
+ }
141
+ /** git's own `%cI` — strict ISO-8601, the committer date. */
142
+ function committedAt(dir) {
143
+ const out = gitProbe(dir, ["log", "-1", "--format=%cI"]);
144
+ return out === null ? "" : out.trim();
145
+ }
146
+ /**
147
+ * The paths this commit touched.
148
+ *
149
+ * `--no-commit-id --name-only -r` against `HEAD`. ⚠ A MERGE COMMIT yields
150
+ * nothing here — `diff-tree` emits no single diff for one — and that is left as
151
+ * it is rather than papered over with `-m`, which would emit the diff against
152
+ * every parent and multiply the list.
153
+ */
154
+ function changedFiles(dir) {
155
+ const out = gitProbe(dir, ["diff-tree", "--no-commit-id", "--name-only", "-r", "HEAD"]);
156
+ if (out === null)
157
+ return [];
158
+ return out.split("\n").map((l) => l.trim()).filter((l) => l !== "");
159
+ }
160
+ //# sourceMappingURL=post_commit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"post_commit.js","sourceRoot":"","sources":["../../src/hooks/post_commit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * `vibecommit post-rewrite` — the verb git's own `post-rewrite` hook invokes.
3
+ *
4
+ * ## ⛔ WHY IT EXISTS: `post-commit` OBSERVES A SHA THE REWRITE THEN DESTROYS
5
+ *
6
+ * **`M5`: `--amend` and `rebase` both fire `post-commit`, and destroy the sha
7
+ * they fired for.** `--amend` fires `post-commit` for the pre-amend sha AND for
8
+ * the amended one; a `rebase -i` squash fires it for the new sha. **The
9
+ * pre-rewrite sha is unreachable from every branch and gone after
10
+ * `gc --prune=now`** — so nothing downstream can discover, later, that the two
11
+ * commits are the same work. The pairing has to be recorded while git still
12
+ * knows it, and `post-rewrite` is the only hook that is told.
13
+ *
14
+ * **`M6`: the pairs arrive on STDIN.** `argv[1]` is `amend` or `rebase`; stdin
15
+ * carries `<ancestor> <successor>` per line. That is `commit_sha_successors`'
16
+ * shape verbatim, so there is no new table and no migration.
17
+ *
18
+ * ## ⛔ TWO GUARDS, AND THEY ARE NOT REDUNDANCY
19
+ *
20
+ * `M6` measured the squash hazard across sizes and **it is SIZE-DEPENDENT**:
21
+ *
22
+ * | Squash | Fires | Hazard |
23
+ * |---|---|---|
24
+ * | 3 → 1 | `amend A→F` · `rebase A→F; B→F` | ⛔ **duplicate pair** (`A→F` twice) |
25
+ * | 4 → 1 | `amend A→I` · `amend I→F` · `rebase A→F; B→F; C→F` | ⛔ **two rows name `I`**, a sha that never existed on any branch and is gc-able |
26
+ *
27
+ * ⚠ **NEITHER IS THE GENERAL CASE.** The suppression below kills the dead
28
+ * intermediates; `appendRewrites`' dedup kills the duplicate. **One squash size
29
+ * cannot exercise both**, and a review that saw only one concluded a guard was
30
+ * pointless.
31
+ *
32
+ * ## ⛔ THIS RUNS INSIDE THE USER'S `git rebase`
33
+ *
34
+ * The same three rules `post_commit.ts` states, for the same reasons: **never
35
+ * throws, always exits 0; never writes to stdout or stderr; no network.** And,
36
+ * as there, **NO SPAWN BUDGET IS ARMED** — `spawn_budget.ts` is opt-in and only
37
+ * `runHook` arms it, so the probes here take their own ceilings. This is git's
38
+ * process, not the 5s Claude Code hook path.
39
+ */
40
+ export interface PostRewriteEnvironment {
41
+ readonly home: string;
42
+ readonly cwd: string;
43
+ /** See `PostCommitEnvironment.env` — passed, never read from `process.env`. */
44
+ readonly env: NodeJS.ProcessEnv;
45
+ /** git's own `argv[1]`: `amend` or `rebase`. Anything else is not ours to read. */
46
+ readonly kind: string;
47
+ /** The whole of stdin. Read by the caller so this module opens nothing. */
48
+ readonly stdin: string;
49
+ }
50
+ /**
51
+ * Record the rewrite that just happened, or do nothing.
52
+ *
53
+ * Exits 0 unconditionally — git ignores a `post-rewrite` exit code, but an
54
+ * uncaught exception would still print a stack into the terminal where someone
55
+ * is rebasing.
56
+ */
57
+ export declare function runPostRewrite(ctx: PostRewriteEnvironment): number;
58
+ /** How many pairs were newly spooled. Zero is an ordinary answer. */
59
+ export declare function observeRewrites(ctx: PostRewriteEnvironment): number;
@@ -0,0 +1,161 @@
1
+ /**
2
+ * `vibecommit post-rewrite` — the verb git's own `post-rewrite` hook invokes.
3
+ *
4
+ * ## ⛔ WHY IT EXISTS: `post-commit` OBSERVES A SHA THE REWRITE THEN DESTROYS
5
+ *
6
+ * **`M5`: `--amend` and `rebase` both fire `post-commit`, and destroy the sha
7
+ * they fired for.** `--amend` fires `post-commit` for the pre-amend sha AND for
8
+ * the amended one; a `rebase -i` squash fires it for the new sha. **The
9
+ * pre-rewrite sha is unreachable from every branch and gone after
10
+ * `gc --prune=now`** — so nothing downstream can discover, later, that the two
11
+ * commits are the same work. The pairing has to be recorded while git still
12
+ * knows it, and `post-rewrite` is the only hook that is told.
13
+ *
14
+ * **`M6`: the pairs arrive on STDIN.** `argv[1]` is `amend` or `rebase`; stdin
15
+ * carries `<ancestor> <successor>` per line. That is `commit_sha_successors`'
16
+ * shape verbatim, so there is no new table and no migration.
17
+ *
18
+ * ## ⛔ TWO GUARDS, AND THEY ARE NOT REDUNDANCY
19
+ *
20
+ * `M6` measured the squash hazard across sizes and **it is SIZE-DEPENDENT**:
21
+ *
22
+ * | Squash | Fires | Hazard |
23
+ * |---|---|---|
24
+ * | 3 → 1 | `amend A→F` · `rebase A→F; B→F` | ⛔ **duplicate pair** (`A→F` twice) |
25
+ * | 4 → 1 | `amend A→I` · `amend I→F` · `rebase A→F; B→F; C→F` | ⛔ **two rows name `I`**, a sha that never existed on any branch and is gc-able |
26
+ *
27
+ * ⚠ **NEITHER IS THE GENERAL CASE.** The suppression below kills the dead
28
+ * intermediates; `appendRewrites`' dedup kills the duplicate. **One squash size
29
+ * cannot exercise both**, and a review that saw only one concluded a guard was
30
+ * pointless.
31
+ *
32
+ * ## ⛔ THIS RUNS INSIDE THE USER'S `git rebase`
33
+ *
34
+ * The same three rules `post_commit.ts` states, for the same reasons: **never
35
+ * throws, always exits 0; never writes to stdout or stderr; no network.** And,
36
+ * as there, **NO SPAWN BUDGET IS ARMED** — `spawn_budget.ts` is opt-in and only
37
+ * `runHook` arms it, so the probes here take their own ceilings. This is git's
38
+ * process, not the 5s Claude Code hook path.
39
+ */
40
+ import { EXIT } from "../exit.js";
41
+ import { DEFAULT_AGENT_ID, dialectFor } from "../agents/registry.js";
42
+ import { isProjectAllowed } from "../consent.js";
43
+ import { gitProbe } from "../git.js";
44
+ import { resolveProjectKeys } from "../project.js";
45
+ import { activeSessionFor, appendRewrites, isFullSha } from "../spool.js";
46
+ import { existsSync } from "node:fs";
47
+ import { isAbsolute, join } from "node:path";
48
+ /**
49
+ * Record the rewrite that just happened, or do nothing.
50
+ *
51
+ * Exits 0 unconditionally — git ignores a `post-rewrite` exit code, but an
52
+ * uncaught exception would still print a stack into the terminal where someone
53
+ * is rebasing.
54
+ */
55
+ export function runPostRewrite(ctx) {
56
+ try {
57
+ observeRewrites(ctx);
58
+ }
59
+ catch {
60
+ // The contract is silence. There is no channel to report on and no caller
61
+ // who could act: git has already rewritten the commits.
62
+ }
63
+ return EXIT.ok;
64
+ }
65
+ /** How many pairs were newly spooled. Zero is an ordinary answer. */
66
+ export function observeRewrites(ctx) {
67
+ const pairs = parsePairs(ctx.stdin);
68
+ if (pairs.length === 0)
69
+ return 0;
70
+ // ⛔ BOTH KEYS, AS IN `post_commit.ts` (`D184 §1`): the consent gate keys on the
71
+ // git COMMON DIR, and every `git -C` and the session bucket stay on the
72
+ // worktree TOPLEVEL. The variable name does not tell you which is which.
73
+ const keys = resolveProjectKeys(ctx.cwd);
74
+ if (keys === null)
75
+ return 0;
76
+ const toplevel = keys.worktree;
77
+ // ⛔ GUARD 1 — SUPPRESS `amend` WHILE A REBASE IS IN PROGRESS.
78
+ //
79
+ // A `rebase -i` squash fires this hook as `amend` for each intermediate commit
80
+ // it builds along the way, and those intermediates are **discarded**: a 4 → 1
81
+ // squash produces two rows naming a sha that never existed on any branch and is
82
+ // gc-able. The final `rebase` fire carries the pairs that are actually true.
83
+ //
84
+ // ⛔ **MEASURED, and the predicate is exactly this**: `.git/rebase-merge`
85
+ // EXISTS during ALL fires of a `rebase -i`, including both `amend` ones, and
86
+ // does NOT exist for a plain `git commit --amend`. `.git/rebase-apply` never
87
+ // appears for `-i` at all, so it is not consulted.
88
+ //
89
+ // ⚠ It must not swallow an ordinary `--amend`, which is the other cell.
90
+ if (ctx.kind === "amend" && rebaseInProgress(toplevel))
91
+ return 0;
92
+ if (!isProjectAllowed(ctx.home, keys.consent))
93
+ return 0;
94
+ // ⚠ THE SESSION BUCKET, AND THE RUNG IS DELIBERATELY NOT CONSULTED. A pair
95
+ // asserts a relation between two SHAs — `A was rewritten to B` — and claims
96
+ // nothing about who did it, so there is no attribution to be wrong about and
97
+ // nothing for it to put on `x-commit-attributions`. The ladder is used here for
98
+ // the one thing it still decides on this path: which session's spool the pair
99
+ // belongs in, so that the next hook for that session delivers it.
100
+ const active = activeSessionFor(ctx.home, toplevel, envSessionId(ctx.env));
101
+ if (active === null)
102
+ return 0;
103
+ return appendRewrites(ctx.home, { repoKey: toplevel, sessionId: active.sessionId }, pairs);
104
+ }
105
+ /**
106
+ * Is a rebase running right now?
107
+ *
108
+ * ⛔ **THE PATH COMES FROM GIT, NOT FROM JOINING `.git` ONTO THE TOPLEVEL.** A
109
+ * linked worktree's rebase state is its own and does not live in the main clone's
110
+ * git dir, and `--git-common-dir`'s answer is relative in a main clone and
111
+ * absolute in a worktree (`M3`, D184 §8) — a hand-built path is right in exactly
112
+ * one of those shapes. `--git-path` answers for the shape it is actually in, and
113
+ * is resolved against `dir` because that is the directory git ran in.
114
+ *
115
+ * ⚠ A probe failure resolves to FALSE — *not in a rebase* — which is the arm that
116
+ * RECORDS the pair. That is the correct direction here: the cost of a false
117
+ * negative is one extra pair that dedup or the server's own self-pair drop will
118
+ * handle, while a false positive silently discards a real `--amend`.
119
+ */
120
+ function rebaseInProgress(dir) {
121
+ const out = gitProbe(dir, ["rev-parse", "--git-path", "rebase-merge"]);
122
+ if (out === null)
123
+ return false;
124
+ const path = out.trim();
125
+ if (path === "")
126
+ return false;
127
+ return existsSync(isAbsolute(path) ? path : join(dir, path));
128
+ }
129
+ /** See `post_commit.ts`'s copy — the dialect answers, and this file does not read the variable. */
130
+ function envSessionId(env) {
131
+ return dialectFor(DEFAULT_AGENT_ID).sessionIdFromEnv(env);
132
+ }
133
+ /**
134
+ * `<ancestor> <successor>` per line, whitespace-separated.
135
+ *
136
+ * ⚠ **git may append a third field** — the `rebase` form carries extra info for
137
+ * some invocations — so the line is split and the first two fields are taken
138
+ * rather than requiring exactly two. A malformed line is SKIPPED, never fatal:
139
+ * this is a stream from another program, and losing one pair beats losing the
140
+ * batch.
141
+ *
142
+ * ⚠ A self-pair is dropped here as well as in the spool's parser. `parseRewritePairs`
143
+ * drops it server-side too, and a pair that survives to occupy one of the 16 wire
144
+ * slots while meaning nothing is a slot a real pair needed.
145
+ */
146
+ function parsePairs(stdin) {
147
+ const out = [];
148
+ for (const line of stdin.split("\n")) {
149
+ const fields = line.trim().split(/\s+/);
150
+ if (fields.length < 2)
151
+ continue;
152
+ const [ancestor, successor] = fields;
153
+ if (!isFullSha(ancestor) || !isFullSha(successor))
154
+ continue;
155
+ if (ancestor === successor)
156
+ continue;
157
+ out.push({ ancestor, successor });
158
+ }
159
+ return out;
160
+ }
161
+ //# sourceMappingURL=post_rewrite.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"post_rewrite.js","sourceRoot":"","sources":["../../src/hooks/post_rewrite.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,101 @@
1
+ /**
2
+ * `SessionEnd` settles before it reads — `CR-020d`, D57 §DX7.
3
+ *
4
+ * The finding, verbatim: *"`SessionEnd` settles and re-reads inside its timeout.
5
+ * `transcript_path` is documented as written asynchronously and may lag;
6
+ * `SessionEnd` has no next event, so D56's advance-regardless loses the final
7
+ * turn **permanently**."*
8
+ *
9
+ * ## Why only this event
10
+ *
11
+ * The client's whole design tolerates a lagging write: read what is there, leave
12
+ * the offset where it lands, and let the NEXT invocation pick up whatever the
13
+ * write had not flushed yet. `Stop` and `PreCompact` both have a next
14
+ * invocation. `SessionEnd` does not — it is the last hook of the session, so
15
+ * bytes missed here are missed forever, and they are the bytes of the final
16
+ * turn, which is the one a user is most likely to go looking for.
17
+ *
18
+ * So the fix is narrow on purpose: one event pays the cost, and `Stop` behaves
19
+ * exactly as it did before this task. `test/contract.test.ts` asserts that
20
+ * negative half directly, because a change that quietly made every event settle
21
+ * would pass the positive test just as well.
22
+ *
23
+ * ## One wait, not a poll loop
24
+ *
25
+ * The task is "settle-and-reread", singular. D56 §D8 is a founder override that
26
+ * a hook must never block or slow a developer's turn, and "wait until the file
27
+ * stops growing" has no natural upper bound — under load it is unbounded exactly
28
+ * when blocking is least affordable. A single named wait is the simplest thing
29
+ * that closes the finding, and its cost is knowable by reading one constant.
30
+ *
31
+ * ## This module holds no I/O and no clock
32
+ *
33
+ * `settledSize` takes both, for the same reason `policy.ts` is pure: the whole
34
+ * settle rule is then testable without a real 250 ms of wall clock and without a
35
+ * filesystem, and the one place that does touch either is the caller.
36
+ */
37
+ /**
38
+ * The event name Claude Code sends on stdin as `hook_event_name` for the last
39
+ * hook of a session. DESIGN.md §13.7 governs it alongside `Stop` and
40
+ * `PreCompact`; this task changes WHEN bytes are read, never the exit contract.
41
+ */
42
+ export declare const SESSION_END_EVENT = "SessionEnd";
43
+ /**
44
+ * How long to let the transcript settle. **250 ms, and the number is reasoned.**
45
+ *
46
+ * The lag being covered is a local filesystem write-flush artifact — Claude
47
+ * Code's own process appending JSONL lines to a file this process is about to
48
+ * stat — not a network round trip. That puts the expected lag in the
49
+ * tens-of-milliseconds range, so 250 ms is roughly an order of magnitude of
50
+ * margin over the effect it is covering, while staying a twentieth of the
51
+ * default 5 s budget.
52
+ *
53
+ * It is deliberately NOT larger. Every millisecond here is taken from the send
54
+ * that follows (see `settleDelayMs`), and a settle generous enough to cover a
55
+ * pathologically slow write would starve the upload it exists to make complete.
56
+ * If evidence ever shows real lag above this, change the constant and say why —
57
+ * it is one number in one place precisely so that stays cheap.
58
+ */
59
+ export declare const SESSION_END_SETTLE_DELAY_MS = 250;
60
+ /**
61
+ * The most of the hook's budget the settle may ever claim.
62
+ *
63
+ * The settle is carved OUT of the existing budget, never added on top of it, so
64
+ * it competes with the send. This cap is what keeps the constant above safe at
65
+ * any budget: on the 5 s default it never binds (0.3 × 5000 = 1500 ≫ 250), and
66
+ * on a budget small enough that a flat 250 ms would swallow the invocation it
67
+ * scales the settle down instead of eating the send.
68
+ */
69
+ export declare const SETTLE_BUDGET_FRACTION = 0.3;
70
+ /**
71
+ * How long to actually settle, given this invocation's whole budget.
72
+ *
73
+ * The override exists for the same two reasons `resolveCaps` has one
74
+ * (`policy.ts`): an operator on a filesystem slower than this constant assumes
75
+ * can raise it without a release, and the end-to-end test has to widen the
76
+ * window to land an append inside it deterministically rather than racing a
77
+ * child's boot — which varies by an order of magnitude under load (`CR-126`).
78
+ *
79
+ * Unset or unparseable takes the default rather than disabling the settle: a
80
+ * window an empty string can switch off is not a window. The budget cap still
81
+ * applies to the override, so it can widen the settle but never let it swallow
82
+ * the send.
83
+ */
84
+ export declare function settleDelayMs(env: NodeJS.ProcessEnv, budgetMs: number): number;
85
+ /**
86
+ * The transcript's size after letting a lagging write land.
87
+ *
88
+ * Read, wait, read again, and take the LARGER. Growth is the case this exists
89
+ * for: the first read raced a write in progress, and the second sees the final
90
+ * turn the first one missed.
91
+ *
92
+ * **A SHORTER second read keeps the first.** That is truncation or rotation — a
93
+ * different and much rarer failure mode, which this task deliberately does not
94
+ * try to solve; `nextSpan` already resyncs from 0 when the offset sits past EOF,
95
+ * and `readSpan` already sends only the bytes actually present. Named as a known
96
+ * gap rather than handled speculatively.
97
+ *
98
+ * A `null` second read (the file went away mid-settle) also keeps the first, for
99
+ * the same reason: what we saw is better evidence than what we can no longer see.
100
+ */
101
+ export declare function settledSize(sizeOf: () => number | null, wait: (ms: number) => Promise<void>, delayMs: number): Promise<number | null>;