diff --git a/.kiro/specs/pre-push-safety-net/m1a-recorded-vetoes.md b/.kiro/specs/pre-push-safety-net/m1a-recorded-vetoes.md new file mode 100644 index 0000000..17e4d12 --- /dev/null +++ b/.kiro/specs/pre-push-safety-net/m1a-recorded-vetoes.md @@ -0,0 +1,116 @@ +# M1a evidence: the NodeGoat detection with every veto recorded + +Run date 2026-09-16. Milestone **M1a** of [release-milestones.md](release-milestones.md). +Instrument `benchmarks/push/m1a_record_vetoes.py`; flag `--experimental-record-vetoes`. +Evidence: [summary](../../../benchmarks/measurements/2026-09-16-nodegoat-m1a-recorded-vetoes.json) +and its 11-file [bundle](../../../benchmarks/measurements/2026-09-16-nodegoat-m1a-recorded-vetoes.json.gz). + +This record diagnoses. It admits no defect, enables no capability, qualifies no language and +makes no latency claim. All three artifacts report `finding_status: none` with zero admitted +defects; every recorded section carries its experimental label. + +## What was declared before running + +Expected base/head pins, expected operation and expected outcome for all three comparisons +were written to `m1a-record.json` before the first scan. The declared target is +`app/routes/contributions.js`, `handleContributionsUpdate`, family `injection`, lines 32–34. + +| Case | Base | Head | Declared expectation | +|---|---|---|---| +| nodegoat-introduce | fixed `0b453d5a` | vulnerable `c5cb68a7` | raw finding at the three eval lines, recorded novelty new | +| nodegoat-repair | vulnerable `c5cb68a7` | fixed `0b453d5a` | fixed twin analyzed and quiet; three base-only findings | +| nodegoat-benign | vulnerable `c5cb68a7` | benign `f772c59e` | backlog unchanged; never new or worsened | + +Each revision's target file was reopened before the run: 2,485, 2,491 and 2,498 bytes with +recorded SHA-256 digests. Each head scan reported a complete 44-file JavaScript census. +Installed engine, facts, query, policy, core and semantics provenance matched the frozen +values in all three artifacts. + +## Observed outcome + +| Case | Elapsed | Target findings | Target question answered | Deadline reached | +|---|---:|---:|---|---| +| nodegoat-introduce | 349.8 s | 3 | yes, 9 rows | no | +| nodegoat-repair | 153.8 s | 0 | yes, 0 rows | no | +| nodegoat-benign | 261.4 s | 3 | yes | no | + +All three ran under an explicitly named 900-second development budget. These durations are +development measurements and cannot satisfy or measure the 30-second hook latency gate. + +Verdict recorded by the instrument: raw witness present, fixed twin quiet, unchanged revision +not reported as a new regression, recorded evaluation produced for all three. The milestone's +**kill criterion did not trigger**: the fixed twin was genuinely analyzed, answering its target +question with zero rows and no deadline reason, while the same three findings appear on its +base side as base-only findings. Silence from failure was not accepted as a pass. + +## The vetoes that actually fired + +Identical for each of the three `eval` witnesses on the vulnerable revision. Five recognized +vetoes fired and were recorded rather than applied: + +| Stage | Veto | Evidence | +|---|---|---| +| head question | `change_context_incomplete` | the answered target question carried 9 rows and was then demoted | +| head scan | `dynamic_external_or_depth_context_unresolved` | on the target's own question identity, not an unrelated one | +| head scan | `vendor_semantics_unresolved` | recorded both as a degradation and as a scope boundary | +| base scan | `graph_incomplete` | the base question answered with 0 rows and was then demoted | +| change context | `ambiguous_line_correspondence` | file-level, on the target file | + +The earlier owner diagnosis named four independent vetoes and expected query-to-operation +provenance and question-owned vendor relevance to be the two that mattered. Both fired. The +run also confirms the third and fourth, so all four named vetoes are real on this case. + +## What M1a corrected in the diagnosis + +**A fifth veto is the actual remaining blocker.** With all five recognized vetoes lifted, the +detection does not become new. Its reason advances from `witness_identity_unresolved` to +`operation_correspondence_unresolved`, because the head operation sits on a changed line and +therefore has no base line anchor. The comparison can classify an operation only when it maps +to a base location. + +The unchanged revision proves this is the mechanism rather than a coincidence. Its comment-only +edit leaves lines 32–34 unchanged, the base location resolves to the same lines, and the +recorded novelty becomes `unchanged` / `same_supported_mechanism`. Same evidence, same policy, +opposite correspondence outcome: + +| Revision | Operation line | Base location | Recorded novelty | +|---|---|---|---| +| vulnerable | changed | unresolved | unknown, `operation_correspondence_unresolved` | +| unchanged | unchanged | resolved to the same line | unchanged, `same_supported_mechanism` | + +**Query identity differs from witness identity, as predicted.** The target is selected through a +file-fallback question with `function=None`, while the rows report method `2` at lines +32–34. The declared benchmark function is `handleContributionsUpdate`. This is recorded, not +applied: it is why production reported `witness_identity_unresolved` before any lifting, since +an unresolved question yields no comparable operation at all. + +**Admission reasons that no flag can remove.** `capability_unavailable` remains on every +candidate because the registry is empty and this flag cannot enable a capability. +`dependency_unresolved` remains because unlifted coverage reasons still reach admission. + +## What M1b must repair, ordered by this evidence + +1. **Authentic per-family change context.** `change_context_incomplete` demoted every answered + question in all three cases. Dominance and configuration questions need their own context + producers describing their actual query scope; taint context must not be copied into them. +2. **Question-owned vendor relevance.** `vendor_semantics_unresolved` turned an otherwise + complete 44-file first-party census into `graph_incomplete` on every base question. Keep the + exclusion physical; establish which question actually requires excluded semantics. +3. **Operation correspondence for changed lines.** The blocker M1a surfaced. Bind the required + base/head correspondence to the specific operation rather than to a line anchor, with absent, + renamed, removed-guard and ambiguous-operation controls. Do not delete the ambiguity check + and do not treat lexical alignment as semantic proof. +4. **Correspondence ambiguity scoped to its file region.** `ambiguous_line_correspondence` is + recorded file-wide and inherited by every question, including uniquely mapped operations. +5. **Query-to-operation provenance.** Carry verified provenance from the selected question to the + reported operation. Do not inject benchmark function names into regions. + +Vetoes that did not fire on this case stay as they are and their families stay experimental. + +## Limits + +Three comparisons on one inspected teaching repository. NodeGoat is development and transfer +data; it cannot qualify production Node support, and Node evidence cannot qualify PHP or Python. +The lifted view is a diagnostic reconstruction, not a comparison result: it shows what the +existing evidence would support if those vetoes were repaired, and no repair has been made. +Runtime, independent qualification and rollout all remain NO-GO. diff --git a/.kiro/specs/pre-push-safety-net/release-milestones.md b/.kiro/specs/pre-push-safety-net/release-milestones.md index da65696..888c588 100644 --- a/.kiro/specs/pre-push-safety-net/release-milestones.md +++ b/.kiro/specs/pre-push-safety-net/release-milestones.md @@ -8,8 +8,8 @@ It does not approve an unreviewed implementation design or enable any capability ## Current position -**Next milestone: M1a. None of M1–M5 is verified yet.** The 26/27 completed executable -tasks measure implementation progress, not release readiness. Task 8.3 remains blocked. +**Next milestone: M1b. M1a is met; none of M1–M5 is verified yet.** The 28/29 completed +executable tasks measure implementation progress, not release readiness. Task 8.3 remains blocked. The published `v1.2.0-alpha.1` is an experimental implementation release, not a qualified advisory rollout. See [current status](status.md) for measured evidence and limitations. @@ -37,8 +37,14 @@ result is a full production pass, not one detection. ### M1a — Show the detection with every veto recorded -Status: **NEXT — not verified**. Time box: one week of maintainer effort from the first -M1a run. Missing the box is a finding, not a reason to extend silently. +Status: **MET 2026-09-16**, inside its one-week box. Evidence: +[M1a record](m1a-recorded-vetoes.md) and +[measurement](../../../benchmarks/measurements/2026-09-16-nodegoat-m1a-recorded-vetoes.json). +Raw witnesses present at contributions.js lines 32–34; fixed twin analyzed and quiet with +zero rows and no deadline reason; unchanged revision analyzed and recorded `unchanged`. The +kill criterion did not trigger. Five vetoes fired and were recorded, and M1a corrected the +diagnosis: with all five lifted the detection stops at `operation_correspondence_unresolved`, +a fifth veto that was not previously named. No defect was admitted and no capability enabled. - Use the pinned NodeGoat contribution injection case, its fixed twin and an unchanged vulnerable revision as development data. Record exact base/head revisions, expected @@ -63,7 +69,11 @@ diagnosed and recorded. ### M1b — Repair only the vetoes M1a showed to matter -Status: **PENDING M1a**. +Status: **NEXT — not verified**. M1a supplied the veto list: per-family change context, +question-owned vendor relevance, operation correspondence for an operation on a changed line, +file-wide correspondence ambiguity scope, and query-to-operation provenance. The owner +diagnosis expected the first and the last two; operation correspondence is the addition M1a +measured and is the blocker that survives every other repair. - From the M1a veto list, repair only the context/family/identity contracts this case actually needs. The owner diagnosis expects query-to-operation provenance and question- @@ -192,9 +202,10 @@ remaining blocker and next concrete action. Report implementation task counts se Change a milestone to verified only with linked evidence; do not infer progress from elapsed effort or a completed experimental release tag. -Immediate next action (M1a): add the task-local recorded-veto experimental flag, run the -NodeGoat vulnerable, fixed and unchanged revisions under it, and produce the per-finding -veto list alongside the `2` witness. Then trace that witness into the declared -contribution handler and turn the vetoes that actually fired into the smallest owner fix -(M1b). Use [remediation research](../contributor-scan/release-remediation-research.md) as -the starting record; do not begin another broad timing campaign before the M1 outcome exists. +Immediate next action (M1b): repair the five vetoes M1a recorded, smallest first, starting +with operation correspondence for an operation on a changed line, since that one survives +every other repair. Then rerun the same three revisions without the flag through the +production evidence and comparison rules. Use +[M1a evidence](m1a-recorded-vetoes.md) and +[remediation research](../contributor-scan/release-remediation-research.md) as the starting +record; do not begin another broad timing campaign before the M1 outcome exists. diff --git a/.kiro/specs/pre-push-safety-net/spec.json b/.kiro/specs/pre-push-safety-net/spec.json index 933eadf..83739bf 100644 --- a/.kiro/specs/pre-push-safety-net/spec.json +++ b/.kiro/specs/pre-push-safety-net/spec.json @@ -1,7 +1,7 @@ { "feature_name": "pre-push-safety-net", "created_at": "2026-09-12T15:35:00Z", - "updated_at": "2026-09-14T11:34:19.788221+00:00", + "updated_at": "2026-09-16T13:30:00+00:00", "language": "en", "phase": "implementation", "approvals": { @@ -39,17 +39,17 @@ { "at": "2026-09-12T16:20:40.814596Z", "source": "approve.", - "action": "Accepted the generated task plan and authorized starting group 1 (1.1\u20131.4). Implementation started; tasks require independent review and fresh verification before completion." + "action": "Accepted the generated task plan and authorized starting group 1 (1.1–1.4). Implementation started; tasks require independent review and fresh verification before completion." }, { "at": "2026-09-12T18:32:19.033933Z", "source": "ok, next kiro phase, approved; correct. we can continue with the spec", - "action": "Authorized group 2 (2.1\u20132.3), resumed after local Claude Mem repair. Independent review and fresh verification remain required." + "action": "Authorized group 2 (2.1–2.3), resumed after local Claude Mem repair. Independent review and fresh verification remain required." }, { "at": "2026-09-13T07:48:02.155687Z", "source": "continue with the task", - "action": "Authorized continuing group 3 (3.1\u20133.4) after the group 3 next-step summary. Independent task review and fresh verification remain required." + "action": "Authorized continuing group 3 (3.1–3.4) after the group 3 next-step summary. Independent task review and fresh verification remain required." }, { "at": "2026-09-13T09:17:01.788332+00:00", @@ -59,7 +59,7 @@ { "at": "2026-09-13T10:26:47.307154+00:00", "source": "move on to group 4 as a whole", - "action": "Authorized all of group 4 (4.1\u20134.3), sequential implementation, independent task review and fresh verification. Groups 5\u20138 remain pending." + "action": "Authorized all of group 4 (4.1–4.3), sequential implementation, independent task review and fresh verification. Groups 5–8 remain pending." }, { "at": "2026-09-13T12:40:57.961577+00:00", @@ -69,17 +69,22 @@ { "at": "2026-09-13T13:58:52.336506+00:00", "source": "continue with group 6 as a whole. do we need to amend the spec to get a go for the rollout", - "action": "Authorized group 6 (6.1\u20136.4). Clarified complete preparation/discovery reuse after measured group 5 bottleneck; rollout gates remain unchanged. Manual Kiro review fallback remains necessary after a fresh agent dispatch hit the thread limit." + "action": "Authorized group 6 (6.1–6.4). Clarified complete preparation/discovery reuse after measured group 5 bottleneck; rollout gates remain unchanged. Manual Kiro review fallback remains necessary after a fresh agent dispatch hit the thread limit." }, { "at": "2026-09-13T15:45:15.902603+00:00", "source": "ok, continue with group 7 as a whole", - "action": "Authorized tasks 7.1\u20137.3; manual Kiro fallback after fresh dispatch hit thread limit. Group 8 and rollout remain pending." + "action": "Authorized tasks 7.1–7.3; manual Kiro fallback after fresh dispatch hit thread limit. Group 8 and rollout remain pending." }, { "at": "2026-09-13T16:41:21.889949+00:00", "source": "move on to group 8", - "action": "Authorized tasks 8.1\u20138.4 and their qualification work; preserve joint gates and record NO-GO wherever prerequisites or measurements do not pass. Fresh dispatch hit thread limit; manual Kiro fallback." + "action": "Authorized tasks 8.1–8.4 and their qualification work; preserve joint gates and record NO-GO wherever prerequisites or measurements do not pass. Fresh dispatch hit thread limit; manual Kiro fallback." + }, + { + "at": "2026-09-16T13:30:00+00:00", + "source": "add the M1a task to tasks.md and start it; continue with the plan", + "action": "Added group 9 (M1a) to the approved task plan as the bounded owner amendment the milestone requires, implemented the task-local recorded-veto flag (9.1) and ran the three NodeGoat revisions (9.2). Diagnosis only: no capability enabled, no gate changed, rollout remains NO-GO." } ], "task_review": { @@ -118,7 +123,9 @@ "7.3", "8.1", "8.2", - "8.4" + "8.4", + "9.1", + "9.2" ], "remaining_tasks": 1, "verification_record": "implementation-group-8.md", @@ -132,11 +139,11 @@ "implementation-group-7.md", "implementation-group-8.md" ], - "next_group": 8, + "next_group": 9, "blocked_tasks": [ "8.3" ], - "feasibility": "NO-GO: post-census profile measured all 21 cases; 18 timed out, three identical-tip replays completed in 18.521\u201318.874s with valid reuse; 0/24 target checks completed. Maximum cancellation/report overrun 0.874s. See 2026-09-14-nodegoat-post-census-feasibility.json.", + "feasibility": "NO-GO: post-census profile measured all 21 cases; 18 timed out, three identical-tip replays completed in 18.521–18.874s with valid reuse; 0/24 target checks completed. Maximum cancellation/report overrun 0.874s. See 2026-09-14-nodegoat-post-census-feasibility.json.", "qualification": "NO-GO: eligibility implementation and evidence delivered; required independent populations and verified VAmPI transitive witness remain missing. Zero capabilities enabled.", "validation": { "decision": "NO-GO", @@ -150,7 +157,15 @@ "record": "../contributor-scan/census-repair-verification.md", "effect": "Node 44/44 input census restored; partial/missing census remains explicitly unresolved. Existing eligibility stale; runtime/context/independent qualification remain NO-GO." }, - "remediation_research": "../contributor-scan/release-remediation-research.md" + "remediation_research": "../contributor-scan/release-remediation-research.md", + "m1a": { + "status": "MET", + "date": "2026-09-16", + "record": "m1a-recorded-vetoes.md", + "measurement": "../../../benchmarks/measurements/2026-09-16-nodegoat-m1a-recorded-vetoes.json", + "kill_criterion_triggered": false, + "result": "Raw 2 witnesses present at contributions.js 32-34; fixed twin analyzed and quiet (target question answered with zero rows, no deadline reason); unchanged revision recorded 'unchanged'. Five vetoes fired and were recorded. With all five lifted the detection stops at operation_correspondence_unresolved, a fifth veto not previously named. No defect admitted, no capability enabled." + } }, "release": { "tag": "v1.2.0-alpha.1", @@ -163,10 +178,12 @@ "record": "release-milestones.md", "direction_approved": true, "approval_source": "I agree. please note this into the raodmap as a spec", - "current": "M1a", - "verified": [], + "current": "M1b", + "verified": [ + "M1a" + ], "sequence": [ - "M1a: NodeGoat detection with admission vetoes recorded, not applied (one-week box)", + "M1a: NodeGoat detection with admission vetoes recorded, not applied (MET 2026-09-16)", "M1b: repair only the vetoes M1a showed to matter; rerun through production rules", "M2: equivalent bounded runtime", "M3: shared-language transfer", @@ -174,6 +191,7 @@ "M5: narrow advisory rollout" ], "implementation_design_approval": "Existing approvals preserved; this records milestone order and exit criteria, not blanket approval of future design changes.", - "m1_split_accepted": "2026-09-14: maintainer asked to split M1 into M1a/M1b after review" + "m1_split_accepted": "2026-09-14: maintainer asked to split M1 into M1a/M1b after review", + "m1a_outcome": "Met inside the one-week box. Corrected the owner diagnosis: all four named vetoes fire, and operation correspondence for an operation on a changed line is the blocker that survives every other repair." } } diff --git a/.kiro/specs/pre-push-safety-net/status.md b/.kiro/specs/pre-push-safety-net/status.md index f360441..4f8dd38 100644 --- a/.kiro/specs/pre-push-safety-net/status.md +++ b/.kiro/specs/pre-push-safety-net/status.md @@ -1,17 +1,24 @@ # Pre-push safety net status — v1.2.0-alpha.1 -Updated 2026-09-14. Phase: **implementation**. Requirements, design and tasks are -approved. **26/27 executable tasks complete; task 8.3 remains blocked.** +Updated 2026-09-16. Phase: **implementation**. Requirements, design and tasks are +approved. **28/29 executable tasks complete; task 8.3 remains blocked.** Rollout: **NO-GO**. The alpha tag publishes experimental implementation and evidence; it does not approve normal hook capabilities or production enforcement. ## Next release milestone -**M1a: show the NodeGoat detection with every admission veto recorded rather than -applied, fixed twin analyzed and quiet, one-week time box. Then M1b: repair only the -vetoes that fired and rerun through production rules.** None of the five release -milestones is verified yet. -The 26/27 task count is implementation progress, not proximity to rollout. Follow the +**M1a is met. M1b is next: repair only the vetoes M1a showed to matter, then rerun the +three revisions through the production rules.** The other four milestones remain unverified. + +M1a ran on 2026-09-16 within its one-week box. The raw `2` witnesses are present at +contributions.js lines 32–34, the fixed twin was genuinely analyzed and quiet, and the +unchanged revision was not reported as a new regression, so the kill criterion did not +trigger. Five vetoes fired and were recorded; with all five lifted the detection still stops +at `operation_correspondence_unresolved`, because a newly introduced operation sits on a +changed line and has no base anchor. That fifth veto was not in the earlier diagnosis and is +now M1b's central repair. See [M1a evidence](m1a-recorded-vetoes.md). + +The 28/29 task count is implementation progress, not proximity to rollout. Follow the accepted [release milestone spec](release-milestones.md): usefulness → speed → shared PHP/Python transfer → independent qualification → narrow advisory rollout. @@ -37,7 +44,10 @@ gates and a packaged native PHP/JavaScript partition smoke. See Still 0/24 declared target checks completed. Maximum observed cancellation/report overrun was 0.874s, below the two-second allowance. After M1 establishes the useful comparison, amortize engine startup/loading and rerun the frozen seven-class profile; require warm p95 <=30s and >=95% completed supported checks. -2. **Target and change-context evidence remains incomplete.** VAmPI preserves raw findings +2. **Target and change-context evidence remains incomplete.** M1a measured exactly which + contracts fail on the Node case: per-family change context, question-owned vendor + relevance, operation correspondence for changed lines, file-wide correspondence ambiguity + and query-to-operation provenance. VAmPI preserves raw findings at all three known sites, but the exact SQLI function question/transitive witness and supported authorization context are unresolved. Raw findings or rank positions cannot establish an actionable new regression. Repair this in the shared scan boundary and diff --git a/.kiro/specs/pre-push-safety-net/tasks.md b/.kiro/specs/pre-push-safety-net/tasks.md index dc0fae7..f511beb 100644 --- a/.kiro/specs/pre-push-safety-net/tasks.md +++ b/.kiro/specs/pre-push-safety-net/tasks.md @@ -1,14 +1,16 @@ # Implementation Plan: pre-push-safety-net Status: the existing task plan remains approved. Groups 1–7 and tasks 8.1, 8.2 and 8.4 -are verified (26/27 executable subtasks); task 8.3 and rollout remain NO-GO. Later work +are verified (28/29 executable subtasks, including group 9); task 8.3 and rollout remain NO-GO. Later work used the documented manual review fallback where agent dispatch reached its limit. The accepted [release milestone spec](release-milestones.md) now orders remaining work: -M1 useful Node comparison → M2 speed → M3 shared-language transfer → M4 independent -qualification → M5 narrow advisory rollout. All five milestones remain unverified. -These are release outcomes, not additional checked implementation tasks. Prepare bounded -owner design/task amendments as needed; preserve all completed task evidence below. +M1a diagnose → M1b repair → M2 speed → M3 shared-language transfer → M4 independent +qualification → M5 narrow advisory rollout. All milestones remain unverified. +Milestones are release outcomes, not checked implementation tasks. Group 9 below is the +bounded owner amendment M1a requires; it adds the task-local recorded-veto evaluation and +its three-revision development run. It enables no capability and changes no gate. +Preserve all completed task evidence below. ## Execution contract @@ -245,9 +247,30 @@ owner design/task amendments as needed; preserve all completed task evidence bel - _Requirements: 3.1, 3.4, 5.1, 5.2, 5.3, 5.4, 5.5, 6.5, 7.1, 7.3, 7.4, 8.3, 8.4_ +- [x] 9. Diagnose the first useful detection with vetoes recorded (release milestone M1a) +- [x] 9.1 Add the task-local recorded-veto evaluation flag + - Add an explicit experimental evaluation path that **records** each comparison and admission veto per raw finding instead of applying it. Keep it task-local, off by default, and available only on explicit `--base`/`--head` replay; refuse it on the Git stdin path so it can never become a hook capability. + - Lift only recognized completeness vetoes over a copy of the evidence: answered-then-demoted question outcomes, the vendor exclusion completion veto, and the diagnosed context/correspondence boundary kinds. Never lift failures: deadline exhaustion, unanswered questions, unreadable input, empty graphs and unparsed files stay applied, because silence from failure is not a quiet fixed twin. + - Retain the production novelty, reason and admission reasons beside the recorded ones for every finding, plus the query-to-witness identity difference, base-only findings and readable census receipts. Every payload carries an explicit experimental label; the recorded path admits no defect and enables no capability. + - Done when the flag is off by default, produces a labeled artifact section and terminal line under explicit replay, is refused in Git stdin mode, and unit controls prove recognized vetoes are recorded while failures and unrecognized boundaries remain applied. + - _Boundary: Delta and Actionability Policy, Push runner, Result and Hook Adapter, CLI integration_ + - _Requirements: 3.1, 3.4, 5.5, 6.3, 7.3_ + - _Verified 2026-09-16:_ 1,330 tests passed, nine skipped; global Ruff/format and touched mypy passed. Flag off by default, refused in Git stdin mode, labeled artifact section and terminal line under explicit replay. Controls prove recognized vetoes are recorded while deadline exhaustion, unanswered questions, empty graphs and unrecognized boundaries stay applied, and that the recorded path emits no defect even when a lifted candidate would otherwise admit. Regenerated the committed module audit for the added module. +- [x] 9.2 Run the three NodeGoat revisions and produce the per-finding veto list + - Record exact base/head revisions, expected operation and expected outcome before running. Exercise the shipped replay path, existing ranker and physically vendor-free graph; do not substitute a hand-selected slice or hard-coded target function. + - Replay the pinned vulnerable, fixed and unchanged revisions under the flag with an explicitly named development budget. That budget cannot satisfy or measure the hook latency gate. + - Deliverable: the raw finding on the vulnerable revision with location and witness, the fixed twin genuinely analyzed and quiet, the unchanged revision not reported as a new regression, and for every finding the exact list of vetoes that fired and why, with source and census receipts. + - Done when one replayable three-revision record states each expectation against its observed outcome and names the vetoes that actually fired. A fixed twin that timed out or was not analyzed fails M1a and blocks M1b until diagnosed. + - _Boundary: Evaluation harness, full-run integration_ + - _Depends: 9.1_ + - _Requirements: 1.1, 2.1, 2.4, 3.4, 6.3, 7.1, 7.3_ + - _Verified 2026-09-16:_ all three pinned revisions replayed through the production CLI under a named 900-second development budget; expectations frozen on disk first. Raw `2` witnesses present at lines 32–34; fixed twin analyzed and quiet (target question answered with zero rows, no deadline reason, three base-only findings); unchanged revision analyzed and recorded `unchanged`. Five vetoes fired and were recorded; the remaining blocker is `operation_correspondence_unresolved` for an operation on a changed line. Zero admitted defects. Evidence: [M1a record](m1a-recorded-vetoes.md) and `benchmarks/measurements/2026-09-16-nodegoat-m1a-recorded-vetoes.json`. Diagnosis only; no capability enabled and no latency claim. + ## Implementation Notes - Task5.2 measured PMPro timing out after both snapshots were materialized but before change context/graph analysis. Group6 must account for compatible snapshot/discovery reuse as well as graph reuse; identical-tip hits cannot substitute for the later representative changed-code latency gate. No new detector, scope heuristic or incremental CPG mutation is implied. - Cancellation must cover semantic planning and reporting, not only engine subprocesses: `_collect` and `_scope_work` now consume the shared deadline, and replay instantiates the budget-aware backend once. Preserve the 400-question failure-census and real Node artifact-retention regressions. +- Group 9 (M1a) corrected the owner diagnosis: all four named vetoes fire on the NodeGoat case, and a fifth, `operation_correspondence_unresolved`, is the actual remaining blocker because a newly introduced operation sits on a changed line and has no base anchor. The unchanged revision resolves its base location on the same lines and is classified `unchanged`, which isolates correspondence as the mechanism. M1b repairs context producers, question-owned vendor relevance, operation correspondence, file-wide ambiguity scope and query-to-operation provenance; vetoes that did not fire stay unchanged. + - Group 6: complete discovery/graph/query reuse is explicit via `--cache-dir`; source/declaration edits invalidate affected units. Installed frontend/adaptation bytes now bind graph and admission provenance. A valid cached census cannot qualify a fresh answer that omitted its own census. Identical-revision timing is not the changed-code rollout gate. diff --git a/.kiro/steering/roadmap.md b/.kiro/steering/roadmap.md index 883a4db..06c133b 100644 --- a/.kiro/steering/roadmap.md +++ b/.kiro/steering/roadmap.md @@ -8,14 +8,14 @@ fast, prove cross-language transfer, qualify independently, then enable narrow a rollout**. The executable outcome contract lives in the existing [pre-push-safety-net release milestone spec](../specs/pre-push-safety-net/release-milestones.md). -**We are at M1a. None of the five release milestones is verified yet.** The published -`v1.2.0-alpha.1` and 26/27 completed implementation tasks describe delivered machinery, +**We are at M1b. M1a is met; no other release milestone is verified yet.** The published +`v1.2.0-alpha.1` and 28/29 completed implementation tasks describe delivered machinery, not a demonstrated useful safety net. Task 8.3 and rollout remain NO-GO. | Order | Milestone | Observable exit | Current state | |---|---|---|---| -| M1a | Show the NodeGoat detection with every admission veto recorded, not applied | Raw finding with witness on the vulnerable revision; analyzed fixed twin and unchanged control quiet; per-finding veto list. One-week time box | NEXT | -| M1b | Repair only the vetoes M1a showed to matter | Supported evaluation finding through production rules, exact change/base evidence and repair direction; fixed twin and unchanged control stay quiet | Pending M1a | +| M1a | Show the NodeGoat detection with every admission veto recorded, not applied | Raw finding with witness on the vulnerable revision; analyzed fixed twin and unchanged control quiet; per-finding veto list. One-week time box | MET 2026-09-16 | +| M1b | Repair only the vetoes M1a showed to matter | Supported evaluation finding through production rules, exact change/base evidence and repair direction; fixed twin and unchanged control stay quiet | NEXT | | M2 | Make that same analysis fast | Equivalent evidence; representative warm changed-code p95 <=30s, cancellation/report <=2s, >=95% supported completion | Pending M1 | | M3 | Prove the shared design transfers | PMPro/PHP and VAmPI/Python vulnerable/fixed evidence; unchanged core rules; Node replay after any PMPro core change | Pending M2 | | M4 | Qualify on independent cases | Reviewed untouched vulnerable/fixed/benign populations pass joint quality, coverage and latency gates per capability | Pending M3 | @@ -23,12 +23,15 @@ not a demonstrated useful safety net. Task 8.3 and rollout remain NO-GO. ### Immediate next action -Add a task-local recorded-veto experimental flag and run the pinned NodeGoat -vulnerable, fixed and unchanged revisions under it (M1a). The raw `2` witness -already exists; the deliverable is that witness plus the exact list of admission vetoes -that discard it. Then repair only those vetoes and rerun through production rules (M1b). -Normal hook eligibility stays disabled during this experiment. +Repair the five vetoes M1a recorded, then rerun the same three NodeGoat revisions without +the flag through the production rules (M1b). Start with operation correspondence for an +operation on a changed line: M1a measured that this one survives every other repair, and it +was not in the earlier four-veto diagnosis. The others are per-family change context, +question-owned vendor relevance, file-wide correspondence ambiguity scope and +query-to-operation provenance. Vetoes that did not fire stay unchanged and their families +stay experimental. Normal hook eligibility stays disabled. Do not start another broad speed campaign before this outcome exists. See the +[M1a evidence](../specs/pre-push-safety-net/m1a-recorded-vetoes.md) and the [owner diagnosis](../specs/contributor-scan/release-remediation-research.md). ### Approach and boundaries diff --git a/.kiro/steering/safety-net.md b/.kiro/steering/safety-net.md index f7acd16..116845f 100644 --- a/.kiro/steering/safety-net.md +++ b/.kiro/steering/safety-net.md @@ -6,9 +6,11 @@ WordPress-first release framing in older steering; historical measurements remai Release order accepted 2026-09-14: first prove one useful Node changed-code comparison with an analyzed quiet fixed twin, then make the same analysis fast, verify PHP/Python transfer, qualify independently, and enable only passing advisory capabilities. See -[the milestone spec](../specs/pre-push-safety-net/release-milestones.md). We are at M1a -(show the detection with vetoes recorded, one-week box), then M1b (repair only what fired); -task counts and an experimental alpha tag do not establish release readiness. PMPro +[the milestone spec](../specs/pre-push-safety-net/release-milestones.md). M1a is met +(2026-09-16: witness shown, fixed twin analyzed and quiet, five vetoes recorded); we are at +M1b, repairing only what fired. M1a added a fifth veto the earlier diagnosis missed: +operation correspondence for an operation on a changed line. +Task counts and an experimental alpha tag do not establish release readiness. PMPro remains a core regression/development case; any PMPro core retune still requires frozen Node transfer evidence. This sequence supersedes older runtime-first next-step wording. diff --git a/benchmarks/measurements/2026-09-08-module-audit.json b/benchmarks/measurements/2026-09-08-module-audit.json index 21fcef5..1c8dd9b 100644 --- a/benchmarks/measurements/2026-09-08-module-audit.json +++ b/benchmarks/measurements/2026-09-08-module-audit.json @@ -1,14 +1,26 @@ { + "modules": 116, "counts": { - "load_bearing": 106, + "load_bearing": 107, "standalone_capability": 9 }, - "modules": 115, - "note": "Group 8: runner reaches recomputed versioned eligibility and its frozen scorer.", "orphaned": [], + "standalone": { + "fusion": "two-panel adjudication engine; reached from the scan's report stage and used standalone", + "harness_ext": "HarnessX extension surface; loaded by name when the optional harness is present", + "hunter_harness": "harness wiring for the tool hunter; used by the hunter path and by mcp", + "mcp": "narrow MCP server over stdio; its own `ousast mcp` entry point and OpenCode integration", + "push_inputs": "pre-push-safety-net task 1.2: offline input provenance validator; python -m openultrasast.push_inputs", + "push_scoring": "pre-push-safety-net task 1.3: frozen-profile diagnostic outcome scorer; python -m openultrasast.push_scoring", + "skills": "skill router; consumed by mcp and by the OpenCode integration, not by the scan path", + "slot_contract": "the slot/contract protocol stage_processors implements", + "stage_processors": "HarnessX slot-contracted scan stages; pinned by the zero-dependency guard in test_gate" + }, "rows": [ { + "module": "benchmark", "classification": "load_bearing", + "reason": "reachable from gate, map_gate, pair_gate or the CLI", "importers": [ "cli", "gate", @@ -16,28 +28,28 @@ "map_gate", "mcp", "pairs" - ], - "module": "benchmark", - "reason": "reachable from gate, map_gate, pair_gate or the CLI" + ] }, { + "module": "calibration", "classification": "load_bearing", + "reason": "reachable from gate, map_gate, pair_gate or the CLI", "importers": [ "cli" - ], - "module": "calibration", - "reason": "reachable from gate, map_gate, pair_gate or the CLI" + ] }, { + "module": "cli", "classification": "load_bearing", + "reason": "entry point", "importers": [ "mcp" - ], - "module": "cli", - "reason": "entry point" + ] }, { + "module": "complexity", "classification": "load_bearing", + "reason": "reachable from gate, map_gate, pair_gate or the CLI", "importers": [ "cli", "complexity.hints", @@ -47,32 +59,32 @@ "regress.candidate", "semantic.prove_filter", "tool_hunter" - ], - "module": "complexity", - "reason": "reachable from gate, map_gate, pair_gate or the CLI" + ] }, { + "module": "complexity.hints", "classification": "load_bearing", + "reason": "reachable from gate, map_gate, pair_gate or the CLI", "importers": [ "complexity", "complexity.map" - ], - "module": "complexity.hints", - "reason": "reachable from gate, map_gate, pair_gate or the CLI" + ] }, { + "module": "complexity.ledger", "classification": "load_bearing", + "reason": "reachable from gate, map_gate, pair_gate or the CLI", "importers": [ "cli", "complexity", "complexity.map", "regress.candidate" - ], - "module": "complexity.ledger", - "reason": "reachable from gate, map_gate, pair_gate or the CLI" + ] }, { + "module": "complexity.map", "classification": "load_bearing", + "reason": "reachable from gate, map_gate, pair_gate or the CLI", "importers": [ "complexity", "complexity.hints", @@ -81,22 +93,22 @@ "regress.candidate", "semantic.prove_filter", "tool_hunter" - ], - "module": "complexity.map", - "reason": "reachable from gate, map_gate, pair_gate or the CLI" + ] }, { + "module": "complexity.signals", "classification": "load_bearing", + "reason": "reachable from gate, map_gate, pair_gate or the CLI", "importers": [ "complexity", "complexity.hints", "complexity.map" - ], - "module": "complexity.signals", - "reason": "reachable from gate, map_gate, pair_gate or the CLI" + ] }, { + "module": "config", "classification": "load_bearing", + "reason": "reachable from gate, map_gate, pair_gate or the CLI", "importers": [ "cli", "harness", @@ -109,47 +121,48 @@ "regress.candidate", "regress.recipes", "run" - ], - "module": "config", - "reason": "reachable from gate, map_gate, pair_gate or the CLI" + ] }, { + "module": "contracts", "classification": "load_bearing", + "reason": "pre-push-safety-net Req 7.3: strict shared manifest serialization, independent of push", "importers": [ "config", "cpg.artifact", "model.contracts", "push.cache", "push.contracts", - "push.policy" - ], - "module": "contracts", - "reason": "pre-push-safety-net Req 7.3: strict shared manifest serialization, independent of push" + "push.policy", + "push.vetoes" + ] }, { - "classification": "load_bearing", - "importers": [ - "cli", - "cpg.artifact", - "cpg.backend", - "model.config_value", - "model.dominance", - "model.judge", - "model.partitions", - "model.pipeline", - "model.scan", - "model.taint", - "push.cache", - "push.eligibility", - "push.policy", - "push.reuse", - "push.runner" - ], "module": "cpg", - "reason": "model-grounded-detection Req 4: the CPG seam package" + "classification": "load_bearing", + "reason": "model-grounded-detection Req 4: the CPG seam package", + "importers": [ + "cli", + "cpg.artifact", + "cpg.backend", + "model.config_value", + "model.dominance", + "model.judge", + "model.partitions", + "model.pipeline", + "model.scan", + "model.taint", + "push.cache", + "push.eligibility", + "push.policy", + "push.reuse", + "push.runner" + ] }, { + "module": "cpg.artifact", "classification": "load_bearing", + "reason": "pre-push-safety-net Req 4.3/7.3: backend graph identity and live lease contract; validation integration pending", "importers": [ "cpg.backend", "push.cache", @@ -157,12 +170,12 @@ "push.policy", "push.reuse", "push.runner" - ], - "module": "cpg.artifact", - "reason": "pre-push-safety-net Req 4.3/7.3: backend graph identity and live lease contract; validation integration pending" + ] }, { + "module": "cpg.backend", "classification": "load_bearing", + "reason": "model-grounded-detection Req 4.1/4.5: the single Joern subprocess boundary", "importers": [ "cli", "cpg.artifact", @@ -177,20 +190,20 @@ "push.policy", "push.reuse", "push.runner" - ], - "module": "cpg.backend", - "reason": "model-grounded-detection Req 4.1/4.5: the single Joern subprocess boundary" + ] }, { + "module": "cpg.capability", "classification": "load_bearing", + "reason": "model-grounded-detection Req 4.2/4.3: the engine probe that degrades to suspicion", "importers": [ "cpg.backend" - ], - "module": "cpg.capability", - "reason": "model-grounded-detection Req 4.2/4.3: the engine probe that degrades to suspicion" + ] }, { + "module": "findings", "classification": "load_bearing", + "reason": "reachable from gate, map_gate, pair_gate or the CLI", "importers": [ "benchmark", "calibration", @@ -219,124 +232,124 @@ "tool_hunter", "verification", "verify_judge" - ], - "module": "findings", - "reason": "reachable from gate, map_gate, pair_gate or the CLI" + ] }, { - "classification": "standalone_capability", - "importers": [ - "cli" - ], "module": "fusion", - "reason": "two-panel adjudication engine; reached from the scan's report stage and used standalone" - }, - { - "classification": "load_bearing", + "classification": "standalone_capability", + "reason": "two-panel adjudication engine; reached from the scan's report stage and used standalone", "importers": [ "cli" - ], - "module": "gate", - "reason": "entry point" + ] }, { + "module": "gate", "classification": "load_bearing", + "reason": "entry point", + "importers": [ + "cli" + ] + }, + { + "module": "harness", + "classification": "load_bearing", + "reason": "reachable from gate, map_gate, pair_gate or the CLI", "importers": [ "cli", "slot_contract" - ], - "module": "harness", - "reason": "reachable from gate, map_gate, pair_gate or the CLI" + ] }, { + "module": "harness_ext", "classification": "standalone_capability", + "reason": "HarnessX extension surface; loaded by name when the optional harness is present", "importers": [ "cli", "fusion", "hunter_harness", "stage_processors", "verify_judge" - ], - "module": "harness_ext", - "reason": "HarnessX extension surface; loaded by name when the optional harness is present" + ] }, { + "module": "hunter", "classification": "load_bearing", + "reason": "reachable from gate, map_gate, pair_gate or the CLI", "importers": [ "cli", "hunter_harness" - ], - "module": "hunter", - "reason": "reachable from gate, map_gate, pair_gate or the CLI" + ] }, { + "module": "hunter_harness", "classification": "standalone_capability", + "reason": "harness wiring for the tool hunter; used by the hunter path and by mcp", "importers": [ "cli" - ], - "module": "hunter_harness", - "reason": "harness wiring for the tool hunter; used by the hunter path and by mcp" + ] }, { + "module": "hunter_tools", "classification": "load_bearing", + "reason": "reachable from gate, map_gate, pair_gate or the CLI", "importers": [ "tool_hunter" - ], - "module": "hunter_tools", - "reason": "reachable from gate, map_gate, pair_gate or the CLI" + ] }, { + "module": "improve", "classification": "load_bearing", + "reason": "reachable from gate, map_gate, pair_gate or the CLI", "importers": [ "cli", "improve.evolve" - ], - "module": "improve", - "reason": "reachable from gate, map_gate, pair_gate or the CLI" + ] }, { + "module": "improve.evolve", "classification": "load_bearing", + "reason": "reachable from gate, map_gate, pair_gate or the CLI", "importers": [ "improve" - ], - "module": "improve.evolve", - "reason": "reachable from gate, map_gate, pair_gate or the CLI" + ] }, { - "classification": "load_bearing", - "importers": [ - "improve", - "improve.evolve" - ], "module": "improve.journal", - "reason": "reachable from gate, map_gate, pair_gate or the CLI" - }, - { "classification": "load_bearing", + "reason": "reachable from gate, map_gate, pair_gate or the CLI", "importers": [ "improve", "improve.evolve" - ], - "module": "improve.validator", - "reason": "reachable from gate, map_gate, pair_gate or the CLI" + ] }, { + "module": "improve.validator", "classification": "load_bearing", + "reason": "reachable from gate, map_gate, pair_gate or the CLI", + "importers": [ + "improve", + "improve.evolve" + ] + }, + { + "module": "index", + "classification": "load_bearing", + "reason": "reachable from gate, map_gate, pair_gate or the CLI", "importers": [ "cli", "skills" - ], - "module": "index", - "reason": "reachable from gate, map_gate, pair_gate or the CLI" + ] }, { - "classification": "load_bearing", - "importers": [], "module": "map_gate", - "reason": "entry point" + "classification": "load_bearing", + "reason": "entry point", + "importers": [] }, { + "module": "mapping", "classification": "load_bearing", + "reason": "reachable from gate, map_gate, pair_gate or the CLI", "importers": [ "cli", "gate", @@ -348,20 +361,20 @@ "preprocess", "push.runner", "stage_processors" - ], - "module": "mapping", - "reason": "reachable from gate, map_gate, pair_gate or the CLI" + ] }, { + "module": "mcp", "classification": "standalone_capability", + "reason": "narrow MCP server over stdio; its own `ousast mcp` entry point and OpenCode integration", "importers": [ "cli" - ], - "module": "mcp", - "reason": "narrow MCP server over stdio; its own `ousast mcp` entry point and OpenCode integration" + ] }, { + "module": "model", "classification": "load_bearing", + "reason": "reachable from gate, map_gate, pair_gate or the CLI", "importers": [ "cli", "cpg.backend", @@ -386,43 +399,44 @@ "push.report", "push.reuse", "push.runner", - "push.snapshot" - ], - "module": "model", - "reason": "reachable from gate, map_gate, pair_gate or the CLI" + "push.snapshot", + "push.vetoes" + ] }, { - "classification": "load_bearing", - "importers": [], "module": "model.audit", - "reason": "model-grounded-detection Req 3: this classifier; run by the maintainer, not by the scan" + "classification": "load_bearing", + "reason": "model-grounded-detection Req 3: this classifier; run by the maintainer, not by the scan", + "importers": [] }, { - "classification": "load_bearing", - "importers": [], "module": "model.calibrate", - "reason": "model-grounded-detection Req 9: the corpus as the model's calibration set" + "classification": "load_bearing", + "reason": "model-grounded-detection Req 9: the corpus as the model's calibration set", + "importers": [] }, { + "module": "model.candidates", "classification": "load_bearing", + "reason": "reachable from gate, map_gate, pair_gate or the CLI", "importers": [ "cli", "model.scan" - ], - "module": "model.candidates", - "reason": "reachable from gate, map_gate, pair_gate or the CLI" + ] }, { + "module": "model.config_value", "classification": "load_bearing", + "reason": "model-grounded-detection Req 6.3: constant abstraction for the configuration families", "importers": [ "model.pipeline", "model.scan" - ], - "module": "model.config_value", - "reason": "model-grounded-detection Req 6.3: constant abstraction for the configuration families" + ] }, { + "module": "model.contracts", "classification": "load_bearing", + "reason": "pre-push-safety-net Req 4.1/7.3: generic deadline, change and exact scope contracts; integration pending", "importers": [ "cli", "cpg.backend", @@ -436,51 +450,52 @@ "push.report", "push.reuse", "push.runner", - "push.snapshot" - ], - "module": "model.contracts", - "reason": "pre-push-safety-net Req 4.1/7.3: generic deadline, change and exact scope contracts; integration pending" + "push.snapshot", + "push.vetoes" + ] }, { + "module": "model.dominance", "classification": "load_bearing", + "reason": "model-grounded-detection Req 6.2: guard dominance, the arbiter for bugs that never crash", "importers": [ "model.pipeline", "model.scan" - ], - "module": "model.dominance", - "reason": "model-grounded-detection Req 6.2: guard dominance, the arbiter for bugs that never crash" + ] }, { + "module": "model.endpoint", "classification": "load_bearing", + "reason": "model-grounded-detection Req 8: the judge client, wired by model/judge.py in group 3", "importers": [ "cli", "push.assistance" - ], - "module": "model.endpoint", - "reason": "model-grounded-detection Req 8: the judge client, wired by model/judge.py in group 3" + ] }, { + "module": "model.evidence", "classification": "load_bearing", + "reason": "reachable from gate, map_gate, pair_gate or the CLI", "importers": [ "model.scan" - ], - "module": "model.evidence", - "reason": "reachable from gate, map_gate, pair_gate or the CLI" + ] }, { - "classification": "load_bearing", - "importers": [], "module": "model.execution", - "reason": "model-grounded-detection Req 10: the deferred execution tier seam, adopted not built" + "classification": "load_bearing", + "reason": "model-grounded-detection Req 10: the deferred execution tier seam, adopted not built", + "importers": [] }, { - "classification": "load_bearing", - "importers": [], "module": "model.judge", - "reason": "model-grounded-detection Req 8: one bounded question, checked against the model" + "classification": "load_bearing", + "reason": "model-grounded-detection Req 8: one bounded question, checked against the model", + "importers": [] }, { + "module": "model.ladder", "classification": "load_bearing", + "reason": "model-grounded-detection Req 5: the evidence ladder every finding carries", "importers": [ "model.config_value", "model.dominance", @@ -490,40 +505,40 @@ "model.scan", "model.taint", "push.policy" - ], - "module": "model.ladder", - "reason": "model-grounded-detection Req 5: the evidence ladder every finding carries" + ] }, { + "module": "model.layout", "classification": "load_bearing", + "reason": "reachable from gate, map_gate, pair_gate or the CLI", "importers": [ "model.partitions", "model.scan", "preprocess", "push.runner" - ], - "module": "model.layout", - "reason": "reachable from gate, map_gate, pair_gate or the CLI" + ] }, { + "module": "model.partitions", "classification": "load_bearing", + "reason": "reachable from gate, map_gate, pair_gate or the CLI", "importers": [ "model.scan" - ], - "module": "model.partitions", - "reason": "reachable from gate, map_gate, pair_gate or the CLI" + ] }, { + "module": "model.pipeline", "classification": "load_bearing", + "reason": "model-grounded-detection Req 8: the enumerator proposes, the LLM answers, the model disposes", "importers": [ "model.scan", "push.policy" - ], - "module": "model.pipeline", - "reason": "model-grounded-detection Req 8: the enumerator proposes, the LLM answers, the model disposes" + ] }, { + "module": "model.regions", "classification": "load_bearing", + "reason": "contributor-scan Req 2: regions from entry points, with the families each admits", "importers": [ "cli", "model.layout", @@ -531,40 +546,41 @@ "push.policy", "push.reuse", "push.runner" - ], - "module": "model.regions", - "reason": "contributor-scan Req 2: regions from entry points, with the families each admits" + ] }, { + "module": "model.report", "classification": "load_bearing", + "reason": "model-grounded-detection Req 9.3/11.1: per-slice reporting with the overfitting gap", "importers": [ "cli" - ], - "module": "model.report", - "reason": "model-grounded-detection Req 9.3/11.1: per-slice reporting with the overfitting gap" + ] }, { + "module": "model.scan", "classification": "load_bearing", + "reason": "contributor-scan Req 3: the repository driver -- one CPG, one budget, ranked spend", "importers": [ "cli", "push.policy", "push.report", - "push.runner" - ], - "module": "model.scan", - "reason": "contributor-scan Req 3: the repository driver -- one CPG, one budget, ranked spend" + "push.runner", + "push.vetoes" + ] }, { + "module": "model.shipped", "classification": "load_bearing", + "reason": "reachable from gate, map_gate, pair_gate or the CLI", "importers": [ "cli", "push.runner" - ], - "module": "model.shipped", - "reason": "reachable from gate, map_gate, pair_gate or the CLI" + ] }, { + "module": "model.specs", "classification": "load_bearing", + "reason": "model-grounded-detection Req 7.2-7.4: the security vocabularies the CPG queries are parameterised by", "importers": [ "model.config_value", "model.dominance", @@ -575,54 +591,54 @@ "model.scan", "model.taint", "push.policy" - ], - "module": "model.specs", - "reason": "model-grounded-detection Req 7.2-7.4: the security vocabularies the CPG queries are parameterised by" + ] }, { + "module": "model.taint", "classification": "load_bearing", + "reason": "model-grounded-detection Req 6.1: taint reachability over the CPG, the flow-family arbiter", "importers": [ "model.judge", "model.pipeline", "model.scan" - ], - "module": "model.taint", - "reason": "model-grounded-detection Req 6.1: taint reachability over the CPG, the flow-family arbiter" + ] }, { + "module": "model.taxonomy", "classification": "load_bearing", + "reason": "reachable from gate, map_gate, pair_gate or the CLI", "importers": [ "cli", "model.candidates", "model.report", "model.scan", "model.specs" - ], - "module": "model.taxonomy", - "reason": "reachable from gate, map_gate, pair_gate or the CLI" + ] }, { + "module": "pair_gate", "classification": "load_bearing", + "reason": "entry point", "importers": [ "cli" - ], - "module": "pair_gate", - "reason": "entry point" + ] }, { + "module": "pairs", "classification": "load_bearing", + "reason": "reachable from gate, map_gate, pair_gate or the CLI", "importers": [ "cli", "improve", "improve.evolve", "model.candidates", "pair_gate" - ], - "module": "pairs", - "reason": "reachable from gate, map_gate, pair_gate or the CLI" + ] }, { + "module": "policy", "classification": "load_bearing", + "reason": "reachable from gate, map_gate, pair_gate or the CLI", "importers": [ "cli", "findings", @@ -633,20 +649,20 @@ "scoring.project_score", "semantic.overlay", "stage_processors" - ], - "module": "policy", - "reason": "reachable from gate, map_gate, pair_gate or the CLI" + ] }, { + "module": "policy.verycode", "classification": "load_bearing", + "reason": "reachable from gate, map_gate, pair_gate or the CLI", "importers": [ "policy" - ], - "module": "policy.verycode", - "reason": "reachable from gate, map_gate, pair_gate or the CLI" + ] }, { + "module": "preprocess", "classification": "load_bearing", + "reason": "reachable from gate, map_gate, pair_gate or the CLI", "importers": [ "cli", "complexity.hints", @@ -671,38 +687,38 @@ "semantic.overlay", "skills", "stage_processors" - ], - "module": "preprocess", - "reason": "reachable from gate, map_gate, pair_gate or the CLI" + ] }, { + "module": "provenance", "classification": "load_bearing", + "reason": "reachable from gate, map_gate, pair_gate or the CLI", "importers": [ "cli" - ], - "module": "provenance", - "reason": "reachable from gate, map_gate, pair_gate or the CLI" + ] }, { - "classification": "load_bearing", - "importers": [ - "model.endpoint", - "tool_hunter" - ], "module": "provider", - "reason": "reachable from gate, map_gate, pair_gate or the CLI" - }, - { "classification": "load_bearing", + "reason": "reachable from gate, map_gate, pair_gate or the CLI", "importers": [ "model.endpoint", "tool_hunter" - ], - "module": "provider.openrouter", - "reason": "reachable from gate, map_gate, pair_gate or the CLI" + ] }, { + "module": "provider.openrouter", "classification": "load_bearing", + "reason": "reachable from gate, map_gate, pair_gate or the CLI", + "importers": [ + "model.endpoint", + "tool_hunter" + ] + }, + { + "module": "push", + "classification": "load_bearing", + "reason": "pre-push-safety-net Req 5.5/7.3: experimental push contract package; no hook installed", "importers": [ "cli", "push.assistance", @@ -711,109 +727,120 @@ "push.report", "push.reuse", "push.runner", - "push.snapshot" - ], - "module": "push", - "reason": "pre-push-safety-net Req 5.5/7.3: experimental push contract package; no hook installed" + "push.snapshot", + "push.vetoes" + ] }, { + "module": "push.assistance", "classification": "load_bearing", + "reason": "reachable from gate, map_gate, pair_gate or the CLI", "importers": [ "push.runner" - ], - "module": "push.assistance", - "reason": "reachable from gate, map_gate, pair_gate or the CLI" + ] }, { + "module": "push.cache", "classification": "load_bearing", + "reason": "pre-push-safety-net task 6.2: bounded artifact publication and leased eviction; runner integration in 6.4", "importers": [ "push.policy", "push.reuse", "push.runner" - ], - "module": "push.cache", - "reason": "pre-push-safety-net task 6.2: bounded artifact publication and leased eviction; runner integration in 6.4" + ] }, { + "module": "push.contracts", "classification": "load_bearing", + "reason": "pre-push-safety-net Req 5.5/7.3: immutable comparisons and independent result statuses; runner pending", "importers": [ "push.policy", "push.report", "push.reuse", "push.runner", - "push.snapshot" - ], - "module": "push.contracts", - "reason": "pre-push-safety-net Req 5.5/7.3: immutable comparisons and independent result statuses; runner pending" + "push.snapshot", + "push.vetoes" + ] }, { + "module": "push.eligibility", "classification": "load_bearing", + "reason": "reachable from gate, map_gate, pair_gate or the CLI", "importers": [ "push.runner" - ], - "module": "push.eligibility", - "reason": "reachable from gate, map_gate, pair_gate or the CLI" + ] }, { + "module": "push.policy", "classification": "load_bearing", + "reason": "pre-push-safety-net Req 2.4/3.1/3.4/4.1: targeted same-semantics base comparison; replay integration pending", "importers": [ "push.eligibility", "push.report", - "push.runner" - ], - "module": "push.policy", - "reason": "pre-push-safety-net Req 2.4/3.1/3.4/4.1: targeted same-semantics base comparison; replay integration pending" + "push.runner", + "push.vetoes" + ] }, { + "module": "push.report", "classification": "load_bearing", + "reason": "pre-push-safety-net Req 5.1/5.2/5.5/7.3: compact output and complete artifacts; runner integration pending", "importers": [ "push.assistance", "push.runner" - ], - "module": "push.report", - "reason": "pre-push-safety-net Req 5.1/5.2/5.5/7.3: compact output and complete artifacts; runner integration pending" + ] }, { + "module": "push.reuse", "classification": "load_bearing", + "reason": "reachable from gate, map_gate, pair_gate or the CLI", "importers": [ "push.runner" - ], - "module": "push.reuse", - "reason": "reachable from gate, map_gate, pair_gate or the CLI" + ] }, { + "module": "push.runner", "classification": "load_bearing", + "reason": "reachable from gate, map_gate, pair_gate or the CLI", "importers": [ "cli", "push.assistance" - ], - "module": "push.runner", - "reason": "reachable from gate, map_gate, pair_gate or the CLI" + ] }, { + "module": "push.snapshot", "classification": "load_bearing", + "reason": "pre-push-safety-net Req 1.1/1.3/1.4/7.1: local immutable ref resolution; runner integration pending", "importers": [ "push.runner" - ], - "module": "push.snapshot", - "reason": "pre-push-safety-net Req 1.1/1.3/1.4/7.1: local immutable ref resolution; runner integration pending" + ] + }, + { + "module": "push.vetoes", + "classification": "load_bearing", + "reason": "reachable from gate, map_gate, pair_gate or the CLI", + "importers": [ + "push.runner" + ] }, { - "classification": "standalone_capability", - "importers": [], "module": "push_inputs", - "reason": "pre-push-safety-net task 1.2: offline input provenance validator; python -m openultrasast.push_inputs" + "classification": "standalone_capability", + "reason": "pre-push-safety-net task 1.2: offline input provenance validator; python -m openultrasast.push_inputs", + "importers": [] }, { + "module": "push_scoring", "classification": "standalone_capability", + "reason": "pre-push-safety-net task 1.3: frozen-profile diagnostic outcome scorer; python -m openultrasast.push_scoring", "importers": [ "push.eligibility" - ], - "module": "push_scoring", - "reason": "pre-push-safety-net task 1.3: frozen-profile diagnostic outcome scorer; python -m openultrasast.push_scoring" + ] }, { + "module": "rank", "classification": "load_bearing", + "reason": "reachable from gate, map_gate, pair_gate or the CLI", "importers": [ "calibration", "cli", @@ -826,12 +853,12 @@ "map_gate", "pairs", "stage_processors" - ], - "module": "rank", - "reason": "reachable from gate, map_gate, pair_gate or the CLI" + ] }, { + "module": "redaction", "classification": "load_bearing", + "reason": "reachable from gate, map_gate, pair_gate or the CLI", "importers": [ "harness", "model.judge", @@ -840,73 +867,73 @@ "push.report", "reports", "semantic.obligations.intent" - ], - "module": "redaction", - "reason": "reachable from gate, map_gate, pair_gate or the CLI" + ] }, { + "module": "regress", "classification": "load_bearing", + "reason": "reachable from gate, map_gate, pair_gate or the CLI", "importers": [ "cli", "regress.candidate" - ], - "module": "regress", - "reason": "reachable from gate, map_gate, pair_gate or the CLI" + ] }, { + "module": "regress.candidate", "classification": "load_bearing", + "reason": "reachable from gate, map_gate, pair_gate or the CLI", "importers": [ "regress" - ], - "module": "regress.candidate", - "reason": "reachable from gate, map_gate, pair_gate or the CLI" + ] }, { - "classification": "load_bearing", - "importers": [ - "regress", - "regress.candidate" - ], "module": "regress.recipes", - "reason": "reachable from gate, map_gate, pair_gate or the CLI" - }, - { "classification": "load_bearing", + "reason": "reachable from gate, map_gate, pair_gate or the CLI", "importers": [ "regress", "regress.candidate" - ], + ] + }, + { "module": "regress.safety", - "reason": "reachable from gate, map_gate, pair_gate or the CLI" - }, - { "classification": "load_bearing", + "reason": "reachable from gate, map_gate, pair_gate or the CLI", "importers": [ "regress", "regress.candidate" - ], - "module": "regress.verdict", - "reason": "reachable from gate, map_gate, pair_gate or the CLI" + ] }, { + "module": "regress.verdict", "classification": "load_bearing", + "reason": "reachable from gate, map_gate, pair_gate or the CLI", + "importers": [ + "regress", + "regress.candidate" + ] + }, + { + "module": "reports", + "classification": "load_bearing", + "reason": "reachable from gate, map_gate, pair_gate or the CLI", "importers": [ "cli" - ], - "module": "reports", - "reason": "reachable from gate, map_gate, pair_gate or the CLI" + ] }, { + "module": "repos", "classification": "load_bearing", + "reason": "reachable from gate, map_gate, pair_gate or the CLI", "importers": [ "cli", "push_inputs" - ], - "module": "repos", - "reason": "reachable from gate, map_gate, pair_gate or the CLI" + ] }, { + "module": "ruleset", "classification": "load_bearing", + "reason": "reachable from gate, map_gate, pair_gate or the CLI", "importers": [ "cli", "findings", @@ -916,79 +943,79 @@ "improve.validator", "pairs", "stage_processors" - ], - "module": "ruleset", - "reason": "reachable from gate, map_gate, pair_gate or the CLI" + ] }, { + "module": "ruleset.store", "classification": "load_bearing", + "reason": "reachable from gate, map_gate, pair_gate or the CLI", "importers": [ "improve.validator", "ruleset" - ], - "module": "ruleset.store", - "reason": "reachable from gate, map_gate, pair_gate or the CLI" + ] }, { + "module": "run", "classification": "load_bearing", + "reason": "reachable from gate, map_gate, pair_gate or the CLI", "importers": [ "cli", "reports" - ], - "module": "run", - "reason": "reachable from gate, map_gate, pair_gate or the CLI" + ] }, { + "module": "sandbox", "classification": "load_bearing", + "reason": "reachable from gate, map_gate, pair_gate or the CLI", "importers": [ "cli", "regress.candidate", "regress.recipes", "regress.safety", "regress.verdict" - ], - "module": "sandbox", - "reason": "reachable from gate, map_gate, pair_gate or the CLI" + ] }, { + "module": "sandbox.probe", "classification": "load_bearing", + "reason": "reachable from gate, map_gate, pair_gate or the CLI", "importers": [ "sandbox" - ], - "module": "sandbox.probe", - "reason": "reachable from gate, map_gate, pair_gate or the CLI" + ] }, { + "module": "sandbox.runner", "classification": "load_bearing", + "reason": "reachable from gate, map_gate, pair_gate or the CLI", "importers": [ "regress.candidate", "regress.recipes", "regress.safety", "sandbox" - ], - "module": "sandbox.runner", - "reason": "reachable from gate, map_gate, pair_gate or the CLI" + ] }, { + "module": "scoring", "classification": "load_bearing", + "reason": "reachable from gate, map_gate, pair_gate or the CLI", "importers": [ "cli", "improve.evolve", "stage_processors" - ], - "module": "scoring", - "reason": "reachable from gate, map_gate, pair_gate or the CLI" + ] }, { + "module": "scoring.project_score", "classification": "load_bearing", + "reason": "reachable from gate, map_gate, pair_gate or the CLI", "importers": [ "scoring" - ], - "module": "scoring.project_score", - "reason": "reachable from gate, map_gate, pair_gate or the CLI" + ] }, { + "module": "semantic", "classification": "load_bearing", + "reason": "reachable from gate, map_gate, pair_gate or the CLI", "importers": [ "cli", "cpg.capability", @@ -1008,40 +1035,40 @@ "semantic.overlay", "semantic.prove_filter", "semantic.taint" - ], - "module": "semantic", - "reason": "reachable from gate, map_gate, pair_gate or the CLI" + ] }, { + "module": "semantic.cst", "classification": "load_bearing", + "reason": "reachable from gate, map_gate, pair_gate or the CLI", "importers": [ "semantic.ir" - ], - "module": "semantic.cst", - "reason": "reachable from gate, map_gate, pair_gate or the CLI" + ] }, { + "module": "semantic.engines", "classification": "load_bearing", + "reason": "reachable from gate, map_gate, pair_gate or the CLI", "importers": [ "cpg.capability", "semantic", "semantic.overlay" - ], - "module": "semantic.engines", - "reason": "reachable from gate, map_gate, pair_gate or the CLI" + ] }, { + "module": "semantic.extra", "classification": "load_bearing", + "reason": "reachable from gate, map_gate, pair_gate or the CLI", "importers": [ "semantic", "semantic.cst", "semantic.engines" - ], - "module": "semantic.extra", - "reason": "reachable from gate, map_gate, pair_gate or the CLI" + ] }, { + "module": "semantic.facts", "classification": "load_bearing", + "reason": "reachable from gate, map_gate, pair_gate or the CLI", "importers": [ "cli", "hunter_tools", @@ -1056,23 +1083,23 @@ "semantic.obligations.shapes", "semantic.overlay", "semantic.taint" - ], - "module": "semantic.facts", - "reason": "reachable from gate, map_gate, pair_gate or the CLI" + ] }, { + "module": "semantic.functions", "classification": "load_bearing", + "reason": "reachable from gate, map_gate, pair_gate or the CLI", "importers": [ "hunter_tools", "pairs", "semantic.obligations.shapes", "semantic.overlay" - ], - "module": "semantic.functions", - "reason": "reachable from gate, map_gate, pair_gate or the CLI" + ] }, { + "module": "semantic.ir", "classification": "load_bearing", + "reason": "reachable from gate, map_gate, pair_gate or the CLI", "importers": [ "cli", "hunter_tools", @@ -1085,12 +1112,12 @@ "semantic.obligations.shapes", "semantic.overlay", "semantic.taint" - ], - "module": "semantic.ir", - "reason": "reachable from gate, map_gate, pair_gate or the CLI" + ] }, { + "module": "semantic.obligations", "classification": "load_bearing", + "reason": "reachable from gate, map_gate, pair_gate or the CLI", "importers": [ "cli", "hunter_tools", @@ -1104,33 +1131,33 @@ "semantic.obligations.policy", "semantic.obligations.shapes", "semantic.obligations.siblings" - ], - "module": "semantic.obligations", - "reason": "reachable from gate, map_gate, pair_gate or the CLI" + ] }, { + "module": "semantic.obligations.check", "classification": "load_bearing", + "reason": "reachable from gate, map_gate, pair_gate or the CLI", "importers": [ "cli", "semantic.obligations", "semantic.obligations.intent" - ], - "module": "semantic.obligations.check", - "reason": "reachable from gate, map_gate, pair_gate or the CLI" + ] }, { + "module": "semantic.obligations.dominance", "classification": "load_bearing", + "reason": "reachable from gate, map_gate, pair_gate or the CLI", "importers": [ "cli", "hunter_tools", "pairs", "semantic.obligations.check" - ], - "module": "semantic.obligations.dominance", - "reason": "reachable from gate, map_gate, pair_gate or the CLI" + ] }, { + "module": "semantic.obligations.facts", "classification": "load_bearing", + "reason": "reachable from gate, map_gate, pair_gate or the CLI", "importers": [ "model.specs", "pairs", @@ -1140,149 +1167,137 @@ "semantic.obligations.policy", "semantic.obligations.shapes", "semantic.obligations.siblings" - ], - "module": "semantic.obligations.facts", - "reason": "reachable from gate, map_gate, pair_gate or the CLI" + ] }, { + "module": "semantic.obligations.intent", "classification": "load_bearing", + "reason": "reachable from gate, map_gate, pair_gate or the CLI", "importers": [ "cli" - ], - "module": "semantic.obligations.intent", - "reason": "reachable from gate, map_gate, pair_gate or the CLI" + ] }, { + "module": "semantic.obligations.operations", "classification": "load_bearing", + "reason": "reachable from gate, map_gate, pair_gate or the CLI", "importers": [ "model.candidates", "semantic.obligations.check", "semantic.obligations.dominance", "semantic.obligations.siblings" - ], - "module": "semantic.obligations.operations", - "reason": "reachable from gate, map_gate, pair_gate or the CLI" + ] }, { + "module": "semantic.obligations.policy", "classification": "load_bearing", + "reason": "reachable from gate, map_gate, pair_gate or the CLI", "importers": [ "cli", "semantic.obligations.check" - ], - "module": "semantic.obligations.policy", - "reason": "reachable from gate, map_gate, pair_gate or the CLI" + ] }, { + "module": "semantic.obligations.shapes", "classification": "load_bearing", + "reason": "reachable from gate, map_gate, pair_gate or the CLI", "importers": [ "semantic.obligations", "semantic.obligations.operations" - ], - "module": "semantic.obligations.shapes", - "reason": "reachable from gate, map_gate, pair_gate or the CLI" + ] }, { + "module": "semantic.obligations.siblings", "classification": "load_bearing", + "reason": "reachable from gate, map_gate, pair_gate or the CLI", "importers": [ "semantic.obligations.check" - ], - "module": "semantic.obligations.siblings", - "reason": "reachable from gate, map_gate, pair_gate or the CLI" + ] }, { + "module": "semantic.overlay", "classification": "load_bearing", + "reason": "reachable from gate, map_gate, pair_gate or the CLI", "importers": [ "semantic", "semantic.prove_filter" - ], - "module": "semantic.overlay", - "reason": "reachable from gate, map_gate, pair_gate or the CLI" + ] }, { + "module": "semantic.prove_filter", "classification": "load_bearing", + "reason": "reachable from gate, map_gate, pair_gate or the CLI", "importers": [ "semantic" - ], - "module": "semantic.prove_filter", - "reason": "reachable from gate, map_gate, pair_gate or the CLI" + ] }, { + "module": "semantic.taint", "classification": "load_bearing", + "reason": "reachable from gate, map_gate, pair_gate or the CLI", "importers": [ "semantic.overlay" - ], - "module": "semantic.taint", - "reason": "reachable from gate, map_gate, pair_gate or the CLI" + ] }, { + "module": "skills", "classification": "standalone_capability", + "reason": "skill router; consumed by mcp and by the OpenCode integration, not by the scan path", "importers": [ "hunter", "hunter_harness" - ], - "module": "skills", - "reason": "skill router; consumed by mcp and by the OpenCode integration, not by the scan path" + ] }, { + "module": "slot_contract", "classification": "standalone_capability", + "reason": "the slot/contract protocol stage_processors implements", "importers": [ "stage_processors" - ], - "module": "slot_contract", - "reason": "the slot/contract protocol stage_processors implements" + ] }, { - "classification": "standalone_capability", - "importers": [], "module": "stage_processors", - "reason": "HarnessX slot-contracted scan stages; pinned by the zero-dependency guard in test_gate" + "classification": "standalone_capability", + "reason": "HarnessX slot-contracted scan stages; pinned by the zero-dependency guard in test_gate", + "importers": [] }, { + "module": "stages", "classification": "load_bearing", + "reason": "reachable from gate, map_gate, pair_gate or the CLI", "importers": [ "cli" - ], - "module": "stages", - "reason": "reachable from gate, map_gate, pair_gate or the CLI" + ] }, { + "module": "tool_hunter", "classification": "load_bearing", + "reason": "reachable from gate, map_gate, pair_gate or the CLI", "importers": [ "model.endpoint" - ], - "module": "tool_hunter", - "reason": "reachable from gate, map_gate, pair_gate or the CLI" + ] }, { + "module": "verification", "classification": "load_bearing", + "reason": "reachable from gate, map_gate, pair_gate or the CLI", "importers": [ "calibration", "cli", "fusion", "reports", "verify_judge" - ], - "module": "verification", - "reason": "reachable from gate, map_gate, pair_gate or the CLI" + ] }, { + "module": "verify_judge", "classification": "load_bearing", + "reason": "reachable from gate, map_gate, pair_gate or the CLI", "importers": [ "cli" - ], - "module": "verify_judge", - "reason": "reachable from gate, map_gate, pair_gate or the CLI" + ] } ], - "standalone": { - "fusion": "two-panel adjudication engine; reached from the scan's report stage and used standalone", - "harness_ext": "HarnessX extension surface; loaded by name when the optional harness is present", - "hunter_harness": "harness wiring for the tool hunter; used by the hunter path and by mcp", - "mcp": "narrow MCP server over stdio; its own `ousast mcp` entry point and OpenCode integration", - "push_inputs": "pre-push-safety-net task 1.2: offline input provenance validator; python -m openultrasast.push_inputs", - "push_scoring": "pre-push-safety-net task 1.3: frozen-profile diagnostic outcome scorer; python -m openultrasast.push_scoring", - "skills": "skill router; consumed by mcp and by the OpenCode integration, not by the scan path", - "slot_contract": "the slot/contract protocol stage_processors implements", - "stage_processors": "HarnessX slot-contracted scan stages; pinned by the zero-dependency guard in test_gate" - } + "note": "Group 8: runner reaches recomputed versioned eligibility and its frozen scorer." } diff --git a/benchmarks/measurements/2026-09-16-nodegoat-m1a-recorded-vetoes.json b/benchmarks/measurements/2026-09-16-nodegoat-m1a-recorded-vetoes.json new file mode 100644 index 0000000..c1fb774 --- /dev/null +++ b/benchmarks/measurements/2026-09-16-nodegoat-m1a-recorded-vetoes.json @@ -0,0 +1,2385 @@ +{ + "schema_version": 1, + "label": "EXPERIMENTAL recorded-veto evaluation (release milestone M1a). Listed vetoes were recorded, not applied. Nothing in this section is an alert, an admitted defect, a capability or a comparison result; the production result and admission above remain authoritative.", + "milestone": "M1a", + "flag": "--experimental-record-vetoes", + "development_budget_seconds": 900.0, + "budget_note": "Explicitly named development budget; this run cannot satisfy or measure the 30s hook latency gate.", + "source_commit": "c5cb68a7084e4ae7dcc60e6a98768720a81841e8", + "pins": { + "nodegoat-vulnerable": "c5cb68a7084e4ae7dcc60e6a98768720a81841e8", + "nodegoat-fixed": "0b453d5abc38f1a970d4771ebe6c5413f8c3b0a4", + "nodegoat-benign": "f772c59e5964c77812a6a89737eb54ed5371d30c" + }, + "target": { + "path": "app/routes/contributions.js", + "function": "handleContributionsUpdate", + "family": "injection" + }, + "witness_lines": [ + 32, + 33, + 34 + ], + "plan": [ + { + "id": "nodegoat-introduce", + "base": "nodegoat-fixed", + "head": "nodegoat-vulnerable", + "expected": "raw injection finding at the three eval lines with recorded novelty new; every applied veto listed", + "expected_head_findings_at_target": 3, + "base_oid": "0b453d5abc38f1a970d4771ebe6c5413f8c3b0a4", + "head_oid": "c5cb68a7084e4ae7dcc60e6a98768720a81841e8" + }, + { + "id": "nodegoat-repair", + "base": "nodegoat-vulnerable", + "head": "nodegoat-fixed", + "expected": "fixed twin analyzed and quiet: target questions answered with no injection finding; three base-only findings", + "expected_head_findings_at_target": 0, + "base_oid": "c5cb68a7084e4ae7dcc60e6a98768720a81841e8", + "head_oid": "0b453d5abc38f1a970d4771ebe6c5413f8c3b0a4" + }, + { + "id": "nodegoat-benign", + "base": "nodegoat-vulnerable", + "head": "nodegoat-benign", + "expected": "unchanged backlog: raw findings remain with recorded novelty unchanged, never new or worsened", + "expected_head_findings_at_target": 3, + "base_oid": "c5cb68a7084e4ae7dcc60e6a98768720a81841e8", + "head_oid": "f772c59e5964c77812a6a89737eb54ed5371d30c" + } + ], + "source_receipts": { + "nodegoat-vulnerable": { + "path": "app/routes/contributions.js", + "bytes": 2485, + "sha256": "196bdeaa22da4cfe8a851b1b932710b2fcedd21f14ed75d70b739ba759a01003", + "lines": 80 + }, + "nodegoat-fixed": { + "path": "app/routes/contributions.js", + "bytes": 2491, + "sha256": "9dc0a0bc147adc4c76c27faae75f316dd537ddaf4fb35fa693002450bd4b4e92", + "lines": 80 + }, + "nodegoat-benign": { + "path": "app/routes/contributions.js", + "bytes": 2498, + "sha256": "66b97183be80e55fa3d690d2fc7103aabddb4e10ef9db439c22bce6c7651bcc4", + "lines": 80 + } + }, + "provenance": { + "repository": "/results/m1a-2026-09-16/objects.git", + "engine_runtime": "7213365694f836758cb5fe2b05504cbbb735b8c2f0dea5d5dd19546a1f5fd43d", + "engine": "joern-4.0.625", + "facts": "32edb6e1a78f1afb08ac4248cd436be16663e0d90dc1b3aaf948f2ce49a5a8f0", + "graph_layout": "403dda8d804c6109800ab95677f1c9a7c6158b9c83e58a65e2e6baa5132eefa8", + "queries": "7bf090e053331f03d04c9290c8a593d00efd4d390f4b77b8382c2befc47996cc", + "policy": "ed1645c36e85b0189f6055edfbc870acb42c17cd56a568ac157ae46c0f4be151", + "core": "78716c62112f9aafb120f6c0547208f60216a2ef46f689cd4e81f5d63702db82", + "semantics": "2edd13e1582b9a1d5d611b01f9862fafcb8220dcc07838fe42f56e53be00c7f1", + "ranking_mode": "evidence", + "model": "disabled", + "capabilities": "9f0d85961ed49526a3131e71ec3f7e01aeca752da74ba7d74650168853781c9c", + "cache": "cold_no_reuse" + }, + "hardware": { + "platform": "Linux-6.8.0-138-generic-x86_64-with-glibc2.39", + "cpu_affinity": [ + 0, + 1, + 2, + 3 + ] + }, + "instrument_sha256": "761e23ca64234306ad92d32fecfc68031fae7e5b9f2b02973f0b6f1beeefda59", + "cases": [ + { + "case_id": "nodegoat-introduce", + "command": [ + "/venv/bin/python", + "-m", + "openultrasast.cli", + "pre-push", + "/results/m1a-2026-09-16/objects.git", + "--base", + "0b453d5abc38f1a970d4771ebe6c5413f8c3b0a4", + "--head", + "c5cb68a7084e4ae7dcc60e6a98768720a81841e8", + "--artifact", + "/results/m1a-2026-09-16/nodegoat-introduce.json", + "--deadline", + "900.0", + "--cancellation-allowance", + "2", + "--max-regions", + "500", + "--cache-dir", + "/results/m1a-2026-09-16/cache", + "--experimental-record-vetoes" + ], + "base_oid": "0b453d5abc38f1a970d4771ebe6c5413f8c3b0a4", + "head_oid": "c5cb68a7084e4ae7dcc60e6a98768720a81841e8", + "exit_code": 0, + "elapsed_seconds": 349.8240748399403, + "terminal": "No actionable defects reported; analysis is incomplete.\nNotice: Some checks are not enabled for normal alerts. Review capability coverage in the details.\nExperimental: recorded-veto evaluation retained 4 raw finding(s) with 55 recorded veto(es) and 0 base-only finding(s) in the detailed result; recorded, not applied; not an alert.\nDetails: /results/m1a-2026-09-16/nodegoat-introduce.json\n", + "artifact": "nodegoat-introduce.json", + "provenance_matches_installed": true, + "outcome": { + "expected": "raw injection finding at the three eval lines with recorded novelty new; every applied veto listed", + "expected_head_findings_at_target": 3, + "observed_head_findings_at_target": 3, + "target_questions_answered": true, + "target_question_outcomes": [ + { + "function": null, + "status": "unresolved", + "reason": "change_context_incomplete" + } + ], + "head_scan_completed": true, + "base_scan_present": true, + "production_finding_status": "none", + "production_coverage_status": "incomplete", + "recorded_status": "evaluated", + "recorded_target_findings": [ + { + "site": "app/routes/contributions.js:32:2", + "witness": "eval(req.body.preTax) -> const preTax = eval(req.body.preTax) in app/routes/contributions.js (line 32, 1 steps)", + "question_function": null, + "operation_method": "2", + "base_location": null, + "production": [ + "unknown", + "witness_identity_unresolved", + [ + "capability_unavailable", + "comparison_unknown", + "witness_unresolved", + "dependency_unresolved" + ] + ], + "recorded": [ + "unknown", + "operation_correspondence_unresolved", + [ + "capability_unavailable", + "comparison_unknown", + "dependency_unresolved" + ] + ], + "vetoes": [ + { + "stage": "head_question", + "veto": "change_context_incomplete", + "detail": "6bb3ba6475ce8d11ff20924b69721387bb0d4bbce1b852e640403dbd750f0a8f status=unresolved rows=9", + "lifted": true + }, + { + "stage": "head_scan", + "veto": "ambiguous_line_correspondence", + "detail": "6170702f726f757465732f636f6e747269627574696f6e732e6a73:ambiguous_line_correspondence", + "lifted": true + }, + { + "stage": "head_scan", + "veto": "dynamic_external_or_depth_context_unresolved", + "detail": "dynamic_external_or_depth_context_unresolved:contributor-scan:6bb3ba6475ce8d11ff20924b69721387bb0d4bbce1b852e640403dbd750f0a8f", + "lifted": true + }, + { + "stage": "head_scan", + "veto": "vendor_semantics_unresolved", + "detail": "vendor_semantics_unresolved", + "lifted": true + }, + { + "stage": "head_scan", + "veto": "degradation:vendor_semantics_unresolved", + "detail": "{\"reason\": \"vendor_semantics_unresolved\", \"stage\": \"model\"}", + "lifted": true + }, + { + "stage": "identity", + "veto": "query_identity_differs_from_witness", + "detail": "question function=None; witness method='2'; recorded, not a policy veto", + "lifted": false + }, + { + "stage": "base_question", + "veto": "graph_incomplete", + "detail": "6bb3ba6475ce8d11ff20924b69721387bb0d4bbce1b852e640403dbd750f0a8f status=unresolved rows=0", + "lifted": true + }, + { + "stage": "base_scan", + "veto": "vendor_semantics_unresolved", + "detail": "vendor_semantics_unresolved", + "lifted": true + }, + { + "stage": "base_scan", + "veto": "degradation:vendor_semantics_unresolved", + "detail": "{\"reason\": \"vendor_semantics_unresolved\", \"stage\": \"model\"}", + "lifted": true + }, + { + "stage": "change_context", + "veto": "ambiguous_line_correspondence", + "detail": "6170702f726f757465732f636f6e747269627574696f6e732e6a73:ambiguous_line_correspondence", + "lifted": true + }, + { + "stage": "comparison", + "veto": "operation_correspondence_unresolved", + "detail": "base location unresolved (operation on a changed line or ambiguous)", + "lifted": false + }, + { + "stage": "admission", + "veto": "capability_unavailable", + "detail": "no evaluated capability is enabled; the recorded-veto flag cannot enable one", + "lifted": false + }, + { + "stage": "admission", + "veto": "comparison_unknown", + "detail": "production admission reason on the lifted candidate", + "lifted": false + }, + { + "stage": "admission", + "veto": "dependency_unresolved", + "detail": "production admission reason on the lifted candidate", + "lifted": false + } + ] + }, + { + "site": "app/routes/contributions.js:33:2", + "witness": "eval(req.body.afterTax) -> const afterTax = eval(req.body.afterTax) in app/routes/contributions.js (line 33, 1 steps)", + "question_function": null, + "operation_method": "2", + "base_location": null, + "production": [ + "unknown", + "witness_identity_unresolved", + [ + "capability_unavailable", + "comparison_unknown", + "witness_unresolved", + "dependency_unresolved" + ] + ], + "recorded": [ + "unknown", + "operation_correspondence_unresolved", + [ + "capability_unavailable", + "comparison_unknown", + "dependency_unresolved" + ] + ], + "vetoes": [ + { + "stage": "head_question", + "veto": "change_context_incomplete", + "detail": "6bb3ba6475ce8d11ff20924b69721387bb0d4bbce1b852e640403dbd750f0a8f status=unresolved rows=9", + "lifted": true + }, + { + "stage": "head_scan", + "veto": "ambiguous_line_correspondence", + "detail": "6170702f726f757465732f636f6e747269627574696f6e732e6a73:ambiguous_line_correspondence", + "lifted": true + }, + { + "stage": "head_scan", + "veto": "dynamic_external_or_depth_context_unresolved", + "detail": "dynamic_external_or_depth_context_unresolved:contributor-scan:6bb3ba6475ce8d11ff20924b69721387bb0d4bbce1b852e640403dbd750f0a8f", + "lifted": true + }, + { + "stage": "head_scan", + "veto": "vendor_semantics_unresolved", + "detail": "vendor_semantics_unresolved", + "lifted": true + }, + { + "stage": "head_scan", + "veto": "degradation:vendor_semantics_unresolved", + "detail": "{\"reason\": \"vendor_semantics_unresolved\", \"stage\": \"model\"}", + "lifted": true + }, + { + "stage": "identity", + "veto": "query_identity_differs_from_witness", + "detail": "question function=None; witness method='2'; recorded, not a policy veto", + "lifted": false + }, + { + "stage": "base_question", + "veto": "graph_incomplete", + "detail": "6bb3ba6475ce8d11ff20924b69721387bb0d4bbce1b852e640403dbd750f0a8f status=unresolved rows=0", + "lifted": true + }, + { + "stage": "base_scan", + "veto": "vendor_semantics_unresolved", + "detail": "vendor_semantics_unresolved", + "lifted": true + }, + { + "stage": "base_scan", + "veto": "degradation:vendor_semantics_unresolved", + "detail": "{\"reason\": \"vendor_semantics_unresolved\", \"stage\": \"model\"}", + "lifted": true + }, + { + "stage": "change_context", + "veto": "ambiguous_line_correspondence", + "detail": "6170702f726f757465732f636f6e747269627574696f6e732e6a73:ambiguous_line_correspondence", + "lifted": true + }, + { + "stage": "comparison", + "veto": "operation_correspondence_unresolved", + "detail": "base location unresolved (operation on a changed line or ambiguous)", + "lifted": false + }, + { + "stage": "admission", + "veto": "capability_unavailable", + "detail": "no evaluated capability is enabled; the recorded-veto flag cannot enable one", + "lifted": false + }, + { + "stage": "admission", + "veto": "comparison_unknown", + "detail": "production admission reason on the lifted candidate", + "lifted": false + }, + { + "stage": "admission", + "veto": "dependency_unresolved", + "detail": "production admission reason on the lifted candidate", + "lifted": false + } + ] + }, + { + "site": "app/routes/contributions.js:34:2", + "witness": "eval(req.body.roth) -> const roth = eval(req.body.roth) in app/routes/contributions.js (line 34, 1 steps)", + "question_function": null, + "operation_method": "2", + "base_location": null, + "production": [ + "unknown", + "witness_identity_unresolved", + [ + "capability_unavailable", + "comparison_unknown", + "witness_unresolved", + "dependency_unresolved" + ] + ], + "recorded": [ + "unknown", + "operation_correspondence_unresolved", + [ + "capability_unavailable", + "comparison_unknown", + "dependency_unresolved" + ] + ], + "vetoes": [ + { + "stage": "head_question", + "veto": "change_context_incomplete", + "detail": "6bb3ba6475ce8d11ff20924b69721387bb0d4bbce1b852e640403dbd750f0a8f status=unresolved rows=9", + "lifted": true + }, + { + "stage": "head_scan", + "veto": "ambiguous_line_correspondence", + "detail": "6170702f726f757465732f636f6e747269627574696f6e732e6a73:ambiguous_line_correspondence", + "lifted": true + }, + { + "stage": "head_scan", + "veto": "dynamic_external_or_depth_context_unresolved", + "detail": "dynamic_external_or_depth_context_unresolved:contributor-scan:6bb3ba6475ce8d11ff20924b69721387bb0d4bbce1b852e640403dbd750f0a8f", + "lifted": true + }, + { + "stage": "head_scan", + "veto": "vendor_semantics_unresolved", + "detail": "vendor_semantics_unresolved", + "lifted": true + }, + { + "stage": "head_scan", + "veto": "degradation:vendor_semantics_unresolved", + "detail": "{\"reason\": \"vendor_semantics_unresolved\", \"stage\": \"model\"}", + "lifted": true + }, + { + "stage": "identity", + "veto": "query_identity_differs_from_witness", + "detail": "question function=None; witness method='2'; recorded, not a policy veto", + "lifted": false + }, + { + "stage": "base_question", + "veto": "graph_incomplete", + "detail": "6bb3ba6475ce8d11ff20924b69721387bb0d4bbce1b852e640403dbd750f0a8f status=unresolved rows=0", + "lifted": true + }, + { + "stage": "base_scan", + "veto": "vendor_semantics_unresolved", + "detail": "vendor_semantics_unresolved", + "lifted": true + }, + { + "stage": "base_scan", + "veto": "degradation:vendor_semantics_unresolved", + "detail": "{\"reason\": \"vendor_semantics_unresolved\", \"stage\": \"model\"}", + "lifted": true + }, + { + "stage": "change_context", + "veto": "ambiguous_line_correspondence", + "detail": "6170702f726f757465732f636f6e747269627574696f6e732e6a73:ambiguous_line_correspondence", + "lifted": true + }, + { + "stage": "comparison", + "veto": "operation_correspondence_unresolved", + "detail": "base location unresolved (operation on a changed line or ambiguous)", + "lifted": false + }, + { + "stage": "admission", + "veto": "capability_unavailable", + "detail": "no evaluated capability is enabled; the recorded-veto flag cannot enable one", + "lifted": false + }, + { + "stage": "admission", + "veto": "comparison_unknown", + "detail": "production admission reason on the lifted candidate", + "lifted": false + }, + { + "stage": "admission", + "veto": "dependency_unresolved", + "detail": "production admission reason on the lifted candidate", + "lifted": false + } + ] + } + ], + "base_only_findings": [], + "census": [ + { + "language": "javascript", + "frontend": "javascript", + "files": 44, + "complete": null + } + ], + "coverage_reasons": [ + "capability_unavailable", + "comparison_unknown", + "witness_unresolved", + "dependency_unresolved", + "eligibility:eligibility_provenance_mismatch", + "6170702f726f757465732f636f6e747269627574696f6e732e6a73:ambiguous_line_correspondence", + "witness_identity_unresolved", + "context_projection_unavailable:contributor-scan:da4abcaa22e13947dca90ac9156293bda9297423304d60d587569389742ce17a", + "context_projection_unavailable:contributor-scan:29000feef9d494e003efdcbb6eab5410bc93ad2f4674df9db389ed98a9cfb242", + "dynamic_external_or_depth_context_unresolved:contributor-scan:4679cce5fa8da06bd1f9542b5a58321d2b090556cce83080b6e9ace36d352a59", + "dynamic_external_or_depth_context_unresolved:contributor-scan:df4a0610953efc25e4ddc4bc942688434be889411d073fab09015aba97ce2511", + "dynamic_external_or_depth_context_unresolved:contributor-scan:9b7910f9f96aa714b760481e46e543ea413d6e4763b858a3d0c186a560ad618c", + "dynamic_external_or_depth_context_unresolved:contributor-scan:298f3d69ca3e2b343c9cc5288680120b89e035bfae803dc6f6952358b6d0f1d3", + "dynamic_external_or_depth_context_unresolved:contributor-scan:7fbdc1e100a0b9078b6a2d6264bfaa596c64501b8c5ced1557b56a3d98e2b351", + "context_projection_unavailable:contributor-scan:722bfc188cadc50c1485cf4ede13f2b62e93b08b16f42f2586c104b8bd3745e7", + "context_projection_unavailable:contributor-scan:144c1db7c40aa0a420e02130a756c7793fc8fa5d33549a08c236ddb96bad2df3", + "dynamic_external_or_depth_context_unresolved:contributor-scan:6bb3ba6475ce8d11ff20924b69721387bb0d4bbce1b852e640403dbd750f0a8f", + "dynamic_external_or_depth_context_unresolved:contributor-scan:a08e3f98d65d0452a631a11de0ef53c9fb53492efcf3d8003b5512478b92b4bc", + "dynamic_external_or_depth_context_unresolved:contributor-scan:4e0e78390504d44716e20ff65cf5f16c1f1ddc2fa0441e503dcae1826c666529", + "dynamic_external_or_depth_context_unresolved:contributor-scan:0e143029eb9d5d5c30c3dc0fda147c852e68d4e8d407795a1047beb586723238", + "dynamic_external_or_depth_context_unresolved:contributor-scan:43e8934e37c9ecda6c36b4bee6af63f4269e59cefb5df30af45ae08bd93f5063", + "context_projection_unavailable:contributor-scan:8f51fe6438299d6f935f48d1d0991270ad477174195aff8574ef587a45038efb", + "context_projection_unavailable:contributor-scan:8d26ec62881cf7efa89509047c178e7b920a87cc4bfb9cb0d6d991e87ca22124", + "dynamic_external_or_depth_context_unresolved:contributor-scan:ec5cd96c01771e651d9e09445c5df8af453e475da75f47a583a1006e99686b09", + "dynamic_external_or_depth_context_unresolved:contributor-scan:2981a228c15eb8a02d051bad6ce39736dd5f4c3f63a979d997bc23086105cbaa", + "dynamic_external_or_depth_context_unresolved:contributor-scan:7055c8f3c6f41ee3593da37fd92332c561907e07a633b9ba7bf66347cdccb378", + "dynamic_external_or_depth_context_unresolved:contributor-scan:68b25a8b5bcd76f92ed9473318e67e752b5898eb6b34c4a1205b77a88dc0214b", + "dynamic_external_or_depth_context_unresolved:contributor-scan:435b8c03368213b50237bb6f7a4dbfad4e7ba8d4f3948b046a5e95ff38c739be", + "context_projection_unavailable:contributor-scan:d2034c51a6d44b7b5cb553f2ad130441532b6be68cac0e829b74c4240aa642c4", + "context_projection_unavailable:contributor-scan:1d7abc4a4a8c6023e1c5231f46167efdb6c476e4533ea4670a17ecc6c8d09c92", + "dynamic_external_or_depth_context_unresolved:contributor-scan:ba984e9deee4ab97a4211ce15915bc36e0e42907e21f40525be95c698c439653", + "dynamic_external_or_depth_context_unresolved:contributor-scan:ecc80bd3363347eac23b60a8ec50efe1a5defd3609aff7149022fac1e74524d4", + "dynamic_external_or_depth_context_unresolved:contributor-scan:7cead756038bdaf46936671d2311c93b391692337189bd9f3acb5711dcd1b594", + "dynamic_external_or_depth_context_unresolved:contributor-scan:d7044d436bcc3e7e313fb2baff364c8aecf980b28741afd4d020f858a47a3909", + "dynamic_external_or_depth_context_unresolved:contributor-scan:f0fb49041bdc02002b8aaf574a29a738aeb235ca0bc5cbbe9998dd9841e93a0d", + "context_projection_unavailable:contributor-scan:590ded4d9ba52b59e2934f3d461e45dfa5bd351f13c4fc17238297438fbf492f", + "context_projection_unavailable:contributor-scan:33ab14574877d6a529a58df1926e358759fb4ee1ffbc68146aebf77a895c8eb9", + "dynamic_external_or_depth_context_unresolved:contributor-scan:489bf9f5f3a1e3771698cf111c0e7fa3e84f81848869c88a44cf3d19979d168c", + "dynamic_external_or_depth_context_unresolved:contributor-scan:ca3b943eb07fc11f6cc16228ae4e7813cfccac5dfe7ea9147deb0ce84677e486", + "dynamic_external_or_depth_context_unresolved:contributor-scan:a83d9fd2d4f399a40984cdc63e30003a73c98a6986f76fd5e22ed0ed7873c8b3", + "dynamic_external_or_depth_context_unresolved:contributor-scan:593c9114695f69035b4df9d566534e35fcfaa2d78a3e4362c2ff634580d6bee9", + "dynamic_external_or_depth_context_unresolved:contributor-scan:87ba1a35a429f850990db0eceda9996daf572b97b32b38e0f7ff4b80dec9a6b2", + "context_projection_unavailable:contributor-scan:f12e400682d1a222abca9d05f942a24394d7795eacc7ec322c585a0a6ffe69ec", + "context_projection_unavailable:contributor-scan:5e24ba3194915f95a2452882fe928f834ed4740f8fa2087c7573b7c2f128a2ad", + "dynamic_external_or_depth_context_unresolved:contributor-scan:4d7554903c7ff3f7005fe4ed77f7e82af8cba218d3ac0b431acf14d18ffeb639", + "dynamic_external_or_depth_context_unresolved:contributor-scan:896720a23ec5b7da3163d53b517817cb01337cdad64d2104dbfdd3b3526f9c5f", + "dynamic_external_or_depth_context_unresolved:contributor-scan:e13de3ef10e25c529870483b67e47206b9cd32251e118f20f628eba95236d9c9", + "dynamic_external_or_depth_context_unresolved:contributor-scan:ac5ad3cda567527eb97dca35bb56d076292b88e20baa36d337967eb1f4f63dff", + "dynamic_external_or_depth_context_unresolved:contributor-scan:7c0bba65b77fc890e479add54e7fb0e9a7d145a4304d81f614536a8470d0a471", + "context_projection_unavailable:contributor-scan:e9cf95baf8cef9a83d9da86e0bce276421ed404867ad948acc338fa759a3450a", + "context_projection_unavailable:contributor-scan:431521d90fc22b7683173732598c39b94a25447f7403dcd4d9e17ca23e243a61", + "dynamic_external_or_depth_context_unresolved:contributor-scan:d331868f74b26a35872e8eeed4f66f3e34a29f8e9745fc14c1609cc3408aebeb", + "dynamic_external_or_depth_context_unresolved:contributor-scan:61b6ec72d6c0dddae427635aca3c97681a112cc4c5f8e4367d9f5864c6eb72b3", + "dynamic_external_or_depth_context_unresolved:contributor-scan:e831bbc3ab250e71270b1f5175756f39c2da662bffd68b2ed78b5389a4f23d0c", + "dynamic_external_or_depth_context_unresolved:contributor-scan:082910c464337b0041733c3c2733ad7947d71549180f9a0b8ad4172901469d02", + "dynamic_external_or_depth_context_unresolved:contributor-scan:14541cd08e0b036e4ab5caa442c01459fb03a6e3ef0388bcd0347b121effc6fc", + "context_projection_unavailable:contributor-scan:e4fe7eb3e5d57766a2c6adc79d46b9f57ac13ba11df7846cc4f7d62123a51bd4", + "context_projection_unavailable:contributor-scan:0cc9059de118ef8da2ab45a3453bb2f64a679dfa33233f3b1b722b3858df789b", + "dynamic_external_or_depth_context_unresolved:contributor-scan:d561ce2e09d49013cacec011cf5dfa8c5f35c25c41085e856b3d5f28579ba6f4", + "dynamic_external_or_depth_context_unresolved:contributor-scan:7eb45f19bf15a2826d7aac45f36137de8824abfa9c0d5412da3c69c5d6da7a0d", + "dynamic_external_or_depth_context_unresolved:contributor-scan:ef130caaa2b3321cd12e2c8c39a27f9a868d2405e572fcafa5cab93900d9f97a", + "dynamic_external_or_depth_context_unresolved:contributor-scan:115b829e9b03431b06c12212efdcc2da02b5e22953e8a02243a8cd5a59cea0f4", + "dynamic_external_or_depth_context_unresolved:contributor-scan:db0e20f3ffa3b74105bddd565ba608daaea4cf9baba6b43a2539958e1a8be668", + "context_projection_unavailable:contributor-scan:0ca04c8edcd2d8a247e575209a9e5c8a1cf86c39e6655d79d6f85ef41556ef71", + "context_projection_unavailable:contributor-scan:d8cb785d9bcf0b1a8289362c5badd0db084f2efa3d831fdda8ffbc5cd423febb", + "dynamic_external_or_depth_context_unresolved:contributor-scan:c932a2fea0cf3a50a44090757e856ecaa4914e385b566787b60877f04c947002", + "dynamic_external_or_depth_context_unresolved:contributor-scan:1d3d7b3981fee634842a7dc05f5e4d1bac279c0ab8e9df78d768f43676186340", + "dynamic_external_or_depth_context_unresolved:contributor-scan:155e5683914f9d0fff0323548d9a531ed582e72414b934e57edb656579cb05e7", + "dynamic_external_or_depth_context_unresolved:contributor-scan:486352981492eeca9626588e8aa0a737dedf797d83a20148cf86aaca0e5cd660", + "dynamic_external_or_depth_context_unresolved:contributor-scan:692125735f88d08d8cec81e5564ed2f20d88422cb693407e8b569f2b1e07050c", + "context_projection_unavailable:contributor-scan:4ed8fe95db377770a47a2b3ad04a3a720ec21bdbd5222272ec5555130a627fbb", + "context_projection_unavailable:contributor-scan:ece73e32fe91c87a001f1e41342e09378041ee876c8a8846a51347b8b607cc2f", + "dynamic_external_or_depth_context_unresolved:contributor-scan:8146eab0359ca0b822353b632ced69bf09fd449704cdf7c6f84440d7ca784cef", + "dynamic_external_or_depth_context_unresolved:contributor-scan:ec7c01083f1fcb35c35244172a005b3eabebff9c0fd1dcfb4372268f82fb3894", + "dynamic_external_or_depth_context_unresolved:contributor-scan:ca89f1fd26f88f845f394fce84527e83c6a4cc8252f30d6787e7c5ac13e119a9", + "dynamic_external_or_depth_context_unresolved:contributor-scan:c3b4d527dc5c4ed121a487d5e4e3aa868df773ef3b04200802f9a306bf67c730", + "dynamic_external_or_depth_context_unresolved:contributor-scan:9e5735029a42e23af56c2cc802655bf46c55bfebf19f19810ac16cfa15fc688c", + "context_projection_unavailable:contributor-scan:ad133cc1b1af014f3acdb5852f7efde5750b39eaba1978bd391f0e620de02e54", + "context_projection_unavailable:contributor-scan:4af613e520506104185fc529b07037168b79165ec93e37331dd01f306307a9b7", + "context_projection_unavailable:contributor-scan:103fa19cc7adb309027f4eafd56cee2c11875358bb4d8d8dd2bbc2f3fe698bb9", + "dynamic_external_or_depth_context_unresolved:contributor-scan:ede21fac9950f370f23f2a674f795bc7b2eea5c4609ee32fa64d4239218b3d98", + "dynamic_external_or_depth_context_unresolved:contributor-scan:5b6014bebeefd652030b6f79d14252c51a6f1159a2b37bccdcd3e515e0ae27b9", + "dynamic_external_or_depth_context_unresolved:contributor-scan:dda18f566e40a3b6e882b5f35ed04328ef8288094d8151bcad76a8c228454f6d", + "dynamic_external_or_depth_context_unresolved:contributor-scan:bb06814f937b8f4fd23622931286468bccb770a49112c94b23f06e97ffb7aa05", + "dynamic_external_or_depth_context_unresolved:contributor-scan:9c629de1ccf91a807ae4d7c296108a9ec7880c1cd278e0da344061d329755c14", + "context_projection_unavailable:contributor-scan:eaa4fc381ad8dd4a49b66bbe7ccb050b2ed8735ec0d5eaee4f555fce0ff39a8c", + "context_projection_unavailable:contributor-scan:68a35789d8aa7b4f5293eb06988118bf39be4f0354e6dd89674da130c4ff7911", + "dynamic_external_or_depth_context_unresolved:contributor-scan:3c9cfda0c903ea8e97a9bdc2966dff555df6580479782ced9ea934837e3bdb5c", + "dynamic_external_or_depth_context_unresolved:contributor-scan:4367699c5a75ef7a22a52ca8d1b77e15ae6c8c18b2ec5fa929d688281ff34edb", + "dynamic_external_or_depth_context_unresolved:contributor-scan:f020689fd3ee8e3f51d12f177d80fb80aba8d3435a9f58e63cf4caadc02eca10", + "dynamic_external_or_depth_context_unresolved:contributor-scan:06f7107e12e2f2c7151d2c38ca31adcd8690e7dcab4537b37183561a9306208c", + "dynamic_external_or_depth_context_unresolved:contributor-scan:2f8516c90c01cfb4bd29a3b8ad1b61280436a37804b24929327cb41d8eac39aa", + "context_projection_unavailable:contributor-scan:10662bded3a99140e896de3673635e5d946b0536db96643d0b4c621d7d68f56b", + "context_projection_unavailable:contributor-scan:06b6066af41823461a0773a4018a93e9e7dcd71afd31331e5fa650b4fd1ac2ce", + "dynamic_external_or_depth_context_unresolved:contributor-scan:eca317877601cc31ae62fbd401aaae05a95ba092256beae0a69f90f42031dd40", + "dynamic_external_or_depth_context_unresolved:contributor-scan:040ab49439c03cee7663bd46349400cb389c480732f583aacabd8aa2281ac141", + "dynamic_external_or_depth_context_unresolved:contributor-scan:9d64998ae03ac69c2d6157548cf8f59eaf0ce08f10059bdf50ff8aae62dedfc8", + "dynamic_external_or_depth_context_unresolved:contributor-scan:104e0c71e792ced34e2811d7ec98f691d0740d260a8479c5e352e6d6185581ae", + "dynamic_external_or_depth_context_unresolved:contributor-scan:09d6c766aafeb3164a7a719920d7f9b871deaa9dc84691e8073f0db23975da39", + "context_projection_unavailable:contributor-scan:5be16077f567b7bf0034e61bcfc0311887588c95ce57c0e2fb430dfeebb93736", + "context_projection_unavailable:contributor-scan:ad205a52efc99c249042c9a2a85f6e39a89ca00a1bbbdac176bcbbd2f6ac6418", + "dynamic_external_or_depth_context_unresolved:contributor-scan:41414f5074402bc65ab7cede304c467ea56456ccc4d5a99f74dbf698ec80a014", + "dynamic_external_or_depth_context_unresolved:contributor-scan:f0a24dbc494b779606b3fae942042ebb6e42d77cf188d81f5e0895215f24d975", + "dynamic_external_or_depth_context_unresolved:contributor-scan:ed67e0034372067628553cac0f55d69935203f102d2eae5bccf3e9fd6f8bddee", + "dynamic_external_or_depth_context_unresolved:contributor-scan:1544c144771491cd8bb6c79ebb199070189032a209a17ae0f5df17d95e0a48e5", + "dynamic_external_or_depth_context_unresolved:contributor-scan:e2fdafc580819c643c0a89d3ee89d934d4131d06f288295e946b93824e098863", + "context_projection_unavailable:contributor-scan:6b16af8419f1b67c3d8176c2e2b6adf5ad345d84c797d4621c883d12c5881eed", + "context_projection_unavailable:contributor-scan:6101922fcf4599ad00260237e8b14904716156d58a25c638578de9775f6546c4", + "dynamic_external_or_depth_context_unresolved:contributor-scan:0211764bef038cb43a5c8b4e4e1c2189e29c63acc195a8f18f5f52abb6c2d896", + "dynamic_external_or_depth_context_unresolved:contributor-scan:9fdd3d266a5a068ee069bc4df1c9ad13f5dc11503fe9730fc069dce86d2d0cc5", + "dynamic_external_or_depth_context_unresolved:contributor-scan:501185fcc47f5bc79f11c17aeb48f6a069298e4538f48c2335f5a5cb18d3d4f7", + "dynamic_external_or_depth_context_unresolved:contributor-scan:9039f3d010b09f603ec640edceb7861a36dab4b82364c69a208040c3ede48f17", + "dynamic_external_or_depth_context_unresolved:contributor-scan:751f234599524ba682a48181293f9f24bbfded0b905db1400c4d66e287ae6470", + "context_projection_unavailable:contributor-scan:c739f4bf1f227963dbdc0ba653351d9b1755ac4b30e4e1fc29a552d1763752c8", + "context_projection_unavailable:contributor-scan:8e3b632fbec986c803e343ccfb4c8a13c03b04f6212cbe161efe5d5976eb71d1", + "dynamic_external_or_depth_context_unresolved:contributor-scan:1d20996dfd8ac9c5cd8de5ece58b61abc6e482999a720d8fc6cab8017adfde73", + "dynamic_external_or_depth_context_unresolved:contributor-scan:74468a7e1be2e9c78afffcbe10b6673e7522120d6679186fd21614fb8d3260fa", + "dynamic_external_or_depth_context_unresolved:contributor-scan:e47b686632ca64ef9e44b6da170481087bddae257940e54aeaf807b18edb4120", + "dynamic_external_or_depth_context_unresolved:contributor-scan:23f33513eef75806f25e55dfadf2e09727569c6c57dd020b686cef0c9a6e8324", + "dynamic_external_or_depth_context_unresolved:contributor-scan:8d59bb2bc1e8a2546b70e875ed5138dfab8f5209888877a7090294b3ba3e8adc", + "context_projection_unavailable:contributor-scan:92bc28c793c6cf7200794bdbb5c3c821fa205ed1b4b06fcbda8d0124d28e3136", + "context_projection_unavailable:contributor-scan:cc61018d326cd22a23b07c05db51cfb87618046132d4bedca206cdafa063a20a", + "dynamic_external_or_depth_context_unresolved:contributor-scan:b370ee273c4fcdb5bde8fb9ef6ddfd45406447ce19c748e418de854c2f0362e3", + "dynamic_external_or_depth_context_unresolved:contributor-scan:6152c270f83886cf3f5761812c6d8eece4cac8c348230c9b42dd271d1e3f1aba", + "dynamic_external_or_depth_context_unresolved:contributor-scan:2a9b0d00fb1eb5564fd96a8c1369f9f8e1d32b947cb59a334d47b32c6d963897", + "dynamic_external_or_depth_context_unresolved:contributor-scan:384c35175bd92ed2c097eebdfa72395a309acb7aa60c390ec3eb66773b661d6e", + "dynamic_external_or_depth_context_unresolved:contributor-scan:573e038e86e51ae46e5a7992fa652fb4b92632a7065260e12c46d1fd6effefb6", + "context_projection_unavailable:contributor-scan:005be3a45b8fe905f0d1a63f1306ccc4eab8191d20f6f5a805f4754c20ef2daa", + "context_projection_unavailable:contributor-scan:9a60982d54be5edfd5af1bd9f7d25dca0be74e77d5eeb6eaf37dcfe06cee188e", + "dynamic_external_or_depth_context_unresolved:contributor-scan:676257a1528797108e3a5fe031627338e9f09b44297e33aa1463cf46e5bf7db3", + "dynamic_external_or_depth_context_unresolved:contributor-scan:e7a241cb0337b1b02a56acabcd77baa1363feda4f01cda38d460822da991e3bf", + "dynamic_external_or_depth_context_unresolved:contributor-scan:7ac458257132ccc040a84b03c9fb7b9ca4fbe0579e7d3428f584da04b5b33527", + "dynamic_external_or_depth_context_unresolved:contributor-scan:cff2be050d602ec4623227bfe5d17c81c6b4da11e8c00ad7f7ca7d4c6acc878d", + "dynamic_external_or_depth_context_unresolved:contributor-scan:c07b292e4500a3ff9845bb55d6d69eae602d939e7681ae5d65effe80db4626b6", + "context_projection_unavailable:contributor-scan:47136ecffbadd0a856d93adf53a2e2b675403386663bbe766bec37d313c87a10", + "context_projection_unavailable:contributor-scan:eb1bacbee5fd2a2b50535a70ed300e93b90491d7d3d29d2f1f8bc5ecde0d7839", + "dynamic_external_or_depth_context_unresolved:contributor-scan:15e2db68968bb0000bda5bb3747451926355e9cd63db122bec12a53fb15da9e1", + "dynamic_external_or_depth_context_unresolved:contributor-scan:1ae6a3722ce9c193df69b1b8a37aa086ec323283628290f7298871676d3c4cba", + "dynamic_external_or_depth_context_unresolved:contributor-scan:65477882f5794c720233a98e1e383d91deb070f0c2bceb95a5efe7008f854cb5", + "dynamic_external_or_depth_context_unresolved:contributor-scan:2a630b24aeaeeef20baede1abed05cc9c45794561239f64c6bc291afb4b16120", + "dynamic_external_or_depth_context_unresolved:contributor-scan:70beda84b736a344f503b4e25e0e4a426f31d7041d283aab464026dfb9714457", + "context_projection_unavailable:contributor-scan:591cd0ffc4b3b51cff8621ab1458a478c0a0f57305f0551e9e5396dbe8f7d349", + "context_projection_unavailable:contributor-scan:53625b2b7fcffc9568152e6b6d95472fe850ed163ab341044a0754334cf22e34", + "dynamic_external_or_depth_context_unresolved:contributor-scan:5751606d1ed8891eae9bd10c5676a54ec196b36b00f9b7d3aa9ab0ab04b5cc25", + "dynamic_external_or_depth_context_unresolved:contributor-scan:f9f8ac5616f2d1864a6599bafb5f2e6bbc7fba72d6aa23d9ea1e0096de9d4164", + "dynamic_external_or_depth_context_unresolved:contributor-scan:56241bac3d18e635913ae9db5fac9cdde4e28d74795a1ca77227354d8d38fe1a", + "dynamic_external_or_depth_context_unresolved:contributor-scan:e01cbe3312394d636a19003923a0ff3eea7f8d2e1d6b42f94777655add3fe9ee", + "dynamic_external_or_depth_context_unresolved:contributor-scan:d08709244798a43e91f24367176899d90f8678813ec8b822163c67e1740f89c2", + "context_projection_unavailable:contributor-scan:7571cf1e503d83dd0c915f69b8365e94a1b37aaf98a37d08d4b90e2a3675220f", + "context_projection_unavailable:contributor-scan:f43f4e2cf5990ca47a833947b671586123e6e73a57d4305a9b813a8ed0d2fb8f", + "dynamic_external_or_depth_context_unresolved:contributor-scan:12bd6bd6659343e3dd9e6666572c55724a0a9e6990b890b556fe662db9d062e5", + "dynamic_external_or_depth_context_unresolved:contributor-scan:9ae85f24c4abea079e0223f9f05355dcaf5fbb396291c96d5c3b016099e84bbe", + "dynamic_external_or_depth_context_unresolved:contributor-scan:495097c042dc6319f9f6480ad049016f113b9c5cfc6d612e04aad56934b919eb", + "dynamic_external_or_depth_context_unresolved:contributor-scan:4eaa8cc1bf14b329db1097395c1a5ecd0f6fdf5a5de76db7f0339ab9b2c491e4", + "dynamic_external_or_depth_context_unresolved:contributor-scan:9d9f56a74cd94f45656c40e09823308aed0b4c9e745203cd5950138713026939", + "context_projection_unavailable:contributor-scan:40797ecc115fee18a4608c9efa1ffeb81c2ee1c4842561ef61fcf7076f1ffedd", + "context_projection_unavailable:contributor-scan:11cd767ae016d95635cbdfe08538b9347337d6b0847d12697075584b8d0619f1", + "dynamic_external_or_depth_context_unresolved:contributor-scan:71cb92eeba1ac9e0112a7cf621767729fb77eca209140f248c04f3ca1b0918f8", + "dynamic_external_or_depth_context_unresolved:contributor-scan:e44a0c43a95543503268b2378dfa0c9161c522c62bee65fa4f4a238875c64b7e", + "dynamic_external_or_depth_context_unresolved:contributor-scan:8715cacf99e5b7a106cda39fd2b6c96c2e5022974b0f66de7d6a15ed2aaf4eed", + "dynamic_external_or_depth_context_unresolved:contributor-scan:35bb68dde977abf2784e33d1bf3052893a358a43a8b258bea6a7318b1dd4a310", + "dynamic_external_or_depth_context_unresolved:contributor-scan:b5bb928fb28bf9699bfbabc626fc279a9ebd1ce6b63c993ddeda7b9eb2f8cf27", + "context_projection_unavailable:contributor-scan:3fc619d1072c86c3df178b90349411bfed86c49dc777f030f2d27e3100394b00", + "context_projection_unavailable:contributor-scan:05ede74d5dcb911b02053a895751f92ae86743298c8c6d8c5811de191cd4e5d0", + "dynamic_external_or_depth_context_unresolved:contributor-scan:18ad4372b90d74e60d68a00e4586b0767c060f9c522d2016c515cc5754eeb06b", + "dynamic_external_or_depth_context_unresolved:contributor-scan:595447850210071d76266dff3f9ceb530f5fbdf38c9940011abb9b96820f69d0", + "dynamic_external_or_depth_context_unresolved:contributor-scan:3c80c4cfbea01760facf853c328821cbfa9635adf55a650b92fc41bcfb19c8f5", + "dynamic_external_or_depth_context_unresolved:contributor-scan:e4feca4d382344176e8ac45592711e4472f76e0667867d469c65ccb5be2c7a19", + "dynamic_external_or_depth_context_unresolved:contributor-scan:7d0b37fb8ac67f6752e21869e57ed1d8b08be8517ca53ac2835cd2295df094ed", + "context_projection_unavailable:contributor-scan:a562474ca19fd4d4ec052396b656b092e82be7b1c002746f631cd9fb68b39ff3", + "context_projection_unavailable:contributor-scan:22e26415a3768b1b12cfb9469b912d359d0804761ee7f1d02d281600373dc8a4", + "dynamic_external_or_depth_context_unresolved:contributor-scan:03548d772fd2a4030a9f595257333eb9b323f1057a2a0399ed15efea113e719d", + "dynamic_external_or_depth_context_unresolved:contributor-scan:0f5f635e19864fbd276fd3eb0b6460f86274e6bc52533594879fcc42c02e4df5", + "dynamic_external_or_depth_context_unresolved:contributor-scan:f95e55b8ae987f7c4b11837ddaa8dac8bed46541f6d8c12633b46fe915b41824", + "dynamic_external_or_depth_context_unresolved:contributor-scan:e77b04a213011bc3e9812f81c2d1266be1234ff91a72d347b71017e8ea09f4e4", + "dynamic_external_or_depth_context_unresolved:contributor-scan:f7ab6f0b570873d6b99c3fc33ab556f093d7f5e4991eac884d3e766a2c29b326", + "context_projection_unavailable:contributor-scan:6ad6e59fa1a92132e095463bdbb461598c80b45af85ff453a6450b59b61d10cc", + "context_projection_unavailable:contributor-scan:c2b3c06e92fa87731137f871b9dd0f867fc53156a80bbf00da955cf5bfe0fe7e", + "dynamic_external_or_depth_context_unresolved:contributor-scan:b7b9b9cb1194740a47fa214266a43fdb70019fa1308009589d38f2c7662aa4b3", + "dynamic_external_or_depth_context_unresolved:contributor-scan:4d3ed9000a9b5806a0ed641e2739166e3df18ffa1925ee396fbe25d29e332c71", + "dynamic_external_or_depth_context_unresolved:contributor-scan:bce9e3fb76d6276772f1f279260ddb2f673a4a45a08f13fbc75343d20c0ad4ad", + "dynamic_external_or_depth_context_unresolved:contributor-scan:f0aa35455461c8f75dd8ca533e03dd43ea339a7026f07407ef26b12c3fe6f44a", + "dynamic_external_or_depth_context_unresolved:contributor-scan:64c0f7e52fb34476d5e47478ff354845a776dd781a2044963cae3191bb18058b", + "context_projection_unavailable:contributor-scan:9f9eb159649a2e07879e36c4f5eb5bbb38e337540c4b295adb4b59ca31e2a868", + "context_projection_unavailable:contributor-scan:bfba8296d9252a696a7f8262a80b63019fd89fb866e3d3daab087101c9d7ebd2", + "context_scope_empty:contributor-scan:6b6bc1f8b05dab47833d180de1fc7b40d8637a213c87af02f19bfac2f9439869", + "context_scope_empty:contributor-scan:72261efc87c3f66bd420e106d6e04235b2d6a7b4c59ceb5a235dbfbf31d02f29", + "context_scope_empty:contributor-scan:94e30a15524e236d04ae2f0238a72c0b446a48b7b4302471ad6703861948025a", + "context_scope_empty:contributor-scan:fa59397c0eb909b5b269278b706ba8432004d786cc8431db1e27fdf9614211bf", + "context_scope_empty:contributor-scan:a65d452c03e7a0e7bfc77d9337f0c3f6cc47449979963ca1173f45c619b7b812", + "context_projection_unavailable:contributor-scan:135f8cdcca313308bc5456466706c561652768149ff61e93f241b383c07448e8", + "context_projection_unavailable:contributor-scan:d029880ad27458bf1d443088b6afe399af206a9f412fd8406769198f304e64f5", + "context_scope_empty:contributor-scan:2ae591e30078f1e045b446004067a4734acda37a9673dbac82bca972cb5f8c2b", + "context_scope_empty:contributor-scan:b35cc9123b9c6316f72cdbfcd7945157215622625141e56543a4093c0c553013", + "context_scope_empty:contributor-scan:c8d88ff3a98aaa4eba3756a5f0b89cdeeeda10e5180f5eee0d3ae2b7dd042cdb", + "context_scope_empty:contributor-scan:f06f0c86aa4079e5d3ac48ffa9b50661a0bd2f4c315190b26f13664de494c9d9", + "context_scope_empty:contributor-scan:627afe91ac03ff52d178f64eb23d372523f86fb34fcc0ca0dade6786c38f0dbc", + "context_projection_unavailable:contributor-scan:ccab701536e7f9615e52f4b1a1c68a2416263ad8de279372ce248fed5d7868ed", + "context_projection_unavailable:contributor-scan:bb71e211e99f3dbe040a15b22eb7e004da953ca61b700ca3d1c94764cb6bb80f", + "context_scope_empty:contributor-scan:d799a15d3d810c39c4a519c59843bbb6c2617f559f8ebdefe801296e0819149a", + "context_scope_empty:contributor-scan:d6a24a60b3cec846b01cb2c3a1535ee2ab834a09e935abe70ede278ecb1ef045", + "context_scope_empty:contributor-scan:d1cae428bb382d9cc38acac1c7bb8a5e6142a46f5b0e6e2ddb1609b0acc66f68", + "context_scope_empty:contributor-scan:c46c90f66921363f974dcf82aaf3b3410222ec081abe097417dd1a1accb372b4", + "context_scope_empty:contributor-scan:5630ea72ee47272cdf5f9e3d1df3aeb499c357880ad49b26cff1cebcbbaaaeed", + "context_projection_unavailable:contributor-scan:013a84070826e011c0b19953b3493276e98498b3837618303aff28475b38eb2c", + "context_projection_unavailable:contributor-scan:c158a154e2b9394ee661d2f982e93af8d59543bb7da5c8d2c8e9c65905384d4a", + "context_scope_empty:contributor-scan:a0423c87fb8581f1897c9a0c774c3881ba8775e05f6cd88408cee05d126ac52a", + "context_scope_empty:contributor-scan:7e9c5dc7bc705ee6825fcebe23ba885a4be30b318195ec89e9a19b450bff86fb", + "context_scope_empty:contributor-scan:c6c5a131a84fabe329dc50128240b463b18a4ea0af2d036bcc02d869ec57fa7b", + "context_scope_empty:contributor-scan:ffe9fe5d19fd7233e88869bdd2f6fe00785a9b15d074a3f8b171a03121ba64b0", + "context_scope_empty:contributor-scan:324cdf414ea58e6d9496c28b138b43bb18cd6e983fb7678aef960670a51dc93c", + "context_projection_unavailable:contributor-scan:fb3bd242d8f9801589ca53c24a1b36b88ee1e6b8932ddb6a5d3bb7b3019556be", + "context_projection_unavailable:contributor-scan:5784aa43502be5cfa00e65ed1800bc86cea1b83db7b99737a92e3059c0aedb51", + "context_scope_empty:contributor-scan:e05d1e4da035294fb1b5185492276e323b43a33c173dd05390edee2726f82f60", + "context_scope_empty:contributor-scan:480a6f9e635cdb839e9ed2fab13d22291dff3c92ae99e1bf514439b370480f24", + "context_scope_empty:contributor-scan:acc5d491964faf3f4858dce3bfe338199f9b5469c1ad33e64c2f0bfad2f0263e", + "context_scope_empty:contributor-scan:e14724d931f179f9298c723043307a99153207ec425d4fae28f78becba7c0a9f", + "context_scope_empty:contributor-scan:756d4aea97736b83d6904a6d96d22e8026d24796d64d6806c2fcc478272c16bc", + "context_projection_unavailable:contributor-scan:8fc292a32ac35211b4747151ed7797cdcc9cf7edca0ea697f9cd9ca9eb2bf906", + "context_projection_unavailable:contributor-scan:0434560a038fb3a29aaeae6531b7190a9a993f75cebecbde4dbc5d9f248c16b9", + "context_scope_empty:contributor-scan:5c7e3540a665e15247dc85c88bc06f2514da2cd85010ec820cc53548ac751009", + "context_scope_empty:contributor-scan:074e2d12c8900202ecd6b02df395375ee6343d1c04c22982c214e74d38fdf51f", + "context_scope_empty:contributor-scan:cf2f20c22b8acc270d75b060b45b3725d2a4a0bc4dc33adc9feeec336fa84f31", + "context_scope_empty:contributor-scan:bb67a42d62cb5389aeb41a0e18d26046ab4f20feae70cba114ddffd5995ac3e8", + "context_scope_empty:contributor-scan:ad9733cd531deb592afd4650ebd20d8c967ea49693d2954151a70f4a4edb68df", + "context_projection_unavailable:contributor-scan:572f510d0485395c2ff610cd031d238c3745f79fe98a8f9fef5b042c24e57b69", + "context_projection_unavailable:contributor-scan:0ae9ac017e10c4d6256d41b99b5e771d7e8acf05bc1087acb58148a8ea2e8c5b", + "context_scope_empty:contributor-scan:691315c9798b266ce8aaff0a6368a80e40c685c1a8e3a54fe139131f4d6da7a7", + "context_scope_empty:contributor-scan:aee4c8330dd8ef28010fdaf243964d48dec427871626422da8d915843534755b", + "context_scope_empty:contributor-scan:57aa82c0185ff3d73d91dfcbc6bae9b5d438cf064ed0ea9489d6b5de7c3df531", + "context_scope_empty:contributor-scan:79ed0c8a9f7d6b06e75ef023d6ca5a32416a9c8fbd5a75fd97ea1c0e8f7a5a30", + "context_scope_empty:contributor-scan:23f9afb28b6b7349cbf502c2a6a1ffff117d2b3a974d8705b99fc8717108627b", + "context_projection_unavailable:contributor-scan:a6f0fe4aec662565f32d93874690023ebe09aea9a887b330e0c64a18e41dc966", + "context_projection_unavailable:contributor-scan:aa5a287a1749ab0ab4e4b56048c738b95df8f4b19a82378847a39ccb5eb42315", + "context_scope_empty:contributor-scan:09dff44163511e71b0fbf539655ece1940bd80039bc8743cc922699a37340b71", + "context_scope_empty:contributor-scan:567b6eaa4c3dabaccdfb44885a6a4cd345ce3ffc6a201265084c1818c0b84226", + "context_scope_empty:contributor-scan:881e7f1a45e2d7ebf74842b131573da24478db0c44ddaea50ca20007994387c0", + "context_scope_empty:contributor-scan:e9a98c513dc38db66988ce7ed9fe730df4ba5297f2495c77a54ad2aa9195b9e6", + "context_scope_empty:contributor-scan:f7484f28717752c36583df6d2167f9861bbf8368ac7f18b8a7c41ed41f301f37", + "context_projection_unavailable:contributor-scan:c0c4a04d19b7a5f1f33fff97f49a9d0245c4b14d24c3691cefbf46b76c064d7e", + "context_projection_unavailable:contributor-scan:2b86fe6715dd628b59d2303d2939369a6ebff338e7c9a3f41a5e76371e70d56b", + "context_scope_empty:contributor-scan:3663dbf64c23ffed29746c390953bb4c54f0f3154cc9fa65e7bf6acdf7249702", + "context_scope_empty:contributor-scan:8beedef6ba5098ea3567e7e9dd3ff36fa7ccf418f7a8dabc5cd1c8df83ac946e", + "context_scope_empty:contributor-scan:07ee5dd2f228e5d605f204a0e607fde140b169321c49486f64ef0ef3498defed", + "context_scope_empty:contributor-scan:34ca592cc7c4769ab6ab180436ace3d801b26463a0915b253459fbe8aacc7ce3", + "context_scope_empty:contributor-scan:2ee6a26bbed8f2554b909b310e8fbcafea825d9016c009fa785f34121053ae17", + "context_projection_unavailable:contributor-scan:6dd70277e9e05c3828bec89c4cc94f2b256eef50554fe78b7bc7805ba0c77d7d", + "context_projection_unavailable:contributor-scan:448a4023be7987eb4282a5534d6369f7e8ded7ddb3cc29c537a4e09ded04434a", + "context_scope_empty:contributor-scan:338e654fb02855abf17360c328f02986bf949d898b489ea7b9b29ce090fd1eeb", + "context_scope_empty:contributor-scan:bbd12c331fb019e0c84c5629c0b4945609328a196e3862f6f6dbadba31da81c9", + "context_scope_empty:contributor-scan:06ea156efb68bae0ec77525ddbd4eb18c1c97512cf524cdd7661286b48a2684a", + "context_scope_empty:contributor-scan:163b26e0bcc1ebc83d620624356e8a535ba4a3130af719e57a4dad9922d0ca1c", + "context_scope_empty:contributor-scan:ef7c18370144ac600fa593af56a8a849f7070b91261415e8e3cad6bcdadc80da", + "context_projection_unavailable:contributor-scan:f196cd68d51074be3989e323fc62287af695b781697b91b658003c825b426ce6", + "context_projection_unavailable:contributor-scan:a763fb136aa3978b7f47acb90aae2c6bb5715e8ca5ef1088d7856608c8807071", + "context_scope_empty:contributor-scan:5bdc9a08c76139479780eda09106fbec03bd5662c1817f14c0893abe4c22c798", + "context_scope_empty:contributor-scan:4d34d526ba5ee10314a8f6a74f7fedddbcf0ca79986c20a5127dbb08acfd6c43", + "context_scope_empty:contributor-scan:2c2899bd893f9611640844c56b404e5b91768151cb862ff497bb823c505d568a", + "context_scope_empty:contributor-scan:be30cb63922297543ed6c72314d3b6ec3d849d3c5d28fc3590ad44ebd82c4f0e", + "context_scope_empty:contributor-scan:28f1d0d25c8654cd762a439d6eb6f3a6896d37071f406d8edeeb4c20adee20ce", + "context_projection_unavailable:contributor-scan:f6a81369acf1c84e3cd6bf3399289323cb47848984a8c96800c0682fc1055a04", + "context_projection_unavailable:contributor-scan:94b9c4a91bfce96cbe773c203dfdf22d1b015231e91dd478399c2586be6a3e77", + "context_scope_empty:contributor-scan:526ce466755c525287df1a2adbdbdf566c896d79150b9bc7dbe65936e83abb30", + "context_scope_empty:contributor-scan:57dcaf9ddb9d8b054aa5dda6a0c9739439362e898cdf22aaf9f7338149f8cbd7", + "context_scope_empty:contributor-scan:064ff0d84035d834f9382eb8b4ad901fbeb4aa9fe816d7c36a34d56af41817bd", + "context_scope_empty:contributor-scan:d97343cdd389cd2ed9d0f1358d2bbddc2752053d95eab3e16e99423298a4371f", + "context_scope_empty:contributor-scan:f9deb31f0f9b98cad69111389734d43ed4fa86f24b05c9f2d48a78ea7a8708a3", + "context_projection_unavailable:contributor-scan:f962a89d04810a6c57abde4a8d3182d2a31c5d0f0ed3c37c053abea1fa223f31", + "context_projection_unavailable:contributor-scan:b62ac1b4b282eadf241f508bd5769bdd440b274f967d6ca73cb685ca249bd287", + "context_scope_empty:contributor-scan:57840b0da13c3f6f67e587689ab1eac913c17e91d493d1ce9ff089e8dccdfd29", + "context_scope_empty:contributor-scan:e3d1ce3b9de0fc9b48f2432d5e64947b5b24c3acaf1166f746bff1c54a028b9b", + "context_scope_empty:contributor-scan:d322db4b50c2c1bdbe0e22ef291070e20c93e0f7199c184f5ff8b4795b55cbe9", + "context_scope_empty:contributor-scan:88371d1acc9bc3b69c1d1957b27c9aefa3835be37bba74a359c35b1beaddc2f7", + "context_scope_empty:contributor-scan:3486da81fc55b7e285f23e85f44c481d780090285a384cfedaefa27265a236a8", + "context_projection_unavailable:contributor-scan:c87588b38d18fe9a5c563e2ae8d79649ce699607a891bd41b68194ce4507137d", + "context_projection_unavailable:contributor-scan:d6e3d356d491e5f3dbaca74cf11aef9bd751b36737feb34e466b707156b0d779", + "context_scope_empty:contributor-scan:843197ad039bb4e840b949b0ed1e5cf2230829366646a92ffc53d63e26149867", + "context_scope_empty:contributor-scan:b0766042c55d7c370799af987bed01fed8a417f83bc67e21d1366988aa1af10e", + "context_scope_empty:contributor-scan:b788ba22bd4225c24f95821dbf1f467dc2b13c7615b0bd2b00c3b234b7519539", + "context_scope_empty:contributor-scan:91430345496348280d29d11662aeb6048fd7596fc6304380b6154494df30d154", + "context_scope_empty:contributor-scan:8c1be7b4e8fd13181be0c4e46350a2f972e24acd13427e71c15e60dade41c28d", + "context_projection_unavailable:contributor-scan:f87a9ae1d7dc81f88c5891890b889aa7212e172ddec092182b7de6f01e787d7a", + "context_projection_unavailable:contributor-scan:b6a42fb01b464f31f65ebc10fbc12fccb051d8b44cac51a6818d3aedabea07f9", + "context_scope_empty:contributor-scan:4a820a780053b6f65492691e067e236adbd2a05b467e4e3f2ed37ba1260ce84f", + "context_scope_empty:contributor-scan:b07131192ab22510055930477ced5a10698278b2e00e3f711ebc202db640bee4", + "context_scope_empty:contributor-scan:5fbb00d9b2952ae4f0fed217bf2d8603872d8fc93073d99f31d8815539121987", + "context_scope_empty:contributor-scan:0bd48e207e95be86ea4e459c090a75c0adac8ca31bd2b631043854551b2c4392", + "context_scope_empty:contributor-scan:b11de5874aa62f939e383179c3ea1b34d3569ec6ade901964393b92f8325ad11", + "context_projection_unavailable:contributor-scan:8cd692618bec00fbbf099d570561201a2d0fdb601050fd20e198ead478530675", + "context_projection_unavailable:contributor-scan:19345b5fb5cecfc86e4db3cb8715cc7370e81796d70f11ba150a13c5ea8e4c37", + "context_scope_empty:contributor-scan:3ad0b3549b82f93ad869a9341397d394c1acee5e18d94a699b118094dd7a9a70", + "context_scope_empty:contributor-scan:32220b1bfe511b9dcec64d7ea8f4317e96b2d0cdc10bcfa55cfa3b63ce64aab6", + "context_scope_empty:contributor-scan:0cca9d955282f37dd60e764c56b52cbad90b33ec2c2943a7e5d155d35b0417fa", + "context_scope_empty:contributor-scan:40d00274aa5b28039b0d57d75a81f174c0a31e4be2d324ba79a64b79efd4e411", + "context_scope_empty:contributor-scan:319d00690097314e26638e2f4a6d848f50d1ff2f9d6f755a618eb31398ed373a", + "context_projection_unavailable:contributor-scan:dfa47fe83d195de69774c841747f6e7ea78d6d91297821dc9b8ee5fc625cfe2b", + "context_projection_unavailable:contributor-scan:5a497ad4d83218c29d4f22781a54d9e1927dc414f7cba6f89d794ed047f8b245", + "context_scope_empty:contributor-scan:1bd3f2289cc1bfa889496ca5074991941263703a2517281734f33d0ef1050f1a", + "context_scope_empty:contributor-scan:587a689c0312ac0f6d98de7495f01f34428cb128e73875a71508f7d5874415b4", + "context_scope_empty:contributor-scan:fc77f013f48b454d8703f25f76646f74b74c9e4f8e5d542bc5f48d98c6e51fae", + "context_scope_empty:contributor-scan:a2a7af80da34233233ec619dc29366b40a9e55ead63626db185524f2415761f5", + "context_scope_empty:contributor-scan:f180a77f032bfea9c7d152438ba830f19e1bfc88481a56b9e554c61d2cd64f6e", + "context_projection_unavailable:contributor-scan:cb70e9a1b44fa1f13f3bcc5290e6db5c8d6eda83602c9513e91e779ac6cddd3f", + "context_projection_unavailable:contributor-scan:74f543e29e519871aabcedb9d39c953d5397aac456c3c5e6eb0e10e517989eb3", + "context_scope_empty:contributor-scan:c983c339bc6881a1e6a0b2c6a794de858613b91318205a623dc61d80c2238036", + "context_scope_empty:contributor-scan:97c5314218bfb458e1fb6d1a33c9ac75c7de152774a736f6c5874657515ccfcb", + "context_scope_empty:contributor-scan:0744dea5a54614d094a6eb711ff7df94a180bfdeacaf330e31d9466cd51aeda2", + "context_scope_empty:contributor-scan:06dc1ba86d3fcb46096bed80d9c5c558f79a5a33f4fcdb379f1567b1271b64ab", + "context_scope_empty:contributor-scan:aa48541c8cce586b7a8c5e8ebe3cb607d1c283ef8940b7d4c7fb584327dd177f", + "context_projection_unavailable:contributor-scan:a9d086126128de76e0bafc06ca465176ed2884cb7ec963457fe106346b8094f9", + "context_projection_unavailable:contributor-scan:637323a350346cee17c66cda9b8b1be49d58350b0a0904bd61e5af20ce611df5", + "dynamic_external_or_depth_context_unresolved:contributor-scan:aa25524f30b8e84ef80b52064a75ca56cf438e67e2696e360d683c03e85c4c6f", + "dynamic_external_or_depth_context_unresolved:contributor-scan:9b5371eadea2bf5707f730896b4766a8b56012269f1c02c5df9d0df1d1cbf696", + "dynamic_external_or_depth_context_unresolved:contributor-scan:d527de43dc2dfdb271c213a927ab31c08b1f063298b211b6b11831a4dff51922", + "dynamic_external_or_depth_context_unresolved:contributor-scan:5ee4f0b0ba2c39e7071bba12da912c1ae213b8a2cee0bb437afa500328a237d4", + "dynamic_external_or_depth_context_unresolved:contributor-scan:43d3388ae21433a62d37d4c92861c125683f03a0edd9d1afaa56a42a7b793dc1", + "context_projection_unavailable:contributor-scan:cc8161804d4c84fe4c4f7210a16193637accc1f791b7fc7be026c07177b7da4c", + "context_projection_unavailable:contributor-scan:4bc68b77bfd52e96e8db4fb7293a6d4f396d234eb4dafb625df76bc8f1ba1c7d", + "dynamic_external_or_depth_context_unresolved:contributor-scan:a66e57d86751f21d11652bc991ffe476eacb638f38f95947b723ac9448c5f668", + "dynamic_external_or_depth_context_unresolved:contributor-scan:278e2e9a97727da969f8d122576dd475c43141146f984e3af997600a013f19bf", + "dynamic_external_or_depth_context_unresolved:contributor-scan:3152613ac0763b809bc99a50b728391cfe19d2cfeb27ff47a1e3671ed7526a3f", + "dynamic_external_or_depth_context_unresolved:contributor-scan:06168cf4f7850405f47bd8cfe013dc077b51457b355698ea3407f998cb561c2b", + "dynamic_external_or_depth_context_unresolved:contributor-scan:44620fe943880d4498587b283cf31a67b85fdeef53f59223299018c3666ae32b", + "context_projection_unavailable:contributor-scan:f553b646e7933b5f766d1187c3bb1aee241ea0734ec1c6addc08871c43bb7c64", + "context_projection_unavailable:contributor-scan:5f7e12488b0d469ffbaa32d1fa766352c8672ccd9e81f503480cec626d1f88b3", + "context_scope_empty:contributor-scan:86fed64323e502425165fd4b319a848da156ed4e1acbec6ac706b8f5afbdc1e9", + "context_scope_empty:contributor-scan:3273da703327df23094325bf9a120c3bbbc9388b4bbbec32a24b768f4d02669a", + "context_scope_empty:contributor-scan:cd57f10c8a3c69b40ea2832dc35837d8a7521f2a17b2936eccaab7d5bf482dd5", + "context_scope_empty:contributor-scan:fe62a9ab0e66c65344f94de1006ed30505bca06dcc7619ca717078a09afafb91", + "context_scope_empty:contributor-scan:f83f5339fbbb59939406f37a8053030f00333d809da78196e1dc177209fd0e70", + "context_projection_unavailable:contributor-scan:9cfce61b0d63c05676d62a7dac8c1362d78e2e686d6a8b53c56094bb2014ab96", + "context_projection_unavailable:contributor-scan:dd387d649e718c5d7cd9618fab6cf60bae452924f4e0b36b9b9ee9d4b9738ef8", + "dynamic_external_or_depth_context_unresolved:contributor-scan:b4e9704f8937686cd738c71fa7250b970fe64be89c75e36412cf4288e7911371", + "dynamic_external_or_depth_context_unresolved:contributor-scan:b2d3838be418d29c1ebf100d269591a89b6e74f81b822cff71d8a9d9548dea0c", + "dynamic_external_or_depth_context_unresolved:contributor-scan:e31733d8cd5174ecda373492fb9ed3f56fffdac8f869380c06ee9f185821918b", + "dynamic_external_or_depth_context_unresolved:contributor-scan:3c7b69a99d3765c95a713d27af4ac28d7808ca92543062610bdf24edd3643790", + "dynamic_external_or_depth_context_unresolved:contributor-scan:cd639186013fa4488043c42b05357e82425a3e889ac14679eef46b7388cecfd9", + "context_projection_unavailable:contributor-scan:b9195800d5bcce2e36a49a8f49f1674d9913dcb526cf50d1097ce4bea82407fe", + "context_projection_unavailable:contributor-scan:92d25db73aef0c89d7f6d45a21f56bf7c0b3854a0c8d19db7bc7247ed2244f78", + "context_scope_empty:contributor-scan:9eefbecbf32c98775e957013ff48c835781e52d91e576f81eec2c079bb61acd5", + "context_scope_empty:contributor-scan:9a71eba84ef99ab18d46121f3d387888c2ebd4054b85f3cc2fe90f8e75cb6538", + "context_scope_empty:contributor-scan:5fec8b431826e32ff8b6d3da66269f1e8561573bdbc8602f3fb20fd5e1bd8f44", + "context_scope_empty:contributor-scan:117d803b171807fb6ea627fb8eadd75abcb20606fc3acfea76def5897a986f35", + "context_scope_empty:contributor-scan:71a5b2e0b33d5bbb1ac73e6967b839cdfbea4de2fc828ec34ae8e40f8dfe96aa", + "context_projection_unavailable:contributor-scan:3175ca255e0323924a203bf8aa949691546196277c5976052ff0678a934fbffa", + "context_projection_unavailable:contributor-scan:7b355ea64f6dfd26a0ca7c433c31b1368e70d785f31c71caff4df6883245d409", + "dynamic_external_or_depth_context_unresolved:contributor-scan:3f00299f644f669c39db368d2a0df198f572ce9c8c08c85a94fd8c7db9cb5500", + "dynamic_external_or_depth_context_unresolved:contributor-scan:3e4b1620b66257264d51007170e6b0c49729b4731e3e1d236d188dc325ece52b", + "dynamic_external_or_depth_context_unresolved:contributor-scan:ef62a3e54636bc30ce5b75fb14e4753986000fed2eca3cb11aab716c88729f31", + "dynamic_external_or_depth_context_unresolved:contributor-scan:53635a42011bce8fec02af0d16ca0cf4b994332d1ce09551b99693a1ed59d247", + "dynamic_external_or_depth_context_unresolved:contributor-scan:0e4f65ec98ba41eedab3df06256eb227c558f31fee052a4266b3539f7af08275", + "context_projection_unavailable:contributor-scan:23a5e489bbb5740c0c685591e6b73a7096bb238cad11e8d7e84fc9f4b7f55207", + "context_scope_empty:contributor-scan:b92a8731fdc1bf7bd7bce4084892f87e4d9174acb204ee163cebebcfcae6a5d8", + "context_scope_empty:contributor-scan:2e55a819e3b67123ec2edfc304418d7fee50dae9c9b922c3a5d250d6f7c9662e", + "context_scope_empty:contributor-scan:3b6aa69186293835af4c700678ee9bb810de2ab8899c93cf245e01537742f5a1", + "context_scope_empty:contributor-scan:2377ef08168881eba6f35e080a5fed4608aa733dc9670f59d45ceee5ce08fa47", + "context_scope_empty:contributor-scan:2f26d70299414d84d00c95be2fd40758bce2e88a1fe89bedf898395894f501b9", + "context_projection_unavailable:contributor-scan:5c2048320f765e1756e7a743afa544a602d648311f4bb8495f3d43de0f8cea49", + "context_scope_empty:contributor-scan:e08780a749f547c02460053e2a258b64f89ad494c042171f2e8a426f3c9a0520", + "context_scope_empty:contributor-scan:97ae7d3c4e6969d04821c5ed50c21a914379c1a1b3b5e5dfd38b26438e249f2f", + "context_scope_empty:contributor-scan:6e181d25ef0f246585e55b5eb77c8e6191fb135af98e816b0abd841134bd5d57", + "context_scope_empty:contributor-scan:271afe681be4d6c7c09cf9b4010888525eb1efb66cc2501215894c15e2898519", + "context_scope_empty:contributor-scan:e8e670d05231f561f6a2ea1c1e08a560a96bb2674ac72851dc29da697ac169ca", + "context_projection_unavailable:contributor-scan:8726ea1166fc378ce1bc6bc99ba52e93416fb5d1fefd812ea29de503077d548f", + "context_scope_empty:contributor-scan:3cab3aa4cc41da609f367c1c57db872b8cfcb7b2f323516266bb3d8fa36642b4", + "context_scope_empty:contributor-scan:c5a186e0f17d7af521efa20982916fc813e1b7d05295c3da7730ef6b5a48cab7", + "context_scope_empty:contributor-scan:1738964f08db1fbe6b5965f7721be058d80a4e1ec976ac743059a5b31d6cd7a7", + "context_scope_empty:contributor-scan:7f10a07aaba3a86425dce315a22df012363cd11065229f983530e2156fd77442", + "context_scope_empty:contributor-scan:d97c168cb31e3390b66dc4f61020d70ef36ec9bdc679c2b64a79dfc648238207", + "context_projection_unavailable:contributor-scan:0db0f54012e0427209e8a7b14f787419a4a6cf8cfbfd7e985e34898c1dcc3b5b", + "dynamic_external_or_depth_context_unresolved:contributor-scan:82d9cb547ff915752dd430f4b91c03970ed3cc9e376a93aafea77e196cd1998b", + "dynamic_external_or_depth_context_unresolved:contributor-scan:88f50df0343fa95532cb3b9d60cba5cee24c7e245bccc8ea06d8803d43f99f75", + "dynamic_external_or_depth_context_unresolved:contributor-scan:525d6f86a91046bc79ec5e19e21eeb42edb94aa9c1a3a6ff669455aebbefdea1", + "dynamic_external_or_depth_context_unresolved:contributor-scan:a8387bac47d88608c9a58ab2916857b9fc2fd8a1d52fc5d16f79bb4ab8be40e4", + "dynamic_external_or_depth_context_unresolved:contributor-scan:57ea90041e625ad5368caca533f024381987b1afd81d092b28eed73f0c8c5499", + "context_projection_unavailable:contributor-scan:3eead9155ab4b5705fa08efb59ff16f1705d2eca4a8d707e4f633731bdccd8e5", + "dynamic_external_or_depth_context_unresolved:contributor-scan:e1d445eda8d84d9b3972b06b657c3be233a2c77a2cc146988c3d076b11b2f906", + "dynamic_external_or_depth_context_unresolved:contributor-scan:0e6a4376c4e70a27e5bd632511b761c70d8fe6776f93691d26262e169965152d", + "dynamic_external_or_depth_context_unresolved:contributor-scan:94df997fee522b612e12ed3596618cf27aa3a3109bb459f16eb6b6c136538295", + "dynamic_external_or_depth_context_unresolved:contributor-scan:6397f7955219931bf05a5b8407360c4b71ae62002aa273ed85db15276dcfb613", + "dynamic_external_or_depth_context_unresolved:contributor-scan:a3880c761ca9d0019b08cf255540fa495d5d69593e9bd73fa6eecb41dae42859", + "context_projection_unavailable:contributor-scan:33e09133f59de09d87866389533ef005fc2c34de8a4cd68ea1d528d3c6df4165", + "dynamic_external_or_depth_context_unresolved:contributor-scan:58ca35a7300e2d7edd5acee6de464da5593d81380aff9e99fad2bd1d8c0dee68", + "dynamic_external_or_depth_context_unresolved:contributor-scan:2d8220d8b7f51f9f1082d903f592ff051faa4c37a46fc131c31da1dd2a233ed0", + "dynamic_external_or_depth_context_unresolved:contributor-scan:0148345468c538297511e912438b1ff6f0bcc70d8058f87ff70b5f944946395f", + "dynamic_external_or_depth_context_unresolved:contributor-scan:cebf3f7bf74150ce4fbddbc693fd6881a8d18aacbb54b8e33097580fb330e273", + "dynamic_external_or_depth_context_unresolved:contributor-scan:b8213e35bb6cffbddb211df8497d7c37f33a800f3a729846b041155c2f82c7d0", + "context_projection_unavailable:contributor-scan:33c0d02c59cebf05005b834b6354b9d11184238c087a253b86e5479209a57d61", + "dynamic_external_or_depth_context_unresolved:contributor-scan:cfa8f4a6860419485b27245e5f66228003a0f4fce6797dc9e7fb5d938bb61100", + "dynamic_external_or_depth_context_unresolved:contributor-scan:633e780f4bf491dd0635d773334d7d2ca15a670d0d78681871dd88d77a2132e7", + "dynamic_external_or_depth_context_unresolved:contributor-scan:0b51f52c0d43beecb81fb62c82a17850a11aa6faab7527ea4833efffb0b4a8c4", + "dynamic_external_or_depth_context_unresolved:contributor-scan:c295b4b3d54eb3f602e5b7b6f302dd9c66cad44282af938a158887a4b64e6400", + "dynamic_external_or_depth_context_unresolved:contributor-scan:a9979735925dbdc75c01667c69443c96f645e530ca0fbb182c1d515093799d43", + "context_projection_unavailable:contributor-scan:9fffb2f1348a76b735b269ce0961460b780c22882cf471ae5f1c1fafea3ae48f", + "dynamic_external_or_depth_context_unresolved:contributor-scan:d06f59868c9200c0d32396ee176a3260ba3940e0fef382b1edeb189030ab043a", + "dynamic_external_or_depth_context_unresolved:contributor-scan:44110d2cf36273a7c292ad5a9fc73bfa40d5de4b0188a8bd5d28f6439e078ef7", + "dynamic_external_or_depth_context_unresolved:contributor-scan:7fffb43180730947e0ce0f17899806d2998df9a70c9f9850a0bf0d5ab97da3f8", + "dynamic_external_or_depth_context_unresolved:contributor-scan:93b7d5e9121a06853fd8e0b65a846bf7497ec5c9e769db2f721ce40770a5ad8b", + "dynamic_external_or_depth_context_unresolved:contributor-scan:e3c15c181160b97750a748f9b1ef062574f0899d602333c7c543efe7be6687c6", + "context_projection_unavailable:contributor-scan:483fc4310a9c5e101c6e1592299caba75d191c524516cf48094705cacaaffa1c", + "context_projection_unavailable:contributor-scan:88260afe57f54f14752828d92501cd736bd27ff95389912283e88faa97a75269", + "context_projection_unavailable:contributor-scan:529b7bf7e34de1f5689bba72a58407f3731bd2cee8af78a53dbd15497faf9d40", + "dynamic_external_or_depth_context_unresolved:contributor-scan:d5066d261ad12b1f8692fbfc1876a6d30837395cbb121351d9ba61cf1b20cea1", + "dynamic_external_or_depth_context_unresolved:contributor-scan:b0f968a432800d13c601c7520bb36cc9ba52b24e2a09109fecc34cbfecdbe9ea", + "dynamic_external_or_depth_context_unresolved:contributor-scan:f82bb8ca1a7fd8998886a8fe8f00084f108125394b9621c6cd19d92f23fd8c3d", + "dynamic_external_or_depth_context_unresolved:contributor-scan:53df3ed8b2dd7c46d8c42882a6096bccf1d6c966cbef8158b45f4390085a00c0", + "dynamic_external_or_depth_context_unresolved:contributor-scan:117aa85101fd69718713ffd12a7b4cbaa9bceb86cb52731e69ffb9ef83f80750", + "context_projection_unavailable:contributor-scan:40a86c0d81cb5654b51d4447a6e348a246decc7780581a9aa2d60c2f768e1de7", + "context_projection_unavailable:contributor-scan:378243809750b9f1750d2d1f0f9204ca18d490e7458afff003f86c8cbb255dbc", + "dynamic_external_or_depth_context_unresolved:contributor-scan:90565ee1486201dcb600733c58934abb476fb873581c0e3dae8aff2ea1ebfe5b", + "dynamic_external_or_depth_context_unresolved:contributor-scan:f5dfb739730436eef0a9ed0f8c1c7b982469df5d6c042d321de52ace8d3a2c15", + "dynamic_external_or_depth_context_unresolved:contributor-scan:34c56c75a6772748996ada2bb9f2ed985d65a7c6de0087e220f45285846cbb73", + "dynamic_external_or_depth_context_unresolved:contributor-scan:42fad701f64b0f289a69aab6d432cf25ea365f4966a478216977ccbd5e25c19b", + "dynamic_external_or_depth_context_unresolved:contributor-scan:ebf4109ffcd719505b5871ad734ed07d7d1718a173977d31106050ae7bef2ff1", + "context_projection_unavailable:contributor-scan:df543c94ec4b21c6fb74b805b76a1f3c855d222faa8599c060f8c85020e320f5", + "context_projection_unavailable:contributor-scan:ce720073f337bb4893fa3a3b1e2f8e86696e5179617000f4f47cb343922ddd3f", + "dynamic_external_or_depth_context_unresolved:contributor-scan:786a19bb3612b1d1110134aefbe6968e75bb3340fe8d3994fcbd0e905bffc18c", + "dynamic_external_or_depth_context_unresolved:contributor-scan:256345974cd78d13520d2e43ca98d1ca0d650baf88aaa6b8db75c80e6505b101", + "dynamic_external_or_depth_context_unresolved:contributor-scan:2648c4f69b677c285297aca3107a6770c0a4bc1689dde13e6b5b59e8af91940b", + "dynamic_external_or_depth_context_unresolved:contributor-scan:752195dc0695f44531be939deb0f9940a9eb5273117c7705768c2b5edd6a70e5", + "dynamic_external_or_depth_context_unresolved:contributor-scan:1e4da8e8647caba2f3b358ddd5c25936b46d87b9e118935597be60fa58c6ca4a", + "context_projection_unavailable:contributor-scan:6dbf2e32d098163480ab02a98344750fa5daafc7c66adf4fe90d0eaeeff4f86f", + "dynamic_external_or_depth_context_unresolved:contributor-scan:4e93b1d6b6d8ee75bf09aa1789933ef1248397e1e3df6ddf8af74eaa04d59c3c", + "dynamic_external_or_depth_context_unresolved:contributor-scan:6e8f38e9b80a674c58e2d85fb797e0357cd1414528a175f8e06a10b15455bc91", + "dynamic_external_or_depth_context_unresolved:contributor-scan:d397c5433f574c1a5f9d5c219c91131f3823694a50e04a6a2d896458b76f2e2d", + "dynamic_external_or_depth_context_unresolved:contributor-scan:f50cc41a1fbfe1a27916b010ce35aed4d7f2803e571225ea1382facd5a603139", + "dynamic_external_or_depth_context_unresolved:contributor-scan:f375dc182eb989bea2dfe5c2e26a351c3e2c2ea5c8f11447f34004c5c5ca2f27", + "context_projection_unavailable:contributor-scan:7171793b9c6db5102f6088265373a7c57778f18f440380255a390d5745113652", + "dynamic_external_or_depth_context_unresolved:contributor-scan:494461bfc7dcc180d454bacd79e12b4a12598e3cf2594b4a96001188df71f27c", + "dynamic_external_or_depth_context_unresolved:contributor-scan:4ccf4da37de3d59a491675a6cddcc6323deb914a8f458fe6bbd20f4ab824fa69", + "dynamic_external_or_depth_context_unresolved:contributor-scan:74d21ad3cac9cec15832b98239679ab6360d84ae3d2a36a3f02307d647e7719c", + "dynamic_external_or_depth_context_unresolved:contributor-scan:b7b45314da2fe600d6377531a57acfd3f5d44c2f0e8641d67f0c9288bab8a3ea", + "dynamic_external_or_depth_context_unresolved:contributor-scan:7e9025449366165d1e1a7a84b15c89acdb7220595af59d776716b7caf76b517a", + "vendor_semantics_unresolved", + "analysis_incomplete" + ], + "timings": { + "deadline_seconds": 900.0, + "cancellation_allowance_seconds": 2.0, + "resolution_seconds": 0.020484411041252315, + "provenance_seconds": 0.3173448230372742, + "snapshot_seconds": 1.1052202440332621, + "snapshot_reuses": 0, + "discovery_seconds": 6.843068717978895, + "discovery_hits": 0, + "preparation_seconds": 7.969127718009986, + "head_seconds": 155.64556319406256, + "base_seconds": 177.54013824707363, + "admission_seconds": 0.008433694951236248, + "recorded_vetoes_seconds": 7.532678750925697, + "cleanup_seconds": 0.009001376922242343, + "graph_hits": 0, + "query_hits": 0, + "total_seconds": 349.0797635220224 + }, + "raw_witness_present": true + } + }, + { + "case_id": "nodegoat-repair", + "command": [ + "/venv/bin/python", + "-m", + "openultrasast.cli", + "pre-push", + "/results/m1a-2026-09-16/objects.git", + "--base", + "c5cb68a7084e4ae7dcc60e6a98768720a81841e8", + "--head", + "0b453d5abc38f1a970d4771ebe6c5413f8c3b0a4", + "--artifact", + "/results/m1a-2026-09-16/nodegoat-repair.json", + "--deadline", + "900.0", + "--cancellation-allowance", + "2", + "--max-regions", + "500", + "--cache-dir", + "/results/m1a-2026-09-16/cache", + "--experimental-record-vetoes" + ], + "base_oid": "c5cb68a7084e4ae7dcc60e6a98768720a81841e8", + "head_oid": "0b453d5abc38f1a970d4771ebe6c5413f8c3b0a4", + "exit_code": 0, + "elapsed_seconds": 153.76043781707995, + "terminal": "No actionable defects reported; analysis is incomplete.\nNotice: Some checks are not enabled for normal alerts. Review capability coverage in the details.\nExperimental: recorded-veto evaluation retained 1 raw finding(s) with 13 recorded veto(es) and 3 base-only finding(s) in the detailed result; recorded, not applied; not an alert.\nDetails: /results/m1a-2026-09-16/nodegoat-repair.json\n", + "artifact": "nodegoat-repair.json", + "provenance_matches_installed": true, + "outcome": { + "expected": "fixed twin analyzed and quiet: target questions answered with no injection finding; three base-only findings", + "expected_head_findings_at_target": 0, + "observed_head_findings_at_target": 0, + "target_questions_answered": true, + "target_question_outcomes": [ + { + "function": null, + "status": "unresolved", + "reason": "change_context_incomplete" + } + ], + "head_scan_completed": true, + "base_scan_present": true, + "production_finding_status": "none", + "production_coverage_status": "incomplete", + "recorded_status": "evaluated", + "recorded_target_findings": [], + "base_only_findings": [ + { + "family": "injection", + "site": "app/routes/contributions.js:32:2", + "rung": "model_entailed", + "witness": "eval(req.body.preTax) -> const preTax = eval(req.body.preTax) in app/routes/contributions.js (line 32, 1 steps)", + "head_counterparts": [ + { + "identity": { + "unit": "repository", + "language": "javascript", + "path": "app/routes/contributions.js", + "function": null, + "family": "injection" + }, + "status": "unresolved", + "reason": "change_context_incomplete", + "rows": 0, + "lifted": true + } + ] + }, + { + "family": "injection", + "site": "app/routes/contributions.js:33:2", + "rung": "model_entailed", + "witness": "eval(req.body.afterTax) -> const afterTax = eval(req.body.afterTax) in app/routes/contributions.js (line 33, 1 steps)", + "head_counterparts": [ + { + "identity": { + "unit": "repository", + "language": "javascript", + "path": "app/routes/contributions.js", + "function": null, + "family": "injection" + }, + "status": "unresolved", + "reason": "change_context_incomplete", + "rows": 0, + "lifted": true + } + ] + }, + { + "family": "injection", + "site": "app/routes/contributions.js:34:2", + "rung": "model_entailed", + "witness": "eval(req.body.roth) -> const roth = eval(req.body.roth) in app/routes/contributions.js (line 34, 1 steps)", + "head_counterparts": [ + { + "identity": { + "unit": "repository", + "language": "javascript", + "path": "app/routes/contributions.js", + "function": null, + "family": "injection" + }, + "status": "unresolved", + "reason": "change_context_incomplete", + "rows": 0, + "lifted": true + } + ] + } + ], + "census": [ + { + "language": "javascript", + "frontend": "javascript", + "files": 44, + "complete": null + } + ], + "coverage_reasons": [ + "capability_unavailable", + "comparison_unknown", + "witness_unresolved", + "dependency_unresolved", + "eligibility:eligibility_provenance_mismatch", + "6170702f726f757465732f636f6e747269627574696f6e732e6a73:ambiguous_line_correspondence", + "witness_identity_unresolved", + "context_projection_unavailable:contributor-scan:da4abcaa22e13947dca90ac9156293bda9297423304d60d587569389742ce17a", + "context_projection_unavailable:contributor-scan:29000feef9d494e003efdcbb6eab5410bc93ad2f4674df9db389ed98a9cfb242", + "dynamic_external_or_depth_context_unresolved:contributor-scan:4679cce5fa8da06bd1f9542b5a58321d2b090556cce83080b6e9ace36d352a59", + "dynamic_external_or_depth_context_unresolved:contributor-scan:df4a0610953efc25e4ddc4bc942688434be889411d073fab09015aba97ce2511", + "dynamic_external_or_depth_context_unresolved:contributor-scan:9b7910f9f96aa714b760481e46e543ea413d6e4763b858a3d0c186a560ad618c", + "dynamic_external_or_depth_context_unresolved:contributor-scan:298f3d69ca3e2b343c9cc5288680120b89e035bfae803dc6f6952358b6d0f1d3", + "dynamic_external_or_depth_context_unresolved:contributor-scan:7fbdc1e100a0b9078b6a2d6264bfaa596c64501b8c5ced1557b56a3d98e2b351", + "context_projection_unavailable:contributor-scan:8f51fe6438299d6f935f48d1d0991270ad477174195aff8574ef587a45038efb", + "context_projection_unavailable:contributor-scan:8d26ec62881cf7efa89509047c178e7b920a87cc4bfb9cb0d6d991e87ca22124", + "dynamic_external_or_depth_context_unresolved:contributor-scan:ec5cd96c01771e651d9e09445c5df8af453e475da75f47a583a1006e99686b09", + "dynamic_external_or_depth_context_unresolved:contributor-scan:2981a228c15eb8a02d051bad6ce39736dd5f4c3f63a979d997bc23086105cbaa", + "dynamic_external_or_depth_context_unresolved:contributor-scan:7055c8f3c6f41ee3593da37fd92332c561907e07a633b9ba7bf66347cdccb378", + "dynamic_external_or_depth_context_unresolved:contributor-scan:68b25a8b5bcd76f92ed9473318e67e752b5898eb6b34c4a1205b77a88dc0214b", + "dynamic_external_or_depth_context_unresolved:contributor-scan:435b8c03368213b50237bb6f7a4dbfad4e7ba8d4f3948b046a5e95ff38c739be", + "context_projection_unavailable:contributor-scan:d2034c51a6d44b7b5cb553f2ad130441532b6be68cac0e829b74c4240aa642c4", + "context_projection_unavailable:contributor-scan:1d7abc4a4a8c6023e1c5231f46167efdb6c476e4533ea4670a17ecc6c8d09c92", + "dynamic_external_or_depth_context_unresolved:contributor-scan:ba984e9deee4ab97a4211ce15915bc36e0e42907e21f40525be95c698c439653", + "dynamic_external_or_depth_context_unresolved:contributor-scan:ecc80bd3363347eac23b60a8ec50efe1a5defd3609aff7149022fac1e74524d4", + "dynamic_external_or_depth_context_unresolved:contributor-scan:7cead756038bdaf46936671d2311c93b391692337189bd9f3acb5711dcd1b594", + "dynamic_external_or_depth_context_unresolved:contributor-scan:d7044d436bcc3e7e313fb2baff364c8aecf980b28741afd4d020f858a47a3909", + "dynamic_external_or_depth_context_unresolved:contributor-scan:f0fb49041bdc02002b8aaf574a29a738aeb235ca0bc5cbbe9998dd9841e93a0d", + "context_projection_unavailable:contributor-scan:590ded4d9ba52b59e2934f3d461e45dfa5bd351f13c4fc17238297438fbf492f", + "context_projection_unavailable:contributor-scan:33ab14574877d6a529a58df1926e358759fb4ee1ffbc68146aebf77a895c8eb9", + "dynamic_external_or_depth_context_unresolved:contributor-scan:489bf9f5f3a1e3771698cf111c0e7fa3e84f81848869c88a44cf3d19979d168c", + "dynamic_external_or_depth_context_unresolved:contributor-scan:ca3b943eb07fc11f6cc16228ae4e7813cfccac5dfe7ea9147deb0ce84677e486", + "dynamic_external_or_depth_context_unresolved:contributor-scan:a83d9fd2d4f399a40984cdc63e30003a73c98a6986f76fd5e22ed0ed7873c8b3", + "dynamic_external_or_depth_context_unresolved:contributor-scan:593c9114695f69035b4df9d566534e35fcfaa2d78a3e4362c2ff634580d6bee9", + "dynamic_external_or_depth_context_unresolved:contributor-scan:87ba1a35a429f850990db0eceda9996daf572b97b32b38e0f7ff4b80dec9a6b2", + "context_projection_unavailable:contributor-scan:f12e400682d1a222abca9d05f942a24394d7795eacc7ec322c585a0a6ffe69ec", + "context_projection_unavailable:contributor-scan:5e24ba3194915f95a2452882fe928f834ed4740f8fa2087c7573b7c2f128a2ad", + "dynamic_external_or_depth_context_unresolved:contributor-scan:4d7554903c7ff3f7005fe4ed77f7e82af8cba218d3ac0b431acf14d18ffeb639", + "dynamic_external_or_depth_context_unresolved:contributor-scan:896720a23ec5b7da3163d53b517817cb01337cdad64d2104dbfdd3b3526f9c5f", + "dynamic_external_or_depth_context_unresolved:contributor-scan:e13de3ef10e25c529870483b67e47206b9cd32251e118f20f628eba95236d9c9", + "dynamic_external_or_depth_context_unresolved:contributor-scan:ac5ad3cda567527eb97dca35bb56d076292b88e20baa36d337967eb1f4f63dff", + "dynamic_external_or_depth_context_unresolved:contributor-scan:7c0bba65b77fc890e479add54e7fb0e9a7d145a4304d81f614536a8470d0a471", + "context_projection_unavailable:contributor-scan:722bfc188cadc50c1485cf4ede13f2b62e93b08b16f42f2586c104b8bd3745e7", + "context_projection_unavailable:contributor-scan:144c1db7c40aa0a420e02130a756c7793fc8fa5d33549a08c236ddb96bad2df3", + "dynamic_external_or_depth_context_unresolved:contributor-scan:6bb3ba6475ce8d11ff20924b69721387bb0d4bbce1b852e640403dbd750f0a8f", + "dynamic_external_or_depth_context_unresolved:contributor-scan:a08e3f98d65d0452a631a11de0ef53c9fb53492efcf3d8003b5512478b92b4bc", + "dynamic_external_or_depth_context_unresolved:contributor-scan:4e0e78390504d44716e20ff65cf5f16c1f1ddc2fa0441e503dcae1826c666529", + "dynamic_external_or_depth_context_unresolved:contributor-scan:0e143029eb9d5d5c30c3dc0fda147c852e68d4e8d407795a1047beb586723238", + "dynamic_external_or_depth_context_unresolved:contributor-scan:43e8934e37c9ecda6c36b4bee6af63f4269e59cefb5df30af45ae08bd93f5063", + "context_projection_unavailable:contributor-scan:e9cf95baf8cef9a83d9da86e0bce276421ed404867ad948acc338fa759a3450a", + "context_projection_unavailable:contributor-scan:431521d90fc22b7683173732598c39b94a25447f7403dcd4d9e17ca23e243a61", + "dynamic_external_or_depth_context_unresolved:contributor-scan:d331868f74b26a35872e8eeed4f66f3e34a29f8e9745fc14c1609cc3408aebeb", + "dynamic_external_or_depth_context_unresolved:contributor-scan:61b6ec72d6c0dddae427635aca3c97681a112cc4c5f8e4367d9f5864c6eb72b3", + "dynamic_external_or_depth_context_unresolved:contributor-scan:e831bbc3ab250e71270b1f5175756f39c2da662bffd68b2ed78b5389a4f23d0c", + "dynamic_external_or_depth_context_unresolved:contributor-scan:082910c464337b0041733c3c2733ad7947d71549180f9a0b8ad4172901469d02", + "dynamic_external_or_depth_context_unresolved:contributor-scan:14541cd08e0b036e4ab5caa442c01459fb03a6e3ef0388bcd0347b121effc6fc", + "context_projection_unavailable:contributor-scan:e4fe7eb3e5d57766a2c6adc79d46b9f57ac13ba11df7846cc4f7d62123a51bd4", + "context_projection_unavailable:contributor-scan:0cc9059de118ef8da2ab45a3453bb2f64a679dfa33233f3b1b722b3858df789b", + "dynamic_external_or_depth_context_unresolved:contributor-scan:d561ce2e09d49013cacec011cf5dfa8c5f35c25c41085e856b3d5f28579ba6f4", + "dynamic_external_or_depth_context_unresolved:contributor-scan:7eb45f19bf15a2826d7aac45f36137de8824abfa9c0d5412da3c69c5d6da7a0d", + "dynamic_external_or_depth_context_unresolved:contributor-scan:ef130caaa2b3321cd12e2c8c39a27f9a868d2405e572fcafa5cab93900d9f97a", + "dynamic_external_or_depth_context_unresolved:contributor-scan:115b829e9b03431b06c12212efdcc2da02b5e22953e8a02243a8cd5a59cea0f4", + "dynamic_external_or_depth_context_unresolved:contributor-scan:db0e20f3ffa3b74105bddd565ba608daaea4cf9baba6b43a2539958e1a8be668", + "context_projection_unavailable:contributor-scan:0ca04c8edcd2d8a247e575209a9e5c8a1cf86c39e6655d79d6f85ef41556ef71", + "context_projection_unavailable:contributor-scan:d8cb785d9bcf0b1a8289362c5badd0db084f2efa3d831fdda8ffbc5cd423febb", + "dynamic_external_or_depth_context_unresolved:contributor-scan:c932a2fea0cf3a50a44090757e856ecaa4914e385b566787b60877f04c947002", + "dynamic_external_or_depth_context_unresolved:contributor-scan:1d3d7b3981fee634842a7dc05f5e4d1bac279c0ab8e9df78d768f43676186340", + "dynamic_external_or_depth_context_unresolved:contributor-scan:155e5683914f9d0fff0323548d9a531ed582e72414b934e57edb656579cb05e7", + "dynamic_external_or_depth_context_unresolved:contributor-scan:486352981492eeca9626588e8aa0a737dedf797d83a20148cf86aaca0e5cd660", + "dynamic_external_or_depth_context_unresolved:contributor-scan:692125735f88d08d8cec81e5564ed2f20d88422cb693407e8b569f2b1e07050c", + "context_projection_unavailable:contributor-scan:4ed8fe95db377770a47a2b3ad04a3a720ec21bdbd5222272ec5555130a627fbb", + "context_projection_unavailable:contributor-scan:ece73e32fe91c87a001f1e41342e09378041ee876c8a8846a51347b8b607cc2f", + "dynamic_external_or_depth_context_unresolved:contributor-scan:8146eab0359ca0b822353b632ced69bf09fd449704cdf7c6f84440d7ca784cef", + "dynamic_external_or_depth_context_unresolved:contributor-scan:ec7c01083f1fcb35c35244172a005b3eabebff9c0fd1dcfb4372268f82fb3894", + "dynamic_external_or_depth_context_unresolved:contributor-scan:ca89f1fd26f88f845f394fce84527e83c6a4cc8252f30d6787e7c5ac13e119a9", + "dynamic_external_or_depth_context_unresolved:contributor-scan:c3b4d527dc5c4ed121a487d5e4e3aa868df773ef3b04200802f9a306bf67c730", + "dynamic_external_or_depth_context_unresolved:contributor-scan:9e5735029a42e23af56c2cc802655bf46c55bfebf19f19810ac16cfa15fc688c", + "context_projection_unavailable:contributor-scan:ad133cc1b1af014f3acdb5852f7efde5750b39eaba1978bd391f0e620de02e54", + "context_projection_unavailable:contributor-scan:4af613e520506104185fc529b07037168b79165ec93e37331dd01f306307a9b7", + "context_projection_unavailable:contributor-scan:103fa19cc7adb309027f4eafd56cee2c11875358bb4d8d8dd2bbc2f3fe698bb9", + "dynamic_external_or_depth_context_unresolved:contributor-scan:ede21fac9950f370f23f2a674f795bc7b2eea5c4609ee32fa64d4239218b3d98", + "dynamic_external_or_depth_context_unresolved:contributor-scan:5b6014bebeefd652030b6f79d14252c51a6f1159a2b37bccdcd3e515e0ae27b9", + "dynamic_external_or_depth_context_unresolved:contributor-scan:dda18f566e40a3b6e882b5f35ed04328ef8288094d8151bcad76a8c228454f6d", + "dynamic_external_or_depth_context_unresolved:contributor-scan:bb06814f937b8f4fd23622931286468bccb770a49112c94b23f06e97ffb7aa05", + "dynamic_external_or_depth_context_unresolved:contributor-scan:9c629de1ccf91a807ae4d7c296108a9ec7880c1cd278e0da344061d329755c14", + "context_projection_unavailable:contributor-scan:eaa4fc381ad8dd4a49b66bbe7ccb050b2ed8735ec0d5eaee4f555fce0ff39a8c", + "context_projection_unavailable:contributor-scan:68a35789d8aa7b4f5293eb06988118bf39be4f0354e6dd89674da130c4ff7911", + "dynamic_external_or_depth_context_unresolved:contributor-scan:3c9cfda0c903ea8e97a9bdc2966dff555df6580479782ced9ea934837e3bdb5c", + "dynamic_external_or_depth_context_unresolved:contributor-scan:4367699c5a75ef7a22a52ca8d1b77e15ae6c8c18b2ec5fa929d688281ff34edb", + "dynamic_external_or_depth_context_unresolved:contributor-scan:f020689fd3ee8e3f51d12f177d80fb80aba8d3435a9f58e63cf4caadc02eca10", + "dynamic_external_or_depth_context_unresolved:contributor-scan:06f7107e12e2f2c7151d2c38ca31adcd8690e7dcab4537b37183561a9306208c", + "dynamic_external_or_depth_context_unresolved:contributor-scan:2f8516c90c01cfb4bd29a3b8ad1b61280436a37804b24929327cb41d8eac39aa", + "context_projection_unavailable:contributor-scan:10662bded3a99140e896de3673635e5d946b0536db96643d0b4c621d7d68f56b", + "context_projection_unavailable:contributor-scan:06b6066af41823461a0773a4018a93e9e7dcd71afd31331e5fa650b4fd1ac2ce", + "dynamic_external_or_depth_context_unresolved:contributor-scan:eca317877601cc31ae62fbd401aaae05a95ba092256beae0a69f90f42031dd40", + "dynamic_external_or_depth_context_unresolved:contributor-scan:040ab49439c03cee7663bd46349400cb389c480732f583aacabd8aa2281ac141", + "dynamic_external_or_depth_context_unresolved:contributor-scan:9d64998ae03ac69c2d6157548cf8f59eaf0ce08f10059bdf50ff8aae62dedfc8", + "dynamic_external_or_depth_context_unresolved:contributor-scan:104e0c71e792ced34e2811d7ec98f691d0740d260a8479c5e352e6d6185581ae", + "dynamic_external_or_depth_context_unresolved:contributor-scan:09d6c766aafeb3164a7a719920d7f9b871deaa9dc84691e8073f0db23975da39", + "context_projection_unavailable:contributor-scan:5be16077f567b7bf0034e61bcfc0311887588c95ce57c0e2fb430dfeebb93736", + "context_projection_unavailable:contributor-scan:ad205a52efc99c249042c9a2a85f6e39a89ca00a1bbbdac176bcbbd2f6ac6418", + "dynamic_external_or_depth_context_unresolved:contributor-scan:41414f5074402bc65ab7cede304c467ea56456ccc4d5a99f74dbf698ec80a014", + "dynamic_external_or_depth_context_unresolved:contributor-scan:f0a24dbc494b779606b3fae942042ebb6e42d77cf188d81f5e0895215f24d975", + "dynamic_external_or_depth_context_unresolved:contributor-scan:ed67e0034372067628553cac0f55d69935203f102d2eae5bccf3e9fd6f8bddee", + "dynamic_external_or_depth_context_unresolved:contributor-scan:1544c144771491cd8bb6c79ebb199070189032a209a17ae0f5df17d95e0a48e5", + "dynamic_external_or_depth_context_unresolved:contributor-scan:e2fdafc580819c643c0a89d3ee89d934d4131d06f288295e946b93824e098863", + "context_projection_unavailable:contributor-scan:6b16af8419f1b67c3d8176c2e2b6adf5ad345d84c797d4621c883d12c5881eed", + "context_projection_unavailable:contributor-scan:6101922fcf4599ad00260237e8b14904716156d58a25c638578de9775f6546c4", + "dynamic_external_or_depth_context_unresolved:contributor-scan:0211764bef038cb43a5c8b4e4e1c2189e29c63acc195a8f18f5f52abb6c2d896", + "dynamic_external_or_depth_context_unresolved:contributor-scan:9fdd3d266a5a068ee069bc4df1c9ad13f5dc11503fe9730fc069dce86d2d0cc5", + "dynamic_external_or_depth_context_unresolved:contributor-scan:501185fcc47f5bc79f11c17aeb48f6a069298e4538f48c2335f5a5cb18d3d4f7", + "dynamic_external_or_depth_context_unresolved:contributor-scan:9039f3d010b09f603ec640edceb7861a36dab4b82364c69a208040c3ede48f17", + "dynamic_external_or_depth_context_unresolved:contributor-scan:751f234599524ba682a48181293f9f24bbfded0b905db1400c4d66e287ae6470", + "context_projection_unavailable:contributor-scan:c739f4bf1f227963dbdc0ba653351d9b1755ac4b30e4e1fc29a552d1763752c8", + "context_projection_unavailable:contributor-scan:8e3b632fbec986c803e343ccfb4c8a13c03b04f6212cbe161efe5d5976eb71d1", + "dynamic_external_or_depth_context_unresolved:contributor-scan:1d20996dfd8ac9c5cd8de5ece58b61abc6e482999a720d8fc6cab8017adfde73", + "dynamic_external_or_depth_context_unresolved:contributor-scan:74468a7e1be2e9c78afffcbe10b6673e7522120d6679186fd21614fb8d3260fa", + "dynamic_external_or_depth_context_unresolved:contributor-scan:e47b686632ca64ef9e44b6da170481087bddae257940e54aeaf807b18edb4120", + "dynamic_external_or_depth_context_unresolved:contributor-scan:23f33513eef75806f25e55dfadf2e09727569c6c57dd020b686cef0c9a6e8324", + "dynamic_external_or_depth_context_unresolved:contributor-scan:8d59bb2bc1e8a2546b70e875ed5138dfab8f5209888877a7090294b3ba3e8adc", + "context_projection_unavailable:contributor-scan:92bc28c793c6cf7200794bdbb5c3c821fa205ed1b4b06fcbda8d0124d28e3136", + "context_projection_unavailable:contributor-scan:cc61018d326cd22a23b07c05db51cfb87618046132d4bedca206cdafa063a20a", + "dynamic_external_or_depth_context_unresolved:contributor-scan:b370ee273c4fcdb5bde8fb9ef6ddfd45406447ce19c748e418de854c2f0362e3", + "dynamic_external_or_depth_context_unresolved:contributor-scan:6152c270f83886cf3f5761812c6d8eece4cac8c348230c9b42dd271d1e3f1aba", + "dynamic_external_or_depth_context_unresolved:contributor-scan:2a9b0d00fb1eb5564fd96a8c1369f9f8e1d32b947cb59a334d47b32c6d963897", + "dynamic_external_or_depth_context_unresolved:contributor-scan:384c35175bd92ed2c097eebdfa72395a309acb7aa60c390ec3eb66773b661d6e", + "dynamic_external_or_depth_context_unresolved:contributor-scan:573e038e86e51ae46e5a7992fa652fb4b92632a7065260e12c46d1fd6effefb6", + "context_projection_unavailable:contributor-scan:005be3a45b8fe905f0d1a63f1306ccc4eab8191d20f6f5a805f4754c20ef2daa", + "context_projection_unavailable:contributor-scan:9a60982d54be5edfd5af1bd9f7d25dca0be74e77d5eeb6eaf37dcfe06cee188e", + "dynamic_external_or_depth_context_unresolved:contributor-scan:676257a1528797108e3a5fe031627338e9f09b44297e33aa1463cf46e5bf7db3", + "dynamic_external_or_depth_context_unresolved:contributor-scan:e7a241cb0337b1b02a56acabcd77baa1363feda4f01cda38d460822da991e3bf", + "dynamic_external_or_depth_context_unresolved:contributor-scan:7ac458257132ccc040a84b03c9fb7b9ca4fbe0579e7d3428f584da04b5b33527", + "dynamic_external_or_depth_context_unresolved:contributor-scan:cff2be050d602ec4623227bfe5d17c81c6b4da11e8c00ad7f7ca7d4c6acc878d", + "dynamic_external_or_depth_context_unresolved:contributor-scan:c07b292e4500a3ff9845bb55d6d69eae602d939e7681ae5d65effe80db4626b6", + "context_projection_unavailable:contributor-scan:47136ecffbadd0a856d93adf53a2e2b675403386663bbe766bec37d313c87a10", + "context_projection_unavailable:contributor-scan:eb1bacbee5fd2a2b50535a70ed300e93b90491d7d3d29d2f1f8bc5ecde0d7839", + "dynamic_external_or_depth_context_unresolved:contributor-scan:15e2db68968bb0000bda5bb3747451926355e9cd63db122bec12a53fb15da9e1", + "dynamic_external_or_depth_context_unresolved:contributor-scan:1ae6a3722ce9c193df69b1b8a37aa086ec323283628290f7298871676d3c4cba", + "dynamic_external_or_depth_context_unresolved:contributor-scan:65477882f5794c720233a98e1e383d91deb070f0c2bceb95a5efe7008f854cb5", + "dynamic_external_or_depth_context_unresolved:contributor-scan:2a630b24aeaeeef20baede1abed05cc9c45794561239f64c6bc291afb4b16120", + "dynamic_external_or_depth_context_unresolved:contributor-scan:70beda84b736a344f503b4e25e0e4a426f31d7041d283aab464026dfb9714457", + "context_projection_unavailable:contributor-scan:591cd0ffc4b3b51cff8621ab1458a478c0a0f57305f0551e9e5396dbe8f7d349", + "context_projection_unavailable:contributor-scan:53625b2b7fcffc9568152e6b6d95472fe850ed163ab341044a0754334cf22e34", + "dynamic_external_or_depth_context_unresolved:contributor-scan:5751606d1ed8891eae9bd10c5676a54ec196b36b00f9b7d3aa9ab0ab04b5cc25", + "dynamic_external_or_depth_context_unresolved:contributor-scan:f9f8ac5616f2d1864a6599bafb5f2e6bbc7fba72d6aa23d9ea1e0096de9d4164", + "dynamic_external_or_depth_context_unresolved:contributor-scan:56241bac3d18e635913ae9db5fac9cdde4e28d74795a1ca77227354d8d38fe1a", + "dynamic_external_or_depth_context_unresolved:contributor-scan:e01cbe3312394d636a19003923a0ff3eea7f8d2e1d6b42f94777655add3fe9ee", + "dynamic_external_or_depth_context_unresolved:contributor-scan:d08709244798a43e91f24367176899d90f8678813ec8b822163c67e1740f89c2", + "context_projection_unavailable:contributor-scan:7571cf1e503d83dd0c915f69b8365e94a1b37aaf98a37d08d4b90e2a3675220f", + "context_projection_unavailable:contributor-scan:f43f4e2cf5990ca47a833947b671586123e6e73a57d4305a9b813a8ed0d2fb8f", + "dynamic_external_or_depth_context_unresolved:contributor-scan:12bd6bd6659343e3dd9e6666572c55724a0a9e6990b890b556fe662db9d062e5", + "dynamic_external_or_depth_context_unresolved:contributor-scan:9ae85f24c4abea079e0223f9f05355dcaf5fbb396291c96d5c3b016099e84bbe", + "dynamic_external_or_depth_context_unresolved:contributor-scan:495097c042dc6319f9f6480ad049016f113b9c5cfc6d612e04aad56934b919eb", + "dynamic_external_or_depth_context_unresolved:contributor-scan:4eaa8cc1bf14b329db1097395c1a5ecd0f6fdf5a5de76db7f0339ab9b2c491e4", + "dynamic_external_or_depth_context_unresolved:contributor-scan:9d9f56a74cd94f45656c40e09823308aed0b4c9e745203cd5950138713026939", + "context_projection_unavailable:contributor-scan:40797ecc115fee18a4608c9efa1ffeb81c2ee1c4842561ef61fcf7076f1ffedd", + "context_projection_unavailable:contributor-scan:11cd767ae016d95635cbdfe08538b9347337d6b0847d12697075584b8d0619f1", + "dynamic_external_or_depth_context_unresolved:contributor-scan:71cb92eeba1ac9e0112a7cf621767729fb77eca209140f248c04f3ca1b0918f8", + "dynamic_external_or_depth_context_unresolved:contributor-scan:e44a0c43a95543503268b2378dfa0c9161c522c62bee65fa4f4a238875c64b7e", + "dynamic_external_or_depth_context_unresolved:contributor-scan:8715cacf99e5b7a106cda39fd2b6c96c2e5022974b0f66de7d6a15ed2aaf4eed", + "dynamic_external_or_depth_context_unresolved:contributor-scan:35bb68dde977abf2784e33d1bf3052893a358a43a8b258bea6a7318b1dd4a310", + "dynamic_external_or_depth_context_unresolved:contributor-scan:b5bb928fb28bf9699bfbabc626fc279a9ebd1ce6b63c993ddeda7b9eb2f8cf27", + "context_projection_unavailable:contributor-scan:3fc619d1072c86c3df178b90349411bfed86c49dc777f030f2d27e3100394b00", + "context_projection_unavailable:contributor-scan:05ede74d5dcb911b02053a895751f92ae86743298c8c6d8c5811de191cd4e5d0", + "dynamic_external_or_depth_context_unresolved:contributor-scan:18ad4372b90d74e60d68a00e4586b0767c060f9c522d2016c515cc5754eeb06b", + "dynamic_external_or_depth_context_unresolved:contributor-scan:595447850210071d76266dff3f9ceb530f5fbdf38c9940011abb9b96820f69d0", + "dynamic_external_or_depth_context_unresolved:contributor-scan:3c80c4cfbea01760facf853c328821cbfa9635adf55a650b92fc41bcfb19c8f5", + "dynamic_external_or_depth_context_unresolved:contributor-scan:e4feca4d382344176e8ac45592711e4472f76e0667867d469c65ccb5be2c7a19", + "dynamic_external_or_depth_context_unresolved:contributor-scan:7d0b37fb8ac67f6752e21869e57ed1d8b08be8517ca53ac2835cd2295df094ed", + "context_projection_unavailable:contributor-scan:a562474ca19fd4d4ec052396b656b092e82be7b1c002746f631cd9fb68b39ff3", + "context_projection_unavailable:contributor-scan:22e26415a3768b1b12cfb9469b912d359d0804761ee7f1d02d281600373dc8a4", + "dynamic_external_or_depth_context_unresolved:contributor-scan:03548d772fd2a4030a9f595257333eb9b323f1057a2a0399ed15efea113e719d", + "dynamic_external_or_depth_context_unresolved:contributor-scan:0f5f635e19864fbd276fd3eb0b6460f86274e6bc52533594879fcc42c02e4df5", + "dynamic_external_or_depth_context_unresolved:contributor-scan:f95e55b8ae987f7c4b11837ddaa8dac8bed46541f6d8c12633b46fe915b41824", + "dynamic_external_or_depth_context_unresolved:contributor-scan:e77b04a213011bc3e9812f81c2d1266be1234ff91a72d347b71017e8ea09f4e4", + "dynamic_external_or_depth_context_unresolved:contributor-scan:f7ab6f0b570873d6b99c3fc33ab556f093d7f5e4991eac884d3e766a2c29b326", + "context_projection_unavailable:contributor-scan:6ad6e59fa1a92132e095463bdbb461598c80b45af85ff453a6450b59b61d10cc", + "context_projection_unavailable:contributor-scan:c2b3c06e92fa87731137f871b9dd0f867fc53156a80bbf00da955cf5bfe0fe7e", + "dynamic_external_or_depth_context_unresolved:contributor-scan:b7b9b9cb1194740a47fa214266a43fdb70019fa1308009589d38f2c7662aa4b3", + "dynamic_external_or_depth_context_unresolved:contributor-scan:4d3ed9000a9b5806a0ed641e2739166e3df18ffa1925ee396fbe25d29e332c71", + "dynamic_external_or_depth_context_unresolved:contributor-scan:bce9e3fb76d6276772f1f279260ddb2f673a4a45a08f13fbc75343d20c0ad4ad", + "dynamic_external_or_depth_context_unresolved:contributor-scan:f0aa35455461c8f75dd8ca533e03dd43ea339a7026f07407ef26b12c3fe6f44a", + "dynamic_external_or_depth_context_unresolved:contributor-scan:64c0f7e52fb34476d5e47478ff354845a776dd781a2044963cae3191bb18058b", + "context_projection_unavailable:contributor-scan:9f9eb159649a2e07879e36c4f5eb5bbb38e337540c4b295adb4b59ca31e2a868", + "context_projection_unavailable:contributor-scan:bfba8296d9252a696a7f8262a80b63019fd89fb866e3d3daab087101c9d7ebd2", + "context_scope_empty:contributor-scan:6b6bc1f8b05dab47833d180de1fc7b40d8637a213c87af02f19bfac2f9439869", + "context_scope_empty:contributor-scan:72261efc87c3f66bd420e106d6e04235b2d6a7b4c59ceb5a235dbfbf31d02f29", + "context_scope_empty:contributor-scan:94e30a15524e236d04ae2f0238a72c0b446a48b7b4302471ad6703861948025a", + "context_scope_empty:contributor-scan:fa59397c0eb909b5b269278b706ba8432004d786cc8431db1e27fdf9614211bf", + "context_scope_empty:contributor-scan:a65d452c03e7a0e7bfc77d9337f0c3f6cc47449979963ca1173f45c619b7b812", + "context_projection_unavailable:contributor-scan:135f8cdcca313308bc5456466706c561652768149ff61e93f241b383c07448e8", + "context_projection_unavailable:contributor-scan:d029880ad27458bf1d443088b6afe399af206a9f412fd8406769198f304e64f5", + "context_scope_empty:contributor-scan:2ae591e30078f1e045b446004067a4734acda37a9673dbac82bca972cb5f8c2b", + "context_scope_empty:contributor-scan:b35cc9123b9c6316f72cdbfcd7945157215622625141e56543a4093c0c553013", + "context_scope_empty:contributor-scan:c8d88ff3a98aaa4eba3756a5f0b89cdeeeda10e5180f5eee0d3ae2b7dd042cdb", + "context_scope_empty:contributor-scan:f06f0c86aa4079e5d3ac48ffa9b50661a0bd2f4c315190b26f13664de494c9d9", + "context_scope_empty:contributor-scan:627afe91ac03ff52d178f64eb23d372523f86fb34fcc0ca0dade6786c38f0dbc", + "context_projection_unavailable:contributor-scan:ccab701536e7f9615e52f4b1a1c68a2416263ad8de279372ce248fed5d7868ed", + "context_projection_unavailable:contributor-scan:bb71e211e99f3dbe040a15b22eb7e004da953ca61b700ca3d1c94764cb6bb80f", + "context_scope_empty:contributor-scan:d799a15d3d810c39c4a519c59843bbb6c2617f559f8ebdefe801296e0819149a", + "context_scope_empty:contributor-scan:d6a24a60b3cec846b01cb2c3a1535ee2ab834a09e935abe70ede278ecb1ef045", + "context_scope_empty:contributor-scan:d1cae428bb382d9cc38acac1c7bb8a5e6142a46f5b0e6e2ddb1609b0acc66f68", + "context_scope_empty:contributor-scan:c46c90f66921363f974dcf82aaf3b3410222ec081abe097417dd1a1accb372b4", + "context_scope_empty:contributor-scan:5630ea72ee47272cdf5f9e3d1df3aeb499c357880ad49b26cff1cebcbbaaaeed", + "context_projection_unavailable:contributor-scan:013a84070826e011c0b19953b3493276e98498b3837618303aff28475b38eb2c", + "context_projection_unavailable:contributor-scan:c158a154e2b9394ee661d2f982e93af8d59543bb7da5c8d2c8e9c65905384d4a", + "context_scope_empty:contributor-scan:a0423c87fb8581f1897c9a0c774c3881ba8775e05f6cd88408cee05d126ac52a", + "context_scope_empty:contributor-scan:7e9c5dc7bc705ee6825fcebe23ba885a4be30b318195ec89e9a19b450bff86fb", + "context_scope_empty:contributor-scan:c6c5a131a84fabe329dc50128240b463b18a4ea0af2d036bcc02d869ec57fa7b", + "context_scope_empty:contributor-scan:ffe9fe5d19fd7233e88869bdd2f6fe00785a9b15d074a3f8b171a03121ba64b0", + "context_scope_empty:contributor-scan:324cdf414ea58e6d9496c28b138b43bb18cd6e983fb7678aef960670a51dc93c", + "context_projection_unavailable:contributor-scan:fb3bd242d8f9801589ca53c24a1b36b88ee1e6b8932ddb6a5d3bb7b3019556be", + "context_projection_unavailable:contributor-scan:5784aa43502be5cfa00e65ed1800bc86cea1b83db7b99737a92e3059c0aedb51", + "context_scope_empty:contributor-scan:e05d1e4da035294fb1b5185492276e323b43a33c173dd05390edee2726f82f60", + "context_scope_empty:contributor-scan:480a6f9e635cdb839e9ed2fab13d22291dff3c92ae99e1bf514439b370480f24", + "context_scope_empty:contributor-scan:acc5d491964faf3f4858dce3bfe338199f9b5469c1ad33e64c2f0bfad2f0263e", + "context_scope_empty:contributor-scan:e14724d931f179f9298c723043307a99153207ec425d4fae28f78becba7c0a9f", + "context_scope_empty:contributor-scan:756d4aea97736b83d6904a6d96d22e8026d24796d64d6806c2fcc478272c16bc", + "context_projection_unavailable:contributor-scan:8fc292a32ac35211b4747151ed7797cdcc9cf7edca0ea697f9cd9ca9eb2bf906", + "context_projection_unavailable:contributor-scan:0434560a038fb3a29aaeae6531b7190a9a993f75cebecbde4dbc5d9f248c16b9", + "context_scope_empty:contributor-scan:5c7e3540a665e15247dc85c88bc06f2514da2cd85010ec820cc53548ac751009", + "context_scope_empty:contributor-scan:074e2d12c8900202ecd6b02df395375ee6343d1c04c22982c214e74d38fdf51f", + "context_scope_empty:contributor-scan:cf2f20c22b8acc270d75b060b45b3725d2a4a0bc4dc33adc9feeec336fa84f31", + "context_scope_empty:contributor-scan:bb67a42d62cb5389aeb41a0e18d26046ab4f20feae70cba114ddffd5995ac3e8", + "context_scope_empty:contributor-scan:ad9733cd531deb592afd4650ebd20d8c967ea49693d2954151a70f4a4edb68df", + "context_projection_unavailable:contributor-scan:572f510d0485395c2ff610cd031d238c3745f79fe98a8f9fef5b042c24e57b69", + "context_projection_unavailable:contributor-scan:0ae9ac017e10c4d6256d41b99b5e771d7e8acf05bc1087acb58148a8ea2e8c5b", + "context_scope_empty:contributor-scan:691315c9798b266ce8aaff0a6368a80e40c685c1a8e3a54fe139131f4d6da7a7", + "context_scope_empty:contributor-scan:aee4c8330dd8ef28010fdaf243964d48dec427871626422da8d915843534755b", + "context_scope_empty:contributor-scan:57aa82c0185ff3d73d91dfcbc6bae9b5d438cf064ed0ea9489d6b5de7c3df531", + "context_scope_empty:contributor-scan:79ed0c8a9f7d6b06e75ef023d6ca5a32416a9c8fbd5a75fd97ea1c0e8f7a5a30", + "context_scope_empty:contributor-scan:23f9afb28b6b7349cbf502c2a6a1ffff117d2b3a974d8705b99fc8717108627b", + "context_projection_unavailable:contributor-scan:a6f0fe4aec662565f32d93874690023ebe09aea9a887b330e0c64a18e41dc966", + "context_projection_unavailable:contributor-scan:aa5a287a1749ab0ab4e4b56048c738b95df8f4b19a82378847a39ccb5eb42315", + "context_scope_empty:contributor-scan:09dff44163511e71b0fbf539655ece1940bd80039bc8743cc922699a37340b71", + "context_scope_empty:contributor-scan:567b6eaa4c3dabaccdfb44885a6a4cd345ce3ffc6a201265084c1818c0b84226", + "context_scope_empty:contributor-scan:881e7f1a45e2d7ebf74842b131573da24478db0c44ddaea50ca20007994387c0", + "context_scope_empty:contributor-scan:e9a98c513dc38db66988ce7ed9fe730df4ba5297f2495c77a54ad2aa9195b9e6", + "context_scope_empty:contributor-scan:f7484f28717752c36583df6d2167f9861bbf8368ac7f18b8a7c41ed41f301f37", + "context_projection_unavailable:contributor-scan:c0c4a04d19b7a5f1f33fff97f49a9d0245c4b14d24c3691cefbf46b76c064d7e", + "context_projection_unavailable:contributor-scan:2b86fe6715dd628b59d2303d2939369a6ebff338e7c9a3f41a5e76371e70d56b", + "context_scope_empty:contributor-scan:3663dbf64c23ffed29746c390953bb4c54f0f3154cc9fa65e7bf6acdf7249702", + "context_scope_empty:contributor-scan:8beedef6ba5098ea3567e7e9dd3ff36fa7ccf418f7a8dabc5cd1c8df83ac946e", + "context_scope_empty:contributor-scan:07ee5dd2f228e5d605f204a0e607fde140b169321c49486f64ef0ef3498defed", + "context_scope_empty:contributor-scan:34ca592cc7c4769ab6ab180436ace3d801b26463a0915b253459fbe8aacc7ce3", + "context_scope_empty:contributor-scan:2ee6a26bbed8f2554b909b310e8fbcafea825d9016c009fa785f34121053ae17", + "context_projection_unavailable:contributor-scan:6dd70277e9e05c3828bec89c4cc94f2b256eef50554fe78b7bc7805ba0c77d7d", + "context_projection_unavailable:contributor-scan:448a4023be7987eb4282a5534d6369f7e8ded7ddb3cc29c537a4e09ded04434a", + "context_scope_empty:contributor-scan:338e654fb02855abf17360c328f02986bf949d898b489ea7b9b29ce090fd1eeb", + "context_scope_empty:contributor-scan:bbd12c331fb019e0c84c5629c0b4945609328a196e3862f6f6dbadba31da81c9", + "context_scope_empty:contributor-scan:06ea156efb68bae0ec77525ddbd4eb18c1c97512cf524cdd7661286b48a2684a", + "context_scope_empty:contributor-scan:163b26e0bcc1ebc83d620624356e8a535ba4a3130af719e57a4dad9922d0ca1c", + "context_scope_empty:contributor-scan:ef7c18370144ac600fa593af56a8a849f7070b91261415e8e3cad6bcdadc80da", + "context_projection_unavailable:contributor-scan:f196cd68d51074be3989e323fc62287af695b781697b91b658003c825b426ce6", + "context_projection_unavailable:contributor-scan:a763fb136aa3978b7f47acb90aae2c6bb5715e8ca5ef1088d7856608c8807071", + "context_scope_empty:contributor-scan:5bdc9a08c76139479780eda09106fbec03bd5662c1817f14c0893abe4c22c798", + "context_scope_empty:contributor-scan:4d34d526ba5ee10314a8f6a74f7fedddbcf0ca79986c20a5127dbb08acfd6c43", + "context_scope_empty:contributor-scan:2c2899bd893f9611640844c56b404e5b91768151cb862ff497bb823c505d568a", + "context_scope_empty:contributor-scan:be30cb63922297543ed6c72314d3b6ec3d849d3c5d28fc3590ad44ebd82c4f0e", + "context_scope_empty:contributor-scan:28f1d0d25c8654cd762a439d6eb6f3a6896d37071f406d8edeeb4c20adee20ce", + "context_projection_unavailable:contributor-scan:f6a81369acf1c84e3cd6bf3399289323cb47848984a8c96800c0682fc1055a04", + "context_projection_unavailable:contributor-scan:94b9c4a91bfce96cbe773c203dfdf22d1b015231e91dd478399c2586be6a3e77", + "context_scope_empty:contributor-scan:526ce466755c525287df1a2adbdbdf566c896d79150b9bc7dbe65936e83abb30", + "context_scope_empty:contributor-scan:57dcaf9ddb9d8b054aa5dda6a0c9739439362e898cdf22aaf9f7338149f8cbd7", + "context_scope_empty:contributor-scan:064ff0d84035d834f9382eb8b4ad901fbeb4aa9fe816d7c36a34d56af41817bd", + "context_scope_empty:contributor-scan:d97343cdd389cd2ed9d0f1358d2bbddc2752053d95eab3e16e99423298a4371f", + "context_scope_empty:contributor-scan:f9deb31f0f9b98cad69111389734d43ed4fa86f24b05c9f2d48a78ea7a8708a3", + "context_projection_unavailable:contributor-scan:f962a89d04810a6c57abde4a8d3182d2a31c5d0f0ed3c37c053abea1fa223f31", + "context_projection_unavailable:contributor-scan:b62ac1b4b282eadf241f508bd5769bdd440b274f967d6ca73cb685ca249bd287", + "context_scope_empty:contributor-scan:57840b0da13c3f6f67e587689ab1eac913c17e91d493d1ce9ff089e8dccdfd29", + "context_scope_empty:contributor-scan:e3d1ce3b9de0fc9b48f2432d5e64947b5b24c3acaf1166f746bff1c54a028b9b", + "context_scope_empty:contributor-scan:d322db4b50c2c1bdbe0e22ef291070e20c93e0f7199c184f5ff8b4795b55cbe9", + "context_scope_empty:contributor-scan:88371d1acc9bc3b69c1d1957b27c9aefa3835be37bba74a359c35b1beaddc2f7", + "context_scope_empty:contributor-scan:3486da81fc55b7e285f23e85f44c481d780090285a384cfedaefa27265a236a8", + "context_projection_unavailable:contributor-scan:c87588b38d18fe9a5c563e2ae8d79649ce699607a891bd41b68194ce4507137d", + "context_projection_unavailable:contributor-scan:d6e3d356d491e5f3dbaca74cf11aef9bd751b36737feb34e466b707156b0d779", + "context_scope_empty:contributor-scan:843197ad039bb4e840b949b0ed1e5cf2230829366646a92ffc53d63e26149867", + "context_scope_empty:contributor-scan:b0766042c55d7c370799af987bed01fed8a417f83bc67e21d1366988aa1af10e", + "context_scope_empty:contributor-scan:b788ba22bd4225c24f95821dbf1f467dc2b13c7615b0bd2b00c3b234b7519539", + "context_scope_empty:contributor-scan:91430345496348280d29d11662aeb6048fd7596fc6304380b6154494df30d154", + "context_scope_empty:contributor-scan:8c1be7b4e8fd13181be0c4e46350a2f972e24acd13427e71c15e60dade41c28d", + "context_projection_unavailable:contributor-scan:f87a9ae1d7dc81f88c5891890b889aa7212e172ddec092182b7de6f01e787d7a", + "context_projection_unavailable:contributor-scan:b6a42fb01b464f31f65ebc10fbc12fccb051d8b44cac51a6818d3aedabea07f9", + "context_scope_empty:contributor-scan:4a820a780053b6f65492691e067e236adbd2a05b467e4e3f2ed37ba1260ce84f", + "context_scope_empty:contributor-scan:b07131192ab22510055930477ced5a10698278b2e00e3f711ebc202db640bee4", + "context_scope_empty:contributor-scan:5fbb00d9b2952ae4f0fed217bf2d8603872d8fc93073d99f31d8815539121987", + "context_scope_empty:contributor-scan:0bd48e207e95be86ea4e459c090a75c0adac8ca31bd2b631043854551b2c4392", + "context_scope_empty:contributor-scan:b11de5874aa62f939e383179c3ea1b34d3569ec6ade901964393b92f8325ad11", + "context_projection_unavailable:contributor-scan:8cd692618bec00fbbf099d570561201a2d0fdb601050fd20e198ead478530675", + "context_projection_unavailable:contributor-scan:19345b5fb5cecfc86e4db3cb8715cc7370e81796d70f11ba150a13c5ea8e4c37", + "context_scope_empty:contributor-scan:3ad0b3549b82f93ad869a9341397d394c1acee5e18d94a699b118094dd7a9a70", + "context_scope_empty:contributor-scan:32220b1bfe511b9dcec64d7ea8f4317e96b2d0cdc10bcfa55cfa3b63ce64aab6", + "context_scope_empty:contributor-scan:0cca9d955282f37dd60e764c56b52cbad90b33ec2c2943a7e5d155d35b0417fa", + "context_scope_empty:contributor-scan:40d00274aa5b28039b0d57d75a81f174c0a31e4be2d324ba79a64b79efd4e411", + "context_scope_empty:contributor-scan:319d00690097314e26638e2f4a6d848f50d1ff2f9d6f755a618eb31398ed373a", + "context_projection_unavailable:contributor-scan:dfa47fe83d195de69774c841747f6e7ea78d6d91297821dc9b8ee5fc625cfe2b", + "context_projection_unavailable:contributor-scan:5a497ad4d83218c29d4f22781a54d9e1927dc414f7cba6f89d794ed047f8b245", + "context_scope_empty:contributor-scan:1bd3f2289cc1bfa889496ca5074991941263703a2517281734f33d0ef1050f1a", + "context_scope_empty:contributor-scan:587a689c0312ac0f6d98de7495f01f34428cb128e73875a71508f7d5874415b4", + "context_scope_empty:contributor-scan:fc77f013f48b454d8703f25f76646f74b74c9e4f8e5d542bc5f48d98c6e51fae", + "context_scope_empty:contributor-scan:a2a7af80da34233233ec619dc29366b40a9e55ead63626db185524f2415761f5", + "context_scope_empty:contributor-scan:f180a77f032bfea9c7d152438ba830f19e1bfc88481a56b9e554c61d2cd64f6e", + "context_projection_unavailable:contributor-scan:cb70e9a1b44fa1f13f3bcc5290e6db5c8d6eda83602c9513e91e779ac6cddd3f", + "context_projection_unavailable:contributor-scan:74f543e29e519871aabcedb9d39c953d5397aac456c3c5e6eb0e10e517989eb3", + "context_scope_empty:contributor-scan:c983c339bc6881a1e6a0b2c6a794de858613b91318205a623dc61d80c2238036", + "context_scope_empty:contributor-scan:97c5314218bfb458e1fb6d1a33c9ac75c7de152774a736f6c5874657515ccfcb", + "context_scope_empty:contributor-scan:0744dea5a54614d094a6eb711ff7df94a180bfdeacaf330e31d9466cd51aeda2", + "context_scope_empty:contributor-scan:06dc1ba86d3fcb46096bed80d9c5c558f79a5a33f4fcdb379f1567b1271b64ab", + "context_scope_empty:contributor-scan:aa48541c8cce586b7a8c5e8ebe3cb607d1c283ef8940b7d4c7fb584327dd177f", + "context_projection_unavailable:contributor-scan:a9d086126128de76e0bafc06ca465176ed2884cb7ec963457fe106346b8094f9", + "context_projection_unavailable:contributor-scan:637323a350346cee17c66cda9b8b1be49d58350b0a0904bd61e5af20ce611df5", + "dynamic_external_or_depth_context_unresolved:contributor-scan:aa25524f30b8e84ef80b52064a75ca56cf438e67e2696e360d683c03e85c4c6f", + "dynamic_external_or_depth_context_unresolved:contributor-scan:9b5371eadea2bf5707f730896b4766a8b56012269f1c02c5df9d0df1d1cbf696", + "dynamic_external_or_depth_context_unresolved:contributor-scan:d527de43dc2dfdb271c213a927ab31c08b1f063298b211b6b11831a4dff51922", + "dynamic_external_or_depth_context_unresolved:contributor-scan:5ee4f0b0ba2c39e7071bba12da912c1ae213b8a2cee0bb437afa500328a237d4", + "dynamic_external_or_depth_context_unresolved:contributor-scan:43d3388ae21433a62d37d4c92861c125683f03a0edd9d1afaa56a42a7b793dc1", + "context_projection_unavailable:contributor-scan:cc8161804d4c84fe4c4f7210a16193637accc1f791b7fc7be026c07177b7da4c", + "context_projection_unavailable:contributor-scan:4bc68b77bfd52e96e8db4fb7293a6d4f396d234eb4dafb625df76bc8f1ba1c7d", + "dynamic_external_or_depth_context_unresolved:contributor-scan:a66e57d86751f21d11652bc991ffe476eacb638f38f95947b723ac9448c5f668", + "dynamic_external_or_depth_context_unresolved:contributor-scan:278e2e9a97727da969f8d122576dd475c43141146f984e3af997600a013f19bf", + "dynamic_external_or_depth_context_unresolved:contributor-scan:3152613ac0763b809bc99a50b728391cfe19d2cfeb27ff47a1e3671ed7526a3f", + "dynamic_external_or_depth_context_unresolved:contributor-scan:06168cf4f7850405f47bd8cfe013dc077b51457b355698ea3407f998cb561c2b", + "dynamic_external_or_depth_context_unresolved:contributor-scan:44620fe943880d4498587b283cf31a67b85fdeef53f59223299018c3666ae32b", + "context_projection_unavailable:contributor-scan:f553b646e7933b5f766d1187c3bb1aee241ea0734ec1c6addc08871c43bb7c64", + "context_projection_unavailable:contributor-scan:5f7e12488b0d469ffbaa32d1fa766352c8672ccd9e81f503480cec626d1f88b3", + "context_scope_empty:contributor-scan:86fed64323e502425165fd4b319a848da156ed4e1acbec6ac706b8f5afbdc1e9", + "context_scope_empty:contributor-scan:3273da703327df23094325bf9a120c3bbbc9388b4bbbec32a24b768f4d02669a", + "context_scope_empty:contributor-scan:cd57f10c8a3c69b40ea2832dc35837d8a7521f2a17b2936eccaab7d5bf482dd5", + "context_scope_empty:contributor-scan:fe62a9ab0e66c65344f94de1006ed30505bca06dcc7619ca717078a09afafb91", + "context_scope_empty:contributor-scan:f83f5339fbbb59939406f37a8053030f00333d809da78196e1dc177209fd0e70", + "context_projection_unavailable:contributor-scan:9cfce61b0d63c05676d62a7dac8c1362d78e2e686d6a8b53c56094bb2014ab96", + "context_projection_unavailable:contributor-scan:dd387d649e718c5d7cd9618fab6cf60bae452924f4e0b36b9b9ee9d4b9738ef8", + "dynamic_external_or_depth_context_unresolved:contributor-scan:b4e9704f8937686cd738c71fa7250b970fe64be89c75e36412cf4288e7911371", + "dynamic_external_or_depth_context_unresolved:contributor-scan:b2d3838be418d29c1ebf100d269591a89b6e74f81b822cff71d8a9d9548dea0c", + "dynamic_external_or_depth_context_unresolved:contributor-scan:e31733d8cd5174ecda373492fb9ed3f56fffdac8f869380c06ee9f185821918b", + "dynamic_external_or_depth_context_unresolved:contributor-scan:3c7b69a99d3765c95a713d27af4ac28d7808ca92543062610bdf24edd3643790", + "dynamic_external_or_depth_context_unresolved:contributor-scan:cd639186013fa4488043c42b05357e82425a3e889ac14679eef46b7388cecfd9", + "context_projection_unavailable:contributor-scan:b9195800d5bcce2e36a49a8f49f1674d9913dcb526cf50d1097ce4bea82407fe", + "context_projection_unavailable:contributor-scan:92d25db73aef0c89d7f6d45a21f56bf7c0b3854a0c8d19db7bc7247ed2244f78", + "context_scope_empty:contributor-scan:9eefbecbf32c98775e957013ff48c835781e52d91e576f81eec2c079bb61acd5", + "context_scope_empty:contributor-scan:9a71eba84ef99ab18d46121f3d387888c2ebd4054b85f3cc2fe90f8e75cb6538", + "context_scope_empty:contributor-scan:5fec8b431826e32ff8b6d3da66269f1e8561573bdbc8602f3fb20fd5e1bd8f44", + "context_scope_empty:contributor-scan:117d803b171807fb6ea627fb8eadd75abcb20606fc3acfea76def5897a986f35", + "context_scope_empty:contributor-scan:71a5b2e0b33d5bbb1ac73e6967b839cdfbea4de2fc828ec34ae8e40f8dfe96aa", + "context_projection_unavailable:contributor-scan:3175ca255e0323924a203bf8aa949691546196277c5976052ff0678a934fbffa", + "context_projection_unavailable:contributor-scan:7b355ea64f6dfd26a0ca7c433c31b1368e70d785f31c71caff4df6883245d409", + "dynamic_external_or_depth_context_unresolved:contributor-scan:3f00299f644f669c39db368d2a0df198f572ce9c8c08c85a94fd8c7db9cb5500", + "dynamic_external_or_depth_context_unresolved:contributor-scan:3e4b1620b66257264d51007170e6b0c49729b4731e3e1d236d188dc325ece52b", + "dynamic_external_or_depth_context_unresolved:contributor-scan:ef62a3e54636bc30ce5b75fb14e4753986000fed2eca3cb11aab716c88729f31", + "dynamic_external_or_depth_context_unresolved:contributor-scan:53635a42011bce8fec02af0d16ca0cf4b994332d1ce09551b99693a1ed59d247", + "dynamic_external_or_depth_context_unresolved:contributor-scan:0e4f65ec98ba41eedab3df06256eb227c558f31fee052a4266b3539f7af08275", + "context_projection_unavailable:contributor-scan:23a5e489bbb5740c0c685591e6b73a7096bb238cad11e8d7e84fc9f4b7f55207", + "context_scope_empty:contributor-scan:b92a8731fdc1bf7bd7bce4084892f87e4d9174acb204ee163cebebcfcae6a5d8", + "context_scope_empty:contributor-scan:2e55a819e3b67123ec2edfc304418d7fee50dae9c9b922c3a5d250d6f7c9662e", + "context_scope_empty:contributor-scan:3b6aa69186293835af4c700678ee9bb810de2ab8899c93cf245e01537742f5a1", + "context_scope_empty:contributor-scan:2377ef08168881eba6f35e080a5fed4608aa733dc9670f59d45ceee5ce08fa47", + "context_scope_empty:contributor-scan:2f26d70299414d84d00c95be2fd40758bce2e88a1fe89bedf898395894f501b9", + "context_projection_unavailable:contributor-scan:5c2048320f765e1756e7a743afa544a602d648311f4bb8495f3d43de0f8cea49", + "context_scope_empty:contributor-scan:e08780a749f547c02460053e2a258b64f89ad494c042171f2e8a426f3c9a0520", + "context_scope_empty:contributor-scan:97ae7d3c4e6969d04821c5ed50c21a914379c1a1b3b5e5dfd38b26438e249f2f", + "context_scope_empty:contributor-scan:6e181d25ef0f246585e55b5eb77c8e6191fb135af98e816b0abd841134bd5d57", + "context_scope_empty:contributor-scan:271afe681be4d6c7c09cf9b4010888525eb1efb66cc2501215894c15e2898519", + "context_scope_empty:contributor-scan:e8e670d05231f561f6a2ea1c1e08a560a96bb2674ac72851dc29da697ac169ca", + "context_projection_unavailable:contributor-scan:8726ea1166fc378ce1bc6bc99ba52e93416fb5d1fefd812ea29de503077d548f", + "context_scope_empty:contributor-scan:3cab3aa4cc41da609f367c1c57db872b8cfcb7b2f323516266bb3d8fa36642b4", + "context_scope_empty:contributor-scan:c5a186e0f17d7af521efa20982916fc813e1b7d05295c3da7730ef6b5a48cab7", + "context_scope_empty:contributor-scan:1738964f08db1fbe6b5965f7721be058d80a4e1ec976ac743059a5b31d6cd7a7", + "context_scope_empty:contributor-scan:7f10a07aaba3a86425dce315a22df012363cd11065229f983530e2156fd77442", + "context_scope_empty:contributor-scan:d97c168cb31e3390b66dc4f61020d70ef36ec9bdc679c2b64a79dfc648238207", + "context_projection_unavailable:contributor-scan:0db0f54012e0427209e8a7b14f787419a4a6cf8cfbfd7e985e34898c1dcc3b5b", + "dynamic_external_or_depth_context_unresolved:contributor-scan:82d9cb547ff915752dd430f4b91c03970ed3cc9e376a93aafea77e196cd1998b", + "dynamic_external_or_depth_context_unresolved:contributor-scan:88f50df0343fa95532cb3b9d60cba5cee24c7e245bccc8ea06d8803d43f99f75", + "dynamic_external_or_depth_context_unresolved:contributor-scan:525d6f86a91046bc79ec5e19e21eeb42edb94aa9c1a3a6ff669455aebbefdea1", + "dynamic_external_or_depth_context_unresolved:contributor-scan:a8387bac47d88608c9a58ab2916857b9fc2fd8a1d52fc5d16f79bb4ab8be40e4", + "dynamic_external_or_depth_context_unresolved:contributor-scan:57ea90041e625ad5368caca533f024381987b1afd81d092b28eed73f0c8c5499", + "context_projection_unavailable:contributor-scan:3eead9155ab4b5705fa08efb59ff16f1705d2eca4a8d707e4f633731bdccd8e5", + "dynamic_external_or_depth_context_unresolved:contributor-scan:e1d445eda8d84d9b3972b06b657c3be233a2c77a2cc146988c3d076b11b2f906", + "dynamic_external_or_depth_context_unresolved:contributor-scan:0e6a4376c4e70a27e5bd632511b761c70d8fe6776f93691d26262e169965152d", + "dynamic_external_or_depth_context_unresolved:contributor-scan:94df997fee522b612e12ed3596618cf27aa3a3109bb459f16eb6b6c136538295", + "dynamic_external_or_depth_context_unresolved:contributor-scan:6397f7955219931bf05a5b8407360c4b71ae62002aa273ed85db15276dcfb613", + "dynamic_external_or_depth_context_unresolved:contributor-scan:a3880c761ca9d0019b08cf255540fa495d5d69593e9bd73fa6eecb41dae42859", + "context_projection_unavailable:contributor-scan:33e09133f59de09d87866389533ef005fc2c34de8a4cd68ea1d528d3c6df4165", + "dynamic_external_or_depth_context_unresolved:contributor-scan:58ca35a7300e2d7edd5acee6de464da5593d81380aff9e99fad2bd1d8c0dee68", + "dynamic_external_or_depth_context_unresolved:contributor-scan:2d8220d8b7f51f9f1082d903f592ff051faa4c37a46fc131c31da1dd2a233ed0", + "dynamic_external_or_depth_context_unresolved:contributor-scan:0148345468c538297511e912438b1ff6f0bcc70d8058f87ff70b5f944946395f", + "dynamic_external_or_depth_context_unresolved:contributor-scan:cebf3f7bf74150ce4fbddbc693fd6881a8d18aacbb54b8e33097580fb330e273", + "dynamic_external_or_depth_context_unresolved:contributor-scan:b8213e35bb6cffbddb211df8497d7c37f33a800f3a729846b041155c2f82c7d0", + "context_projection_unavailable:contributor-scan:33c0d02c59cebf05005b834b6354b9d11184238c087a253b86e5479209a57d61", + "dynamic_external_or_depth_context_unresolved:contributor-scan:cfa8f4a6860419485b27245e5f66228003a0f4fce6797dc9e7fb5d938bb61100", + "dynamic_external_or_depth_context_unresolved:contributor-scan:633e780f4bf491dd0635d773334d7d2ca15a670d0d78681871dd88d77a2132e7", + "dynamic_external_or_depth_context_unresolved:contributor-scan:0b51f52c0d43beecb81fb62c82a17850a11aa6faab7527ea4833efffb0b4a8c4", + "dynamic_external_or_depth_context_unresolved:contributor-scan:c295b4b3d54eb3f602e5b7b6f302dd9c66cad44282af938a158887a4b64e6400", + "dynamic_external_or_depth_context_unresolved:contributor-scan:a9979735925dbdc75c01667c69443c96f645e530ca0fbb182c1d515093799d43", + "context_projection_unavailable:contributor-scan:9fffb2f1348a76b735b269ce0961460b780c22882cf471ae5f1c1fafea3ae48f", + "dynamic_external_or_depth_context_unresolved:contributor-scan:d06f59868c9200c0d32396ee176a3260ba3940e0fef382b1edeb189030ab043a", + "dynamic_external_or_depth_context_unresolved:contributor-scan:44110d2cf36273a7c292ad5a9fc73bfa40d5de4b0188a8bd5d28f6439e078ef7", + "dynamic_external_or_depth_context_unresolved:contributor-scan:7fffb43180730947e0ce0f17899806d2998df9a70c9f9850a0bf0d5ab97da3f8", + "dynamic_external_or_depth_context_unresolved:contributor-scan:93b7d5e9121a06853fd8e0b65a846bf7497ec5c9e769db2f721ce40770a5ad8b", + "dynamic_external_or_depth_context_unresolved:contributor-scan:e3c15c181160b97750a748f9b1ef062574f0899d602333c7c543efe7be6687c6", + "context_projection_unavailable:contributor-scan:483fc4310a9c5e101c6e1592299caba75d191c524516cf48094705cacaaffa1c", + "context_projection_unavailable:contributor-scan:88260afe57f54f14752828d92501cd736bd27ff95389912283e88faa97a75269", + "context_projection_unavailable:contributor-scan:529b7bf7e34de1f5689bba72a58407f3731bd2cee8af78a53dbd15497faf9d40", + "dynamic_external_or_depth_context_unresolved:contributor-scan:d5066d261ad12b1f8692fbfc1876a6d30837395cbb121351d9ba61cf1b20cea1", + "dynamic_external_or_depth_context_unresolved:contributor-scan:b0f968a432800d13c601c7520bb36cc9ba52b24e2a09109fecc34cbfecdbe9ea", + "dynamic_external_or_depth_context_unresolved:contributor-scan:f82bb8ca1a7fd8998886a8fe8f00084f108125394b9621c6cd19d92f23fd8c3d", + "dynamic_external_or_depth_context_unresolved:contributor-scan:53df3ed8b2dd7c46d8c42882a6096bccf1d6c966cbef8158b45f4390085a00c0", + "dynamic_external_or_depth_context_unresolved:contributor-scan:117aa85101fd69718713ffd12a7b4cbaa9bceb86cb52731e69ffb9ef83f80750", + "context_projection_unavailable:contributor-scan:40a86c0d81cb5654b51d4447a6e348a246decc7780581a9aa2d60c2f768e1de7", + "context_projection_unavailable:contributor-scan:378243809750b9f1750d2d1f0f9204ca18d490e7458afff003f86c8cbb255dbc", + "dynamic_external_or_depth_context_unresolved:contributor-scan:90565ee1486201dcb600733c58934abb476fb873581c0e3dae8aff2ea1ebfe5b", + "dynamic_external_or_depth_context_unresolved:contributor-scan:f5dfb739730436eef0a9ed0f8c1c7b982469df5d6c042d321de52ace8d3a2c15", + "dynamic_external_or_depth_context_unresolved:contributor-scan:34c56c75a6772748996ada2bb9f2ed985d65a7c6de0087e220f45285846cbb73", + "dynamic_external_or_depth_context_unresolved:contributor-scan:42fad701f64b0f289a69aab6d432cf25ea365f4966a478216977ccbd5e25c19b", + "dynamic_external_or_depth_context_unresolved:contributor-scan:ebf4109ffcd719505b5871ad734ed07d7d1718a173977d31106050ae7bef2ff1", + "context_projection_unavailable:contributor-scan:df543c94ec4b21c6fb74b805b76a1f3c855d222faa8599c060f8c85020e320f5", + "context_projection_unavailable:contributor-scan:ce720073f337bb4893fa3a3b1e2f8e86696e5179617000f4f47cb343922ddd3f", + "dynamic_external_or_depth_context_unresolved:contributor-scan:786a19bb3612b1d1110134aefbe6968e75bb3340fe8d3994fcbd0e905bffc18c", + "dynamic_external_or_depth_context_unresolved:contributor-scan:256345974cd78d13520d2e43ca98d1ca0d650baf88aaa6b8db75c80e6505b101", + "dynamic_external_or_depth_context_unresolved:contributor-scan:2648c4f69b677c285297aca3107a6770c0a4bc1689dde13e6b5b59e8af91940b", + "dynamic_external_or_depth_context_unresolved:contributor-scan:752195dc0695f44531be939deb0f9940a9eb5273117c7705768c2b5edd6a70e5", + "dynamic_external_or_depth_context_unresolved:contributor-scan:1e4da8e8647caba2f3b358ddd5c25936b46d87b9e118935597be60fa58c6ca4a", + "context_projection_unavailable:contributor-scan:6dbf2e32d098163480ab02a98344750fa5daafc7c66adf4fe90d0eaeeff4f86f", + "dynamic_external_or_depth_context_unresolved:contributor-scan:4e93b1d6b6d8ee75bf09aa1789933ef1248397e1e3df6ddf8af74eaa04d59c3c", + "dynamic_external_or_depth_context_unresolved:contributor-scan:6e8f38e9b80a674c58e2d85fb797e0357cd1414528a175f8e06a10b15455bc91", + "dynamic_external_or_depth_context_unresolved:contributor-scan:d397c5433f574c1a5f9d5c219c91131f3823694a50e04a6a2d896458b76f2e2d", + "dynamic_external_or_depth_context_unresolved:contributor-scan:f50cc41a1fbfe1a27916b010ce35aed4d7f2803e571225ea1382facd5a603139", + "dynamic_external_or_depth_context_unresolved:contributor-scan:f375dc182eb989bea2dfe5c2e26a351c3e2c2ea5c8f11447f34004c5c5ca2f27", + "context_projection_unavailable:contributor-scan:7171793b9c6db5102f6088265373a7c57778f18f440380255a390d5745113652", + "dynamic_external_or_depth_context_unresolved:contributor-scan:494461bfc7dcc180d454bacd79e12b4a12598e3cf2594b4a96001188df71f27c", + "dynamic_external_or_depth_context_unresolved:contributor-scan:4ccf4da37de3d59a491675a6cddcc6323deb914a8f458fe6bbd20f4ab824fa69", + "dynamic_external_or_depth_context_unresolved:contributor-scan:74d21ad3cac9cec15832b98239679ab6360d84ae3d2a36a3f02307d647e7719c", + "dynamic_external_or_depth_context_unresolved:contributor-scan:b7b45314da2fe600d6377531a57acfd3f5d44c2f0e8641d67f0c9288bab8a3ea", + "dynamic_external_or_depth_context_unresolved:contributor-scan:7e9025449366165d1e1a7a84b15c89acdb7220595af59d776716b7caf76b517a", + "vendor_semantics_unresolved", + "analysis_incomplete" + ], + "timings": { + "deadline_seconds": 900.0, + "cancellation_allowance_seconds": 2.0, + "resolution_seconds": 0.031178831937722862, + "provenance_seconds": 0.3384196620900184, + "snapshot_seconds": 0.9440918110776693, + "snapshot_reuses": 0, + "discovery_seconds": 0.023084845044650137, + "discovery_hits": 2, + "preparation_seconds": 0.9957156319869682, + "head_seconds": 67.97113974997774, + "base_seconds": 76.01799645589199, + "admission_seconds": 0.010093834018334746, + "recorded_vetoes_seconds": 7.553226158954203, + "cleanup_seconds": 0.010052168043330312, + "graph_hits": 2, + "query_hits": 872, + "total_seconds": 152.96391049190424 + }, + "fixed_twin_quiet": true + } + }, + { + "case_id": "nodegoat-benign", + "command": [ + "/venv/bin/python", + "-m", + "openultrasast.cli", + "pre-push", + "/results/m1a-2026-09-16/objects.git", + "--base", + "c5cb68a7084e4ae7dcc60e6a98768720a81841e8", + "--head", + "f772c59e5964c77812a6a89737eb54ed5371d30c", + "--artifact", + "/results/m1a-2026-09-16/nodegoat-benign.json", + "--deadline", + "900.0", + "--cancellation-allowance", + "2", + "--max-regions", + "500", + "--cache-dir", + "/results/m1a-2026-09-16/cache", + "--experimental-record-vetoes" + ], + "base_oid": "c5cb68a7084e4ae7dcc60e6a98768720a81841e8", + "head_oid": "f772c59e5964c77812a6a89737eb54ed5371d30c", + "exit_code": 0, + "elapsed_seconds": 261.44829541502986, + "terminal": "No actionable defects reported; analysis is incomplete.\nNotice: Some checks are not enabled for normal alerts. Review capability coverage in the details.\nExperimental: recorded-veto evaluation retained 4 raw finding(s) with 52 recorded veto(es) and 0 base-only finding(s) in the detailed result; recorded, not applied; not an alert.\nDetails: /results/m1a-2026-09-16/nodegoat-benign.json\n", + "artifact": "nodegoat-benign.json", + "provenance_matches_installed": true, + "outcome": { + "expected": "unchanged backlog: raw findings remain with recorded novelty unchanged, never new or worsened", + "expected_head_findings_at_target": 3, + "observed_head_findings_at_target": 3, + "target_questions_answered": true, + "target_question_outcomes": [ + { + "function": null, + "status": "unresolved", + "reason": "change_context_incomplete" + } + ], + "head_scan_completed": true, + "base_scan_present": true, + "production_finding_status": "none", + "production_coverage_status": "incomplete", + "recorded_status": "evaluated", + "recorded_target_findings": [ + { + "site": "app/routes/contributions.js:32:2", + "witness": "eval(req.body.preTax) -> const preTax = eval(req.body.preTax) in app/routes/contributions.js (line 32, 1 steps)", + "question_function": null, + "operation_method": "2", + "base_location": "app/routes/contributions.js:32", + "production": [ + "unknown", + "witness_identity_unresolved", + [ + "capability_unavailable", + "comparison_unknown", + "witness_unresolved", + "dependency_unresolved" + ] + ], + "recorded": [ + "unchanged", + "same_supported_mechanism", + [ + "capability_unavailable", + "unchanged", + "dependency_unresolved" + ] + ], + "vetoes": [ + { + "stage": "head_question", + "veto": "change_context_incomplete", + "detail": "6bb3ba6475ce8d11ff20924b69721387bb0d4bbce1b852e640403dbd750f0a8f status=unresolved rows=9", + "lifted": true + }, + { + "stage": "head_scan", + "veto": "ambiguous_line_correspondence", + "detail": "6170702f726f757465732f636f6e747269627574696f6e732e6a73:ambiguous_line_correspondence", + "lifted": true + }, + { + "stage": "head_scan", + "veto": "dynamic_external_or_depth_context_unresolved", + "detail": "dynamic_external_or_depth_context_unresolved:contributor-scan:6bb3ba6475ce8d11ff20924b69721387bb0d4bbce1b852e640403dbd750f0a8f", + "lifted": true + }, + { + "stage": "head_scan", + "veto": "vendor_semantics_unresolved", + "detail": "vendor_semantics_unresolved", + "lifted": true + }, + { + "stage": "head_scan", + "veto": "degradation:vendor_semantics_unresolved", + "detail": "{\"reason\": \"vendor_semantics_unresolved\", \"stage\": \"model\"}", + "lifted": true + }, + { + "stage": "identity", + "veto": "query_identity_differs_from_witness", + "detail": "question function=None; witness method='2'; recorded, not a policy veto", + "lifted": false + }, + { + "stage": "base_question", + "veto": "graph_incomplete", + "detail": "6bb3ba6475ce8d11ff20924b69721387bb0d4bbce1b852e640403dbd750f0a8f status=unresolved rows=9", + "lifted": true + }, + { + "stage": "base_scan", + "veto": "vendor_semantics_unresolved", + "detail": "vendor_semantics_unresolved", + "lifted": true + }, + { + "stage": "base_scan", + "veto": "degradation:vendor_semantics_unresolved", + "detail": "{\"reason\": \"vendor_semantics_unresolved\", \"stage\": \"model\"}", + "lifted": true + }, + { + "stage": "change_context", + "veto": "ambiguous_line_correspondence", + "detail": "6170702f726f757465732f636f6e747269627574696f6e732e6a73:ambiguous_line_correspondence", + "lifted": true + }, + { + "stage": "admission", + "veto": "capability_unavailable", + "detail": "no evaluated capability is enabled; the recorded-veto flag cannot enable one", + "lifted": false + }, + { + "stage": "admission", + "veto": "unchanged", + "detail": "production admission reason on the lifted candidate", + "lifted": false + }, + { + "stage": "admission", + "veto": "dependency_unresolved", + "detail": "production admission reason on the lifted candidate", + "lifted": false + } + ] + }, + { + "site": "app/routes/contributions.js:33:2", + "witness": "eval(req.body.afterTax) -> const afterTax = eval(req.body.afterTax) in app/routes/contributions.js (line 33, 1 steps)", + "question_function": null, + "operation_method": "2", + "base_location": "app/routes/contributions.js:33", + "production": [ + "unknown", + "witness_identity_unresolved", + [ + "capability_unavailable", + "comparison_unknown", + "witness_unresolved", + "dependency_unresolved" + ] + ], + "recorded": [ + "unchanged", + "same_supported_mechanism", + [ + "capability_unavailable", + "unchanged", + "dependency_unresolved" + ] + ], + "vetoes": [ + { + "stage": "head_question", + "veto": "change_context_incomplete", + "detail": "6bb3ba6475ce8d11ff20924b69721387bb0d4bbce1b852e640403dbd750f0a8f status=unresolved rows=9", + "lifted": true + }, + { + "stage": "head_scan", + "veto": "ambiguous_line_correspondence", + "detail": "6170702f726f757465732f636f6e747269627574696f6e732e6a73:ambiguous_line_correspondence", + "lifted": true + }, + { + "stage": "head_scan", + "veto": "dynamic_external_or_depth_context_unresolved", + "detail": "dynamic_external_or_depth_context_unresolved:contributor-scan:6bb3ba6475ce8d11ff20924b69721387bb0d4bbce1b852e640403dbd750f0a8f", + "lifted": true + }, + { + "stage": "head_scan", + "veto": "vendor_semantics_unresolved", + "detail": "vendor_semantics_unresolved", + "lifted": true + }, + { + "stage": "head_scan", + "veto": "degradation:vendor_semantics_unresolved", + "detail": "{\"reason\": \"vendor_semantics_unresolved\", \"stage\": \"model\"}", + "lifted": true + }, + { + "stage": "identity", + "veto": "query_identity_differs_from_witness", + "detail": "question function=None; witness method='2'; recorded, not a policy veto", + "lifted": false + }, + { + "stage": "base_question", + "veto": "graph_incomplete", + "detail": "6bb3ba6475ce8d11ff20924b69721387bb0d4bbce1b852e640403dbd750f0a8f status=unresolved rows=9", + "lifted": true + }, + { + "stage": "base_scan", + "veto": "vendor_semantics_unresolved", + "detail": "vendor_semantics_unresolved", + "lifted": true + }, + { + "stage": "base_scan", + "veto": "degradation:vendor_semantics_unresolved", + "detail": "{\"reason\": \"vendor_semantics_unresolved\", \"stage\": \"model\"}", + "lifted": true + }, + { + "stage": "change_context", + "veto": "ambiguous_line_correspondence", + "detail": "6170702f726f757465732f636f6e747269627574696f6e732e6a73:ambiguous_line_correspondence", + "lifted": true + }, + { + "stage": "admission", + "veto": "capability_unavailable", + "detail": "no evaluated capability is enabled; the recorded-veto flag cannot enable one", + "lifted": false + }, + { + "stage": "admission", + "veto": "unchanged", + "detail": "production admission reason on the lifted candidate", + "lifted": false + }, + { + "stage": "admission", + "veto": "dependency_unresolved", + "detail": "production admission reason on the lifted candidate", + "lifted": false + } + ] + }, + { + "site": "app/routes/contributions.js:34:2", + "witness": "eval(req.body.roth) -> const roth = eval(req.body.roth) in app/routes/contributions.js (line 34, 1 steps)", + "question_function": null, + "operation_method": "2", + "base_location": "app/routes/contributions.js:34", + "production": [ + "unknown", + "witness_identity_unresolved", + [ + "capability_unavailable", + "comparison_unknown", + "witness_unresolved", + "dependency_unresolved" + ] + ], + "recorded": [ + "unchanged", + "same_supported_mechanism", + [ + "capability_unavailable", + "unchanged", + "dependency_unresolved" + ] + ], + "vetoes": [ + { + "stage": "head_question", + "veto": "change_context_incomplete", + "detail": "6bb3ba6475ce8d11ff20924b69721387bb0d4bbce1b852e640403dbd750f0a8f status=unresolved rows=9", + "lifted": true + }, + { + "stage": "head_scan", + "veto": "ambiguous_line_correspondence", + "detail": "6170702f726f757465732f636f6e747269627574696f6e732e6a73:ambiguous_line_correspondence", + "lifted": true + }, + { + "stage": "head_scan", + "veto": "dynamic_external_or_depth_context_unresolved", + "detail": "dynamic_external_or_depth_context_unresolved:contributor-scan:6bb3ba6475ce8d11ff20924b69721387bb0d4bbce1b852e640403dbd750f0a8f", + "lifted": true + }, + { + "stage": "head_scan", + "veto": "vendor_semantics_unresolved", + "detail": "vendor_semantics_unresolved", + "lifted": true + }, + { + "stage": "head_scan", + "veto": "degradation:vendor_semantics_unresolved", + "detail": "{\"reason\": \"vendor_semantics_unresolved\", \"stage\": \"model\"}", + "lifted": true + }, + { + "stage": "identity", + "veto": "query_identity_differs_from_witness", + "detail": "question function=None; witness method='2'; recorded, not a policy veto", + "lifted": false + }, + { + "stage": "base_question", + "veto": "graph_incomplete", + "detail": "6bb3ba6475ce8d11ff20924b69721387bb0d4bbce1b852e640403dbd750f0a8f status=unresolved rows=9", + "lifted": true + }, + { + "stage": "base_scan", + "veto": "vendor_semantics_unresolved", + "detail": "vendor_semantics_unresolved", + "lifted": true + }, + { + "stage": "base_scan", + "veto": "degradation:vendor_semantics_unresolved", + "detail": "{\"reason\": \"vendor_semantics_unresolved\", \"stage\": \"model\"}", + "lifted": true + }, + { + "stage": "change_context", + "veto": "ambiguous_line_correspondence", + "detail": "6170702f726f757465732f636f6e747269627574696f6e732e6a73:ambiguous_line_correspondence", + "lifted": true + }, + { + "stage": "admission", + "veto": "capability_unavailable", + "detail": "no evaluated capability is enabled; the recorded-veto flag cannot enable one", + "lifted": false + }, + { + "stage": "admission", + "veto": "unchanged", + "detail": "production admission reason on the lifted candidate", + "lifted": false + }, + { + "stage": "admission", + "veto": "dependency_unresolved", + "detail": "production admission reason on the lifted candidate", + "lifted": false + } + ] + } + ], + "base_only_findings": [], + "census": [ + { + "language": "javascript", + "frontend": "javascript", + "files": 44, + "complete": null + } + ], + "coverage_reasons": [ + "capability_unavailable", + "comparison_unknown", + "witness_unresolved", + "dependency_unresolved", + "eligibility:eligibility_provenance_mismatch", + "6170702f726f757465732f636f6e747269627574696f6e732e6a73:ambiguous_line_correspondence", + "witness_identity_unresolved", + "context_projection_unavailable:contributor-scan:da4abcaa22e13947dca90ac9156293bda9297423304d60d587569389742ce17a", + "context_projection_unavailable:contributor-scan:29000feef9d494e003efdcbb6eab5410bc93ad2f4674df9db389ed98a9cfb242", + "dynamic_external_or_depth_context_unresolved:contributor-scan:4679cce5fa8da06bd1f9542b5a58321d2b090556cce83080b6e9ace36d352a59", + "dynamic_external_or_depth_context_unresolved:contributor-scan:df4a0610953efc25e4ddc4bc942688434be889411d073fab09015aba97ce2511", + "dynamic_external_or_depth_context_unresolved:contributor-scan:9b7910f9f96aa714b760481e46e543ea413d6e4763b858a3d0c186a560ad618c", + "dynamic_external_or_depth_context_unresolved:contributor-scan:298f3d69ca3e2b343c9cc5288680120b89e035bfae803dc6f6952358b6d0f1d3", + "dynamic_external_or_depth_context_unresolved:contributor-scan:7fbdc1e100a0b9078b6a2d6264bfaa596c64501b8c5ced1557b56a3d98e2b351", + "context_projection_unavailable:contributor-scan:722bfc188cadc50c1485cf4ede13f2b62e93b08b16f42f2586c104b8bd3745e7", + "context_projection_unavailable:contributor-scan:144c1db7c40aa0a420e02130a756c7793fc8fa5d33549a08c236ddb96bad2df3", + "dynamic_external_or_depth_context_unresolved:contributor-scan:6bb3ba6475ce8d11ff20924b69721387bb0d4bbce1b852e640403dbd750f0a8f", + "dynamic_external_or_depth_context_unresolved:contributor-scan:a08e3f98d65d0452a631a11de0ef53c9fb53492efcf3d8003b5512478b92b4bc", + "dynamic_external_or_depth_context_unresolved:contributor-scan:4e0e78390504d44716e20ff65cf5f16c1f1ddc2fa0441e503dcae1826c666529", + "dynamic_external_or_depth_context_unresolved:contributor-scan:0e143029eb9d5d5c30c3dc0fda147c852e68d4e8d407795a1047beb586723238", + "dynamic_external_or_depth_context_unresolved:contributor-scan:43e8934e37c9ecda6c36b4bee6af63f4269e59cefb5df30af45ae08bd93f5063", + "context_projection_unavailable:contributor-scan:8f51fe6438299d6f935f48d1d0991270ad477174195aff8574ef587a45038efb", + "context_projection_unavailable:contributor-scan:8d26ec62881cf7efa89509047c178e7b920a87cc4bfb9cb0d6d991e87ca22124", + "dynamic_external_or_depth_context_unresolved:contributor-scan:ec5cd96c01771e651d9e09445c5df8af453e475da75f47a583a1006e99686b09", + "dynamic_external_or_depth_context_unresolved:contributor-scan:2981a228c15eb8a02d051bad6ce39736dd5f4c3f63a979d997bc23086105cbaa", + "dynamic_external_or_depth_context_unresolved:contributor-scan:7055c8f3c6f41ee3593da37fd92332c561907e07a633b9ba7bf66347cdccb378", + "dynamic_external_or_depth_context_unresolved:contributor-scan:68b25a8b5bcd76f92ed9473318e67e752b5898eb6b34c4a1205b77a88dc0214b", + "dynamic_external_or_depth_context_unresolved:contributor-scan:435b8c03368213b50237bb6f7a4dbfad4e7ba8d4f3948b046a5e95ff38c739be", + "context_projection_unavailable:contributor-scan:d2034c51a6d44b7b5cb553f2ad130441532b6be68cac0e829b74c4240aa642c4", + "context_projection_unavailable:contributor-scan:1d7abc4a4a8c6023e1c5231f46167efdb6c476e4533ea4670a17ecc6c8d09c92", + "dynamic_external_or_depth_context_unresolved:contributor-scan:ba984e9deee4ab97a4211ce15915bc36e0e42907e21f40525be95c698c439653", + "dynamic_external_or_depth_context_unresolved:contributor-scan:ecc80bd3363347eac23b60a8ec50efe1a5defd3609aff7149022fac1e74524d4", + "dynamic_external_or_depth_context_unresolved:contributor-scan:7cead756038bdaf46936671d2311c93b391692337189bd9f3acb5711dcd1b594", + "dynamic_external_or_depth_context_unresolved:contributor-scan:d7044d436bcc3e7e313fb2baff364c8aecf980b28741afd4d020f858a47a3909", + "dynamic_external_or_depth_context_unresolved:contributor-scan:f0fb49041bdc02002b8aaf574a29a738aeb235ca0bc5cbbe9998dd9841e93a0d", + "context_projection_unavailable:contributor-scan:590ded4d9ba52b59e2934f3d461e45dfa5bd351f13c4fc17238297438fbf492f", + "context_projection_unavailable:contributor-scan:33ab14574877d6a529a58df1926e358759fb4ee1ffbc68146aebf77a895c8eb9", + "dynamic_external_or_depth_context_unresolved:contributor-scan:489bf9f5f3a1e3771698cf111c0e7fa3e84f81848869c88a44cf3d19979d168c", + "dynamic_external_or_depth_context_unresolved:contributor-scan:ca3b943eb07fc11f6cc16228ae4e7813cfccac5dfe7ea9147deb0ce84677e486", + "dynamic_external_or_depth_context_unresolved:contributor-scan:a83d9fd2d4f399a40984cdc63e30003a73c98a6986f76fd5e22ed0ed7873c8b3", + "dynamic_external_or_depth_context_unresolved:contributor-scan:593c9114695f69035b4df9d566534e35fcfaa2d78a3e4362c2ff634580d6bee9", + "dynamic_external_or_depth_context_unresolved:contributor-scan:87ba1a35a429f850990db0eceda9996daf572b97b32b38e0f7ff4b80dec9a6b2", + "context_projection_unavailable:contributor-scan:f12e400682d1a222abca9d05f942a24394d7795eacc7ec322c585a0a6ffe69ec", + "context_projection_unavailable:contributor-scan:5e24ba3194915f95a2452882fe928f834ed4740f8fa2087c7573b7c2f128a2ad", + "dynamic_external_or_depth_context_unresolved:contributor-scan:4d7554903c7ff3f7005fe4ed77f7e82af8cba218d3ac0b431acf14d18ffeb639", + "dynamic_external_or_depth_context_unresolved:contributor-scan:896720a23ec5b7da3163d53b517817cb01337cdad64d2104dbfdd3b3526f9c5f", + "dynamic_external_or_depth_context_unresolved:contributor-scan:e13de3ef10e25c529870483b67e47206b9cd32251e118f20f628eba95236d9c9", + "dynamic_external_or_depth_context_unresolved:contributor-scan:ac5ad3cda567527eb97dca35bb56d076292b88e20baa36d337967eb1f4f63dff", + "dynamic_external_or_depth_context_unresolved:contributor-scan:7c0bba65b77fc890e479add54e7fb0e9a7d145a4304d81f614536a8470d0a471", + "context_projection_unavailable:contributor-scan:e9cf95baf8cef9a83d9da86e0bce276421ed404867ad948acc338fa759a3450a", + "context_projection_unavailable:contributor-scan:431521d90fc22b7683173732598c39b94a25447f7403dcd4d9e17ca23e243a61", + "dynamic_external_or_depth_context_unresolved:contributor-scan:d331868f74b26a35872e8eeed4f66f3e34a29f8e9745fc14c1609cc3408aebeb", + "dynamic_external_or_depth_context_unresolved:contributor-scan:61b6ec72d6c0dddae427635aca3c97681a112cc4c5f8e4367d9f5864c6eb72b3", + "dynamic_external_or_depth_context_unresolved:contributor-scan:e831bbc3ab250e71270b1f5175756f39c2da662bffd68b2ed78b5389a4f23d0c", + "dynamic_external_or_depth_context_unresolved:contributor-scan:082910c464337b0041733c3c2733ad7947d71549180f9a0b8ad4172901469d02", + "dynamic_external_or_depth_context_unresolved:contributor-scan:14541cd08e0b036e4ab5caa442c01459fb03a6e3ef0388bcd0347b121effc6fc", + "context_projection_unavailable:contributor-scan:e4fe7eb3e5d57766a2c6adc79d46b9f57ac13ba11df7846cc4f7d62123a51bd4", + "context_projection_unavailable:contributor-scan:0cc9059de118ef8da2ab45a3453bb2f64a679dfa33233f3b1b722b3858df789b", + "dynamic_external_or_depth_context_unresolved:contributor-scan:d561ce2e09d49013cacec011cf5dfa8c5f35c25c41085e856b3d5f28579ba6f4", + "dynamic_external_or_depth_context_unresolved:contributor-scan:7eb45f19bf15a2826d7aac45f36137de8824abfa9c0d5412da3c69c5d6da7a0d", + "dynamic_external_or_depth_context_unresolved:contributor-scan:ef130caaa2b3321cd12e2c8c39a27f9a868d2405e572fcafa5cab93900d9f97a", + "dynamic_external_or_depth_context_unresolved:contributor-scan:115b829e9b03431b06c12212efdcc2da02b5e22953e8a02243a8cd5a59cea0f4", + "dynamic_external_or_depth_context_unresolved:contributor-scan:db0e20f3ffa3b74105bddd565ba608daaea4cf9baba6b43a2539958e1a8be668", + "context_projection_unavailable:contributor-scan:0ca04c8edcd2d8a247e575209a9e5c8a1cf86c39e6655d79d6f85ef41556ef71", + "context_projection_unavailable:contributor-scan:d8cb785d9bcf0b1a8289362c5badd0db084f2efa3d831fdda8ffbc5cd423febb", + "dynamic_external_or_depth_context_unresolved:contributor-scan:c932a2fea0cf3a50a44090757e856ecaa4914e385b566787b60877f04c947002", + "dynamic_external_or_depth_context_unresolved:contributor-scan:1d3d7b3981fee634842a7dc05f5e4d1bac279c0ab8e9df78d768f43676186340", + "dynamic_external_or_depth_context_unresolved:contributor-scan:155e5683914f9d0fff0323548d9a531ed582e72414b934e57edb656579cb05e7", + "dynamic_external_or_depth_context_unresolved:contributor-scan:486352981492eeca9626588e8aa0a737dedf797d83a20148cf86aaca0e5cd660", + "dynamic_external_or_depth_context_unresolved:contributor-scan:692125735f88d08d8cec81e5564ed2f20d88422cb693407e8b569f2b1e07050c", + "context_projection_unavailable:contributor-scan:4ed8fe95db377770a47a2b3ad04a3a720ec21bdbd5222272ec5555130a627fbb", + "context_projection_unavailable:contributor-scan:ece73e32fe91c87a001f1e41342e09378041ee876c8a8846a51347b8b607cc2f", + "dynamic_external_or_depth_context_unresolved:contributor-scan:8146eab0359ca0b822353b632ced69bf09fd449704cdf7c6f84440d7ca784cef", + "dynamic_external_or_depth_context_unresolved:contributor-scan:ec7c01083f1fcb35c35244172a005b3eabebff9c0fd1dcfb4372268f82fb3894", + "dynamic_external_or_depth_context_unresolved:contributor-scan:ca89f1fd26f88f845f394fce84527e83c6a4cc8252f30d6787e7c5ac13e119a9", + "dynamic_external_or_depth_context_unresolved:contributor-scan:c3b4d527dc5c4ed121a487d5e4e3aa868df773ef3b04200802f9a306bf67c730", + "dynamic_external_or_depth_context_unresolved:contributor-scan:9e5735029a42e23af56c2cc802655bf46c55bfebf19f19810ac16cfa15fc688c", + "context_projection_unavailable:contributor-scan:ad133cc1b1af014f3acdb5852f7efde5750b39eaba1978bd391f0e620de02e54", + "context_projection_unavailable:contributor-scan:4af613e520506104185fc529b07037168b79165ec93e37331dd01f306307a9b7", + "context_projection_unavailable:contributor-scan:103fa19cc7adb309027f4eafd56cee2c11875358bb4d8d8dd2bbc2f3fe698bb9", + "dynamic_external_or_depth_context_unresolved:contributor-scan:ede21fac9950f370f23f2a674f795bc7b2eea5c4609ee32fa64d4239218b3d98", + "dynamic_external_or_depth_context_unresolved:contributor-scan:5b6014bebeefd652030b6f79d14252c51a6f1159a2b37bccdcd3e515e0ae27b9", + "dynamic_external_or_depth_context_unresolved:contributor-scan:dda18f566e40a3b6e882b5f35ed04328ef8288094d8151bcad76a8c228454f6d", + "dynamic_external_or_depth_context_unresolved:contributor-scan:bb06814f937b8f4fd23622931286468bccb770a49112c94b23f06e97ffb7aa05", + "dynamic_external_or_depth_context_unresolved:contributor-scan:9c629de1ccf91a807ae4d7c296108a9ec7880c1cd278e0da344061d329755c14", + "context_projection_unavailable:contributor-scan:eaa4fc381ad8dd4a49b66bbe7ccb050b2ed8735ec0d5eaee4f555fce0ff39a8c", + "context_projection_unavailable:contributor-scan:68a35789d8aa7b4f5293eb06988118bf39be4f0354e6dd89674da130c4ff7911", + "dynamic_external_or_depth_context_unresolved:contributor-scan:3c9cfda0c903ea8e97a9bdc2966dff555df6580479782ced9ea934837e3bdb5c", + "dynamic_external_or_depth_context_unresolved:contributor-scan:4367699c5a75ef7a22a52ca8d1b77e15ae6c8c18b2ec5fa929d688281ff34edb", + "dynamic_external_or_depth_context_unresolved:contributor-scan:f020689fd3ee8e3f51d12f177d80fb80aba8d3435a9f58e63cf4caadc02eca10", + "dynamic_external_or_depth_context_unresolved:contributor-scan:06f7107e12e2f2c7151d2c38ca31adcd8690e7dcab4537b37183561a9306208c", + "dynamic_external_or_depth_context_unresolved:contributor-scan:2f8516c90c01cfb4bd29a3b8ad1b61280436a37804b24929327cb41d8eac39aa", + "context_projection_unavailable:contributor-scan:10662bded3a99140e896de3673635e5d946b0536db96643d0b4c621d7d68f56b", + "context_projection_unavailable:contributor-scan:06b6066af41823461a0773a4018a93e9e7dcd71afd31331e5fa650b4fd1ac2ce", + "dynamic_external_or_depth_context_unresolved:contributor-scan:eca317877601cc31ae62fbd401aaae05a95ba092256beae0a69f90f42031dd40", + "dynamic_external_or_depth_context_unresolved:contributor-scan:040ab49439c03cee7663bd46349400cb389c480732f583aacabd8aa2281ac141", + "dynamic_external_or_depth_context_unresolved:contributor-scan:9d64998ae03ac69c2d6157548cf8f59eaf0ce08f10059bdf50ff8aae62dedfc8", + "dynamic_external_or_depth_context_unresolved:contributor-scan:104e0c71e792ced34e2811d7ec98f691d0740d260a8479c5e352e6d6185581ae", + "dynamic_external_or_depth_context_unresolved:contributor-scan:09d6c766aafeb3164a7a719920d7f9b871deaa9dc84691e8073f0db23975da39", + "context_projection_unavailable:contributor-scan:5be16077f567b7bf0034e61bcfc0311887588c95ce57c0e2fb430dfeebb93736", + "context_projection_unavailable:contributor-scan:ad205a52efc99c249042c9a2a85f6e39a89ca00a1bbbdac176bcbbd2f6ac6418", + "dynamic_external_or_depth_context_unresolved:contributor-scan:41414f5074402bc65ab7cede304c467ea56456ccc4d5a99f74dbf698ec80a014", + "dynamic_external_or_depth_context_unresolved:contributor-scan:f0a24dbc494b779606b3fae942042ebb6e42d77cf188d81f5e0895215f24d975", + "dynamic_external_or_depth_context_unresolved:contributor-scan:ed67e0034372067628553cac0f55d69935203f102d2eae5bccf3e9fd6f8bddee", + "dynamic_external_or_depth_context_unresolved:contributor-scan:1544c144771491cd8bb6c79ebb199070189032a209a17ae0f5df17d95e0a48e5", + "dynamic_external_or_depth_context_unresolved:contributor-scan:e2fdafc580819c643c0a89d3ee89d934d4131d06f288295e946b93824e098863", + "context_projection_unavailable:contributor-scan:6b16af8419f1b67c3d8176c2e2b6adf5ad345d84c797d4621c883d12c5881eed", + "context_projection_unavailable:contributor-scan:6101922fcf4599ad00260237e8b14904716156d58a25c638578de9775f6546c4", + "dynamic_external_or_depth_context_unresolved:contributor-scan:0211764bef038cb43a5c8b4e4e1c2189e29c63acc195a8f18f5f52abb6c2d896", + "dynamic_external_or_depth_context_unresolved:contributor-scan:9fdd3d266a5a068ee069bc4df1c9ad13f5dc11503fe9730fc069dce86d2d0cc5", + "dynamic_external_or_depth_context_unresolved:contributor-scan:501185fcc47f5bc79f11c17aeb48f6a069298e4538f48c2335f5a5cb18d3d4f7", + "dynamic_external_or_depth_context_unresolved:contributor-scan:9039f3d010b09f603ec640edceb7861a36dab4b82364c69a208040c3ede48f17", + "dynamic_external_or_depth_context_unresolved:contributor-scan:751f234599524ba682a48181293f9f24bbfded0b905db1400c4d66e287ae6470", + "context_projection_unavailable:contributor-scan:c739f4bf1f227963dbdc0ba653351d9b1755ac4b30e4e1fc29a552d1763752c8", + "context_projection_unavailable:contributor-scan:8e3b632fbec986c803e343ccfb4c8a13c03b04f6212cbe161efe5d5976eb71d1", + "dynamic_external_or_depth_context_unresolved:contributor-scan:1d20996dfd8ac9c5cd8de5ece58b61abc6e482999a720d8fc6cab8017adfde73", + "dynamic_external_or_depth_context_unresolved:contributor-scan:74468a7e1be2e9c78afffcbe10b6673e7522120d6679186fd21614fb8d3260fa", + "dynamic_external_or_depth_context_unresolved:contributor-scan:e47b686632ca64ef9e44b6da170481087bddae257940e54aeaf807b18edb4120", + "dynamic_external_or_depth_context_unresolved:contributor-scan:23f33513eef75806f25e55dfadf2e09727569c6c57dd020b686cef0c9a6e8324", + "dynamic_external_or_depth_context_unresolved:contributor-scan:8d59bb2bc1e8a2546b70e875ed5138dfab8f5209888877a7090294b3ba3e8adc", + "context_projection_unavailable:contributor-scan:92bc28c793c6cf7200794bdbb5c3c821fa205ed1b4b06fcbda8d0124d28e3136", + "context_projection_unavailable:contributor-scan:cc61018d326cd22a23b07c05db51cfb87618046132d4bedca206cdafa063a20a", + "dynamic_external_or_depth_context_unresolved:contributor-scan:b370ee273c4fcdb5bde8fb9ef6ddfd45406447ce19c748e418de854c2f0362e3", + "dynamic_external_or_depth_context_unresolved:contributor-scan:6152c270f83886cf3f5761812c6d8eece4cac8c348230c9b42dd271d1e3f1aba", + "dynamic_external_or_depth_context_unresolved:contributor-scan:2a9b0d00fb1eb5564fd96a8c1369f9f8e1d32b947cb59a334d47b32c6d963897", + "dynamic_external_or_depth_context_unresolved:contributor-scan:384c35175bd92ed2c097eebdfa72395a309acb7aa60c390ec3eb66773b661d6e", + "dynamic_external_or_depth_context_unresolved:contributor-scan:573e038e86e51ae46e5a7992fa652fb4b92632a7065260e12c46d1fd6effefb6", + "context_projection_unavailable:contributor-scan:005be3a45b8fe905f0d1a63f1306ccc4eab8191d20f6f5a805f4754c20ef2daa", + "context_projection_unavailable:contributor-scan:9a60982d54be5edfd5af1bd9f7d25dca0be74e77d5eeb6eaf37dcfe06cee188e", + "dynamic_external_or_depth_context_unresolved:contributor-scan:676257a1528797108e3a5fe031627338e9f09b44297e33aa1463cf46e5bf7db3", + "dynamic_external_or_depth_context_unresolved:contributor-scan:e7a241cb0337b1b02a56acabcd77baa1363feda4f01cda38d460822da991e3bf", + "dynamic_external_or_depth_context_unresolved:contributor-scan:7ac458257132ccc040a84b03c9fb7b9ca4fbe0579e7d3428f584da04b5b33527", + "dynamic_external_or_depth_context_unresolved:contributor-scan:cff2be050d602ec4623227bfe5d17c81c6b4da11e8c00ad7f7ca7d4c6acc878d", + "dynamic_external_or_depth_context_unresolved:contributor-scan:c07b292e4500a3ff9845bb55d6d69eae602d939e7681ae5d65effe80db4626b6", + "context_projection_unavailable:contributor-scan:47136ecffbadd0a856d93adf53a2e2b675403386663bbe766bec37d313c87a10", + "context_projection_unavailable:contributor-scan:eb1bacbee5fd2a2b50535a70ed300e93b90491d7d3d29d2f1f8bc5ecde0d7839", + "dynamic_external_or_depth_context_unresolved:contributor-scan:15e2db68968bb0000bda5bb3747451926355e9cd63db122bec12a53fb15da9e1", + "dynamic_external_or_depth_context_unresolved:contributor-scan:1ae6a3722ce9c193df69b1b8a37aa086ec323283628290f7298871676d3c4cba", + "dynamic_external_or_depth_context_unresolved:contributor-scan:65477882f5794c720233a98e1e383d91deb070f0c2bceb95a5efe7008f854cb5", + "dynamic_external_or_depth_context_unresolved:contributor-scan:2a630b24aeaeeef20baede1abed05cc9c45794561239f64c6bc291afb4b16120", + "dynamic_external_or_depth_context_unresolved:contributor-scan:70beda84b736a344f503b4e25e0e4a426f31d7041d283aab464026dfb9714457", + "context_projection_unavailable:contributor-scan:591cd0ffc4b3b51cff8621ab1458a478c0a0f57305f0551e9e5396dbe8f7d349", + "context_projection_unavailable:contributor-scan:53625b2b7fcffc9568152e6b6d95472fe850ed163ab341044a0754334cf22e34", + "dynamic_external_or_depth_context_unresolved:contributor-scan:5751606d1ed8891eae9bd10c5676a54ec196b36b00f9b7d3aa9ab0ab04b5cc25", + "dynamic_external_or_depth_context_unresolved:contributor-scan:f9f8ac5616f2d1864a6599bafb5f2e6bbc7fba72d6aa23d9ea1e0096de9d4164", + "dynamic_external_or_depth_context_unresolved:contributor-scan:56241bac3d18e635913ae9db5fac9cdde4e28d74795a1ca77227354d8d38fe1a", + "dynamic_external_or_depth_context_unresolved:contributor-scan:e01cbe3312394d636a19003923a0ff3eea7f8d2e1d6b42f94777655add3fe9ee", + "dynamic_external_or_depth_context_unresolved:contributor-scan:d08709244798a43e91f24367176899d90f8678813ec8b822163c67e1740f89c2", + "context_projection_unavailable:contributor-scan:7571cf1e503d83dd0c915f69b8365e94a1b37aaf98a37d08d4b90e2a3675220f", + "context_projection_unavailable:contributor-scan:f43f4e2cf5990ca47a833947b671586123e6e73a57d4305a9b813a8ed0d2fb8f", + "dynamic_external_or_depth_context_unresolved:contributor-scan:12bd6bd6659343e3dd9e6666572c55724a0a9e6990b890b556fe662db9d062e5", + "dynamic_external_or_depth_context_unresolved:contributor-scan:9ae85f24c4abea079e0223f9f05355dcaf5fbb396291c96d5c3b016099e84bbe", + "dynamic_external_or_depth_context_unresolved:contributor-scan:495097c042dc6319f9f6480ad049016f113b9c5cfc6d612e04aad56934b919eb", + "dynamic_external_or_depth_context_unresolved:contributor-scan:4eaa8cc1bf14b329db1097395c1a5ecd0f6fdf5a5de76db7f0339ab9b2c491e4", + "dynamic_external_or_depth_context_unresolved:contributor-scan:9d9f56a74cd94f45656c40e09823308aed0b4c9e745203cd5950138713026939", + "context_projection_unavailable:contributor-scan:40797ecc115fee18a4608c9efa1ffeb81c2ee1c4842561ef61fcf7076f1ffedd", + "context_projection_unavailable:contributor-scan:11cd767ae016d95635cbdfe08538b9347337d6b0847d12697075584b8d0619f1", + "dynamic_external_or_depth_context_unresolved:contributor-scan:71cb92eeba1ac9e0112a7cf621767729fb77eca209140f248c04f3ca1b0918f8", + "dynamic_external_or_depth_context_unresolved:contributor-scan:e44a0c43a95543503268b2378dfa0c9161c522c62bee65fa4f4a238875c64b7e", + "dynamic_external_or_depth_context_unresolved:contributor-scan:8715cacf99e5b7a106cda39fd2b6c96c2e5022974b0f66de7d6a15ed2aaf4eed", + "dynamic_external_or_depth_context_unresolved:contributor-scan:35bb68dde977abf2784e33d1bf3052893a358a43a8b258bea6a7318b1dd4a310", + "dynamic_external_or_depth_context_unresolved:contributor-scan:b5bb928fb28bf9699bfbabc626fc279a9ebd1ce6b63c993ddeda7b9eb2f8cf27", + "context_projection_unavailable:contributor-scan:3fc619d1072c86c3df178b90349411bfed86c49dc777f030f2d27e3100394b00", + "context_projection_unavailable:contributor-scan:05ede74d5dcb911b02053a895751f92ae86743298c8c6d8c5811de191cd4e5d0", + "dynamic_external_or_depth_context_unresolved:contributor-scan:18ad4372b90d74e60d68a00e4586b0767c060f9c522d2016c515cc5754eeb06b", + "dynamic_external_or_depth_context_unresolved:contributor-scan:595447850210071d76266dff3f9ceb530f5fbdf38c9940011abb9b96820f69d0", + "dynamic_external_or_depth_context_unresolved:contributor-scan:3c80c4cfbea01760facf853c328821cbfa9635adf55a650b92fc41bcfb19c8f5", + "dynamic_external_or_depth_context_unresolved:contributor-scan:e4feca4d382344176e8ac45592711e4472f76e0667867d469c65ccb5be2c7a19", + "dynamic_external_or_depth_context_unresolved:contributor-scan:7d0b37fb8ac67f6752e21869e57ed1d8b08be8517ca53ac2835cd2295df094ed", + "context_projection_unavailable:contributor-scan:a562474ca19fd4d4ec052396b656b092e82be7b1c002746f631cd9fb68b39ff3", + "context_projection_unavailable:contributor-scan:22e26415a3768b1b12cfb9469b912d359d0804761ee7f1d02d281600373dc8a4", + "dynamic_external_or_depth_context_unresolved:contributor-scan:03548d772fd2a4030a9f595257333eb9b323f1057a2a0399ed15efea113e719d", + "dynamic_external_or_depth_context_unresolved:contributor-scan:0f5f635e19864fbd276fd3eb0b6460f86274e6bc52533594879fcc42c02e4df5", + "dynamic_external_or_depth_context_unresolved:contributor-scan:f95e55b8ae987f7c4b11837ddaa8dac8bed46541f6d8c12633b46fe915b41824", + "dynamic_external_or_depth_context_unresolved:contributor-scan:e77b04a213011bc3e9812f81c2d1266be1234ff91a72d347b71017e8ea09f4e4", + "dynamic_external_or_depth_context_unresolved:contributor-scan:f7ab6f0b570873d6b99c3fc33ab556f093d7f5e4991eac884d3e766a2c29b326", + "context_projection_unavailable:contributor-scan:6ad6e59fa1a92132e095463bdbb461598c80b45af85ff453a6450b59b61d10cc", + "context_projection_unavailable:contributor-scan:c2b3c06e92fa87731137f871b9dd0f867fc53156a80bbf00da955cf5bfe0fe7e", + "dynamic_external_or_depth_context_unresolved:contributor-scan:b7b9b9cb1194740a47fa214266a43fdb70019fa1308009589d38f2c7662aa4b3", + "dynamic_external_or_depth_context_unresolved:contributor-scan:4d3ed9000a9b5806a0ed641e2739166e3df18ffa1925ee396fbe25d29e332c71", + "dynamic_external_or_depth_context_unresolved:contributor-scan:bce9e3fb76d6276772f1f279260ddb2f673a4a45a08f13fbc75343d20c0ad4ad", + "dynamic_external_or_depth_context_unresolved:contributor-scan:f0aa35455461c8f75dd8ca533e03dd43ea339a7026f07407ef26b12c3fe6f44a", + "dynamic_external_or_depth_context_unresolved:contributor-scan:64c0f7e52fb34476d5e47478ff354845a776dd781a2044963cae3191bb18058b", + "context_projection_unavailable:contributor-scan:9f9eb159649a2e07879e36c4f5eb5bbb38e337540c4b295adb4b59ca31e2a868", + "context_projection_unavailable:contributor-scan:bfba8296d9252a696a7f8262a80b63019fd89fb866e3d3daab087101c9d7ebd2", + "context_scope_empty:contributor-scan:6b6bc1f8b05dab47833d180de1fc7b40d8637a213c87af02f19bfac2f9439869", + "context_scope_empty:contributor-scan:72261efc87c3f66bd420e106d6e04235b2d6a7b4c59ceb5a235dbfbf31d02f29", + "context_scope_empty:contributor-scan:94e30a15524e236d04ae2f0238a72c0b446a48b7b4302471ad6703861948025a", + "context_scope_empty:contributor-scan:fa59397c0eb909b5b269278b706ba8432004d786cc8431db1e27fdf9614211bf", + "context_scope_empty:contributor-scan:a65d452c03e7a0e7bfc77d9337f0c3f6cc47449979963ca1173f45c619b7b812", + "context_projection_unavailable:contributor-scan:135f8cdcca313308bc5456466706c561652768149ff61e93f241b383c07448e8", + "context_projection_unavailable:contributor-scan:d029880ad27458bf1d443088b6afe399af206a9f412fd8406769198f304e64f5", + "context_scope_empty:contributor-scan:2ae591e30078f1e045b446004067a4734acda37a9673dbac82bca972cb5f8c2b", + "context_scope_empty:contributor-scan:b35cc9123b9c6316f72cdbfcd7945157215622625141e56543a4093c0c553013", + "context_scope_empty:contributor-scan:c8d88ff3a98aaa4eba3756a5f0b89cdeeeda10e5180f5eee0d3ae2b7dd042cdb", + "context_scope_empty:contributor-scan:f06f0c86aa4079e5d3ac48ffa9b50661a0bd2f4c315190b26f13664de494c9d9", + "context_scope_empty:contributor-scan:627afe91ac03ff52d178f64eb23d372523f86fb34fcc0ca0dade6786c38f0dbc", + "context_projection_unavailable:contributor-scan:ccab701536e7f9615e52f4b1a1c68a2416263ad8de279372ce248fed5d7868ed", + "context_projection_unavailable:contributor-scan:bb71e211e99f3dbe040a15b22eb7e004da953ca61b700ca3d1c94764cb6bb80f", + "context_scope_empty:contributor-scan:d799a15d3d810c39c4a519c59843bbb6c2617f559f8ebdefe801296e0819149a", + "context_scope_empty:contributor-scan:d6a24a60b3cec846b01cb2c3a1535ee2ab834a09e935abe70ede278ecb1ef045", + "context_scope_empty:contributor-scan:d1cae428bb382d9cc38acac1c7bb8a5e6142a46f5b0e6e2ddb1609b0acc66f68", + "context_scope_empty:contributor-scan:c46c90f66921363f974dcf82aaf3b3410222ec081abe097417dd1a1accb372b4", + "context_scope_empty:contributor-scan:5630ea72ee47272cdf5f9e3d1df3aeb499c357880ad49b26cff1cebcbbaaaeed", + "context_projection_unavailable:contributor-scan:013a84070826e011c0b19953b3493276e98498b3837618303aff28475b38eb2c", + "context_projection_unavailable:contributor-scan:c158a154e2b9394ee661d2f982e93af8d59543bb7da5c8d2c8e9c65905384d4a", + "context_scope_empty:contributor-scan:a0423c87fb8581f1897c9a0c774c3881ba8775e05f6cd88408cee05d126ac52a", + "context_scope_empty:contributor-scan:7e9c5dc7bc705ee6825fcebe23ba885a4be30b318195ec89e9a19b450bff86fb", + "context_scope_empty:contributor-scan:c6c5a131a84fabe329dc50128240b463b18a4ea0af2d036bcc02d869ec57fa7b", + "context_scope_empty:contributor-scan:ffe9fe5d19fd7233e88869bdd2f6fe00785a9b15d074a3f8b171a03121ba64b0", + "context_scope_empty:contributor-scan:324cdf414ea58e6d9496c28b138b43bb18cd6e983fb7678aef960670a51dc93c", + "context_projection_unavailable:contributor-scan:fb3bd242d8f9801589ca53c24a1b36b88ee1e6b8932ddb6a5d3bb7b3019556be", + "context_projection_unavailable:contributor-scan:5784aa43502be5cfa00e65ed1800bc86cea1b83db7b99737a92e3059c0aedb51", + "context_scope_empty:contributor-scan:e05d1e4da035294fb1b5185492276e323b43a33c173dd05390edee2726f82f60", + "context_scope_empty:contributor-scan:480a6f9e635cdb839e9ed2fab13d22291dff3c92ae99e1bf514439b370480f24", + "context_scope_empty:contributor-scan:acc5d491964faf3f4858dce3bfe338199f9b5469c1ad33e64c2f0bfad2f0263e", + "context_scope_empty:contributor-scan:e14724d931f179f9298c723043307a99153207ec425d4fae28f78becba7c0a9f", + "context_scope_empty:contributor-scan:756d4aea97736b83d6904a6d96d22e8026d24796d64d6806c2fcc478272c16bc", + "context_projection_unavailable:contributor-scan:8fc292a32ac35211b4747151ed7797cdcc9cf7edca0ea697f9cd9ca9eb2bf906", + "context_projection_unavailable:contributor-scan:0434560a038fb3a29aaeae6531b7190a9a993f75cebecbde4dbc5d9f248c16b9", + "context_scope_empty:contributor-scan:5c7e3540a665e15247dc85c88bc06f2514da2cd85010ec820cc53548ac751009", + "context_scope_empty:contributor-scan:074e2d12c8900202ecd6b02df395375ee6343d1c04c22982c214e74d38fdf51f", + "context_scope_empty:contributor-scan:cf2f20c22b8acc270d75b060b45b3725d2a4a0bc4dc33adc9feeec336fa84f31", + "context_scope_empty:contributor-scan:bb67a42d62cb5389aeb41a0e18d26046ab4f20feae70cba114ddffd5995ac3e8", + "context_scope_empty:contributor-scan:ad9733cd531deb592afd4650ebd20d8c967ea49693d2954151a70f4a4edb68df", + "context_projection_unavailable:contributor-scan:572f510d0485395c2ff610cd031d238c3745f79fe98a8f9fef5b042c24e57b69", + "context_projection_unavailable:contributor-scan:0ae9ac017e10c4d6256d41b99b5e771d7e8acf05bc1087acb58148a8ea2e8c5b", + "context_scope_empty:contributor-scan:691315c9798b266ce8aaff0a6368a80e40c685c1a8e3a54fe139131f4d6da7a7", + "context_scope_empty:contributor-scan:aee4c8330dd8ef28010fdaf243964d48dec427871626422da8d915843534755b", + "context_scope_empty:contributor-scan:57aa82c0185ff3d73d91dfcbc6bae9b5d438cf064ed0ea9489d6b5de7c3df531", + "context_scope_empty:contributor-scan:79ed0c8a9f7d6b06e75ef023d6ca5a32416a9c8fbd5a75fd97ea1c0e8f7a5a30", + "context_scope_empty:contributor-scan:23f9afb28b6b7349cbf502c2a6a1ffff117d2b3a974d8705b99fc8717108627b", + "context_projection_unavailable:contributor-scan:a6f0fe4aec662565f32d93874690023ebe09aea9a887b330e0c64a18e41dc966", + "context_projection_unavailable:contributor-scan:aa5a287a1749ab0ab4e4b56048c738b95df8f4b19a82378847a39ccb5eb42315", + "context_scope_empty:contributor-scan:09dff44163511e71b0fbf539655ece1940bd80039bc8743cc922699a37340b71", + "context_scope_empty:contributor-scan:567b6eaa4c3dabaccdfb44885a6a4cd345ce3ffc6a201265084c1818c0b84226", + "context_scope_empty:contributor-scan:881e7f1a45e2d7ebf74842b131573da24478db0c44ddaea50ca20007994387c0", + "context_scope_empty:contributor-scan:e9a98c513dc38db66988ce7ed9fe730df4ba5297f2495c77a54ad2aa9195b9e6", + "context_scope_empty:contributor-scan:f7484f28717752c36583df6d2167f9861bbf8368ac7f18b8a7c41ed41f301f37", + "context_projection_unavailable:contributor-scan:c0c4a04d19b7a5f1f33fff97f49a9d0245c4b14d24c3691cefbf46b76c064d7e", + "context_projection_unavailable:contributor-scan:2b86fe6715dd628b59d2303d2939369a6ebff338e7c9a3f41a5e76371e70d56b", + "context_scope_empty:contributor-scan:3663dbf64c23ffed29746c390953bb4c54f0f3154cc9fa65e7bf6acdf7249702", + "context_scope_empty:contributor-scan:8beedef6ba5098ea3567e7e9dd3ff36fa7ccf418f7a8dabc5cd1c8df83ac946e", + "context_scope_empty:contributor-scan:07ee5dd2f228e5d605f204a0e607fde140b169321c49486f64ef0ef3498defed", + "context_scope_empty:contributor-scan:34ca592cc7c4769ab6ab180436ace3d801b26463a0915b253459fbe8aacc7ce3", + "context_scope_empty:contributor-scan:2ee6a26bbed8f2554b909b310e8fbcafea825d9016c009fa785f34121053ae17", + "context_projection_unavailable:contributor-scan:6dd70277e9e05c3828bec89c4cc94f2b256eef50554fe78b7bc7805ba0c77d7d", + "context_projection_unavailable:contributor-scan:448a4023be7987eb4282a5534d6369f7e8ded7ddb3cc29c537a4e09ded04434a", + "context_scope_empty:contributor-scan:338e654fb02855abf17360c328f02986bf949d898b489ea7b9b29ce090fd1eeb", + "context_scope_empty:contributor-scan:bbd12c331fb019e0c84c5629c0b4945609328a196e3862f6f6dbadba31da81c9", + "context_scope_empty:contributor-scan:06ea156efb68bae0ec77525ddbd4eb18c1c97512cf524cdd7661286b48a2684a", + "context_scope_empty:contributor-scan:163b26e0bcc1ebc83d620624356e8a535ba4a3130af719e57a4dad9922d0ca1c", + "context_scope_empty:contributor-scan:ef7c18370144ac600fa593af56a8a849f7070b91261415e8e3cad6bcdadc80da", + "context_projection_unavailable:contributor-scan:f196cd68d51074be3989e323fc62287af695b781697b91b658003c825b426ce6", + "context_projection_unavailable:contributor-scan:a763fb136aa3978b7f47acb90aae2c6bb5715e8ca5ef1088d7856608c8807071", + "context_scope_empty:contributor-scan:5bdc9a08c76139479780eda09106fbec03bd5662c1817f14c0893abe4c22c798", + "context_scope_empty:contributor-scan:4d34d526ba5ee10314a8f6a74f7fedddbcf0ca79986c20a5127dbb08acfd6c43", + "context_scope_empty:contributor-scan:2c2899bd893f9611640844c56b404e5b91768151cb862ff497bb823c505d568a", + "context_scope_empty:contributor-scan:be30cb63922297543ed6c72314d3b6ec3d849d3c5d28fc3590ad44ebd82c4f0e", + "context_scope_empty:contributor-scan:28f1d0d25c8654cd762a439d6eb6f3a6896d37071f406d8edeeb4c20adee20ce", + "context_projection_unavailable:contributor-scan:f6a81369acf1c84e3cd6bf3399289323cb47848984a8c96800c0682fc1055a04", + "context_projection_unavailable:contributor-scan:94b9c4a91bfce96cbe773c203dfdf22d1b015231e91dd478399c2586be6a3e77", + "context_scope_empty:contributor-scan:526ce466755c525287df1a2adbdbdf566c896d79150b9bc7dbe65936e83abb30", + "context_scope_empty:contributor-scan:57dcaf9ddb9d8b054aa5dda6a0c9739439362e898cdf22aaf9f7338149f8cbd7", + "context_scope_empty:contributor-scan:064ff0d84035d834f9382eb8b4ad901fbeb4aa9fe816d7c36a34d56af41817bd", + "context_scope_empty:contributor-scan:d97343cdd389cd2ed9d0f1358d2bbddc2752053d95eab3e16e99423298a4371f", + "context_scope_empty:contributor-scan:f9deb31f0f9b98cad69111389734d43ed4fa86f24b05c9f2d48a78ea7a8708a3", + "context_projection_unavailable:contributor-scan:f962a89d04810a6c57abde4a8d3182d2a31c5d0f0ed3c37c053abea1fa223f31", + "context_projection_unavailable:contributor-scan:b62ac1b4b282eadf241f508bd5769bdd440b274f967d6ca73cb685ca249bd287", + "context_scope_empty:contributor-scan:57840b0da13c3f6f67e587689ab1eac913c17e91d493d1ce9ff089e8dccdfd29", + "context_scope_empty:contributor-scan:e3d1ce3b9de0fc9b48f2432d5e64947b5b24c3acaf1166f746bff1c54a028b9b", + "context_scope_empty:contributor-scan:d322db4b50c2c1bdbe0e22ef291070e20c93e0f7199c184f5ff8b4795b55cbe9", + "context_scope_empty:contributor-scan:88371d1acc9bc3b69c1d1957b27c9aefa3835be37bba74a359c35b1beaddc2f7", + "context_scope_empty:contributor-scan:3486da81fc55b7e285f23e85f44c481d780090285a384cfedaefa27265a236a8", + "context_projection_unavailable:contributor-scan:c87588b38d18fe9a5c563e2ae8d79649ce699607a891bd41b68194ce4507137d", + "context_projection_unavailable:contributor-scan:d6e3d356d491e5f3dbaca74cf11aef9bd751b36737feb34e466b707156b0d779", + "context_scope_empty:contributor-scan:843197ad039bb4e840b949b0ed1e5cf2230829366646a92ffc53d63e26149867", + "context_scope_empty:contributor-scan:b0766042c55d7c370799af987bed01fed8a417f83bc67e21d1366988aa1af10e", + "context_scope_empty:contributor-scan:b788ba22bd4225c24f95821dbf1f467dc2b13c7615b0bd2b00c3b234b7519539", + "context_scope_empty:contributor-scan:91430345496348280d29d11662aeb6048fd7596fc6304380b6154494df30d154", + "context_scope_empty:contributor-scan:8c1be7b4e8fd13181be0c4e46350a2f972e24acd13427e71c15e60dade41c28d", + "context_projection_unavailable:contributor-scan:f87a9ae1d7dc81f88c5891890b889aa7212e172ddec092182b7de6f01e787d7a", + "context_projection_unavailable:contributor-scan:b6a42fb01b464f31f65ebc10fbc12fccb051d8b44cac51a6818d3aedabea07f9", + "context_scope_empty:contributor-scan:4a820a780053b6f65492691e067e236adbd2a05b467e4e3f2ed37ba1260ce84f", + "context_scope_empty:contributor-scan:b07131192ab22510055930477ced5a10698278b2e00e3f711ebc202db640bee4", + "context_scope_empty:contributor-scan:5fbb00d9b2952ae4f0fed217bf2d8603872d8fc93073d99f31d8815539121987", + "context_scope_empty:contributor-scan:0bd48e207e95be86ea4e459c090a75c0adac8ca31bd2b631043854551b2c4392", + "context_scope_empty:contributor-scan:b11de5874aa62f939e383179c3ea1b34d3569ec6ade901964393b92f8325ad11", + "context_projection_unavailable:contributor-scan:8cd692618bec00fbbf099d570561201a2d0fdb601050fd20e198ead478530675", + "context_projection_unavailable:contributor-scan:19345b5fb5cecfc86e4db3cb8715cc7370e81796d70f11ba150a13c5ea8e4c37", + "context_scope_empty:contributor-scan:3ad0b3549b82f93ad869a9341397d394c1acee5e18d94a699b118094dd7a9a70", + "context_scope_empty:contributor-scan:32220b1bfe511b9dcec64d7ea8f4317e96b2d0cdc10bcfa55cfa3b63ce64aab6", + "context_scope_empty:contributor-scan:0cca9d955282f37dd60e764c56b52cbad90b33ec2c2943a7e5d155d35b0417fa", + "context_scope_empty:contributor-scan:40d00274aa5b28039b0d57d75a81f174c0a31e4be2d324ba79a64b79efd4e411", + "context_scope_empty:contributor-scan:319d00690097314e26638e2f4a6d848f50d1ff2f9d6f755a618eb31398ed373a", + "context_projection_unavailable:contributor-scan:dfa47fe83d195de69774c841747f6e7ea78d6d91297821dc9b8ee5fc625cfe2b", + "context_projection_unavailable:contributor-scan:5a497ad4d83218c29d4f22781a54d9e1927dc414f7cba6f89d794ed047f8b245", + "context_scope_empty:contributor-scan:1bd3f2289cc1bfa889496ca5074991941263703a2517281734f33d0ef1050f1a", + "context_scope_empty:contributor-scan:587a689c0312ac0f6d98de7495f01f34428cb128e73875a71508f7d5874415b4", + "context_scope_empty:contributor-scan:fc77f013f48b454d8703f25f76646f74b74c9e4f8e5d542bc5f48d98c6e51fae", + "context_scope_empty:contributor-scan:a2a7af80da34233233ec619dc29366b40a9e55ead63626db185524f2415761f5", + "context_scope_empty:contributor-scan:f180a77f032bfea9c7d152438ba830f19e1bfc88481a56b9e554c61d2cd64f6e", + "context_projection_unavailable:contributor-scan:cb70e9a1b44fa1f13f3bcc5290e6db5c8d6eda83602c9513e91e779ac6cddd3f", + "context_projection_unavailable:contributor-scan:74f543e29e519871aabcedb9d39c953d5397aac456c3c5e6eb0e10e517989eb3", + "context_scope_empty:contributor-scan:c983c339bc6881a1e6a0b2c6a794de858613b91318205a623dc61d80c2238036", + "context_scope_empty:contributor-scan:97c5314218bfb458e1fb6d1a33c9ac75c7de152774a736f6c5874657515ccfcb", + "context_scope_empty:contributor-scan:0744dea5a54614d094a6eb711ff7df94a180bfdeacaf330e31d9466cd51aeda2", + "context_scope_empty:contributor-scan:06dc1ba86d3fcb46096bed80d9c5c558f79a5a33f4fcdb379f1567b1271b64ab", + "context_scope_empty:contributor-scan:aa48541c8cce586b7a8c5e8ebe3cb607d1c283ef8940b7d4c7fb584327dd177f", + "context_projection_unavailable:contributor-scan:a9d086126128de76e0bafc06ca465176ed2884cb7ec963457fe106346b8094f9", + "context_projection_unavailable:contributor-scan:637323a350346cee17c66cda9b8b1be49d58350b0a0904bd61e5af20ce611df5", + "dynamic_external_or_depth_context_unresolved:contributor-scan:aa25524f30b8e84ef80b52064a75ca56cf438e67e2696e360d683c03e85c4c6f", + "dynamic_external_or_depth_context_unresolved:contributor-scan:9b5371eadea2bf5707f730896b4766a8b56012269f1c02c5df9d0df1d1cbf696", + "dynamic_external_or_depth_context_unresolved:contributor-scan:d527de43dc2dfdb271c213a927ab31c08b1f063298b211b6b11831a4dff51922", + "dynamic_external_or_depth_context_unresolved:contributor-scan:5ee4f0b0ba2c39e7071bba12da912c1ae213b8a2cee0bb437afa500328a237d4", + "dynamic_external_or_depth_context_unresolved:contributor-scan:43d3388ae21433a62d37d4c92861c125683f03a0edd9d1afaa56a42a7b793dc1", + "context_projection_unavailable:contributor-scan:cc8161804d4c84fe4c4f7210a16193637accc1f791b7fc7be026c07177b7da4c", + "context_projection_unavailable:contributor-scan:4bc68b77bfd52e96e8db4fb7293a6d4f396d234eb4dafb625df76bc8f1ba1c7d", + "dynamic_external_or_depth_context_unresolved:contributor-scan:a66e57d86751f21d11652bc991ffe476eacb638f38f95947b723ac9448c5f668", + "dynamic_external_or_depth_context_unresolved:contributor-scan:278e2e9a97727da969f8d122576dd475c43141146f984e3af997600a013f19bf", + "dynamic_external_or_depth_context_unresolved:contributor-scan:3152613ac0763b809bc99a50b728391cfe19d2cfeb27ff47a1e3671ed7526a3f", + "dynamic_external_or_depth_context_unresolved:contributor-scan:06168cf4f7850405f47bd8cfe013dc077b51457b355698ea3407f998cb561c2b", + "dynamic_external_or_depth_context_unresolved:contributor-scan:44620fe943880d4498587b283cf31a67b85fdeef53f59223299018c3666ae32b", + "context_projection_unavailable:contributor-scan:f553b646e7933b5f766d1187c3bb1aee241ea0734ec1c6addc08871c43bb7c64", + "context_projection_unavailable:contributor-scan:5f7e12488b0d469ffbaa32d1fa766352c8672ccd9e81f503480cec626d1f88b3", + "context_scope_empty:contributor-scan:86fed64323e502425165fd4b319a848da156ed4e1acbec6ac706b8f5afbdc1e9", + "context_scope_empty:contributor-scan:3273da703327df23094325bf9a120c3bbbc9388b4bbbec32a24b768f4d02669a", + "context_scope_empty:contributor-scan:cd57f10c8a3c69b40ea2832dc35837d8a7521f2a17b2936eccaab7d5bf482dd5", + "context_scope_empty:contributor-scan:fe62a9ab0e66c65344f94de1006ed30505bca06dcc7619ca717078a09afafb91", + "context_scope_empty:contributor-scan:f83f5339fbbb59939406f37a8053030f00333d809da78196e1dc177209fd0e70", + "context_projection_unavailable:contributor-scan:9cfce61b0d63c05676d62a7dac8c1362d78e2e686d6a8b53c56094bb2014ab96", + "context_projection_unavailable:contributor-scan:dd387d649e718c5d7cd9618fab6cf60bae452924f4e0b36b9b9ee9d4b9738ef8", + "dynamic_external_or_depth_context_unresolved:contributor-scan:b4e9704f8937686cd738c71fa7250b970fe64be89c75e36412cf4288e7911371", + "dynamic_external_or_depth_context_unresolved:contributor-scan:b2d3838be418d29c1ebf100d269591a89b6e74f81b822cff71d8a9d9548dea0c", + "dynamic_external_or_depth_context_unresolved:contributor-scan:e31733d8cd5174ecda373492fb9ed3f56fffdac8f869380c06ee9f185821918b", + "dynamic_external_or_depth_context_unresolved:contributor-scan:3c7b69a99d3765c95a713d27af4ac28d7808ca92543062610bdf24edd3643790", + "dynamic_external_or_depth_context_unresolved:contributor-scan:cd639186013fa4488043c42b05357e82425a3e889ac14679eef46b7388cecfd9", + "context_projection_unavailable:contributor-scan:b9195800d5bcce2e36a49a8f49f1674d9913dcb526cf50d1097ce4bea82407fe", + "context_projection_unavailable:contributor-scan:92d25db73aef0c89d7f6d45a21f56bf7c0b3854a0c8d19db7bc7247ed2244f78", + "context_scope_empty:contributor-scan:9eefbecbf32c98775e957013ff48c835781e52d91e576f81eec2c079bb61acd5", + "context_scope_empty:contributor-scan:9a71eba84ef99ab18d46121f3d387888c2ebd4054b85f3cc2fe90f8e75cb6538", + "context_scope_empty:contributor-scan:5fec8b431826e32ff8b6d3da66269f1e8561573bdbc8602f3fb20fd5e1bd8f44", + "context_scope_empty:contributor-scan:117d803b171807fb6ea627fb8eadd75abcb20606fc3acfea76def5897a986f35", + "context_scope_empty:contributor-scan:71a5b2e0b33d5bbb1ac73e6967b839cdfbea4de2fc828ec34ae8e40f8dfe96aa", + "context_projection_unavailable:contributor-scan:3175ca255e0323924a203bf8aa949691546196277c5976052ff0678a934fbffa", + "context_projection_unavailable:contributor-scan:7b355ea64f6dfd26a0ca7c433c31b1368e70d785f31c71caff4df6883245d409", + "dynamic_external_or_depth_context_unresolved:contributor-scan:3f00299f644f669c39db368d2a0df198f572ce9c8c08c85a94fd8c7db9cb5500", + "dynamic_external_or_depth_context_unresolved:contributor-scan:3e4b1620b66257264d51007170e6b0c49729b4731e3e1d236d188dc325ece52b", + "dynamic_external_or_depth_context_unresolved:contributor-scan:ef62a3e54636bc30ce5b75fb14e4753986000fed2eca3cb11aab716c88729f31", + "dynamic_external_or_depth_context_unresolved:contributor-scan:53635a42011bce8fec02af0d16ca0cf4b994332d1ce09551b99693a1ed59d247", + "dynamic_external_or_depth_context_unresolved:contributor-scan:0e4f65ec98ba41eedab3df06256eb227c558f31fee052a4266b3539f7af08275", + "context_projection_unavailable:contributor-scan:23a5e489bbb5740c0c685591e6b73a7096bb238cad11e8d7e84fc9f4b7f55207", + "context_scope_empty:contributor-scan:b92a8731fdc1bf7bd7bce4084892f87e4d9174acb204ee163cebebcfcae6a5d8", + "context_scope_empty:contributor-scan:2e55a819e3b67123ec2edfc304418d7fee50dae9c9b922c3a5d250d6f7c9662e", + "context_scope_empty:contributor-scan:3b6aa69186293835af4c700678ee9bb810de2ab8899c93cf245e01537742f5a1", + "context_scope_empty:contributor-scan:2377ef08168881eba6f35e080a5fed4608aa733dc9670f59d45ceee5ce08fa47", + "context_scope_empty:contributor-scan:2f26d70299414d84d00c95be2fd40758bce2e88a1fe89bedf898395894f501b9", + "context_projection_unavailable:contributor-scan:5c2048320f765e1756e7a743afa544a602d648311f4bb8495f3d43de0f8cea49", + "context_scope_empty:contributor-scan:e08780a749f547c02460053e2a258b64f89ad494c042171f2e8a426f3c9a0520", + "context_scope_empty:contributor-scan:97ae7d3c4e6969d04821c5ed50c21a914379c1a1b3b5e5dfd38b26438e249f2f", + "context_scope_empty:contributor-scan:6e181d25ef0f246585e55b5eb77c8e6191fb135af98e816b0abd841134bd5d57", + "context_scope_empty:contributor-scan:271afe681be4d6c7c09cf9b4010888525eb1efb66cc2501215894c15e2898519", + "context_scope_empty:contributor-scan:e8e670d05231f561f6a2ea1c1e08a560a96bb2674ac72851dc29da697ac169ca", + "context_projection_unavailable:contributor-scan:8726ea1166fc378ce1bc6bc99ba52e93416fb5d1fefd812ea29de503077d548f", + "context_scope_empty:contributor-scan:3cab3aa4cc41da609f367c1c57db872b8cfcb7b2f323516266bb3d8fa36642b4", + "context_scope_empty:contributor-scan:c5a186e0f17d7af521efa20982916fc813e1b7d05295c3da7730ef6b5a48cab7", + "context_scope_empty:contributor-scan:1738964f08db1fbe6b5965f7721be058d80a4e1ec976ac743059a5b31d6cd7a7", + "context_scope_empty:contributor-scan:7f10a07aaba3a86425dce315a22df012363cd11065229f983530e2156fd77442", + "context_scope_empty:contributor-scan:d97c168cb31e3390b66dc4f61020d70ef36ec9bdc679c2b64a79dfc648238207", + "context_projection_unavailable:contributor-scan:0db0f54012e0427209e8a7b14f787419a4a6cf8cfbfd7e985e34898c1dcc3b5b", + "dynamic_external_or_depth_context_unresolved:contributor-scan:82d9cb547ff915752dd430f4b91c03970ed3cc9e376a93aafea77e196cd1998b", + "dynamic_external_or_depth_context_unresolved:contributor-scan:88f50df0343fa95532cb3b9d60cba5cee24c7e245bccc8ea06d8803d43f99f75", + "dynamic_external_or_depth_context_unresolved:contributor-scan:525d6f86a91046bc79ec5e19e21eeb42edb94aa9c1a3a6ff669455aebbefdea1", + "dynamic_external_or_depth_context_unresolved:contributor-scan:a8387bac47d88608c9a58ab2916857b9fc2fd8a1d52fc5d16f79bb4ab8be40e4", + "dynamic_external_or_depth_context_unresolved:contributor-scan:57ea90041e625ad5368caca533f024381987b1afd81d092b28eed73f0c8c5499", + "context_projection_unavailable:contributor-scan:3eead9155ab4b5705fa08efb59ff16f1705d2eca4a8d707e4f633731bdccd8e5", + "dynamic_external_or_depth_context_unresolved:contributor-scan:e1d445eda8d84d9b3972b06b657c3be233a2c77a2cc146988c3d076b11b2f906", + "dynamic_external_or_depth_context_unresolved:contributor-scan:0e6a4376c4e70a27e5bd632511b761c70d8fe6776f93691d26262e169965152d", + "dynamic_external_or_depth_context_unresolved:contributor-scan:94df997fee522b612e12ed3596618cf27aa3a3109bb459f16eb6b6c136538295", + "dynamic_external_or_depth_context_unresolved:contributor-scan:6397f7955219931bf05a5b8407360c4b71ae62002aa273ed85db15276dcfb613", + "dynamic_external_or_depth_context_unresolved:contributor-scan:a3880c761ca9d0019b08cf255540fa495d5d69593e9bd73fa6eecb41dae42859", + "context_projection_unavailable:contributor-scan:33e09133f59de09d87866389533ef005fc2c34de8a4cd68ea1d528d3c6df4165", + "dynamic_external_or_depth_context_unresolved:contributor-scan:58ca35a7300e2d7edd5acee6de464da5593d81380aff9e99fad2bd1d8c0dee68", + "dynamic_external_or_depth_context_unresolved:contributor-scan:2d8220d8b7f51f9f1082d903f592ff051faa4c37a46fc131c31da1dd2a233ed0", + "dynamic_external_or_depth_context_unresolved:contributor-scan:0148345468c538297511e912438b1ff6f0bcc70d8058f87ff70b5f944946395f", + "dynamic_external_or_depth_context_unresolved:contributor-scan:cebf3f7bf74150ce4fbddbc693fd6881a8d18aacbb54b8e33097580fb330e273", + "dynamic_external_or_depth_context_unresolved:contributor-scan:b8213e35bb6cffbddb211df8497d7c37f33a800f3a729846b041155c2f82c7d0", + "context_projection_unavailable:contributor-scan:33c0d02c59cebf05005b834b6354b9d11184238c087a253b86e5479209a57d61", + "dynamic_external_or_depth_context_unresolved:contributor-scan:cfa8f4a6860419485b27245e5f66228003a0f4fce6797dc9e7fb5d938bb61100", + "dynamic_external_or_depth_context_unresolved:contributor-scan:633e780f4bf491dd0635d773334d7d2ca15a670d0d78681871dd88d77a2132e7", + "dynamic_external_or_depth_context_unresolved:contributor-scan:0b51f52c0d43beecb81fb62c82a17850a11aa6faab7527ea4833efffb0b4a8c4", + "dynamic_external_or_depth_context_unresolved:contributor-scan:c295b4b3d54eb3f602e5b7b6f302dd9c66cad44282af938a158887a4b64e6400", + "dynamic_external_or_depth_context_unresolved:contributor-scan:a9979735925dbdc75c01667c69443c96f645e530ca0fbb182c1d515093799d43", + "context_projection_unavailable:contributor-scan:9fffb2f1348a76b735b269ce0961460b780c22882cf471ae5f1c1fafea3ae48f", + "dynamic_external_or_depth_context_unresolved:contributor-scan:d06f59868c9200c0d32396ee176a3260ba3940e0fef382b1edeb189030ab043a", + "dynamic_external_or_depth_context_unresolved:contributor-scan:44110d2cf36273a7c292ad5a9fc73bfa40d5de4b0188a8bd5d28f6439e078ef7", + "dynamic_external_or_depth_context_unresolved:contributor-scan:7fffb43180730947e0ce0f17899806d2998df9a70c9f9850a0bf0d5ab97da3f8", + "dynamic_external_or_depth_context_unresolved:contributor-scan:93b7d5e9121a06853fd8e0b65a846bf7497ec5c9e769db2f721ce40770a5ad8b", + "dynamic_external_or_depth_context_unresolved:contributor-scan:e3c15c181160b97750a748f9b1ef062574f0899d602333c7c543efe7be6687c6", + "context_projection_unavailable:contributor-scan:483fc4310a9c5e101c6e1592299caba75d191c524516cf48094705cacaaffa1c", + "context_projection_unavailable:contributor-scan:88260afe57f54f14752828d92501cd736bd27ff95389912283e88faa97a75269", + "context_projection_unavailable:contributor-scan:529b7bf7e34de1f5689bba72a58407f3731bd2cee8af78a53dbd15497faf9d40", + "dynamic_external_or_depth_context_unresolved:contributor-scan:d5066d261ad12b1f8692fbfc1876a6d30837395cbb121351d9ba61cf1b20cea1", + "dynamic_external_or_depth_context_unresolved:contributor-scan:b0f968a432800d13c601c7520bb36cc9ba52b24e2a09109fecc34cbfecdbe9ea", + "dynamic_external_or_depth_context_unresolved:contributor-scan:f82bb8ca1a7fd8998886a8fe8f00084f108125394b9621c6cd19d92f23fd8c3d", + "dynamic_external_or_depth_context_unresolved:contributor-scan:53df3ed8b2dd7c46d8c42882a6096bccf1d6c966cbef8158b45f4390085a00c0", + "dynamic_external_or_depth_context_unresolved:contributor-scan:117aa85101fd69718713ffd12a7b4cbaa9bceb86cb52731e69ffb9ef83f80750", + "context_projection_unavailable:contributor-scan:40a86c0d81cb5654b51d4447a6e348a246decc7780581a9aa2d60c2f768e1de7", + "context_projection_unavailable:contributor-scan:378243809750b9f1750d2d1f0f9204ca18d490e7458afff003f86c8cbb255dbc", + "dynamic_external_or_depth_context_unresolved:contributor-scan:90565ee1486201dcb600733c58934abb476fb873581c0e3dae8aff2ea1ebfe5b", + "dynamic_external_or_depth_context_unresolved:contributor-scan:f5dfb739730436eef0a9ed0f8c1c7b982469df5d6c042d321de52ace8d3a2c15", + "dynamic_external_or_depth_context_unresolved:contributor-scan:34c56c75a6772748996ada2bb9f2ed985d65a7c6de0087e220f45285846cbb73", + "dynamic_external_or_depth_context_unresolved:contributor-scan:42fad701f64b0f289a69aab6d432cf25ea365f4966a478216977ccbd5e25c19b", + "dynamic_external_or_depth_context_unresolved:contributor-scan:ebf4109ffcd719505b5871ad734ed07d7d1718a173977d31106050ae7bef2ff1", + "context_projection_unavailable:contributor-scan:df543c94ec4b21c6fb74b805b76a1f3c855d222faa8599c060f8c85020e320f5", + "context_projection_unavailable:contributor-scan:ce720073f337bb4893fa3a3b1e2f8e86696e5179617000f4f47cb343922ddd3f", + "dynamic_external_or_depth_context_unresolved:contributor-scan:786a19bb3612b1d1110134aefbe6968e75bb3340fe8d3994fcbd0e905bffc18c", + "dynamic_external_or_depth_context_unresolved:contributor-scan:256345974cd78d13520d2e43ca98d1ca0d650baf88aaa6b8db75c80e6505b101", + "dynamic_external_or_depth_context_unresolved:contributor-scan:2648c4f69b677c285297aca3107a6770c0a4bc1689dde13e6b5b59e8af91940b", + "dynamic_external_or_depth_context_unresolved:contributor-scan:752195dc0695f44531be939deb0f9940a9eb5273117c7705768c2b5edd6a70e5", + "dynamic_external_or_depth_context_unresolved:contributor-scan:1e4da8e8647caba2f3b358ddd5c25936b46d87b9e118935597be60fa58c6ca4a", + "context_projection_unavailable:contributor-scan:6dbf2e32d098163480ab02a98344750fa5daafc7c66adf4fe90d0eaeeff4f86f", + "dynamic_external_or_depth_context_unresolved:contributor-scan:4e93b1d6b6d8ee75bf09aa1789933ef1248397e1e3df6ddf8af74eaa04d59c3c", + "dynamic_external_or_depth_context_unresolved:contributor-scan:6e8f38e9b80a674c58e2d85fb797e0357cd1414528a175f8e06a10b15455bc91", + "dynamic_external_or_depth_context_unresolved:contributor-scan:d397c5433f574c1a5f9d5c219c91131f3823694a50e04a6a2d896458b76f2e2d", + "dynamic_external_or_depth_context_unresolved:contributor-scan:f50cc41a1fbfe1a27916b010ce35aed4d7f2803e571225ea1382facd5a603139", + "dynamic_external_or_depth_context_unresolved:contributor-scan:f375dc182eb989bea2dfe5c2e26a351c3e2c2ea5c8f11447f34004c5c5ca2f27", + "context_projection_unavailable:contributor-scan:7171793b9c6db5102f6088265373a7c57778f18f440380255a390d5745113652", + "dynamic_external_or_depth_context_unresolved:contributor-scan:494461bfc7dcc180d454bacd79e12b4a12598e3cf2594b4a96001188df71f27c", + "dynamic_external_or_depth_context_unresolved:contributor-scan:4ccf4da37de3d59a491675a6cddcc6323deb914a8f458fe6bbd20f4ab824fa69", + "dynamic_external_or_depth_context_unresolved:contributor-scan:74d21ad3cac9cec15832b98239679ab6360d84ae3d2a36a3f02307d647e7719c", + "dynamic_external_or_depth_context_unresolved:contributor-scan:b7b45314da2fe600d6377531a57acfd3f5d44c2f0e8641d67f0c9288bab8a3ea", + "dynamic_external_or_depth_context_unresolved:contributor-scan:7e9025449366165d1e1a7a84b15c89acdb7220595af59d776716b7caf76b517a", + "vendor_semantics_unresolved", + "analysis_incomplete" + ], + "timings": { + "deadline_seconds": 900.0, + "cancellation_allowance_seconds": 2.0, + "resolution_seconds": 0.03026329993735999, + "provenance_seconds": 0.39072559704072773, + "snapshot_seconds": 1.0563124530017376, + "snapshot_reuses": 0, + "discovery_seconds": 3.659473387990147, + "discovery_hits": 1, + "preparation_seconds": 4.7403441480128095, + "head_seconds": 239.9133275289787, + "base_seconds": 8.054935891064815, + "admission_seconds": 0.009176922030746937, + "recorded_vetoes_seconds": 7.453479420975782, + "cleanup_seconds": 0.009559739963151515, + "graph_hits": 1, + "query_hits": 756, + "total_seconds": 260.6400064789923 + }, + "analyzed": true, + "reported_as_new_regression": false + } + } + ], + "verdict": { + "raw_witness_present": true, + "fixed_twin_quiet": true, + "unchanged_not_new_regression": true, + "all_recorded": true, + "kill_criterion_triggered": false, + "note": "M1a exit evidence only when every entry is true; a fixed twin that timed out or was not analyzed fails M1a." + }, + "bundle": { + "path": "2026-09-16-nodegoat-m1a-recorded-vetoes.json.gz", + "sha256": "e2be26ab71dff4475947be28e787b78cbb19a69c44643de8d15739a3e52c91e4", + "files": 11 + } +} diff --git a/benchmarks/measurements/2026-09-16-nodegoat-m1a-recorded-vetoes.json.gz b/benchmarks/measurements/2026-09-16-nodegoat-m1a-recorded-vetoes.json.gz new file mode 100644 index 0000000..f897387 Binary files /dev/null and b/benchmarks/measurements/2026-09-16-nodegoat-m1a-recorded-vetoes.json.gz differ diff --git a/benchmarks/push/README.md b/benchmarks/push/README.md index 0da4e84..37abd52 100644 --- a/benchmarks/push/README.md +++ b/benchmarks/push/README.md @@ -189,6 +189,39 @@ Exit 1 with a complete scorecard is measured NO-GO; a missing scorecard is an in failure. Three samples per workload on development NodeGoat cannot independently qualify a production language/framework/family or establish broad multi-project performance. +### M1a recorded-veto diagnosis (task 9.2) + +`m1a_record_vetoes.py` replays the pinned NodeGoat vulnerable, fixed and unchanged +revisions through the production `ousast pre-push --base/--head` command under +`--experimental-record-vetoes`. The flag records each comparison and admission veto per +raw finding instead of applying it; it is off by default, refused in Git stdin mode, and +enables no hook capability. Expected operation and outcome for all three comparisons are +written to `m1a-record.json` before the first scan. + +```sh +docker run --rm --network none --memory 3g --entrypoint python \ + -v "$PWD:/context:ro" \ + -v "$HOME/.cache/openultrasast/repos:/cache:ro" \ + -v /absolute/writable/results:/results \ + openultrasast:dev /context/benchmarks/push/m1a_record_vetoes.py \ + --manifest /context/benchmarks/push/inputs.json --cache /cache \ + --out /results/new-m1a --deadline 900 +``` + +The output directory must not exist. `--deadline` is an explicitly named development +budget: it obtains witnesses and cannot satisfy or measure the 30-second hook latency +gate. Each case retains the full artifact, stdout/stderr, exact base/head pins, source +byte receipts and the partition census. The record states, per case, the expectation +declared beforehand against the observed outcome, and for every finding the exact list of +vetoes that fired with whether each was recorded or still applied. + +Exit **0** requires the raw witness present on the vulnerable revision, the fixed twin +genuinely analyzed and quiet, the unchanged revision analyzed and not reported as a new +regression, and a recorded evaluation for all three. A timed-out or unanalyzed fixed twin +fails M1a and triggers the milestone's kill criterion; silence is never a pass. Lifted +vetoes are diagnostic only. This run admits no defect, enables no capability, and cannot +qualify Node, PHP or Python. + ### Capability qualification (task 8.3) The same `measure.py` replay instrument accepts `--selection development` (the diff --git a/benchmarks/push/m1a_record_vetoes.py b/benchmarks/push/m1a_record_vetoes.py new file mode 100644 index 0000000..326d13d --- /dev/null +++ b/benchmarks/push/m1a_record_vetoes.py @@ -0,0 +1,260 @@ +"""M1a: replay the pinned NodeGoat vulnerable/fixed/unchanged revisions with vetoes recorded. + +Prepares the same private bare repository and authored pins as `measure.py`, records the +expected operation and outcome for each comparison BEFORE any scanner run, then invokes the +production `ousast pre-push --base/--head` replay under `--experimental-record-vetoes` with an +explicitly named development budget. The output is a replayable three-revision record with +exact revision/question/operation provenance, the per-finding veto list, and readable source +and census receipts. It is development evidence for release milestone M1a only: nothing here +is an alert, an admission, a capability or a hook-latency measurement. +""" + +from __future__ import annotations + +import argparse +import hashlib +import json +import os +import platform +import subprocess +import sys +import time +from pathlib import Path +from typing import Any + +sys.path.insert(0, str(Path(__file__).resolve().parent)) + +from measure import git, pin_snapshot # noqa: E402 + +from openultrasast.model.scan import ScanBudget # noqa: E402 +from openultrasast.push.runner import _provenance # noqa: E402 +from openultrasast.push.vetoes import FLAG, LABEL # noqa: E402 +from openultrasast.push_inputs import validate_manifest # noqa: E402 +from openultrasast.repos import checkout_path, load_repo_recipe # noqa: E402 + +TARGET = {"path": "app/routes/contributions.js", "function": "handleContributionsUpdate", "family": "injection"} +WITNESS_LINES = (32, 33, 34) +# Declared before running. "quiet" means no raw injection finding at the target path in the head; +# "unchanged" means the raw findings remain but the recorded novelty is not new/worsened. +PLAN: tuple[dict[str, Any], ...] = ( + { + "id": "nodegoat-introduce", + "base": "nodegoat-fixed", + "head": "nodegoat-vulnerable", + "expected": "raw injection finding at the three eval lines with recorded novelty new; every applied veto listed", + "expected_head_findings_at_target": len(WITNESS_LINES), + }, + { + "id": "nodegoat-repair", + "base": "nodegoat-vulnerable", + "head": "nodegoat-fixed", + "expected": "fixed twin analyzed and quiet: target questions answered with no injection finding; three base-only findings", + "expected_head_findings_at_target": 0, + }, + { + "id": "nodegoat-benign", + "base": "nodegoat-vulnerable", + "head": "nodegoat-benign", + "expected": "unchanged backlog: raw findings remain with recorded novelty unchanged, never new or worsened", + "expected_head_findings_at_target": len(WITNESS_LINES), + }, +) + + +def write(path: Path, data: object) -> None: + path.write_text(json.dumps(data, indent=2, allow_nan=False) + "\n") + + +def receipts(bare: Path, oid: str, path: str) -> dict[str, object]: + blob = git(bare, "cat-file", "blob", f"{oid}:{path}") + if not blob: + raise ValueError("empty source blob") + return {"path": path, "bytes": len(blob), "sha256": hashlib.sha256(blob).hexdigest(), "lines": blob.count(b"\n")} + + +def summarize(case: dict[str, Any], artifact: dict[str, Any]) -> dict[str, Any]: + experimental = artifact.get("experimental") or {} + head_scans = [s["scan"] for s in artifact["scans"] if s["side"] == "head"] + base_scans = [s["scan"] for s in artifact["scans"] if s["side"] == "base"] + target_head = [ + f for s in head_scans for f in s["findings"] if f["family"] == TARGET["family"] and f["site"].startswith(TARGET["path"] + ":") + ] + target_questions = [ + q + for s in head_scans + for q in s["question_outcomes"] + if q["identity"]["path"] == TARGET["path"] and q["identity"]["family"] == TARGET["family"] + ] + census = [ + {"language": p.get("language"), "frontend": p.get("frontend"), "files": len(p.get("paths", ())), "complete": p.get("complete")} + for s in head_scans + for p in s.get("partitions", ()) + ] + raw_findings = experimental.get("findings") + findings: list[dict[str, Any]] = raw_findings if isinstance(raw_findings, list) else [] + target_recorded = [f for f in findings if f["family"] == TARGET["family"] and f["site"].startswith(TARGET["path"] + ":")] + observed = len(target_head) + analyzed = bool(target_questions) and all(q["raw_rows_json"] is not None for q in target_questions) + outcome = { + "expected": case["expected"], + "expected_head_findings_at_target": case["expected_head_findings_at_target"], + "observed_head_findings_at_target": observed, + "target_questions_answered": analyzed, + "target_question_outcomes": [ + {"function": q["identity"]["function"], "status": q["status"], "reason": q["reason"]} for q in target_questions + ], + "head_scan_completed": bool(head_scans) and all(s.get("scope") is not None for s in head_scans), + "base_scan_present": bool(base_scans), + "production_finding_status": artifact["result"]["finding_status"], + "production_coverage_status": artifact["result"]["coverage_status"], + "recorded_status": experimental.get("status"), + "recorded_target_findings": [ + { + "site": f["site"], + "witness": f["witness"], + "question_function": (f.get("question") or {}).get("function"), + "operation_method": f.get("operation_method"), + "base_location": f.get("base_location"), + "production": [f["production_novelty"], f["production_reason"], f["production_admission"]], + "recorded": [f["recorded_novelty"], f["recorded_reason"], f["recorded_admission"]], + "vetoes": f["vetoes"], + } + for f in target_recorded + ], + "base_only_findings": experimental.get("base_only_findings", []), + "census": census, + "coverage_reasons": artifact["admission"]["coverage_reasons"], + "timings": artifact["timings"], + } + if case["id"] == "nodegoat-repair": + # Silence from failure is not a pass: the fixed twin must have been analyzed. + outcome["fixed_twin_quiet"] = ( + analyzed and observed == 0 and not any("deadline" in r for r in artifact["admission"]["coverage_reasons"]) + ) + elif case["id"] == "nodegoat-benign": + # Silence from a timeout must not read as "no regression reported". + outcome["analyzed"] = analyzed and experimental.get("status") == "evaluated" + outcome["reported_as_new_regression"] = any(f["recorded"][0] in ("new", "worsened") for f in outcome["recorded_target_findings"]) + else: + outcome["raw_witness_present"] = observed == case["expected_head_findings_at_target"] and all( + any(f["site"].startswith(f"{TARGET['path']}:{line}:") for f in target_head) for line in WITNESS_LINES + ) + return outcome + + +def main() -> int: + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--manifest", type=Path, required=True) + parser.add_argument("--cache", type=Path, required=True) + parser.add_argument("--out", type=Path, required=True) + parser.add_argument("--deadline", type=float, default=900.0, help="explicitly named development budget; never the hook gate") + args = parser.parse_args() + args.out.mkdir(parents=True, exist_ok=False) + out = args.out.resolve() + manifest = json.loads(args.manifest.read_bytes()) + validation = validate_manifest(args.manifest, cache_root=args.cache, fetch=False) + write(out / "input-validation.json", validation) + snapshots = {s["id"]: s for s in manifest["snapshots"]} + needed = ("nodegoat-vulnerable", "nodegoat-fixed", "nodegoat-benign") + ready = {s["id"]: s["status"] for s in validation["snapshots"] if s["id"] in needed} + if any(ready.get(sid) != "ready" for sid in needed): + raise SystemExit(f"NodeGoat snapshots not ready: {ready}") + recipe = load_repo_recipe(args.manifest.parent / snapshots[needed[0]]["recipe"]) + source = checkout_path(recipe, args.cache) + bare = out / "objects.git" + bare.mkdir() + git(bare, "init", "--bare") + objects = git(source, "rev-parse", "--path-format=absolute", "--git-path", "objects").decode().strip() + (bare / "objects/info/alternates").write_text(objects + "\n") + pins = {sid: pin_snapshot(bare, recipe.commit, snapshots[sid]) for sid in needed} + settings = ScanBudget(max_model_calls=0, max_regions=500, order_by_evidence=True) + installed = _provenance(bare, settings) + record: dict[str, Any] = { + "schema_version": 1, + "label": LABEL, + "milestone": "M1a", + "flag": FLAG, + "development_budget_seconds": args.deadline, + "budget_note": "Explicitly named development budget; this run cannot satisfy or measure the 30s hook latency gate.", + "source_commit": recipe.commit, + "pins": pins, + "target": TARGET, + "witness_lines": list(WITNESS_LINES), + "plan": [dict(case, base_oid=pins[case["base"]], head_oid=pins[case["head"]]) for case in PLAN], + "source_receipts": {sid: receipts(bare, oid, TARGET["path"]) for sid, oid in pins.items()}, + "provenance": installed, + "hardware": {"platform": platform.platform(), "cpu_affinity": sorted(os.sched_getaffinity(0))}, + "instrument_sha256": hashlib.sha256(Path(__file__).read_bytes()).hexdigest(), + "cases": [], + } + write(out / "m1a-record.json", record) # Expectations and pins are on disk before any scan. + cases: list[dict[str, Any]] = [] + for case in PLAN: + artifact = out / (case["id"] + ".json") + command = [ + sys.executable, + "-m", + "openultrasast.cli", + "pre-push", + str(bare), + "--base", + pins[case["base"]], + "--head", + pins[case["head"]], + "--artifact", + str(artifact), + "--deadline", + str(args.deadline), + "--cancellation-allowance", + "2", + "--max-regions", + "500", + "--cache-dir", + str(out / "cache"), + FLAG, + ] + started = time.monotonic() + process = subprocess.run(command, capture_output=True, text=True, timeout=args.deadline + 30) + elapsed = time.monotonic() - started + (out / (case["id"] + ".stdout")).write_text(process.stdout) + (out / (case["id"] + ".stderr")).write_text(process.stderr) + entry: dict[str, Any] = { + "case_id": case["id"], + "command": command, + "base_oid": pins[case["base"]], + "head_oid": pins[case["head"]], + "exit_code": process.returncode, + "elapsed_seconds": elapsed, + "terminal": process.stdout, + "artifact": artifact.name if artifact.is_file() else None, + } + if artifact.is_file(): + data = json.loads(artifact.read_text()) + entry["provenance_matches_installed"] = all( + data["provenance"].get(k) == installed[k] for k in ("engine", "facts", "queries", "policy", "core", "semantics") + ) + entry["outcome"] = summarize(case, data) + else: + entry["outcome"] = {"instrument_error": "missing_artifact"} + cases.append(entry) + record["cases"] = cases + write(out / "m1a-record.json", record) + print(json.dumps({"case": case["id"], "elapsed_seconds": round(elapsed, 3), "exit": process.returncode}), flush=True) + outcomes: dict[str, dict[str, Any]] = {str(c["case_id"]): c["outcome"] for c in cases} + introduce, repair, benign = (outcomes.get(k, {}) for k in ("nodegoat-introduce", "nodegoat-repair", "nodegoat-benign")) + verdict: dict[str, Any] = { + "raw_witness_present": bool(introduce.get("raw_witness_present")), + "fixed_twin_quiet": bool(repair.get("fixed_twin_quiet")), + "unchanged_not_new_regression": bool(benign.get("analyzed")) and not benign.get("reported_as_new_regression", True), + "all_recorded": all(o.get("recorded_status") == "evaluated" for o in outcomes.values()), + "kill_criterion_triggered": bool(repair) and not repair.get("fixed_twin_quiet"), + "note": "M1a exit evidence only when every entry is true; a fixed twin that timed out or was not analyzed fails M1a.", + } + record["verdict"] = verdict + write(out / "m1a-record.json", record) + print(json.dumps(verdict), flush=True) + return 0 if all(v for k, v in verdict.items() if k not in ("note", "kill_criterion_triggered")) else 1 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/src/openultrasast/cli.py b/src/openultrasast/cli.py index 65cb7ff..c096828 100644 --- a/src/openultrasast/cli.py +++ b/src/openultrasast/cli.py @@ -132,6 +132,12 @@ def main(argv: list[str] | None = None) -> int: replay_parser.add_argument("--max-regions", type=int, default=500) replay_parser.add_argument("--mode", choices=("advisory", "blocking"), default="advisory") replay_parser.add_argument("--incomplete-coverage", choices=("allow", "block"), default="allow") + replay_parser.add_argument( + "--experimental-record-vetoes", + action="store_true", + help="explicit --base/--head replay only: record each comparison and admission veto per raw finding instead of " + "applying it; output is labeled experimental, changes no result and enables no hook capability", + ) scan = subparsers.add_parser("scan", help="scan a local repository") scan.add_argument("path", type=Path) @@ -235,9 +241,11 @@ def main(argv: list[str] | None = None) -> int: ) if args.base and args.prior_hook: parser.error("--prior-hook requires Git stdin mode") + if args.experimental_record_vetoes and not args.base: + parser.error("--experimental-record-vetoes requires explicit --base/--head replay; it is never a hook capability") prior_data = None if args.base: - delivery = replay(args.path, base=args.base, head=args.head, **options) + delivery = replay(args.path, base=args.base, head=args.head, record_vetoes=args.experimental_record_vetoes, **options) else: # multiprocessing closes sys.stdin in its child; duplicate the Git pipe first. with os.fdopen(os.dup(0), "rb") as stream: diff --git a/src/openultrasast/push/report.py b/src/openultrasast/push/report.py index 2a56fa2..9340f4c 100644 --- a/src/openultrasast/push/report.py +++ b/src/openultrasast/push/report.py @@ -41,9 +41,15 @@ class PushReport: change_context: ChangeContext | None = None change_contexts: tuple[ChangeContext, ...] = () model_assistance: Mapping[str, object] = field(default_factory=dict) + # Labeled M1a recorded-veto evaluation. Present only under the explicit replay flag; + # it is retained beside the decision and never feeds admission or enforcement. + experimental: Mapping[str, object] = field(default_factory=dict) def __post_init__(self) -> None: object.__setattr__(self, "model_assistance", MappingProxyType(dict(self.model_assistance))) + object.__setattr__(self, "experimental", MappingProxyType(dict(self.experimental))) + if self.experimental and not str(self.experimental.get("label", "")).startswith("EXPERIMENTAL"): + raise ValueError("experimental evaluation output must carry its experimental label") object.__setattr__(self, "provenance", MappingProxyType(dict(self.provenance))) object.__setattr__(self, "timings", MappingProxyType(dict(self.timings))) ids = tuple(defect.defect_id for defect in self.admission.defects) @@ -126,6 +132,7 @@ def _write_artifact(report: PushReport, target: Path, temporary: Path, connectio "timings": dict(report.timings), "timing_scope": "Caller stage measurements; publication and rendering duration is returned in ReportDelivery.", "resolution": report.resolution.to_payload() if report.resolution else None, + "experimental": dict(report.experimental), } json.dump(payload, stream, ensure_ascii=True, allow_nan=False, indent=2) stream.write("\n") @@ -187,6 +194,20 @@ def _short(value: str, limit: int = 180) -> str: return json.dumps(clipped, ensure_ascii=True)[1:-1] +def _experimental_line(experimental: Mapping[str, object]) -> str: + if experimental.get("status") != "evaluated": + return f"recorded-veto evaluation was not produced ({_short(str(experimental.get('reason', 'not_evaluated')))}); not an alert." + findings = experimental.get("findings") + count = len(findings) if isinstance(findings, list) else 0 + vetoes = sum(len(f.get("vetoes", [])) for f in findings if isinstance(f, dict)) if isinstance(findings, list) else 0 + base = experimental.get("base_only_findings") + quiet = len(base) if isinstance(base, list) else 0 + return ( + f"recorded-veto evaluation retained {count} raw finding(s) with {vetoes} recorded veto(es) and " + f"{quiet} base-only finding(s) in the detailed result; recorded, not applied; not an alert." + ) + + def render_report(report: PushReport, *, artifact: Path | None, error: str | None = None) -> str: lines: list[str] = [] defects = report.admission.defects @@ -250,6 +271,8 @@ def render_report(report: PushReport, *, artifact: Path | None, error: str | Non notices.append("Details could not be saved. Retry with a writable artifact path and available reporting time.") if notices: lines.append("Notice: " + " ".join(notices)) + if report.experimental: + lines.append("Experimental: " + _experimental_line(report.experimental)) if artifact is not None: lines.append("Details: " + _short(str(artifact), 4096)) if report.result.push_disposition == "block": diff --git a/src/openultrasast/push/runner.py b/src/openultrasast/push/runner.py index adcdc01..735fb85 100644 --- a/src/openultrasast/push/runner.py +++ b/src/openultrasast/push/runner.py @@ -8,7 +8,7 @@ import os import pickle import selectors import time -from collections.abc import Callable +from collections.abc import Callable, Sequence from contextlib import nullcontext from dataclasses import asdict, replace from pathlib import Path @@ -18,10 +18,10 @@ from openultrasast.config import PushConfig from openultrasast.cpg.artifact import digest_value from openultrasast.cpg.backend import JoernBackend, engine_runtime_identity, joern_version from openultrasast.mapping import analyze_entry_points -from openultrasast.model.contracts import ExecutionBudget +from openultrasast.model.contracts import ChangeContext, ExecutionBudget from openultrasast.model.layout import layout_facts from openultrasast.model.regions import ScanRegion, regions_for -from openultrasast.model.scan import ScanBudget, scan_repository +from openultrasast.model.scan import ModelScanResult, ScanBudget, scan_repository from openultrasast.model.shipped import declared_sources from openultrasast.preprocess import build_file_target, enumerate_source_files from openultrasast.push.cache import ArtifactCache, SemanticKeys @@ -32,6 +32,7 @@ from openultrasast.push.policy import ( AdmissionCandidate, AdmissionResult, CapabilityKey, + DeltaComparison, admission_push_result, admit_candidates, compare_targeted_base, @@ -40,6 +41,7 @@ from openultrasast.push.policy import ( from openultrasast.push.report import PushReport, ReportDelivery, ScanRecord, _completed_scan, deliver_report, render_report from openultrasast.push.reuse import ReusingBackend, declaration_identity, discovery from openultrasast.push.snapshot import SnapshotAdapter +from openultrasast.push.vetoes import FLAG, LABEL, record_vetoes _T = TypeVar("_T") @@ -168,6 +170,31 @@ def _admit(candidates: tuple[AdmissionCandidate, ...], provenance: dict[str, str return result +def _record( + head: ModelScanResult, + delta: DeltaComparison, + context: ChangeContext, + comparison: PushComparison, + reasons: Sequence[str], + admission: AdmissionResult, + provenance: dict[str, str], +) -> dict[str, object]: + """Experimental M1a: the same policy over lifted evidence, reported only, never admitted.""" + registry = load_registry(current=provenance) + report = record_vetoes( + head=head, + base=delta.base_scan, + context=context, + comparison=comparison, + semantics=delta.semantics, + production=delta.candidates, + production_admission={d.candidate.delta.defect_id: d.reasons for d in admission.dispositions}, + coverage_reasons=tuple(dict.fromkeys(reasons)), + capabilities=registry.capabilities, + ) + return report.to_payload() + + def _discovery_identity() -> str: root = Path(__file__).resolve().parents[1] # Discovery invokes the shipped mapper, preprocessing, layout and family specs. @@ -187,8 +214,15 @@ def _analyze( cache_dir: Path | None = None, execution_budget: ExecutionBudget, resolved: PushComparison | None = None, + record_vetoes: bool = False, ) -> PushReport: - """Run a single explicit comparison; exit policy never stands for coverage.""" + """Run a single explicit comparison; exit policy never stands for coverage. + + `record_vetoes` is the task-local M1a evaluation flag: after the production result is + decided, the same policy is rerun over lifted evidence and every veto is recorded in + the artifact's labeled `experimental` section. It changes no result, admission or + eligibility, and the runner rejects it outside explicit replay. + """ config = config or PushConfig() if max_regions < 1: raise ValueError("max_regions must be positive") @@ -208,6 +242,7 @@ def _analyze( admission = AdmissionResult((), (), ()) comparison = resolved context = None + experimental: dict[str, object] = {"label": LABEL, "flag": FLAG, "status": "not_evaluated"} if record_vetoes else {} timings: dict[str, float] = { "deadline_seconds": config.deadline_seconds, "cancellation_allowance_seconds": config.cancellation_allowance_seconds, @@ -340,13 +375,25 @@ def _analyze( ) admission = _prepare(lambda: _admit(candidates, provenance), budget) timings[stage + "_seconds"] = time.monotonic() - stage_started + if record_vetoes: + stage, stage_started = "recorded_vetoes", time.monotonic() + assert context is not None + recorded = _prepare( + lambda: _record(head_scan, delta, context, comparison, tuple(reasons), admission, provenance), budget + ) + experimental = {**recorded, "status": "evaluated"} + timings[stage + "_seconds"] = time.monotonic() - stage_started stage, stage_started = "cleanup", time.monotonic() timings[stage + "_seconds"] = time.monotonic() - stage_started except Exception as error: reasons.append(stage + "_failed:" + type(error).__name__) timings[stage + "_seconds"] = time.monotonic() - stage_started + if experimental.get("status") == "not_evaluated": + experimental["reason"] = reasons[-1] if time.monotonic() >= budget.deadline_monotonic: reasons.append("deadline_exhausted") + if experimental.get("status") == "not_evaluated": + experimental.setdefault("reason", "deadline_exhausted") timings["graph_hits"] = sum(item.graph_hits for item in reused) timings["query_hits"] = sum(item.query_hits for item in reused) head_records = [r.scan for r in records if r.side == "head"] @@ -368,8 +415,16 @@ def _analyze( analyses = (ComparisonAnalysis(comparison, scopes, completed, coverage),) result = admission_push_result(admission, analyses, config=config) timings["total_seconds"] = time.monotonic() - started - report = PushReport(result, admission, tuple(records), provenance, timings, snapshots=tuple(manifests), change_context=context) - return report + return PushReport( + result, + admission, + tuple(records), + provenance, + timings, + snapshots=tuple(manifests), + change_context=context, + experimental=experimental, + ) def _deliver(repository: Path, report: PushReport, artifact: Path, budget: ExecutionBudget) -> ReportDelivery: @@ -390,6 +445,7 @@ def replay( max_regions: int = 500, cache_dir: Path | None = None, model_config: Path | None = None, + record_vetoes: bool = False, ) -> ReportDelivery: config = config or PushConfig() budget = ExecutionBudget(time.monotonic() + config.deadline_seconds, config.cancellation_allowance_seconds) @@ -403,6 +459,7 @@ def replay( max_regions=max_regions, cache_dir=cache_dir, execution_budget=budget, + record_vetoes=record_vetoes, ) from openultrasast.push.assistance import assist diff --git a/src/openultrasast/push/vetoes.py b/src/openultrasast/push/vetoes.py new file mode 100644 index 0000000..1c8025e --- /dev/null +++ b/src/openultrasast/push/vetoes.py @@ -0,0 +1,434 @@ +"""Experimental recorded-veto evaluation for release milestone M1a. + +Record every comparison and admission veto per raw finding instead of applying it, so +a maintainer can see which vetoes discard a detection the arbiter already reported. + +This module never admits a defect, enables a capability or changes the production +result. The production comparison and admission have already run on the applied path. +Here the same policy functions run again over a *lifted* view of the same evidence in +which recognized completeness vetoes are removed and recorded. Failures are never +lifted: deadline exhaustion, unanswered queries, unreadable input, empty graphs and +unparsed files stay applied, because silence from failure is not a quiet fixed twin. +Every payload produced here carries an experimental label. +""" + +from __future__ import annotations + +import json +from collections import Counter +from collections.abc import Sequence +from dataclasses import dataclass, replace + +from openultrasast.contracts import Contract +from openultrasast.model.contracts import ChangeContext, ExecutionBudget, QuestionIdentity +from openultrasast.model.scan import ModelScanResult +from openultrasast.push.contracts import PushComparison +from openultrasast.push.policy import ( + AdmissionCandidate, + CandidateDelta, + CapabilityAdmission, + CapabilityKey, + EvidenceOperation, + _base_location, + _compare_evidence, + _context_boundaries, + _counterpart, + admit_candidates, +) + +FLAG = "--experimental-record-vetoes" +LABEL = ( + "EXPERIMENTAL recorded-veto evaluation (release milestone M1a). Listed vetoes were recorded, not applied. " + "Nothing in this section is an alert, an admitted defect, a capability or a comparison result; the production " + "result and admission above remain authoritative." +) + +# Outcome reasons that scan.py applies to an *answered* question after the fact. Lifting them +# restores the answered rows; an unanswered or not-arbitrated question is never lifted. +LIFTED_OUTCOME_REASONS = frozenset({"change_context_incomplete", "graph_incomplete"}) +# Physical vendor exclusion is retained; only its global completion veto is recorded here. +LIFTED_DEGRADATION_REASONS = frozenset({"vendor_semantics_unresolved"}) +# Boundary kinds diagnosed in release-remediation-research.md as completeness vetoes rather +# than input failures. The kind is one colon-separated segment of a boundary string. +LIFTED_BOUNDARY_KINDS = frozenset( + { + "vendor_semantics_unresolved", + "ambiguous_line_correspondence", + "context_projection_unavailable", + "context_scope_empty", + "dynamic_external_or_depth_context_unresolved", + "context_location_unavailable", + "configuration_dependency_projection_unavailable", + "deleted_dependency_projection_unavailable", + } +) +# Admission reasons that this flag can never remove; they are recorded with that explanation. +_EXPECTED_ADMISSION = { + "capability_unavailable": "no evaluated capability is enabled; the recorded-veto flag cannot enable one", + "capability_disabled": "capability declared but not enabled; the recorded-veto flag cannot enable one", + "capability_unevaluated": "capability not qualified; the recorded-veto flag cannot qualify one", +} + + +@dataclass(frozen=True) +class RecordedVeto(Contract): + stage: str + veto: str + detail: str + lifted: bool + + +@dataclass(frozen=True) +class QuestionReceipt(Contract): + identity: QuestionIdentity + status: str + reason: str + rows: int | None + lifted: bool + + +@dataclass(frozen=True) +class OutcomeCount(Contract): + status: str + reason: str + count: int + + +@dataclass(frozen=True) +class ScanSummary(Contract): + findings: int + outcomes: tuple[OutcomeCount, ...] + lifted: tuple[OutcomeCount, ...] + degradations: tuple[str, ...] + lifted_degradations: tuple[str, ...] + boundaries_by_kind: tuple[OutcomeCount, ...] + changed_path_questions: tuple[QuestionReceipt, ...] + + +@dataclass(frozen=True) +class RecordedFinding(Contract): + family: str + site: str + rung: str + witness: str | None + question: QuestionIdentity | None + operation: EvidenceOperation | None + operation_method: str | None + base_location: str | None + production_novelty: str + production_reason: str + production_admission: tuple[str, ...] + recorded_novelty: str + recorded_reason: str + recorded_admission: tuple[str, ...] + vetoes: tuple[RecordedVeto, ...] + + +@dataclass(frozen=True) +class BaseOnlyFinding(Contract): + family: str + site: str + rung: str + witness: str | None + head_counterparts: tuple[QuestionReceipt, ...] + + +@dataclass(frozen=True) +class RecordedVetoReport(Contract): + label: str + flag: str + lifted_kinds: tuple[str, ...] + head: ScanSummary + base: ScanSummary | None + findings: tuple[RecordedFinding, ...] + base_only_findings: tuple[BaseOnlyFinding, ...] + lifted_coverage_reasons: tuple[str, ...] + remaining_coverage_reasons: tuple[str, ...] + + +def boundary_kind(boundary: str) -> str | None: + """Return the recognized lifted kind inside a boundary string, if any.""" + return next((segment for segment in boundary.split(":") if segment in LIFTED_BOUNDARY_KINDS), None) + + +def _lift_scan(scan: ModelScanResult) -> tuple[ModelScanResult, Counter[str]]: + lifted: Counter[str] = Counter() + outcomes = [] + for outcome in scan.question_outcomes: + if outcome.status == "unresolved" and outcome.reason in LIFTED_OUTCOME_REASONS and outcome.raw_rows_json is not None: + lifted["question:" + outcome.reason] += 1 + outcomes.append(replace(outcome, status="completed", reason="recorded_veto:" + outcome.reason)) + else: + outcomes.append(outcome) + degradations = [] + for degradation in scan.degradations: + if str(degradation.get("reason")) in LIFTED_DEGRADATION_REASONS: + lifted["degradation:" + str(degradation.get("reason"))] += 1 + else: + degradations.append(degradation) + scope = scan.scope + if scope is not None: + kept = [] + for boundary in scope.unresolved_boundaries: + kind = boundary_kind(boundary) + if kind is None: + kept.append(boundary) + else: + lifted["boundary:" + kind] += 1 + scope = replace(scope, unresolved_boundaries=tuple(kept)) + return replace(scan, question_outcomes=tuple(outcomes), degradations=tuple(degradations), scope=scope), lifted + + +def _lift_context(context: ChangeContext) -> tuple[ChangeContext, tuple[str, ...]]: + lifted = tuple(b for b in context.unresolved_boundaries if boundary_kind(b) is not None) + kept = tuple(b for b in context.unresolved_boundaries if boundary_kind(b) is None) + return replace(context, unresolved_boundaries=kept), lifted + + +def _rows(raw: str | None) -> int | None: + if raw is None: + return None + rows = json.loads(raw) + return len(rows) if isinstance(rows, list) else None + + +def _receipt(scan: ModelScanResult, lifted: ModelScanResult, identity: QuestionIdentity) -> QuestionReceipt | None: + original = next((o for o in scan.question_outcomes if o.identity == identity), None) + if original is None: + return None + after = next((o for o in lifted.question_outcomes if o.identity == identity), original) + return QuestionReceipt(identity, original.status, original.reason, _rows(original.raw_rows_json), after.status != original.status) + + +def _summary(scan: ModelScanResult, lifted: ModelScanResult, counts: Counter[str], context: ChangeContext) -> ScanSummary: + outcomes = Counter((o.status, o.reason) for o in scan.question_outcomes) + boundaries = Counter(boundary_kind(b) or b.split(":")[0] for b in (scan.scope.unresolved_boundaries if scan.scope else ())) + changed = {context.decode_path(p) for p in context.changed_paths} + receipts = tuple( + receipt + for o in scan.question_outcomes + if o.identity.path in changed + for receipt in (_receipt(scan, lifted, o.identity),) + if receipt is not None + ) + return ScanSummary( + len(scan.findings), + tuple(OutcomeCount(status, reason, count) for (status, reason), count in sorted(outcomes.items())), + tuple( + OutcomeCount(key.split(":", 1)[0], key.split(":", 1)[1], count) + for key, count in sorted(counts.items()) + if not key.startswith("boundary:") + ), + tuple(dict.fromkeys(str(d.get("reason")) for d in scan.degradations)), + tuple(key.split(":", 1)[1] for key in sorted(counts) if key.startswith("degradation:")), + tuple(OutcomeCount("boundary", kind, count) for kind, count in sorted(boundaries.items())), + receipts, + ) + + +def _method(op: EvidenceOperation) -> str | None: + row = json.loads(op.detail) + value = row.get("sinkMethod") if op.mechanism == "taint" else row.get("opMethod") if op.mechanism == "dominance" else None + return value if isinstance(value, str) and value.strip() else None + + +def _boundary_vetoes(stage: str, boundaries: Sequence[str]) -> list[RecordedVeto]: + return [RecordedVeto(stage, boundary_kind(b) or b, b, boundary_kind(b) is not None) for b in boundaries] + + +def _degradation_vetoes(stage: str, scan: ModelScanResult) -> list[RecordedVeto]: + return [ + RecordedVeto( + stage, + "degradation:" + str(d.get("reason")), + json.dumps(dict(d), sort_keys=True, default=str), + str(d.get("reason")) in LIFTED_DEGRADATION_REASONS, + ) + for d in scan.degradations + ] + + +def _question_veto(stage: str, receipt: QuestionReceipt | None, identity: QuestionIdentity) -> list[RecordedVeto]: + if receipt is None: + return [RecordedVeto(stage, "question_missing", identity.question_id, False)] + if receipt.status == "completed": + return [] + detail = f"{identity.question_id} status={receipt.status} rows={receipt.rows}" + return [RecordedVeto(stage, receipt.reason, detail, receipt.lifted)] + + +def _finding_vetoes( + op: EvidenceOperation | None, + *, + head: ModelScanResult, + lifted_head: ModelScanResult, + base: ModelScanResult | None, + lifted_base: ModelScanResult | None, + context: ChangeContext, + recorded: CandidateDelta, + admission: Sequence[str], +) -> tuple[RecordedVeto, ...]: + vetoes: list[RecordedVeto] = [] + if op is None: + vetoes.append(RecordedVeto("comparison", recorded.reason, "no completed head operation matches this finding after lifting", False)) + else: + question = op.question + vetoes.extend(_question_veto("head_question", _receipt(head, lifted_head, question), question)) + vetoes.extend(_boundary_vetoes("head_scan", _context_boundaries(head, question))) + vetoes.extend(_degradation_vetoes("head_scan", head)) + method = _method(op) + if question.function is None or (method is not None and question.function != method): + vetoes.append( + RecordedVeto( + "identity", + "query_identity_differs_from_witness", + f"question function={question.function!r}; witness method={method!r}; recorded, not a policy veto", + False, + ) + ) + if base is None or lifted_base is None: + vetoes.append(RecordedVeto("base_scan", "base_unavailable", "no base scan was produced", False)) + else: + counterpart = _counterpart(question, context) + vetoes.extend(_question_veto("base_question", _receipt(base, lifted_base, counterpart), counterpart)) + vetoes.extend(_boundary_vetoes("base_scan", _context_boundaries(base))) + vetoes.extend(_degradation_vetoes("base_scan", base)) + if base.scope is not None: + if not base.scope.population_complete: + vetoes.append(RecordedVeto("base_scan", "population_incomplete", "base census not asserted complete", False)) + for deferred in base.scope.deferred: + if deferred.reason != "tier_zero": + vetoes.append(RecordedVeto("base_scan", "deferred:" + deferred.reason, deferred.identity.question_id, False)) + pending = [o for o in lifted_base.question_outcomes if o.status != "completed"] + if pending: + detail = f"{len(pending)} of {len(lifted_base.question_outcomes)} base questions not completed after lifting" + vetoes.append(RecordedVeto("base_scan", "questions_not_completed", detail, False)) + vetoes.extend(_boundary_vetoes("change_context", context.unresolved_boundaries)) + if op is not None and recorded.novelty == "unknown": + location = _base_location(op, context) + where = f"{location[0]}:{location[1]}" if location else "unresolved (operation on a changed line or ambiguous)" + vetoes.append(RecordedVeto("comparison", recorded.reason, "base location " + where, False)) + for reason in admission: + explanation = _EXPECTED_ADMISSION.get(reason, "production admission reason on the lifted candidate") + vetoes.append(RecordedVeto("admission", reason, explanation, False)) + return tuple(vetoes) + + +def record_vetoes( + *, + head: ModelScanResult, + base: ModelScanResult | None, + context: ChangeContext, + comparison: PushComparison, + semantics: str, + production: Sequence[CandidateDelta], + production_admission: dict[str, tuple[str, ...]], + coverage_reasons: Sequence[str], + capabilities: Sequence[CapabilityAdmission] = (), + execution_budget: ExecutionBudget | None = None, +) -> RecordedVetoReport: + """Re-run the production comparison and admission over lifted evidence and list what was lifted. + + `production` and `production_admission` (keyed by delta.defect_id) are the applied results the + runner already produced; they are retained beside the recorded outcome for every finding. + """ + lifted_head, head_counts = _lift_scan(head) + lifted_base, base_counts = _lift_scan(base) if base is not None else (None, Counter()) + lifted_context, lifted_boundaries = _lift_context(context) + lifted_reasons = tuple(r for r in coverage_reasons if boundary_kind(r) is not None or r in LIFTED_OUTCOME_REASONS) + remaining = tuple(r for r in coverage_reasons if r not in lifted_reasons) + recorded = _compare_evidence( + lifted_head, + lifted_base, + context=lifted_context, + head_semantics=semantics, + base_semantics=semantics, + execution_budget=execution_budget, + ) + candidates = tuple( + AdmissionCandidate( + delta, + CapabilityKey( + delta.head_operation.question.language if delta.head_operation else "unknown", + "unspecified", + "unspecified", + delta.family, + delta.head_operation.mechanism if delta.head_operation else "taint", + "unreviewed", + semantics, + ), + comparison, + remaining, + ) + for delta in recorded + ) + # Only the per-candidate reasons are retained. Any defect the lifted path would admit is + # deliberately dropped here: this section is a diagnostic record, never an alert channel. + admitted = admit_candidates(candidates, capabilities=capabilities) + recorded_admission = {d.candidate.delta.defect_id: d.reasons for d in admitted.dispositions} + applied = {(c.family, c.site, c.witness): c for c in production} + findings = [] + for finding, delta in zip(head.findings, recorded, strict=True): + before = applied.get((finding.family, finding.site, finding.witness or None)) + op = delta.head_operation + location = _base_location(op, context) if op else None + admission = recorded_admission.get(delta.defect_id, ()) + findings.append( + RecordedFinding( + finding.family, + finding.site, + finding.rung.value, + finding.witness or None, + op.question if op else None, + op, + _method(op) if op else None, + f"{location[0]}:{location[1]}" if location else None, + before.novelty if before else "unknown", + before.reason if before else "production_candidate_missing", + production_admission.get(before.defect_id, ()) if before else (), + delta.novelty, + delta.reason, + admission, + _finding_vetoes( + op, + head=head, + lifted_head=lifted_head, + base=base, + lifted_base=lifted_base, + context=context, + recorded=delta, + admission=admission, + ), + ) + ) + base_only = [] + if base is not None and lifted_base is not None: + head_sites = {(f.family, f.site) for f in head.findings} + for finding in base.findings: + if (finding.family, finding.site) in head_sites: + continue + path = finding.site.split(":", 1)[0] + counterparts = tuple( + receipt + for o in head.question_outcomes + if o.identity.path == path and o.identity.family == finding.family + for receipt in (_receipt(head, lifted_head, o.identity),) + if receipt is not None + ) + base_only.append(BaseOnlyFinding(finding.family, finding.site, finding.rung.value, finding.witness or None, counterparts)) + kinds = ( + *("question:" + r for r in LIFTED_OUTCOME_REASONS), + *("degradation:" + r for r in LIFTED_DEGRADATION_REASONS), + *("boundary:" + k for k in LIFTED_BOUNDARY_KINDS), + ) + return RecordedVetoReport( + LABEL, + FLAG, + tuple(sorted(kinds)), + _summary(head, lifted_head, head_counts, context), + _summary(base, lifted_base, base_counts, context) if base is not None and lifted_base is not None else None, + tuple(findings), + tuple(base_only), + tuple(dict.fromkeys((*lifted_reasons, *lifted_boundaries))), + remaining, + ) diff --git a/tests/test_push_vetoes.py b/tests/test_push_vetoes.py new file mode 100644 index 0000000..7c8e0d5 --- /dev/null +++ b/tests/test_push_vetoes.py @@ -0,0 +1,266 @@ +"""M1a recorded-veto evaluation: vetoes are recorded beside the production result, never applied.""" + +from __future__ import annotations + +import json +from dataclasses import replace + +import pytest +from test_push_policy import context, scan + +from openultrasast.cpg.backend import NullBackend +from openultrasast.model.contracts import QuestionOutcome +from openultrasast.push.contracts import PushComparison +from openultrasast.push.policy import _compare_evidence, admit_candidates +from openultrasast.push.report import PushReport, render_report +from openultrasast.push.vetoes import FLAG, LABEL, RecordedVetoReport, boundary_kind, record_vetoes + +COMPARISON = PushComparison("head", "base", "explicit", ("refs/heads/main",)) + + +def vetoed(result, reason, *, boundaries=(), vendor=True): + outcome = result.question_outcomes[0] + demoted = replace(outcome, status="unresolved", reason=reason) + return replace( + result, + question_outcomes=(demoted,), + degradations=({"stage": "cpg", "reason": "vendor_semantics_unresolved"},) if vendor else (), + scope=replace(result.scope, unresolved_boundaries=(*boundaries, *(("vendor_semantics_unresolved",) if vendor else ()))), + ) + + +def production(head, base, ctx): + candidates = _compare_evidence(head, base, context=ctx, head_semantics="same", base_semantics="same") + return candidates, {c.defect_id: ("capability_unavailable",) for c in candidates} + + +def test_recognized_vetoes_are_lifted_recorded_and_never_applied(): + head = scan() + question = head.scope.selected[0].identity + owned = "context_projection_unavailable:contributor-scan:" + question.question_id + head = vetoed(head, "change_context_incomplete", boundaries=(owned,)) + base = vetoed(scan(rows=[], findings=False), "graph_incomplete") + ctx = replace(context(), unresolved_boundaries=("612e6a73:ambiguous_line_correspondence",)) + applied, admission = production(head, base, ctx) + assert applied[0].novelty == "unknown" and applied[0].reason == "witness_identity_unresolved" + + report = record_vetoes( + head=head, + base=base, + context=ctx, + comparison=COMPARISON, + semantics="same", + production=applied, + production_admission=admission, + coverage_reasons=("vendor_semantics_unresolved", "612e6a73:ambiguous_line_correspondence", "deadline_exhausted"), + ) + assert report.label == LABEL and report.flag == FLAG and report.label.startswith("EXPERIMENTAL") + finding = report.findings[0] + assert (finding.production_novelty, finding.production_reason) == ("unknown", "witness_identity_unresolved") + assert (finding.recorded_novelty, finding.recorded_reason) == ("new", "source_connection_absent_from_comparable_base") + assert finding.question == question and finding.operation is not None and finding.base_location == "a.js:5" + lifted = {(v.stage, v.veto) for v in finding.vetoes if v.lifted} + assert lifted == { + ("head_question", "change_context_incomplete"), + ("head_scan", "context_projection_unavailable"), + ("head_scan", "vendor_semantics_unresolved"), + ("head_scan", "degradation:vendor_semantics_unresolved"), + ("base_question", "graph_incomplete"), + ("base_scan", "vendor_semantics_unresolved"), + ("base_scan", "degradation:vendor_semantics_unresolved"), + ("change_context", "ambiguous_line_correspondence"), + } + remaining = {(v.stage, v.veto) for v in finding.vetoes if not v.lifted} + # The unlifted deadline reason still reaches admission as a dependency gap. + assert remaining == {("admission", "capability_unavailable"), ("admission", "dependency_unresolved")} + assert finding.recorded_admission == ("capability_unavailable", "dependency_unresolved") + assert report.lifted_coverage_reasons == ("vendor_semantics_unresolved", "612e6a73:ambiguous_line_correspondence") + assert report.remaining_coverage_reasons == ("deadline_exhausted",) + assert {(c.status, c.reason) for c in report.head.lifted} == { + ("question", "change_context_incomplete"), + ("degradation", "vendor_semantics_unresolved"), + } + assert ("question", "graph_incomplete") in {(c.status, c.reason) for c in report.base.lifted} + assert report.head.changed_path_questions[0].lifted and report.head.changed_path_questions[0].rows == 1 + # Round trip and the production evidence are untouched. + assert RecordedVetoReport.from_payload(json.loads(json.dumps(report.to_payload()))) == report + assert head.question_outcomes[0].status == "unresolved" and base.question_outcomes[0].status == "unresolved" + + +def test_failures_and_unrecognized_boundaries_are_never_lifted(): + head = replace(scan(), degradations=({"stage": "cpg", "reason": "cpg_empty"},)) + base = scan(rows=[], status="unanswered", findings=False) + applied, admission = production(head, base, context()) + report = record_vetoes( + head=head, + base=base, + context=context(), + comparison=COMPARISON, + semantics="same", + production=applied, + production_admission=admission, + coverage_reasons=("cpg_empty",), + ) + finding = report.findings[0] + assert finding.recorded_novelty == "unknown" and finding.recorded_reason == "head_context_incomplete" + assert not any(v.lifted for v in finding.vetoes) + assert ("head_scan", "degradation:cpg_empty") in {(v.stage, v.veto) for v in finding.vetoes} + assert ("base_question", "test_answer") in {(v.stage, v.veto) for v in finding.vetoes} + assert report.remaining_coverage_reasons == ("cpg_empty",) and report.lifted_coverage_reasons == () + assert boundary_kind("deadline_exhausted") is None and boundary_kind("snapshot:unreadable") is None + + +def test_unanswered_lifted_reason_without_rows_stays_applied(): + head = scan() + outcome = QuestionOutcome(head.question_outcomes[0].identity, "unanswered", "graph_incomplete", None) + head = replace(head, question_outcomes=(outcome,)) + applied, admission = production(head, scan(rows=[], findings=False), context()) + report = record_vetoes( + head=head, + base=scan(rows=[], findings=False), + context=context(), + comparison=COMPARISON, + semantics="same", + production=applied, + production_admission=admission, + coverage_reasons=(), + ) + assert report.head.lifted == () and report.findings[0].recorded_novelty == "unknown" + assert report.findings[0].operation is None + + +def test_quiet_fixed_twin_reports_base_only_finding_with_answered_head_counterpart(): + head = scan(rows=[], findings=False) + base = scan() + applied, admission = production(head, base, context()) + report = record_vetoes( + head=head, + base=base, + context=context(), + comparison=COMPARISON, + semantics="same", + production=applied, + production_admission=admission, + coverage_reasons=(), + ) + assert report.findings == () + only = report.base_only_findings[0] + assert only.site == "a.js:4:handler" and only.head_counterparts[0].status == "completed" and only.head_counterparts[0].rows == 0 + + +def test_query_identity_difference_is_recorded_not_applied(): + head = scan() + question = replace(head.scope.selected[0].identity, function=None) + rows = json.loads(head.question_outcomes[0].raw_rows_json) + rows[0]["sinkMethod"] = "2" + head = replace( + head, + scope=replace(head.scope, selected=(replace(head.scope.selected[0], identity=question),)), + question_outcomes=(QuestionOutcome(question, "completed", "test_answer", json.dumps(rows)),), + findings=(replace(head.findings[0], site="a.js:4:2"),), + ) + base = scan(rows=[], findings=False) + base = replace( + base, + scope=replace(base.scope, selected=(replace(base.scope.selected[0], identity=question),)), + question_outcomes=(QuestionOutcome(question, "completed", "test_answer", "[]"),), + ) + applied, admission = production(head, base, context()) + report = record_vetoes( + head=head, + base=base, + context=context(), + comparison=COMPARISON, + semantics="same", + production=applied, + production_admission=admission, + coverage_reasons=(), + ) + finding = report.findings[0] + identity = [v for v in finding.vetoes if v.stage == "identity"] + assert identity and identity[0].veto == "query_identity_differs_from_witness" and "2" in identity[0].detail + assert finding.operation_method == "2" and finding.recorded_novelty == "new" + + +def test_recorded_report_never_admits_even_when_lifted_candidate_would_pass(): + from test_push_admission import control + + candidate, capability, _ = control() + head = scan() + base = scan(rows=[], findings=False) + applied, admission = production(head, base, context()) + report = record_vetoes( + head=head, + base=base, + context=context(), + comparison=COMPARISON, + semantics="same", + production=applied, + production_admission=admission, + coverage_reasons=(), + capabilities=(capability,), + ) + assert admit_candidates((candidate,), capabilities=(capability,)).defects # the control itself admits + payload = report.to_payload() + assert "defects" not in payload and all("admitted" not in f for f in payload["findings"]) + + +def test_report_requires_label_and_renders_experimental_line(tmp_path): + from test_push_report import report_with + + base = report_with() + with pytest.raises(ValueError, match="experimental label"): + replace(base, experimental={"status": "evaluated"}) + labeled = replace(base, experimental={"label": LABEL, "flag": FLAG, "status": "evaluated", "findings": [{"vetoes": [{}, {}]}]}) + text = render_report(labeled, artifact=None) + assert "Experimental: recorded-veto evaluation retained 1 raw finding(s) with 2 recorded veto(es)" in text + assert "not an alert" in text + pending = replace(base, experimental={"label": LABEL, "flag": FLAG, "status": "not_evaluated", "reason": "head_failed:TimeoutError"}) + assert "was not produced (head_failed:TimeoutError)" in render_report(pending, artifact=None) + assert "Experimental:" not in render_report(base, artifact=None) + assert isinstance(base, PushReport) + + +def test_replay_flag_is_off_by_default_and_labels_its_artifact(tmp_path): + from test_push_runner import history + + from openultrasast.push.runner import replay + + root, base, head, _ = history(tmp_path) + plain = tmp_path / "plain.json" + replay(root, base=base, head=head, artifact=plain, backend=NullBackend()) + assert json.loads(plain.read_text())["experimental"] == {} + recorded = tmp_path / "recorded.json" + delivery = replay(root, base=base, head=head, artifact=recorded, backend=NullBackend(), record_vetoes=True) + data = json.loads(recorded.read_text()) + assert data["experimental"]["label"] == LABEL and data["experimental"]["flag"] == FLAG + assert data["experimental"]["status"] in ("evaluated", "not_evaluated") + assert data["result"]["finding_status"] == "none" and data["admission"]["defects"] == [] + assert "Experimental:" in delivery.text and delivery.exit_code == 0 + + +def test_cli_refuses_the_flag_outside_explicit_replay(tmp_path, capsys): + from test_push_runner import history + + from openultrasast.cli import main + + root, base, head, _ = history(tmp_path) + with pytest.raises(SystemExit): + main(["pre-push", str(root), "--remote", "origin", "/x", "--artifact", str(tmp_path / "x.json"), "--experimental-record-vetoes"]) + assert "requires explicit --base/--head replay" in capsys.readouterr().err + code = main( + [ + "pre-push", + str(root), + "--base", + base, + "--head", + head, + "--artifact", + str(tmp_path / "cli.json"), + "--deadline", + "20", + "--experimental-record-vetoes", + ] + ) + assert code == 0 and "Experimental:" in capsys.readouterr().out