2026-09-14 08:13:26 +02:00
|
|
|
|
# Pre-push safety net status — v1.2.0-alpha.1
|
|
|
|
|
|
|
2026-09-16 15:31:34 +02:00
|
|
|
|
Updated 2026-09-16. Phase: **implementation**. Requirements, design and tasks are
|
|
|
|
|
|
approved. **28/29 executable tasks complete; task 8.3 remains blocked.**
|
2026-09-14 08:13:26 +02:00
|
|
|
|
Rollout: **NO-GO**. The alpha tag publishes experimental implementation and evidence;
|
|
|
|
|
|
it does not approve normal hook capabilities or production enforcement.
|
|
|
|
|
|
|
2026-09-14 20:48:23 +02:00
|
|
|
|
## Next release milestone
|
|
|
|
|
|
|
2026-09-16 16:03:16 +02:00
|
|
|
|
**M1a is met. M1b is in progress: three of its repairs are verified, and the remaining two
|
|
|
|
|
|
are blocked on one new piece of query evidence.** The other four milestones remain unverified.
|
|
|
|
|
|
|
|
|
|
|
|
M1b tasks 10.1 to 10.3 are done and measured. The recorded view of the NodeGoat case now
|
|
|
|
|
|
reaches `new` on the vulnerable revision and `unchanged` on the unchanged revision. The
|
|
|
|
|
|
production path is still blocked by the last two vetoes, and the rerun showed neither can be
|
|
|
|
|
|
scoped or relaxed soundly: a taint answer reports flows, so an absent row means either that
|
|
|
|
|
|
the operation does not exist or that no traced flow reached it. Establishing absence needs the
|
|
|
|
|
|
enumerated operation inventory exported separately from traced flows, which is now task 10.4
|
|
|
|
|
|
ahead of the two vetoes it unblocks. See [M1a evidence](m1a-recorded-vetoes.md).
|
2026-09-16 15:31:34 +02:00
|
|
|
|
|
|
|
|
|
|
M1a ran on 2026-09-16 within its one-week box. The raw `<lambda>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
|
2026-09-14 20:48:23 +02:00
|
|
|
|
accepted [release milestone spec](release-milestones.md): usefulness → speed → shared
|
|
|
|
|
|
PHP/Python transfer → independent qualification → narrow advisory rollout.
|
|
|
|
|
|
|
2026-09-14 08:13:26 +02:00
|
|
|
|
## Verified
|
|
|
|
|
|
|
|
|
|
|
|
Immutable pushed snapshots, shared multi-ref deadlines, ranker-owned scope, physical
|
|
|
|
|
|
vendor exclusion, compatible immutable graph/result reuse, actionability admission,
|
|
|
|
|
|
compact truthful reporting and non-destructive hook integration are implemented.
|
|
|
|
|
|
Advisory and blocking share the same evidence bar; optional model output cannot bypass it.
|
|
|
|
|
|
|
|
|
|
|
|
Contributor-scan task 2.19 is verified: the pinned frontend now retains the original
|
|
|
|
|
|
Gruntfile, bringing the real NodeGoat census from 43/44 to 44/44 files. Partial, absent
|
|
|
|
|
|
and malformed census no longer masquerade as a complete result or a falsely empty graph.
|
|
|
|
|
|
The final code verification recorded 1321 passed tests, nine skipped, passing canonical
|
|
|
|
|
|
gates and a packaged native PHP/JavaScript partition smoke. See
|
|
|
|
|
|
[owner verification](../contributor-scan/census-repair-verification.md).
|
|
|
|
|
|
|
|
|
|
|
|
## Rollout blockers
|
|
|
|
|
|
|
2026-09-14 13:18:51 +02:00
|
|
|
|
1. **Useful checks within the deadline are unproven.** The fresh post-census profile
|
|
|
|
|
|
completed all 21 measurements: all 18 changed/cold/growth/multi-ref transactions timed
|
|
|
|
|
|
out; the three identical-tip replays took 18.521–18.874s with valid graph/query reuse.
|
|
|
|
|
|
Still 0/24 declared target checks completed. Maximum observed cancellation/report
|
2026-09-14 20:48:23 +02:00
|
|
|
|
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.
|
2026-09-16 15:31:34 +02:00
|
|
|
|
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
|
2026-09-14 08:13:26 +02:00
|
|
|
|
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
|
|
|
|
|
|
verify the actual associated query/path evidence.
|
|
|
|
|
|
3. **Independent quality qualification is missing.** Freeze and review untouched Node API
|
|
|
|
|
|
vulnerable/fixed/benign cases, including middleware/module/async context. Ghost remains
|
|
|
|
|
|
reserved with missing reviewed inputs. PHP and Python need their own independent
|
|
|
|
|
|
language/framework/family populations; Node results cannot qualify them. Require >=95%
|
|
|
|
|
|
observed actionable precision with counts/intervals, >=90% supported recall, nonzero
|
|
|
|
|
|
reviewed emitted alerts/positive controls and zero known fixed/benign false alerts.
|
|
|
|
|
|
4. **No current capability is eligible.** The earlier registry is NO-GO and becomes stale
|
|
|
|
|
|
under the repaired runtime/core identities. Loading it enables zero capabilities.
|
|
|
|
|
|
After the preceding evidence passes together, regenerate exact-semantic eligibility
|
|
|
|
|
|
and rerun packaged acceptance validation. Do not relabel old measurements as current.
|
|
|
|
|
|
|
|
|
|
|
|
C/libpng arithmetic and bounds remain explicitly unsupported; this is not a C/C++
|
|
|
|
|
|
detection qualification. Advisory rollout cannot be justified by silence from an
|
|
|
|
|
|
unqualified registry.
|
|
|
|
|
|
|
|
|
|
|
|
## Ownership and revalidation
|
|
|
|
|
|
|
|
|
|
|
|
Engine lifecycle, source/census and context/witness normalization belong to
|
|
|
|
|
|
`contributor-scan`. The hook consumes those contracts; no second engine, source IR,
|
|
|
|
|
|
ranker priority exceptions or differential graph mutation is introduced here. Graph
|
|
|
|
|
|
mutation would need a separate cold-equivalence experiment.
|
|
|
|
|
|
|
|
|
|
|
|
After owner fixes, refreeze identities and rerun ordinary scan gates, Python regressions,
|
|
|
|
|
|
PHP-to-Node transfer, the representative cache/deadline profile, independent per-capability
|
|
|
|
|
|
quality evaluation and packaged hook validation. Keep task 8.3 unchecked and the feature
|
|
|
|
|
|
in implementation until those mandatory results are established.
|
|
|
|
|
|
|
|
|
|
|
|
Evidence: [group 8 validation](validation-group-8.md),
|
2026-09-14 13:18:51 +02:00
|
|
|
|
[post-census runtime scorecard](../../../benchmarks/measurements/2026-09-14-nodegoat-post-census-feasibility.json),
|
2026-09-14 08:13:26 +02:00
|
|
|
|
[census repair](../../../benchmarks/measurements/2026-09-14-node-census-repair.json).
|
2026-09-14 13:18:51 +02:00
|
|
|
|
|
|
|
|
|
|
The owner investigation now distinguishes missing family context producers, globally
|
|
|
|
|
|
propagated vendor/correspondence gaps, and query-to-operation identity. See
|
|
|
|
|
|
[remediation research](../contributor-scan/release-remediation-research.md). These are
|
|
|
|
|
|
next implementation prerequisites, not completed fixes or changed acceptance gates.
|
|
|
|
|
|
|
|
|
|
|
|
An isolated Joern session probe matched the full Node census with four warm requests in
|
|
|
|
|
|
0.221–0.467s and verified cancellation/reaping in 0.043s. It identifies a promising engine
|
|
|
|
|
|
lifecycle change; full-query equivalence and changed-code performance remain unverified.
|