Runtime truth remediation closure

This record closes the remediation that began with the historical runtime-truth audit. It does not rewrite that baseline. The implementation evidence below was reviewed at df19f00ea2171cd8486a6256cb318755d063fb47; the documentation-only closure commit follows that code and coverage-enforcement head.

The closure preserves these product boundaries:

  • an observation is not a vulnerability;
  • action success is not vulnerability confirmation;
  • same-origin transport policy is not authorization;
  • payload delivery is not evidence that a vulnerability exists;
  • missing evidence in a bounded sample is not evidence of absence;
  • incomplete execution is not empty success; and
  • a KnowledgeOnly objective has no hypothesis-transition authority.

Dispositions

  • Fixed means the defective behavior has a bounded, tested replacement.
  • Quarantined means the surface remains available only behind an explicit compatibility, host-library, or inert non-product distribution boundary and does not participate in the default product.
  • Removed means the misleading executable surface is absent and guarded against accidental reintroduction.
  • Deferred means the repository explicitly does not implement the claimed capability; a future implementation needs a new reviewed contract.

Product and execution truth

Split-brain CLI

Original problem. venom scan used the historical ordered runner while decision-scan alone used the deterministic runtime, exposing two materially different scanner products.

Resolution: Fixed. crates/venom-cli/src/main.rs defines decision-scan as a visible alias of Scan and routes both spellings through decision_scan::run_decision_scan. The historical runner is separately compiled behind legacy-scanner and requires explicit acknowledgement.

Authority and proof. ADR 0017; alias and feature tests in crates/venom-cli/src/main.rs and crates/venom-cli/tests/decision_scan_cli.rs; default-feature and module gates in xtask/src/architecture/platform.rs.

Remaining caveat. Legacy compatibility code still exists, but the default runtime never invokes it.

Legacy completion truth

Original problem. Phase errors, panics, timeouts, cancellation, or partial execution could collapse into an empty-looking successful run, while raw finding prose looked more authoritative than its evidence.

Resolution: Fixed. crates/venom-scanner/src/runner.rs records typed phase states, checkpoint rollback, explicit skips and accounting, and Complete/Partial/Failed/Cancelled terminal status in venom-run/v1. Unverified legacy prose is projected as unresolved Unknown rather than a confirmed result.

Authority and proof. ADRs 0017 and 0018; runner tests for failure, panic, budget exhaustion, timeout, cancellation, rollback, and partial completion; completion-laundering gate in xtask/src/architecture/source_hygiene.rs.

Remaining caveat. Phase one and custom legacy extensions may still perform direct I/O, so whole-run request/body accounting remains explicitly Unmetered.

Crawler

Original problem. Legacy discovery did not have one explicit exact-origin, bounded, deterministic traversal authority.

Resolution: Fixed. The replacement remains within the quarantined legacy surface. crates/venom-scanner/src/legacy_discovery.rs and phase2_crawl.rs implement a shared exact-origin authority, stable breadth-first traversal, canonical URL handling, finite HTML/form-name extraction, and atomic evidence commit.

Authority and proof. ADR 0016; local-fixture tests in phase2_crawl.rs cover relative/absolute links, forms, malformed input, cycles, canonicalization, cross-origin rejection, cancellation, and caps; transport ownership is guarded by xtask/src/architecture/transport.rs.

Remaining caveat. The default deterministic scanner is still a single-resource runtime. Legacy crawling is not silently composed into it.

Soft-404 handling

Original problem. A status or body-marker difference could be treated as a real discovered route without proving that it differed from wildcard behavior.

Resolution: Fixed. The replacement remains within the quarantined legacy surface. crates/venom-scanner/src/phases/phase3_fuzzer.rs uses two stable same-shape controls, bounded normalized signatures, sequential candidates, and atomic informational evidence.

Authority and proof. ADR 0016; phase tests cover wildcard and custom soft-404 responses, redirects, distinct protected routes, truncation, echo scrubbing, cancellation, and budget exhaustion; the migrated transport seam is architecture-gated.

Remaining caveat. A bounded negative sample is knowledge about that sample, not proof that a route or vulnerability is absent.

Parameter discovery

Original problem. One reflected marker could be presented as parameter acceptance or vulnerability evidence.

Resolution: Fixed. The replacement remains within the quarantined legacy surface. crates/venom-scanner/src/phases/phase4_param.rs requires a matched baseline, unknown control, candidate, and replay; rejects pre-existing markers and truncation; omits generated probe values from findings and their public subject; and emits informational evidence only.

