looply-cli 0.5.24 → 0.5.26
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/.src-hash +1 -1
- package/dist/branch-delivery.d.ts +8 -8
- package/dist/branch-delivery.d.ts.map +1 -1
- package/dist/branch-delivery.js +111 -5
- package/dist/branch-delivery.js.map +1 -1
- package/dist/config.js +1 -1
- package/dist/config.js.map +1 -1
- package/dist/partial-asker.d.ts +14 -5
- package/dist/partial-asker.d.ts.map +1 -1
- package/dist/partial-asker.js +22 -11
- package/dist/partial-asker.js.map +1 -1
- package/dist/partial-keep.d.ts +60 -0
- package/dist/partial-keep.d.ts.map +1 -0
- package/dist/partial-keep.js +45 -0
- package/dist/partial-keep.js.map +1 -0
- package/dist/prover.d.ts +15 -2
- package/dist/prover.d.ts.map +1 -1
- package/dist/prover.js +18 -0
- package/dist/prover.js.map +1 -1
- package/dist/pursuit-ending.d.ts.map +1 -1
- package/dist/pursuit-ending.js +4 -2
- package/dist/pursuit-ending.js.map +1 -1
- package/dist/queue-summary.d.ts +7 -0
- package/dist/queue-summary.d.ts.map +1 -1
- package/dist/queue-summary.js +10 -0
- package/dist/queue-summary.js.map +1 -1
- package/dist/round-runner.d.ts +18 -2
- package/dist/round-runner.d.ts.map +1 -1
- package/dist/round-runner.js +45 -3
- package/dist/round-runner.js.map +1 -1
- package/dist/run-cmd.d.ts.map +1 -1
- package/dist/run-cmd.js +21 -13
- package/dist/run-cmd.js.map +1 -1
- package/dist/ticket-words.d.ts +54 -0
- package/dist/ticket-words.d.ts.map +1 -0
- package/dist/ticket-words.js +203 -0
- package/dist/ticket-words.js.map +1 -0
- package/package.json +2 -2
package/dist/partial-asker.js
CHANGED
|
@@ -12,9 +12,11 @@ const core_1 = require("@looply/core");
|
|
|
12
12
|
* said what it was waiting for: *"Making it really ask is a change to the round
|
|
13
13
|
* protocol and the owner's decision."* `OWNER_CHARTER.md` §6.C is that decision.
|
|
14
14
|
*
|
|
15
|
-
* ⚠️ AN UNPAIRED MACHINE
|
|
16
|
-
*
|
|
17
|
-
*
|
|
15
|
+
* ⚠️ AN UNPAIRED MACHINE ASKS NOBODY. No project, no server, no question: it
|
|
16
|
+
* answers `discard` marked `nobodyAnswered`, and since TAB-B-61 (2026-10-17)
|
|
17
|
+
* the round then lets its checks decide — kept when every check that applied
|
|
18
|
+
* ran and passed, discarded otherwise (`partial-keep.ts`). Everything below is
|
|
19
|
+
* what happens INSTEAD of that, and only when there is somebody to ask.
|
|
18
20
|
*
|
|
19
21
|
* ─────────────────────────────────────────────────────────────────────────────
|
|
20
22
|
* 🔴 EVERY WAY OUT OF HERE IS `discard` EXCEPT A RECORDED `keep`.
|
|
@@ -34,6 +36,8 @@ const core_1 = require("@looply/core");
|
|
|
34
36
|
exports.PARTIAL_ASK_GRACE_MS = 2 * 60_000;
|
|
35
37
|
/** How often the answer is looked for. Cheap: one bounded read of one row. */
|
|
36
38
|
exports.PARTIAL_ASK_POLL_MS = 15_000;
|
|
39
|
+
/** Nobody answered: the safe half, marked so the round can let the checks decide. */
|
|
40
|
+
const nobody = { answer: 'discard', nobodyAnswered: true };
|
|
37
41
|
/**
|
|
38
42
|
* The `resolvePartial` a run installs.
|
|
39
43
|
*
|
|
@@ -41,6 +45,12 @@ exports.PARTIAL_ASK_POLL_MS = 15_000;
|
|
|
41
45
|
* this item, and says `keep`. Everything else — an unpaired machine, a server
|
|
42
46
|
* that refused, a question nobody answered, an answer that does not belong to
|
|
43
47
|
* this round — is `discard`, with a line saying which.
|
|
48
|
+
*
|
|
49
|
+
* ⚠️ AND IT SAYS WHETHER A PERSON ANSWERED (TAB-B-61). An unpaired machine, a
|
|
50
|
+
* question that could not be filed, or one the deadline answered as `system`
|
|
51
|
+
* is `nobodyAnswered: true`: the round may then keep the work when its checks
|
|
52
|
+
* vouch for it (`partial-keep.ts`). This file still never says `keep` itself
|
|
53
|
+
* on anything but a recorded answer; the round decides from the checks.
|
|
44
54
|
*/
|
|
45
55
|
function makePartialAsker(deps) {
|
|
46
56
|
return async (item, proof) => {
|
|
@@ -49,8 +59,8 @@ function makePartialAsker(deps) {
|
|
|
49
59
|
if (server === null) {
|
|
50
60
|
// Word for word what a run has said since M6-20, because nothing about
|
|
51
61
|
// this case has changed.
|
|
52
|
-
deps.log('round: nobody to ask from a terminal run, so
|
|
53
|
-
return
|
|
62
|
+
deps.log('round: nobody to ask from a terminal run, so the checks decide: kept when every check that applied ran and passed, discarded otherwise. Pair a device to be asked.');
|
|
63
|
+
return nobody;
|
|
54
64
|
}
|
|
55
65
|
const askedAtMs = deps.now();
|
|
56
66
|
const body = (0, core_1.partialQuestion)({
|
|
@@ -72,8 +82,8 @@ function makePartialAsker(deps) {
|
|
|
72
82
|
* round takes the safe half and says why — a run that treated an
|
|
73
83
|
* unreachable server as permission would keep work nothing judged.
|
|
74
84
|
*/
|
|
75
|
-
deps.log(`round: could not ask — ${e.message}.
|
|
76
|
-
return
|
|
85
|
+
deps.log(`round: could not ask — ${e.message}. Nobody answered, so the checks decide, as with nobody to ask.`);
|
|
86
|
+
return nobody;
|
|
77
87
|
}
|
|
78
88
|
deps.log(`round: asked ${questionId} — keep or discard "${item.title}"? Answer on your phone before ${body.deadline}.`);
|
|
79
89
|
const ctx = { questionId, runId: deps.runId, itemId: item.id };
|
|
@@ -92,7 +102,8 @@ function makePartialAsker(deps) {
|
|
|
92
102
|
const r = (0, core_1.resolutionFrom)(view, ctx);
|
|
93
103
|
if (r.kind === 'answered') {
|
|
94
104
|
deps.log(`round: ${r.by ?? 'somebody'} answered ${r.answer}.`);
|
|
95
|
-
|
|
105
|
+
// `system` is the server's sweep answering an overdue question with its default: nobody did.
|
|
106
|
+
return { answer: r.answer, nobodyAnswered: r.by === 'system' };
|
|
96
107
|
}
|
|
97
108
|
if (r.kind === 'unusable') {
|
|
98
109
|
/**
|
|
@@ -103,12 +114,12 @@ function makePartialAsker(deps) {
|
|
|
103
114
|
* attach to this round.
|
|
104
115
|
*/
|
|
105
116
|
deps.log(`round: the answer to ${questionId} cannot be used — ${r.because}. Discarding.`);
|
|
106
|
-
return 'discard';
|
|
117
|
+
return { answer: 'discard', nobodyAnswered: false };
|
|
107
118
|
}
|
|
108
119
|
}
|
|
109
120
|
if (deps.now() >= until) {
|
|
110
|
-
deps.log(`round: ${questionId} is still unanswered and its deadline has passed —
|
|
111
|
-
return
|
|
121
|
+
deps.log(`round: ${questionId} is still unanswered and its deadline has passed — nobody answered, so the checks decide (discard otherwise, its default).`);
|
|
122
|
+
return nobody;
|
|
112
123
|
}
|
|
113
124
|
await deps.sleep(deps.pollMs);
|
|
114
125
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"partial-asker.js","sourceRoot":"","sources":["../src/partial-asker.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"partial-asker.js","sourceRoot":"","sources":["../src/partial-asker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import type { GateStepResult, PartialAnswer } from '@looply/core';
|
|
2
|
+
import type { StepSpec } from './gate';
|
|
3
|
+
/**
|
|
4
|
+
* WHAT A PARTIAL PROOF IS WORTH WHEN NOBODY CAN BE ASKED ABOUT IT.
|
|
5
|
+
*
|
|
6
|
+
* `proof.on_partial: ask` on a machine with no phone (AutoRyn-managed, unpaired)
|
|
7
|
+
* had one answer: `discard`. TAB-B-61 (2026-10-17) lost every round of four
|
|
8
|
+
* Starts that way. Each time the gate had run `admin:vitest` on the change and
|
|
9
|
+
* it PASSED, and each time the second agent said "partial" only because
|
|
10
|
+
* "nothing visible shows the ticket's vitest command was run or passed" — it
|
|
11
|
+
* had not been shown the gate's results. The work was right; what the checker
|
|
12
|
+
* doubted was something the run already knew.
|
|
13
|
+
*
|
|
14
|
+
* So two things change, and both are here so they can be tested on their own:
|
|
15
|
+
*
|
|
16
|
+
* - the prover is SHOWN the round's gate results (`proverGateSteps`): each
|
|
17
|
+
* executed step's name, the command it ran, and passed / failed / skipped.
|
|
18
|
+
* That is what "the tests were run" means.
|
|
19
|
+
* - with nobody to ask, a partial proof is KEPT when the checks vouch for it
|
|
20
|
+
* (`checksVouch`): every required step that applied ran and passed, nothing
|
|
21
|
+
* that ran failed, and at least one step actually ran. Otherwise it is
|
|
22
|
+
* discarded, as before.
|
|
23
|
+
*
|
|
24
|
+
* ⚠️ A PERSON'S ANSWER IS NEVER OVERRULED. A paired machine asks exactly as it
|
|
25
|
+
* did, and a `discard` a person gave stays a discard. Only an answer nobody
|
|
26
|
+
* gave — no server, a server that could not be asked, a deadline the server's
|
|
27
|
+
* sweep answered as `system` — is replaced by what the checks say.
|
|
28
|
+
*/
|
|
29
|
+
/** One gate step as the prover is shown it. */
|
|
30
|
+
export interface ProverGateStep {
|
|
31
|
+
readonly name: string;
|
|
32
|
+
/** The command the gate ran (or would have run, for a skipped step). */
|
|
33
|
+
readonly command: string;
|
|
34
|
+
readonly outcome: 'passed' | 'failed' | 'skipped';
|
|
35
|
+
}
|
|
36
|
+
/** The round's gate results, in the order the gate ran them, with the configured command for each. */
|
|
37
|
+
export declare function proverGateSteps(steps: readonly GateStepResult[], specs: readonly StepSpec[]): ProverGateStep[];
|
|
38
|
+
/**
|
|
39
|
+
* Do the checks alone vouch for this change? Every required step that applied ran and passed,
|
|
40
|
+
* no step that ran failed, and at least one step really ran. A required step that was skipped
|
|
41
|
+
* or never ran is not a pass (`mayCommit` refuses it too); a gate where nothing ran proves nothing.
|
|
42
|
+
*/
|
|
43
|
+
export declare function checksVouch(steps: readonly GateStepResult[], required: readonly string[]): boolean;
|
|
44
|
+
/**
|
|
45
|
+
* What an asker answers: the answer, and whether a PERSON gave it.
|
|
46
|
+
*
|
|
47
|
+
* `nobodyAnswered` is true when there was nobody to ask (unpaired), the question could not be
|
|
48
|
+
* filed, or the deadline passed and the server's sweep answered it as `system`. A bare
|
|
49
|
+
* `PartialAnswer` from an older asker is read as a person's answer, so nothing is overruled.
|
|
50
|
+
*/
|
|
51
|
+
export interface PartialResolution {
|
|
52
|
+
readonly answer: PartialAnswer;
|
|
53
|
+
readonly nobodyAnswered: boolean;
|
|
54
|
+
}
|
|
55
|
+
export declare function asResolution(r: PartialAnswer | PartialResolution): PartialResolution;
|
|
56
|
+
/** Said on the run's feed and on the item when a partial proof is kept on the checks alone. */
|
|
57
|
+
export declare const PARTIAL_KEPT_NOTE = "kept: the checks passed, and the second agent only doubted what it could not see";
|
|
58
|
+
/** The feed's sentence: which work, which checks, and what the second agent doubted. */
|
|
59
|
+
export declare function partialKeptText(itemTitle: string, reason: string, steps: readonly GateStepResult[]): string;
|
|
60
|
+
//# sourceMappingURL=partial-keep.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"partial-keep.d.ts","sourceRoot":"","sources":["../src/partial-keep.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAEvC;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,+CAA+C;AAC/C,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,wEAAwE;IACxE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;CACnD;AAED,sGAAsG;AACtG,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,cAAc,EAAE,EAAE,KAAK,EAAE,SAAS,QAAQ,EAAE,GAAG,cAAc,EAAE,CAM9G;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,SAAS,cAAc,EAAE,EAAE,QAAQ,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CASlG;AAED;;;;;;GAMG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;CAClC;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,aAAa,GAAG,iBAAiB,GAAG,iBAAiB,CAEpF;AAED,+FAA+F;AAC/F,eAAO,MAAM,iBAAiB,qFAAqF,CAAC;AAEpH,wFAAwF;AACxF,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,cAAc,EAAE,GAAG,MAAM,CAM3G"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PARTIAL_KEPT_NOTE = void 0;
|
|
4
|
+
exports.proverGateSteps = proverGateSteps;
|
|
5
|
+
exports.checksVouch = checksVouch;
|
|
6
|
+
exports.asResolution = asResolution;
|
|
7
|
+
exports.partialKeptText = partialKeptText;
|
|
8
|
+
/** The round's gate results, in the order the gate ran them, with the configured command for each. */
|
|
9
|
+
function proverGateSteps(steps, specs) {
|
|
10
|
+
return steps.map((s) => ({
|
|
11
|
+
name: s.step,
|
|
12
|
+
command: specs.find((spec) => spec.name === s.step)?.run ?? '(command not recorded)',
|
|
13
|
+
outcome: s.skipped === true ? 'skipped' : s.ok ? 'passed' : 'failed',
|
|
14
|
+
}));
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Do the checks alone vouch for this change? Every required step that applied ran and passed,
|
|
18
|
+
* no step that ran failed, and at least one step really ran. A required step that was skipped
|
|
19
|
+
* or never ran is not a pass (`mayCommit` refuses it too); a gate where nothing ran proves nothing.
|
|
20
|
+
*/
|
|
21
|
+
function checksVouch(steps, required) {
|
|
22
|
+
const ran = steps.filter((s) => s.skipped !== true);
|
|
23
|
+
if (ran.length === 0)
|
|
24
|
+
return false;
|
|
25
|
+
if (ran.some((s) => !s.ok))
|
|
26
|
+
return false;
|
|
27
|
+
for (const name of required) {
|
|
28
|
+
const step = steps.find((s) => s.step === name);
|
|
29
|
+
if (step === undefined || step.skipped === true || !step.ok)
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
return true;
|
|
33
|
+
}
|
|
34
|
+
function asResolution(r) {
|
|
35
|
+
return typeof r === 'string' ? { answer: r, nobodyAnswered: false } : r;
|
|
36
|
+
}
|
|
37
|
+
/** Said on the run's feed and on the item when a partial proof is kept on the checks alone. */
|
|
38
|
+
exports.PARTIAL_KEPT_NOTE = 'kept: the checks passed, and the second agent only doubted what it could not see';
|
|
39
|
+
/** The feed's sentence: which work, which checks, and what the second agent doubted. */
|
|
40
|
+
function partialKeptText(itemTitle, reason, steps) {
|
|
41
|
+
const passed = steps.filter((s) => s.skipped !== true && s.ok).map((s) => s.step);
|
|
42
|
+
return (`${exports.PARTIAL_KEPT_NOTE} — "${itemTitle}": ${passed.join(', ')} passed, nobody could be asked, ` +
|
|
43
|
+
`and the second agent's doubt was: ${reason}`);
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=partial-keep.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"partial-keep.js","sourceRoot":"","sources":["../src/partial-keep.ts"],"names":[],"mappings":";;;AAuCA,0CAMC;AAOD,kCASC;AAcD,oCAEC;AAMD,0CAMC;AAnDD,sGAAsG;AACtG,SAAgB,eAAe,CAAC,KAAgC,EAAE,KAA0B;IAC1F,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACvB,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,wBAAwB;QACpF,OAAO,EAAE,CAAC,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ;KACrE,CAAC,CAAC,CAAC;AACN,CAAC;AAED;;;;GAIG;AACH,SAAgB,WAAW,CAAC,KAAgC,EAAE,QAA2B;IACvF,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC;IACpD,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACnC,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAAE,OAAO,KAAK,CAAC;IACzC,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;QAChD,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE;YAAE,OAAO,KAAK,CAAC;IAC5E,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAcD,SAAgB,YAAY,CAAC,CAAoC;IAC/D,OAAO,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1E,CAAC;AAED,+FAA+F;AAClF,QAAA,iBAAiB,GAAG,kFAAkF,CAAC;AAEpH,wFAAwF;AACxF,SAAgB,eAAe,CAAC,SAAiB,EAAE,MAAc,EAAE,KAAgC;IACjG,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAClF,OAAO,CACL,GAAG,yBAAiB,OAAO,SAAS,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,kCAAkC;QAC7F,qCAAqC,MAAM,EAAE,CAC9C,CAAC;AACJ,CAAC"}
|
package/dist/prover.d.ts
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import type { Item, ProofVerdict } from '@looply/core';
|
|
2
2
|
import { type ImplementerResult } from './agent-driver';
|
|
3
3
|
import type { CommandResult } from './gate';
|
|
4
|
+
import type { ProverGateStep } from './partial-keep';
|
|
4
5
|
import type { ProofOutcome } from './round-runner';
|
|
5
6
|
/**
|
|
6
7
|
* The prover invocation (DESIGN §2.2, Key 2): build the read-only prompt from
|
|
7
|
-
*
|
|
8
|
-
* the prover agent over it.
|
|
8
|
+
* the item title, its evidence, the diff, and the gate results the run itself
|
|
9
|
+
* measured (never the implementer's account) — and run the prover agent over it.
|
|
9
10
|
*
|
|
10
11
|
* The context deliberately carries the full implementer result even though the
|
|
11
12
|
* prompt uses none of it. The round runner holds that result, and the natural
|
|
@@ -22,6 +23,13 @@ export interface ProverContext {
|
|
|
22
23
|
diff: string;
|
|
23
24
|
/** Held so the exclusion is enforced (and tested) here, never used in the prompt. */
|
|
24
25
|
implementer: ImplementerResult;
|
|
26
|
+
/**
|
|
27
|
+
* This round's gate results, as the RUN measured them: each step's name, the command it ran,
|
|
28
|
+
* and passed / failed / skipped. Not the implementer's story — the machine ran these. Without
|
|
29
|
+
* them the prover said "partial" on TAB-B-61 four times because "nothing shows the ticket's
|
|
30
|
+
* vitest command was run or passed", when the gate had run it and it had passed.
|
|
31
|
+
*/
|
|
32
|
+
gate?: readonly ProverGateStep[];
|
|
25
33
|
}
|
|
26
34
|
/**
|
|
27
35
|
* Runs the prover agent over a finished prompt. The prompt travels as data,
|
|
@@ -77,4 +85,9 @@ export declare function extractProverVerdict(transcript: string): ProverVerdictE
|
|
|
77
85
|
* The exit code is recorded upstream but decides nothing here, same as case 3.
|
|
78
86
|
*/
|
|
79
87
|
export declare function toProofOutcome(run: ProverRunResult): ProofOutcome;
|
|
88
|
+
/**
|
|
89
|
+
* The gate's results as the prover reads them. A step listed as passed WAS run on this diff and
|
|
90
|
+
* passed; the prover is told not to doubt that, and to judge the code it can read.
|
|
91
|
+
*/
|
|
92
|
+
export declare function renderGate(gate: readonly ProverGateStep[] | undefined): string[];
|
|
80
93
|
//# sourceMappingURL=prover.d.ts.map
|
package/dist/prover.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prover.d.ts","sourceRoot":"","sources":["../src/prover.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAY,IAAI,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjE,OAAO,EAAkB,KAAK,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACxE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAC5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEnD;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,GAAG,UAAU,CAAC,CAAC;IACvC,4EAA4E;IAC5E,IAAI,EAAE,MAAM,CAAC;IACb,qFAAqF;IACrF,WAAW,EAAE,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"prover.d.ts","sourceRoot":"","sources":["../src/prover.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAY,IAAI,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjE,OAAO,EAAkB,KAAK,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACxE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAC5C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEnD;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,GAAG,UAAU,CAAC,CAAC;IACvC,4EAA4E;IAC5E,IAAI,EAAE,MAAM,CAAC;IACb,qFAAqF;IACrF,WAAW,EAAE,iBAAiB,CAAC;IAC/B;;;;;OAKG;IACH,IAAI,CAAC,EAAE,SAAS,cAAc,EAAE,CAAC;CAClC;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,aAAa,CAAC,CAAC;AAEzF,MAAM,WAAW,eAAe;IAC9B,2EAA2E;IAC3E,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,2EAA2E;IAC3E,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,wBAAsB,SAAS,CAC7B,MAAM,EAAE,YAAY,EACpB,GAAG,EAAE,aAAa,EAClB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,eAAe,CAAC,CAI1B;AAYD,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,aAAa,GAAG,MAAM,CAwB5D;AAED,yDAAyD;AACzD,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,OAAO,CAAC;CACf;AAED,6DAA6D;AAC7D,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,YAAY,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,oBAAoB,GAC5B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,aAAa,CAAA;CAAE,GACpC;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAElC;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,oBAAoB,CAU7E;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,eAAe,GAAG,YAAY,CAUjE;AAsDD;;;GAGG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,SAAS,cAAc,EAAE,GAAG,SAAS,GAAG,MAAM,EAAE,CAUhF"}
|
package/dist/prover.js
CHANGED
|
@@ -4,6 +4,7 @@ exports.runProver = runProver;
|
|
|
4
4
|
exports.buildProverPrompt = buildProverPrompt;
|
|
5
5
|
exports.extractProverVerdict = extractProverVerdict;
|
|
6
6
|
exports.toProofOutcome = toProofOutcome;
|
|
7
|
+
exports.renderGate = renderGate;
|
|
7
8
|
const agent_driver_1 = require("./agent-driver");
|
|
8
9
|
async function runProver(invoke, ctx, timeoutMs) {
|
|
9
10
|
const prompt = buildProverPrompt(ctx);
|
|
@@ -30,6 +31,7 @@ function buildProverPrompt(ctx) {
|
|
|
30
31
|
'',
|
|
31
32
|
renderEvidence(ctx.item.evidence),
|
|
32
33
|
'',
|
|
34
|
+
...renderGate(ctx.gate),
|
|
33
35
|
'--- BEGIN DIFF ---',
|
|
34
36
|
ctx.diff,
|
|
35
37
|
'--- END DIFF ---',
|
|
@@ -125,6 +127,22 @@ function parseChecks(v) {
|
|
|
125
127
|
}
|
|
126
128
|
return out;
|
|
127
129
|
}
|
|
130
|
+
/**
|
|
131
|
+
* The gate's results as the prover reads them. A step listed as passed WAS run on this diff and
|
|
132
|
+
* passed; the prover is told not to doubt that, and to judge the code it can read.
|
|
133
|
+
*/
|
|
134
|
+
function renderGate(gate) {
|
|
135
|
+
if (gate === undefined || gate.length === 0)
|
|
136
|
+
return [];
|
|
137
|
+
return [
|
|
138
|
+
'Checks the run itself executed on this diff (measured by the machine, not reported by the implementer):',
|
|
139
|
+
...gate.map((g) => `- ${g.name}: \`${g.command}\` — ${g.outcome}`),
|
|
140
|
+
'A check listed as passed was run on exactly this diff and passed. Do not call the item partial only',
|
|
141
|
+
'because you cannot see a test being run: these results are that evidence. A skipped check did not',
|
|
142
|
+
'apply to the files changed.',
|
|
143
|
+
'',
|
|
144
|
+
];
|
|
145
|
+
}
|
|
128
146
|
function renderEvidence(evidence) {
|
|
129
147
|
if (evidence.length === 0)
|
|
130
148
|
return 'Evidence: none recorded for this item.';
|
package/dist/prover.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prover.js","sourceRoot":"","sources":["../src/prover.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"prover.js","sourceRoot":"","sources":["../src/prover.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pursuit-ending.d.ts","sourceRoot":"","sources":["../src/pursuit-ending.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,KAAK,iBAAiB,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"pursuit-ending.d.ts","sourceRoot":"","sources":["../src/pursuit-ending.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,KAAK,iBAAiB,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AAGlG;;;;;;;;;;;;;;;;;;GAkBG;AAEH,sEAAsE;AACtE,eAAO,MAAM,kBAAkB,sCAAsC,CAAC;AACtE,6EAA6E;AAC7E,eAAO,MAAM,oBAAoB,oCAAoC,CAAC;AAEtE,4EAA4E;AAC5E,MAAM,WAAW,aAAa;IAC5B,qCAAqC;IACrC,KAAK,EAAE,iBAAiB,CAAC;IACzB,kDAAkD;IAClD,GAAG,EAAE,cAAc,CAAC;IACpB,qCAAqC;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,2DAA2D;IAC3D,OAAO,EAAE,MAAM,CAAC;IAChB,yCAAyC;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qEAAqE;IACrE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,wDAAwD;IACxD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yEAAyE;IACzE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,kEAAkE;IAClE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sDAAsD;IACtD,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,cAAc,CAAC;IACrB,kFAAkF;IAClF,OAAO,EAAE,MAAM,CAAC;CACjB;AA+BD,iDAAiD;AACjD,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,aAAa,GAAG,aAAa,CAuFvE"}
|
package/dist/pursuit-ending.js
CHANGED
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.COMPILE_REFUSED_NOTE = exports.COMPILE_EMPTY_NOTE = void 0;
|
|
4
4
|
exports.describePursuitEnding = describePursuitEnding;
|
|
5
5
|
const core_1 = require("@looply/core");
|
|
6
|
+
const ticket_words_1 = require("./ticket-words");
|
|
6
7
|
/**
|
|
7
8
|
* WHY A PURSUIT ENDED, SAID TO A PERSON WHO IS NOT A DEVELOPER.
|
|
8
9
|
*
|
|
@@ -28,7 +29,8 @@ exports.COMPILE_EMPTY_NOTE = 'compile: the plan came back empty';
|
|
|
28
29
|
exports.COMPILE_REFUSED_NOTE = 'compile: every step was refused';
|
|
29
30
|
/** A quoted fragment: one line, scrubbed, short enough to leave room for the advice. */
|
|
30
31
|
function quote(text, max = 220) {
|
|
31
|
-
|
|
32
|
+
// Plain words first (TAB-B-61): a QA tester reads this, not a developer at a terminal.
|
|
33
|
+
let s = (0, core_1.cleanPursuitEndReason)((0, ticket_words_1.ticketSentence)(text)).replace(/[.\s]+$/, '');
|
|
32
34
|
if (s.length > max)
|
|
33
35
|
s = `${s.slice(0, max - 1).trimEnd()}…`;
|
|
34
36
|
return s;
|
|
@@ -103,7 +105,7 @@ function describePursuitEnding(ctx) {
|
|
|
103
105
|
case 'cancelled':
|
|
104
106
|
return out('cancelled', 'A person stopped this.');
|
|
105
107
|
default:
|
|
106
|
-
return out(ctx.end, ctx.because);
|
|
108
|
+
return out(ctx.end, (0, ticket_words_1.ticketSentence)(ctx.because));
|
|
107
109
|
}
|
|
108
110
|
}
|
|
109
111
|
/** Ran out of Starts or of time: say what was holding it, or what the last try said. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pursuit-ending.js","sourceRoot":"","sources":["../src/pursuit-ending.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"pursuit-ending.js","sourceRoot":"","sources":["../src/pursuit-ending.ts"],"names":[],"mappings":"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"}
|
package/dist/queue-summary.d.ts
CHANGED
|
@@ -11,4 +11,11 @@ export declare function countByState(items: readonly Pick<Item, 'state'>[]): Sta
|
|
|
11
11
|
* refused on.
|
|
12
12
|
*/
|
|
13
13
|
export declare function describeNoReady(items: readonly Pick<Item, 'state'>[]): string;
|
|
14
|
+
/**
|
|
15
|
+
* Does an unpickable queue wait on a PERSON's decision? Only a `draft` does: the verify pass
|
|
16
|
+
* answered `unclear`, and a person must say what it means. Stale, duplicate, split, blocked
|
|
17
|
+
* and closed rows wait on nobody — a re-plan is the answer to those (TAB-B-61), so a run that
|
|
18
|
+
* finds only them is retryable, never `human_required`.
|
|
19
|
+
*/
|
|
20
|
+
export declare function waitsOnPersonDecision(items: readonly Pick<Item, 'state'>[]): boolean;
|
|
14
21
|
//# sourceMappingURL=queue-summary.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queue-summary.d.ts","sourceRoot":"","sources":["../src/queue-summary.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AA+BpD,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,SAAS,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,4EAA4E;AAC5E,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,GAAG,UAAU,EAAE,CAOhF;AA8BD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,GAAG,MAAM,CAS7E"}
|
|
1
|
+
{"version":3,"file":"queue-summary.d.ts","sourceRoot":"","sources":["../src/queue-summary.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AA+BpD,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,SAAS,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,4EAA4E;AAC5E,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,GAAG,UAAU,EAAE,CAOhF;AA8BD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,GAAG,MAAM,CAS7E;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,SAAS,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,GAAG,OAAO,CAEpF"}
|
package/dist/queue-summary.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.countByState = countByState;
|
|
4
4
|
exports.describeNoReady = describeNoReady;
|
|
5
|
+
exports.waitsOnPersonDecision = waitsOnPersonDecision;
|
|
5
6
|
/**
|
|
6
7
|
* Why the run found nothing to pick.
|
|
7
8
|
*
|
|
@@ -79,4 +80,13 @@ function describeNoReady(items) {
|
|
|
79
80
|
.join(', ');
|
|
80
81
|
return `no ready items: the queue holds ${inventory}. ${nextStep(counts)}`;
|
|
81
82
|
}
|
|
83
|
+
/**
|
|
84
|
+
* Does an unpickable queue wait on a PERSON's decision? Only a `draft` does: the verify pass
|
|
85
|
+
* answered `unclear`, and a person must say what it means. Stale, duplicate, split, blocked
|
|
86
|
+
* and closed rows wait on nobody — a re-plan is the answer to those (TAB-B-61), so a run that
|
|
87
|
+
* finds only them is retryable, never `human_required`.
|
|
88
|
+
*/
|
|
89
|
+
function waitsOnPersonDecision(items) {
|
|
90
|
+
return items.some((i) => i.state === 'draft');
|
|
91
|
+
}
|
|
82
92
|
//# sourceMappingURL=queue-summary.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queue-summary.js","sourceRoot":"","sources":["../src/queue-summary.ts"],"names":[],"mappings":";;AAqCA,oCAOC;AAmCD,0CASC;
|
|
1
|
+
{"version":3,"file":"queue-summary.js","sourceRoot":"","sources":["../src/queue-summary.ts"],"names":[],"mappings":";;AAqCA,oCAOC;AAmCD,0CASC;AAQD,sDAEC;AAhGD;;;;;;;;;;;GAWG;AAEH,yEAAyE;AACzE,MAAM,WAAW,GAAyB;IACxC,OAAO;IACP,OAAO;IACP,WAAW;IACX,aAAa;IACb,SAAS;IACT,OAAO;IACP,WAAW;IACX,OAAO;IACP,MAAM;IACN,QAAQ;CACT,CAAC;AAEF,MAAM,WAAW,GAAuC,EAAE,WAAW,EAAE,aAAa,EAAE,CAAC;AAOvF,4EAA4E;AAC5E,SAAgB,YAAY,CAAC,KAAqC;IAChE,MAAM,MAAM,GAAG,IAAI,GAAG,EAAqB,CAAC;IAC5C,KAAK,MAAM,IAAI,IAAI,KAAK;QAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACpF,OAAO,WAAW,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACtE,KAAK;QACL,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAE;KAC1B,CAAC,CAAC,CAAC;AACN,CAAC;AAED,SAAS,GAAG,CAAC,MAA6B,EAAE,KAAgB;IAC1D,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;AAC9D,CAAC;AAED;;;;GAIG;AACH,SAAS,QAAQ,CAAC,MAA6B;IAC7C,IAAI,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,CAAC;QACrD,uEAAuE;QACvE,mEAAmE;QACnE,uEAAuE;QACvE,OAAO,sGAAsG,CAAC;IAChH,CAAC;IACD,IAAI,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,EAAE,CAAC;QAC/B,2EAA2E;QAC3E,0EAA0E;QAC1E,uEAAuE;QACvE,OAAO,6IAA6I,CAAC;IACvJ,CAAC;IACD,IAAI,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,CAAC;QAC3B,OAAO,gIAAgI,CAAC;IAC1I,CAAC;IACD,OAAO,0EAA0E,CAAC;AACpF,CAAC;AAED;;;;GAIG;AACH,SAAgB,eAAe,CAAC,KAAqC;IACnE,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IACnC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACnB,OAAO,kGAAkG,CAAC;IAC5G,CAAC;IACD,MAAM,SAAS,GAAG,MAAM;SACrB,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,GAAG,KAAK,IAAI,WAAW,CAAC,KAAK,CAAC,IAAI,KAAK,EAAE,CAAC;SACpE,IAAI,CAAC,IAAI,CAAC,CAAC;IACd,OAAO,mCAAmC,SAAS,KAAK,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;AAC7E,CAAC;AAED;;;;;GAKG;AACH,SAAgB,qBAAqB,CAAC,KAAqC;IACzE,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC;AAChD,CAAC"}
|
package/dist/round-runner.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ import type { ImplementerRunResult } from './agent-driver';
|
|
|
3
3
|
import type { LooplyConfig } from './config';
|
|
4
4
|
import type { EvidenceLookup } from './evidence-cache';
|
|
5
5
|
import { type CommandResult, type CommandRunner, type GateStepDiagnostic } from './gate';
|
|
6
|
+
import { type PartialResolution, type ProverGateStep } from './partial-keep';
|
|
6
7
|
import { type RejectedAttemptInput, type RejectedEvidenceSink } from './rejected-evidence';
|
|
7
8
|
import type { AnyEventInput } from './ledger-store';
|
|
8
9
|
import type { RunProgressNotifier } from './notify-cadence';
|
|
@@ -349,16 +350,25 @@ export interface RoundRunnerDeps {
|
|
|
349
350
|
* the item's `lastFailure` still carries the one-line reason either way.
|
|
350
351
|
*/
|
|
351
352
|
implement(item: Item, attempt: number, repair?: RepairContext): Promise<ImplementerRunResult>;
|
|
352
|
-
/**
|
|
353
|
+
/**
|
|
354
|
+
* The second key (DESIGN §2.2). Required whenever `proof.enabled` is true.
|
|
355
|
+
*
|
|
356
|
+
* `gate` is this round's gate results — each step's name, the command it ran
|
|
357
|
+
* and passed / failed / skipped — so the prover knows what was run rather
|
|
358
|
+
* than doubting it (TAB-B-61: "nothing shows the vitest command was run").
|
|
359
|
+
*/
|
|
353
360
|
prove?(input: {
|
|
354
361
|
item: Item;
|
|
355
362
|
changedPaths: readonly string[];
|
|
363
|
+
gate?: readonly ProverGateStep[];
|
|
356
364
|
}): Promise<ProofOutcome>;
|
|
357
365
|
/**
|
|
358
366
|
* Resolves a `partial` verdict when `proof.on_partial: ask` — whatever can
|
|
359
367
|
* reach a human (daemon → phone). It owns emitting question.asked/answered.
|
|
368
|
+
* A `PartialResolution` also says whether a person gave the answer; with
|
|
369
|
+
* nobody to ask, the runner keeps the work when the checks vouch for it.
|
|
360
370
|
*/
|
|
361
|
-
resolvePartial?(item: Item, proof: ProofOutcome): Promise<PartialAnswer>;
|
|
371
|
+
resolvePartial?(item: Item, proof: ProofOutcome): Promise<PartialAnswer | PartialResolution>;
|
|
362
372
|
/**
|
|
363
373
|
* Drops an item's cached evidence (see `EvidenceCache.invalidate`). Called
|
|
364
374
|
* after every discard — §12 case 19's second trigger. Optional because a run
|
|
@@ -615,6 +625,12 @@ export declare const RUN_HALTED_CODE = "run-halted";
|
|
|
615
625
|
* owner's decision, not this alert's business.
|
|
616
626
|
*/
|
|
617
627
|
export declare const PARTIAL_DISCARDED_CODE = "proof-partial-discarded";
|
|
628
|
+
/**
|
|
629
|
+
* The alert a run writes when a partial proof was KEPT because nobody could be
|
|
630
|
+
* asked and the checks vouch for the change (`partial-keep.ts`). `info`: work
|
|
631
|
+
* was kept, nothing is wrong, and the feed and the item both say why.
|
|
632
|
+
*/
|
|
633
|
+
export declare const PARTIAL_KEPT_CODE = "proof-partial-kept";
|
|
618
634
|
/** What a partial proof discarded for want of anyone to ask says, in one sentence. */
|
|
619
635
|
export declare function partialDiscardedText(itemTitle: string, reason: string): string;
|
|
620
636
|
export interface RunSummary {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"round-runner.d.ts","sourceRoot":"","sources":["../src/round-runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAmBL,KAAK,SAAS,EAEd,KAAK,QAAQ,EACb,KAAK,SAAS,EACd,KAAK,IAAI,EAET,KAAK,aAAa,EAClB,KAAK,YAAY,EAGjB,KAAK,SAAS,EACd,KAAK,YAAY,EACjB,KAAK,YAAY,EAIjB,KAAK,oBAAoB,EAC1B,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAIL,KAAK,aAAa,EAClB,KAAK,aAAa,EAElB,KAAK,kBAAkB,EACxB,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"round-runner.d.ts","sourceRoot":"","sources":["../src/round-runner.ts"],"names":[],"mappings":"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"}
|
package/dist/round-runner.js
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.RoundRunner = exports.DEFAULT_PAUSE_POLL_MS = exports.RunnerError = exports.PARTIAL_DISCARDED_CODE = exports.RUN_HALTED_CODE = exports.GATE_MACHINERY = exports.MAX_CONSECUTIVE_BLOCKED_ROUNDS = void 0;
|
|
3
|
+
exports.RoundRunner = exports.DEFAULT_PAUSE_POLL_MS = exports.RunnerError = exports.PARTIAL_KEPT_CODE = exports.PARTIAL_DISCARDED_CODE = exports.RUN_HALTED_CODE = exports.GATE_MACHINERY = exports.MAX_CONSECUTIVE_BLOCKED_ROUNDS = void 0;
|
|
4
4
|
exports.partialDiscardedText = partialDiscardedText;
|
|
5
5
|
const core_1 = require("@looply/core");
|
|
6
6
|
const gate_1 = require("./gate");
|
|
7
7
|
const glob_1 = require("./glob");
|
|
8
|
+
const partial_keep_1 = require("./partial-keep");
|
|
8
9
|
const scope_rule_1 = require("./scope-rule");
|
|
9
10
|
const rejected_evidence_1 = require("./rejected-evidence");
|
|
10
11
|
const verify_apply_1 = require("./verify-apply");
|
|
@@ -74,6 +75,12 @@ exports.RUN_HALTED_CODE = 'run-halted';
|
|
|
74
75
|
* owner's decision, not this alert's business.
|
|
75
76
|
*/
|
|
76
77
|
exports.PARTIAL_DISCARDED_CODE = 'proof-partial-discarded';
|
|
78
|
+
/**
|
|
79
|
+
* The alert a run writes when a partial proof was KEPT because nobody could be
|
|
80
|
+
* asked and the checks vouch for the change (`partial-keep.ts`). `info`: work
|
|
81
|
+
* was kept, nothing is wrong, and the feed and the item both say why.
|
|
82
|
+
*/
|
|
83
|
+
exports.PARTIAL_KEPT_CODE = 'proof-partial-kept';
|
|
77
84
|
/** What a partial proof discarded for want of anyone to ask says, in one sentence. */
|
|
78
85
|
function partialDiscardedText(itemTitle, reason) {
|
|
79
86
|
return (`the checker was not sure about "${itemTitle}" — ${reason} — and nothing on this machine can be asked, ` +
|
|
@@ -1094,7 +1101,7 @@ class RoundRunner {
|
|
|
1094
1101
|
let proof;
|
|
1095
1102
|
if (this.cfg.proof.enabled && this.deps.prove) {
|
|
1096
1103
|
try {
|
|
1097
|
-
proof = await this.deps.prove({ item, changedPaths: changed });
|
|
1104
|
+
proof = await this.deps.prove({ item, changedPaths: changed, gate: (0, partial_keep_1.proverGateSteps)(gate.steps, this.cfg.gates) });
|
|
1098
1105
|
}
|
|
1099
1106
|
catch (err) {
|
|
1100
1107
|
// §12 case 15's harder sibling: an unparseable verdict is a rejection,
|
|
@@ -1135,7 +1142,42 @@ class RoundRunner {
|
|
|
1135
1142
|
// reach a human. The 'discard' fallback is unreachable (constructor
|
|
1136
1143
|
// refuses ask-with-nothing-wired) but keeps the safe default explicit.
|
|
1137
1144
|
const ask = this.deps.resolvePartial;
|
|
1138
|
-
const
|
|
1145
|
+
const resolved = this.cfg.proof.onPartial !== 'ask'
|
|
1146
|
+
? { answer: this.cfg.proof.onPartial, nobodyAnswered: false }
|
|
1147
|
+
: ask
|
|
1148
|
+
? (0, partial_keep_1.asResolution)(await ask(item, proof))
|
|
1149
|
+
: { answer: 'discard', nobodyAnswered: true };
|
|
1150
|
+
let answer = resolved.answer;
|
|
1151
|
+
/**
|
|
1152
|
+
* 🔴 NOBODY TO ASK IS NOT A REASON TO THROW AWAY WORK THE CHECKS VOUCH FOR (TAB-B-61).
|
|
1153
|
+
*
|
|
1154
|
+
* An unpaired machine — or a question the deadline answered as `system` — used to
|
|
1155
|
+
* discard every partial proof, even when the gate had run the ticket's own tests and
|
|
1156
|
+
* they passed and the second agent doubted only what it could not see. With nobody's
|
|
1157
|
+
* answer to go on, the checks decide: every required step that applied ran and passed,
|
|
1158
|
+
* nothing that ran failed, and at least one step ran. A person's own answer is never
|
|
1159
|
+
* overruled, and a project that chose `discard` keeps it. The attempt is not spent: the
|
|
1160
|
+
* item is done, exactly as a person's `keep` would make it, and every brake below
|
|
1161
|
+
* (late rails, surfaces, the fence, cross-repo needs) still stands between this and
|
|
1162
|
+
* the commit.
|
|
1163
|
+
*/
|
|
1164
|
+
if (this.cfg.proof.onPartial === 'ask' &&
|
|
1165
|
+
answer === 'discard' &&
|
|
1166
|
+
resolved.nobodyAnswered &&
|
|
1167
|
+
(0, partial_keep_1.checksVouch)(gate.steps, (0, gate_1.requiredSteps)(this.cfg.gates))) {
|
|
1168
|
+
answer = 'keep';
|
|
1169
|
+
this.roundNote = partial_keep_1.PARTIAL_KEPT_NOTE;
|
|
1170
|
+
try {
|
|
1171
|
+
await this.emit('alert', {
|
|
1172
|
+
code: exports.PARTIAL_KEPT_CODE,
|
|
1173
|
+
severity: 'info',
|
|
1174
|
+
text: (0, partial_keep_1.partialKeptText)(item.title, proof.reason, gate.steps),
|
|
1175
|
+
});
|
|
1176
|
+
}
|
|
1177
|
+
catch {
|
|
1178
|
+
/* the round's own record is the one that must land */
|
|
1179
|
+
}
|
|
1180
|
+
}
|
|
1139
1181
|
/**
|
|
1140
1182
|
* M6-20: A DISCARD THE PROJECT DID NOT CHOOSE IS SAID OUT LOUD.
|
|
1141
1183
|
*
|