@on-par/factory-core 0.9.7-next.8 → 0.9.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/blockers/dependencies.d.ts +19 -0
- package/dist/blockers/dependencies.d.ts.map +1 -0
- package/dist/blockers/dependencies.js +49 -0
- package/dist/blockers/dependencies.js.map +1 -0
- package/dist/blockers/file-blocker.d.ts +44 -0
- package/dist/blockers/file-blocker.d.ts.map +1 -0
- package/dist/blockers/file-blocker.js +203 -0
- package/dist/blockers/file-blocker.js.map +1 -0
- package/dist/blockers/index.d.ts +7 -0
- package/dist/blockers/index.d.ts.map +1 -0
- package/dist/blockers/index.js +5 -0
- package/dist/blockers/index.js.map +1 -0
- package/dist/blockers/poller.d.ts +37 -0
- package/dist/blockers/poller.d.ts.map +1 -0
- package/dist/blockers/poller.js +111 -0
- package/dist/blockers/poller.js.map +1 -0
- package/dist/checkers/index.d.ts +10 -1
- package/dist/checkers/index.d.ts.map +1 -1
- package/dist/checkers/index.js +14 -22
- package/dist/checkers/index.js.map +1 -1
- package/dist/checkers/probe.d.ts.map +1 -1
- package/dist/checkers/probe.js +5 -3
- package/dist/checkers/probe.js.map +1 -1
- package/dist/config/example.d.ts.map +1 -1
- package/dist/config/example.js +18 -0
- package/dist/config/example.js.map +1 -1
- package/dist/config/index.d.ts +1 -1
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +3 -3
- package/dist/config/index.js.map +1 -1
- package/dist/config/repo-build-pin.d.ts +4 -0
- package/dist/config/repo-build-pin.d.ts.map +1 -0
- package/dist/config/repo-build-pin.js +13 -0
- package/dist/config/repo-build-pin.js.map +1 -0
- package/dist/config/repo-harnesses.d.ts +43 -0
- package/dist/config/repo-harnesses.d.ts.map +1 -0
- package/dist/config/repo-harnesses.js +20 -0
- package/dist/config/repo-harnesses.js.map +1 -0
- package/dist/config/repo.d.ts +44 -11
- package/dist/config/repo.d.ts.map +1 -1
- package/dist/config/repo.js +26 -22
- package/dist/config/repo.js.map +1 -1
- package/dist/daemon/execution-config.d.ts +34 -0
- package/dist/daemon/execution-config.d.ts.map +1 -1
- package/dist/daemon/run-runtime.d.ts +34 -0
- package/dist/daemon/run-runtime.d.ts.map +1 -1
- package/dist/daemon/ship-executor.js +2 -3
- package/dist/daemon/ship-executor.js.map +1 -1
- package/dist/eval/baseline.d.ts.map +1 -1
- package/dist/eval/baseline.js +4 -4
- package/dist/eval/baseline.js.map +1 -1
- package/dist/eval/judge.d.ts.map +1 -1
- package/dist/eval/judge.js +9 -7
- package/dist/eval/judge.js.map +1 -1
- package/dist/eval/regression-report.js +1 -1
- package/dist/eval/regression-report.js.map +1 -1
- package/dist/eval/score.d.ts.map +1 -1
- package/dist/eval/score.js +2 -1
- package/dist/eval/score.js.map +1 -1
- package/dist/events/kinds.d.ts +1 -1
- package/dist/events/kinds.d.ts.map +1 -1
- package/dist/events/kinds.js +3 -0
- package/dist/events/kinds.js.map +1 -1
- package/dist/harness/catalog.d.ts +2 -0
- package/dist/harness/catalog.d.ts.map +1 -1
- package/dist/harness/catalog.js +5 -1
- package/dist/harness/catalog.js.map +1 -1
- package/dist/harness/contract.js +4 -4
- package/dist/harness/contract.js.map +1 -1
- package/dist/harness/index.d.ts +1 -1
- package/dist/harness/index.d.ts.map +1 -1
- package/dist/harness/index.js +1 -0
- package/dist/harness/index.js.map +1 -1
- package/dist/hosted/store-contract.js +1 -1
- package/dist/hosted/store-contract.js.map +1 -1
- package/dist/internal.d.ts +4 -4
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.js +4 -2
- package/dist/internal.js.map +1 -1
- package/dist/kpis/human.d.ts.map +1 -1
- package/dist/kpis/human.js +4 -8
- package/dist/kpis/human.js.map +1 -1
- package/dist/phases/build.d.ts +6 -2
- package/dist/phases/build.d.ts.map +1 -1
- package/dist/phases/build.js +43 -12
- package/dist/phases/build.js.map +1 -1
- package/dist/phases/check.d.ts +32 -2
- package/dist/phases/check.d.ts.map +1 -1
- package/dist/phases/check.js +5 -6
- package/dist/phases/check.js.map +1 -1
- package/dist/phases/plan-route.d.ts +16 -0
- package/dist/phases/plan-route.d.ts.map +1 -0
- package/dist/phases/plan-route.js +38 -0
- package/dist/phases/plan-route.js.map +1 -0
- package/dist/phases/plan-routes.d.ts +16 -1
- package/dist/phases/plan-routes.d.ts.map +1 -1
- package/dist/phases/plan-routes.js +40 -1
- package/dist/phases/plan-routes.js.map +1 -1
- package/dist/phases/plan.d.ts +4 -3
- package/dist/phases/plan.d.ts.map +1 -1
- package/dist/phases/plan.js +15 -30
- package/dist/phases/plan.js.map +1 -1
- package/dist/phases/ship-git.d.ts +52 -0
- package/dist/phases/ship-git.d.ts.map +1 -0
- package/dist/phases/ship-git.js +104 -0
- package/dist/phases/ship-git.js.map +1 -0
- package/dist/phases/ship.d.ts +8 -6
- package/dist/phases/ship.d.ts.map +1 -1
- package/dist/phases/ship.js +71 -121
- package/dist/phases/ship.js.map +1 -1
- package/dist/queue/queue-backend.d.ts +6 -1
- package/dist/queue/queue-backend.d.ts.map +1 -1
- package/dist/queue/queue-backend.js +7 -1
- package/dist/queue/queue-backend.js.map +1 -1
- package/dist/queue/unpark.d.ts +28 -0
- package/dist/queue/unpark.d.ts.map +1 -0
- package/dist/queue/unpark.js +69 -0
- package/dist/queue/unpark.js.map +1 -0
- package/dist/readiness/slice-plan.js +1 -1
- package/dist/readiness/slice-plan.js.map +1 -1
- package/dist/review/backtest.js +2 -2
- package/dist/review/backtest.js.map +1 -1
- package/dist/review/containment.js +1 -1
- package/dist/review/containment.js.map +1 -1
- package/dist/router/index.d.ts.map +1 -1
- package/dist/router/index.js +2 -13
- package/dist/router/index.js.map +1 -1
- package/dist/router/requires.d.ts +4 -0
- package/dist/router/requires.d.ts.map +1 -0
- package/dist/router/requires.js +22 -0
- package/dist/router/requires.js.map +1 -0
- package/dist/run/ci-rework-loop.d.ts +65 -0
- package/dist/run/ci-rework-loop.d.ts.map +1 -0
- package/dist/run/ci-rework-loop.js +169 -0
- package/dist/run/ci-rework-loop.js.map +1 -0
- package/dist/run/ci-rework.d.ts +25 -0
- package/dist/run/ci-rework.d.ts.map +1 -0
- package/dist/run/ci-rework.js +113 -0
- package/dist/run/ci-rework.js.map +1 -0
- package/dist/run/ci-suppression-guard.d.ts +11 -0
- package/dist/run/ci-suppression-guard.d.ts.map +1 -0
- package/dist/run/ci-suppression-guard.js +143 -0
- package/dist/run/ci-suppression-guard.js.map +1 -0
- package/dist/run/outcome.d.ts +9 -2
- package/dist/run/outcome.d.ts.map +1 -1
- package/dist/run/outcome.js +5 -0
- package/dist/run/outcome.js.map +1 -1
- package/dist/run/park-comment.d.ts +73 -0
- package/dist/run/park-comment.d.ts.map +1 -0
- package/dist/run/park-comment.js +211 -0
- package/dist/run/park-comment.js.map +1 -0
- package/dist/run/phase-snapshot.js +2 -2
- package/dist/run/phase-snapshot.js.map +1 -1
- package/dist/run/resume-context.d.ts +3 -2
- package/dist/run/resume-context.d.ts.map +1 -1
- package/dist/run/resume-context.js.map +1 -1
- package/dist/run/run-issue.d.ts +2 -1
- package/dist/run/run-issue.d.ts.map +1 -1
- package/dist/run/run-issue.js +50 -52
- package/dist/run/run-issue.js.map +1 -1
- package/dist/sandbox/index.js +1 -1
- package/dist/sandbox/index.js.map +1 -1
- package/dist/sim/pipeline.d.ts +2 -1
- package/dist/sim/pipeline.d.ts.map +1 -1
- package/dist/sim/pipeline.js.map +1 -1
- package/dist/spec/index.d.ts +3 -2
- package/dist/spec/index.d.ts.map +1 -1
- package/dist/spec/index.js +1 -1
- package/dist/spec/index.js.map +1 -1
- package/dist/steward/detect.d.ts +7 -3
- package/dist/steward/detect.d.ts.map +1 -1
- package/dist/steward/detect.js +8 -4
- package/dist/steward/detect.js.map +1 -1
- package/dist/types/index.d.ts +34 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/usage/index.js +1 -1
- package/dist/usage/index.js.map +1 -1
- package/dist/utils/command-runner.js +2 -2
- package/dist/utils/command-runner.js.map +1 -1
- package/dist/utils/worktree-gc.d.ts.map +1 -1
- package/dist/utils/worktree-gc.js +5 -5
- package/dist/utils/worktree-gc.js.map +1 -1
- package/dist/utils/worktree-location.d.ts +2 -2
- package/dist/utils/worktree-location.d.ts.map +1 -1
- package/dist/utils/worktree-location.js +16 -9
- package/dist/utils/worktree-location.js.map +1 -1
- package/dist/utils/worktree-name.d.ts +6 -0
- package/dist/utils/worktree-name.d.ts.map +1 -1
- package/dist/utils/worktree-name.js +16 -1
- package/dist/utils/worktree-name.js.map +1 -1
- package/package.json +5 -5
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"park-comment.d.ts","sourceRoot":"","sources":["../../src/run/park-comment.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
// src/run/park-comment.ts — upsert one issue comment with the park state behind a hidden factory-issue-state marker (#2314, ADR-0130)
|
|
2
|
+
//
|
|
3
|
+
// Every runIssue park edits one comment per issue in place (#728). Anyone can post the marker, so only a
|
|
4
|
+
// marker comment written by the authenticated identity is trusted (same rule as readiness/slice-plan-github.ts).
|
|
5
|
+
import { fenceExcerpt, stripHiddenContent } from '../filing/sanitize.js';
|
|
6
|
+
import { readWorktreeHead } from './ci-suppression-guard.js';
|
|
7
|
+
export const ISSUE_STATE_MARKER_VERSION = 'v1';
|
|
8
|
+
const PAGE_SIZE = 100;
|
|
9
|
+
const STATE_HEADING = '**Park state**';
|
|
10
|
+
const MARKER_RE = new RegExp(`<!-- factory-issue-state ${ISSUE_STATE_MARKER_VERSION} issue:(\\d+) -->`);
|
|
11
|
+
export function issueStateMarker(issue) {
|
|
12
|
+
return `<!-- factory-issue-state ${ISSUE_STATE_MARKER_VERSION} issue:${issue} -->`;
|
|
13
|
+
}
|
|
14
|
+
const PARK_HINTS = {
|
|
15
|
+
fail: 'fix the failing checks on the branch or clarify the issue, then run `factory unpark <n>`.',
|
|
16
|
+
blocked: 'waiting on a filed blocker. The factory resumes it once the blocker closes; run `factory unpark <n>` to retry sooner.',
|
|
17
|
+
escalate: 'a human decision is needed. Answer it on the issue, then run `factory unpark <n>`.',
|
|
18
|
+
timeout: 'a phase timed out. Check the lane log and retry with `factory unpark <n>`.',
|
|
19
|
+
conflict: 'rebase the branch onto main, then run `factory unpark <n>`.',
|
|
20
|
+
'ci-failed': 'fix CI on the PR, then run `factory unpark <n>`.',
|
|
21
|
+
'ci-infra': 'CI infrastructure failed. Re-run CI, then run `factory unpark <n>`.',
|
|
22
|
+
held: 'the same failure parked a prior run. A human must change the approach before `factory unpark <n>`.',
|
|
23
|
+
config: 'fix the named config file and line, then run `factory unpark <n>`.',
|
|
24
|
+
};
|
|
25
|
+
export function parkUnblockHint(reason, issue) {
|
|
26
|
+
return PARK_HINTS[reason].replaceAll('<n>', String(issue));
|
|
27
|
+
}
|
|
28
|
+
function clean(v) {
|
|
29
|
+
return stripHiddenContent(v)
|
|
30
|
+
.replace(/[\r\n]+/g, ' ')
|
|
31
|
+
.trim();
|
|
32
|
+
}
|
|
33
|
+
export function renderParkComment(input) {
|
|
34
|
+
const blockers = input.blockers ?? [];
|
|
35
|
+
const stateLines = [
|
|
36
|
+
`reason: ${clean(input.reason)}`,
|
|
37
|
+
`lane: ${(input.lane && clean(input.lane)) || '-'}`,
|
|
38
|
+
`run: ${clean(input.runId)}`,
|
|
39
|
+
`branch: ${clean(input.branch)}`,
|
|
40
|
+
`park-sha: ${(input.parkSha && clean(input.parkSha)) || '-'}`,
|
|
41
|
+
`blockers: ${blockers.length > 0 ? blockers.map((n) => `#${n}`).join(', ') : '-'}`,
|
|
42
|
+
];
|
|
43
|
+
if (input.autoUnparks !== undefined && input.autoUnparks > 0)
|
|
44
|
+
stateLines.push(`auto-unparks: ${input.autoUnparks}`);
|
|
45
|
+
if (input.status)
|
|
46
|
+
stateLines.push(`status: ${clean(input.status)}`);
|
|
47
|
+
const stateBlock = stateLines.join('\n');
|
|
48
|
+
return [
|
|
49
|
+
'### Factory park state',
|
|
50
|
+
'',
|
|
51
|
+
STATE_HEADING,
|
|
52
|
+
'',
|
|
53
|
+
fenceExcerpt(stateBlock),
|
|
54
|
+
'',
|
|
55
|
+
'**Why it parked**',
|
|
56
|
+
'',
|
|
57
|
+
fenceExcerpt(stripHiddenContent(input.message)),
|
|
58
|
+
'',
|
|
59
|
+
`**What unblocks this:** ${parkUnblockHint(input.reason, input.issue)}`,
|
|
60
|
+
'',
|
|
61
|
+
issueStateMarker(input.issue),
|
|
62
|
+
].join('\n');
|
|
63
|
+
}
|
|
64
|
+
function findStateFence(body) {
|
|
65
|
+
const lines = body.split('\n');
|
|
66
|
+
const heading = lines.indexOf(STATE_HEADING);
|
|
67
|
+
if (heading === -1)
|
|
68
|
+
return null;
|
|
69
|
+
const isFence = (l) => /^`{5,}$/.test(l);
|
|
70
|
+
const open = lines.findIndex((l, i) => i > heading && isFence(l));
|
|
71
|
+
if (open === -1)
|
|
72
|
+
return null;
|
|
73
|
+
const close = lines.indexOf(lines[open], open + 1);
|
|
74
|
+
if (close === -1)
|
|
75
|
+
return null;
|
|
76
|
+
return { lines, open, close };
|
|
77
|
+
}
|
|
78
|
+
function parseStateBlock(body) {
|
|
79
|
+
const fence = findStateFence(body);
|
|
80
|
+
if (fence === null)
|
|
81
|
+
return null;
|
|
82
|
+
const { lines, open, close } = fence;
|
|
83
|
+
const values = new Map();
|
|
84
|
+
for (const line of lines.slice(open + 1, close)) {
|
|
85
|
+
const sep = line.indexOf(':');
|
|
86
|
+
if (sep === -1)
|
|
87
|
+
continue;
|
|
88
|
+
values.set(line.slice(0, sep).trim(), line.slice(sep + 1).trim());
|
|
89
|
+
}
|
|
90
|
+
const reason = values.get('reason');
|
|
91
|
+
if (!reason)
|
|
92
|
+
return null;
|
|
93
|
+
const optional = (key) => {
|
|
94
|
+
const v = values.get(key);
|
|
95
|
+
return v === undefined || v === '' || v === '-' ? undefined : v;
|
|
96
|
+
};
|
|
97
|
+
const blockers = [...(values.get('blockers') ?? '').matchAll(/#(\d+)/g)].map((m) => Number(m[1]));
|
|
98
|
+
const rawAutoUnparks = values.get('auto-unparks') ?? '';
|
|
99
|
+
const autoUnparks = /^\d+$/.test(rawAutoUnparks) && Number.isSafeInteger(Number(rawAutoUnparks)) ? Number(rawAutoUnparks) : 0;
|
|
100
|
+
return {
|
|
101
|
+
reason,
|
|
102
|
+
lane: optional('lane'),
|
|
103
|
+
runId: optional('run'),
|
|
104
|
+
branch: optional('branch'),
|
|
105
|
+
parkSha: optional('park-sha'),
|
|
106
|
+
blockers,
|
|
107
|
+
autoUnparks,
|
|
108
|
+
status: optional('status'),
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
/** Rewrites the state block (and the unblock hint on a reason change) in place; null when there is no state block. */
|
|
112
|
+
export function patchParkComment(body, issue, patch) {
|
|
113
|
+
const fence = findStateFence(body);
|
|
114
|
+
if (fence === null)
|
|
115
|
+
return null;
|
|
116
|
+
const { lines, open, close } = fence;
|
|
117
|
+
const inner = lines.slice(open + 1, close);
|
|
118
|
+
const setLine = (key, value) => {
|
|
119
|
+
const at = inner.findIndex((l) => l.slice(0, Math.max(l.indexOf(':'), 0)).trim() === key);
|
|
120
|
+
if (at === -1)
|
|
121
|
+
inner.push(`${key}: ${value}`);
|
|
122
|
+
else
|
|
123
|
+
inner[at] = `${key}: ${value}`;
|
|
124
|
+
};
|
|
125
|
+
if (patch.reason !== undefined)
|
|
126
|
+
setLine('reason', clean(patch.reason));
|
|
127
|
+
if (patch.status !== undefined)
|
|
128
|
+
setLine('status', clean(patch.status));
|
|
129
|
+
if (patch.autoUnparks !== undefined)
|
|
130
|
+
setLine('auto-unparks', String(patch.autoUnparks));
|
|
131
|
+
const out = [...lines.slice(0, open + 1), ...inner, ...lines.slice(close)];
|
|
132
|
+
if (patch.reason !== undefined) {
|
|
133
|
+
const hint = out.findIndex((l) => l.startsWith('**What unblocks this:**'));
|
|
134
|
+
if (hint !== -1)
|
|
135
|
+
out[hint] = `**What unblocks this:** ${parkUnblockHint(patch.reason, issue)}`;
|
|
136
|
+
}
|
|
137
|
+
return out.join('\n');
|
|
138
|
+
}
|
|
139
|
+
/** Lowest-id marked comment decides; null when none, or when its state block is unreadable. */
|
|
140
|
+
export function readParkState(comments, issue) {
|
|
141
|
+
const marked = comments
|
|
142
|
+
.filter((c) => {
|
|
143
|
+
const m = MARKER_RE.exec(c.body);
|
|
144
|
+
return m !== null && (issue === undefined || Number(m[1]) === issue);
|
|
145
|
+
})
|
|
146
|
+
.sort((a, b) => a.id - b.id);
|
|
147
|
+
if (marked.length === 0)
|
|
148
|
+
return null;
|
|
149
|
+
return parseStateBlock(marked[0].body);
|
|
150
|
+
}
|
|
151
|
+
/** The lowest-id marker comment written by the authenticated user, or undefined. */
|
|
152
|
+
export async function findOwnParkComment(deps) {
|
|
153
|
+
const { octokit, repo, issue } = deps;
|
|
154
|
+
const [owner, name] = repo.split('/');
|
|
155
|
+
const marker = issueStateMarker(issue);
|
|
156
|
+
const { data: me } = await octokit.rest.users.getAuthenticated();
|
|
157
|
+
let existing;
|
|
158
|
+
for (let page = 1;; page++) {
|
|
159
|
+
const { data } = await octokit.rest.issues.listComments({
|
|
160
|
+
owner,
|
|
161
|
+
repo: name,
|
|
162
|
+
issue_number: issue,
|
|
163
|
+
per_page: PAGE_SIZE,
|
|
164
|
+
page,
|
|
165
|
+
});
|
|
166
|
+
for (const comment of data) {
|
|
167
|
+
const body = comment.body ?? '';
|
|
168
|
+
if (comment.user?.id !== me.id || !body.includes(marker))
|
|
169
|
+
continue;
|
|
170
|
+
if (existing === undefined || comment.id < existing.id)
|
|
171
|
+
existing = { id: comment.id, body };
|
|
172
|
+
}
|
|
173
|
+
if (data.length < PAGE_SIZE)
|
|
174
|
+
break;
|
|
175
|
+
}
|
|
176
|
+
return existing;
|
|
177
|
+
}
|
|
178
|
+
export async function upsertParkComment(deps) {
|
|
179
|
+
const { octokit, repo, input } = deps;
|
|
180
|
+
const [owner, name] = repo.split('/');
|
|
181
|
+
const existing = await findOwnParkComment({ octokit, repo, issue: input.issue });
|
|
182
|
+
const autoUnparks = input.autoUnparks ?? (existing === undefined ? 0 : (readParkState([existing], input.issue)?.autoUnparks ?? 0));
|
|
183
|
+
const body = renderParkComment({ ...input, autoUnparks });
|
|
184
|
+
if (existing !== undefined) {
|
|
185
|
+
await octokit.rest.issues.updateComment({ owner, repo: name, comment_id: existing.id, body });
|
|
186
|
+
return { commentId: existing.id, created: false };
|
|
187
|
+
}
|
|
188
|
+
const { data } = await octokit.rest.issues.createComment({ owner, repo: name, issue_number: input.issue, body });
|
|
189
|
+
return { commentId: data.id, created: true };
|
|
190
|
+
}
|
|
191
|
+
/** Never throws: a GitHub or git failure comes back as `{ ok: false, error }`. */
|
|
192
|
+
export async function publishParkComment(deps) {
|
|
193
|
+
const { octokit, repo, worktree, input, readHead = readWorktreeHead } = deps;
|
|
194
|
+
let parkSha;
|
|
195
|
+
if (worktree) {
|
|
196
|
+
try {
|
|
197
|
+
parkSha = (await readHead(worktree)) || undefined;
|
|
198
|
+
}
|
|
199
|
+
catch {
|
|
200
|
+
parkSha = undefined;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
try {
|
|
204
|
+
const result = await upsertParkComment({ octokit, repo, input: { ...input, parkSha } });
|
|
205
|
+
return { ok: true, ...result };
|
|
206
|
+
}
|
|
207
|
+
catch (err) {
|
|
208
|
+
return { ok: false, error: err instanceof Error ? err.message : String(err) };
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
//# sourceMappingURL=park-comment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"park-comment.js","sourceRoot":"","sources":["../../src/run/park-comment.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,7 +13,7 @@ export function summarizeEvent(type, msg) {
|
|
|
13
13
|
const summary = trimmed.length > 0 ? `${type}: ${trimmed}` : type;
|
|
14
14
|
return summary.length > LAST_EVENT_MAX_LENGTH ? `${summary.slice(0, LAST_EVENT_MAX_LENGTH - 1)}…` : summary;
|
|
15
15
|
}
|
|
16
|
-
const PHASES = ['plan', 'build', 'check', 'ship'];
|
|
16
|
+
const PHASES = new Set(['plan', 'build', 'check', 'ship']);
|
|
17
17
|
/** Path of one issue's persisted phase snapshot inside `runsDir`
|
|
18
18
|
* (`getFactoryPaths(repoRoot).runs`). */
|
|
19
19
|
export function phaseSnapshotFile(runsDir, issue) {
|
|
@@ -65,7 +65,7 @@ export async function readPhaseSnapshot(file) {
|
|
|
65
65
|
if (typeof record.issue !== 'number' ||
|
|
66
66
|
typeof record.updatedAt !== 'string' ||
|
|
67
67
|
typeof record.lastActivityAt !== 'string' ||
|
|
68
|
-
!PHASES.
|
|
68
|
+
!PHASES.has(record.phase)) {
|
|
69
69
|
return null;
|
|
70
70
|
}
|
|
71
71
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"phase-snapshot.js","sourceRoot":"","sources":["../../src/run/phase-snapshot.ts"],"names":[],"mappings":"AAAA,sFAAsF;AACtF,wFAAwF;AACxF,wFAAwF;AACxF,uFAAuF;AACvF,wCAAwC;AAExC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAqB7C,MAAM,qBAAqB,GAAG,GAAG,CAAC;AAElC;mFACmF;AACnF,MAAM,UAAU,cAAc,CAAC,IAAe,EAAE,GAAW;IACzD,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAC3B,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,KAAK,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAClE,OAAO,OAAO,CAAC,MAAM,GAAG,qBAAqB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,qBAAqB,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC;AAC9G,CAAC;AAED,MAAM,MAAM,
|
|
1
|
+
{"version":3,"file":"phase-snapshot.js","sourceRoot":"","sources":["../../src/run/phase-snapshot.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import type { EnvironmentFailure } from '../phases/check.js';
|
|
2
2
|
import type { PlanResult } from '../phases/plan.js';
|
|
3
3
|
import type { CheckSummary, Constitution } from '../types/index.js';
|
|
4
|
+
import type { BuildRoutePin } from '../config/repo.js';
|
|
4
5
|
export interface PlanReuseRecord {
|
|
5
6
|
/** issueBodyHash of the brief the frozen spec was planned from. */
|
|
6
7
|
bodyHash: string;
|
|
7
8
|
/** Base SHA the CHECK environment release was decided on. */
|
|
8
9
|
baseSha: string;
|
|
9
|
-
route:
|
|
10
|
+
route: BuildRoutePin;
|
|
10
11
|
releasedAt: string;
|
|
11
12
|
}
|
|
12
13
|
export interface PlanReuseStore {
|
|
@@ -29,7 +30,7 @@ export interface CheckResumeRecord {
|
|
|
29
30
|
worktree: string;
|
|
30
31
|
/** build.diffBase from the original run (undefined when BUILD reported none). */
|
|
31
32
|
diffBase?: string;
|
|
32
|
-
route:
|
|
33
|
+
route: BuildRoutePin;
|
|
33
34
|
/** build.model of the original run, reused as CHECK's reworkModel. */
|
|
34
35
|
model: string;
|
|
35
36
|
/** Whole minutes from PLAN start to BUILD end in the original run, at least 1. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resume-context.d.ts","sourceRoot":"","sources":["../../src/run/resume-context.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"resume-context.d.ts","sourceRoot":"","sources":["../../src/run/resume-context.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resume-context.js","sourceRoot":"","sources":["../../src/run/resume-context.ts"],"names":[],"mappings":"AAAA,uFAAuF;AACvF,+FAA+F;AAC/F,+FAA+F;AAC/F,gGAAgG;AAChG,8DAA8D;AAC9D,2EAA2E;AAE3E,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAGzD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"resume-context.js","sourceRoot":"","sources":["../../src/run/resume-context.ts"],"names":[],"mappings":"AAAA,uFAAuF;AACvF,+FAA+F;AAC/F,+FAA+F;AAC/F,gGAAgG;AAChG,8DAA8D;AAC9D,2EAA2E;AAE3E,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAGzD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAqB5C,yEAAyE;AACzE,MAAM,UAAU,aAAa,CAAC,KAAa;IACzC,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACxF,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,aAAa,CAAC,QAAgB;IAC5C,OAAO,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,QAAQ,cAAc,CAAC;AACvG,CAAC;AAED,SAAS,QAAQ,CAAC,GAAY;IAC5B,OAAQ,GAAoC,EAAE,IAAI,KAAK,QAAQ,CAAC;AAClE,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,QAAgB;IACnD,MAAM,IAAI,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;IACrC,OAAO;QACL,KAAK,CAAC,IAAI,CAAC,QAAQ;YACjB,IAAI,MAAe,CAAC;YACpB,IAAI,CAAC;gBACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;YACrD,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,YAAY,WAAW;oBAAE,OAAO,IAAI,CAAC;gBAC7D,MAAM,GAAG,CAAC;YACZ,CAAC;YACD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAK,MAAiC,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBAC9G,OAAO,IAAI,CAAC;YACd,CAAC;YACD,IAAI,IAAI,CAAC;YACT,IAAI,CAAC;gBACH,IAAI,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAClC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,QAAQ,CAAC,GAAG,CAAC;oBAAE,OAAO,IAAI,CAAC;gBAC/B,MAAM,GAAG,CAAC;YACZ,CAAC;YACD,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI;gBAAE,OAAO,IAAI,CAAC;YACrC,MAAM,EAAE,QAAQ,EAAE,GAAG,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACpD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,QAAQ,EAAE,CAAC;QACnG,CAAC;QACD,KAAK,CAAC,MAAM,CAAC,KAAK;YAChB,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAChD,MAAM,SAAS,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QAC/D,CAAC;QACD,KAAK,CAAC,KAAK;YACT,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAClC,CAAC;KACF,CAAC;AACJ,CAAC;AA4BD,mFAAmF;AACnF,MAAM,UAAU,eAAe,CAAC,QAAgB;IAC9C,OAAO,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,GAAG,QAAQ,oBAAoB,CAAC;AACnH,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,QAAgB;IACrD,MAAM,IAAI,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;IACvC,OAAO;QACL,KAAK,CAAC,IAAI;YACR,IAAI,MAAe,CAAC;YACpB,IAAI,CAAC;gBACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;YACrD,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,YAAY,WAAW;oBAAE,OAAO,IAAI,CAAC;gBAC7D,MAAM,GAAG,CAAC;YACZ,CAAC;YACD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI;gBAAE,OAAO,IAAI,CAAC;YAC/D,MAAM,CAAC,GAAG,MAAiC,CAAC;YAC5C,IACE,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ;gBAC5B,OAAO,CAAC,CAAC,QAAQ,KAAK,QAAQ;gBAC9B,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ;gBAC3B,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ;gBAC3B,OAAO,CAAC,CAAC,YAAY,KAAK,QAAQ,EAClC,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC;YACD,OAAO,MAA2B,CAAC;QACrC,CAAC;QACD,KAAK,CAAC,MAAM,CAAC,KAAK;YAChB,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAChD,MAAM,SAAS,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QAC/D,CAAC;QACD,KAAK,CAAC,KAAK;YACT,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAClC,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,IAK3C;IACC,OAAO,GAAG,IAAI,CAAC,YAAY,8BAA8B,IAAI,CAAC,MAAM,SAAS,IAAI,CAAC,SAAS,4BAA4B,IAAI,CAAC,KAAK,eAAe,CAAC;AACnJ,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,kBAAkB,CAChC,OAAyE,EACzE,YAAiC,EACjC,UAAiD;IAEjD,IAAI,OAAO,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC/B,MAAM,EAAE,QAAQ,EAAE,GAAG,iBAAiB,CAAC,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,CAAC;QACrE,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;QAC5D,IAAI,QAAQ;YAAE,OAAO,GAAG,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;QACzD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACjD,IAAI,CAAC,YAAY;YAAE,OAAO,gCAAgC,CAAC;QAC3D,MAAM,IAAI,GACR,YAAY,CAAC,YAAY,EAAE,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAC5G,MAAM,OAAO,GAAG,YAAY,CAAC,YAAY,EAAE,OAAO,IAAI,YAAY,CAAC,IAAI,CAAC;QACxE,IAAI,CAAC,IAAI;YAAE,OAAO,OAAO,CAAC;QAC1B,IAAI,KAAK,GAAa,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,KAAK,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAClD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,OAAO,CAAC;QACjB,CAAC;QACD,MAAM,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/D,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;IACtD,CAAC;IACD,OAAO,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,sBAAsB,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;AAC5F,CAAC;AAED,uGAAuG;AACvG,MAAM,UAAU,iBAAiB,CAAC,IAMjC;IACC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC;IACnE,MAAM,EAAE,QAAQ,EAAE,GAAG,iBAAiB,CAAC,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,CAAC;IACrE,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC1E,MAAM,MAAM,GACV,OAAO,EAAE,IAAI,KAAK,SAAS;QACzB,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,EAAE;QACnC,CAAC,CAAC,kBAAkB,CAAC,OAAO,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC;IAC5D,IAAI,GAAW,CAAC;IAChB,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC;QAC7B,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;IACpG,CAAC;SAAM,CAAC;QACN,GAAG;YACD,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO;gBAC9D,2EAA2E,CAAC;IAChF,CAAC;IACD,OAAO;QACL,4BAA4B,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,4EAA4E;QACxI,SAAS,MAAM,EAAE;QACjB,QAAQ,GAAG,EAAE;QACb,2BAA2B,KAAK,EAAE;KACnC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC"}
|
package/dist/run/run-issue.d.ts
CHANGED
|
@@ -23,6 +23,7 @@ import { type BuildRoute, type RunOutcome } from './outcome.js';
|
|
|
23
23
|
import type { RunPolicy } from './policy.js';
|
|
24
24
|
import { type CheckResumeStore, type PlanReuseStore } from './resume-context.js';
|
|
25
25
|
import type { Environment, Workspace } from './ports.js';
|
|
26
|
+
import { type CiReworkPorts } from './ci-rework-loop.js';
|
|
26
27
|
/** Everything one run needs decided, as a plain resolved value — the CLI adapter
|
|
27
28
|
* computes this today; no config/file/path resolution happens in here. */
|
|
28
29
|
export interface RunRequest {
|
|
@@ -144,7 +145,7 @@ interface RunReportInfo {
|
|
|
144
145
|
/** The injected seams runIssue needs. Effectful, path-bound concerns (Octokit, worktree
|
|
145
146
|
* layout, approvals/steering directories, report/artifact destinations) are the caller's
|
|
146
147
|
* responsibility to wire — runIssue only calls the closures it is handed. */
|
|
147
|
-
export interface RunPorts {
|
|
148
|
+
export interface RunPorts extends CiReworkPorts {
|
|
148
149
|
/** Stuck-run steward seams (#2124). Used only when request.stewardEnabled is true and detectStuck fires
|
|
149
150
|
* on the park; absent → only the steward-triggered event is logged (#2086). */
|
|
150
151
|
steward?: RunStewardPorts;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-issue.d.ts","sourceRoot":"","sources":["../../src/run/run-issue.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"run-issue.d.ts","sourceRoot":"","sources":["../../src/run/run-issue.ts"],"names":[],"mappings":"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"}
|
package/dist/run/run-issue.js
CHANGED
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
// (including the non-park `released` exit for an environment-caused CHECK failure, #1928; a config cause parks, #2583).
|
|
10
10
|
// PLAN may be skipped by the planReuse port after an environment release (#2340).
|
|
11
11
|
// CHECK may be resumed on a kept worktree via request.resumeFrom after an environment release (#2564).
|
|
12
|
+
// Every park posts or edits one issue-level park comment behind a hidden marker; a GitHub failure only logs a warning (#2314).
|
|
12
13
|
// A config preflight (#2586) rejects unfilled template tokens before base health and PLAN; any preflight failure parks with the `config` cause (#2587).
|
|
13
14
|
//
|
|
14
15
|
// Path-bound CLI concerns (Octokit, worktree/environment provisioning, the events sink,
|
|
@@ -23,6 +24,7 @@ import { describeConstitutionSource } from '../constitutions/index.js';
|
|
|
23
24
|
import { lintFactoryConfig } from '../config/config-lint.js';
|
|
24
25
|
import { planPhase as planPhaseDefault } from '../phases/plan.js';
|
|
25
26
|
import { shipPhase as shipPhaseDefault } from '../phases/ship.js';
|
|
27
|
+
import { publishParkComment } from './park-comment.js';
|
|
26
28
|
import { upsertSlicePlanComment } from '../readiness/slice-plan-github.js';
|
|
27
29
|
import { withSliceState } from '../readiness/slice-plan.js';
|
|
28
30
|
import { CLASSIFIER_PROMPT_VERSION, classifierPolicyVersion, classifyPrShadow, toClassificationRecord, } from '../review/classifier.js';
|
|
@@ -37,9 +39,10 @@ import { ProcessGroupTracker } from '../environment/process-groups.js';
|
|
|
37
39
|
import { gateBuildOnBreaker, parseResetCooldownMs } from '../router/breaker.js';
|
|
38
40
|
import { describeSteering } from '../steering/index.js';
|
|
39
41
|
import { touchedFilesFrom } from './lane-file-guard.js';
|
|
40
|
-
import { parkReasonFor } from './outcome.js';
|
|
42
|
+
import { parkReasonFor, reworkRouteFor } from './outcome.js';
|
|
41
43
|
import { configParkMessage, formatPreservedBuildMessage, issueBodyHash, preservedFixTarget, } from './resume-context.js';
|
|
42
|
-
import {
|
|
44
|
+
import { shipWithCiRework } from './ci-rework-loop.js';
|
|
45
|
+
import { parkLogExtra } from './ship-park.js';
|
|
43
46
|
function errorMessage(err) {
|
|
44
47
|
return err instanceof Error ? err.message : String(err);
|
|
45
48
|
}
|
|
@@ -194,17 +197,37 @@ export async function runIssue(request, policy, ports) {
|
|
|
194
197
|
return { state: 'escalated', reason: message, route, branch: request.branch, reworkRounds };
|
|
195
198
|
};
|
|
196
199
|
const terminalParked = async (reason, message, checkFailure, ciFailure) => {
|
|
197
|
-
|
|
200
|
+
// A blocked park never carries a failure signature, so the ADR-0139 lane breaker and the cross-run stuck check skip it (#2315).
|
|
201
|
+
const failure = reason === 'blocked' ? undefined : checkFailure;
|
|
202
|
+
log(reason, message, parkLogExtra(failure, ciFailure));
|
|
198
203
|
if (reason === 'timeout') {
|
|
199
204
|
log('stuck', `run exceeded its phase timeout without progressing — ${message}`);
|
|
200
205
|
}
|
|
206
|
+
if (!request.localOnly) {
|
|
207
|
+
const posted = await publishParkComment({
|
|
208
|
+
octokit: ports.octokit,
|
|
209
|
+
repo: request.repo,
|
|
210
|
+
worktree: ports.workspace.path,
|
|
211
|
+
input: {
|
|
212
|
+
issue: request.issue,
|
|
213
|
+
reason,
|
|
214
|
+
message,
|
|
215
|
+
runId,
|
|
216
|
+
branch: request.branch,
|
|
217
|
+
lane: request.lane,
|
|
218
|
+
blockers: [],
|
|
219
|
+
},
|
|
220
|
+
});
|
|
221
|
+
if (!posted.ok)
|
|
222
|
+
log('environment_warning', `could not post the issue park comment: ${posted.error}`);
|
|
223
|
+
}
|
|
201
224
|
const outcome = {
|
|
202
225
|
state: 'parked',
|
|
203
226
|
reason,
|
|
204
227
|
route,
|
|
205
228
|
branch: request.branch,
|
|
206
229
|
reworkRounds,
|
|
207
|
-
...
|
|
230
|
+
...failure,
|
|
208
231
|
};
|
|
209
232
|
// The steward runs after the park event and before the reports and the return, so it finishes
|
|
210
233
|
// before the CLI raises LaneParkError or pauses the lane (#2124).
|
|
@@ -286,7 +309,7 @@ export async function runIssue(request, policy, ports) {
|
|
|
286
309
|
// Any failing verdict parks with the `config` cause (#2587); checker findings come first in the message.
|
|
287
310
|
const lint = lintFactoryConfig({ constitution, configFile: request.repoConfigFile });
|
|
288
311
|
if (lint.verdict !== 'ok') {
|
|
289
|
-
return terminalParked('config', [
|
|
312
|
+
return await terminalParked('config', [
|
|
290
313
|
'config preflight failed before PLAN:',
|
|
291
314
|
...lint.findings.map((f) => f.message),
|
|
292
315
|
`then run factory unpark ${request.issue}`,
|
|
@@ -428,9 +451,9 @@ export async function runIssue(request, policy, ports) {
|
|
|
428
451
|
return { state: 'escalated', reason: `issue #${request.issue} decomposed into ${childList}`, route };
|
|
429
452
|
}
|
|
430
453
|
if (plan.sliced) {
|
|
431
|
-
return terminalEscalated(`issue #${request.issue} sliced into ${plan.sliced.sliceCount} slice(s): ${plan.escalate ?? 'slice plan recorded'}`);
|
|
454
|
+
return await terminalEscalated(`issue #${request.issue} sliced into ${plan.sliced.sliceCount} slice(s): ${plan.escalate ?? 'slice plan recorded'}`);
|
|
432
455
|
}
|
|
433
|
-
return terminalEscalated(`plan escalated: ${plan.escalate ?? 'unknown'}`);
|
|
456
|
+
return await terminalEscalated(`plan escalated: ${plan.escalate ?? 'unknown'}`);
|
|
434
457
|
}
|
|
435
458
|
const planBudget = await assertBudget('PLAN');
|
|
436
459
|
if (planBudget)
|
|
@@ -441,7 +464,7 @@ export async function runIssue(request, policy, ports) {
|
|
|
441
464
|
const touchedFiles = touchedFilesFrom(plan.designArtifact);
|
|
442
465
|
const collision = await ports.laneFileGuard.findCollision(request.repo, request.issue, touchedFiles);
|
|
443
466
|
if (collision) {
|
|
444
|
-
return terminalParked('held', `issue held: #${request.issue} touches ${collision.file}, already claimed by in-flight issue #${collision.issue} — held until that lane finishes`);
|
|
467
|
+
return await terminalParked('held', `issue held: #${request.issue} touches ${collision.file}, already claimed by in-flight issue #${collision.issue} — held until that lane finishes`);
|
|
445
468
|
}
|
|
446
469
|
if (touchedFiles.length > 0) {
|
|
447
470
|
await ports.laneFileGuard.register(request.repo, request.issue, touchedFiles);
|
|
@@ -487,7 +510,9 @@ export async function runIssue(request, policy, ports) {
|
|
|
487
510
|
? ports.router.registryRef.isCodexModel(buildModel)
|
|
488
511
|
: buildRoute === 'opencode'
|
|
489
512
|
? harnessId === 'opencode'
|
|
490
|
-
:
|
|
513
|
+
: buildRoute === 'command'
|
|
514
|
+
? routeForBuildModel(ports.router.registryRef, buildModel) === 'command'
|
|
515
|
+
: harnessId === 'claude-cli';
|
|
491
516
|
if (!compatible) {
|
|
492
517
|
log('model_override_ignored', `build model ${buildModel} is incompatible with the ${buildRoute} route${buildRoute === request.preferredRoute ? ' pinned by .factory/config.json' : ''} — using that route's default worker`);
|
|
493
518
|
buildModel = undefined;
|
|
@@ -526,12 +551,12 @@ export async function runIssue(request, policy, ports) {
|
|
|
526
551
|
route = build.route;
|
|
527
552
|
if (!build.ok) {
|
|
528
553
|
if (build.reason === 'no_diff') {
|
|
529
|
-
return terminalParked('fail', 'build produced no diff against the base ref — no implementation was produced');
|
|
554
|
+
return await terminalParked('fail', 'build produced no diff against the base ref — no implementation was produced');
|
|
530
555
|
}
|
|
531
556
|
if (build.reason === 'junk_only_diff') {
|
|
532
|
-
return terminalParked('fail', 'build changed only generated/cache files (e.g. __pycache__) — no implementation was produced');
|
|
557
|
+
return await terminalParked('fail', 'build changed only generated/cache files (e.g. __pycache__) — no implementation was produced');
|
|
533
558
|
}
|
|
534
|
-
return terminalEscalated(`build escalated: ${build.escalate ?? 'unknown'}`);
|
|
559
|
+
return await terminalEscalated(`build escalated: ${build.escalate ?? 'unknown'}`);
|
|
535
560
|
}
|
|
536
561
|
const buildBudget = await assertBudget('BUILD');
|
|
537
562
|
if (buildBudget)
|
|
@@ -552,7 +577,7 @@ export async function runIssue(request, policy, ports) {
|
|
|
552
577
|
// CHECK
|
|
553
578
|
await setPhase('check');
|
|
554
579
|
const priorFailureSignature = await ports.reworkHistory?.priorSignature(request.issue);
|
|
555
|
-
const
|
|
580
|
+
const checkOpts = {
|
|
556
581
|
runId,
|
|
557
582
|
issue: request.issue,
|
|
558
583
|
worktree: ports.workspace.path,
|
|
@@ -573,13 +598,13 @@ export async function runIssue(request, policy, ports) {
|
|
|
573
598
|
priorFailureSignature,
|
|
574
599
|
diffBase: request.localOnly ? runStartDiffBase : buildDiffBase,
|
|
575
600
|
parentBaseRef: request.parentBaseRef,
|
|
576
|
-
|
|
577
|
-
reworkModel: builtModel,
|
|
601
|
+
...reworkRouteFor(builtRoute, builtModel),
|
|
578
602
|
laneId: request.lane,
|
|
579
603
|
onActivity: ports.onActivity,
|
|
580
604
|
logsDir: request.logsDir,
|
|
581
605
|
baselineCachePath: request.baselineCachePath,
|
|
582
|
-
}
|
|
606
|
+
};
|
|
607
|
+
const check = await checkPhase(checkOpts);
|
|
583
608
|
checkSummary = check.summary;
|
|
584
609
|
reworkRounds = check.reworkRounds;
|
|
585
610
|
const flake = check.flakeRerun;
|
|
@@ -628,7 +653,7 @@ export async function runIssue(request, policy, ports) {
|
|
|
628
653
|
const failure = check.failureSignature !== undefined
|
|
629
654
|
? { failureSignature: check.failureSignature, failingChecks: env.failingChecks }
|
|
630
655
|
: undefined;
|
|
631
|
-
return terminalParked('config', configParkMessage({
|
|
656
|
+
return await terminalParked('config', configParkMessage({
|
|
632
657
|
issue: request.issue,
|
|
633
658
|
failure: env,
|
|
634
659
|
summary: check.summary,
|
|
@@ -721,7 +746,7 @@ export async function runIssue(request, policy, ports) {
|
|
|
721
746
|
? `${message}\nremaining showstoppers:\n${showstoppers.map((s) => `- ${s}`).join('\n')}`
|
|
722
747
|
: message;
|
|
723
748
|
await clearCheckResume();
|
|
724
|
-
return terminalParked(reason, parkedMessage, checkFailure);
|
|
749
|
+
return await terminalParked(reason, parkedMessage, checkFailure);
|
|
725
750
|
}
|
|
726
751
|
await clearCheckResume();
|
|
727
752
|
// Clean check — clear stale cross-run history so a future, genuinely different
|
|
@@ -768,7 +793,7 @@ export async function runIssue(request, policy, ports) {
|
|
|
768
793
|
});
|
|
769
794
|
}
|
|
770
795
|
catch (err) {
|
|
771
|
-
return terminalParked('held', `issue held: classifier gate label '${label}' could not be applied (${reviewRouting.reason}): ${errorMessage(err)} — needs a human`);
|
|
796
|
+
return await terminalParked('held', `issue held: classifier gate label '${label}' could not be applied (${reviewRouting.reason}): ${errorMessage(err)} — needs a human`);
|
|
772
797
|
}
|
|
773
798
|
log('merge-gated', `${reviewRouting.reason} — applied ${label}; auto-merge held for a human${reviewRouting.error ? ` (${reviewRouting.error})` : ''}`);
|
|
774
799
|
}
|
|
@@ -813,37 +838,10 @@ export async function runIssue(request, policy, ports) {
|
|
|
813
838
|
}
|
|
814
839
|
// SHIP
|
|
815
840
|
await setPhase('ship');
|
|
816
|
-
const
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
branch: request.branch,
|
|
821
|
-
recordedRemoteSha: ports.workspace.remoteBranch?.sha,
|
|
822
|
-
octokit: ports.octokit,
|
|
823
|
-
watchCI: !request.skipCI,
|
|
824
|
-
log: ports.events('ship'),
|
|
825
|
-
approvalGate: request.options.interactive ? ports.createApprovalGate?.() : undefined,
|
|
826
|
-
checkSummary: check.summary,
|
|
827
|
-
specPath: request.specPath,
|
|
828
|
-
eventsFile: request.eventsFile,
|
|
829
|
-
startedAt: request.startedAt,
|
|
830
|
-
logsDir: request.logsDir,
|
|
831
|
-
reworkRounds: check.reworkRounds,
|
|
832
|
-
work: request.work,
|
|
833
|
-
laneId: request.lane,
|
|
834
|
-
reviewRouting,
|
|
835
|
-
...(pinNote ? { pinNotes: [pinNote] } : {}),
|
|
836
|
-
slice: planSlice ? { index: planSlice.index, count: planSlice.plan.slices.length } : undefined,
|
|
837
|
-
});
|
|
838
|
-
if (!ship.ok) {
|
|
839
|
-
const reason = shipParkReason(ship);
|
|
840
|
-
const message = ship.denied
|
|
841
|
-
? `ship denied: ${ship.deniedReason}`
|
|
842
|
-
: ship.reason
|
|
843
|
-
? `ship phase failed: ${ship.reason}`
|
|
844
|
-
: 'ship phase failed';
|
|
845
|
-
return terminalParked(reason, message, undefined, ship.ciFailure);
|
|
846
|
-
}
|
|
841
|
+
const shipped = await shipWithCiRework({ request, ports, shipPhase, checkPhase, checkOpts, check, constitution, appPort, appBaseUrl, onPgid, runId }, { builtRoute, builtModel, reviewRouting, pinNote, planSlice });
|
|
842
|
+
const { ship, parked } = shipped;
|
|
843
|
+
if (parked)
|
|
844
|
+
return await terminalParked(parked.reason, parked.message, parked.checkFailure, parked.ciFailure);
|
|
847
845
|
if (planSlice) {
|
|
848
846
|
const { index, plan: slicePlan } = planSlice;
|
|
849
847
|
const count = slicePlan.slices.length;
|
|
@@ -862,7 +860,7 @@ export async function runIssue(request, policy, ports) {
|
|
|
862
860
|
log('ship', `recorded slice ${index}/${count} as ${state} (PR #${ship.prNumber}, branch ${request.branch}) in the slice plan comment`);
|
|
863
861
|
}
|
|
864
862
|
catch (err) {
|
|
865
|
-
return terminalParked('fail', `slice ${index}/${count} PR #${ship.prNumber} opened but recording it in the slice plan comment failed: ${errorMessage(err)}`);
|
|
863
|
+
return await terminalParked('fail', `slice ${index}/${count} PR #${ship.prNumber} opened but recording it in the slice plan comment failed: ${errorMessage(err)}`);
|
|
866
864
|
}
|
|
867
865
|
}
|
|
868
866
|
}
|
|
@@ -891,7 +889,7 @@ export async function runIssue(request, policy, ports) {
|
|
|
891
889
|
'not a failure of the issue itself; on macOS a launch context without login-keychain access (e.g. tmux) ' +
|
|
892
890
|
'cannot refresh Claude OAuth — run `factory doctor` (#1014)');
|
|
893
891
|
}
|
|
894
|
-
return terminalParked(parkReasonFor(err), errorMessage(err));
|
|
892
|
+
return await terminalParked(parkReasonFor(err), errorMessage(err));
|
|
895
893
|
}
|
|
896
894
|
finally {
|
|
897
895
|
await release();
|