@telora/daemon 0.22.160 → 0.22.181
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build-info.json +10 -3
- package/dist/audit/audit-phase.d.ts +11 -1
- package/dist/audit/audit-phase.d.ts.map +1 -1
- package/dist/audit/audit-phase.js +2 -14
- package/dist/audit/audit-phase.js.map +1 -1
- package/dist/audit/audit-prompt.d.ts +7 -4
- package/dist/audit/audit-prompt.d.ts.map +1 -1
- package/dist/audit/audit-prompt.js +34 -23
- package/dist/audit/audit-prompt.js.map +1 -1
- package/dist/completion/advancement-stall-watchdog.d.ts +12 -0
- package/dist/completion/advancement-stall-watchdog.d.ts.map +1 -0
- package/dist/completion/advancement-stall-watchdog.js +79 -0
- package/dist/completion/advancement-stall-watchdog.js.map +1 -0
- package/dist/completion/arm-visible-progress-inputs.d.ts +51 -0
- package/dist/completion/arm-visible-progress-inputs.d.ts.map +1 -0
- package/dist/completion/arm-visible-progress-inputs.js +19 -0
- package/dist/completion/arm-visible-progress-inputs.js.map +1 -0
- package/dist/completion/commit-verdict-release.d.ts +37 -1
- package/dist/completion/commit-verdict-release.d.ts.map +1 -1
- package/dist/completion/commit-verdict-release.js +90 -15
- package/dist/completion/commit-verdict-release.js.map +1 -1
- package/dist/completion/delivery-advancement-guard.d.ts.map +1 -1
- package/dist/completion/delivery-advancement-guard.js +1 -0
- package/dist/completion/delivery-advancement-guard.js.map +1 -1
- package/dist/completion/event-entry-phases.d.ts.map +1 -1
- package/dist/completion/event-entry-phases.js +9 -2
- package/dist/completion/event-entry-phases.js.map +1 -1
- package/dist/completion/event-phases.d.ts +15 -8
- package/dist/completion/event-phases.d.ts.map +1 -1
- package/dist/completion/event-phases.js +26 -64
- package/dist/completion/event-phases.js.map +1 -1
- package/dist/completion/event.d.ts.map +1 -1
- package/dist/completion/event.js +7 -1
- package/dist/completion/event.js.map +1 -1
- package/dist/completion/review-exit-verdict-gate.d.ts +11 -5
- package/dist/completion/review-exit-verdict-gate.d.ts.map +1 -1
- package/dist/completion/review-exit-verdict-gate.js +6 -3
- package/dist/completion/review-exit-verdict-gate.js.map +1 -1
- package/dist/completion/shutdown-attribution.d.ts +107 -0
- package/dist/completion/shutdown-attribution.d.ts.map +1 -0
- package/dist/completion/shutdown-attribution.js +106 -0
- package/dist/completion/shutdown-attribution.js.map +1 -0
- package/dist/completion/team-lifecycle.d.ts.map +1 -1
- package/dist/completion/team-lifecycle.js +16 -0
- package/dist/completion/team-lifecycle.js.map +1 -1
- package/dist/delivery/commit-verdict-hold.d.ts.map +1 -1
- package/dist/delivery/commit-verdict-hold.js +2 -1
- package/dist/delivery/commit-verdict-hold.js.map +1 -1
- package/dist/delivery/delivery-lifecycle.d.ts.map +1 -1
- package/dist/delivery/delivery-lifecycle.js +1 -0
- package/dist/delivery/delivery-lifecycle.js.map +1 -1
- package/dist/directive/directive-assembly.d.ts +19 -1
- package/dist/directive/directive-assembly.d.ts.map +1 -1
- package/dist/directive/directive-assembly.js +15 -3
- package/dist/directive/directive-assembly.js.map +1 -1
- package/dist/directive/directive-dispatch.d.ts +67 -2
- package/dist/directive/directive-dispatch.d.ts.map +1 -1
- package/dist/directive/directive-dispatch.js +188 -45
- package/dist/directive/directive-dispatch.js.map +1 -1
- package/dist/directive/directive-executor.d.ts +2 -2
- package/dist/directive/directive-executor.d.ts.map +1 -1
- package/dist/directive/directive-executor.js +49 -12
- package/dist/directive/directive-executor.js.map +1 -1
- package/dist/directive/directive-queue.d.ts.map +1 -1
- package/dist/directive/directive-queue.js +1 -0
- package/dist/directive/directive-queue.js.map +1 -1
- package/dist/directive/stage-tracker.d.ts +20 -0
- package/dist/directive/stage-tracker.d.ts.map +1 -1
- package/dist/directive/stage-tracker.js +29 -1
- package/dist/directive/stage-tracker.js.map +1 -1
- package/dist/directive/stranded-review-reroute.js +1 -1
- package/dist/directive/stranded-review-reroute.js.map +1 -1
- package/dist/focus/focus-engine.d.ts.map +1 -1
- package/dist/focus/focus-engine.js +5 -1
- package/dist/focus/focus-engine.js.map +1 -1
- package/dist/focus/focus-executor.d.ts.map +1 -1
- package/dist/focus/focus-executor.js +14 -3
- package/dist/focus/focus-executor.js.map +1 -1
- package/dist/focus/focus-phase.d.ts +11 -1
- package/dist/focus/focus-phase.d.ts.map +1 -1
- package/dist/focus/focus-phase.js +12 -2
- package/dist/focus/focus-phase.js.map +1 -1
- package/dist/focus/focus-team-state.js +1 -1
- package/dist/focus/listener-auto-advance.d.ts.map +1 -1
- package/dist/focus/listener-auto-advance.js +1 -0
- package/dist/focus/listener-auto-advance.js.map +1 -1
- package/dist/focus/listener-spawn.d.ts.map +1 -1
- package/dist/focus/listener-spawn.js +33 -10
- package/dist/focus/listener-spawn.js.map +1 -1
- package/dist/focus/listener.d.ts.map +1 -1
- package/dist/focus/listener.js +21 -8
- package/dist/focus/listener.js.map +1 -1
- package/dist/focus/live-arm-facts.d.ts +10 -0
- package/dist/focus/live-arm-facts.d.ts.map +1 -0
- package/dist/focus/live-arm-facts.js +47 -0
- package/dist/focus/live-arm-facts.js.map +1 -0
- package/dist/focus/pending-review-approved-head.d.ts +1 -1
- package/dist/focus/pending-review-approved-head.d.ts.map +1 -1
- package/dist/focus/pending-review-approved-head.js +4 -3
- package/dist/focus/pending-review-approved-head.js.map +1 -1
- package/dist/focus/recorded-new-intent.d.ts +81 -0
- package/dist/focus/recorded-new-intent.d.ts.map +1 -0
- package/dist/focus/recorded-new-intent.js +147 -0
- package/dist/focus/recorded-new-intent.js.map +1 -0
- package/dist/focus/stage-watermark-seeding.d.ts +39 -0
- package/dist/focus/stage-watermark-seeding.d.ts.map +1 -0
- package/dist/focus/stage-watermark-seeding.js +60 -0
- package/dist/focus/stage-watermark-seeding.js.map +1 -0
- package/dist/focus-stage-lifecycle/wedge-watchdog.d.ts +19 -1
- package/dist/focus-stage-lifecycle/wedge-watchdog.d.ts.map +1 -1
- package/dist/focus-stage-lifecycle/wedge-watchdog.js +19 -3
- package/dist/focus-stage-lifecycle/wedge-watchdog.js.map +1 -1
- package/dist/prompt/focus-prompt-builder.d.ts +2 -1
- package/dist/prompt/focus-prompt-builder.d.ts.map +1 -1
- package/dist/prompt/focus-prompt-builder.js +10 -1
- package/dist/prompt/focus-prompt-builder.js.map +1 -1
- package/dist/prompt/team-prompt-base.d.ts.map +1 -1
- package/dist/prompt/team-prompt-base.js +4 -2
- package/dist/prompt/team-prompt-base.js.map +1 -1
- package/dist/prompt-sections/execution-sections.d.ts +22 -1
- package/dist/prompt-sections/execution-sections.d.ts.map +1 -1
- package/dist/prompt-sections/execution-sections.js +23 -2
- package/dist/prompt-sections/execution-sections.js.map +1 -1
- package/dist/prompt-sections/shared.d.ts +9 -0
- package/dist/prompt-sections/shared.d.ts.map +1 -1
- package/dist/prompt-sections/shared.js +2 -1
- package/dist/prompt-sections/shared.js.map +1 -1
- package/dist/queries/arm-covered-targets.d.ts +84 -0
- package/dist/queries/arm-covered-targets.d.ts.map +1 -0
- package/dist/queries/arm-covered-targets.js +129 -0
- package/dist/queries/arm-covered-targets.js.map +1 -0
- package/dist/queries/deliveries.d.ts +3 -0
- package/dist/queries/deliveries.d.ts.map +1 -1
- package/dist/queries/deliveries.js +10 -3
- package/dist/queries/deliveries.js.map +1 -1
- package/dist/queries/delivery-gate-state.d.ts +10 -0
- package/dist/queries/delivery-gate-state.d.ts.map +1 -1
- package/dist/queries/delivery-gate-state.js +2 -2
- package/dist/queries/delivery-gate-state.js.map +1 -1
- package/dist/queries/delivery-write-discipline.d.ts.map +1 -1
- package/dist/queries/delivery-write-discipline.js +2 -1
- package/dist/queries/delivery-write-discipline.js.map +1 -1
- package/dist/queries/directive-undelivered.d.ts +104 -0
- package/dist/queries/directive-undelivered.d.ts.map +1 -0
- package/dist/queries/directive-undelivered.js +162 -0
- package/dist/queries/directive-undelivered.js.map +1 -0
- package/dist/queries/focus-discovery.d.ts +16 -0
- package/dist/queries/focus-discovery.d.ts.map +1 -1
- package/dist/queries/focus-discovery.js +3 -0
- package/dist/queries/focus-discovery.js.map +1 -1
- package/dist/queries/focuses.d.ts.map +1 -1
- package/dist/queries/focuses.js +3 -1
- package/dist/queries/focuses.js.map +1 -1
- package/dist/queries/issues.d.ts.map +1 -1
- package/dist/queries/issues.js +1 -0
- package/dist/queries/issues.js.map +1 -1
- package/dist/queries/recorded-targets-record.d.ts +46 -0
- package/dist/queries/recorded-targets-record.d.ts.map +1 -0
- package/dist/queries/recorded-targets-record.js +29 -0
- package/dist/queries/recorded-targets-record.js.map +1 -0
- package/dist/queries/schemas.d.ts +4 -0
- package/dist/queries/schemas.d.ts.map +1 -1
- package/dist/queries/schemas.js +14 -0
- package/dist/queries/schemas.js.map +1 -1
- package/dist/queries/shared.js +1 -1
- package/dist/queries/verification.js +1 -1
- package/dist/queries/workflows.d.ts.map +1 -1
- package/dist/queries/workflows.js +1 -0
- package/dist/queries/workflows.js.map +1 -1
- package/dist/resolvers/assembly-engine.d.ts +13 -0
- package/dist/resolvers/assembly-engine.d.ts.map +1 -1
- package/dist/resolvers/assembly-engine.js +1 -1
- package/dist/resolvers/assembly-engine.js.map +1 -1
- package/dist/resolvers/compose/loop-delivery-index-compose.d.ts +23 -3
- package/dist/resolvers/compose/loop-delivery-index-compose.d.ts.map +1 -1
- package/dist/resolvers/compose/loop-delivery-index-compose.js +90 -43
- package/dist/resolvers/compose/loop-delivery-index-compose.js.map +1 -1
- package/dist/resolvers/delivery-listing.d.ts +27 -0
- package/dist/resolvers/delivery-listing.d.ts.map +1 -1
- package/dist/resolvers/delivery-listing.js +52 -36
- package/dist/resolvers/delivery-listing.js.map +1 -1
- package/dist/resolvers/loop-delivery-index.d.ts +8 -0
- package/dist/resolvers/loop-delivery-index.d.ts.map +1 -1
- package/dist/resolvers/loop-delivery-index.js +68 -7
- package/dist/resolvers/loop-delivery-index.js.map +1 -1
- package/dist/resolvers/shared/loop.d.ts +7 -0
- package/dist/resolvers/shared/loop.d.ts.map +1 -1
- package/dist/resolvers/shared/loop.js.map +1 -1
- package/dist/resolvers/shared/review-window-commits.d.ts.map +1 -1
- package/dist/resolvers/shared/review-window-commits.js +2 -1
- package/dist/resolvers/shared/review-window-commits.js.map +1 -1
- package/dist/spawn/helpers.d.ts.map +1 -1
- package/dist/spawn/helpers.js +4 -2
- package/dist/spawn/helpers.js.map +1 -1
- package/dist/spawn/lead-continuation.d.ts.map +1 -1
- package/dist/spawn/lead-continuation.js +8 -2
- package/dist/spawn/lead-continuation.js.map +1 -1
- package/dist/spawn/lead-send.d.ts +97 -0
- package/dist/spawn/lead-send.d.ts.map +1 -0
- package/dist/spawn/lead-send.js +80 -0
- package/dist/spawn/lead-send.js.map +1 -0
- package/dist/spawn/process-group-kill.d.ts.map +1 -1
- package/dist/spawn/process-group-kill.js +12 -1
- package/dist/spawn/process-group-kill.js.map +1 -1
- package/dist/spawn/process-spawn.d.ts.map +1 -1
- package/dist/spawn/process-spawn.js +6 -0
- package/dist/spawn/process-spawn.js.map +1 -1
- package/dist/spawn/prompt-assembly.d.ts +8 -0
- package/dist/spawn/prompt-assembly.d.ts.map +1 -1
- package/dist/spawn/prompt-assembly.js +2 -1
- package/dist/spawn/prompt-assembly.js.map +1 -1
- package/dist/spawn/spawn-decision.d.ts +25 -1
- package/dist/spawn/spawn-decision.d.ts.map +1 -1
- package/dist/spawn/spawn-decision.js +19 -3
- package/dist/spawn/spawn-decision.js.map +1 -1
- package/dist/spawn/worktree-session.d.ts +3 -0
- package/dist/spawn/worktree-session.d.ts.map +1 -1
- package/dist/spawn/worktree-session.js +2 -1
- package/dist/spawn/worktree-session.js.map +1 -1
- package/dist/testing/fixtures/index.js +1 -1
- package/dist/types/focus.d.ts +19 -0
- package/dist/types/focus.d.ts.map +1 -1
- package/dist/types/index.js +1 -1
- package/dist/verify/commit-gate-configured.d.ts.map +1 -1
- package/dist/verify/commit-gate-configured.js +1 -1
- package/dist/verify/commit-gate-configured.js.map +1 -1
- package/dist/verify/commit-verdict-pull.d.ts +48 -0
- package/dist/verify/commit-verdict-pull.d.ts.map +1 -0
- package/dist/verify/commit-verdict-pull.js +148 -0
- package/dist/verify/commit-verdict-pull.js.map +1 -0
- package/dist/verify/commit-verdict-record.js +1 -1
- package/dist/verify/credit-rearm.js +1 -1
- package/dist/verify/credit-rearm.js.map +1 -1
- package/dist/verify/default-on-guards.d.ts +74 -0
- package/dist/verify/default-on-guards.d.ts.map +1 -0
- package/dist/verify/default-on-guards.js +305 -0
- package/dist/verify/default-on-guards.js.map +1 -0
- package/dist/verify/explicit-rearm.d.ts.map +1 -1
- package/dist/verify/explicit-rearm.js +1 -0
- package/dist/verify/explicit-rearm.js.map +1 -1
- package/dist/verify/gate-run-registry.d.ts.map +1 -1
- package/dist/verify/gate-run-registry.js +1 -0
- package/dist/verify/gate-run-registry.js.map +1 -1
- package/dist/verify/injection-stamp.d.ts +30 -0
- package/dist/verify/injection-stamp.d.ts.map +1 -1
- package/dist/verify/injection-stamp.js +37 -1
- package/dist/verify/injection-stamp.js.map +1 -1
- package/dist/verify/judged-ancestor.d.ts +41 -0
- package/dist/verify/judged-ancestor.d.ts.map +1 -0
- package/dist/verify/judged-ancestor.js +101 -0
- package/dist/verify/judged-ancestor.js.map +1 -0
- package/dist/verify/no-own-delta-verdict.d.ts +7 -2
- package/dist/verify/no-own-delta-verdict.d.ts.map +1 -1
- package/dist/verify/no-own-delta-verdict.js +14 -17
- package/dist/verify/no-own-delta-verdict.js.map +1 -1
- package/dist/verify/recorded-targets.d.ts +103 -0
- package/dist/verify/recorded-targets.d.ts.map +1 -0
- package/dist/verify/recorded-targets.js +159 -0
- package/dist/verify/recorded-targets.js.map +1 -0
- package/dist/verify/rework-attribution.d.ts +71 -0
- package/dist/verify/rework-attribution.d.ts.map +1 -0
- package/dist/verify/rework-attribution.js +263 -0
- package/dist/verify/rework-attribution.js.map +1 -0
- package/dist/verify/shortfall-rulings.d.ts.map +1 -1
- package/dist/verify/shortfall-rulings.js +3 -2
- package/dist/verify/shortfall-rulings.js.map +1 -1
- package/dist/verify/verification-boundary-env.d.ts +63 -15
- package/dist/verify/verification-boundary-env.d.ts.map +1 -1
- package/dist/verify/verification-boundary-env.js +81 -12
- package/dist/verify/verification-boundary-env.js.map +1 -1
- package/dist/verify/verification-commit-sharing.d.ts.map +1 -1
- package/dist/verify/verification-commit-sharing.js +2 -1
- package/dist/verify/verification-commit-sharing.js.map +1 -1
- package/dist/verify/verification-config.d.ts.map +1 -1
- package/dist/verify/verification-config.js +1 -0
- package/dist/verify/verification-config.js.map +1 -1
- package/dist/verify/verification-default-on.d.ts +0 -32
- package/dist/verify/verification-default-on.d.ts.map +1 -1
- package/dist/verify/verification-default-on.js +10 -234
- package/dist/verify/verification-default-on.js.map +1 -1
- package/dist/verify/verification-deps-default.d.ts.map +1 -1
- package/dist/verify/verification-deps-default.js +24 -2
- package/dist/verify/verification-deps-default.js.map +1 -1
- package/dist/verify/verification-deps.d.ts +17 -1
- package/dist/verify/verification-deps.d.ts.map +1 -1
- package/dist/verify/verification-engine.d.ts +2 -1
- package/dist/verify/verification-engine.d.ts.map +1 -1
- package/dist/verify/verification-engine.js +62 -50
- package/dist/verify/verification-engine.js.map +1 -1
- package/dist/verify/verification-feedback.d.ts +1 -1
- package/dist/verify/verification-feedback.d.ts.map +1 -1
- package/dist/verify/verification-feedback.js +5 -0
- package/dist/verify/verification-feedback.js.map +1 -1
- package/dist/verify/verification-rework-issue.d.ts +48 -7
- package/dist/verify/verification-rework-issue.d.ts.map +1 -1
- package/dist/verify/verification-rework-issue.js +111 -9
- package/dist/verify/verification-rework-issue.js.map +1 -1
- package/dist/verify/verify-restatement.d.ts +27 -33
- package/dist/verify/verify-restatement.d.ts.map +1 -1
- package/dist/verify/verify-restatement.js +74 -1
- package/dist/verify/verify-restatement.js.map +1 -1
- package/package.json +2 -2
|
@@ -29,6 +29,31 @@
|
|
|
29
29
|
* verify_failed iteration cap stays the bound. A run that judged no known commit
|
|
30
30
|
* dedupes on open work alone.
|
|
31
31
|
*
|
|
32
|
+
* WHOSE failure: ONE branch-level red is ONE piece of open work. A focus's
|
|
33
|
+
* deliveries share one commit's verdict (verify/verification-commit-sharing.ts), so
|
|
34
|
+
* a filing that names no owner turns one red into a Bug on every delivery sitting in
|
|
35
|
+
* verify -- each naming a gate run that delivery never made, and each costing a
|
|
36
|
+
* review cycle out of the arm's budget. Every filing that knows the focus its commit
|
|
37
|
+
* belongs to asks verify/rework-attribution.ts who owns the failure first, and files
|
|
38
|
+
* only there. A delivery that shares the verdict still TAKES it -- it routes to
|
|
39
|
+
* verify_failed and carries the failure on its gate_state exactly as before; what it
|
|
40
|
+
* no longer carries is a work item describing someone else's run.
|
|
41
|
+
*
|
|
42
|
+
* HOW MANY, separately from WHO. The owner is chosen from LIVE state -- the focus's
|
|
43
|
+
* deliveries currently in verify -- and that set MOVES: the moment the chosen owner
|
|
44
|
+
* takes its Bug the open-work pass routes it to verify_failed, so a sibling retrying
|
|
45
|
+
* the same failed commit is offered a smaller set and names a different owner. A
|
|
46
|
+
* single-owner rule alone therefore cannot carry a per-COMMIT invariant across time.
|
|
47
|
+
* So the invariant is enforced where it is stated -- on the commit: the "already
|
|
48
|
+
* filed" question is asked of the whole FOCUS, not of one delivery, and no delivery
|
|
49
|
+
* files for a commit another already carries, whoever the selection names. Ownership
|
|
50
|
+
* decides who is told; this decides how many are. It needs no new record, because the
|
|
51
|
+
* record already exists: a rework Bug's own title carries its commit, so the first
|
|
52
|
+
* filing IS the durable statement that this commit's rework is owned -- one that
|
|
53
|
+
* survives a restart, a status change and a re-selection alike. A focus read that
|
|
54
|
+
* FAILS answers "unknown" and files nothing this poll (the owed filing is retried),
|
|
55
|
+
* because a guess here is the fan-out itself.
|
|
56
|
+
*
|
|
32
57
|
* Best-effort, then retried: a read or create failure is logged and files nothing
|
|
33
58
|
* -- it must never block the verify_failed route it rides with -- and leaves the
|
|
34
59
|
* filing OWED. A delivery back in verify at that same failed commit (the HEAD
|
|
@@ -46,13 +71,14 @@ import { getFocusDeliveries } from '../queries/focuses.js';
|
|
|
46
71
|
import { readCommitVerdict } from './commit-verdict-record.js';
|
|
47
72
|
import { readVerificationHistory } from '../queries/delivery-gate-state.js';
|
|
48
73
|
import { OPEN_ISSUE_STATUSES, CONTEXT_GROUP_TYPE } from '../shell/constants.js';
|
|
74
|
+
import { deliveryOwnsFailure, selectReworkOwner, unattributableOwner } from './rework-attribution.js';
|
|
49
75
|
import { createLogger } from '../shell/log.js';
|
|
50
76
|
const log = createLogger({ module: 'verification' });
|
|
51
77
|
/** Title prefix of a rework Bug; the failed commit follows it. */
|
|
52
78
|
export const REWORK_ISSUE_TITLE_PREFIX = 'Verify gate failed at';
|
|
53
79
|
/** How many failing tests the Bug description lists before pointing at the log. */
|
|
54
80
|
const MAX_LISTED_TESTS = 30;
|
|
55
|
-
export const defaultReworkIssueDeps = () => ({ getDeliveryIssues, createIssue });
|
|
81
|
+
export const defaultReworkIssueDeps = () => ({ getDeliveryIssues, createIssue, getFocusDeliveries, deliveryOwnsFailure });
|
|
56
82
|
/** The rework Bug's title for a failed commit. Pure. */
|
|
57
83
|
export function reworkIssueTitle(failure) {
|
|
58
84
|
const at = failure.sha ? failure.sha.slice(0, 12) : 'an unrecorded commit';
|
|
@@ -94,6 +120,13 @@ export function reworkIssueDescription(failure) {
|
|
|
94
120
|
* work issue and none was filed for this commit (module header). Never throws.
|
|
95
121
|
*/
|
|
96
122
|
export async function fileVerificationReworkIssue(deliveryId, failure, deps = defaultReworkIssueDeps()) {
|
|
123
|
+
// ONE branch-level red is ONE piece of open work: a delivery that merely shared the
|
|
124
|
+
// verdict carries no Bug of its own (verify/rework-attribution.ts).
|
|
125
|
+
const at = failure.at;
|
|
126
|
+
if (at?.productId && failure.sha && deps.deliveryOwnsFailure
|
|
127
|
+
&& !(await deps.deliveryOwnsFailure(deliveryId, { productId: at.productId, focusId: at.focusId, sha: failure.sha }))) {
|
|
128
|
+
return { filed: false, reason: 'not_its_failure' };
|
|
129
|
+
}
|
|
97
130
|
let issues;
|
|
98
131
|
try {
|
|
99
132
|
issues = await deps.getDeliveryIssues(deliveryId);
|
|
@@ -110,6 +143,17 @@ export async function fileVerificationReworkIssue(deliveryId, failure, deps = de
|
|
|
110
143
|
filedAt.set(deliveryId, failure.sha);
|
|
111
144
|
return { filed: false, reason: 'already_filed' };
|
|
112
145
|
}
|
|
146
|
+
// One red is one Bug on the FOCUS, not one per delivery that is asked -- and who is
|
|
147
|
+
// asked moves as deliveries are routed (module header).
|
|
148
|
+
if (commitPrefix && at) {
|
|
149
|
+
const elsewhere = await reworkFiledElsewhereOnFocus(at.focusId, deliveryId, commitPrefix, deps);
|
|
150
|
+
if (elsewhere === 'filed') {
|
|
151
|
+
filedAt.set(deliveryId, failure.sha);
|
|
152
|
+
return { filed: false, reason: 'already_filed' };
|
|
153
|
+
}
|
|
154
|
+
if (elsewhere === 'unknown')
|
|
155
|
+
return { filed: false, reason: 'read_failed' };
|
|
156
|
+
}
|
|
113
157
|
const title = reworkIssueTitle(failure);
|
|
114
158
|
try {
|
|
115
159
|
const issueId = await deps.createIssue(deliveryId, title, reworkIssueDescription(failure), 'Bug', 'P0');
|
|
@@ -123,6 +167,36 @@ export async function fileVerificationReworkIssue(deliveryId, failure, deps = de
|
|
|
123
167
|
return { filed: false, reason: 'create_failed' };
|
|
124
168
|
}
|
|
125
169
|
}
|
|
170
|
+
/**
|
|
171
|
+
* Whether a rework Bug for this commit is already filed on ANOTHER delivery of the
|
|
172
|
+
* focus (module header): 'filed', 'none', or 'unknown' when the focus could not be
|
|
173
|
+
* read -- which files nothing this poll rather than guessing, because the guess that
|
|
174
|
+
* fails open is exactly the N-Bugs fan-out. A deps object with no focus read answers
|
|
175
|
+
* 'none', and the source pin in the test suite is what keeps production wired to one.
|
|
176
|
+
* Never throws.
|
|
177
|
+
*/
|
|
178
|
+
async function reworkFiledElsewhereOnFocus(focusId, deliveryId, commitPrefix, deps) {
|
|
179
|
+
if (!deps.getFocusDeliveries)
|
|
180
|
+
return 'none';
|
|
181
|
+
try {
|
|
182
|
+
for (const sibling of await deps.getFocusDeliveries(focusId)) {
|
|
183
|
+
if (sibling.id === deliveryId)
|
|
184
|
+
continue;
|
|
185
|
+
const issues = await deps.getDeliveryIssues(sibling.id);
|
|
186
|
+
if (issues.some((i) => i.issueType !== CONTEXT_GROUP_TYPE && i.title.startsWith(commitPrefix))) {
|
|
187
|
+
log.info(`[verification] rework issue: delivery ${deliveryId} was named owner of the failure at `
|
|
188
|
+
+ `"${commitPrefix}" but ${sibling.id} already carries it -- one red stays one work item`);
|
|
189
|
+
return 'filed';
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
return 'none';
|
|
193
|
+
}
|
|
194
|
+
catch (err) {
|
|
195
|
+
log.warn(`[verification] rework issue: focus ${focusId} could not be read to tell whether "${commitPrefix}" is already `
|
|
196
|
+
+ `carried -- ${deliveryId} files nothing this poll (the owed filing is retried):`, err.message);
|
|
197
|
+
return 'unknown';
|
|
198
|
+
}
|
|
199
|
+
}
|
|
126
200
|
/** deliveryId -> the failed commit whose rework Bug is known filed (nothing owed there). */
|
|
127
201
|
const filedAt = new Map();
|
|
128
202
|
/** `${deliveryId}@${sha}` -> when an owed filing was last attempted (ms). */
|
|
@@ -162,6 +236,7 @@ export async function retryOwedReworkIssue(delivery, at, deps = defaultReworkRet
|
|
|
162
236
|
const recorded = verdict?.outcome === 'failed' ? verdict : null;
|
|
163
237
|
return await fileVerificationReworkIssue(delivery.id, {
|
|
164
238
|
sha,
|
|
239
|
+
at: { productId: at.productId, focusId: at.focusId },
|
|
165
240
|
failingTests: recorded?.newFailures ?? [],
|
|
166
241
|
parseFailure: recorded?.parseFailure,
|
|
167
242
|
failedStage: recorded?.failedStage,
|
|
@@ -174,14 +249,18 @@ export async function retryOwedReworkIssue(delivery, at, deps = defaultReworkRet
|
|
|
174
249
|
return null;
|
|
175
250
|
}
|
|
176
251
|
}
|
|
177
|
-
export const defaultFailedVerdictReworkDeps = () => ({
|
|
252
|
+
export const defaultFailedVerdictReworkDeps = () => ({
|
|
253
|
+
...defaultReworkIssueDeps(), getFocusDeliveries, selectReworkOwner,
|
|
254
|
+
});
|
|
178
255
|
/**
|
|
179
256
|
* A FAILED gate verdict standing at a focus head that draws no further review (a
|
|
180
257
|
* declined review of an unchanged range, a stranded re-fire at its bound): file the
|
|
181
|
-
* rework Bug on
|
|
182
|
-
* routes
|
|
183
|
-
*
|
|
184
|
-
*
|
|
258
|
+
* rework Bug on the verify delivery the failure is ATTRIBUTED to, so the live
|
|
259
|
+
* open-work pass routes it to verify_failed and a coding pass fixes the failure. The
|
|
260
|
+
* focus's other verify deliveries are offered the filing and decline it
|
|
261
|
+
* (verify/rework-attribution.ts) -- one red, one work item. Deduped per commit and
|
|
262
|
+
* skipped beside open work exactly as the feedback filing is. Returns how many Bugs
|
|
263
|
+
* were filed. Never throws.
|
|
185
264
|
*/
|
|
186
265
|
export async function fileReworkForFailedVerdict(focusId, verdict, deps = defaultFailedVerdictReworkDeps()) {
|
|
187
266
|
if (verdict.outcome !== 'failed')
|
|
@@ -194,16 +273,39 @@ export async function fileReworkForFailedVerdict(focusId, verdict, deps = defaul
|
|
|
194
273
|
log.warn(`[verification] rework issue: deliveries unreadable for focus ${focusId} -- none filed this poll:`, err.message);
|
|
195
274
|
return 0;
|
|
196
275
|
}
|
|
276
|
+
const candidates = deliveries.filter((x) => x.executionStatus === DELIVERY_STATUS.VERIFY).map((x) => x.id);
|
|
277
|
+
// This pass knows its whole candidate set, so it picks the ONE owner here rather than
|
|
278
|
+
// offering the filing to each and letting the per-delivery predicate decline -- the
|
|
279
|
+
// choice can then land on a candidate it can actually tell. The rule is
|
|
280
|
+
// UNCONDITIONAL: a failure that cannot be attributed, or that arrives with no product
|
|
281
|
+
// context to attribute it by, still goes to exactly one delivery -- the candidate set's
|
|
282
|
+
// own unattributable owner, the same one the per-delivery path computes -- because
|
|
283
|
+
// fanning out "when we do not know" is the behaviour this module exists to remove.
|
|
284
|
+
// Null means there is no verify delivery to tell at all.
|
|
285
|
+
const owner = verdict.productId && verdict.sha && deps.selectReworkOwner
|
|
286
|
+
? deps.selectReworkOwner(candidates, { productId: verdict.productId, focusId, sha: verdict.sha })
|
|
287
|
+
: unattributableOwner(candidates);
|
|
288
|
+
const targets = owner === null ? [] : [owner];
|
|
289
|
+
// The owner was chosen above over this pass's WHOLE candidate set, so the
|
|
290
|
+
// per-delivery predicate is not consulted again -- it answers over a set this pass
|
|
291
|
+
// may not share, and would veto a choice this pass can act on. The commit's focus
|
|
292
|
+
// still rides along: the per-commit dedupe is the focus's, not the delivery's.
|
|
293
|
+
const filing = {
|
|
294
|
+
getDeliveryIssues: deps.getDeliveryIssues,
|
|
295
|
+
createIssue: deps.createIssue,
|
|
296
|
+
getFocusDeliveries: deps.getFocusDeliveries,
|
|
297
|
+
};
|
|
197
298
|
let filed = 0;
|
|
198
|
-
for (const
|
|
199
|
-
const out = await fileVerificationReworkIssue(
|
|
299
|
+
for (const deliveryId of targets) {
|
|
300
|
+
const out = await fileVerificationReworkIssue(deliveryId, {
|
|
200
301
|
sha: verdict.sha,
|
|
302
|
+
at: { focusId },
|
|
201
303
|
failingTests: verdict.newFailures ?? [],
|
|
202
304
|
parseFailure: verdict.parseFailure,
|
|
203
305
|
failedStage: verdict.failedStage,
|
|
204
306
|
exitCode: verdict.exitCode,
|
|
205
307
|
logPath: verdict.logPath ?? null,
|
|
206
|
-
},
|
|
308
|
+
}, filing);
|
|
207
309
|
if (out.filed)
|
|
208
310
|
filed += 1;
|
|
209
311
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verification-rework-issue.js","sourceRoot":"","sources":["../../src/verify/verification-rework-issue.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,oGAAoG;AACpG,mFAAmF;AACnF,yEAAyE;AACzE,8DAA8D;AAC9D,kEAAkE;AAClE,mEAAmE;AACnE,gBAAgB;AAEhB
|
|
1
|
+
{"version":3,"file":"verification-rework-issue.js","sourceRoot":"","sources":["../../src/verify/verification-rework-issue.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type DeliveryArmCoveredTargets } from '../queries/arm-covered-targets.js';
|
|
1
2
|
import { type ReconcileInputs, type ReconcileJudgment, type ReconcileOptions, type VerifyEvidence } from './verify-reconciliation.js';
|
|
2
3
|
export type { VerifyEvidence } from './verify-reconciliation.js';
|
|
3
4
|
/**
|
|
@@ -72,44 +73,37 @@ export interface ReconcileTargetsResult {
|
|
|
72
73
|
* in any active tree (then restatements/shortfalls are both empty too).
|
|
73
74
|
*/
|
|
74
75
|
realityTreeId?: string;
|
|
76
|
+
/**
|
|
77
|
+
* Targets this reconciliation DID NOT judge, because the focus's arm did not
|
|
78
|
+
* cover them: nodes added to the in-flight injection after the human armed,
|
|
79
|
+
* serving no effect the arm covers (see
|
|
80
|
+
* `supabase/functions/_shared/arm-covered-effects.ts`). They produce no
|
|
81
|
+
* shortfall, no hold and no re-work issue -- they wait for the next arm.
|
|
82
|
+
*
|
|
83
|
+
* Carried back rather than silently dropped so the caller can put them ON THE
|
|
84
|
+
* RECORD. What was set aside has to be visible somewhere, or narrowing the
|
|
85
|
+
* judgement becomes indistinguishable from losing track of it.
|
|
86
|
+
*
|
|
87
|
+
* Empty whenever the arm could not be reasoned about, which is also when
|
|
88
|
+
* every target is judged -- the two always agree.
|
|
89
|
+
*/
|
|
90
|
+
recordedTargetNodeIds?: string[];
|
|
75
91
|
}
|
|
76
92
|
export type ReconcileFn = (inputs: ReconcileInputs, opts?: ReconcileOptions) => Promise<ReconcileJudgment>;
|
|
77
93
|
export interface AuthorTargetRestatementsDeps {
|
|
78
94
|
callApi?: <T>(action: string, params?: Record<string, unknown>) => Promise<T>;
|
|
79
95
|
/** Reconciles declared-vs-achieved and classifies. Defaults to the verify-reconciliation helper. */
|
|
80
96
|
reconcile?: ReconcileFn;
|
|
97
|
+
/**
|
|
98
|
+
* Which of the delivery's injection targets the focus's CURRENT arm covers.
|
|
99
|
+
* Defaults to the product-api read (queries/arm-covered-targets.ts), which
|
|
100
|
+
* never throws and answers `null` when the arm cannot be reasoned about.
|
|
101
|
+
*
|
|
102
|
+
* `null` means JUDGE EVERYTHING -- the pre-change behaviour. This module
|
|
103
|
+
* never decides coverage itself: "covered" has one definition, edge-side,
|
|
104
|
+
* shared with the create path.
|
|
105
|
+
*/
|
|
106
|
+
readArmCoveredTargets?: (deliveryId: string) => Promise<DeliveryArmCoveredTargets | null>;
|
|
81
107
|
}
|
|
82
|
-
|
|
83
|
-
* Reconcile the achieved outcome against the declared desired effect for each
|
|
84
|
-
* UDE the injection targets.
|
|
85
|
-
*
|
|
86
|
-
* For each targeted UDE:
|
|
87
|
-
* - The DECLARED desired effect is the UDE's preserved `frtStatement` (intent
|
|
88
|
-
* of record). When absent, there is no declared intent to fall short of, so
|
|
89
|
-
* the achieved DE authored from evidence is treated as a match.
|
|
90
|
-
* - The ACHIEVED desired effect is authored from the supplied `evidence`
|
|
91
|
-
* (diff/tests/inspection), NOT from the UDE problem text.
|
|
92
|
-
* - The judgment classifies match / legitimate_divergence / shortfall.
|
|
93
|
-
*
|
|
94
|
-
* match / legitimate_divergence -> `restatements` (carried into verify).
|
|
95
|
-
* shortfall -> `shortfalls` (caller holds gate + escalates).
|
|
96
|
-
*
|
|
97
|
-
* Best-effort per target: a reconciliation FAILURE (model error / parse error)
|
|
98
|
-
* is treated as a SHORTFALL -- we cannot prove the achieved outcome realizes the
|
|
99
|
-
* declared intent, so we do not flip it and we surface it to a human. (This is
|
|
100
|
-
* the asymmetric-safe default: never flip what you could not reconcile.)
|
|
101
|
-
*
|
|
102
|
-
* SCOPE BOUNDARY (intentional): this reconciles ONLY the UDEs the injection
|
|
103
|
-
* DIRECTLY targets (its `targets` edges). Downstream consequences that resolve
|
|
104
|
-
* by causal PROPAGATION at verify are NOT reconciled here -- they have no
|
|
105
|
-
* declared DE to measure against, and their forward prose is authored by the
|
|
106
|
-
* injection-conditioned draft-assist loop (cascade-restatement.ts), not from raw
|
|
107
|
-
* code evidence. Verify flips their node_type but leaves verify_classification
|
|
108
|
-
* null; display falls back to the draft-assist frt_statement. See the matching
|
|
109
|
-
* note in graph-verification.ts (verifyInjectionImpl, Step 6).
|
|
110
|
-
*
|
|
111
|
-
* Returns empty result when focusId is null or the injection is not in the
|
|
112
|
-
* focus's active tree(s).
|
|
113
|
-
*/
|
|
114
|
-
export declare function authorTargetRestatements(injectionNodeId: string, focusId: string | null, evidence: VerifyEvidence, deps?: AuthorTargetRestatementsDeps, evidenceIncomplete?: boolean): Promise<ReconcileTargetsResult>;
|
|
108
|
+
export declare function authorTargetRestatements(injectionNodeId: string, focusId: string | null, evidence: VerifyEvidence, deps?: AuthorTargetRestatementsDeps, evidenceIncomplete?: boolean, deliveryId?: string | null): Promise<ReconcileTargetsResult>;
|
|
115
109
|
//# sourceMappingURL=verify-restatement.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify-restatement.d.ts","sourceRoot":"","sources":["../../src/verify/verify-restatement.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"verify-restatement.d.ts","sourceRoot":"","sources":["../../src/verify/verify-restatement.ts"],"names":[],"mappings":"AAgDA,OAAO,EAGL,KAAK,yBAAyB,EAC/B,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAGL,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EAErB,KAAK,cAAc,EACpB,MAAM,4BAA4B,CAAC;AAYpC,YAAY,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAEjE;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,2DAA2D;IAC3D,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,OAAO,GAAG,uBAAuB,CAAC;IAClD,2DAA2D;IAC3D,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;;;;OAMG;IACH,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,uFAAuF;AACvF,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,+DAA+D;IAC/D,iBAAiB,EAAE,MAAM,CAAC;IAC1B,2DAA2D;IAC3D,iBAAiB,EAAE,MAAM,CAAC;IAC1B,4CAA4C;IAC5C,MAAM,EAAE,MAAM,CAAC;IACf;;;;;;;;;;OAUG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,sBAAsB;IACrC,kEAAkE;IAClE,YAAY,EAAE,iBAAiB,EAAE,CAAC;IAClC,gEAAgE;IAChE,UAAU,EAAE,eAAe,EAAE,CAAC;IAC9B;;;;;;;;;;;;;;OAcG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;;;;;;;;;;OAaG;IACH,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;CAClC;AAED,MAAM,MAAM,WAAW,GAAG,CACxB,MAAM,EAAE,eAAe,EACvB,IAAI,CAAC,EAAE,gBAAgB,KACpB,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAEhC,MAAM,WAAW,4BAA4B;IAC3C,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IAC9E,oGAAoG;IACpG,SAAS,CAAC,EAAE,WAAW,CAAC;IACxB;;;;;;;;OAQG;IACH,qBAAqB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,yBAAyB,GAAG,IAAI,CAAC,CAAC;CAC3F;AAyGD,wBAAsB,wBAAwB,CAC5C,eAAe,EAAE,MAAM,EACvB,OAAO,EAAE,MAAM,GAAG,IAAI,EACtB,QAAQ,EAAE,cAAc,EACxB,IAAI,GAAE,4BAAiC,EACvC,kBAAkB,UAAQ,EAC1B,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,GACzB,OAAO,CAAC,sBAAsB,CAAC,CAoHjC"}
|
|
@@ -9,6 +9,8 @@
|
|
|
9
9
|
// packages/daemon/src/verify/shortfall-park.test.ts, packages/daemon/src/verify/shortfall-repeat.test.ts,
|
|
10
10
|
// packages/daemon/src/verify/shortfall-routing.test.ts,
|
|
11
11
|
// packages/daemon/src/verify/shortfall-rulings.test.ts,
|
|
12
|
+
// packages/daemon/src/verify/stamp-withholds-recorded-targets.test.ts,
|
|
13
|
+
// packages/daemon/src/verify/verification-deps-default.test.ts,
|
|
12
14
|
// packages/daemon/src/verify/verification-engine-rulings.test.ts,
|
|
13
15
|
// packages/daemon/src/verify/verification-feedback.test.ts,
|
|
14
16
|
// packages/daemon/src/verify/verify-restatement.test.ts
|
|
@@ -42,7 +44,10 @@
|
|
|
42
44
|
* @module verify-restatement
|
|
43
45
|
*/
|
|
44
46
|
import { callApi as defaultCallApi } from '../queries/shared.js';
|
|
47
|
+
import { readArmCoveredTargets as defaultReadArmCoveredTargets, heldTargetsOrAll, } from '../queries/arm-covered-targets.js';
|
|
45
48
|
import { reconcileAchievedEffect as defaultReconcile, judgeEvidenceIsEmpty, } from './verify-reconciliation.js';
|
|
49
|
+
import { createLogger } from '../shell/log.js';
|
|
50
|
+
const log = createLogger({ module: 'verify-restatement' });
|
|
46
51
|
/**
|
|
47
52
|
* Reconcile the achieved outcome against the declared desired effect for each
|
|
48
53
|
* UDE the injection targets.
|
|
@@ -74,13 +79,74 @@ import { reconcileAchievedEffect as defaultReconcile, judgeEvidenceIsEmpty, } fr
|
|
|
74
79
|
*
|
|
75
80
|
* Returns empty result when focusId is null or the injection is not in the
|
|
76
81
|
* focus's active tree(s).
|
|
82
|
+
*
|
|
83
|
+
* `deliveryId` (6th argument): supplied => the reconciliation is narrowed to
|
|
84
|
+
* the targets the focus's ARM COVERED (see narrowToArmCoverage); omitted =>
|
|
85
|
+
* every target is judged, as before. Optional so a caller with no delivery in
|
|
86
|
+
* hand behaves exactly as it did.
|
|
87
|
+
*/
|
|
88
|
+
/**
|
|
89
|
+
* Which targets the focus's arm covers, resolved ONCE per reconciliation.
|
|
90
|
+
*
|
|
91
|
+
* Hoisted out of `authorTargetRestatements` so that function stays within its
|
|
92
|
+
* recorded size floor, and because the answer is a property of the DELIVERY and
|
|
93
|
+
* its focus -- not of any one tree the reconciliation happens to walk.
|
|
94
|
+
*
|
|
95
|
+
* `null` means JUDGE EVERYTHING: no delivery id was supplied, the read failed,
|
|
96
|
+
* or the arm could not be reasoned about. The gate never narrows what it judges
|
|
97
|
+
* on a question it could not answer.
|
|
77
98
|
*/
|
|
78
|
-
|
|
99
|
+
async function resolveArmCoverageForDelivery(deliveryId, deps) {
|
|
100
|
+
if (!deliveryId)
|
|
101
|
+
return null;
|
|
102
|
+
const read = deps.readArmCoveredTargets ?? defaultReadArmCoveredTargets;
|
|
103
|
+
return await read(deliveryId);
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Narrow an injection's targets to the ones the arm COVERED, recording the rest
|
|
107
|
+
* on `result`, and return the held set.
|
|
108
|
+
*
|
|
109
|
+
* A target added to an in-flight injection after the human armed -- serving no
|
|
110
|
+
* effect the arm covers -- is not owed work: it produces no shortfall, no hold
|
|
111
|
+
* and no re-work issue, and waits for the next arm. It is recorded rather than
|
|
112
|
+
* dropped, so what was set aside is visible on the delivery's record instead of
|
|
113
|
+
* merely absent from it.
|
|
114
|
+
*
|
|
115
|
+
* The caller applies this BEFORE the evidence-blindness check, deliberately: a
|
|
116
|
+
* set-aside target must not make the bundle look unjudgeable either. With every
|
|
117
|
+
* target recorded there is nothing left to judge, so the evidence question does
|
|
118
|
+
* not arise and the caller flips exactly as it would with no targets at all.
|
|
119
|
+
*
|
|
120
|
+
* Mutates `result` rather than returning a pair because the recorded set
|
|
121
|
+
* accumulates across trees, and threading an accumulator through the walk buys
|
|
122
|
+
* nothing over the one write.
|
|
123
|
+
*/
|
|
124
|
+
function narrowToArmCoverage(injectionNodeId, edges, coverage, result) {
|
|
125
|
+
const targets = edges
|
|
126
|
+
.filter((e) => e.edgeType === 'targets' && e.fromNodeId === injectionNodeId)
|
|
127
|
+
.map((e) => e.toNodeId);
|
|
128
|
+
const { held, recorded, unclassified } = heldTargetsOrAll(targets, coverage);
|
|
129
|
+
if (recorded.length > 0) {
|
|
130
|
+
result.recordedTargetNodeIds = [...(result.recordedTargetNodeIds ?? []), ...recorded];
|
|
131
|
+
}
|
|
132
|
+
if (unclassified.length > 0) {
|
|
133
|
+
// The split was stale: the edge answered about a tree that did not yet
|
|
134
|
+
// carry these targets. They are judged (heldTargetsOrAll already put them
|
|
135
|
+
// in `held`); this line is so the race is visible rather than inferred
|
|
136
|
+
// from a target that is judged while the answer never mentioned it.
|
|
137
|
+
log.warn(`[verify] Arm coverage did not classify ${unclassified.length} target(s) the ` +
|
|
138
|
+
`reconciler resolved (${unclassified.join(', ')}) -- the split predates them. ` +
|
|
139
|
+
`Judging them, as a gate must when its own answer is stale.`);
|
|
140
|
+
}
|
|
141
|
+
return new Set(held);
|
|
142
|
+
}
|
|
143
|
+
export async function authorTargetRestatements(injectionNodeId, focusId, evidence, deps = {}, evidenceIncomplete = false, deliveryId) {
|
|
79
144
|
const callApi = deps.callApi ?? defaultCallApi;
|
|
80
145
|
const reconcile = deps.reconcile ?? defaultReconcile;
|
|
81
146
|
const result = { restatements: [], shortfalls: [] };
|
|
82
147
|
if (!focusId)
|
|
83
148
|
return result;
|
|
149
|
+
const coverage = await resolveArmCoverageForDelivery(deliveryId, deps);
|
|
84
150
|
const treesResp = await callApi('reality_tree_list', { focusId });
|
|
85
151
|
const trees = (treesResp.items ?? []).filter((t) => t.status === 'active');
|
|
86
152
|
for (const tree of trees) {
|
|
@@ -106,9 +172,14 @@ export async function authorTargetRestatements(injectionNodeId, focusId, evidenc
|
|
|
106
172
|
// the instrument-fault signal instead of running the model (which, blind or
|
|
107
173
|
// half-blind, would manufacture a shortfall). With no targets there is
|
|
108
174
|
// nothing to judge -- fall through and let the caller flip as before.
|
|
175
|
+
// Narrow to what the arm covered BEFORE anything is judged; see
|
|
176
|
+
// splitTargetsByCoverage.
|
|
177
|
+
const heldTargets = narrowToArmCoverage(injectionNodeId, edges, coverage, result);
|
|
109
178
|
const hasTarget = edges.some((e) => {
|
|
110
179
|
if (e.edgeType !== 'targets' || e.fromNodeId !== injectionNodeId)
|
|
111
180
|
return false;
|
|
181
|
+
if (!heldTargets.has(e.toNodeId))
|
|
182
|
+
return false;
|
|
112
183
|
const t = nodeById.get(e.toNodeId);
|
|
113
184
|
return !!t && t.nodeType === 'undesired_effect';
|
|
114
185
|
});
|
|
@@ -119,6 +190,8 @@ export async function authorTargetRestatements(injectionNodeId, focusId, evidenc
|
|
|
119
190
|
for (const e of edges) {
|
|
120
191
|
if (e.edgeType !== 'targets' || e.fromNodeId !== injectionNodeId)
|
|
121
192
|
continue;
|
|
193
|
+
if (!heldTargets.has(e.toNodeId))
|
|
194
|
+
continue; // recorded after the arm: not judged
|
|
122
195
|
const target = nodeById.get(e.toNodeId);
|
|
123
196
|
if (!target || target.nodeType !== 'undesired_effect')
|
|
124
197
|
continue;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify-restatement.js","sourceRoot":"","sources":["../../src/verify/verify-restatement.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,yFAAyF;AACzF,4FAA4F;AAC5F,sEAAsE;AACtE,6EAA6E;AAC7E,2DAA2D;AAC3D,kEAAkE;AAClE,kEAAkE;AAClE,4GAA4G;AAC5G,0DAA0D;AAC1D,0DAA0D;AAC1D,oEAAoE;AACpE,8DAA8D;AAC9D,0DAA0D;AAC1D,gBAAgB;AAEhB;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EACL,uBAAuB,IAAI,gBAAgB,EAC3C,oBAAoB,GAMrB,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"verify-restatement.js","sourceRoot":"","sources":["../../src/verify/verify-restatement.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@telora/daemon",
|
|
3
|
-
"version": "0.22.
|
|
3
|
+
"version": "0.22.181",
|
|
4
4
|
"description": "Agent orchestration daemon for Telora - spawns and manages Claude Code instances",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
"//testRunner": "Uses Node.js built-in test runner (node:test) via tsx for TypeScript support. The root package uses Vitest; this is a deliberate choice for the daemon package to avoid framework dependencies. Test files live beside the modules they exercise (owner-directory layout); the runner discovers them recursively.",
|
|
39
39
|
"dependencies": {
|
|
40
40
|
"@telora/daemon-core": "^0.2.99",
|
|
41
|
-
"@telora/mcp-products": "^0.22.
|
|
41
|
+
"@telora/mcp-products": "^0.22.157",
|
|
42
42
|
"commander": "^14.0.3",
|
|
43
43
|
"yaml": "^2.4.0",
|
|
44
44
|
"zod": "^4.3.6"
|