@gobing-ai/spur 0.4.3 → 0.4.4
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/.claude-plugin/marketplace.json +1 -1
- package/config/rules/docs/verdict-confidence.yaml +68 -0
- package/config/rules/quality/coverage-gate.yaml +13 -0
- package/config/rules/recommended-pre-check.yaml +6 -2
- package/config/rules/strict/runtime-boundaries.yaml +3 -0
- package/config/rules/surface/check-cli-surface.yaml +1 -3
- package/config/templates/AGENTS.md +7 -0
- package/config/workflows/feature-verification.yaml +9 -1
- package/config/workflows/task-lifecycle.yaml +50 -0
- package/config/workflows/task-pipeline.yaml +15 -9
- package/package.json +10 -10
- package/plugins/sp/agents/super-reviewer.md +5 -2
- package/plugins/sp/commands/dev-changelog.md +1 -1
- package/plugins/sp/commands/dev-gitmsg.md +6 -2
- package/plugins/sp/commands/dev-handover.md +1 -0
- package/plugins/sp/commands/dev-job-dump.md +2 -1
- package/plugins/sp/commands/dev-refine.md +14 -2
- package/plugins/sp/commands/dev-refineall.md +7 -1
- package/plugins/sp/commands/dev-review.md +1 -0
- package/plugins/sp/lib/history-anatomy.generated.mjs +18 -18
- package/plugins/sp/lib/idea-handoff.generated.mjs +91 -91
- package/plugins/sp/lib/inline-run.generated.mjs +233 -277
- package/plugins/sp/lib/plan-projection.generated.mjs +62 -38
- package/plugins/sp/lib/quality-gate.generated.d.mts +1 -0
- package/plugins/sp/lib/quality-gate.generated.mjs +13793 -13966
- package/plugins/sp/lib/residual-scan.generated.d.mts +13 -0
- package/plugins/sp/lib/residual-scan.generated.mjs +51 -21
- package/plugins/sp/lib/step-profile.generated.mjs +8 -8
- package/plugins/sp/plugin.json +1 -1
- package/plugins/sp/scripts/batch-plan.mjs +62 -40
- package/plugins/sp/scripts/batch-preflight.mjs +34 -12
- package/plugins/sp/scripts/commit-guard.mjs +6 -6
- package/plugins/sp/scripts/daily-summary/daily-summary.mjs +26 -28
- package/plugins/sp/scripts/dogfood-testing/detect-pipeline-driving.mjs +11 -11
- package/plugins/sp/scripts/dogfood-testing/validate-report.mjs +4 -4
- package/plugins/sp/scripts/feature-verification-steps.mjs +15 -4
- package/plugins/sp/scripts/feature-verification-steps.ts +29 -1
- package/plugins/sp/scripts/history-anatomy-cache.mjs +19 -19
- package/plugins/sp/scripts/idea-handoff.mjs +2 -2
- package/plugins/sp/scripts/inline-run-dispatch.mjs +2 -2
- package/plugins/sp/scripts/inline-run-setup.mjs +20 -20
- package/plugins/sp/scripts/persist-out-check.mjs +5 -5
- package/plugins/sp/scripts/pr-reviewing.mjs +13 -13
- package/plugins/sp/scripts/quality-gate.mjs +13715 -13884
- package/plugins/sp/scripts/residual-scan.mjs +58 -27
- package/plugins/sp/scripts/residual-scan.ts +8 -8
- package/plugins/sp/scripts/run-summary.mjs +15 -15
- package/plugins/sp/scripts/script-root.mjs +6 -6
- package/plugins/sp/scripts/session-timeline.mjs +16 -16
- package/plugins/sp/scripts/task-diffstat.mjs +8 -8
- package/plugins/sp/scripts/workflow-step-profile.mjs +12 -12
- package/plugins/sp/scripts/wrapup-drift-probe.mjs +9 -9
- package/plugins/sp/scripts/wrapup-steps.mjs +25 -25
- package/plugins/sp/skills/next-router/SKILL.md +3 -1
- package/plugins/sp/skills/next-router/references/routing-table.md +9 -3
- package/plugins/sp/skills/spur-cli/references/tasks.md +24 -4
- package/plugins/sp/skills/spur-dev/references/cross-cutting.md +8 -1
- package/plugins/sp/skills/spur-dev/references/dev-operations.md +37 -11
- package/plugins/sp/skills/spur-dev/references/execution-batch.md +6 -3
- package/plugins/sp/skills/spur-dev/references/flag-glossary.md +4 -2
- package/plugins/sp/skills/spur-dev/references/inline-pipeline-driver.md +22 -2
- package/schemas/section-matrix.schema.json +3 -2
- package/spur.js +24403 -32459
- package/web/_astro/{BoardApp.5IIl2O-z.js → BoardApp.Niubpe6z.js} +1 -1
- package/web/_astro/{BoardApp.Drnx-KeM.js → BoardApp.hF0RAIrg.js} +112 -112
- package/web/_astro/TaskDetail.DJpapt38.js +1 -0
- package/web/_astro/{arc.j2EVkYVd.js → arc.BgKcK0i8.js} +1 -1
- package/web/_astro/{architectureDiagram-3BPJPVTR.DZWSFqEG.js → architectureDiagram-3BPJPVTR.ChP-Ig0V.js} +1 -1
- package/web/_astro/{blockDiagram-GPEHLZMM.DE6GpXCN.js → blockDiagram-GPEHLZMM.BVaCBoeN.js} +1 -1
- package/web/_astro/{c4Diagram-AAUBKEIU.DoVR1G6B.js → c4Diagram-AAUBKEIU.CHSDpEO5.js} +1 -1
- package/web/_astro/channel.DkpvN2tD.js +1 -0
- package/web/_astro/{chunk-2J33WTMH.Do6-Gbyf.js → chunk-2J33WTMH.MYRcYVRa.js} +1 -1
- package/web/_astro/{chunk-4BX2VUAB.BYV1HGHx.js → chunk-4BX2VUAB.S5j22Zqa.js} +1 -1
- package/web/_astro/{chunk-55IACEB6.CvI1zkrc.js → chunk-55IACEB6.gciRPvmZ.js} +1 -1
- package/web/_astro/{chunk-727SXJPM.DNGSCRlX.js → chunk-727SXJPM.CdqrSQkX.js} +1 -1
- package/web/_astro/{chunk-AQP2D5EJ.DXhhgT5z.js → chunk-AQP2D5EJ.CyokdHT3.js} +1 -1
- package/web/_astro/{chunk-FMBD7UC4.dzkRKP2u.js → chunk-FMBD7UC4.Bg9KJhjW.js} +1 -1
- package/web/_astro/{chunk-ND2GUHAM.DujGLeEf.js → chunk-ND2GUHAM.1gxxI-vD.js} +1 -1
- package/web/_astro/{chunk-QZHKN3VN.BWtIT3ZU.js → chunk-QZHKN3VN.DDEYtCKU.js} +1 -1
- package/web/_astro/{classDiagram-4FO5ZUOK.DyApg0Nn.js → classDiagram-4FO5ZUOK.Ch3zi37T.js} +1 -1
- package/web/_astro/{classDiagram-v2-Q7XG4LA2.DyApg0Nn.js → classDiagram-v2-Q7XG4LA2.Ch3zi37T.js} +1 -1
- package/web/_astro/{cose-bilkent-S5V4N54A.DJQB-u_l.js → cose-bilkent-S5V4N54A.D2q5AINI.js} +1 -1
- package/web/_astro/{cynefin-OW5HDTMX.bi3D_siV.js → cynefin-OW5HDTMX.BA9kC2YT.js} +1 -1
- package/web/_astro/{dagre-BM42HDAG.C-f7TrRg.js → dagre-BM42HDAG.CHO08nRp.js} +1 -1
- package/web/_astro/{diagram-2AECGRRQ.DrPfjHQB.js → diagram-2AECGRRQ.BfFQt0LW.js} +1 -1
- package/web/_astro/{diagram-5GNKFQAL.C9S4WUHO.js → diagram-5GNKFQAL.CHMwMTe4.js} +1 -1
- package/web/_astro/{diagram-KO2AKTUF.Dzzye8QH.js → diagram-KO2AKTUF.BJ-7gK-w.js} +1 -1
- package/web/_astro/{diagram-LMA3HP47.DX-LRiof.js → diagram-LMA3HP47.C5xqcc0t.js} +1 -1
- package/web/_astro/{diagram-OG6HWLK6.Z-kAKwIz.js → diagram-OG6HWLK6.C2pQjfrC.js} +1 -1
- package/web/_astro/{erDiagram-TEJ5UH35.D6dyClSv.js → erDiagram-TEJ5UH35._FoNyxgC.js} +1 -1
- package/web/_astro/{flowDiagram-I6XJVG4X.Cx3q2cxD.js → flowDiagram-I6XJVG4X.B_ENkT2I.js} +1 -1
- package/web/_astro/{ganttDiagram-6RSMTGT7.DU3gH6CT.js → ganttDiagram-6RSMTGT7.B3q8h77C.js} +1 -1
- package/web/_astro/{gitGraphDiagram-PVQCEYII.ISmCnJ87.js → gitGraphDiagram-PVQCEYII.QWZFDboZ.js} +1 -1
- package/web/_astro/index.BFyW13JJ.css +1 -0
- package/web/_astro/{infoDiagram-5YYISTIA.DR6_iNOK.js → infoDiagram-5YYISTIA.Cs6eEc92.js} +1 -1
- package/web/_astro/{ishikawaDiagram-YF4QCWOH.D7wY-ZGA.js → ishikawaDiagram-YF4QCWOH.BU9DJMHA.js} +1 -1
- package/web/_astro/{journeyDiagram-JHISSGLW.DkP9-WK8.js → journeyDiagram-JHISSGLW.D35k6Jpe.js} +1 -1
- package/web/_astro/{kanban-definition-UN3LZRKU.wtgY98M2.js → kanban-definition-UN3LZRKU.DBqcAT4m.js} +1 -1
- package/web/_astro/{linear.CI6djNi7.js → linear.D-LSNK8W.js} +1 -1
- package/web/_astro/{mermaid.core.CuQPxS8b.js → mermaid.core.CSruWVOa.js} +4 -4
- package/web/_astro/{mindmap-definition-RKZ34NQL.5HNIEG7R.js → mindmap-definition-RKZ34NQL.BiFaUsfj.js} +1 -1
- package/web/_astro/{pieDiagram-4H26LBE5.CchhDFjE.js → pieDiagram-4H26LBE5.D1KTKqb9.js} +1 -1
- package/web/_astro/{quadrantDiagram-W4KKPZXB.PYXXJPSJ.js → quadrantDiagram-W4KKPZXB.DBHflsMG.js} +1 -1
- package/web/_astro/{requirementDiagram-4Y6WPE33.cUQuNAKU.js → requirementDiagram-4Y6WPE33.hwX9CNdk.js} +1 -1
- package/web/_astro/{sankeyDiagram-5OEKKPKP.BO7MnRIA.js → sankeyDiagram-5OEKKPKP.DkI8mJiE.js} +1 -1
- package/web/_astro/{sequenceDiagram-3UESZ5HK.D9bElyD6.js → sequenceDiagram-3UESZ5HK.DMz7jBDx.js} +1 -1
- package/web/_astro/{stateDiagram-AJRCARHV.DhGdRz7I.js → stateDiagram-AJRCARHV.B6Ef2xJ1.js} +1 -1
- package/web/_astro/{stateDiagram-v2-BHNVJYJU.5GvLeAoL.js → stateDiagram-v2-BHNVJYJU.CgoaufB9.js} +1 -1
- package/web/_astro/{timeline-definition-PNZ67QCA.LtAT9haM.js → timeline-definition-PNZ67QCA.B3c8h1t-.js} +1 -1
- package/web/_astro/{vennDiagram-CIIHVFJN.DRth1yLA.js → vennDiagram-CIIHVFJN.BdHPAxAb.js} +1 -1
- package/web/_astro/{wardleyDiagram-YWT4CUSO.h9MlZfcr.js → wardleyDiagram-YWT4CUSO.BrJXPPAj.js} +1 -1
- package/web/_astro/{xychartDiagram-2RQKCTM6.DHqy9DYA.js → xychartDiagram-2RQKCTM6.CMH5yFsV.js} +1 -1
- package/web/index.html +2 -2
- package/web/spur_logo.svg +1 -1
- package/web/_astro/TaskDetail.Ci4LNn9S.js +0 -1
- package/web/_astro/channel.DmdDxGsq.js +0 -1
- package/web/_astro/index.Do2lLdgo.css +0 -1
|
@@ -18,10 +18,16 @@
|
|
|
18
18
|
* Always exits 0 after a completed pass; the transition guard reads the status file and the
|
|
19
19
|
* completion boundary validates the receipt (fail-closed). Unsafe ids are refused by the operation.
|
|
20
20
|
*
|
|
21
|
+
* The installed `.mjs` twin may be launched with plain `node` (the `feature-verification` workflow
|
|
22
|
+
* selects `installed -> node`), but the generated inline bundle keeps `bun:sqlite` external by design, so the
|
|
23
|
+
* twin re-enters Bun at the top of `main()` (task 1197). Unlike daily-summary it fails closed when Bun
|
|
24
|
+
* is missing — a verifier that cannot load its bundle cannot run the checks.
|
|
25
|
+
*
|
|
21
26
|
* Node-builtin imports only (ADR-065); the application seams come from the generated inline bundle,
|
|
22
27
|
* never from `packages/app/src/index.ts`, which is not a plugin-script contract surface (0948 R3).
|
|
23
28
|
*/
|
|
24
29
|
|
|
30
|
+
import { spawnSync } from 'node:child_process';
|
|
25
31
|
import { existsSync } from 'node:fs';
|
|
26
32
|
import { fileURLToPath } from 'node:url';
|
|
27
33
|
import { getEnvVar } from '../lib/env';
|
|
@@ -97,6 +103,8 @@ async function verify(
|
|
|
97
103
|
cmdOverride: string,
|
|
98
104
|
spurBin: string,
|
|
99
105
|
mode: ModuleMode,
|
|
106
|
+
confidenceOverride: string,
|
|
107
|
+
ackLowConfidence: boolean,
|
|
100
108
|
): Promise<void> {
|
|
101
109
|
const mod = await loadModule(spurBin, mode);
|
|
102
110
|
const result = await mod.runFeatureVerification({
|
|
@@ -104,11 +112,26 @@ async function verify(
|
|
|
104
112
|
featureId,
|
|
105
113
|
runId,
|
|
106
114
|
cmdOverride,
|
|
115
|
+
// Operator-declared level (empty = derive from the pass) and the acknowledgement of a LOW
|
|
116
|
+
// level. Both ride the receipt, so the completion boundary reads them from the evidence
|
|
117
|
+
// rather than from whatever flags a later transition happens to pass.
|
|
118
|
+
confidenceOverride,
|
|
119
|
+
ackLowConfidence,
|
|
107
120
|
});
|
|
108
121
|
console.log(`feature-verification-steps: ${featureId} ${result.message}`);
|
|
109
122
|
}
|
|
110
123
|
|
|
111
124
|
function main(): void {
|
|
125
|
+
// The portable Node twin has no workspace imports; the generated bundle still uses Spur's Bun
|
|
126
|
+
// runtime (bun:sqlite stays external by design). Re-enter Bun before any app import; fail closed
|
|
127
|
+
// when Bun is missing — the verifier must not report a pass it could not run.
|
|
128
|
+
if (!process.versions.bun) {
|
|
129
|
+
const child = spawnSync('bun', [fileURLToPath(import.meta.url), ...process.argv.slice(2)], {
|
|
130
|
+
stdio: 'inherit',
|
|
131
|
+
});
|
|
132
|
+
if (child.error) console.error(`feature-verification-steps requires Bun on PATH: ${child.error.message}`);
|
|
133
|
+
process.exit(child.status ?? 1);
|
|
134
|
+
}
|
|
112
135
|
const args = process.argv.slice(2);
|
|
113
136
|
const command = args[0];
|
|
114
137
|
const flag = (name: string): string => {
|
|
@@ -116,7 +139,10 @@ function main(): void {
|
|
|
116
139
|
return i >= 0 && i + 1 < args.length ? (args[i + 1] ?? '') : '';
|
|
117
140
|
};
|
|
118
141
|
if (command !== 'verify') {
|
|
119
|
-
console.error(
|
|
142
|
+
console.error(
|
|
143
|
+
'Usage: feature-verification-steps.ts verify --feature-id <id> --run-id <id> [--cmd <command>] ' +
|
|
144
|
+
'[--confidence HIGH|MEDIUM|LOW] [--ack-low-confidence]',
|
|
145
|
+
);
|
|
120
146
|
process.exit(2);
|
|
121
147
|
}
|
|
122
148
|
verify(
|
|
@@ -125,6 +151,8 @@ function main(): void {
|
|
|
125
151
|
flag('--cmd') || getEnvVar('verificationCmd') || '',
|
|
126
152
|
flag('--spur-bin') || getEnvVar('spurBin') || '',
|
|
127
153
|
resolveModuleMode(flag('--module-mode')),
|
|
154
|
+
flag('--confidence') || getEnvVar('confidence') || '',
|
|
155
|
+
args.includes('--ack-low-confidence') || getEnvVar('ackLowConfidence') === 'true',
|
|
128
156
|
)
|
|
129
157
|
.then(() => process.exit(0))
|
|
130
158
|
.catch((err: unknown) => {
|
|
@@ -908,24 +908,24 @@ ${reasons}`, stderr: "" };
|
|
|
908
908
|
process.exitCode = exitCode;
|
|
909
909
|
}
|
|
910
910
|
export {
|
|
911
|
-
|
|
912
|
-
stampReport,
|
|
913
|
-
semanticArtifactDigest,
|
|
914
|
-
runCacheCli,
|
|
915
|
-
resolvePaths,
|
|
916
|
-
renderProvenanceFrontmatter,
|
|
917
|
-
refreshReport,
|
|
918
|
-
publishAtomically,
|
|
919
|
-
probe,
|
|
920
|
-
porcelainPaths,
|
|
921
|
-
parseProvenance,
|
|
922
|
-
logicDigest,
|
|
923
|
-
importedSnapshotAsOf,
|
|
924
|
-
diffPorcelain,
|
|
925
|
-
decideCache,
|
|
926
|
-
checkReportStructure,
|
|
927
|
-
buildProvenance,
|
|
928
|
-
bannerLine,
|
|
911
|
+
FINDING_FIELDS,
|
|
929
912
|
REPORT_SECTIONS,
|
|
930
|
-
|
|
913
|
+
bannerLine,
|
|
914
|
+
buildProvenance,
|
|
915
|
+
checkReportStructure,
|
|
916
|
+
decideCache,
|
|
917
|
+
diffPorcelain,
|
|
918
|
+
importedSnapshotAsOf,
|
|
919
|
+
logicDigest,
|
|
920
|
+
parseProvenance,
|
|
921
|
+
porcelainPaths,
|
|
922
|
+
probe,
|
|
923
|
+
publishAtomically,
|
|
924
|
+
refreshReport,
|
|
925
|
+
renderProvenanceFrontmatter,
|
|
926
|
+
resolvePaths,
|
|
927
|
+
runCacheCli,
|
|
928
|
+
semanticArtifactDigest,
|
|
929
|
+
stampReport,
|
|
930
|
+
validateSelector
|
|
931
931
|
};
|
|
@@ -34,8 +34,8 @@ function resolveAppEntry(spurBin) {
|
|
|
34
34
|
}
|
|
35
35
|
return { entry, portable: true };
|
|
36
36
|
}
|
|
37
|
-
async function loadInlineApp(spurBin,
|
|
38
|
-
const { entry, portable } =
|
|
37
|
+
async function loadInlineApp(spurBin, resolveAppEntry, required) {
|
|
38
|
+
const { entry, portable } = resolveAppEntry(spurBin);
|
|
39
39
|
const app = await import(entry);
|
|
40
40
|
const missing = portable ? required.filter((name) => typeof app[name] !== "function") : [];
|
|
41
41
|
if (missing.length > 0) {
|
|
@@ -34,8 +34,8 @@ function resolveAppEntry(spurBin) {
|
|
|
34
34
|
}
|
|
35
35
|
return { entry, portable: true };
|
|
36
36
|
}
|
|
37
|
-
async function loadInlineApp(spurBin,
|
|
38
|
-
const { entry, portable } =
|
|
37
|
+
async function loadInlineApp(spurBin, resolveAppEntry, required) {
|
|
38
|
+
const { entry, portable } = resolveAppEntry(spurBin);
|
|
39
39
|
const app = await import(entry);
|
|
40
40
|
const missing = portable ? required.filter((name) => typeof app[name] !== "function") : [];
|
|
41
41
|
if (missing.length > 0) {
|
|
@@ -149,21 +149,21 @@ function accumulate(acc, row, ts) {
|
|
|
149
149
|
if (row.type === "message") {
|
|
150
150
|
const m = row.message;
|
|
151
151
|
if (m?.role === "assistant") {
|
|
152
|
-
const
|
|
153
|
-
for (const b of
|
|
152
|
+
const blocks = Array.isArray(m.content) ? m.content : [];
|
|
153
|
+
for (const b of blocks) {
|
|
154
154
|
if (b.type === "toolCall" && b.id) {
|
|
155
155
|
acc.toolIds.add(b.id);
|
|
156
156
|
if (b.name && OPERATOR_TOOLS.has(b.name))
|
|
157
157
|
acc.asks.set(b.id, ts);
|
|
158
158
|
}
|
|
159
159
|
}
|
|
160
|
-
const
|
|
161
|
-
if (
|
|
160
|
+
const u = m.usage;
|
|
161
|
+
if (u && row.id)
|
|
162
162
|
acc.messages.set(row.id, {
|
|
163
|
-
input:
|
|
164
|
-
cacheCreate:
|
|
165
|
-
cacheRead:
|
|
166
|
-
output:
|
|
163
|
+
input: u.input ?? 0,
|
|
164
|
+
cacheCreate: u.cacheWrite ?? 0,
|
|
165
|
+
cacheRead: u.cacheRead ?? 0,
|
|
166
|
+
output: u.output ?? 0
|
|
167
167
|
});
|
|
168
168
|
} else if (m?.role === "toolResult" && m.toolCallId && acc.asks.has(m.toolCallId)) {
|
|
169
169
|
acc.askMs += ts - (acc.asks.get(m.toolCallId) ?? ts);
|
|
@@ -658,8 +658,8 @@ async function main() {
|
|
|
658
658
|
if (fingerprint) {
|
|
659
659
|
if (runId !== "" || file !== "" || taskFiles.length !== 1 || (taskFiles[0] ?? "").trim() === "")
|
|
660
660
|
usage();
|
|
661
|
-
const { app
|
|
662
|
-
process.exit(await
|
|
661
|
+
const { app } = await loadInlineApp(spurBin, resolveAppEntry, ["runInlineRunFingerprint"]);
|
|
662
|
+
process.exit(await app.runInlineRunFingerprint({ taskFile: taskFiles[0] ?? "", featureFile }));
|
|
663
663
|
}
|
|
664
664
|
if (decide) {
|
|
665
665
|
if (action || close || fingerprint || file !== "" || taskFiles.length > 0)
|
|
@@ -669,14 +669,14 @@ async function main() {
|
|
|
669
669
|
if (!SAFE_RUN_ID_RE.test(runId))
|
|
670
670
|
refuseUnsafeRunId(runId);
|
|
671
671
|
try {
|
|
672
|
-
const { app
|
|
673
|
-
const { app: lib } = await loadInlineApp(spurBin, () => ({ entry: fileURLToPath2(new URL("../lib/inline-run.generated.mjs", import.meta.url)), portable
|
|
674
|
-
const loadOpts =
|
|
672
|
+
const { app, portable } = await loadInlineApp(spurBin, resolveAppEntry, ["runInlineRunDecide"]);
|
|
673
|
+
const { app: lib } = await loadInlineApp(spurBin, () => ({ entry: fileURLToPath2(new URL("../lib/inline-run.generated.mjs", import.meta.url)), portable }), ["resolveDecideDecisionMakerEnabled", "loadSpurConfig"]);
|
|
674
|
+
const loadOpts = portable ? { embeddedSchemas: lib.EMBEDDED_SPUR_SCHEMAS } : undefined;
|
|
675
675
|
const [enabled, spurConfig] = await Promise.all([
|
|
676
676
|
lib.resolveDecideDecisionMakerEnabled(process.cwd(), loadOpts),
|
|
677
677
|
lib.loadSpurConfig(process.cwd(), loadOpts)
|
|
678
678
|
]);
|
|
679
|
-
process.exit(await
|
|
679
|
+
process.exit(await app.runInlineRunDecide({ runId, node, optionsFile: optionsJson, enabled, spurConfig }));
|
|
680
680
|
} catch (error) {
|
|
681
681
|
const message = error instanceof Error ? error.message : String(error);
|
|
682
682
|
process.stdout.write(`${JSON.stringify({ ok: false, runId, error: message })}
|
|
@@ -689,15 +689,15 @@ async function main() {
|
|
|
689
689
|
usage();
|
|
690
690
|
if (from.trim() === "" || taskFiles.some((taskFile) => taskFile.trim() === ""))
|
|
691
691
|
usage();
|
|
692
|
-
const { app
|
|
693
|
-
process.exit(await
|
|
692
|
+
const { app } = await loadInlineApp(spurBin, resolveAppEntry, ["runInlineRunPersistOut"]);
|
|
693
|
+
process.exit(await app.runInlineRunPersistOut({ from, taskFiles }));
|
|
694
694
|
}
|
|
695
695
|
if (nodeEnter || actionsFile !== "" || action || close) {
|
|
696
696
|
if (!SAFE_RUN_ID_RE.test(runId))
|
|
697
697
|
refuseUnsafeRunId(runId);
|
|
698
698
|
const mode = nodeEnter ? "node-enter" : actionsFile !== "" ? "actions-file" : close ? "close" : "action";
|
|
699
|
-
const { app
|
|
700
|
-
const code = await
|
|
699
|
+
const { app } = await loadInlineApp(spurBin, resolveAppEntry, ["runInlineRunTraceMode"]);
|
|
700
|
+
const code = await app.runInlineRunTraceMode({
|
|
701
701
|
mode,
|
|
702
702
|
runId,
|
|
703
703
|
node,
|
|
@@ -204,10 +204,10 @@ persist-out-check: --from must be an existing worktree directory
|
|
|
204
204
|
process.exit(main(process.argv.slice(2)));
|
|
205
205
|
}
|
|
206
206
|
export {
|
|
207
|
-
|
|
208
|
-
persistOutCheckUsage,
|
|
209
|
-
main,
|
|
210
|
-
listObligations,
|
|
207
|
+
compareTrees,
|
|
211
208
|
defaultInvokeRoot,
|
|
212
|
-
|
|
209
|
+
listObligations,
|
|
210
|
+
main,
|
|
211
|
+
persistOutCheckUsage,
|
|
212
|
+
wbsOfTaskFile
|
|
213
213
|
};
|
|
@@ -695,18 +695,18 @@ function main(argv) {
|
|
|
695
695
|
process.exit(main(process.argv.slice(2)));
|
|
696
696
|
}
|
|
697
697
|
export {
|
|
698
|
-
|
|
699
|
-
setCommandRunner,
|
|
700
|
-
scanHygiene,
|
|
701
|
-
renderFindings,
|
|
702
|
-
parseArgs,
|
|
703
|
-
normalizeFindings,
|
|
704
|
-
main,
|
|
705
|
-
isHeadReviewed,
|
|
706
|
-
isExplicitCleanReview,
|
|
707
|
-
isCodexAuthor,
|
|
708
|
-
hasCurrentCleanReview,
|
|
709
|
-
hasCodeReviewRules,
|
|
698
|
+
buildRequestBody,
|
|
710
699
|
extractSeverity,
|
|
711
|
-
|
|
700
|
+
hasCodeReviewRules,
|
|
701
|
+
hasCurrentCleanReview,
|
|
702
|
+
isCodexAuthor,
|
|
703
|
+
isExplicitCleanReview,
|
|
704
|
+
isHeadReviewed,
|
|
705
|
+
main,
|
|
706
|
+
normalizeFindings,
|
|
707
|
+
parseArgs,
|
|
708
|
+
renderFindings,
|
|
709
|
+
scanHygiene,
|
|
710
|
+
setCommandRunner,
|
|
711
|
+
spawnRunner
|
|
712
712
|
};
|