@telora/daemon 0.23.10 → 0.23.14
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/build-info.json +4 -3
- package/dist/composition/attribution-base-git.d.ts.map +1 -1
- package/dist/composition/attribution-base-git.js +3 -1
- package/dist/composition/attribution-base-git.js.map +1 -1
- package/dist/composition/execution-spawn-context.d.ts.map +1 -1
- package/dist/composition/execution-spawn-context.js +2 -1
- package/dist/composition/execution-spawn-context.js.map +1 -1
- package/dist/composition/verification-context.d.ts.map +1 -1
- package/dist/composition/verification-context.js +21 -4
- package/dist/composition/verification-context.js.map +1 -1
- package/dist/queries/verification/verification.js +1 -1
- package/dist/spawn/worktree-session.d.ts.map +1 -1
- package/dist/spawn/worktree-session.js +19 -5
- package/dist/spawn/worktree-session.js.map +1 -1
- package/dist/testing/fixtures/verification-deps.d.ts +2 -1
- package/dist/testing/fixtures/verification-deps.d.ts.map +1 -1
- package/dist/testing/fixtures/verification-deps.js +4 -1
- package/dist/testing/fixtures/verification-deps.js.map +1 -1
- package/dist/testing/fixtures/vitest-failure-log.d.ts +10 -0
- package/dist/testing/fixtures/vitest-failure-log.d.ts.map +1 -0
- package/dist/testing/fixtures/vitest-failure-log.js +27 -0
- package/dist/testing/fixtures/vitest-failure-log.js.map +1 -0
- package/dist/verify/attribution/verification-attribution.d.ts.map +1 -1
- package/dist/verify/attribution/verification-attribution.js +2 -1
- package/dist/verify/attribution/verification-attribution.js.map +1 -1
- package/dist/verify/attribution/verification-baseline-files.d.ts +29 -0
- package/dist/verify/attribution/verification-baseline-files.d.ts.map +1 -0
- package/dist/verify/attribution/verification-baseline-files.js +125 -0
- package/dist/verify/attribution/verification-baseline-files.js.map +1 -0
- package/dist/verify/attribution/verification-baseline-run.d.ts.map +1 -1
- package/dist/verify/attribution/verification-baseline-run.js +1 -0
- package/dist/verify/attribution/verification-baseline-run.js.map +1 -1
- package/dist/verify/attribution/verification-baseline.d.ts +15 -0
- package/dist/verify/attribution/verification-baseline.d.ts.map +1 -1
- package/dist/verify/attribution/verification-baseline.js +28 -3
- package/dist/verify/attribution/verification-baseline.js.map +1 -1
- package/dist/verify/deterministic-gate/verification-checkout.d.ts.map +1 -1
- package/dist/verify/deterministic-gate/verification-checkout.js +1 -0
- package/dist/verify/deterministic-gate/verification-checkout.js.map +1 -1
- package/dist/verify/deterministic-gate/verification-deterministic.d.ts +30 -0
- package/dist/verify/deterministic-gate/verification-deterministic.d.ts.map +1 -1
- package/dist/verify/deterministic-gate/verification-deterministic.js +2 -0
- package/dist/verify/deterministic-gate/verification-deterministic.js.map +1 -1
- package/dist/verify/deterministic-gate/verification-gate-stages.d.ts.map +1 -1
- package/dist/verify/deterministic-gate/verification-gate-stages.js +1 -0
- package/dist/verify/deterministic-gate/verification-gate-stages.js.map +1 -1
- package/dist/verify/engine/verification-commit-sharing.d.ts.map +1 -1
- package/dist/verify/engine/verification-commit-sharing.js +14 -2
- package/dist/verify/engine/verification-commit-sharing.js.map +1 -1
- package/dist/verify/engine/verification-deps.d.ts +23 -0
- package/dist/verify/engine/verification-deps.d.ts.map +1 -1
- package/dist/verify/failing-test-rerun/failing-test-rerunner.d.ts +34 -0
- package/dist/verify/failing-test-rerun/failing-test-rerunner.d.ts.map +1 -0
- package/dist/verify/failing-test-rerun/failing-test-rerunner.js +34 -0
- package/dist/verify/failing-test-rerun/failing-test-rerunner.js.map +1 -0
- package/dist/verify/failing-test-rerun/failing-test-retry.d.ts +80 -0
- package/dist/verify/failing-test-rerun/failing-test-retry.d.ts.map +1 -0
- package/dist/verify/failing-test-rerun/failing-test-retry.js +102 -0
- package/dist/verify/failing-test-rerun/failing-test-retry.js.map +1 -0
- package/dist/verify/failing-test-rerun/flaky-test-finding.d.ts +11 -0
- package/dist/verify/failing-test-rerun/flaky-test-finding.d.ts.map +1 -0
- package/dist/verify/failing-test-rerun/flaky-test-finding.js +63 -0
- package/dist/verify/failing-test-rerun/flaky-test-finding.js.map +1 -0
- package/dist/verify/failing-test-rerun/rerun-command.d.ts +45 -0
- package/dist/verify/failing-test-rerun/rerun-command.d.ts.map +1 -0
- package/dist/verify/failing-test-rerun/rerun-command.js +132 -0
- package/dist/verify/failing-test-rerun/rerun-command.js.map +1 -0
- package/dist/verify/failing-test-rerun/rework-recheck.d.ts +41 -0
- package/dist/verify/failing-test-rerun/rework-recheck.d.ts.map +1 -0
- package/dist/verify/failing-test-rerun/rework-recheck.js +169 -0
- package/dist/verify/failing-test-rerun/rework-recheck.js.map +1 -0
- package/dist/verify/gate-config/verification-config.d.ts.map +1 -1
- package/dist/verify/gate-config/verification-config.js +16 -2
- package/dist/verify/gate-config/verification-config.js.map +1 -1
- package/dist/verify/gate-config/verification-manifest.d.ts +26 -1
- package/dist/verify/gate-config/verification-manifest.d.ts.map +1 -1
- package/dist/verify/gate-config/verification-manifest.js +31 -1
- package/dist/verify/gate-config/verification-manifest.js.map +1 -1
- package/dist/verify/shortfalls/ruling-evidence-resolution.d.ts +8 -0
- package/dist/verify/shortfalls/ruling-evidence-resolution.d.ts.map +1 -1
- package/dist/verify/shortfalls/ruling-evidence-resolution.js +11 -1
- package/dist/verify/shortfalls/ruling-evidence-resolution.js.map +1 -1
- package/dist/worktree/hook-enforcement-required.d.ts +34 -0
- package/dist/worktree/hook-enforcement-required.d.ts.map +1 -0
- package/dist/worktree/hook-enforcement-required.js +24 -0
- package/dist/worktree/hook-enforcement-required.js.map +1 -0
- package/dist/worktree/worktree-hooks.d.ts +12 -6
- package/dist/worktree/worktree-hooks.d.ts.map +1 -1
- package/dist/worktree/worktree-hooks.js +20 -12
- package/dist/worktree/worktree-hooks.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verification-manifest.d.ts","sourceRoot":"","sources":["../../../src/verify/gate-config/verification-manifest.ts"],"names":[],"mappings":"AAgFA;;;;;;;GAOG;AACH,eAAO,MAAM,wBAAwB,uBAAuB,CAAC;AAE7D;;;;;;;GAOG;AACH,MAAM,WAAW,cAAc;IAC7B,sEAAsE;IACtE,OAAO,EAAE,MAAM,CAAC;IAChB,uEAAuE;IACvE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6EAA6E;IAC7E,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"verification-manifest.d.ts","sourceRoot":"","sources":["../../../src/verify/gate-config/verification-manifest.ts"],"names":[],"mappings":"AAgFA;;;;;;;GAOG;AACH,eAAO,MAAM,wBAAwB,uBAAuB,CAAC;AAE7D;;;;;;;GAOG;AACH,MAAM,WAAW,cAAc;IAC7B,sEAAsE;IACtE,OAAO,EAAE,MAAM,CAAC;IAChB,uEAAuE;IACvE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6EAA6E;IAC7E,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;;;;;;;OAWG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,0EAA0E;AAC1E,eAAO,MAAM,uBAAuB,YAAY,CAAC;AAEjD,wGAAwG;AACxG,eAAO,MAAM,0BAA0B,IAAI,CAAC;AAE5C;;;;;GAKG;AACH,MAAM,WAAW,gBAAgB;IAC/B,qDAAqD;IACrD,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAC9B,6EAA6E;IAC7E,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;CAChC;AAQD,qFAAqF;AACrF,MAAM,MAAM,oBAAoB,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,KAAK,cAAc,GAAG,SAAS,CAAC;AAEhG,0DAA0D;AAC1D,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAElE;AAoED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,EAAE,EAAE,gBAAgB,GAAG,cAAc,GAAG,SAAS,CAiDrH;AAED,wGAAwG;AACxG,eAAO,MAAM,kBAAkB,EAAE,oBAAoF,CAAC;AAEtH;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GAAG,MAAM,GAAG,SAAS,CAOzG"}
|
|
@@ -84,6 +84,10 @@ import { resolve } from 'node:path';
|
|
|
84
84
|
* trackable (`git check-ignore -v telora.verify.json` finds no match).
|
|
85
85
|
*/
|
|
86
86
|
export const VERIFY_MANIFEST_FILENAME = 'telora.verify.json';
|
|
87
|
+
/** The placeholder a `rerunCommand` names the failing test files with. */
|
|
88
|
+
export const RERUN_FILES_PLACEHOLDER = '{files}';
|
|
89
|
+
/** The failure-set ceiling a manifest that declares a `rerunCommand` but no `rerunMaxFailures` gets. */
|
|
90
|
+
export const DEFAULT_RERUN_MAX_FAILURES = 5;
|
|
87
91
|
/** The working tree on disk, as readVerifyManifest reads it. */
|
|
88
92
|
const workingTreeFs = {
|
|
89
93
|
exists: (path) => existsSync(path),
|
|
@@ -129,6 +133,28 @@ function optionalCommand(raw, key, path) {
|
|
|
129
133
|
}
|
|
130
134
|
return value;
|
|
131
135
|
}
|
|
136
|
+
/**
|
|
137
|
+
* Validate the optional re-run declaration. A `rerunCommand` that cannot name
|
|
138
|
+
* the files (no `{files}` placeholder) or a `rerunMaxFailures` that is not a
|
|
139
|
+
* positive integer is malformed (loud), like every other present-but-wrong key.
|
|
140
|
+
*/
|
|
141
|
+
function optionalRerun(raw, path) {
|
|
142
|
+
const rerunCommand = optionalCommand(raw, 'rerunCommand', path);
|
|
143
|
+
if (rerunCommand !== undefined && !rerunCommand.includes(RERUN_FILES_PLACEHOLDER)) {
|
|
144
|
+
manifestError(path, `"rerunCommand" must name the test files with the placeholder ${RERUN_FILES_PLACEHOLDER} (got ${JSON.stringify(rerunCommand)})`);
|
|
145
|
+
}
|
|
146
|
+
const rerunMaxFailures = raw.rerunMaxFailures;
|
|
147
|
+
if (rerunMaxFailures !== undefined && (typeof rerunMaxFailures !== 'number' || !Number.isInteger(rerunMaxFailures) || rerunMaxFailures <= 0)) {
|
|
148
|
+
manifestError(path, `"rerunMaxFailures" must be an integer > 0 (got ${JSON.stringify(rerunMaxFailures)})`);
|
|
149
|
+
}
|
|
150
|
+
if (rerunMaxFailures !== undefined && rerunCommand === undefined) {
|
|
151
|
+
manifestError(path, `"rerunMaxFailures" is set but no "rerunCommand" is declared -- it bounds nothing without one`);
|
|
152
|
+
}
|
|
153
|
+
return {
|
|
154
|
+
...(rerunCommand !== undefined ? { rerunCommand } : {}),
|
|
155
|
+
...(rerunMaxFailures !== undefined ? { rerunMaxFailures } : {}),
|
|
156
|
+
};
|
|
157
|
+
}
|
|
132
158
|
/**
|
|
133
159
|
* Read the repo's verification manifest through `fs`.
|
|
134
160
|
*
|
|
@@ -139,7 +165,9 @@ function optionalCommand(raw, key, path) {
|
|
|
139
165
|
* @throws Error naming the file path when the manifest exists but is
|
|
140
166
|
* unreadable / not JSON / not an object / carries no usable `command`
|
|
141
167
|
* / carries a non-positive `timeoutMs` or `maxConcurrent` / carries a
|
|
142
|
-
* `commitCheck` that is not a non-empty string
|
|
168
|
+
* `commitCheck` that is not a non-empty string / carries a
|
|
169
|
+
* `rerunCommand` without the `{files}` placeholder or a non-integer
|
|
170
|
+
* `rerunMaxFailures`.
|
|
143
171
|
*/
|
|
144
172
|
export function readVerifyManifestFrom(repoPath, fs) {
|
|
145
173
|
if (!repoPath)
|
|
@@ -177,11 +205,13 @@ export function readVerifyManifestFrom(repoPath, fs) {
|
|
|
177
205
|
const timeoutMs = optionalPositiveNumber(raw, 'timeoutMs', path);
|
|
178
206
|
const maxConcurrent = optionalPositiveNumber(raw, 'maxConcurrent', path);
|
|
179
207
|
const commitCheck = optionalCommand(raw, 'commitCheck', path);
|
|
208
|
+
const rerun = optionalRerun(raw, path);
|
|
180
209
|
return {
|
|
181
210
|
command,
|
|
182
211
|
...(timeoutMs !== undefined ? { timeoutMs } : {}),
|
|
183
212
|
...(maxConcurrent !== undefined ? { maxConcurrent } : {}),
|
|
184
213
|
...(commitCheck !== undefined ? { commitCheck } : {}),
|
|
214
|
+
...rerun,
|
|
185
215
|
};
|
|
186
216
|
}
|
|
187
217
|
/** Read the repo's verification manifest from the working tree on disk (see readVerifyManifestFrom). */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verification-manifest.js","sourceRoot":"","sources":["../../../src/verify/gate-config/verification-manifest.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,gGAAgG;AAChG,8EAA8E;AAC9E,+EAA+E;AAC/E,2EAA2E;AAC3E,mFAAmF;AACnF,oEAAoE;AACpE,4EAA4E;AAC5E,6EAA6E;AAC7E,sEAAsE;AACtE,yFAAyF;AACzF,2EAA2E;AAC3E,2EAA2E;AAC3E,uEAAuE;AACvE,oFAAoF;AACpF,0EAA0E;AAC1E,yEAAyE;AACzE,mFAAmF;AACnF,8EAA8E;AAC9E,uFAAuF;AACvF,gBAAgB;AAEhB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqDG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"verification-manifest.js","sourceRoot":"","sources":["../../../src/verify/gate-config/verification-manifest.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,6 +19,14 @@ export interface RulingEvidenceCheck {
|
|
|
19
19
|
export declare const NO_EVIDENCE_REF = "(no evidence named)";
|
|
20
20
|
/** How many lines a blob has: a trailing newline does not start another line. Pure. */
|
|
21
21
|
export declare function countLines(content: string): number;
|
|
22
|
+
/**
|
|
23
|
+
* Whether a test title appears literally in its source. A runner prints a title with
|
|
24
|
+
* its quotes UNESCAPED (`it('the daemon\'s check')` runs as "the daemon's check"), so a
|
|
25
|
+
* citation of the printed title is matched against the source both as written and
|
|
26
|
+
* with backslash-escaped quotes and backslashes unescaped. Found 2026-10-02: a real,
|
|
27
|
+
* correctly cited title failed to resolve because the source escaped its apostrophe.
|
|
28
|
+
*/
|
|
29
|
+
export declare function literalTitleAppears(source: string, testName: string): boolean;
|
|
22
30
|
/**
|
|
23
31
|
* The real resolver, and the ONE path both a review met's evidence and a verify
|
|
24
32
|
* judge's citations resolve through (verify/effect-reconciliation/judge-workspace.ts):
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ruling-evidence-resolution.d.ts","sourceRoot":"","sources":["../../../src/verify/shortfalls/ruling-evidence-resolution.ts"],"names":[],"mappings":"AA0CA,OAAO,EAAoB,KAAK,WAAW,EAAE,MAAM,mCAAmC,CAAC;AASvF,4DAA4D;AAC5D,MAAM,WAAW,qBAAqB;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;GAIG;AACH,MAAM,MAAM,sBAAsB,GAAG,CAAC,IAAI,EAAE,SAAS,WAAW,EAAE,EAAE,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAAC;AAErH,sGAAsG;AACtG,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,CAAC,EAAE,sBAAsB,CAAC;CAClC;AAED,oEAAoE;AACpE,eAAO,MAAM,eAAe,wBAAwB,CAAC;AAKrD,uFAAuF;AACvF,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAIlD;
|
|
1
|
+
{"version":3,"file":"ruling-evidence-resolution.d.ts","sourceRoot":"","sources":["../../../src/verify/shortfalls/ruling-evidence-resolution.ts"],"names":[],"mappings":"AA0CA,OAAO,EAAoB,KAAK,WAAW,EAAE,MAAM,mCAAmC,CAAC;AASvF,4DAA4D;AAC5D,MAAM,WAAW,qBAAqB;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;GAIG;AACH,MAAM,MAAM,sBAAsB,GAAG,CAAC,IAAI,EAAE,SAAS,WAAW,EAAE,EAAE,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAAC;AAErH,sGAAsG;AACtG,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,CAAC,EAAE,sBAAsB,CAAC;CAClC;AAED,oEAAoE;AACpE,eAAO,MAAM,eAAe,wBAAwB,CAAC;AAKrD,uFAAuF;AACvF,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAIlD;AAeD;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAE7E;AAqBD;;;;;;;;;;GAUG;AACH,wBAAsB,2BAA2B,CAC/C,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,SAAS,WAAW,EAAE,EAC5B,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAOlC;AAED;;;;GAIG;AACH,wBAAsB,0BAA0B,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC,CAMvH;AAED;;;;GAIG;AACH,wBAAsB,wBAAwB,CAC5C,QAAQ,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,EACvC,KAAK,EAAE,mBAAmB,GAAG,SAAS,GACrC,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAqBlC;AAED,gHAAgH;AAChH,wBAAgB,sBAAsB,CAAC,CAAC,EACtC,CAAC,EAAE,CAAC,EACJ,SAAS,EAAE,MAAM,GAAG,IAAI,EACxB,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,WAAW,EAAE,EAAE,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,qBAAqB,EAAE,CAAC,GAC7F,mBAAmB,CAErB"}
|
|
@@ -68,6 +68,16 @@ async function git(repoPath, args) {
|
|
|
68
68
|
return { ok: false, message: detail.split('\n')[0] ?? detail, code: e.code, stderr };
|
|
69
69
|
}
|
|
70
70
|
}
|
|
71
|
+
/**
|
|
72
|
+
* Whether a test title appears literally in its source. A runner prints a title with
|
|
73
|
+
* its quotes UNESCAPED (`it('the daemon\'s check')` runs as "the daemon's check"), so a
|
|
74
|
+
* citation of the printed title is matched against the source both as written and
|
|
75
|
+
* with backslash-escaped quotes and backslashes unescaped. Found 2026-10-02: a real,
|
|
76
|
+
* correctly cited title failed to resolve because the source escaped its apostrophe.
|
|
77
|
+
*/
|
|
78
|
+
export function literalTitleAppears(source, testName) {
|
|
79
|
+
return source.includes(testName) || source.replace(/\\(['"`\\])/g, '$1').includes(testName);
|
|
80
|
+
}
|
|
71
81
|
/** Resolve one parsed reference at `sha` in `repoPath`: null when it resolves, else the reason. */
|
|
72
82
|
async function resolveOne(repoPath, ref, sha) {
|
|
73
83
|
const object = `${sha}:${ref.path}`;
|
|
@@ -81,7 +91,7 @@ async function resolveOne(repoPath, ref, sha) {
|
|
|
81
91
|
const blob = await git(repoPath, ['cat-file', 'blob', object]);
|
|
82
92
|
if (!blob.ok)
|
|
83
93
|
return `${ref.path} could not be read at ${sha.slice(0, 12)} (${blob.message})`;
|
|
84
|
-
if (ref.testName !== undefined && !blob.stdout
|
|
94
|
+
if (ref.testName !== undefined && !literalTitleAppears(blob.stdout, ref.testName) && !matchesGeneratedTestTitle(blob.stdout, ref.testName)) {
|
|
85
95
|
return `test "${ref.testName}" does not appear in ${ref.path} at ${sha.slice(0, 12)}`;
|
|
86
96
|
}
|
|
87
97
|
if (ref.line !== undefined) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ruling-evidence-resolution.js","sourceRoot":"","sources":["../../../src/verify/shortfalls/ruling-evidence-resolution.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"ruling-evidence-resolution.js","sourceRoot":"","sources":["../../../src/verify/shortfalls/ruling-evidence-resolution.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,8EAA8E;AAC9E,qEAAqE;AACrE,6EAA6E;AAC7E,gBAAgB;AAEhB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,gBAAgB,EAAoB,MAAM,mCAAmC,CAAC;AACvF,OAAO,EAAE,cAAc,EAAE,MAAM,4CAA4C,CAAC;AAC5E,OAAO,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AAEvE,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAE1C,gFAAgF;AAChF,MAAM,aAAa,GAAG,gCAAgC,CAAC;AAqBvD,oEAAoE;AACpE,MAAM,CAAC,MAAM,eAAe,GAAG,qBAAqB,CAAC;AAErD,MAAM,cAAc,GAAG,MAAM,CAAC;AAC9B,MAAM,cAAc,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AAExC,uFAAuF;AACvF,MAAM,UAAU,UAAU,CAAC,OAAe;IACxC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IACnC,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IAC9C,OAAO,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;AACtD,CAAC;AAED,0IAA0I;AAC1I,KAAK,UAAU,GAAG,CAAC,QAAgB,EAAE,IAAc;IACjD,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,cAAc,EAAE,EAAE,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;QACpK,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAC9B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,GAAG,GAA8D,CAAC;QACzE,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnE,MAAM,MAAM,GAAG,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,IAAI,GAAG,CAAC,CAAC;QACjE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;IACvF,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAc,EAAE,QAAgB;IAClE,OAAO,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAC9F,CAAC;AAED,mGAAmG;AACnG,KAAK,UAAU,UAAU,CAAC,QAAgB,EAAE,GAAgB,EAAE,GAAW;IACvE,MAAM,MAAM,GAAG,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;IACpC,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,QAAQ,EAAE,CAAC,UAAU,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;IAC7D,IAAI,CAAC,IAAI,CAAC,EAAE;QAAE,OAAO,GAAG,GAAG,CAAC,IAAI,sBAAsB,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,IAAI,CAAC,OAAO,GAAG,CAAC;IAC3F,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,MAAM;QAAE,OAAO,GAAG,GAAG,CAAC,IAAI,SAAS,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC;IACtH,IAAI,GAAG,CAAC,QAAQ,KAAK,SAAS,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACtE,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,QAAQ,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC/D,IAAI,CAAC,IAAI,CAAC,EAAE;QAAE,OAAO,GAAG,GAAG,CAAC,IAAI,yBAAyB,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,IAAI,CAAC,OAAO,GAAG,CAAC;IAC9F,IAAI,GAAG,CAAC,QAAQ,KAAK,SAAS,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC3I,OAAO,SAAS,GAAG,CAAC,QAAQ,wBAAwB,GAAG,CAAC,IAAI,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;IACxF,CAAC;IACD,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACtC,IAAI,KAAK,GAAG,GAAG,CAAC,IAAI;YAAE,OAAO,GAAG,GAAG,CAAC,IAAI,QAAQ,KAAK,eAAe,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,qBAAqB,GAAG,CAAC,IAAI,EAAE,CAAC;IACtH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,QAAgB,EAChB,IAA4B,EAC5B,GAAW;IAEX,MAAM,GAAG,GAA4B,EAAE,CAAC;IACxC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QACpD,IAAI,MAAM,KAAK,IAAI;YAAE,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC;IAC1D,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAAC,QAAgB,EAAE,GAAW,EAAE,KAAa;IAC3F,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;IAC9E,0FAA0F;IAC1F,IAAI,CAAC,GAAG,CAAC,EAAE;QAAE,OAAO,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC;IAC1E,OAAO,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;SACzD,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC1F,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,QAAuC,EACvC,KAAsC;IAEtC,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvC,OAAO,CAAC,EAAE,GAAG,EAAE,eAAe,EAAE,MAAM,EAAE,0EAA0E,EAAE,CAAC,CAAC;IACxH,CAAC;IACD,MAAM,SAAS,GAAG,KAAK,EAAE,SAAS,IAAI,IAAI,CAAC;IAC3C,IAAI,SAAS,KAAK,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QACzD,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,+CAA+C,EAAE,CAAC,CAAC,CAAC;IACnG,CAAC;IACD,IAAI,CAAC,KAAK,EAAE,OAAO;QAAE,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,+BAA+B,EAAE,CAAC,CAAC,CAAC;IACtG,MAAM,QAAQ,GAA4B,EAAE,CAAC;IAC7C,MAAM,MAAM,GAAkB,EAAE,CAAC;IACjC,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,MAAM,CAAC,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,CAAC,KAAK,IAAI;YAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,uEAAuE,EAAE,CAAC,CAAC;;YACxH,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACtB,CAAC;IACD,IAAI,CAAC;QACH,OAAO,CAAC,GAAG,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC7F,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,QAAQ,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,wBAAyB,GAAa,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IACzH,CAAC;AACH,CAAC;AAED,gHAAgH;AAChH,MAAM,UAAU,sBAAsB,CACpC,CAAI,EACJ,SAAwB,EACxB,OAA8F;IAE9F,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;AACtE,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* An agent never runs in a worktree whose git hooks are not in force.
|
|
3
|
+
*
|
|
4
|
+
* The execution-worktree guards (worktree-hooks.ts) are the commit-time checks
|
|
5
|
+
* an agent cannot skip: the Telora-Delivery trailer `commit-msg` hook on every
|
|
6
|
+
* writable worktree, the repo's declared commit check as `pre-commit`, and the
|
|
7
|
+
* read-only audit block. They take effect only through the worktree's own
|
|
8
|
+
* `core.hooksPath`. When that cannot be set (worktreeConfig will not enable, or
|
|
9
|
+
* the per-worktree write fails) the installers refuse to fall back to the
|
|
10
|
+
* SHARED hooksPath, so the worktree has NO hooks.
|
|
11
|
+
*
|
|
12
|
+
* This is the fail-closed wrapper for AGENT worktrees: install the guards and,
|
|
13
|
+
* if enforcement is not in effect, throw. The spawn path turns the throw into
|
|
14
|
+
* `unavailable` (no session starts; the next poll retries; the installer's WARN
|
|
15
|
+
* names the cause). The daemon's own merge worktree keeps the warn-only
|
|
16
|
+
* installer: its commits are the daemon's, and refusing there would stop all
|
|
17
|
+
* worktree provisioning.
|
|
18
|
+
*
|
|
19
|
+
* History: docs/daemon/history-platform.md (worktree/hook-enforcement-required.ts).
|
|
20
|
+
*/
|
|
21
|
+
import type { ExecutionWorktreeGuardOptions } from './worktree-hooks.js';
|
|
22
|
+
/** Thrown when an agent worktree's git hooks cannot be put in force. */
|
|
23
|
+
export declare class HookEnforcementUnavailableError extends Error {
|
|
24
|
+
readonly worktreePath: string;
|
|
25
|
+
constructor(worktreePath: string);
|
|
26
|
+
}
|
|
27
|
+
export type GuardInstaller = (worktreePath: string, readOnly: boolean, opts: ExecutionWorktreeGuardOptions) => boolean;
|
|
28
|
+
/**
|
|
29
|
+
* Install the execution guards on an agent worktree, refusing (throwing) when they
|
|
30
|
+
* are not in effect. `install` is the production installExecutionWorktreeGuards,
|
|
31
|
+
* bound at the composition root.
|
|
32
|
+
*/
|
|
33
|
+
export declare function installAgentWorktreeGuards(worktreePath: string, readOnly: boolean, opts: ExecutionWorktreeGuardOptions, install: GuardInstaller): void;
|
|
34
|
+
//# sourceMappingURL=hook-enforcement-required.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hook-enforcement-required.d.ts","sourceRoot":"","sources":["../../src/worktree/hook-enforcement-required.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,qBAAqB,CAAC;AAEzE,wEAAwE;AACxE,qBAAa,+BAAgC,SAAQ,KAAK;IAC5C,QAAQ,CAAC,YAAY,EAAE,MAAM;gBAApB,YAAY,EAAE,MAAM;CAO1C;AAED,MAAM,MAAM,cAAc,GAAG,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,6BAA6B,KAAK,OAAO,CAAC;AAEvH;;;;GAIG;AACH,wBAAgB,0BAA0B,CACxC,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,OAAO,EACjB,IAAI,EAAE,6BAA6B,EACnC,OAAO,EAAE,cAAc,GACtB,IAAI,CAEN"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
// PINNED-BY-BEGIN (generated by gen:pinned-by -- do not hand-edit; checked by lint:pinned-by)
|
|
2
|
+
// Pinned by: packages/daemon/src/spawn/worktree-session.test.ts,
|
|
3
|
+
// packages/daemon/src/worktree/hook-enforcement-required.test.ts
|
|
4
|
+
// PINNED-BY-END
|
|
5
|
+
/** Thrown when an agent worktree's git hooks cannot be put in force. */
|
|
6
|
+
export class HookEnforcementUnavailableError extends Error {
|
|
7
|
+
worktreePath;
|
|
8
|
+
constructor(worktreePath) {
|
|
9
|
+
super(`git hook enforcement is not in effect for ${worktreePath}: no agent session ` +
|
|
10
|
+
`may run there (its commits would skip the delivery trailer and commit checks)`);
|
|
11
|
+
this.worktreePath = worktreePath;
|
|
12
|
+
this.name = 'HookEnforcementUnavailableError';
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Install the execution guards on an agent worktree, refusing (throwing) when they
|
|
17
|
+
* are not in effect. `install` is the production installExecutionWorktreeGuards,
|
|
18
|
+
* bound at the composition root.
|
|
19
|
+
*/
|
|
20
|
+
export function installAgentWorktreeGuards(worktreePath, readOnly, opts, install) {
|
|
21
|
+
if (!install(worktreePath, readOnly, opts))
|
|
22
|
+
throw new HookEnforcementUnavailableError(worktreePath);
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=hook-enforcement-required.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hook-enforcement-required.js","sourceRoot":"","sources":["../../src/worktree/hook-enforcement-required.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,iEAAiE;AACjE,mEAAmE;AACnE,gBAAgB;AAyBhB,wEAAwE;AACxE,MAAM,OAAO,+BAAgC,SAAQ,KAAK;IACnC;IAArB,YAAqB,YAAoB;QACvC,KAAK,CACH,6CAA6C,YAAY,qBAAqB;YAC5E,+EAA+E,CAClF,CAAC;QAJiB,iBAAY,GAAZ,YAAY,CAAQ;QAKvC,IAAI,CAAC,IAAI,GAAG,iCAAiC,CAAC;IAChD,CAAC;CACF;AAID;;;;GAIG;AACH,MAAM,UAAU,0BAA0B,CACxC,YAAoB,EACpB,QAAiB,EACjB,IAAmC,EACnC,OAAuB;IAEvB,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,QAAQ,EAAE,IAAI,CAAC;QAAE,MAAM,IAAI,+BAA+B,CAAC,YAAY,CAAC,CAAC;AACtG,CAAC"}
|
|
@@ -30,9 +30,10 @@ type GitRunner = (args: string[], cwd: string) => GitResult;
|
|
|
30
30
|
*
|
|
31
31
|
* The enforcement self-check runs on EVERY path (there is no early return before
|
|
32
32
|
* it): on a failed path it finds the guard is not in effect and logs the loud
|
|
33
|
-
* "failing OPEN" WARN
|
|
33
|
+
* "failing OPEN" WARN. It also RETURNS whether the guard is in effect, so a
|
|
34
|
+
* caller that must not run agents unguarded can refuse (hook-enforcement-required.ts).
|
|
34
35
|
*/
|
|
35
|
-
export declare function configureWorktreeHooksPath(worktreePath: string, hooksDir: string, runGit: GitRunner):
|
|
36
|
+
export declare function configureWorktreeHooksPath(worktreePath: string, hooksDir: string, runGit: GitRunner): boolean;
|
|
36
37
|
/**
|
|
37
38
|
* Migrate away a stale, daemon-written SHARED `core.hooksPath` that a pre-0.21.62
|
|
38
39
|
* daemon wrote pointing into a daemon worktree's `.telora-hooks` dir -- an
|
|
@@ -108,7 +109,7 @@ export declare function checkRepoHookEnforcementState(repoPath: string): RepoHoo
|
|
|
108
109
|
* Install a pre-commit hook in a worktree that blocks all commits.
|
|
109
110
|
* Used for read-only audit sessions.
|
|
110
111
|
*/
|
|
111
|
-
export declare function installAuditPreCommitHook(worktreePath: string):
|
|
112
|
+
export declare function installAuditPreCommitHook(worktreePath: string): boolean;
|
|
112
113
|
/**
|
|
113
114
|
* Write (or merge into) the worktree's `.claude/settings.json` a write-deny
|
|
114
115
|
* overlay so a read-only audit team physically cannot Write/Edit or run
|
|
@@ -159,7 +160,7 @@ export declare function writeCodexReadOnlyOverlay(worktreePath: string): void;
|
|
|
159
160
|
* read-only permission profile. Single entry point so every read-only
|
|
160
161
|
* worktree-setup site gets identical coverage.
|
|
161
162
|
*/
|
|
162
|
-
export declare function installReadOnlyAuditGuards(worktreePath: string):
|
|
163
|
+
export declare function installReadOnlyAuditGuards(worktreePath: string): boolean;
|
|
163
164
|
/**
|
|
164
165
|
* Install a `commit-msg` hook in a worktree that REFUSES any commit whose
|
|
165
166
|
* message lacks a well-formed `Telora-Delivery: <uuid>` trailer.
|
|
@@ -207,7 +208,7 @@ export declare function installReadOnlyAuditGuards(worktreePath: string): void;
|
|
|
207
208
|
* audit pre-commit block (which runs first and blocks the commit outright)
|
|
208
209
|
* without weakening it.
|
|
209
210
|
*/
|
|
210
|
-
export declare function installDeliveryTrailerCommitMsgHook(worktreePath: string):
|
|
211
|
+
export declare function installDeliveryTrailerCommitMsgHook(worktreePath: string): boolean;
|
|
211
212
|
/** What a caller supplies beyond the read-only flag. */
|
|
212
213
|
export interface ExecutionWorktreeGuardOptions {
|
|
213
214
|
/**
|
|
@@ -236,7 +237,12 @@ export interface ExecutionWorktreeGuardOptions {
|
|
|
236
237
|
* gets the trailer hook, but its pre-commit block runs first and refuses the
|
|
237
238
|
* commit outright, so the two coexist without the trailer hook weakening the
|
|
238
239
|
* read-only guarantee.
|
|
240
|
+
*
|
|
241
|
+
* Returns whether hook enforcement is actually in effect (the worktree's own
|
|
242
|
+
* core.hooksPath resolves to its hooks dir and the hooks exist). The daemon's
|
|
243
|
+
* merge worktree only logs a false; an AGENT worktree refuses to spawn on it
|
|
244
|
+
* (hook-enforcement-required.ts).
|
|
239
245
|
*/
|
|
240
|
-
export declare function installExecutionWorktreeGuards(worktreePath: string, readOnly: boolean, opts?: ExecutionWorktreeGuardOptions):
|
|
246
|
+
export declare function installExecutionWorktreeGuards(worktreePath: string, readOnly: boolean, opts?: ExecutionWorktreeGuardOptions): boolean;
|
|
241
247
|
export {};
|
|
242
248
|
//# sourceMappingURL=worktree-hooks.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worktree-hooks.d.ts","sourceRoot":"","sources":["../../src/worktree/worktree-hooks.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"worktree-hooks.d.ts","sourceRoot":"","sources":["../../src/worktree/worktree-hooks.ts"],"names":[],"mappings":"AAgCA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAarD;;;;;;GAMG;AACH,KAAK,SAAS,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,KAAK,SAAS,CAAC;AAE5D;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,0BAA0B,CACxC,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,SAAS,GAChB,OAAO,CAsBT;AA6BD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CA8CxF;AAED,oFAAoF;AACpF,MAAM,MAAM,wBAAwB,GAAG,OAAO,GAAG,UAAU,GAAG,UAAU,CAAC;AAEzE;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,6BAA6B,CAAC,QAAQ,EAAE,MAAM,GAAG,wBAAwB,CAiBxF;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAmCvE;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAgB,wBAAwB,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CA0BnE;AAED;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CA8BpE;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAKxE;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AACH,wBAAgB,mCAAmC,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CA4FjF;AAED,wDAAwD;AACxD,MAAM,WAAW,6BAA6B;IAC5C;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,8BAA8B,CAC5C,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,OAAO,EACjB,IAAI,GAAE,6BAAkC,GACvC,OAAO,CAKT"}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
// Pinned by: packages/daemon/src/templates/read-only-deny-overlay.test.ts,
|
|
3
3
|
// packages/daemon/src/worktree/commit-check-hook.test.ts,
|
|
4
4
|
// packages/daemon/src/worktree/commit-msg-trailer-hook.test.ts,
|
|
5
|
+
// packages/daemon/src/worktree/hook-enforcement-required.test.ts,
|
|
5
6
|
// packages/daemon/src/worktree/hook-scoping-per-worktree.test.ts,
|
|
6
7
|
// packages/daemon/src/worktree/hookspath-no-shared-fallback.test.ts,
|
|
7
8
|
// packages/daemon/src/worktree/repo-hook-enforcement-state.test.ts,
|
|
@@ -58,7 +59,8 @@ const CODEX_READ_ONLY_BLOCK_END = '# END TELORA CODEX READ-ONLY';
|
|
|
58
59
|
*
|
|
59
60
|
* The enforcement self-check runs on EVERY path (there is no early return before
|
|
60
61
|
* it): on a failed path it finds the guard is not in effect and logs the loud
|
|
61
|
-
* "failing OPEN" WARN
|
|
62
|
+
* "failing OPEN" WARN. It also RETURNS whether the guard is in effect, so a
|
|
63
|
+
* caller that must not run agents unguarded can refuse (hook-enforcement-required.ts).
|
|
62
64
|
*/
|
|
63
65
|
export function configureWorktreeHooksPath(worktreePath, hooksDir, runGit) {
|
|
64
66
|
// extensions.worktreeConfig must be enabled before `git config --worktree`
|
|
@@ -78,7 +80,7 @@ export function configureWorktreeHooksPath(worktreePath, hooksDir, runGit) {
|
|
|
78
80
|
`run WITHOUT the attribution guard. Shared config left untouched.`);
|
|
79
81
|
}
|
|
80
82
|
}
|
|
81
|
-
verifyHookEnforcementInEffect(worktreePath, hooksDir, runGit);
|
|
83
|
+
return verifyHookEnforcementInEffect(worktreePath, hooksDir, runGit);
|
|
82
84
|
}
|
|
83
85
|
/**
|
|
84
86
|
* Confirm the commit-msg guard is actually in force for a worktree: its resolved
|
|
@@ -96,7 +98,9 @@ function verifyHookEnforcementInEffect(worktreePath, hooksDir, runGit) {
|
|
|
96
98
|
`resolved core.hooksPath='${resolvedPath}' (expected '${hooksDir}'), ` +
|
|
97
99
|
`commit-msg present=${hookPresent}. The attribution guard is failing OPEN -- ` +
|
|
98
100
|
`commits in this worktree are not being checked.`);
|
|
101
|
+
return false;
|
|
99
102
|
}
|
|
103
|
+
return true;
|
|
100
104
|
}
|
|
101
105
|
/**
|
|
102
106
|
* Migrate away a stale, daemon-written SHARED `core.hooksPath` that a pre-0.21.62
|
|
@@ -255,7 +259,7 @@ export function installAuditPreCommitHook(worktreePath) {
|
|
|
255
259
|
// Point this worktree's git config at the custom hooks directory, scoped to
|
|
256
260
|
// THIS worktree so it cannot govern another worktree's hooks (see
|
|
257
261
|
// configureWorktreeHooksPath).
|
|
258
|
-
configureWorktreeHooksPath(worktreePath, hooksDir, runGitSync);
|
|
262
|
+
return configureWorktreeHooksPath(worktreePath, hooksDir, runGitSync);
|
|
259
263
|
}
|
|
260
264
|
/**
|
|
261
265
|
* Write (or merge into) the worktree's `.claude/settings.json` a write-deny
|
|
@@ -356,9 +360,10 @@ export function writeCodexReadOnlyOverlay(worktreePath) {
|
|
|
356
360
|
* worktree-setup site gets identical coverage.
|
|
357
361
|
*/
|
|
358
362
|
export function installReadOnlyAuditGuards(worktreePath) {
|
|
359
|
-
installAuditPreCommitHook(worktreePath);
|
|
363
|
+
const enforced = installAuditPreCommitHook(worktreePath);
|
|
360
364
|
writeReadOnlyDenyOverlay(worktreePath);
|
|
361
365
|
writeCodexReadOnlyOverlay(worktreePath);
|
|
366
|
+
return enforced;
|
|
362
367
|
}
|
|
363
368
|
/**
|
|
364
369
|
* Install a `commit-msg` hook in a worktree that REFUSES any commit whose
|
|
@@ -495,7 +500,7 @@ export function installDeliveryTrailerCommitMsgHook(worktreePath) {
|
|
|
495
500
|
// THIS worktree (git config --worktree) so it cannot govern the whole repo.
|
|
496
501
|
// Same dir as the audit pre-commit hook -- core.hooksPath is a single value,
|
|
497
502
|
// so both hook files coexist here.
|
|
498
|
-
configureWorktreeHooksPath(worktreePath, hooksDir, runGitSync);
|
|
503
|
+
return configureWorktreeHooksPath(worktreePath, hooksDir, runGitSync);
|
|
499
504
|
}
|
|
500
505
|
/**
|
|
501
506
|
* Install the execution-worktree git guards: the delivery-trailer `commit-msg`
|
|
@@ -516,14 +521,17 @@ export function installDeliveryTrailerCommitMsgHook(worktreePath) {
|
|
|
516
521
|
* gets the trailer hook, but its pre-commit block runs first and refuses the
|
|
517
522
|
* commit outright, so the two coexist without the trailer hook weakening the
|
|
518
523
|
* read-only guarantee.
|
|
524
|
+
*
|
|
525
|
+
* Returns whether hook enforcement is actually in effect (the worktree's own
|
|
526
|
+
* core.hooksPath resolves to its hooks dir and the hooks exist). The daemon's
|
|
527
|
+
* merge worktree only logs a false; an AGENT worktree refuses to spawn on it
|
|
528
|
+
* (hook-enforcement-required.ts).
|
|
519
529
|
*/
|
|
520
530
|
export function installExecutionWorktreeGuards(worktreePath, readOnly, opts = {}) {
|
|
521
|
-
installDeliveryTrailerCommitMsgHook(worktreePath);
|
|
522
|
-
if (readOnly)
|
|
523
|
-
installReadOnlyAuditGuards(worktreePath);
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
installCommitCheckPreCommitHook(worktreePath, opts.commitCheck);
|
|
527
|
-
}
|
|
531
|
+
const trailerEnforced = installDeliveryTrailerCommitMsgHook(worktreePath);
|
|
532
|
+
if (readOnly)
|
|
533
|
+
return installReadOnlyAuditGuards(worktreePath) && trailerEnforced;
|
|
534
|
+
installCommitCheckPreCommitHook(worktreePath, opts.commitCheck);
|
|
535
|
+
return trailerEnforced;
|
|
528
536
|
}
|
|
529
537
|
//# sourceMappingURL=worktree-hooks.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worktree-hooks.js","sourceRoot":"","sources":["../../src/worktree/worktree-hooks.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,2EAA2E;AAC3E,4DAA4D;AAC5D,kEAAkE;AAClE,oEAAoE;AACpE,uEAAuE;AACvE,sEAAsE;AACtE,oEAAoE;AACpE,mEAAmE;AACnE,gBAAgB;AAEhB;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,EAAE,qBAAqB,EAAE,6BAA6B,EAAE,MAAM,4BAA4B,CAAC;AAClG,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAC3F,OAAO,EAAE,kCAAkC,EAAE,MAAM,gBAAgB,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,+BAA+B,EAAE,MAAM,wBAAwB,CAAC;AAEzE,MAAM,GAAG,GAAG,YAAY,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC;AAGpD,MAAM,2BAA2B,GAAG,gCAAgC,CAAC;AACrE,MAAM,yBAAyB,GAAG,8BAA8B,CAAC;AAWjE
|
|
1
|
+
{"version":3,"file":"worktree-hooks.js","sourceRoot":"","sources":["../../src/worktree/worktree-hooks.ts"],"names":[],"mappings":"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"}
|