@claudexor/orchestrator 3.20.1 → 3.22.0
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/attemptFinalize.d.ts +14 -101
- package/dist/attemptFinalize.d.ts.map +1 -1
- package/dist/attemptFinalize.js +7 -328
- package/dist/attemptFinalize.js.map +1 -1
- package/dist/candidateEvidence.d.ts +15 -6
- package/dist/candidateEvidence.d.ts.map +1 -1
- package/dist/candidateEvidence.js +1 -1
- package/dist/candidateEvidence.js.map +1 -1
- package/dist/candidateOutputs.d.ts +7 -3
- package/dist/candidateOutputs.d.ts.map +1 -1
- package/dist/candidateOutputs.js +4 -1
- package/dist/candidateOutputs.js.map +1 -1
- package/dist/candidateReview.d.ts.map +1 -1
- package/dist/candidateReview.js +3 -1
- package/dist/candidateReview.js.map +1 -1
- package/dist/candidateTerminals.d.ts +4 -0
- package/dist/candidateTerminals.d.ts.map +1 -1
- package/dist/candidateTerminals.js +18 -7
- package/dist/candidateTerminals.js.map +1 -1
- package/dist/candidateWorkProduct.d.ts.map +1 -1
- package/dist/candidateWorkProduct.js +6 -6
- package/dist/candidateWorkProduct.js.map +1 -1
- package/dist/carrier-planner.d.ts +94 -0
- package/dist/carrier-planner.d.ts.map +1 -0
- package/dist/carrier-planner.js +111 -0
- package/dist/carrier-planner.js.map +1 -0
- package/dist/continuation-custody.d.ts +57 -0
- package/dist/continuation-custody.d.ts.map +1 -0
- package/dist/continuation-custody.js +151 -0
- package/dist/continuation-custody.js.map +1 -0
- package/dist/continuation-evidence-io.d.ts +18 -0
- package/dist/continuation-evidence-io.d.ts.map +1 -0
- package/dist/continuation-evidence-io.js +167 -0
- package/dist/continuation-evidence-io.js.map +1 -0
- package/dist/continuation-evidence.d.ts +81 -0
- package/dist/continuation-evidence.d.ts.map +1 -0
- package/dist/continuation-evidence.js +122 -0
- package/dist/continuation-evidence.js.map +1 -0
- package/dist/continuation-input.d.ts +10 -0
- package/dist/continuation-input.d.ts.map +1 -0
- package/dist/continuation-input.js +69 -0
- package/dist/continuation-input.js.map +1 -0
- package/dist/continue-from.d.ts +41 -0
- package/dist/continue-from.d.ts.map +1 -0
- package/dist/continue-from.js +292 -0
- package/dist/continue-from.js.map +1 -0
- package/dist/continuity-notice.d.ts +42 -0
- package/dist/continuity-notice.d.ts.map +1 -0
- package/dist/continuity-notice.js +42 -0
- package/dist/continuity-notice.js.map +1 -0
- package/dist/continuity-terminal.d.ts +19 -0
- package/dist/continuity-terminal.d.ts.map +1 -0
- package/dist/continuity-terminal.js +34 -0
- package/dist/continuity-terminal.js.map +1 -0
- package/dist/credential-cooldown.d.ts.map +1 -1
- package/dist/credential-cooldown.js +8 -3
- package/dist/credential-cooldown.js.map +1 -1
- package/dist/credential-differential.d.ts +1 -0
- package/dist/credential-differential.d.ts.map +1 -1
- package/dist/credential-differential.js +32 -4
- package/dist/credential-differential.js.map +1 -1
- package/dist/deepScanReducer.d.ts +4 -1
- package/dist/deepScanReducer.d.ts.map +1 -1
- package/dist/deepScanReducer.js +10 -5
- package/dist/deepScanReducer.js.map +1 -1
- package/dist/delegationFailure.d.ts +4 -3
- package/dist/delegationFailure.d.ts.map +1 -1
- package/dist/delegationFailure.js +25 -24
- package/dist/delegationFailure.js.map +1 -1
- package/dist/directoryCandidate.d.ts +2 -2
- package/dist/directoryCandidate.d.ts.map +1 -1
- package/dist/directoryCandidate.js +3 -0
- package/dist/directoryCandidate.js.map +1 -1
- package/dist/inrun-continuity-carrier.d.ts +76 -0
- package/dist/inrun-continuity-carrier.d.ts.map +1 -0
- package/dist/inrun-continuity-carrier.js +218 -0
- package/dist/inrun-continuity-carrier.js.map +1 -0
- package/dist/inrun-continuity-thread.d.ts +8 -0
- package/dist/inrun-continuity-thread.d.ts.map +1 -0
- package/dist/inrun-continuity-thread.js +23 -0
- package/dist/inrun-continuity-thread.js.map +1 -0
- package/dist/inrun-continuity-types.d.ts +105 -0
- package/dist/inrun-continuity-types.d.ts.map +1 -0
- package/dist/inrun-continuity-types.js +2 -0
- package/dist/inrun-continuity-types.js.map +1 -0
- package/dist/inrun-continuity.d.ts +79 -0
- package/dist/inrun-continuity.d.ts.map +1 -0
- package/dist/inrun-continuity.js +465 -0
- package/dist/inrun-continuity.js.map +1 -0
- package/dist/inrun-continuity.test-support.d.ts +374 -0
- package/dist/inrun-continuity.test-support.d.ts.map +1 -0
- package/dist/inrun-continuity.test-support.js +198 -0
- package/dist/inrun-continuity.test-support.js.map +1 -0
- package/dist/inrun-retained-output.d.ts +9 -0
- package/dist/inrun-retained-output.d.ts.map +1 -0
- package/dist/inrun-retained-output.js +16 -0
- package/dist/inrun-retained-output.js.map +1 -0
- package/dist/interaction.d.ts +1 -1
- package/dist/interaction.d.ts.map +1 -1
- package/dist/interaction.js +6 -1
- package/dist/interaction.js.map +1 -1
- package/dist/modelGovernance.d.ts +4 -0
- package/dist/modelGovernance.d.ts.map +1 -1
- package/dist/modelGovernance.js +27 -1
- package/dist/modelGovernance.js.map +1 -1
- package/dist/orchestrator-credentials.d.ts +1 -1
- package/dist/orchestrator-credentials.d.ts.map +1 -1
- package/dist/orchestrator-credentials.js +4 -3
- package/dist/orchestrator-credentials.js.map +1 -1
- package/dist/orchestrator.d.ts +4 -4
- package/dist/orchestrator.d.ts.map +1 -1
- package/dist/orchestrator.js +252 -226
- package/dist/orchestrator.js.map +1 -1
- package/dist/persistedPatch.d.ts +55 -0
- package/dist/persistedPatch.d.ts.map +1 -0
- package/dist/persistedPatch.js +132 -0
- package/dist/persistedPatch.js.map +1 -0
- package/dist/planFinalize.d.ts +37 -0
- package/dist/planFinalize.d.ts.map +1 -0
- package/dist/planFinalize.js +94 -0
- package/dist/planFinalize.js.map +1 -0
- package/dist/planRun.d.ts +2 -28
- package/dist/planRun.d.ts.map +1 -1
- package/dist/planRun.js +5 -88
- package/dist/planRun.js.map +1 -1
- package/dist/plannerAttempt.d.ts +4 -1
- package/dist/plannerAttempt.d.ts.map +1 -1
- package/dist/plannerAttempt.js +9 -4
- package/dist/plannerAttempt.js.map +1 -1
- package/dist/prompt-framing.d.ts +1 -1
- package/dist/prompt-framing.d.ts.map +1 -1
- package/dist/prompt-framing.js.map +1 -1
- package/dist/reviewerEffort.d.ts +41 -0
- package/dist/reviewerEffort.d.ts.map +1 -0
- package/dist/reviewerEffort.js +37 -0
- package/dist/reviewerEffort.js.map +1 -0
- package/dist/reviewerPanel.d.ts +5 -5
- package/dist/reviewerPanel.d.ts.map +1 -1
- package/dist/reviewerPanel.js +22 -50
- package/dist/reviewerPanel.js.map +1 -1
- package/dist/run-input-resolution.d.ts.map +1 -1
- package/dist/run-input-resolution.js +10 -0
- package/dist/run-input-resolution.js.map +1 -1
- package/dist/runEventLog.d.ts.map +1 -1
- package/dist/runEventLog.js +5 -0
- package/dist/runEventLog.js.map +1 -1
- package/dist/runFactsBuilder.d.ts.map +1 -1
- package/dist/runFactsBuilder.js +11 -2
- package/dist/runFactsBuilder.js.map +1 -1
- package/dist/runSupport.d.ts +2 -1
- package/dist/runSupport.d.ts.map +1 -1
- package/dist/runSupport.js +2 -1
- package/dist/runSupport.js.map +1 -1
- package/dist/runTelemetryWriter.d.ts.map +1 -1
- package/dist/runTelemetryWriter.js +7 -2
- package/dist/runTelemetryWriter.js.map +1 -1
- package/dist/runTerminalResults.d.ts +6 -2
- package/dist/runTerminalResults.d.ts.map +1 -1
- package/dist/runTerminalResults.js +8 -1
- package/dist/runTerminalResults.js.map +1 -1
- package/dist/runTerminals.d.ts.map +1 -1
- package/dist/runTerminals.js +6 -5
- package/dist/runTerminals.js.map +1 -1
- package/dist/secretDiff.d.ts +67 -27
- package/dist/secretDiff.d.ts.map +1 -1
- package/dist/secretDiff.js +143 -113
- package/dist/secretDiff.js.map +1 -1
- package/dist/session-capsule.d.ts +29 -0
- package/dist/session-capsule.d.ts.map +1 -0
- package/dist/session-capsule.js +86 -0
- package/dist/session-capsule.js.map +1 -0
- package/dist/workReportEnvelope.d.ts +123 -0
- package/dist/workReportEnvelope.d.ts.map +1 -0
- package/dist/workReportEnvelope.js +362 -0
- package/dist/workReportEnvelope.js.map +1 -0
- package/package.json +17 -17
- package/dist/effortGovernance.d.ts +0 -13
- package/dist/effortGovernance.d.ts.map +0 -1
- package/dist/effortGovernance.js +0 -7
- package/dist/effortGovernance.js.map +0 -1
|
@@ -11,106 +11,13 @@
|
|
|
11
11
|
* - a typed reason,
|
|
12
12
|
* - and the class of outcome (clean / veto / contract-failure / interrupted).
|
|
13
13
|
*
|
|
14
|
-
* The module is PURE (no I/O, no clock). The envelope compile/unwrap
|
|
15
|
-
*
|
|
14
|
+
* The module is PURE (no I/O, no clock). The envelope compile/unwrap half lives
|
|
15
|
+
* in `workReportEnvelope.ts`; the spec-build decision, the unwrap and this
|
|
16
|
+
* finalizer read one contract (`WorkReportEnvelopeMode` / `UnwrappedAnswer`).
|
|
16
17
|
*/
|
|
17
|
-
import
|
|
18
|
+
import type { RunReason, WorkReport, WorkReportSource, WorkState } from "@claudexor/schema";
|
|
18
19
|
import type { ToolErrorRecord, WebEvidenceState } from "./attemptTelemetry.js";
|
|
19
|
-
|
|
20
|
-
* How the WorkReport rides the wire for an active envelope (D-16c):
|
|
21
|
-
* - `constrained_json`: the whole final answer IS the `{work_report, output}`
|
|
22
|
-
* JSON (codex `--output-schema`; claude `--json-schema` WITH a caller schema).
|
|
23
|
-
* - `side_tool`: a `{work_report}`-only schema arms claude's StructuredOutput
|
|
24
|
-
* TOOL; the markdown final message stays the deliverable and the report rides
|
|
25
|
-
* the tool payload (surfaced on the final message's `work_report_side_tool`).
|
|
26
|
-
* - `instructed_fence`: no native constraint — the model writes its complete
|
|
27
|
-
* markdown answer, then appends a fenced `{work_report}` metadata block
|
|
28
|
-
* validated off the last fenced JSON (cursor).
|
|
29
|
-
*/
|
|
30
|
-
export type WorkReportChannel = "constrained_json" | "side_tool" | "instructed_fence";
|
|
31
|
-
/** The per-attempt envelope decision made at spec build and consumed by the
|
|
32
|
-
* unwrap. `active` means the orchestrator actually armed a WorkReport transport
|
|
33
|
-
* for this route, so a missing/malformed report is a typed contract failure. */
|
|
34
|
-
export interface WorkReportEnvelopeMode {
|
|
35
|
-
active: boolean;
|
|
36
|
-
source: WorkReportSource;
|
|
37
|
-
hasCallerSchema: boolean;
|
|
38
|
-
channel: WorkReportChannel;
|
|
39
|
-
/** Instruction to APPEND to the spec (instructed_fence only); null otherwise. */
|
|
40
|
-
instruction: string | null;
|
|
41
|
-
}
|
|
42
|
-
/**
|
|
43
|
-
* The instruction appended to an `instructed_fence` (cursor) route so the model
|
|
44
|
-
* emits the WorkReport footer the finalizer validates. No native schema
|
|
45
|
-
* constrains cursor, so the contract is instructed and validated off the last
|
|
46
|
-
* fenced JSON block (D-16c). The normal markdown before that footer is the
|
|
47
|
-
* deliverable; a historical fence-only `output` remains a read fallback.
|
|
48
|
-
*/
|
|
49
|
-
export declare const WORK_REPORT_FENCE_INSTRUCTION: string;
|
|
50
|
-
/** Result of the spec-build envelope decision. */
|
|
51
|
-
export interface ResolvedWorkReportEnvelope {
|
|
52
|
-
/** What rides HarnessRunSpec.output_schema (undefined = leave unset). */
|
|
53
|
-
outputSchema: Record<string, unknown> | undefined;
|
|
54
|
-
mode: WorkReportEnvelopeMode;
|
|
55
|
-
}
|
|
56
|
-
/**
|
|
57
|
-
* Decide the transport envelope for one route at spec build (D-16 §2). The
|
|
58
|
-
* caller's ORIGINAL schema stays the conformance authority for `output` (it is
|
|
59
|
-
* NOT passed here strictified for validation — only the transport copy is).
|
|
60
|
-
*
|
|
61
|
-
* Activated HERE directly for `constrained` routes that natively constrain
|
|
62
|
-
* output and are not interactive-gated (the WorkReport rides the
|
|
63
|
-
* `{work_report, output}` envelope; claude's no-caller `side_tool` case instead
|
|
64
|
-
* arms a `{work_report}`-only schema on the StructuredOutput tool so the markdown
|
|
65
|
-
* final stays the deliverable — the D-16c seam), and for `validated` routes
|
|
66
|
-
* (cursor), where the report rides an INSTRUCTED fenced envelope. Only
|
|
67
|
-
* interactive-gated and schema-incapable routes stay inactive here (disclosed
|
|
68
|
-
* `absent` work_state).
|
|
69
|
-
*/
|
|
70
|
-
export declare function resolveWorkReportEnvelope(opts: {
|
|
71
|
-
transport: HarnessCapabilities["work_report_transport"];
|
|
72
|
-
channel: HarnessCapabilities["structured_output_channel"];
|
|
73
|
-
supportsJsonSchemaOutput: boolean;
|
|
74
|
-
interactive: boolean;
|
|
75
|
-
callerSchema: Record<string, unknown> | null;
|
|
76
|
-
}): ResolvedWorkReportEnvelope;
|
|
77
|
-
/** The unwrapped attempt answer plus the extracted WorkReport (or a typed
|
|
78
|
-
* contract violation). `deliverable` is what answer.md / the caller-schema
|
|
79
|
-
* validator must see — never the envelope. */
|
|
80
|
-
export interface UnwrappedAnswer {
|
|
81
|
-
deliverable: string;
|
|
82
|
-
workReport: WorkReport | null;
|
|
83
|
-
source: WorkReportSource;
|
|
84
|
-
/** Non-null when an active route failed to carry a valid WorkReport. */
|
|
85
|
-
contractViolation: string | null;
|
|
86
|
-
/** Parsed model claim retained as evidence only; never a valid WorkReport. */
|
|
87
|
-
reportProblem?: {
|
|
88
|
-
kind: "completed_with_required_inputs";
|
|
89
|
-
reported: WorkReport;
|
|
90
|
-
};
|
|
91
|
-
}
|
|
92
|
-
/**
|
|
93
|
-
* Un-nest the WorkReport envelope from an active route's answer (D-16 §2). The
|
|
94
|
-
* behavior forks on `mode.channel`:
|
|
95
|
-
* - `constrained_json`: the whole answer IS `{work_report, output}` JSON.
|
|
96
|
-
* - `instructed_fence`: the LAST fenced JSON block carries metadata; the
|
|
97
|
-
* markdown before it is the deliverable. Historical fence-only envelopes
|
|
98
|
-
* fall back to their string `output`.
|
|
99
|
-
* - `side_tool`: the answer text IS the markdown deliverable; the report rides
|
|
100
|
-
* `opts.sideToolReport` (the tool payload the adapter surfaced).
|
|
101
|
-
* A non-active mode passes the answer through untouched. The WorkReport
|
|
102
|
-
* cross-field rules (completed ⇒ no required_inputs; needs_input ⇒ ≥1) are
|
|
103
|
-
* enforced HERE so a broken report is a typed contract violation.
|
|
104
|
-
*
|
|
105
|
-
* For a `constrained_json` route `answerText` is the raw `{work_report, output}`
|
|
106
|
-
* envelope (codex #19816 / QA-009: the orchestrator passes `answer.machineText()`,
|
|
107
|
-
* which yields the raw envelope even when the codex adapter pre-unwrapped the
|
|
108
|
-
* DISPLAY copy of the final message — the visible stream sees the output, the
|
|
109
|
-
* un-nest here still sees the envelope).
|
|
110
|
-
*/
|
|
111
|
-
export declare function unwrapWorkReportEnvelope(answerText: string, mode: WorkReportEnvelopeMode, opts?: {
|
|
112
|
-
sideToolReport?: unknown;
|
|
113
|
-
}): UnwrappedAnswer;
|
|
20
|
+
import type { UnverifiedWorkReport } from "./workReportEnvelope.js";
|
|
114
21
|
/**
|
|
115
22
|
* QA-036: the terminal outcome facts for a read-only run that produced NO
|
|
116
23
|
* successful attempt. The D8 legacy mapping treated ANY web-blocked run as a
|
|
@@ -140,8 +47,12 @@ export interface FinalizeAttemptInput {
|
|
|
140
47
|
harnessErrored: boolean;
|
|
141
48
|
workReport: WorkReport | null;
|
|
142
49
|
workReportSource: WorkReportSource;
|
|
143
|
-
/** Non-null when an active route failed its WorkReport contract. */
|
|
50
|
+
/** Non-null when an active NATIVE route failed its WorkReport contract. */
|
|
144
51
|
workReportViolation: string | null;
|
|
52
|
+
/** An instructed footer yielded no valid report (owner decision 2026-10-05):
|
|
53
|
+
* disclosed as an unverified work_state with this reason, never a failure.
|
|
54
|
+
* Ignored when a valid report is present. */
|
|
55
|
+
workReportUnverified?: UnverifiedWorkReport | null;
|
|
145
56
|
/** A terminal capacity_exhausted context signal was observed this attempt. */
|
|
146
57
|
contextTerminalExhausted: boolean;
|
|
147
58
|
}
|
|
@@ -160,12 +71,14 @@ export interface FinalizeAttemptResult {
|
|
|
160
71
|
/**
|
|
161
72
|
* The unified finalizer. Precedence (hardest signal wins):
|
|
162
73
|
* 1. terminal context exhaustion with no completed report ⇒ interrupted;
|
|
163
|
-
* 2. a broken WorkReport contract on a
|
|
74
|
+
* 2. a broken WorkReport contract on a NATIVE route ⇒ hard failure
|
|
164
75
|
* (never prose-success);
|
|
165
76
|
* 3. a valid needs_input/incomplete report ⇒ veto (lifecycle stays, run is
|
|
166
77
|
* non-applyable, exit non-zero) — a `completed` claim NEVER overrides a
|
|
167
78
|
* harness error / failed gate / missing evidence;
|
|
168
|
-
* 4. otherwise the disclosed work_state
|
|
79
|
+
* 4. otherwise the disclosed work_state: completed, or unverified — with the
|
|
80
|
+
* route's own source and the typed reason when an INSTRUCTED footer was
|
|
81
|
+
* missing or broken, `absent` when the route carries no transport.
|
|
169
82
|
*/
|
|
170
83
|
export declare function finalizeAttempt(input: FinalizeAttemptInput): FinalizeAttemptResult;
|
|
171
84
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attemptFinalize.d.ts","sourceRoot":"","sources":["../src/attemptFinalize.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"attemptFinalize.d.ts","sourceRoot":"","sources":["../src/attemptFinalize.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC5F,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC/E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAEpE;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE;IAC9C,UAAU,EAAE,OAAO,CAAC;IACpB,cAAc,EAAE,OAAO,CAAC;IACxB,aAAa,EAAE,OAAO,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;CACvB,GAAG;IAAE,SAAS,EAAE,WAAW,GAAG,QAAQ,CAAC;IAAC,MAAM,CAAC,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,SAAS,CAAA;CAAE,CAQ/E;AAED;;;+EAG+E;AAC/E,MAAM,WAAW,oBAAoB;IACnC,6EAA6E;IAC7E,mBAAmB,EAAE,OAAO,CAAC;IAC7B,cAAc,EAAE,OAAO,CAAC;IACxB,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;IAC9B,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,2EAA2E;IAC3E,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC;;iDAE6C;IAC7C,oBAAoB,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAAC;IACnD,8EAA8E;IAC9E,wBAAwB,EAAE,OAAO,CAAC;CACnC;AAED,sEAAsE;AACtE,MAAM,MAAM,mBAAmB,GAAG,OAAO,GAAG,MAAM,GAAG,kBAAkB,GAAG,aAAa,CAAC;AAExF,MAAM,WAAW,qBAAqB;IACpC,6EAA6E;IAC7E,kBAAkB,EAAE,OAAO,CAAC;IAC5B,kEAAkE;IAClE,cAAc,EAAE,OAAO,CAAC;IACxB,SAAS,EAAE,SAAS,CAAC;IACrB,kEAAkE;IAClE,MAAM,EAAE,SAAS,GAAG,IAAI,CAAC;IACzB,YAAY,EAAE,mBAAmB,CAAC;CACnC;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,oBAAoB,GAAG,qBAAqB,CAoDlF;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,2BAA2B,CACzC,WAAW,EAAE,SAAS,eAAe,EAAE,EACvC,mBAAmB,EAAE,OAAO,GAC3B,MAAM,GAAG,IAAI,CAIf;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,IAAI,CAAC,gBAAgB,EAAE,WAAW,GAAG,cAAc,CAAC,GACxD,MAAM,CAER"}
|
package/dist/attemptFinalize.js
CHANGED
|
@@ -1,328 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* D-16 unified attempt finalizer.
|
|
3
|
-
*
|
|
4
|
-
* ONE owner for the "did this attempt deliver, and in what work_state?" decision
|
|
5
|
-
* — replacing the three divergent deliverable predicates (candidate diff||answer;
|
|
6
|
-
* planner no-error⇒delivered; read-only nonempty-report). It folds the raw
|
|
7
|
-
* intent-specific deliverable evidence with the model-authored WorkReport, the
|
|
8
|
-
* typed context signals, the harness error state, and the gates into:
|
|
9
|
-
* - a final `deliverablePresent`,
|
|
10
|
-
* - a `work_state` axis (orthogonal to lifecycle, INV-116),
|
|
11
|
-
* - a typed reason,
|
|
12
|
-
* - and the class of outcome (clean / veto / contract-failure / interrupted).
|
|
13
|
-
*
|
|
14
|
-
* The module is PURE (no I/O, no clock). The envelope compile/unwrap helpers
|
|
15
|
-
* live here too so the spec-build decision and the finalizer read one contract.
|
|
16
|
-
*/
|
|
17
|
-
import { buildWorkReportEnvelope, strictifyOutputSchema, WorkReport, } from "@claudexor/schema";
|
|
18
|
-
import { redactSecrets } from "@claudexor/util";
|
|
19
|
-
/**
|
|
20
|
-
* The instruction appended to an `instructed_fence` (cursor) route so the model
|
|
21
|
-
* emits the WorkReport footer the finalizer validates. No native schema
|
|
22
|
-
* constrains cursor, so the contract is instructed and validated off the last
|
|
23
|
-
* fenced JSON block (D-16c). The normal markdown before that footer is the
|
|
24
|
-
* deliverable; a historical fence-only `output` remains a read fallback.
|
|
25
|
-
*/
|
|
26
|
-
export const WORK_REPORT_FENCE_INSTRUCTION = [
|
|
27
|
-
"Write your complete final answer as normal Markdown.",
|
|
28
|
-
"When you have finished, append a single fenced ```json code block",
|
|
29
|
-
"containing exactly this object and nothing after it:",
|
|
30
|
-
'{"work_report": {"state": "completed" | "needs_input" | "incomplete",',
|
|
31
|
-
'"required_inputs": [{"kind": "file"|"context"|"credential"|"permission"|"decision"|"external_dependency",',
|
|
32
|
-
'"locator": string|null, "description": string}]}}.',
|
|
33
|
-
"Do not duplicate or summarize your answer inside this block.",
|
|
34
|
-
'Use state "completed" only when the task is fully done with an empty required_inputs list;',
|
|
35
|
-
'use "needs_input" (with at least one required_inputs entry) when you are blocked on a missing input;',
|
|
36
|
-
'use "incomplete" when partial work remains. This block is mandatory.',
|
|
37
|
-
].join(" ");
|
|
38
|
-
/**
|
|
39
|
-
* Decide the transport envelope for one route at spec build (D-16 §2). The
|
|
40
|
-
* caller's ORIGINAL schema stays the conformance authority for `output` (it is
|
|
41
|
-
* NOT passed here strictified for validation — only the transport copy is).
|
|
42
|
-
*
|
|
43
|
-
* Activated HERE directly for `constrained` routes that natively constrain
|
|
44
|
-
* output and are not interactive-gated (the WorkReport rides the
|
|
45
|
-
* `{work_report, output}` envelope; claude's no-caller `side_tool` case instead
|
|
46
|
-
* arms a `{work_report}`-only schema on the StructuredOutput tool so the markdown
|
|
47
|
-
* final stays the deliverable — the D-16c seam), and for `validated` routes
|
|
48
|
-
* (cursor), where the report rides an INSTRUCTED fenced envelope. Only
|
|
49
|
-
* interactive-gated and schema-incapable routes stay inactive here (disclosed
|
|
50
|
-
* `absent` work_state).
|
|
51
|
-
*/
|
|
52
|
-
export function resolveWorkReportEnvelope(opts) {
|
|
53
|
-
const hasCallerSchema = opts.callerSchema !== null;
|
|
54
|
-
const callerStrict = hasCallerSchema
|
|
55
|
-
? strictifyOutputSchema(opts.callerSchema)
|
|
56
|
-
: null;
|
|
57
|
-
// `--json-schema` × interactive stream-json is live-verified (claude
|
|
58
|
-
// 2.1.221) and CALLER schemas now ride interactive lanes (the DT2.1-16
|
|
59
|
-
// refusal is gone). The WorkReport side_tool envelope stays gated on
|
|
60
|
-
// interactive lanes as a DELIBERATE scope choice: arming a work-report
|
|
61
|
-
// tool on every interactive run is a behavior change with its own
|
|
62
|
-
// verification debt, not implied by the caller-schema verification. The
|
|
63
|
-
// inactive branch below still carries the caller schema through.
|
|
64
|
-
const interactiveGated = opts.channel === "side_tool" && opts.interactive;
|
|
65
|
-
// `validated` transport (cursor): no native schema constrains the output —
|
|
66
|
-
// the WorkReport rides an INSTRUCTED fenced envelope validated off the last
|
|
67
|
-
// fenced JSON (D-16c). Caller schemas on such routes were already refused by
|
|
68
|
-
// the mandatory-schema gate upstream, so this is the WorkReport-only case.
|
|
69
|
-
if (opts.transport === "validated" && !interactiveGated) {
|
|
70
|
-
return {
|
|
71
|
-
outputSchema: callerStrict ?? undefined,
|
|
72
|
-
mode: {
|
|
73
|
-
active: true,
|
|
74
|
-
source: "validated",
|
|
75
|
-
hasCallerSchema,
|
|
76
|
-
channel: "instructed_fence",
|
|
77
|
-
instruction: WORK_REPORT_FENCE_INSTRUCTION,
|
|
78
|
-
},
|
|
79
|
-
};
|
|
80
|
-
}
|
|
81
|
-
const active = opts.transport === "constrained" && opts.supportsJsonSchemaOutput && !interactiveGated;
|
|
82
|
-
if (active) {
|
|
83
|
-
// claude side_tool WITHOUT a caller schema (D-16c): arm a {work_report}-only
|
|
84
|
-
// schema on the StructuredOutput tool; the markdown final message stays the
|
|
85
|
-
// deliverable and the report rides the tool payload. Every other constrained
|
|
86
|
-
// case carries the output INSIDE the `{work_report, output}` envelope
|
|
87
|
-
// (caller schema → the strict S; no-caller final_message → output:string).
|
|
88
|
-
if (opts.channel === "side_tool" && !hasCallerSchema) {
|
|
89
|
-
return {
|
|
90
|
-
outputSchema: buildWorkReportEnvelope(null),
|
|
91
|
-
mode: {
|
|
92
|
-
active: true,
|
|
93
|
-
source: "constrained",
|
|
94
|
-
hasCallerSchema,
|
|
95
|
-
channel: "side_tool",
|
|
96
|
-
instruction: null,
|
|
97
|
-
},
|
|
98
|
-
};
|
|
99
|
-
}
|
|
100
|
-
const output = hasCallerSchema
|
|
101
|
-
? callerStrict
|
|
102
|
-
: "string";
|
|
103
|
-
return {
|
|
104
|
-
outputSchema: buildWorkReportEnvelope(output),
|
|
105
|
-
mode: {
|
|
106
|
-
active: true,
|
|
107
|
-
source: "constrained",
|
|
108
|
-
hasCallerSchema,
|
|
109
|
-
channel: "constrained_json",
|
|
110
|
-
instruction: null,
|
|
111
|
-
},
|
|
112
|
-
};
|
|
113
|
-
}
|
|
114
|
-
return {
|
|
115
|
-
// Legacy path preserved: a caller schema still rides (strictified) on a
|
|
116
|
-
// non-activated route (the mandatory-schema gate already refused
|
|
117
|
-
// schema-incapable routes upstream).
|
|
118
|
-
outputSchema: callerStrict ?? undefined,
|
|
119
|
-
mode: {
|
|
120
|
-
active: false,
|
|
121
|
-
source: "absent",
|
|
122
|
-
hasCallerSchema,
|
|
123
|
-
channel: "constrained_json",
|
|
124
|
-
instruction: null,
|
|
125
|
-
},
|
|
126
|
-
};
|
|
127
|
-
}
|
|
128
|
-
function extractOutput(obj, mode) {
|
|
129
|
-
const output = obj["output"];
|
|
130
|
-
if (mode.hasCallerSchema) {
|
|
131
|
-
// Re-serialize the S-conformant object so finalizeStructuredOutput can
|
|
132
|
-
// JSON.parse + validate it against the caller schema (the caller schema is
|
|
133
|
-
// the conformance authority for `output`, so any shape rides through here).
|
|
134
|
-
return { deliverable: output === undefined ? "" : JSON.stringify(output) };
|
|
135
|
-
}
|
|
136
|
-
// No caller schema: `output` MUST be a string deliverable. A non-string
|
|
137
|
-
// (object/array/null/number/bool) or missing `output` is a BROKEN envelope —
|
|
138
|
-
// coercing it (String({...}) => "[object Object]") would let a bogus payload
|
|
139
|
-
// like {"work_report":{"state":"completed"},"output":{}} finalize CLEAN
|
|
140
|
-
// instead of failing the WorkReport contract. Fail it here (D-16 §2).
|
|
141
|
-
if (typeof output !== "string") {
|
|
142
|
-
return { violation: "work_report envelope output must be a string" };
|
|
143
|
-
}
|
|
144
|
-
return { deliverable: output };
|
|
145
|
-
}
|
|
146
|
-
/** Extract the LAST fenced ```…``` block's body (its optional language tag
|
|
147
|
-
* stripped) and the complete prefix before its opening fence, or null when the
|
|
148
|
-
* text has no closed fence. No-regex, mechanical transport parsing (INV-049
|
|
149
|
-
* governs the typed WorkReport, not this seam). */
|
|
150
|
-
function lastFencedBlock(text) {
|
|
151
|
-
const FENCE = "```";
|
|
152
|
-
const end = text.lastIndexOf(FENCE);
|
|
153
|
-
if (end <= 0)
|
|
154
|
-
return null;
|
|
155
|
-
const start = text.lastIndexOf(FENCE, end - 1);
|
|
156
|
-
if (start < 0)
|
|
157
|
-
return null;
|
|
158
|
-
let inner = text.slice(start + FENCE.length, end);
|
|
159
|
-
const nl = inner.indexOf("\n");
|
|
160
|
-
if (nl >= 0) {
|
|
161
|
-
const firstLine = inner.slice(0, nl).trim();
|
|
162
|
-
// A bare language tag (letters/digits/±_-, no whitespace) on the opening
|
|
163
|
-
// line is dropped; a first line that is already JSON content is kept.
|
|
164
|
-
const isLangTag = firstLine.length > 0 &&
|
|
165
|
-
firstLine.length <= 20 &&
|
|
166
|
-
![...firstLine].some((ch) => ch === " " || ch === "{" || ch === "[" || ch === '"');
|
|
167
|
-
if (firstLine === "" || isLangTag)
|
|
168
|
-
inner = inner.slice(nl + 1);
|
|
169
|
-
}
|
|
170
|
-
return {
|
|
171
|
-
body: inner.trim(),
|
|
172
|
-
// Remove only the separator before the metadata footer. The caller owns
|
|
173
|
-
// any further presentation trimming; all authored markdown stays intact.
|
|
174
|
-
prefix: text.slice(0, start).trimEnd(),
|
|
175
|
-
};
|
|
176
|
-
}
|
|
177
|
-
/**
|
|
178
|
-
* Un-nest the WorkReport envelope from an active route's answer (D-16 §2). The
|
|
179
|
-
* behavior forks on `mode.channel`:
|
|
180
|
-
* - `constrained_json`: the whole answer IS `{work_report, output}` JSON.
|
|
181
|
-
* - `instructed_fence`: the LAST fenced JSON block carries metadata; the
|
|
182
|
-
* markdown before it is the deliverable. Historical fence-only envelopes
|
|
183
|
-
* fall back to their string `output`.
|
|
184
|
-
* - `side_tool`: the answer text IS the markdown deliverable; the report rides
|
|
185
|
-
* `opts.sideToolReport` (the tool payload the adapter surfaced).
|
|
186
|
-
* A non-active mode passes the answer through untouched. The WorkReport
|
|
187
|
-
* cross-field rules (completed ⇒ no required_inputs; needs_input ⇒ ≥1) are
|
|
188
|
-
* enforced HERE so a broken report is a typed contract violation.
|
|
189
|
-
*
|
|
190
|
-
* For a `constrained_json` route `answerText` is the raw `{work_report, output}`
|
|
191
|
-
* envelope (codex #19816 / QA-009: the orchestrator passes `answer.machineText()`,
|
|
192
|
-
* which yields the raw envelope even when the codex adapter pre-unwrapped the
|
|
193
|
-
* DISPLAY copy of the final message — the visible stream sees the output, the
|
|
194
|
-
* un-nest here still sees the envelope).
|
|
195
|
-
*/
|
|
196
|
-
export function unwrapWorkReportEnvelope(answerText, mode, opts = {}) {
|
|
197
|
-
if (!mode.active) {
|
|
198
|
-
return {
|
|
199
|
-
deliverable: answerText,
|
|
200
|
-
workReport: null,
|
|
201
|
-
source: mode.source,
|
|
202
|
-
contractViolation: null,
|
|
203
|
-
};
|
|
204
|
-
}
|
|
205
|
-
// side_tool: the markdown answer stays the deliverable; the report is the tool
|
|
206
|
-
// payload. A missing/malformed tool report is a typed contract failure.
|
|
207
|
-
if (mode.channel === "side_tool") {
|
|
208
|
-
if (opts.sideToolReport === undefined) {
|
|
209
|
-
return {
|
|
210
|
-
deliverable: answerText,
|
|
211
|
-
workReport: null,
|
|
212
|
-
source: mode.source,
|
|
213
|
-
contractViolation: "the StructuredOutput tool did not carry a work_report",
|
|
214
|
-
};
|
|
215
|
-
}
|
|
216
|
-
return validateWorkReport(answerText, opts.sideToolReport, mode.source);
|
|
217
|
-
}
|
|
218
|
-
let text = answerText.trim();
|
|
219
|
-
let instructedPrefix = null;
|
|
220
|
-
if (mode.channel === "instructed_fence") {
|
|
221
|
-
const fenced = lastFencedBlock(answerText);
|
|
222
|
-
if (fenced === null) {
|
|
223
|
-
return {
|
|
224
|
-
deliverable: answerText,
|
|
225
|
-
workReport: null,
|
|
226
|
-
source: mode.source,
|
|
227
|
-
contractViolation: "final answer has no fenced work_report envelope",
|
|
228
|
-
};
|
|
229
|
-
}
|
|
230
|
-
text = fenced.body;
|
|
231
|
-
instructedPrefix = fenced.prefix;
|
|
232
|
-
}
|
|
233
|
-
let parsed;
|
|
234
|
-
try {
|
|
235
|
-
parsed = JSON.parse(text);
|
|
236
|
-
}
|
|
237
|
-
catch {
|
|
238
|
-
return {
|
|
239
|
-
deliverable: answerText,
|
|
240
|
-
workReport: null,
|
|
241
|
-
source: mode.source,
|
|
242
|
-
contractViolation: "final answer is not the JSON work_report envelope",
|
|
243
|
-
};
|
|
244
|
-
}
|
|
245
|
-
if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
|
|
246
|
-
return {
|
|
247
|
-
deliverable: answerText,
|
|
248
|
-
workReport: null,
|
|
249
|
-
source: mode.source,
|
|
250
|
-
contractViolation: "work_report envelope is not a JSON object",
|
|
251
|
-
};
|
|
252
|
-
}
|
|
253
|
-
const obj = parsed;
|
|
254
|
-
// Cursor's current contract makes the complete normal markdown canonical.
|
|
255
|
-
// The legacy output slot is consulted only for historical fence-only replies;
|
|
256
|
-
// when both exist the prefix wins deterministically, without length/heading
|
|
257
|
-
// heuristics that could silently replace a full answer with a summary.
|
|
258
|
-
if (mode.channel === "instructed_fence" && instructedPrefix?.trim()) {
|
|
259
|
-
return validateWorkReport(instructedPrefix, obj["work_report"], mode.source);
|
|
260
|
-
}
|
|
261
|
-
// A footer-only reply is still a valid report. Each consumer keeps its
|
|
262
|
-
// established product rule: Ask/report may surface honest "(no output)",
|
|
263
|
-
// Plan/reducer require prose, and a mutating attempt may have a real diff.
|
|
264
|
-
// Only a PRESENT legacy output must satisfy the old string shape.
|
|
265
|
-
if (mode.channel === "instructed_fence" && obj["output"] === undefined) {
|
|
266
|
-
return validateWorkReport("", obj["work_report"], mode.source);
|
|
267
|
-
}
|
|
268
|
-
const extracted = extractOutput(obj, mode);
|
|
269
|
-
if ("violation" in extracted) {
|
|
270
|
-
return {
|
|
271
|
-
deliverable: answerText,
|
|
272
|
-
workReport: null,
|
|
273
|
-
source: mode.source,
|
|
274
|
-
contractViolation: extracted.violation,
|
|
275
|
-
};
|
|
276
|
-
}
|
|
277
|
-
return validateWorkReport(extracted.deliverable, obj["work_report"], mode.source);
|
|
278
|
-
}
|
|
279
|
-
/** Parse + cross-field-validate a raw work_report value against a resolved
|
|
280
|
-
* deliverable. The cross-field rules (completed ⇒ no required_inputs;
|
|
281
|
-
* needs_input ⇒ ≥1) live HERE, not on the permissive Zod wire type. */
|
|
282
|
-
function validateWorkReport(deliverable, rawReport, source) {
|
|
283
|
-
const wr = WorkReport.safeParse(rawReport);
|
|
284
|
-
if (!wr.success) {
|
|
285
|
-
return {
|
|
286
|
-
deliverable,
|
|
287
|
-
workReport: null,
|
|
288
|
-
source,
|
|
289
|
-
contractViolation: `work_report missing or malformed: ${wr.error.issues[0]?.message ?? "invalid"}`,
|
|
290
|
-
};
|
|
291
|
-
}
|
|
292
|
-
// ONE redaction owner for every WorkReport transport: the model-authored
|
|
293
|
-
// locator/description strings flow VERBATIM into telemetry yaml, decision
|
|
294
|
-
// facts, and the CLI needsInputLabel — the last reads the local artifact and
|
|
295
|
-
// bypasses serve-time redaction — so a token pasted into a required_input
|
|
296
|
-
// would otherwise persist unredacted at rest. Redact here, before the report
|
|
297
|
-
// is handed to any of them. (The cross-field checks below read only state and
|
|
298
|
-
// list length, so redaction order does not affect them.)
|
|
299
|
-
const report = {
|
|
300
|
-
...wr.data,
|
|
301
|
-
required_inputs: wr.data.required_inputs.map((ri) => ({
|
|
302
|
-
...ri,
|
|
303
|
-
locator: ri.locator === null ? null : redactSecrets(ri.locator),
|
|
304
|
-
description: redactSecrets(ri.description),
|
|
305
|
-
})),
|
|
306
|
-
};
|
|
307
|
-
if (report.state === "completed" && report.required_inputs.length > 0) {
|
|
308
|
-
return {
|
|
309
|
-
deliverable,
|
|
310
|
-
workReport: null,
|
|
311
|
-
source,
|
|
312
|
-
contractViolation: "a completed work_report must not list required_inputs",
|
|
313
|
-
reportProblem: { kind: "completed_with_required_inputs", reported: report },
|
|
314
|
-
};
|
|
315
|
-
}
|
|
316
|
-
if (report.state === "needs_input" && report.required_inputs.length === 0) {
|
|
317
|
-
return {
|
|
318
|
-
deliverable,
|
|
319
|
-
workReport: null,
|
|
320
|
-
source,
|
|
321
|
-
contractViolation: "a needs_input work_report must list at least one required_input",
|
|
322
|
-
};
|
|
323
|
-
}
|
|
324
|
-
return { deliverable, workReport: report, source, contractViolation: null };
|
|
325
|
-
}
|
|
326
1
|
/**
|
|
327
2
|
* QA-036: the terminal outcome facts for a read-only run that produced NO
|
|
328
3
|
* successful attempt. The D8 legacy mapping treated ANY web-blocked run as a
|
|
@@ -344,12 +19,14 @@ export function readOnlyNoSuccessTerminal(opts) {
|
|
|
344
19
|
/**
|
|
345
20
|
* The unified finalizer. Precedence (hardest signal wins):
|
|
346
21
|
* 1. terminal context exhaustion with no completed report ⇒ interrupted;
|
|
347
|
-
* 2. a broken WorkReport contract on a
|
|
22
|
+
* 2. a broken WorkReport contract on a NATIVE route ⇒ hard failure
|
|
348
23
|
* (never prose-success);
|
|
349
24
|
* 3. a valid needs_input/incomplete report ⇒ veto (lifecycle stays, run is
|
|
350
25
|
* non-applyable, exit non-zero) — a `completed` claim NEVER overrides a
|
|
351
26
|
* harness error / failed gate / missing evidence;
|
|
352
|
-
* 4. otherwise the disclosed work_state
|
|
27
|
+
* 4. otherwise the disclosed work_state: completed, or unverified — with the
|
|
28
|
+
* route's own source and the typed reason when an INSTRUCTED footer was
|
|
29
|
+
* missing or broken, `absent` when the route carries no transport.
|
|
353
30
|
*/
|
|
354
31
|
export function finalizeAttempt(input) {
|
|
355
32
|
const completed = input.workReport?.state === "completed";
|
|
@@ -387,12 +64,14 @@ export function finalizeAttempt(input) {
|
|
|
387
64
|
outcomeClass: "veto",
|
|
388
65
|
};
|
|
389
66
|
}
|
|
67
|
+
const unverified = report ? null : (input.workReportUnverified ?? null);
|
|
390
68
|
return {
|
|
391
69
|
deliverablePresent: input.deliverableEvidence,
|
|
392
70
|
harnessErrored: input.harnessErrored,
|
|
393
71
|
workState: {
|
|
394
72
|
state: report?.state === "completed" ? "completed" : "unverified",
|
|
395
|
-
source: report ? input.workReportSource : "absent",
|
|
73
|
+
source: report || unverified ? input.workReportSource : "absent",
|
|
74
|
+
...(unverified ? { unverified_reason: unverified.reason } : {}),
|
|
396
75
|
},
|
|
397
76
|
reason: null,
|
|
398
77
|
outcomeClass: "clean",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attemptFinalize.js","sourceRoot":"","sources":["../src/attemptFinalize.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"attemptFinalize.js","sourceRoot":"","sources":["../src/attemptFinalize.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,9 +4,11 @@ import type { AttemptOutcomeClass } from "./attemptFinalize.js";
|
|
|
4
4
|
import type { AttemptTelemetry } from "./attemptTelemetry.js";
|
|
5
5
|
import type { DeclaredFailure } from "./runTerminalResults.js";
|
|
6
6
|
import type { AppliedAttemptFacts } from "./delegatedHome.js";
|
|
7
|
-
import type {
|
|
7
|
+
import type { CaptureRefusal } from "./secretDiff.js";
|
|
8
|
+
import type { SecretLikeFinding } from "./persistedPatch.js";
|
|
8
9
|
import { type DirectoryCandidate } from "./directoryCandidate.js";
|
|
9
|
-
|
|
10
|
+
import type { ContinuityTerminalFacts } from "./continuity-terminal.js";
|
|
11
|
+
export interface CandidateRun extends ContinuityTerminalFacts {
|
|
10
12
|
attemptId: string;
|
|
11
13
|
harnessId: string;
|
|
12
14
|
label: string;
|
|
@@ -23,10 +25,17 @@ export interface CandidateRun {
|
|
|
23
25
|
errors: string[];
|
|
24
26
|
telemetry: AttemptTelemetry;
|
|
25
27
|
infraPhase?: "workspace" | "harness";
|
|
26
|
-
/**
|
|
27
|
-
*
|
|
28
|
-
|
|
29
|
-
|
|
28
|
+
/** The saved copy of `diff` when secret-like strings had to be hidden in it
|
|
29
|
+
* (INV-062). `diff` itself is always the exact patch; absent = identical. */
|
|
30
|
+
persistedDiff?: string;
|
|
31
|
+
/** Disclosure of what the saved copies hide: paths and counts, never values. */
|
|
32
|
+
secretLike?: SecretLikeFinding;
|
|
33
|
+
/** The candidate's changes could not be captured at all. Secret-like content
|
|
34
|
+
* is never a refusal; this is the honest name of a failed capture. */
|
|
35
|
+
captureRefusal?: CaptureRefusal;
|
|
36
|
+
/** Where the exact bytes of an isolated candidate still are when its private
|
|
37
|
+
* exact patch object could not be written (the envelope is kept, not deleted). */
|
|
38
|
+
exactBytesRetainedAt?: string;
|
|
30
39
|
/** D-16 r7: the finalizer's outcome class for THIS attempt. An `interrupted`
|
|
31
40
|
* candidate (terminal context exhaustion with NO completed WorkReport) is
|
|
32
41
|
* never reviewed/arbitrated/adopted as clean — it terminalizes the run
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"candidateEvidence.d.ts","sourceRoot":"","sources":["../src/candidateEvidence.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAClG,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"candidateEvidence.d.ts","sourceRoot":"","sources":["../src/candidateEvidence.ts"],"names":[],"mappings":"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"}
|
|
@@ -36,7 +36,7 @@ export function unanimousDeclaredFailure(runs) {
|
|
|
36
36
|
* be reviewed/arbitrated/adopted?", shared by the race, convergence, and
|
|
37
37
|
* synthesis lanes (D-16 r8) so no sibling path re-derives the veto. */
|
|
38
38
|
export function isWorkingCandidate(run) {
|
|
39
|
-
return (!run.
|
|
39
|
+
return (!run.captureRefusal &&
|
|
40
40
|
run.outcomeClass !== "interrupted" &&
|
|
41
41
|
(!run.errored || run.diff.length > 0 || directoryHasOutput(run.files)));
|
|
42
42
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"candidateEvidence.js","sourceRoot":"","sources":["../src/candidateEvidence.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"candidateEvidence.js","sourceRoot":"","sources":["../src/candidateEvidence.ts"],"names":[],"mappings":"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"}
|