Authority and proof. ADR 0016; phase tests cover positive and negative differentials, pre-existing markers, replay failure, known parameters, cancellation, and budget exhaustion; xtask/src/architecture/transport.rs pins the shared authority.

Remaining caveat. The observation does not establish exploitability. The legacy canonical discovery state can retain the original endpoint query, including pre-existing values; callers must not seed it with secret-bearing URLs.

Legacy claim correction

SQL behavior

Original problem. A quote followed by an error, status 500, or one delay could be labelled SQL injection.

Resolution: Fixed. The capability remains quarantined. crates/venom-scanner/src/phases/phase5_sqli.rs uses case-correlated baseline/control/candidate/replay observations, alternating repeated timing samples, and explicit error differentials. Only verifier-owned, KnowledgeOnly NeedsReview is possible.

Authority and proof. ADR 0018; tests reject a single 500, generic syntax, and one timing effect and exercise bounded reproducible review evidence; claim-language and broker gates live in xtask/src/architecture/transport.rs.

Remaining caveat. The legacy review does not confirm SQL injection and performs no destructive SQL, writes, extraction, or authentication bypass.

XSS reflection

Original problem. Marker reflection could be labelled confirmed XSS.

Resolution: Fixed. The capability remains quarantined. crates/venom-scanner/src/phases/phase6_xss.rs uses an exact benign nonce with baseline/candidate/replay correlation and rejects baseline, truncated, and non-replayed matches. Its maximum outcome is informational Unknown.

Authority and proof. ADR 0018; phase and runner tests prove exact reflection remains non-confirming; the architecture gate rejects confirmation/vulnerability language in migrated legacy verifiers.

Remaining caveat. No browser-execution verifier exists, so Venom cannot confirm XSS.

SSTI arithmetic

Original problem. A constant 49 or reflected payload could imply template execution.

Resolution: Fixed. The capability remains quarantined. crates/venom-scanner/src/phases/phase7_ssti.rs derives bounded variable operands and requires control/candidate/replay plus the exact expected arithmetic result absent from the control. Only verifier-owned, KnowledgeOnly NeedsReview is possible.

Authority and proof. ADR 0018; phase tests exercise positive and negative differentials and replay; transport and claim gates prevent broader authority.

Remaining caveat. This does not attribute a template engine and never executes an OS command or file read.

Local-file review

Original problem. Sensitive default file probes or marker delivery could be presented as local-file inclusion.

Resolution: Fixed. The capability remains quarantined. crates/venom-scanner/src/phases/phase8_lfi_xxe.rs has no default file probe. A host must explicitly provide and authorize a benign two-nonce canary; four matched observations can produce only KnowledgeOnly NeedsReview.

Authority and proof. ADR 0018; tests prove zero default dispatch, benign-fixture review, non-confirming single markers, and bounded failure behavior; architecture gates restrict transport and claims.

Remaining caveat. The host owns canary provisioning and authorization. No sensitive Linux, Windows, credential, or cloud files are product defaults.

XXE

Original problem. Configuration or out-of-band delivery could imply an XXE capability without callback proof.

Resolution: Quarantined. The compatibility surface is inert: crates/venom-scanner/src/phases/phase8_lfi_xxe.rs performs no XML or out-of-band dispatch, including when compatibility OOB configuration exists.

Authority and proof. ADR 0018; zero-dispatch tests and the migrated-transport architecture gate.

Remaining caveat. No XXE verifier exists; that capability remains deferred. A future implementation requires a new safe, correlated authority contract.

SSRF

Original problem. Payload delivery or a target response could be interpreted as proof of server-side request forgery.

Resolution: Quarantined. crates/venom-scanner/src/phases/phase9_ssrf.rs is inert by default. Explicit host configuration can create only a nonce-correlated probe receipt; literal IP addresses, .localhost, .local, and .internal names are rejected and findings remain empty.

Authority and proof. ADR 0018; tests prove default zero dispatch, empty results for 200/401/403 delivery, destination validation, cancellation, and budget behavior; claim and transport gates prevent escalation.

Remaining caveat. There is no callback collector or verifier, so that capability remains deferred and delivery cannot change a vulnerability outcome. The syntactic domain filter performs no DNS resolution; the host must prevent a public-looking callback name from resolving to an unauthorized address.

Plugin and platform boundaries

Fake production detector plugins

Original problem. Stock SQL/XSS/SSTI/LFI/XXE/SSRF plugins manufactured finding and severity truth from marker-like observations.

Resolution: Removed. No production detector-plugin directory remains. Harmless INFO-only code under examples/plugin-fixtures/ exists solely to test the trait lifecycle and makes no security claim.

