2026-09-13 10:03:03 +02:00
|
|
|
|
# Group 3 implementation verification
|
|
|
|
|
|
|
|
|
|
|
|
Date: 2026-09-13. Scope: tasks 3.1–3.4. The maintainer authorized continuing this
|
|
|
|
|
|
group after the group 2 completion and next-step summary. Tasks remain unchecked
|
|
|
|
|
|
until independent review and fresh verification establish their completion.
|
|
|
|
|
|
|
|
|
|
|
|
## Boundary
|
|
|
|
|
|
|
|
|
|
|
|
This group integrates the existing backend and ranker with generic execution,
|
|
|
|
|
|
change-context and scope contracts. It does not implement new detector semantics,
|
|
|
|
|
|
alert admission, persistent caching, or hook installation. Equivalent normalized
|
|
|
|
|
|
PHP and JavaScript evidence must retain equivalent core decisions. Vendor sources
|
|
|
|
|
|
must remain outside both graph inputs and targets; missing external semantics are
|
|
|
|
|
|
coverage limits.
|
|
|
|
|
|
|
|
|
|
|
|
## Verification state
|
|
|
|
|
|
|
2026-09-13 11:53:29 +02:00
|
|
|
|
Group 3 is independently approved and VERIFIED (TASK scope): tasks 3.1–3.4 are
|
|
|
|
|
|
complete, bringing the pre-push spec to 11/27 tasks. The approved contributor-scan
|
|
|
|
|
|
frontend-retention prerequisite 2.18 is also verified. Groups 4–8 remain pending;
|
|
|
|
|
|
this is not feature GO, capability admission or a hook latency claim.
|
2026-09-13 10:03:03 +02:00
|
|
|
|
|
|
|
|
|
|
## Baseline
|
|
|
|
|
|
|
|
|
|
|
|
Groups 1 and 2 completed at commit `948ee02`; the working tree was clean before
|
|
|
|
|
|
this group began. The prior final suite recorded 1,069 passing and nine skipped
|
|
|
|
|
|
tests. Three pre-existing mypy diagnostics concerned reuse of `candidates` in
|
|
|
|
|
|
`model/scan.py`; fresh checks will report whether they remain.
|
|
|
|
|
|
|
|
|
|
|
|
Historical Joern query failures cannot be declared resolved merely because a
|
|
|
|
|
|
bounded failure returns promptly. Runtime smoke establishes readable source,
|
|
|
|
|
|
nonempty graph census and query payloads for its declared small fixtures. It does
|
|
|
|
|
|
not establish full-workload detection, actionable precision or hook latency.
|
|
|
|
|
|
|
|
|
|
|
|
## Task 3.1 evidence
|
|
|
|
|
|
|
|
|
|
|
|
The backend accepts an optional generic `ExecutionBudget`. Each build binds an
|
|
|
|
|
|
independent session to its graph callbacks; probes, builds, overlays, census,
|
|
|
|
|
|
queries and retries consume the same remaining time. Process startup also counts.
|
|
|
|
|
|
A timed-out stage prevents further retries. The budgeted process path kills the
|
|
|
|
|
|
original process group even after its launcher exits, bounds reaping and owned
|
|
|
|
|
|
scratch cleanup, and exposes incomplete cleanup explicitly. The driver releases
|
|
|
|
|
|
graph ownership on exceptions as well as normal return. Legacy backends cannot
|
|
|
|
|
|
silently discard a supplied deadline; optional unbounded judge calls are withheld
|
|
|
|
|
|
with an explicit reason. Ordinary scans retain their existing budget behavior.
|
|
|
|
|
|
|
|
|
|
|
|
`benchmarks/measurements/2026-09-13-engine-budget-smoke.json` records the locally
|
|
|
|
|
|
rebuilt non-root image and exact packaged backend/driver hashes. Under one
|
|
|
|
|
|
900-second lab budget, native PHP read 45 source bytes and JavaScript read 48;
|
|
|
|
|
|
both produced populated graphs, dataflow overlays and exact source-node witnesses.
|
|
|
|
|
|
Unreadable PHP source was explicitly refused. PHP took 73.620 seconds and JavaScript
|
|
|
|
|
|
34.756 seconds in this small smoke; these are runtime checks, not hook latency.
|
|
|
|
|
|
|
|
|
|
|
|
An independent controlled process probe read its 241-byte input script, launched
|
|
|
|
|
|
a parent and child ignoring SIGTERM, and observed termination in 0.804 seconds
|
|
|
|
|
|
under a 0.8-second deadline plus 0.8-second cancellation allowance. Signal delivery
|
|
|
|
|
|
may briefly leave a child visible immediately after return; the probe polls only
|
|
|
|
|
|
within the original allowance. Zombies count as terminated, not running descendants.
|
|
|
|
|
|
Concrete reusable graph leases and persisted completion records remain later tasks.
|
|
|
|
|
|
|
|
|
|
|
|
The three former mypy errors were resolved by renaming the evidence-region list
|
|
|
|
|
|
inside the driver; this does not change the ranker. Global mypy now checks all
|
|
|
|
|
|
108 source files successfully. Independent review APPROVED task 3.1. Its fresh final suite passed: 1,089 tests,
|
|
|
|
|
|
nine skipped, 96.85 seconds; global Ruff, formatting (219 files), mypy and diff
|
|
|
|
|
|
checks passed. Verification status: VERIFIED, claim type TASK. This completes
|
|
|
|
|
|
8/27 tasks; tasks 3.2–3.4 remain in progress for this group.
|
2026-09-13 10:16:22 +02:00
|
|
|
|
|
|
|
|
|
|
## Task 3.2 evidence
|
|
|
|
|
|
|
|
|
|
|
|
Independent review APPROVED; verification status VERIFIED, claim type TASK.
|
|
|
|
|
|
The fresh reviewer suite passed 1,105 tests with nine skipped in 101.18 seconds.
|
|
|
|
|
|
Global Ruff, formatting (221 files), mypy (108 source files) and diff checks passed.
|
|
|
|
|
|
The reviewer also exercised 24 combinations of order, budget and failed query
|
|
|
|
|
|
families, retaining all 12 declared questions and reconciling coverage totals.
|
|
|
|
|
|
|
|
|
|
|
|
The driver accepts explicit `ranking_mode`, `unit` and `population_complete` while
|
|
|
|
|
|
preserving ordinary defaults. Scope and execution requests are produced together
|
|
|
|
|
|
from the existing ranker's final order. Selected/deferred identities, normalized
|
|
|
|
|
|
evidence, unchanged tier/score, per-question outcomes and per-family completion
|
|
|
|
|
|
travel to the CLI directly. Missing evidence stays unknown. Partial graphs cannot
|
|
|
|
|
|
justify tier-zero pruning or completed coverage. Raw query answers survive a later
|
|
|
|
|
|
timeout even when arbitration cannot complete. A completed outcome denotes query
|
|
|
|
|
|
and arbitration completion within the modeled boundary, not a safety assertion.
|
|
|
|
|
|
|
|
|
|
|
|
`benchmarks/measurements/2026-09-13-ranker-scope-smoke.json` records a rebuilt image
|
|
|
|
|
|
whose backend, driver, contracts and CLI hashes match the source. Real PHP (78 bytes)
|
|
|
|
|
|
and JavaScript (69 bytes) fixtures each selected `risky` over the initially higher
|
|
|
|
|
|
static-ranked `safe`. Both selected questions had tier 4 and score 2.5; execution
|
|
|
|
|
|
outcome IDs matched selection, and each family reported one selected/completed,
|
|
|
|
|
|
one deferred and zero unanswered questions. Each produced one controlled finding.
|
|
|
|
|
|
PHP took 61.57 seconds and JavaScript 51.27 seconds under one 900-second lab budget.
|
|
|
|
|
|
This manually declared entry-region smoke does not validate mapper discovery,
|
|
|
|
|
|
PMPro/NodeGoat replay, capability admission or hook latency.
|
|
|
|
|
|
|
|
|
|
|
|
Nine of 27 tasks are now complete; tasks 3.3–3.4 remain for this group.
|
2026-09-13 10:41:32 +02:00
|
|
|
|
|
|
|
|
|
|
## Task 3.3 evidence
|
|
|
|
|
|
|
|
|
|
|
|
Independent review APPROVED after one required repair; verification status VERIFIED,
|
|
|
|
|
|
claim type TASK. The fresh reviewer suite passed 1,128 tests, nine skipped, in
|
|
|
|
|
|
105.95 seconds. Global Ruff, formatting (224 files), mypy (108 source files) and
|
|
|
|
|
|
diff checks passed. The context suite contains 23 focused cases.
|
|
|
|
|
|
|
|
|
|
|
|
The generic driver accepts `change_context` and retains its enriched form. Existing
|
|
|
|
|
|
taint evidence optionally projects full first-party method paths/ranges for entry,
|
|
|
|
|
|
callee, same-file field, known hook and sanitizer context. Decoded snapshot changes
|
|
|
|
|
|
and lexical anchors attach to exact questions without changing ranking weights or
|
|
|
|
|
|
introducing another scope selector. Missing base, locations, empty projections,
|
|
|
|
|
|
dynamic/external/depth dependencies and unsupported configuration/deleted-dependency
|
|
|
|
|
|
projections remain explicit gaps. Missing context prevents tier-zero pruning and
|
|
|
|
|
|
complete-negative outcomes; raw answers remain available.
|
|
|
|
|
|
|
|
|
|
|
|
Review found that broad source/sink/sanitizer text matching could mistakenly exempt
|
|
|
|
|
|
an unknown consumer such as `unknown(req.body)` from missing-context reporting.
|
|
|
|
|
|
The production-query regression reproduced exit 1 with that question incorrectly
|
|
|
|
|
|
pruned as tier zero. The task-local repair restricts the exemption to directly
|
|
|
|
|
|
invoked fact-modeled operations. Existing detector matchers are unchanged. After
|
|
|
|
|
|
repair, consumers of a source, nested sink and sanitizer name all remain unresolved;
|
|
|
|
|
|
a direct modeled sink completes, and the direct sanitizer retains tier zero without
|
|
|
|
|
|
a false context gap.
|
|
|
|
|
|
|
|
|
|
|
|
`benchmarks/measurements/2026-09-13-change-context-smoke.json` retains the final image
|
|
|
|
|
|
and matching backend/driver/regions/snapshot/query hashes, plus both runtime checks.
|
|
|
|
|
|
Real Git histories remove a caller guard while keeping helper code unchanged. PHP
|
|
|
|
|
|
reads 124 source bytes and reaches `helper.php:2:helper` in 63.48 seconds; JavaScript
|
|
|
|
|
|
reads 133 bytes and reaches `helper.js:1:helper` through an ES-module import in
|
|
|
|
|
|
39.63 seconds. Both preserve the dirty checkout/index and remove snapshot scratch.
|
|
|
|
|
|
These are controlled change-to-question/witness checks, not proof that the removed
|
|
|
|
|
|
line enforced security, that the defect is new, or that a hook meets its latency bar.
|
|
|
|
|
|
|
|
|
|
|
|
Ten of 27 tasks are now complete; task 3.4 remains for this group.
|
2026-09-13 11:05:44 +02:00
|
|
|
|
|
2026-09-13 11:53:29 +02:00
|
|
|
|
## Historical task 3.4 blocker
|
2026-09-13 11:05:44 +02:00
|
|
|
|
|
|
|
|
|
|
Claim type TASK; status NOT_VERIFIED. The implementer returned BLOCKED, and an
|
|
|
|
|
|
independent fresh-context Kiro debug investigation returned STOP_FOR_HUMAN with
|
|
|
|
|
|
high confidence: the approved sequence lacks a contributor-scan frontend input
|
|
|
|
|
|
retention prerequisite. There is no task completion or reviewer approval claim.
|
|
|
|
|
|
|
|
|
|
|
|
The work in progress physically filters declared vendor inputs, routes explicit
|
|
|
|
|
|
language partitions through one existing ranker and deadline, and reports input,
|
|
|
|
|
|
excluded/test paths and unsupported coverage. Tests cover stale region paths,
|
|
|
|
|
|
symlink substitution, shared limits, partial census, normalized witness paths and
|
|
|
|
|
|
CLI propagation. Direct JavaScript frontend invocation establishes which engine
|
|
|
|
|
|
is called, but does not override its built-in input filters.
|
|
|
|
|
|
|
|
|
|
|
|
The fresh full suite passed 1,138 tests with nine skipped in 106.05 seconds. Global
|
|
|
|
|
|
Ruff, formatting (227 files), mypy (109 source files), compileall and diff checks
|
|
|
|
|
|
passed. Detection (44/47, zero false positives in 44 controls), split-sink map and
|
|
|
|
|
|
local pair gates passed. The final direct frontend change required adapting one
|
|
|
|
|
|
budget-test runner to recognize its `-o` output argument; the test still verifies
|
|
|
|
|
|
deadline retention. Unit success does not override the failing real graph check.
|
|
|
|
|
|
|
|
|
|
|
|
`benchmarks/measurements/2026-09-13-partition-retention-blocker.json` records exact
|
|
|
|
|
|
packaged source hashes, readable input witnesses, frontend help and failures. The
|
|
|
|
|
|
direct frontend input contained `server/api.js` (51 bytes) and `tests/probe.js`
|
|
|
|
|
|
(41 bytes), with original hashes verified. The graph contained only the server
|
|
|
|
|
|
file and handler. Both autodetection and direct `jssrc2cpg` probes exited 1 on the
|
|
|
|
|
|
retention assertion. The instrument correctly refused to report a passing smoke.
|
|
|
|
|
|
PHP and remaining end-of-scan assertions were not reached in this failing run.
|
|
|
|
|
|
|
|
|
|
|
|
Pinned ASTGen 3.50.1 unconditionally excludes test directories; Joern 4.0.625 also
|
|
|
|
|
|
filters test filename suffixes. Installed/versioned options provide no supported
|
|
|
|
|
|
inclusion override. The upstream sources and concrete repair acceptance checks
|
|
|
|
|
|
are linked in the proposed prerequisite. Do not mark task 3.4 complete by moving
|
|
|
|
|
|
test files or declaring frontend omission acceptable. Its implementation remains
|
|
|
|
|
|
uncommitted pending the foundation repair, review and fresh runtime verification.
|
|
|
|
|
|
|
|
|
|
|
|
The packaged failure preceded a comment-only clarification in `cpg/backend.py`
|
|
|
|
|
|
removing the disproven attribution to legacy frontend autodetection. No executable
|
|
|
|
|
|
backend behavior changed after that measurement.
|
2026-09-13 11:53:29 +02:00
|
|
|
|
|
|
|
|
|
|
## Task 3.4 final verification
|
|
|
|
|
|
|
|
|
|
|
|
Status VERIFIED, claim type TASK; independent review APPROVED after two concrete
|
|
|
|
|
|
error-path repairs. The final suite passed 1,151 tests with nine skipped in
|
|
|
|
|
|
100.55 seconds. Ruff, formatting (230 files), mypy (109 source files), compileall,
|
|
|
|
|
|
diff and all three regression gates passed.
|
|
|
|
|
|
|
|
|
|
|
|
The approved foundation repair is committed as `51fabef`. Physically filtered
|
|
|
|
|
|
frontend inputs retain original source paths and bytes; the existing layout facts
|
|
|
|
|
|
mark JavaScript/TypeScript test conventions unshipped. One existing ranker decision
|
|
|
|
|
|
and region/deadline budget cover supported partitions. Browser-path source remains
|
|
|
|
|
|
available, while runtime origin stays unspecified without declarations. Vendor,
|
|
|
|
|
|
cross-language, TypeScript-property and C-bounds limits remain explicit.
|
|
|
|
|
|
|
|
|
|
|
|
Exact source names now travel in taint, dominance and configuration batch censuses.
|
|
|
|
|
|
PHP aggregation preserves them only when every shard provides named evidence.
|
|
|
|
|
|
Synthetic `<unknown>` nodes cannot mask missing real files. Unreadable unknown
|
|
|
|
|
|
extensions produce `source_unreadable` coverage instead of raising PermissionError.
|
|
|
|
|
|
Legacy callbacks that omit census entirely retain their existing compatibility
|
|
|
|
|
|
behavior; production queries emit the named census, and unsupported/partial
|
|
|
|
|
|
sharded evidence cannot establish a complete negative.
|
|
|
|
|
|
|
|
|
|
|
|
`benchmarks/measurements/2026-09-13-partition-scope-smoke.json` records the final
|
|
|
|
|
|
image and ten matching source/query/fact hashes. The real mixed graph retains
|
|
|
|
|
|
seven JavaScript files (296 bytes), including tests and browser source, plus two
|
|
|
|
|
|
PHP files (97 bytes), with vendor nodes absent. One question is selected and three
|
|
|
|
|
|
deferred; unsupported Go is reported. No false empty/unavailable census remains.
|
|
|
|
|
|
PHP and JavaScript change-context controls both complete with unchanged-helper
|
|
|
|
|
|
witnesses, preserving dirty checkout/index state and cleaning snapshot scratch.
|
|
|
|
|
|
|
|
|
|
|
|
A real Python graph supplies named census from all three production query kinds.
|
|
|
|
|
|
Those unchanged Scala sources were verified before the separate PHP transport and
|
|
|
|
|
|
discovery repairs; the artifact records that narrower provenance explicitly. A
|
|
|
|
|
|
real filesystem permission probe verifies the repaired error path, using a clearly
|
|
|
|
|
|
labeled synthetic graph callback.
|
|
|
|
|
|
|
|
|
|
|
|
The mixed smoke took 197.76 seconds under a 900-second lab allowance; PHP/JavaScript
|
|
|
|
|
|
context checks took 117.3/95.9 seconds. These manually declared controls do not
|
|
|
|
|
|
establish automatic scope discovery, production hook latency or alert quality.
|
|
|
|
|
|
Group 4 now owns novelty comparison, actionability admission and compact output.
|