@telora/daemon 0.24.2 → 0.24.5
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 +8 -3
- package/dist/backends/claude/one-shot-model.d.ts.map +1 -1
- package/dist/backends/claude/one-shot-model.js +2 -0
- package/dist/backends/claude/one-shot-model.js.map +1 -1
- package/dist/ci/ci-status.d.ts.map +1 -1
- package/dist/ci/ci-status.js +1 -0
- package/dist/ci/ci-status.js.map +1 -1
- package/dist/ci/product-ci-repo.d.ts.map +1 -1
- package/dist/ci/product-ci-repo.js +3 -1
- package/dist/ci/product-ci-repo.js.map +1 -1
- package/dist/completion/state-cascade/review-approved-head-gate.d.ts.map +1 -1
- package/dist/completion/state-cascade/review-approved-head-gate.js +2 -0
- package/dist/completion/state-cascade/review-approved-head-gate.js.map +1 -1
- package/dist/completion/state-cascade/review-capture-head-gate.d.ts +28 -0
- package/dist/completion/state-cascade/review-capture-head-gate.d.ts.map +1 -0
- package/dist/completion/state-cascade/review-capture-head-gate.js +48 -0
- package/dist/completion/state-cascade/review-capture-head-gate.js.map +1 -0
- package/dist/completion/state-cascade/state-cascade.d.ts +12 -0
- package/dist/completion/state-cascade/state-cascade.d.ts.map +1 -1
- package/dist/completion/state-cascade/state-cascade.js +19 -10
- package/dist/completion/state-cascade/state-cascade.js.map +1 -1
- package/dist/composition/daemon-contexts.d.ts.map +1 -1
- package/dist/composition/daemon-contexts.js +3 -1
- package/dist/composition/daemon-contexts.js.map +1 -1
- package/dist/composition/execution-git-context.d.ts.map +1 -1
- package/dist/composition/execution-git-context.js +1 -0
- package/dist/composition/execution-git-context.js.map +1 -1
- package/dist/composition/execution-worktree-context.js +1 -1
- package/dist/composition/release-note-pass-context.d.ts +7 -0
- package/dist/composition/release-note-pass-context.d.ts.map +1 -0
- package/dist/composition/release-note-pass-context.js +64 -0
- package/dist/composition/release-note-pass-context.js.map +1 -0
- package/dist/composition/runtime-contexts.d.ts.map +1 -1
- package/dist/composition/runtime-contexts.js +2 -0
- package/dist/composition/runtime-contexts.js.map +1 -1
- package/dist/composition/spawn-pass-deps.d.ts +2 -2
- package/dist/composition/spawn-pass-deps.d.ts.map +1 -1
- package/dist/composition/spawn-pass-deps.js +3 -1
- package/dist/composition/spawn-pass-deps.js.map +1 -1
- package/dist/composition/state-cascade-context.d.ts.map +1 -1
- package/dist/composition/state-cascade-context.js +2 -0
- package/dist/composition/state-cascade-context.js.map +1 -1
- package/dist/config/live-daemon-config.js +1 -1
- package/dist/daemon-state/provider-window.d.ts.map +1 -1
- package/dist/daemon-state/provider-window.js +1 -0
- package/dist/daemon-state/provider-window.js.map +1 -1
- package/dist/directive/directive-queue.js +1 -1
- package/dist/focus/daemon-contexts.d.ts +3 -0
- package/dist/focus/daemon-contexts.d.ts.map +1 -1
- package/dist/focus/daemon-contexts.js.map +1 -1
- package/dist/focus/focus-loop-registry.d.ts.map +1 -1
- package/dist/focus/focus-loop-registry.js +21 -0
- package/dist/focus/focus-loop-registry.js.map +1 -1
- package/dist/focus/pending-review-approved-head.d.ts +5 -1
- package/dist/focus/pending-review-approved-head.d.ts.map +1 -1
- package/dist/focus/pending-review-approved-head.js +35 -1
- package/dist/focus/pending-review-approved-head.js.map +1 -1
- package/dist/focus/review-spawn-coverage.d.ts +11 -0
- package/dist/focus/review-spawn-coverage.d.ts.map +1 -1
- package/dist/focus/review-spawn-coverage.js +14 -0
- package/dist/focus/review-spawn-coverage.js.map +1 -1
- package/dist/git/delivery-trailer.d.ts.map +1 -1
- package/dist/git/delivery-trailer.js +2 -0
- package/dist/git/delivery-trailer.js.map +1 -1
- package/dist/git/utils.d.ts.map +1 -1
- package/dist/git/utils.js +2 -1
- package/dist/git/utils.js.map +1 -1
- package/dist/merge/candidate-rework.d.ts.map +1 -1
- package/dist/merge/candidate-rework.js +24 -2
- package/dist/merge/candidate-rework.js.map +1 -1
- package/dist/merge/completion-merge-activity.d.ts.map +1 -1
- package/dist/merge/completion-merge-activity.js +7 -1
- package/dist/merge/completion-merge-activity.js.map +1 -1
- package/dist/merge/completion-merge-driver.d.ts +15 -5
- package/dist/merge/completion-merge-driver.d.ts.map +1 -1
- package/dist/merge/completion-merge-driver.js +7 -2
- package/dist/merge/completion-merge-driver.js.map +1 -1
- package/dist/merge/completion-merge-gate.d.ts +5 -1
- package/dist/merge/completion-merge-gate.d.ts.map +1 -1
- package/dist/merge/completion-merge-gate.js +23 -7
- package/dist/merge/completion-merge-gate.js.map +1 -1
- package/dist/merge/merge-back-loop.d.ts.map +1 -1
- package/dist/merge/merge-back-loop.js +2 -1
- package/dist/merge/merge-back-loop.js.map +1 -1
- package/dist/merge/merge-gate-coverage.d.ts +0 -2
- package/dist/merge/merge-gate-coverage.d.ts.map +1 -1
- package/dist/merge/merge-gate-coverage.js +11 -9
- package/dist/merge/merge-gate-coverage.js.map +1 -1
- package/dist/prompt-sections/release-note-faithfulness-section.d.ts +28 -0
- package/dist/prompt-sections/release-note-faithfulness-section.d.ts.map +1 -0
- package/dist/prompt-sections/release-note-faithfulness-section.js +99 -0
- package/dist/prompt-sections/release-note-faithfulness-section.js.map +1 -0
- package/dist/prompt-sections/release-note-section.d.ts +58 -0
- package/dist/prompt-sections/release-note-section.d.ts.map +1 -0
- package/dist/prompt-sections/release-note-section.js +285 -0
- package/dist/prompt-sections/release-note-section.js.map +1 -0
- package/dist/queries/api-client/shared.d.ts +1 -0
- package/dist/queries/api-client/shared.d.ts.map +1 -1
- package/dist/queries/api-client/shared.js +16 -1
- package/dist/queries/api-client/shared.js.map +1 -1
- package/dist/queries/release-notes/release-notes.d.ts +242 -0
- package/dist/queries/release-notes/release-notes.d.ts.map +1 -0
- package/dist/queries/release-notes/release-notes.js +148 -0
- package/dist/queries/release-notes/release-notes.js.map +1 -0
- package/dist/release-notes/release-note-author.d.ts +56 -0
- package/dist/release-notes/release-note-author.d.ts.map +1 -0
- package/dist/release-notes/release-note-author.js +107 -0
- package/dist/release-notes/release-note-author.js.map +1 -0
- package/dist/release-notes/release-note-faithfulness.d.ts +40 -0
- package/dist/release-notes/release-note-faithfulness.d.ts.map +1 -0
- package/dist/release-notes/release-note-faithfulness.js +107 -0
- package/dist/release-notes/release-note-faithfulness.js.map +1 -0
- package/dist/release-notes/release-note-pass.d.ts +77 -0
- package/dist/release-notes/release-note-pass.d.ts.map +1 -0
- package/dist/release-notes/release-note-pass.js +201 -0
- package/dist/release-notes/release-note-pass.js.map +1 -0
- package/dist/testing/fixtures/api-client.js +1 -1
- package/dist/testing/fixtures/approved-head-inert-deps.d.ts +4 -3
- package/dist/testing/fixtures/approved-head-inert-deps.d.ts.map +1 -1
- package/dist/testing/fixtures/approved-head-inert-deps.js +3 -0
- package/dist/testing/fixtures/approved-head-inert-deps.js.map +1 -1
- package/dist/testing/fixtures/completion-judge-stubs.d.ts.map +1 -1
- package/dist/testing/fixtures/completion-judge-stubs.js +2 -0
- package/dist/testing/fixtures/completion-judge-stubs.js.map +1 -1
- package/dist/testing/fixtures/index.js +1 -1
- package/dist/testing/fixtures/pending-spawn-world.d.ts.map +1 -1
- package/dist/testing/fixtures/pending-spawn-world.js +1 -0
- package/dist/testing/fixtures/pending-spawn-world.js.map +1 -1
- package/dist/types/index.js +1 -1
- package/dist/worktree/capture-head-adoption.d.ts +44 -0
- package/dist/worktree/capture-head-adoption.d.ts.map +1 -0
- package/dist/worktree/capture-head-adoption.js +96 -0
- package/dist/worktree/capture-head-adoption.js.map +1 -0
- package/dist/worktree/safety.d.ts +12 -3
- package/dist/worktree/safety.d.ts.map +1 -1
- package/dist/worktree/safety.js +15 -3
- package/dist/worktree/safety.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
// PINNED-BY-BEGIN (generated by gen:pinned-by -- do not hand-edit; checked by lint:pinned-by)
|
|
2
|
+
// Pinned by: packages/daemon/src/release-notes/release-note-pass.test.ts
|
|
3
|
+
// PINNED-BY-END
|
|
4
|
+
import { createLogger } from '../log/daemon-log.js';
|
|
5
|
+
import { readReleaseNoteWriteFailure, } from '../queries/release-notes/release-notes.js';
|
|
6
|
+
const log = createLogger({ module: 'release-notes' });
|
|
7
|
+
/** The loop's cadence. */
|
|
8
|
+
export const RELEASE_NOTE_PASS_INTERVAL_MS = 60_000;
|
|
9
|
+
let passInFlight = false;
|
|
10
|
+
function errorMessage(err) {
|
|
11
|
+
return err instanceof Error ? err.message : String(err);
|
|
12
|
+
}
|
|
13
|
+
/** What a failed write said, whatever kind it was. */
|
|
14
|
+
function failureText(failure) {
|
|
15
|
+
return failure.kind === 'refused' ? failure.violations.join('; ') : failure.detail;
|
|
16
|
+
}
|
|
17
|
+
/** Give the claim back. Released when it was still this pass's; lost when it was not. */
|
|
18
|
+
async function giveBack(deps, held, why) {
|
|
19
|
+
try {
|
|
20
|
+
const released = await deps.unclaim(held.releaseId, held.claimId);
|
|
21
|
+
log.info(`[release-notes] ${held.tag}: ${released ? 'claim given back' : 'claim already gone'} -- ${why}`);
|
|
22
|
+
return released ? 'released' : 'lost';
|
|
23
|
+
}
|
|
24
|
+
catch (err) {
|
|
25
|
+
const failure = readReleaseNoteWriteFailure(err);
|
|
26
|
+
if (failure.kind === 'conflict') {
|
|
27
|
+
log.info(`[release-notes] ${held.tag}: the claim was lost (${failure.detail}) -- ${why}`);
|
|
28
|
+
return 'lost';
|
|
29
|
+
}
|
|
30
|
+
log.warn(`[release-notes] ${held.tag}: could not give the claim back (${why}): ${failureText(failure)}`);
|
|
31
|
+
return 'errors';
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
/** Write the release draft_failed with the reason; a human redraft retries. */
|
|
35
|
+
async function recordFailed(deps, held, reason) {
|
|
36
|
+
try {
|
|
37
|
+
await deps.write({ releaseId: held.releaseId, claimId: held.claimId, outcome: 'failed', failureReason: reason });
|
|
38
|
+
log.warn(`[release-notes] ${held.tag}: drafting failed -- ${reason}`);
|
|
39
|
+
return 'failed';
|
|
40
|
+
}
|
|
41
|
+
catch (err) {
|
|
42
|
+
const failure = readReleaseNoteWriteFailure(err);
|
|
43
|
+
if (failure.kind === 'conflict') {
|
|
44
|
+
log.info(`[release-notes] ${held.tag}: the claim was lost before the failure was recorded (${failure.detail})`);
|
|
45
|
+
return 'lost';
|
|
46
|
+
}
|
|
47
|
+
log.warn(`[release-notes] ${held.tag}: could not record the failure (${reason}): ${failureText(failure)}`);
|
|
48
|
+
return 'errors';
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/** Write the note as the release's draft. A refusal is handed back for the corrective attempt. */
|
|
52
|
+
async function writeDraft(deps, held, note) {
|
|
53
|
+
try {
|
|
54
|
+
await deps.write({
|
|
55
|
+
releaseId: held.releaseId,
|
|
56
|
+
claimId: held.claimId,
|
|
57
|
+
outcome: 'draft',
|
|
58
|
+
note,
|
|
59
|
+
draftedFromDeliveryIds: held.context.work.map((w) => w.deliveryId),
|
|
60
|
+
});
|
|
61
|
+
log.info(`[release-notes] ${held.tag}: draft stored (${note.items.length} item(s))`);
|
|
62
|
+
return { kind: 'done', outcome: 'drafted' };
|
|
63
|
+
}
|
|
64
|
+
catch (err) {
|
|
65
|
+
const failure = readReleaseNoteWriteFailure(err);
|
|
66
|
+
if (failure.kind === 'refused')
|
|
67
|
+
return failure;
|
|
68
|
+
// A conflict: the human changed the release's work (give the claim back so
|
|
69
|
+
// the next tick drafts it again) or this pass lost the claim (the give-back
|
|
70
|
+
// is refused the same way, and nothing is written). Any other failure gives
|
|
71
|
+
// the claim back too, so the next tick can try at once.
|
|
72
|
+
const why = failure.kind === 'conflict' ? `the draft was not stored: ${failure.detail}` : `the draft write failed: ${failure.detail}`;
|
|
73
|
+
const outcome = await giveBack(deps, held, why);
|
|
74
|
+
return { kind: 'done', outcome: failure.kind === 'error' && outcome === 'released' ? 'errors' : outcome };
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
async function judgeSafely(deps, context, note) {
|
|
78
|
+
try {
|
|
79
|
+
return await deps.judge(context, note);
|
|
80
|
+
}
|
|
81
|
+
catch (err) {
|
|
82
|
+
return { kind: 'failed', reason: `the faithfulness check threw: ${errorMessage(err)}` };
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Judge the note, then write it. An unfaithful verdict comes back as violations
|
|
87
|
+
* for the corrective attempt, exactly as an edge refusal does; a check held by
|
|
88
|
+
* the provider gives the claim back, and one that could not judge records the
|
|
89
|
+
* failure.
|
|
90
|
+
*/
|
|
91
|
+
async function judgeThenWrite(deps, held, note) {
|
|
92
|
+
const verdict = await judgeSafely(deps, held.context, note);
|
|
93
|
+
if (verdict.kind === 'unfaithful') {
|
|
94
|
+
log.info(`[release-notes] ${held.tag}: the faithfulness check found ${verdict.violations.length} Why(s) unfaithful`);
|
|
95
|
+
return { kind: 'refused', violations: verdict.violations };
|
|
96
|
+
}
|
|
97
|
+
if (verdict.kind === 'held')
|
|
98
|
+
return { kind: 'done', outcome: await giveBack(deps, held, verdict.reason) };
|
|
99
|
+
if (verdict.kind === 'failed')
|
|
100
|
+
return { kind: 'done', outcome: await recordFailed(deps, held, verdict.reason) };
|
|
101
|
+
return writeDraft(deps, held, note);
|
|
102
|
+
}
|
|
103
|
+
async function authorSafely(deps, context, correction) {
|
|
104
|
+
try {
|
|
105
|
+
return await deps.author(context, correction);
|
|
106
|
+
}
|
|
107
|
+
catch (err) {
|
|
108
|
+
return { kind: 'failed', reason: `the release-note pass threw: ${errorMessage(err)}` };
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
/** Draft the held release: author, judge, write, and on an unfaithful verdict or a refusal ONE corrective attempt. */
|
|
112
|
+
async function draftHeld(deps, held) {
|
|
113
|
+
if (held.context.work.length === 0)
|
|
114
|
+
return recordFailed(deps, held, 'the release carries no work to describe');
|
|
115
|
+
let result = await authorSafely(deps, held.context, null);
|
|
116
|
+
if (result.kind === 'note') {
|
|
117
|
+
const first = await judgeThenWrite(deps, held, result.note);
|
|
118
|
+
if (first.kind === 'done')
|
|
119
|
+
return first.outcome;
|
|
120
|
+
log.info(`[release-notes] ${held.tag}: draft refused; one corrective attempt -- ${first.violations.join('; ')}`);
|
|
121
|
+
result = await authorSafely(deps, held.context, { previous: result.note, violations: first.violations });
|
|
122
|
+
if (result.kind === 'note') {
|
|
123
|
+
const second = await judgeThenWrite(deps, held, result.note);
|
|
124
|
+
if (second.kind === 'done')
|
|
125
|
+
return second.outcome;
|
|
126
|
+
return recordFailed(deps, held, `the note was refused after one corrective attempt: ${second.violations.join('; ')}`);
|
|
127
|
+
}
|
|
128
|
+
if (result.kind === 'failed') {
|
|
129
|
+
result = { kind: 'failed', reason: `${result.reason} (the corrective attempt after: ${first.violations.join('; ')})` };
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
if (result.kind === 'held')
|
|
133
|
+
return giveBack(deps, held, result.reason);
|
|
134
|
+
return recordFailed(deps, held, result.reason);
|
|
135
|
+
}
|
|
136
|
+
async function runCandidate(deps, candidate) {
|
|
137
|
+
const tag = `release ${candidate.releaseId.slice(0, 8)} ("${candidate.name}")`;
|
|
138
|
+
let claim;
|
|
139
|
+
try {
|
|
140
|
+
claim = await deps.claim(candidate.releaseId);
|
|
141
|
+
}
|
|
142
|
+
catch (err) {
|
|
143
|
+
log.warn(`[release-notes] ${tag}: claim failed: ${errorMessage(err)}`);
|
|
144
|
+
return 'errors';
|
|
145
|
+
}
|
|
146
|
+
if (!claim.claimed) {
|
|
147
|
+
log.info(`[release-notes] ${tag}: not claimed -- ${claim.reason || 'another pass holds it'}`);
|
|
148
|
+
return 'notClaimed';
|
|
149
|
+
}
|
|
150
|
+
return draftHeld(deps, { releaseId: candidate.releaseId, claimId: claim.claimId, context: claim.context, tag });
|
|
151
|
+
}
|
|
152
|
+
/** Run one pass over every product. One product's failed read never stops another's. */
|
|
153
|
+
export async function runReleaseNotePass(deps) {
|
|
154
|
+
const outcome = { skipped: null, drafted: 0, failed: 0, released: 0, lost: 0, notClaimed: 0, errors: 0 };
|
|
155
|
+
if (passInFlight)
|
|
156
|
+
return { ...outcome, skipped: 'a release-note pass is already running' };
|
|
157
|
+
passInFlight = true;
|
|
158
|
+
try {
|
|
159
|
+
for (const product of deps.products) {
|
|
160
|
+
const before = deps.holdReason();
|
|
161
|
+
if (before)
|
|
162
|
+
return { ...outcome, skipped: before };
|
|
163
|
+
let candidates;
|
|
164
|
+
try {
|
|
165
|
+
candidates = await deps.readCandidates(product.id);
|
|
166
|
+
}
|
|
167
|
+
catch (err) {
|
|
168
|
+
log.warn(`[release-notes] candidate read failed for product ${product.id.slice(0, 8)}: ${errorMessage(err)}`);
|
|
169
|
+
outcome.errors++;
|
|
170
|
+
continue;
|
|
171
|
+
}
|
|
172
|
+
for (const candidate of candidates) {
|
|
173
|
+
const hold = deps.holdReason();
|
|
174
|
+
if (hold)
|
|
175
|
+
return { ...outcome, skipped: hold };
|
|
176
|
+
outcome[await runCandidate(deps, candidate)]++;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
return outcome;
|
|
180
|
+
}
|
|
181
|
+
finally {
|
|
182
|
+
passInFlight = false;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
/** The loop tick: one pass over the live deps, never throwing into the timer. */
|
|
186
|
+
export async function runReleaseNotePassSafely(source, governor) {
|
|
187
|
+
try {
|
|
188
|
+
const deps = source(governor);
|
|
189
|
+
if (!deps)
|
|
190
|
+
return;
|
|
191
|
+
const o = await runReleaseNotePass(deps);
|
|
192
|
+
if (o.drafted + o.failed + o.released + o.lost + o.errors > 0) {
|
|
193
|
+
log.info(`[release-notes] pass: drafted=${o.drafted} failed=${o.failed} released=${o.released} lost=${o.lost} ` +
|
|
194
|
+
`notClaimed=${o.notClaimed} errors=${o.errors}` + (o.skipped ? ` stopped=(${o.skipped})` : ''));
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
catch (err) {
|
|
198
|
+
log.warn(`[release-notes] pass failed: ${errorMessage(err)}`);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
//# sourceMappingURL=release-note-pass.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"release-note-pass.js","sourceRoot":"","sources":["../../src/release-notes/release-note-pass.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// PINNED-BY-BEGIN (generated by gen:pinned-by -- do not hand-edit; checked by lint:pinned-by)
|
|
2
|
-
// Pinned by:
|
|
2
|
+
// Pinned by: 82 tests -- run: npm run gen:pinned-by -- --list packages/daemon/src/testing/fixtures/api-client.ts
|
|
3
3
|
// PINNED-BY-END
|
|
4
4
|
/** A fake ApiClient whose every call is answered by `handle`. */
|
|
5
5
|
export function makeFakeApiClient(handle) {
|
|
@@ -4,9 +4,10 @@
|
|
|
4
4
|
* REQUIRED since the dependency fallbacks were removed.
|
|
5
5
|
*
|
|
6
6
|
* Inert means: no approval of a known head, no unchanged reviewed range, no
|
|
7
|
-
* recorded verdict, nothing filed, no deliveries,
|
|
8
|
-
* nothing
|
|
9
|
-
*
|
|
7
|
+
* recorded verdict, nothing filed, no deliveries, a window clear that does
|
|
8
|
+
* nothing, and no head for the capture-head adoption to read -- so the gate
|
|
9
|
+
* answers 'spawn' unless a test overrides the read it is about. Pass overrides
|
|
10
|
+
* for the members a test exercises.
|
|
10
11
|
*/
|
|
11
12
|
import type { PendingReviewApprovedHeadDeps } from '../../focus/pending-review-approved-head.js';
|
|
12
13
|
export declare function makeInertApprovedHeadDeps(overrides?: Partial<PendingReviewApprovedHeadDeps>): PendingReviewApprovedHeadDeps;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"approved-head-inert-deps.d.ts","sourceRoot":"","sources":["../../../src/testing/fixtures/approved-head-inert-deps.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"approved-head-inert-deps.d.ts","sourceRoot":"","sources":["../../../src/testing/fixtures/approved-head-inert-deps.ts"],"names":[],"mappings":"AAYA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,6CAA6C,CAAC;AAEjG,wBAAgB,yBAAyB,CACvC,SAAS,GAAE,OAAO,CAAC,6BAA6B,CAAM,GACrD,6BAA6B,CAW/B"}
|
|
@@ -2,9 +2,11 @@
|
|
|
2
2
|
// Pinned by: packages/daemon/src/completion/review-exit/review-census-never-reached.test.ts,
|
|
3
3
|
// packages/daemon/src/focus/gaps-found-hands-to-coding.test.ts,
|
|
4
4
|
// packages/daemon/src/focus/pending-review-approved-head.test.ts,
|
|
5
|
+
// packages/daemon/src/focus/pending-review-capture-head.test.ts,
|
|
5
6
|
// packages/daemon/src/focus/ready-focus-no-work-spawn.test.ts,
|
|
6
7
|
// packages/daemon/src/focus/unchanged-reviewed-head.test.ts,
|
|
7
8
|
// packages/daemon/src/focus/unclaimed-notice-coding-precedence.test.ts,
|
|
9
|
+
// packages/daemon/src/integration/capture-head-review-regression.test.ts,
|
|
8
10
|
// packages/daemon/src/integration/model-reached-review-exit-effects.test.ts
|
|
9
11
|
// PINNED-BY-END
|
|
10
12
|
export function makeInertApprovedHeadDeps(overrides = {}) {
|
|
@@ -15,6 +17,7 @@ export function makeInertApprovedHeadDeps(overrides = {}) {
|
|
|
15
17
|
fileReworkForFailedVerdict: async () => ({ kind: 'no_owner_delivery' }),
|
|
16
18
|
getFocusDeliveries: async () => [],
|
|
17
19
|
clearReviewRequestedAt: async () => { },
|
|
20
|
+
adoptCaptureHead: () => ({ kind: 'unreadable', reason: 'inert approved-head deps read no head' }),
|
|
18
21
|
...overrides,
|
|
19
22
|
};
|
|
20
23
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"approved-head-inert-deps.js","sourceRoot":"","sources":["../../../src/testing/fixtures/approved-head-inert-deps.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,6FAA6F;AAC7F,kEAAkE;AAClE,oEAAoE;AACpE,iEAAiE;AACjE,+DAA+D;AAC/D,0EAA0E;AAC1E,8EAA8E;AAC9E,gBAAgB;
|
|
1
|
+
{"version":3,"file":"approved-head-inert-deps.js","sourceRoot":"","sources":["../../../src/testing/fixtures/approved-head-inert-deps.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,6FAA6F;AAC7F,kEAAkE;AAClE,oEAAoE;AACpE,mEAAmE;AACnE,iEAAiE;AACjE,+DAA+D;AAC/D,0EAA0E;AAC1E,4EAA4E;AAC5E,8EAA8E;AAC9E,gBAAgB;AAgBhB,MAAM,UAAU,yBAAyB,CACvC,YAAoD,EAAE;IAEtD,OAAO;QACL,sBAAsB,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;QAC1E,yBAAyB,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI;QAC3C,iBAAiB,EAAE,GAAG,EAAE,CAAC,IAAI;QAC7B,0BAA0B,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,mBAA4B,EAAE,CAAC;QAChF,kBAAkB,EAAE,KAAK,IAAI,EAAE,CAAC,EAAE;QAClC,sBAAsB,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC;QACtC,gBAAgB,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,YAAqB,EAAE,MAAM,EAAE,uCAAuC,EAAE,CAAC;QAC1G,GAAG,SAAS;KACb,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"completion-judge-stubs.d.ts","sourceRoot":"","sources":["../../../src/testing/fixtures/completion-judge-stubs.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"completion-judge-stubs.d.ts","sourceRoot":"","sources":["../../../src/testing/fixtures/completion-judge-stubs.ts"],"names":[],"mappings":"AAoBA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,wCAAwC,CAAC;AACxF,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAEpF,+EAA+E;AAC/E,wBAAgB,gBAAgB,IAAI,IAAI,CAAC,uBAAuB,EAAE,wBAAwB,GAAG,0BAA0B,CAAC,CAKvH;AAED,6GAA6G;AAC7G,wBAAgB,qBAAqB,IAAI,IAAI,CAC3C,yBAAyB,EACzB,mBAAmB,GAAG,uBAAuB,GAAG,iBAAiB,GAAG,eAAe,GAAG,kBAAkB,CACzG,CAQA"}
|
|
@@ -4,6 +4,8 @@
|
|
|
4
4
|
// packages/daemon/src/focus/focus-activity-completion-merge.test.ts,
|
|
5
5
|
// packages/daemon/src/focus/heartbeat-completion-merge.test.ts,
|
|
6
6
|
// packages/daemon/src/integration/approved-head-hold-release-completion-regression.test.ts,
|
|
7
|
+
// packages/daemon/src/integration/capture-head-review-regression.test.ts,
|
|
8
|
+
// packages/daemon/src/integration/commits-after-approval-review-regression.test.ts,
|
|
7
9
|
// packages/daemon/src/integration/merge-back-resolver-timeout-regression.test.ts,
|
|
8
10
|
// packages/daemon/src/merge/candidate-rework.test.ts,
|
|
9
11
|
// packages/daemon/src/merge/completion-conflict-rework.test.ts,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"completion-judge-stubs.js","sourceRoot":"","sources":["../../../src/testing/fixtures/completion-judge-stubs.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,mFAAmF;AACnF,gFAAgF;AAChF,uEAAuE;AACvE,kEAAkE;AAClE,8FAA8F;AAC9F,oFAAoF;AACpF,wDAAwD;AACxD,kEAAkE;AAClE,+DAA+D;AAC/D,6DAA6D;AAC7D,+DAA+D;AAC/D,8GAA8G;AAC9G,oEAAoE;AACpE,sEAAsE;AACtE,6DAA6D;AAC7D,gBAAgB;AAchB,+EAA+E;AAC/E,MAAM,UAAU,gBAAgB;IAC9B,OAAO;QACL,sBAAsB,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QAC9C,wBAAwB,EAAE,GAAG,EAAE,CAAC,SAAS;KAC1C,CAAC;AACJ,CAAC;AAED,6GAA6G;AAC7G,MAAM,UAAU,qBAAqB;IAInC,OAAO;QACL,iBAAiB,EAAE,GAAG,EAAE,CAAC,KAAK;QAC9B,qBAAqB,EAAE,GAAG,EAAE,GAAE,CAAC;QAC/B,eAAe,EAAE,GAAG,EAAE,CAAC,IAAI;QAC3B,aAAa,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;QAC1C,gBAAgB,EAAE,GAAG,EAAE,CAAC,IAAI;KAC7B,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"completion-judge-stubs.js","sourceRoot":"","sources":["../../../src/testing/fixtures/completion-judge-stubs.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,mFAAmF;AACnF,gFAAgF;AAChF,uEAAuE;AACvE,kEAAkE;AAClE,8FAA8F;AAC9F,4EAA4E;AAC5E,sFAAsF;AACtF,oFAAoF;AACpF,wDAAwD;AACxD,kEAAkE;AAClE,+DAA+D;AAC/D,6DAA6D;AAC7D,+DAA+D;AAC/D,8GAA8G;AAC9G,oEAAoE;AACpE,sEAAsE;AACtE,6DAA6D;AAC7D,gBAAgB;AAchB,+EAA+E;AAC/E,MAAM,UAAU,gBAAgB;IAC9B,OAAO;QACL,sBAAsB,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QAC9C,wBAAwB,EAAE,GAAG,EAAE,CAAC,SAAS;KAC1C,CAAC;AACJ,CAAC;AAED,6GAA6G;AAC7G,MAAM,UAAU,qBAAqB;IAInC,OAAO;QACL,iBAAiB,EAAE,GAAG,EAAE,CAAC,KAAK;QAC9B,qBAAqB,EAAE,GAAG,EAAE,GAAE,CAAC;QAC/B,eAAe,EAAE,GAAG,EAAE,CAAC,IAAI;QAC3B,aAAa,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;QAC1C,gBAAgB,EAAE,GAAG,EAAE,CAAC,IAAI;KAC7B,CAAC;AACJ,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// PINNED-BY-BEGIN (generated by gen:pinned-by -- do not hand-edit; checked by lint:pinned-by)
|
|
2
|
-
// Pinned by:
|
|
2
|
+
// Pinned by: 356 tests -- run: npm run gen:pinned-by -- --list packages/daemon/src/testing/fixtures/index.ts
|
|
3
3
|
// PINNED-BY-END
|
|
4
4
|
/**
|
|
5
5
|
* Build an ActiveFocusRow (a getActiveFocuses row): an active, armed focus with
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pending-spawn-world.d.ts","sourceRoot":"","sources":["../../../src/testing/fixtures/pending-spawn-world.ts"],"names":[],"mappings":"AAsCA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0CAA0C,CAAC;AAC/E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wCAAwC,CAAC;AACnF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iDAAiD,CAAC;AACnF,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC9E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,6DAA6D,CAAC;AAOtG,4EAA4E;AAC5E,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,cAAc,CAAC;IACpB,UAAU,EAAE,iBAAiB,EAAE,CAAC;IAChC,MAAM,EAAE,cAAc,EAAE,CAAC;IACzB,mEAAmE;IACnE,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,+DAA+D;IAC/D,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;;OAIG;IACH,YAAY,CAAC,EAAE,kBAAkB,GAAG,YAAY,CAAC;CAClD;AAED,kFAAkF;AAClF,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,WAAW,EAAE,QAAQ,GAAG,QAAQ,GAAG,IAAI,CAAC;CACzC;AAED,6EAA6E;AAC7E,wBAAgB,cAAc,CAAC,KAAK,EAAE,iBAAiB,GAAG;IACxD,kBAAkB,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC;IACtE,cAAc,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;CAChE,CAWA;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,iBAAiB,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,oBAAoB,
|
|
1
|
+
{"version":3,"file":"pending-spawn-world.d.ts","sourceRoot":"","sources":["../../../src/testing/fixtures/pending-spawn-world.ts"],"names":[],"mappings":"AAsCA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0CAA0C,CAAC;AAC/E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wCAAwC,CAAC;AACnF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iDAAiD,CAAC;AACnF,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC9E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,6DAA6D,CAAC;AAOtG,4EAA4E;AAC5E,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,cAAc,CAAC;IACpB,UAAU,EAAE,iBAAiB,EAAE,CAAC;IAChC,MAAM,EAAE,cAAc,EAAE,CAAC;IACzB,mEAAmE;IACnE,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,+DAA+D;IAC/D,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;;OAIG;IACH,YAAY,CAAC,EAAE,kBAAkB,GAAG,YAAY,CAAC;CAClD;AAED,kFAAkF;AAClF,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,WAAW,EAAE,QAAQ,GAAG,QAAQ,GAAG,IAAI,CAAC;CACzC;AAED,6EAA6E;AAC7E,wBAAgB,cAAc,CAAC,KAAK,EAAE,iBAAiB,GAAG;IACxD,kBAAkB,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC;IACtE,cAAc,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;CAChE,CAWA;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,iBAAiB,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,oBAAoB,CAiFhH;AAED,0FAA0F;AAC1F,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,WAAW,CAgB5F"}
|
|
@@ -115,6 +115,7 @@ export function makePendingSpawnPassDeps(world, spawns) {
|
|
|
115
115
|
clearReviewRequestedAt: async () => {
|
|
116
116
|
world.row = { ...world.row, review_requested_at: null };
|
|
117
117
|
},
|
|
118
|
+
adoptCaptureHead: () => ({ kind: 'unreadable', reason: 'the pending-spawn world has no git head' }),
|
|
118
119
|
},
|
|
119
120
|
verifyHold: {
|
|
120
121
|
...reads,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pending-spawn-world.js","sourceRoot":"","sources":["../../../src/testing/fixtures/pending-spawn-world.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"pending-spawn-world.js","sourceRoot":"","sources":["../../../src/testing/fixtures/pending-spawn-world.ts"],"names":[],"mappings":"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"}
|
package/dist/types/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// PINNED-BY-BEGIN (generated by gen:pinned-by -- do not hand-edit; checked by lint:pinned-by)
|
|
2
|
-
// Pinned by:
|
|
2
|
+
// Pinned by: 276 tests -- run: npm run gen:pinned-by -- --list packages/daemon/src/types/index.ts
|
|
3
3
|
// PINNED-BY-END
|
|
4
4
|
/**
|
|
5
5
|
* Domain-specific type re-exports.
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/** The focus branch whose head a review would judge, and the repo its ref lives in (worktrees share it). */
|
|
2
|
+
export interface CaptureHeadTarget {
|
|
3
|
+
repoPath: string;
|
|
4
|
+
branchName: string | null;
|
|
5
|
+
}
|
|
6
|
+
/** What the adoption found at the focus head, and did. */
|
|
7
|
+
export type CaptureHeadAdoption =
|
|
8
|
+
/** The head is not a daemon capture: nothing to adopt, review may judge it. */
|
|
9
|
+
{
|
|
10
|
+
kind: 'not_capture';
|
|
11
|
+
headSha: string;
|
|
12
|
+
}
|
|
13
|
+
/** The head was a capture; `adoptedSha` (the new head) commits it as the team's own. */
|
|
14
|
+
| {
|
|
15
|
+
kind: 'adopted';
|
|
16
|
+
captureSha: string;
|
|
17
|
+
adoptedSha: string;
|
|
18
|
+
trailerValue: string;
|
|
19
|
+
}
|
|
20
|
+
/** The head is a capture and could not be adopted (or the branch moved meanwhile); retried next read. */
|
|
21
|
+
| {
|
|
22
|
+
kind: 'failed';
|
|
23
|
+
captureSha: string;
|
|
24
|
+
reason: string;
|
|
25
|
+
}
|
|
26
|
+
/** The head could not be read. */
|
|
27
|
+
| {
|
|
28
|
+
kind: 'unreadable';
|
|
29
|
+
reason: string;
|
|
30
|
+
};
|
|
31
|
+
/** Subject prefix of an adoption commit -- deliberately not a capture subject. */
|
|
32
|
+
export declare const CAPTURE_ADOPTION_SUBJECT_PREFIX = "chore: adopt captured agent work as the team's own commit (";
|
|
33
|
+
/** The adoption commit's message, as commit-tree `-m` paragraphs (the last one is the trailer block). */
|
|
34
|
+
export declare function captureAdoptionMessage(capture: {
|
|
35
|
+
sha: string;
|
|
36
|
+
subject: string;
|
|
37
|
+
}, trailerValue: string): string[];
|
|
38
|
+
/**
|
|
39
|
+
* Adopt the focus head when it is a daemon capture (module doc). Never throws:
|
|
40
|
+
* an unreadable head, a failed commit or a branch that moved meanwhile is
|
|
41
|
+
* reported, and the next read retries against whatever the head is then.
|
|
42
|
+
*/
|
|
43
|
+
export declare function adoptCaptureHead(target: CaptureHeadTarget): CaptureHeadAdoption;
|
|
44
|
+
//# sourceMappingURL=capture-head-adoption.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capture-head-adoption.d.ts","sourceRoot":"","sources":["../../src/worktree/capture-head-adoption.ts"],"names":[],"mappings":"AAwCA,4GAA4G;AAC5G,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,0DAA0D;AAC1D,MAAM,MAAM,mBAAmB;AAC7B,+EAA+E;AAC7E;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE;AAC1C,wFAAwF;GACtF;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE;AACnF,yGAAyG;GACvG;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE;AACxD,kCAAkC;GAChC;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3C,kFAAkF;AAClF,eAAO,MAAM,+BAA+B,gEAAiE,CAAC;AAmB9G,yGAAyG;AACzG,wBAAgB,sBAAsB,CAAC,OAAO,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,EAAE,CAShH;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,iBAAiB,GAAG,mBAAmB,CAsB/E"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
// PINNED-BY-BEGIN (generated by gen:pinned-by -- do not hand-edit; checked by lint:pinned-by)
|
|
2
|
+
// Pinned by: packages/daemon/src/completion/state-cascade/review-capture-head-gate.test.ts,
|
|
3
|
+
// packages/daemon/src/focus/pending-review-capture-head.test.ts,
|
|
4
|
+
// packages/daemon/src/integration/capture-head-review-regression.test.ts,
|
|
5
|
+
// packages/daemon/src/integration/commits-after-approval-review-regression.test.ts,
|
|
6
|
+
// packages/daemon/src/integration/fully-merged-focus-sibling-red-scenario.test.ts,
|
|
7
|
+
// packages/daemon/src/worktree/capture-head-adoption.test.ts
|
|
8
|
+
// PINNED-BY-END
|
|
9
|
+
/**
|
|
10
|
+
* A focus review never judges a daemon WIP capture: before a review window opens
|
|
11
|
+
* or a review spawns, a focus head that is a daemon capture of uncommitted agent
|
|
12
|
+
* work is ADOPTED as the team's own commit, and the review judges that commit.
|
|
13
|
+
*
|
|
14
|
+
* Why: the completion merge gate never lets a capture anchor its own approval
|
|
15
|
+
* (merge/merge-gate-coverage.ts anchorGates), and review runs once per focus head
|
|
16
|
+
* (focus/pending-review-approved-head.ts), so a review that approved a capture
|
|
17
|
+
* head left a finished focus held off integration with no step that advances it.
|
|
18
|
+
* The fix is at the source: the head a review judges is never a capture.
|
|
19
|
+
* History: docs/daemon/history-platform.md (worktree/capture-head-adoption.ts).
|
|
20
|
+
*
|
|
21
|
+
* The adoption is the daemon committing on the team's behalf, append-only: a new
|
|
22
|
+
* commit on top of the capture with the capture's tree (it changes no file), a
|
|
23
|
+
* subject that is not a capture subject, and the capture's Telora-Delivery
|
|
24
|
+
* trailer -- its delivery's id, or `none` when the capture names no delivery (the
|
|
25
|
+
* adoption itself carries no work, and an `unattributed` stamp would be named as
|
|
26
|
+
* misattributed work). History is never rewritten: verdicts, attribution and
|
|
27
|
+
* holds are keyed on commit shas. The branch moves by a compare-and-swap ref
|
|
28
|
+
* update, so a commit that landed meanwhile is never overwritten. Plumbing
|
|
29
|
+
* (commit-tree + update-ref) runs no hooks and touches no worktree: a worktree on
|
|
30
|
+
* the branch follows it to a commit with the same tree, so its index and files
|
|
31
|
+
* stay exactly as they were.
|
|
32
|
+
*
|
|
33
|
+
* @module worktree/capture-head-adoption
|
|
34
|
+
*/
|
|
35
|
+
import { runGitSync } from '../git/types.js';
|
|
36
|
+
import { classifyDeliveryTrailer, DELIVERY_TRAILER_KEY, NON_DELIVERY_SENTINEL } from '../git/delivery-trailer.js';
|
|
37
|
+
import { isDaemonWipCapture } from './safety.js';
|
|
38
|
+
/** Subject prefix of an adoption commit -- deliberately not a capture subject. */
|
|
39
|
+
export const CAPTURE_ADOPTION_SUBJECT_PREFIX = 'chore: adopt captured agent work as the team\'s own commit (';
|
|
40
|
+
const SHA_RE = /^[0-9a-f]{40,64}$/i;
|
|
41
|
+
const FIELD_SEP = '\x1f';
|
|
42
|
+
/** The head commit of `ref`, or why it could not be read. */
|
|
43
|
+
function readHead(repoPath, ref) {
|
|
44
|
+
const result = runGitSync(['log', '-1', `--format=%H${FIELD_SEP}%s`, ref, '--'], repoPath);
|
|
45
|
+
if (!result.success)
|
|
46
|
+
return { reason: `git log ${ref} failed: ${result.error || result.output}` };
|
|
47
|
+
const [sha = '', ...subject] = result.output.trim().split(FIELD_SEP);
|
|
48
|
+
return SHA_RE.test(sha) ? { sha, subject: subject.join(FIELD_SEP) } : { reason: `${ref} has no readable head` };
|
|
49
|
+
}
|
|
50
|
+
/** The trailer an adoption carries: the capture's delivery, else the non-delivery sentinel (module doc). */
|
|
51
|
+
function adoptionTrailerValue(repoPath, captureSha) {
|
|
52
|
+
const attribution = classifyDeliveryTrailer(repoPath, captureSha);
|
|
53
|
+
return attribution.kind === 'delivery' ? attribution.deliveryId : NON_DELIVERY_SENTINEL;
|
|
54
|
+
}
|
|
55
|
+
/** The adoption commit's message, as commit-tree `-m` paragraphs (the last one is the trailer block). */
|
|
56
|
+
export function captureAdoptionMessage(capture, trailerValue) {
|
|
57
|
+
return [
|
|
58
|
+
`${CAPTURE_ADOPTION_SUBJECT_PREFIX}${capture.sha.slice(0, 12)})`,
|
|
59
|
+
`The daemon captured this focus's uncommitted agent work as ${capture.sha.slice(0, 12)} ` +
|
|
60
|
+
`("${capture.subject}"). A focus review never judges a daemon capture: the completion merge gate ` +
|
|
61
|
+
`never lets a capture anchor its own approval. This commit adopts that work as the team's own, so ` +
|
|
62
|
+
`the review judges a commit the merge gate accepts. It changes no files.`,
|
|
63
|
+
`${DELIVERY_TRAILER_KEY}: ${trailerValue}`,
|
|
64
|
+
];
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Adopt the focus head when it is a daemon capture (module doc). Never throws:
|
|
68
|
+
* an unreadable head, a failed commit or a branch that moved meanwhile is
|
|
69
|
+
* reported, and the next read retries against whatever the head is then.
|
|
70
|
+
*/
|
|
71
|
+
export function adoptCaptureHead(target) {
|
|
72
|
+
if (!target.branchName)
|
|
73
|
+
return { kind: 'unreadable', reason: 'the focus has no branch' };
|
|
74
|
+
const ref = `refs/heads/${target.branchName}`;
|
|
75
|
+
const head = readHead(target.repoPath, ref);
|
|
76
|
+
if ('reason' in head)
|
|
77
|
+
return { kind: 'unreadable', reason: head.reason };
|
|
78
|
+
if (!isDaemonWipCapture(head))
|
|
79
|
+
return { kind: 'not_capture', headSha: head.sha };
|
|
80
|
+
const trailerValue = adoptionTrailerValue(target.repoPath, head.sha);
|
|
81
|
+
const paragraphs = captureAdoptionMessage(head, trailerValue).flatMap((p) => ['-m', p]);
|
|
82
|
+
const commit = runGitSync(['commit-tree', `${head.sha}^{tree}`, '-p', head.sha, ...paragraphs], target.repoPath);
|
|
83
|
+
const adoptedSha = commit.output.trim();
|
|
84
|
+
if (!commit.success || !SHA_RE.test(adoptedSha)) {
|
|
85
|
+
return { kind: 'failed', captureSha: head.sha, reason: `git commit-tree failed: ${commit.error || commit.output}` };
|
|
86
|
+
}
|
|
87
|
+
// Compare-and-swap: moves the branch only if its head is still the capture. The
|
|
88
|
+
// reflog step reads as a commit, so git/focus-own-delta.ts counts it as the focus's own.
|
|
89
|
+
const reflog = `commit: adopt daemon capture ${head.sha.slice(0, 12)} as the team's own (telora-daemon)`;
|
|
90
|
+
const moved = runGitSync(['update-ref', '-m', reflog, ref, adoptedSha, head.sha], target.repoPath);
|
|
91
|
+
if (!moved.success) {
|
|
92
|
+
return { kind: 'failed', captureSha: head.sha, reason: `${ref} moved or could not be updated: ${moved.error || moved.output}` };
|
|
93
|
+
}
|
|
94
|
+
return { kind: 'adopted', captureSha: head.sha, adoptedSha, trailerValue };
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=capture-head-adoption.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capture-head-adoption.js","sourceRoot":"","sources":["../../src/worktree/capture-head-adoption.ts"],"names":[],"mappings":"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"}
|
|
@@ -29,12 +29,21 @@ export declare function branchHasUnmergedCommits(branchName: string, targetBranc
|
|
|
29
29
|
/**
|
|
30
30
|
* Subject prefixes of the two commits the daemon writes to capture an agent's
|
|
31
31
|
* uncommitted work: commitWipChanges (team exit) and safetyCommitWorktree
|
|
32
|
-
* (worktree removal, terminated-team reconcile).
|
|
33
|
-
*
|
|
34
|
-
*
|
|
32
|
+
* (worktree removal, terminated-team reconcile). A daemon capture is recognized
|
|
33
|
+
* by these (isDaemonWipCapture), so the writers build their subjects from the
|
|
34
|
+
* same constants.
|
|
35
35
|
*/
|
|
36
36
|
export declare const WIP_CAPTURE_SUBJECT_PREFIX = "WIP: Uncommitted work captured by daemon on agent exit (";
|
|
37
37
|
export declare const SAFETY_COMMIT_SUBJECT_PREFIX = "wip: uncommitted agent work for \"";
|
|
38
|
+
/**
|
|
39
|
+
* True for a commit the daemon wrote to capture an agent's uncommitted work (a
|
|
40
|
+
* commitWipChanges or safetyCommitWorktree subject). The ONE recognizer: the merge
|
|
41
|
+
* gate's capture rule (merge/merge-gate-coverage.ts) and the review's capture-head
|
|
42
|
+
* adoption (worktree/capture-head-adoption.ts) both read it. Pure.
|
|
43
|
+
*/
|
|
44
|
+
export declare function isDaemonWipCapture(commit: {
|
|
45
|
+
readonly subject: string;
|
|
46
|
+
}): boolean;
|
|
38
47
|
/** The subject commitWipChanges writes for `contextName`. */
|
|
39
48
|
export declare function wipCaptureSubject(contextName: string): string;
|
|
40
49
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"safety.d.ts","sourceRoot":"","sources":["../../src/worktree/safety.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"safety.d.ts","sourceRoot":"","sources":["../../src/worktree/safety.ts"],"names":[],"mappings":"AA6BA,OAAO,EAIL,KAAK,sBAAsB,EAC5B,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAEL,KAAK,uBAAuB,EAC5B,KAAK,0BAA0B,EAChC,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,kCAAkC,CAAC;AAEtF;;;;;GAKG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,gBAAgB,EAAE,sBAAsB,CAAC;IAClD,QAAQ,CAAC,kBAAkB,EAAE,6BAA6B,CAAC;IAC3D,QAAQ,CAAC,eAAe,EAAE,IAAI,CAAC,0BAA0B,EAAE,gBAAgB,CAAC,CAAC;CAC9E;AAMD;;;;;;;;GAQG;AACH,wBAAgB,6BAA6B,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAa3E;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,GACf,OAAO,CAMT;AAED;;;;;;GAMG;AACH,eAAO,MAAM,0BAA0B,6DAA6D,CAAC;AACrG,eAAO,MAAM,4BAA4B,uCAAsC,CAAC;AAEhF;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE;IAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAEhF;AAED,6DAA6D;AAC7D,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,sBAAsB,EACjC,WAAW,CAAC,EAAE,uBAAuB,GACpC,MAAM,GAAG,IAAI,CAaf;AAED;;;;;;GAMG;AACH,eAAO,MAAM,4BAA4B,EAAE,SAAS,MAAM,EAMzD,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,qCAAqC,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAOnF;AAED;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CACtC,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,sBAAsB,GAChC,MAAM,GAAG,IAAI,CAUf;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE;IACP,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,iEAAiE;IACjE,SAAS,EAAE,sBAAsB,CAAC;IAClC,4EAA4E;IAC5E,WAAW,CAAC,EAAE,uBAAuB,CAAC;CACvC,GACA,OAAO,CAoFT;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,gBAAgB,CAC9B,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,sBAAsB,EACjC,WAAW,CAAC,EAAE,uBAAuB,GACpC,MAAM,GAAG,IAAI,CASf"}
|
package/dist/worktree/safety.js
CHANGED
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
// PINNED-BY-BEGIN (generated by gen:pinned-by -- do not hand-edit; checked by lint:pinned-by)
|
|
2
2
|
// Pinned by: packages/daemon/src/completion/team-exit/teardown-merge-gate.test.ts,
|
|
3
3
|
// packages/daemon/src/completion/team-teardown/mid-flight-merge-gate.test.ts,
|
|
4
|
+
// packages/daemon/src/focus/pending-review-capture-head.test.ts,
|
|
4
5
|
// packages/daemon/src/integration/approved-head-hold-release-completion-regression.test.ts,
|
|
6
|
+
// packages/daemon/src/integration/capture-head-review-regression.test.ts,
|
|
5
7
|
// packages/daemon/src/merge/attributed-capture-merge-gate.test.ts,
|
|
6
8
|
// packages/daemon/src/merge/completion-merge-gate.test.ts,
|
|
7
9
|
// packages/daemon/src/merge/merge-gate-coverage.test.ts,
|
|
8
10
|
// packages/daemon/src/merge/safe-remove-merge-gate.test.ts,
|
|
9
11
|
// packages/daemon/src/verify/attribution/exit-capture-attribution-regression.test.ts,
|
|
10
12
|
// packages/daemon/src/worktree/capture-attribution-commit.test.ts,
|
|
13
|
+
// packages/daemon/src/worktree/capture-head-adoption.test.ts,
|
|
11
14
|
// packages/daemon/src/worktree/safety-commit-guard.test.ts,
|
|
12
15
|
// packages/daemon/src/worktree/safety-commit-under-guard.test.ts,
|
|
13
16
|
// packages/daemon/src/worktree/unmerged-capture-refusal.test.ts,
|
|
@@ -60,12 +63,21 @@ export function branchHasUnmergedCommits(branchName, targetBranch, repoPath) {
|
|
|
60
63
|
/**
|
|
61
64
|
* Subject prefixes of the two commits the daemon writes to capture an agent's
|
|
62
65
|
* uncommitted work: commitWipChanges (team exit) and safetyCommitWorktree
|
|
63
|
-
* (worktree removal, terminated-team reconcile).
|
|
64
|
-
*
|
|
65
|
-
*
|
|
66
|
+
* (worktree removal, terminated-team reconcile). A daemon capture is recognized
|
|
67
|
+
* by these (isDaemonWipCapture), so the writers build their subjects from the
|
|
68
|
+
* same constants.
|
|
66
69
|
*/
|
|
67
70
|
export const WIP_CAPTURE_SUBJECT_PREFIX = 'WIP: Uncommitted work captured by daemon on agent exit (';
|
|
68
71
|
export const SAFETY_COMMIT_SUBJECT_PREFIX = 'wip: uncommitted agent work for "';
|
|
72
|
+
/**
|
|
73
|
+
* True for a commit the daemon wrote to capture an agent's uncommitted work (a
|
|
74
|
+
* commitWipChanges or safetyCommitWorktree subject). The ONE recognizer: the merge
|
|
75
|
+
* gate's capture rule (merge/merge-gate-coverage.ts) and the review's capture-head
|
|
76
|
+
* adoption (worktree/capture-head-adoption.ts) both read it. Pure.
|
|
77
|
+
*/
|
|
78
|
+
export function isDaemonWipCapture(commit) {
|
|
79
|
+
return commit.subject.startsWith(WIP_CAPTURE_SUBJECT_PREFIX) || commit.subject.startsWith(SAFETY_COMMIT_SUBJECT_PREFIX);
|
|
80
|
+
}
|
|
69
81
|
/** The subject commitWipChanges writes for `contextName`. */
|
|
70
82
|
export function wipCaptureSubject(contextName) {
|
|
71
83
|
return `${WIP_CAPTURE_SUBJECT_PREFIX}${contextName})`;
|