Authority and proof. ADR 0019; recursive plugin architecture policy in xtask/src/architecture/plugin.rs rejects the removed inventory, finding/severity/outcome authority, and direct transport across production, fixtures, and templates.

Remaining caveat. A host may supply trusted native plugins, but their output is still observation-only.

Plugin host authority

Original problem. Plugins could receive loose target data, own transport, and return finding-like records.

Resolution: Fixed. Plugin API 0.2.0 in crates/venom-scanner/src/plugin.rs receives host-owned subject/origin, cancellation, immutable limits, a bounded broker and accounting authority, redaction policy, and case identity. It records bounded evidence-only observations atomically and cannot author findings, severities, hypotheses, or outcomes.

Authority and proof. ADR 0019; plugin unit/integration tests cover provenance, redaction, duplicate identity, in-flight unregister/re-register, budgets, rollback, cancellation, timeout, and panic; xtask/src/architecture/plugin.rs pins the trait and forbidden authority.

Remaining caveat. Plugins are trusted, linked native code, not a dynamic or process sandbox.

API fake startup

Original problem. An API command could return startup success without binding a supported listener.

Resolution: Quarantined. The false-success behavior is fixed: crates/venom-api/src/lib.rs keeps a small router contract but makes start_api return typed Unsupported without binding. The CLI adapter is opt-in and absent from the default build.

Authority and proof. ADR 0020; API unit and CLI integration tests require nonzero fail-closed behavior; exact feature and dependency gates live in xtask/src/architecture/platform.rs.

Remaining caveat. A supported API listener remains deferred.

Fake MITM surface

Original problem. A proxy surface implied HTTP/TLS interception although it was only a TCP relay.

Resolution: Quarantined. crates/venom-proxy is explicitly a fixed-upstream TCP relay. The CLI uses typed SocketAddr parsing, accepts bracketed IPv6, requires an explicit upstream, and rejects malformed or incomplete arguments before dispatch. The relay has no CONNECT, TLS certificate, inspection, or dynamic upstream authority and is absent from the default CLI.

Authority and proof. ADR 0020; CLI parse/fail-closed tests in crates/venom-cli/src/main.rs and crates/venom-cli/tests/decision_scan_cli.rs; loopback-only relay tests and platform feature/module gates; current truth is also documented in the runtime map.

Remaining caveat. A MITM proxy remains deferred; Venom does not provide one.

Distribution truth

Container

Original problem. Image defaults implied a supported service/platform.

Resolution: Quarantined. The container is inert local packaging. The root Dockerfile builds the locked default CLI, runs as a non-root user, has the venom entrypoint and --help command, and defines no exposed service or health check.

Authority and proof. ADR 0020; tests/distribution/container-contract.sh, the Distribution Contracts CI job, and deployment architecture gates. .github/workflows/deploy.yml is manual only, requires an explicit publish input, and uses commit-scoped development tags instead of publishing on ordinary branch pushes. The distribution documentation labels the image a source/local/manual developer artifact.

Remaining caveat. There is no supported published registry image or service runtime. Container execution still depends on a host-provided authorized target.

Compose

Original problem. A root Compose stack advertised an unsupported platform.

Resolution: Removed. Root docker-compose.yml, docker-compose.yaml, compose.yml, and compose.yaml are absent.

Authority and proof. ADR 0020; xtask/src/architecture/deployment.rs rejects executable root/infra manifests; the deployment blueprint is explicitly future-only.

Remaining caveat. Supported deployment remains deferred until a real listener, state model, threat model, and security review exist.

Installer

Original problem. A repository installer suggested release, checksum, and platform support that the project did not provide.

Resolution: Removed. Root and scripts/ installers are absent.

Authority and proof. ADR 0020; xtask/src/architecture/deployment.rs forbids installer reintroduction and distribution documentation describes supported source and archive workflows only.

Remaining caveat. Installer support remains deferred. A future installer requires real release provenance, checksum, platform, upgrade, and uninstall contracts.

Bounded host-library surfaces

Reporting encoding

Original problem. Stringly rendering risked injection, private-data expansion, unbounded output, and partial/truncated success.

Resolution: Fixed. crates/venom-scanner/src/reporting.rs renders the typed, minimized RunReport projection as venom-rendered-run/v1 JSON, CSV, HTML, or Markdown through checked buffers under a 16 MiB hard ceiling. It applies format-specific encoding and returns typed failure without a partial result.

Authority and proof. ADR 0021; renderer tests cover all formats, incomplete lifecycle labels, private-field omission, HTML/CSV/Markdown injection defenses, control characters, exact caps, determinism, and opaque errors; xtask/src/architecture/platform.rs fingerprints the surface and blocks ambient I/O or verdict authority.

Remaining caveat. Encoding is not redaction. The host must supply already redacted summaries and owns any persistence. The default CLI has no reporting caller.

Lua

Original problem. A registry scaffold was advertised more broadly than its execution and isolation contracts justified.

Resolution: Fixed. The bounded host API is implemented while default composition remains quarantined. crates/venom-scanner/src/lua_engine.rs uses private approved-root source snapshots, fresh Lua 5.4 VMs with no standard libraries, a private environment, typed limits/results, memory and instruction controls, cooperative deadline and cancellation checks, bounded output/history, and checked concurrency. The feature has no scanner, plugin, or CLI caller.

Authority and proof. ADR 0022; Lua engine, configuration, source/symlink, cancellation, deadline, concurrency, privacy, and return-domain tests; exact feature/API/body/ambient-authority gates in xtask/src/architecture/platform.rs.

Remaining caveat. This is cooperative in-process control, not process isolation. It cannot hard-preempt parser/native/allocator work, and the approved root, caller data, and host instance budget remain trust boundaries.

Distributed coordinator

Original problem. Split concurrent maps and aspirational labels implied a coherent distributed control plane that did not exist.

Resolution: Fixed. The process-local contract is implemented while product composition remains quarantined. crates/venom-scanner/src/distributed.rs implements one bounded, revisioned, logical-time state machine with deterministic ordered selection, generation-fenced leases, explicit retry/recovery, private snapshots, checked counters, and bounded receipt-only result retention.

Authority and proof. ADR 0022; distributed unit/integration/race/model tests cover atomicity, capacity, ordering, tie-breaks, lease expiry, retries, cancellation/completion races, idempotency, and result bounds; architecture gates require a dependency-free, default-excluded, ordered/integer-only, ambient-authority-free feature.

Remaining caveat. A durable distributed control plane remains deferred. There is no network transport, authentication, serialization, persistence, coordinator epoch, background service, exactly-once guarantee, or multi-node control plane. Tokens are logical fences inside one caller-enforced epoch, not authentication.

Optional platform and analysis surfaces

Original problem. Reporting, dashboard, persistence, realtime, post-exploitation, WAF compatibility, detection records, semantic extraction, and defense records were default-compiled despite having no product caller; mlua was unconditional.

Resolution: Quarantined. crates/venom-scanner/Cargo.toml and crates/venom-scanner/src/lib.rs assign platform records to platform-models, advanced detection/anomaly records to detection, reporting to reporting, and Lua to lua. Semantic extraction and defense remain bounded host APIs and are not automatically composed into either CLI scan. Retired WAF and other false platform facades remain absent.

Authority and proof. ADRs 0020, 0021, and 0022; exact feature, dependency, module, facade, lifecycle, and default-reachability inventories in xtask/src/architecture/platform.rs; independent feature slices in .github/workflows/tests.yml.

Remaining caveat. These modules may be useful to explicit library hosts, but compilation or an example is not product composition and does not confer runtime, network, persistence, or verdict authority.

Default feature closure

Original problem. Default scanner compilation mixed the deterministic runtime, legacy runner, detector/platform records, and unsupported shells.

Resolution: Fixed. crates/venom-scanner/Cargo.toml defines the default as exactly core + scanning. Legacy scanner, plugins, reporting, Lua, distributed, platform models, API, and proxy remain independent opt-in closures. Historical full, enterprise, and research names are compatibility feature aggregates, not operational scan profiles.

Authority and proof. Exact feature/dependency/module/re-export inventories in xtask/src/architecture/platform.rs; independent feature closures and aggregate checks in .github/workflows/tests.yml; current composition in the runtime map.

Remaining caveat. Compilation is not runtime composition. An opt-in host library does not silently become a product capability.

Validation and remaining external work

The reviewed implementation head df19f00ea2171cd8486a6256cb318755d063fb47 has 26 terminal PR checks: 23 successful, two intentionally skipped, one neutral external scanner, and no failures or pending work. The accepted coverage record is 6edc4d925739.json: aggregate 21,439 / 24,842 (86.301425%) and patch 10,345 / 11,966 (86.453284%). Coverage is a regression/navigation signal, not proof of correctness or security.

This closure does not claim production readiness. Independent security assessment, external adoption, stable Scanner SDK/plugin compatibility, endpoint-scale performance evidence, and an upgrade/deprecation lifecycle remain release gates in the repository-root PROJECT_STATUS.md. The published v0.9.0-alpha GitHub Release also predates this runtime; annotating or deprecating that external release metadata is a separate repository action.