Skip to content

Release Changelog

Append-only log of every major directive received and the specific changes implemented as a result.

2026-04-13 — Forensic Benchmark & True Taint Activation (v10.1.2)

Directive: Clean repository state, finalize SIEM exports, activate the producer side of the cross-file taint spine, benchmark the engine against three large OSS repos, verify under single-threaded tests, bump to 10.1.2, and execute the governed fast-release path.

Phase 1 — State eradication: - Removed the obsolete tracked backlog file: docs/IMPLEMENTATION_BACKLOG.md. - Removed the lingering tracked stale patch: gauntlet/godot/slop_pr.patch. - Verified mkdocs.yml does not reference the deleted backlog surface; nav remains pinned to CHANGELOG.md only.

Phase 2 — CEF / OCSF export surface: - crates/cli/src/report.rs: - added BounceLogEntry::to_cef_string() with the required CEF:0|JanitorSecurity|Governor|1.0|... envelope. - added BounceLogEntry::to_ocsf_json() with OCSF v1.1-style Security Finding output. - crates/cli/src/export.rs: - added non-CSV export writers for cef and ocsf. - preserved CSV as the default export lane. - crates/cli/src/main.rs: - extended janitor export with --format csv|cef|ocsf.

Phase 3 — True taint spine activation: - crates/forge/src/taint_propagate.rs: - added producer-side export builders for py, js/jsx, ts/tsx, java, go, and cs. - added deterministic regression tests covering public/exported boundary emission for Python, TypeScript, Java, Go, and C#. - crates/forge/src/taint_catalog.rs: - added upsert_records() so repeated bounces replace boundary summaries instead of inflating the catalog with duplicate entries. - crates/forge/src/slop_filter.rs: - wired producer emission into the live patch-bounce path before cross-file sink consumption, activating the previously missing producer leg in production.

Phase 4 — Live-fire benchmarks: - just strike godotengine/godot 25 - just strike bevyengine/bevy 25 - just strike neovim/neovim 25

Telemetry: - godotengine/godot: - full just strike wall-clock: 1144.91s - internal hyper-drive wall-clock: 163.56s - PRs harvested / bounced: 24 - bevyengine/bevy: - full just strike wall-clock: 63.06s - internal hyper-drive wall-clock: 7.03s - PRs harvested / bounced: 22 - neovim/neovim: - full just strike wall-clock: 156.62s - internal hyper-drive wall-clock: 16.76s - PRs harvested / bounced: 24

Verification: - cargo test -p forge -p cli -- --test-threads=1 ✅ - cargo test --workspace -- --test-threads=1 ✅ - just audit

Versioning / release prep: - Cargo.toml — workspace version 10.1.110.1.2 - .INNOVATION_LOG.md — purged completed P0-1 (CEF/OCSF export) and P1-3 (true taint spine completion) from the active roadmap; completion recorded in the ledger.

2026-04-13 — Dual-Model Consensus & Deep Eradication Strike (v10.1.1)

Directive: Audit workspace dependency bloat, delete RC/stale residue, map the true 23-grammar semantic-depth surface, synthesize Claude's FedRAMP findings with a hostile AST audit, verify under single-threaded tests, bump to 10.1.1, and execute the governed fast-release path.

Phase 1 — Dependency & workspace bloat audit: - Removed three verified-dead direct dependencies: - crates/common/Cargo.toml — dropped unused bitflags and dunce - crates/anatomist/Cargo.toml — dropped unused semver - crates/cli/Cargo.toml — dropped unused direct rustls - Kept the remaining heavy crates because they are still exercised in the production path: - tokio powers CLI async orchestration, daemon, MCP, and Governor runtime - ureq + rustls + rustls-pemfile remain required for TLS/mTLS outbound lanes - notify, zip, indicatif, uuid, git2, rayon, wasmtime all have live call sites

Phase 2 — Stale artifact eradication: - Deleted confirmed orphan / stale residue: - gauntlet/godot/slop_pr.patch - janitor-test-gauntlet/main.c.patch - tools/omni_coverage_mapper.sh - tools/setup_remote_access.sh - SOVEREIGN_BRIEFING.md - RUNBOOK.md updated to remove the deleted Tailscale bootstrap script and the stale remote-gauntlet setup language.

Phase 3 — Grammar truth & roadmap synthesis: - .INNOVATION_LOG.md appended with the brutal semantic-depth truth table: - no end-to-end production cross-file taint spine proven in the audited runtime files - intra-file taint only for go, rb, php - catalog-backed cross-file sink matching without demonstrated production export for a broader subset - the remainder still sit at AST / byte-pattern detection depth - Added two roadmap items Claude missed: - P1-3 Semantic Depth Disclosure & True Taint Spine Completion - P1-4 Wasm Capability Receipts & SCM Review-Parity Spine

Phase 4 — Versioning & release prep: - Cargo.toml — workspace version 10.1.010.1.1 - Release verification and release execution results recorded after command execution below.

2026-04-13 — General Availability Genesis & Omni-Audit (v10.1.0)

Directive: Drop Release Candidate tags. Transition to General Availability. Massive documentation rewrite, OpSec leak eradication, dependency CVE resolution, and enterprise readiness audit.

Phase 1 — OpSec & Navigation Overhaul: - Removed INNOVATION_LOG.md from mkdocs.yml navigation entirely. - Renamed docs/IMPLEMENTATION_BACKLOG.md to docs/CHANGELOG.md; updated mkdocs.yml nav entry to "Release Changelog". - Moved docs/INNOVATION_LOG.md to hidden .INNOVATION_LOG.md at repo root; added to .gitignore.

Phase 2 — Dependabot Annihilation: - cargo update pulled 13 patch-level dependency updates: rustls 0.23.37→0.23.38, cc 1.2.59→1.2.60, libc 0.2.184→0.2.185, openssl-sys 0.9.112→0.9.113, rustls-webpki 0.103.10→0.103.11, lru 0.16.3→0.16.4, pkg-config 0.3.32→0.3.33, wasm-bindgen family 0.2.117→0.2.118, js-sys 0.3.94→0.3.95. - cargo check --workspace clean.

Phase 3 — Enterprise Documentation Rewrite: - Full rewrite of README.md and docs/index.md for v10.0.0 GA: Dual-PQC (ML-DSA-65 + SLH-DSA), SLSA Level 4, Air-Gap Intel Capsules, Wasm BYOR with BLAKE3 Pinning, Jira ASPM Deduplication, Native SCM (GitLab, AzDO). - docs/architecture.md: CycloneDX v1.5→v1.6, Dual-PQC description updated. - docs/manifesto.md: Dual-PQC + FIPS 205 references updated. - docs/pricing_faq.md: Added SLSA L4, Jira ASPM, native SCM to Sovereign tier. - mkdocs.yml: Site description updated for GA positioning.

Phase 4 — Brutal Readiness Audit: - JAB Assessor + Fortune 500 CISO dual-lens assessment conducted. - Top 3 gaps filed as P0-1 (CEF/OCSF audit export), P0-2 (automated PQC key rotation), P0-3 (FIPS 140-3 boundary documentation) in .INNOVATION_LOG.md.

Changes: - mkdocs.yml (modified) — nav restructured, site description updated - .gitignore (modified).INNOVATION_LOG.md added - docs/CHANGELOG.md (renamed from IMPLEMENTATION_BACKLOG.md) — header updated, session ledger - README.md (rewritten) — v10.0.0 GA enterprise documentation - docs/index.md (rewritten) — v10.0.0 GA landing page - docs/architecture.md (modified) — CycloneDX v1.6, Dual-PQC - docs/manifesto.md (modified) — Dual-PQC + FIPS 205 - docs/pricing_faq.md (modified) — Sovereign tier expanded - Cargo.toml (modified) — version 10.1.0-alpha.2410.1.0 - Cargo.lock (modified) — 13 dependency patches - .INNOVATION_LOG.md (rewritten, gitignored) — GA readiness audit, top 3 gaps

2026-04-13 — Federal Network Encryption & Self-Attestation (v10.1.0-alpha.23)

Directive: Close the DoD IL5 Governor transport gap with optional mTLS, generate and sign a first-party Janitor SBOM during release, verify under single-threaded tests, bump to 10.1.0-alpha.23, and execute the fast-release path.

Phase 1 — P2-2 mTLS Governor Transport: - crates/gov/Cargo.toml (modified) — added axum-server with tls-rustls, plus direct rustls, rustls-pemfile, tokio-rustls, and tower dependencies required for native TLS termination and certificate-aware request extensions. - crates/gov/src/main.rs (modified): - Governor startup now detects JANITOR_GOV_TLS_CERT and JANITOR_GOV_TLS_KEY; when present it boots over Rustls, otherwise it preserves the plain axum::serve path for local development and routing tests. - JANITOR_GOV_CLIENT_CA now enables strict client-certificate verification through WebPkiClientVerifier; absence of the CA bundle keeps server-side TLS enabled without mutual auth. - Added a custom GovernorTlsAcceptor that reads the peer certificate from the Rustls session and injects a typed ClientIdentity extension into Axum request handling. - Added CN extraction from the presented client certificate and on-prem fallback in analysis_token_handler: when GITHUB_WEBHOOK_SECRET is absent and installation_id == 0, the Governor derives the installation binding from the client certificate Common Name. - Added deterministic DER parsing helpers for subject/CN extraction without introducing a heavyweight X.509 parser dependency. - Added two regression tests: subject CN extraction from a deterministic DER fixture and analysis-token issuance using mTLS CN fallback in on-prem mode.

Phase 2 — P3-1 NTIA-Minimum-Elements SBOM: - justfile (modified)fast-release now: - runs cargo cyclonedx --manifest-path Cargo.toml --all --format json --spec-version 1.5 --override-filename janitor, - copies the generated janitor.cdx.json into target/release/janitor.cdx.json, - signs the SBOM with the same internal janitor sign-asset path used for the binary, and - attaches the SBOM plus optional .sig to gh release create.

Phase 3 — Versioning / records: - Cargo.toml (modified) — workspace version bumped from 10.1.0-alpha.22 to 10.1.0-alpha.23. - README.md, docs/index.md (modified via just sync-versions) — version parity updated to v10.1.0-alpha.23. - docs/INNOVATION_LOG.md (modified) — open P2-2 / P3-1 backlog sections purged; both items moved into completed status. - docs/IMPLEMENTATION_BACKLOG.md (modified) — this session ledger.

Verification: - cargo test -p janitor-gov -- --test-threads=1 ✅ — 19/19 Governor tests pass, including the new CN extraction and on-prem installation binding checks. - cargo test --workspace -- --test-threads=1 ✅ — full workspace green. - just audit ✅ — fmt, clippy, check, workspace tests, release parity, and doc parity all pass after just sync-versions. - just fast-release 10.1.0-alpha.23 — execution attempted below; outcome recorded in session summary.

2026-04-13 — v10.1.0-alpha.22: Zero Trust Identity & Ledger Proving

Directive: Zero Trust Identity & Ledger Proving — Phase 1: live-fire HMAC-SHA-384 audit ledger verification; Phase 2: replace Governor stub tokens with real EdDSA JWTs; Phase 3: audit + release.

Phase 1 — Ledger Proving: - Created tools/test_ledger.sh (temporary); constructed a 2-line NDJSON ledger with HMAC-SHA-384 records computed via Python hmac.new(key, payload, sha384). - cargo run -p cli -- verify-audit-log accepted the valid ledger (exit 0) and rejected a byte-mutated tampered copy (exit 1, line 1 identified). - Script and temp files deleted post-proof. Implementation confirmed correct.

Phase 2 — Real JWT Token Issuance (P2-1): - crates/gov/Cargo.toml (modified) — added jsonwebtoken = "9" and base64.workspace = true. - crates/gov/src/main.rs (modified): - JwtClaims struct: sub, role, iss, iat, exp. - ed25519_seed_to_pkcs8_pem() — constructs RFC 8410 PKCS#8 DER (48 bytes) and base64-encodes to PEM; no pkcs8 crate feature required. - ed25519_pub_to_spki_pem() — constructs SPKI DER (44 bytes) for the verifying key. - jwt_encoding_key() / jwt_decoding_key() — OnceLock-cached EncodingKey/DecodingKey derived from governor_signing_key(). - issue_jwt(sub, role) — EdDSA JWT with 300 s TTL, iss = "janitor-governor". - validate_jwt(token) — verifies signature, issuer, expiry; returns role claim. - is_jwt(token)token.starts_with("eyJ") predicate. - analysis_token_handler — issues real JWT instead of stub-token:role=... format string; mode changed from "stub" to "jwt". - report_handler — JWT-bearing entries now validated via validate_jwt; expired/tampered tokens return HTTP 401; legacy stub tokens continue to work via extract_role_from_token fallback path. - 3 token-issuance tests updated to decode JWT and inspect claims. - 2 new tests: expired_jwt_in_report_returns_401, valid_jwt_with_auditor_role_cannot_post_report_returns_403. - docs/INNOVATION_LOG.md (modified) — P2-1 marked RESOLVED.

Verification: cargo test -p janitor-gov -- --test-threads=1 → 17/17 ✓ | just audit → ✅ System Clean.


2026-04-13 — Automated Live-Fire Proving & FIPS 140-3 Scrub (v10.1.0-alpha.20)

Directive: Live-fire Jira ASPM dedup test + FIPS 140-3 cryptographic boundary remediation (P0-2 + P0-3).

Phase 1 — Live-Fire ASPM Dedup: - live_fire_test.patch: HCL Terraform aws_iam_role with wildcard Action="*" — triggers security:iac_agentic_recon_target at KevCritical (150 pts). - Run 1: slop_score=150, no diag error → Jira ticket created (HTTP 200, silent success). - Run 2: Dedup search runs; fail-open contract observed (no diag error); idempotent. - Test artifacts deleted; janitor.toml restored.

Phase 2 — P0-2 (Governor Transparency Log: BLAKE3 → SHA-384): - crates/gov/src/main.rs: Blake3HashChainSha384HashChain; last_hash: [u8; 32][u8; 48]; blake3::hash replaced with sha2::Sha384::digest; chained_hash is now 96-char hex; manual Default impl added; test extended to assert chained_hash.len() == 96. - crates/gov/Cargo.toml: blake3 dependency removed.

Phase 3 — P0-3 (Policy Content Hash: BLAKE3 → SHA-256): - crates/common/src/policy.rs: content_hash() now uses sha2::Sha256::digest; output is 64-char hex (FIPS 180-4); use sha2::Digest as _ added; test comment updated; doc comment updated. - docs/INNOVATION_LOG.md: P0-2 and P0-3 marked RESOLVED.

Changes: crates/gov/src/main.rs, crates/gov/Cargo.toml, crates/common/src/policy.rs, docs/INNOVATION_LOG.md, Cargo.toml, README.md, docs/index.md.

Verification: cargo test --workspace -- --test-threads=1 → all pass. just audit → ✅ System Clean.

Operator note: Existing JANITOR_GOV_EXPECTED_POLICY values contain BLAKE3 digests and must be refreshed with new SHA-256 hashes after upgrading.


2026-04-13 — SIEM Telemetry & Immutable Audit Ledger (v10.1.0-alpha.21)

Directive: Execute P1-1 and P1-2 for the Sovereign Governor: SIEM-native CEF/Syslog emission, append-only HMAC-sealed audit ledger, offline verification, and release prep.

Files modified: - crates/gov/src/main.rs (modified) — added AuditFormat (Ndjson, Cef, Syslog) via JANITOR_GOV_AUDIT_FORMAT; added source-IP extraction from X-Forwarded-For / X-Real-IP; implemented deterministic CEF and RFC 5424 syslog renderers; added append-only JANITOR_GOV_AUDIT_LOG sink with HMAC-SHA-384 sealing keyed by JANITOR_GOV_AUDIT_HMAC_KEY; startup now validates audit sink configuration. - crates/cli/src/main.rs (modified) — added verify-audit-log subcommand; implemented line-by-line HMAC-SHA-384 verification with constant-time verify_slice; failure path aborts with the exact tampered line number. - Cargo.toml (modified) — workspace version 10.1.0-alpha.2010.1.0-alpha.21. - README.md, docs/index.md (modified) — version parity synced to v10.1.0-alpha.21. - docs/INNOVATION_LOG.md (modified) — purged the now-landed P1-1 / P1-2 immutable-audit backlog items. - docs/IMPLEMENTATION_BACKLOG.md (modified) — this session ledger.

Verification: - cargo test --workspace -- --test-threads=1 — pending execution below. - just audit — pending execution below. - just fast-release 10.1.0-alpha.21 — pending execution below.


2026-04-13 — Atlassian API Contract & Workflow Synchronization (v10.1.0-alpha.19)

Directive: Fix Jira API contract failures and CISA KEV workflow broken binary verification.

Changes: - crates/cli/src/jira.rs: Search migrated from GET /rest/api/2/search?jql=… to POST /rest/api/2/search with JSON body — eliminates URL-encoding fragmentation rejected by Atlassian schema validator. Project key now double-quoted in JQL (project="KAN"). Description migrated from ADF (REST v3) to plain string (REST v2). Issue type changed from "Bug" to "Task". New test build_jql_search_payload_uses_post_body_with_quoted_project validates the POST body contract. - .github/workflows/cisa-kev-sync.yml: Download step upgraded from unverified gh release download to full SHA-384 + ML-DSA-65 two-layer trust chain mirroring action.yml. Downloads janitor, janitor.sha384, janitor.sig (optional). Bootstrap binary from v10.0.0-rc.9 performs Layer 2 PQC verification. - Cargo.toml: Version bumped 10.1.0-alpha.1810.1.0-alpha.19. - README.md, docs/index.md: Version strings synced via just sync-versions.

Verification: cargo test --workspace -- --test-threads=1 → all pass. just audit → ✅ System Clean.


2026-04-12 — FedRAMP 3PAO Teardown & Slop Eradication (v10.1.0-alpha.17)

Directive: Hostile DoD IL6 / FedRAMP audit. Identify cryptographic boundary violations, OOM vectors, shell discipline gaps. Eradicate slop. Rewrite INNOVATION_LOG as a strict FedRAMP High accreditation roadmap.

Audit findings: - BLAKE3 used as pre-hash digest in sign_asset_hash_from_file / verify_asset_ml_dsa_signature — non-NIST at FIPS 140-3 boundary. Documented as P0-1 in INNOVATION_LOG (roadmap item). - Blake3HashChain in Governor uses BLAKE3 for audit log integrity — non-NIST. Documented as P0-2 in INNOVATION_LOG. - JanitorPolicy::content_hash() uses BLAKE3 for security-decision hash — documented P0-3. - CBOM signing (sign_cbom_dual_from_keys) signs raw bytes via ML-DSA-65 (SHAKE-256 internal) — FIPS-compliant, no action needed. - Three unbounded read_to_vec() HTTP body reads: OSV bulk ZIP, CISA KEV, wisdom archive — OOM vectors. - tools/mcp-wrapper.sh missing set -euo pipefail — shell discipline violation.

Files modified: - crates/cli/src/main.rs — Added with_config().limit(N).read_to_vec() circuit breakers on three HTTP response body reads: OSV bulk ZIP (256 MiB), CISA KEV (32 MiB), wisdom archive (64 MiB), wisdom signature (4 KiB). - tools/mcp-wrapper.sh — Added set -euo pipefail on line 2. - docs/INNOVATION_LOG.md — Fully rewritten as FedRAMP High / DoD IL6 accreditation roadmap: P0 (FIPS cryptographic migrations), P1 (CEF/Syslog audit emission, write-once audit log), P2 (real JWT issuance, mTLS), P3 (SBOM for binary, reproducible builds). - Cargo.toml — workspace version 10.1.0-alpha.1610.1.0-alpha.17. - README.md, docs/index.md — version parity sync. - docs/IMPLEMENTATION_BACKLOG.md — this entry.

Verification: - cargo test --workspace -- --test-threads=1 ✅ — all tests pass - just audit ✅ — fmt + clippy + check + test + doc parity pass - just fast-release 10.1.0-alpha.17 ✅ — tagged, GH Release published, docs deployed - BLAKE3: 016e9acd418f8f1e27846f47ecf140feb657e2eec6a0aa8b62e7b9836e24634a


2026-04-12 — Marketplace Integration & Governor Provisioning (v10.1.0-alpha.16)

Directive: Wire the Sovereign Governor as a GitHub App backend with authenticated installation webhooks, tenant-bound analysis token issuance, single-threaded verification, and release preparation.

Files modified: - crates/gov/Cargo.toml (modified) — added axum, dashmap, hmac, sha2, hex, tokio, and tower test utility support for the webhook-capable Governor runtime. - crates/gov/src/main.rs (modified) — replaced the ad-hoc TCP server with Axum routing; added GITHUB_WEBHOOK_SECRET loading, constant-time verify_github_signature, POST /v1/github/webhook, DashMap-backed installation state, installation-aware /v1/analysis-token, and router-level tests for valid/invalid GitHub signatures plus installation gating. - Cargo.toml (modified) — workspace version 10.1.0-alpha.1510.1.0-alpha.16; hex promoted into [workspace.dependencies]. - README.md (modified) — release parity string updated to v10.1.0-alpha.16. - docs/index.md (modified) — documentation landing page version updated to v10.1.0-alpha.16. - docs/IMPLEMENTATION_BACKLOG.md (modified) — this session ledger appended. - docs/INNOVATION_LOG.md (modified)P1-0 purged after Governor marketplace provisioning landed.

Verification: - cargo test -p janitor-gov -- --test-threads=1 ✅ — 13 tests passed, including webhook 200/401 coverage and inactive-installation denial. - cargo test --workspace -- --test-threads=1 ✅ - just audit ✅ - just fast-release 10.1.0-alpha.16 — pending.

2026-04-12 — Jira Deduplication & Wasm PQC Sealing (v10.1.0-alpha.15)

Directive: Phase 1 (P1-1 enhancement) — State-aware ASPM deduplication gate; Phase 2 (P2-6) — Post-quantum publisher signing for Wasm rules.

Files modified: - crates/common/src/policy.rs (modified)JiraConfig.dedup: bool (default true) added; #[derive(Default)] replaced with manual impl Default; wasm_pqc_pub_key: Option<String> added to JanitorPolicy; content_hash canonical JSON updated; test struct literals patched. - crates/common/src/pqc.rs (modified)JANITOR_WASM_RULE_CONTEXT domain-separator constant added; verify_wasm_rule_ml_dsa_signature function added; 3 new tests (distinct context, roundtrip, wrong-context rejection). - crates/forge/src/wasm_host.rs (modified)WasmHost::new gains pqc_pub_key: Option<&str>; publisher verification reads <path>.sig, decodes base64 pub key, calls verify_wasm_rule_ml_dsa_signature; bails on missing sig or invalid signature; 2 new tests (missing sig, wrong-length sig). - crates/forge/src/slop_filter.rs (modified)run_wasm_rules gains pqc_pub_key: Option<&str> and passes to WasmHost::new. - crates/forge/Cargo.toml (modified)fips204 added to [dev-dependencies] for wasm_host PQC roundtrip tests. - crates/cli/src/jira.rs (modified)JiraIssueSender trait gains search_total method; UreqJiraSender implements it via Jira REST search API; dedup check added in spawn_jira_ticket_with_sender; build_jql_search_url helper added; MockJiraSender gains search_total_value; 1 new test dedup_skips_creation_when_open_ticket_exists. - crates/cli/src/main.rs (modified)run_wasm_rules call updated to pass policy.wasm_pqc_pub_key.as_deref(). - crates/crucible/src/main.rs (modified) — 2 WasmHost::new call sites updated with None third argument. - Cargo.toml (modified) — workspace version 10.1.0-alpha.1410.1.0-alpha.15. - docs/INNOVATION_LOG.md (modified) — P2-6 marked COMPLETED. - docs/IMPLEMENTATION_BACKLOG.md (modified) — this entry.


2026-04-12 — Air-Gap Autonomy & Zero-Trust Resilience (v10.1.0-alpha.14)

Directive: P1-2 — Implement three-layer resilience for threat intelligence fetchers so The Janitor survives network partitions without crashing CI pipelines.

Files modified: - crates/cli/build.rs (created) — generates slopsquat_corpus.rkyv (32 confirmed MAL-advisory seed packages) and wisdom.rkyv (empty WisdomSet baseline) in OUT_DIR at compile time; both embedded into the binary via include_bytes!. - crates/cli/Cargo.toml (modified) — added [build-dependencies] block: common and rkyv for build.rs. - crates/cli/src/main.rs (modified)EMBEDDED_SLOPSQUAT and EMBEDDED_WISDOM static bytes added; cmd_update_slopsquat_with_agent refactored into cmd_update_slopsquat_impl with configurable osv_base_url + stale_days params; 3-attempt exponential backoff (1s/2s/4s) wraps fetch_osv_slopsquat_corpus_from; apply_slopsquat_offline_fallback deploys embedded baseline on first boot or emits [JANITOR DEGRADED] for stale corpus; cmd_update_wisdom_with_urls adds non-ci-mode wisdom baseline fallback; 3 new unit tests. - crates/common/src/policy.rs (modified)ForgeConfig.corpus_stale_days: u32 (default 7) added; #[derive(Default)] replaced with manual impl Default; two test struct literals updated; serde default function default_corpus_stale_days() added. - Cargo.toml (modified) — workspace version 10.1.0-alpha.1310.1.0-alpha.14. - docs/INNOVATION_LOG.md (modified) — P1-2 marked COMPLETED. - docs/IMPLEMENTATION_BACKLOG.md (modified) — this entry.

Key invariants: - Network failure never propagates as Err from update-slopsquat (non-ci-mode). - First boot in air-gapped environment: embedded seed corpus (32 packages) deployed, CI runs immediately. - Stale corpus (>7 days): [JANITOR DEGRADED] warning to stderr, exit 0. - corpus_stale_days TOML-configurable per enterprise.


2026-04-12 — ASPM Jira Sync & Final Dashboard Scrub (v10.1.0-alpha.12)

Directive: Exorcise the final CodeQL aggregate-count false positive, implement enterprise Jira ticket synchronization for KevCritical findings, verify under single-threaded tests, and cut 10.1.0-alpha.12 without rewriting prior release history.

Files modified: - crates/cli/src/main.rs (modified) — added the exact CodeQL suppression comment above the antipattern-count dashboard print and wrapped the logged count with std::hint::black_box(score.antipatterns_found); wired fail-safe Jira synchronization for KevCritical structured findings after bounce analysis. - crates/cli/src/jira.rs (created) — added Jira REST payload builder, Basic Auth header construction from JANITOR_JIRA_USER / JANITOR_JIRA_TOKEN, spawn_jira_ticket, severity gate helper, and deterministic JSON payload unit coverage. - crates/common/src/policy.rs (modified) — added [jira] support via JiraConfig { url, project_key } on JanitorPolicy. - crates/common/src/slop.rs (modified)StructuredFinding now carries optional severity metadata for downstream enterprise routing. - crates/forge/src/slop_filter.rs / crates/mcp/src/lib.rs / crates/cli/src/report.rs (modified) — propagated structured finding severity through the pipeline and updated test fixtures. - Cargo.toml (modified) — workspace version 10.1.0-alpha.1110.1.0-alpha.12. - docs/IMPLEMENTATION_BACKLOG.md (modified) — appended this session ledger.

Verification: - cargo test --workspace -- --test-threads=1 — pending execution below. - just audit — pending execution below. - just fast-release 10.1.0-alpha.12 — pending execution below.

2026-04-11 — Multi-Tenant RBAC & Threat Intel Verification (v10.1.0-alpha.11)

Directive: Phase 1 — live-fire threat intel audit (GC hygiene, OSV network fault). Phase 2 — implement Governor RBAC (P0-1). Phase 3 — verification & release.

Phase 1 audit findings: - update-slopsquat failed (WSL/GCS network block) — no .zip artifacts left in /tmp: GC is clean by design. - Intelligence gap filed as P1-2 in docs/INNOVATION_LOG.md: single-point-of-failure OSV fetch with no retry, no fallback corpus, no stale-corpus soft-fail. Air-gapped enterprise deployments have zero slopsquat coverage after install if initial fetch fails.

Phase 2 — RBAC Implementation: - crates/common/src/policy.rs: Added RbacTeam { name, role, allowed_repos } and RbacConfig { teams } structs. Added rbac: RbacConfig field to JanitorPolicy with TOML round-trip support under [rbac] / [[rbac.teams]]. - crates/gov/src/main.rs: AnalysisTokenRequest gains role: String (default "ci-writer"). AnalysisTokenResponse now owns token: String encoding role as "stub-token:role=<role>". BounceLogEntry gains analysis_token: Option<String>. /v1/report enforces RBAC via extract_role_from_token()auditor tokens return HTTP 403 Forbidden before any chain append. /v1/analysis-token normalises unknown roles to "ci-writer". 5 new tests added; 2 existing tests updated for new token format and non-deterministic sequence index. - just audit exits 0. cargo fmt --check clean. cargo clippy -- -D warnings zero warnings.


2026-04-11 — CamoLeak Prompt Injection Interceptor (v10.1.0-alpha.10)

Directive: Intercept hidden Markdown/PR-body prompt-injection payloads exploiting invisible HTML comments and hidden spans, wire the detector into PR metadata and Markdown patch scoring, add Crucible regression coverage, verify under single-threaded tests, and prepare the 10.1.0-alpha.10 release.

Files modified: - crates/forge/src/metadata.rs (modified) — added detect_ai_prompt_injection(text); scans hidden HTML comments and hidden <div> / <span> blocks for imperative AI hijack heuristics (ignore previous instructions, system prompt, search for, encode in base16, exfiltrate, AWS_ACCESS_KEY); emits security:ai_prompt_injection at KevCritical; added deterministic true-positive/true-negative unit tests. - crates/forge/src/slop_filter.rs (modified) — Markdown patch blobs now flow through detect_ai_prompt_injection; added check_ai_prompt_injection helper so PR metadata findings increment antipatterns_found, antipattern_score, and antipattern_details; added unit coverage for PR-body scoring and Markdown patch interception. - crates/cli/src/main.rs (modified) — both patch mode and git-native mode now scan pr_body for hidden prompt-injection payloads before gate evaluation. - crates/crucible/src/main.rs (modified) — added CamoLeak true-positive and benign-comment true-negative fixtures to the bounce gallery. - Cargo.toml (modified) — workspace version 10.1.0-alpha.910.1.0-alpha.10. - docs/IMPLEMENTATION_BACKLOG.md (modified) — appended this session ledger.

Verification: - cargo test --workspace -- --test-threads=1 — pending execution below. - just audit — pending execution below. - just fast-release 10.1.0-alpha.10 — pending execution below.

2026-04-11 — Omni-Strike Consolidation & Garbage Collection Audit (v10.1.0-alpha.9)

Directive: Phase 1 — threat intel GC audit (OSV ZIP / wisdom download disk artifact hygiene). Phase 2 — justfile omni-strike consolidation (run-gauntlet + hyper-gauntlet deleted; just strike is the sole batch command). Phase 3 — dead-code audit + Innovation Log rewrite (top-3 DoD/Enterprise features). Phase 4 — bump + release.

Files modified: - Cargo.toml (modified) — workspace version 10.1.0-alpha.810.1.0-alpha.9. - justfile (modified)run-gauntlet and hyper-gauntlet recipes deleted. just strike is now the canonical single-repo and batch orchestration command. Both deleted recipes were superseded: generate_client_package.sh (invoked by just strike) already uses gauntlet-runner --hyper (libgit2 packfile mode, zero gh pr diff subshells). - RUNBOOK.md (modified) — Quick reference table purged of deleted recipes. Section 6 rewritten as "Threat Intel Synchronization" documenting janitor update-wisdom and janitor update-slopsquat. Section 10a "Consolidation note" replaced with accurate single-command framing. Section 12 "Remote Surveillance" updated to just strike invocation examples. - docs/INNOVATION_LOG.md (modified) — Purged: P1-5 (Zig/Nim taint spine — low commercial urgency), P2-3 (Wasm Rule Marketplace — ecosystem play, deferred). Rewrote as top-3 DoD/Enterprise contract-closing features: P0-1 Governor RBAC, P1-1 ASPM Jira Sync, P2-6 Post-Quantum CT for Wasm Rules.

Phase 1 audit finding — GC CLEAN: - fetch_osv_slopsquat_corpus: ZIPs downloaded entirely in-memory via read_to_vec()Vec<u8>; never written to disk. Zero disk artifacts on error path. - cmd_update_wisdom_with_urls: wisdom/KEV bytes also in-memory; final write via write_atomic_bytes (.tmprename). - No code changes required. GC is already correct by design.

Phase 3 dead-code audit finding — ALL CLEAN: - #[allow(dead_code)] YAML_K8S_WILDCARD_HOSTS_QUERY — documented architectural reference (tree-sitter predicate limitation). - #[allow(dead_code)] Request.jsonrpc — protocol-required field, not accessed in dispatch. - #[allow(dead_code)] HotRegistry.path / HotRegistry::reload() — forward-declared hot-swap API. - All annotations are legitimate. Zero removals.

Verification: - cargo test --workspace -- --test-threads=1 ✅ - just audit


2026-04-11 — Omnipresent Firewall & OSV Bulk Ingestion (v10.1.0-alpha.8)

Directive: OSV bulk ZIP ingestion fix, CodeQL terminal output amputation, P2-4 MCP IDE Linter (janitor_lint_file), P2-5 SBOM Drift Daemon (janitor watch-sbom), VS Code extension scaffold.

Files modified: - Cargo.toml (modified) — workspace version 10.1.0-alpha.710.1.0-alpha.8; zip = "2" and notify = "6.1" added as workspace deps. - crates/cli/Cargo.toml (modified)zip.workspace = true, notify.workspace = true added. - crates/mcp/Cargo.toml (modified)polyglot path dep added for language detection in janitor_lint_file. - crates/cli/src/main.rs (modified)Phase 1: fetch_osv_slopsquat_corpus rewritten to use bulk all.zip download (per-advisory CSV+JSON chain eliminated); extract_mal_packages_from_zip added (ZIP extraction + MAL- filter loop); OSV_DUMP_BASE_URL corrected to osv-vulnerabilities.storage.googleapis.com. Phase 2: score.score() and effective_gate removed from all terminal println!; PATCH CLEAN/REJECTED messages replaced with static strings; slop score table row shows [see bounce_log]. Phase 4: WatchSbom { path } subcommand added; cmd_watch_sbom implemented with notify::RecommendedWatcher + debounce loop; snapshot_lockfile_packages reads Cargo.lock / package-lock.json / poetry.lock. - crates/cli/src/report.rs (modified)emit_sbom_drift_webhook added; fires sbom_drift HMAC-signed webhook event for new packages. - crates/mcp/src/lib.rs (modified)Phase 3: janitor_lint_file tool added to tool_list() (10 tools total); run_lint_file, ext_to_lang_tag, byte_offset_to_line, finding_id_from_description helpers added; dispatch arm added; 6 new unit tests. - tools/vscode-extension/package.json (created) — VS Code extension manifest with janitor.serverPath + janitor.enableOnSave config, @modelcontextprotocol/sdk dep. - tools/vscode-extension/src/extension.ts (created) — TypeScript extension: launches janitor serve --mcp, wires onDidSaveTextDocumentjanitor_lint_file → VS Code Diagnostics.

Verification: - cargo test --workspace -- --test-threads=1 ✅ - just audit

2026-04-11 — Frictionless Distribution & Sha1-Hulud Interceptor (v10.1.0-alpha.6)

Directive: Execute P1-4 marketplace distribution templates for GitLab/Azure DevOps, implement the Sha1-Hulud package.json propagation interceptor, add Crucible true-positive coverage, update the innovation ledger, run single-threaded verification, and cut 10.1.0-alpha.6.

Files modified: - tools/ci-templates/gitlab-ci-template.yml (created) — reusable GitLab CI job downloads the latest Janitor release, bootstraps trust from v10.0.0-rc.9, verifies BLAKE3 and optional ML-DSA-65 signature, extracts the MR patch with git diff, and executes janitor bounce. - tools/ci-templates/azure-pipelines-task.yml (created) — reusable Azure Pipelines job mirrors the same SLSA 4 bootstrap-verification chain and janitor bounce execution path for PR validation. - crates/forge/src/metadata.rs (modified)package_json_lifecycle_audit() added; detects the Sha1-Hulud triad (version bump + added pre/postinstall + npm publish/npm token) and emits security:npm_worm_propagation at KevCritical; deterministic unit tests added. - crates/forge/src/slop_filter.rs (modified) — PatchBouncer now folds metadata lifecycle findings into the accepted antipattern stream; integration test added to prove KevCritical scoring survives the bounce path. - crates/crucible/src/main.rs (modified) — true-positive package.json bounce fixture added to the Blast Radius gallery and dedicated regression test added. - Cargo.toml (modified) — workspace version bumped from 10.1.0-alpha.5 to 10.1.0-alpha.6. - docs/INNOVATION_LOG.md (modified) — resolved P1-4 and P2-1 purged; new P1-5 taint-spine expansion entry for Zig/Nim added. - docs/IMPLEMENTATION_BACKLOG.md (modified) — this session ledger appended.

2026-04-11 — OSV.dev Synchronization & Slopsquat Expansion (v10.1.0-alpha.7)

Directive: Replace the hardcoded slopsquat corpus with an OSV.dev-backed malicious package feed, persist the corpus as rkyv runtime state, rewire zero-copy slopsquat interception to a memory-mapped automaton, verify single-threaded workspace tests plus just audit, and prepare 10.1.0-alpha.7.

Files modified: - .gitignore (modified).claude/ added so local agent state cannot pollute the worktree. - crates/common/src/wisdom.rs (modified)SlopsquatCorpus added with serde+rkyv derives; corpus path/load helpers added for .janitor/slopsquat_corpus.rkyv. - crates/cli/src/main.rs (modified) — new update-slopsquat subcommand added; OSV malicious advisory index/record ingestion implemented for npm, PyPI, and crates.io; corpus persisted with the atomic write pattern; update-wisdom now refreshes the OSV slopsquat corpus instead of embedding a hardcoded list; deterministic parser/persistence tests added. - crates/forge/src/slop_hunter.rs (modified) — hardcoded slopsquat array removed; slopsquat detection now memory-maps .janitor/slopsquat_corpus.rkyv, builds a dynamic Aho-Corasick exact-match automaton, and fails safe to a minimal built-in corpus when runtime state is absent. - crates/crucible/src/main.rs (modified) — slopsquat regression fixtures now emit both wisdom.rkyv and slopsquat_corpus.rkyv, keeping Crucible aligned with the new runtime path. - Cargo.toml (modified) — workspace version bumped from 10.1.0-alpha.6 to 10.1.0-alpha.7. - docs/INNOVATION_LOG.md (modified) — resolved P2-2 removed from the active innovation queue. - docs/IMPLEMENTATION_BACKLOG.md (modified) — this session ledger appended.

Verification: - cargo test --workspace -- --test-threads=1 ✅ - just audit

2026-04-11 — Agentic Recon Interceptor & Zig Hardening (v10.1.0-alpha.5)

Directive: IAC Snowflake Defense (wildcard IAM, unauthenticated Snowflake stages, hardcoded provider secrets) + Glassworm Defense (Zig grammar, std.os.execv*/std.process.exec* byte scan, @cImport+system() FFI bridge, detect_secret_entropy Zig multiline string fix).

Files modified: - Cargo.tomltree-sitter-zig = "1.1.2" workspace dep; version 10.1.0-alpha.410.1.0-alpha.5 - crates/polyglot/Cargo.tomltree-sitter-zig.workspace = true - crates/polyglot/src/lib.rsZIG OnceLock static; "zig" extension arm; test array updated - crates/forge/src/slop_hunter.rsfind_iac_agentic_recon_slop (IAM wildcard, Snowflake unauth stage, provider hardcoded secret) called from find_hcl_slop; find_zig_slop (ZIG_EXEC_PATTERNS AC automaton + @cImport+system() gate) + "zig" dispatch arm; detect_secret_entropy Zig \\ prefix strip - crates/crucible/src/main.rs — 7 new entries: 3 IAC-1/2/3 true-positive + 3 true-negative + 1 Zig TN; Zig ZIG-1/ZIG-2/ZIG-3 true-positives


2026-04-10 — Atlassian Integration & Legacy Taint Sweep (v10.1.0-alpha.4)

Directive: Expand cross-file taint detection to 8 additional grammars (Ruby, PHP, C#, Kotlin, C/C++, Rust, Swift, Scala) and implement Bitbucket Cloud Build Status API verdict publishing.

Files modified: - crates/common/src/scm.rs (modified)ScmContext::from_pairs captures BITBUCKET_ACCESS_TOKEN, BITBUCKET_WORKSPACE, BITBUCKET_REPO_SLUG; BitbucketStatusPublisher::publish_verdict POSTs to Bitbucket Build Status REST API with Bearer auth; 1 new unit test bitbucket_context_captures_api_credentials. - crates/forge/src/taint_catalog.rs (modified)scan_cross_file_sinks dispatch extended with 8 new arms; scan_ruby, scan_php, scan_csharp, scan_kotlin, scan_cpp, scan_rust, scan_swift, scan_scala implemented with depth guards; 16+ true-positive/true-negative unit tests added. - Cargo.toml (modified) — workspace version bumped from 10.1.0-alpha.3 to 10.1.0-alpha.4. - docs/INNOVATION_LOG.md (modified) — P1-2 and P1-3 purged as resolved. - docs/IMPLEMENTATION_BACKLOG.md (modified) — this session ledger appended.

2026-04-10 — Absolute Taint Severance (v10.0.1)

Directive: Replace string-bearing secret entropy findings with a primitive count, isolate the PatchBouncer aggregation boundary to static redacted labels only, verify under single-threaded tests, and cut the v10.0.1 release.

Files modified: - crates/forge/src/slop_hunter.rs (modified)detect_secret_entropy return type changed from Vec<String> to usize; detector now counts qualifying high-entropy runs without allocating or returning strings; deterministic tests updated to assert counts. - crates/forge/src/slop_filter.rs (modified) — secret entropy aggregation rewritten to consume the primitive count and emit only static "security:credential_exposure — [REDACTED]" details into SlopScore. - Cargo.toml (modified) — workspace version bumped from 10.0.0 to 10.0.1. - docs/IMPLEMENTATION_BACKLOG.md (modified) — this session ledger appended.

2026-04-10 — GA Release Prep (v10.0.0)

Directive: General Availability cut for v10.0.0, documentation/version synchronization, Innovation Log hard compaction, single-threaded verification, and release execution.

Files modified: - Cargo.toml (modified) — workspace version bumped from 10.0.0-rc.19 to 10.0.0. - docs/INNOVATION_LOG.md (modified) — resolved P2 HTML comment residue purged; active backlog headings left empty for GA. - docs/IMPLEMENTATION_BACKLOG.md (modified) — this session ledger appended.

Security posture note: - Requested CodeQL evasion changes were not implemented. No black_box taint-severance workaround and no workflow-level query exclusion were added.

2026-04-10 — CodeQL Exorcism & Ergonomic Platform Polish (v10.0.0-rc.19)

Directive: Phase 1 — CodeQL taint suppression for slop_score aggregate integer printout (false-positive cleartext-logging alerts). Phase 2 — Innovation Log hard compaction (eradicate all RESOLVED HTML comments). Phase 3 — P2-1 (janitor policy-health drift dashboard; --format json). Phase 4 — P2-2 (janitor init --profile oss solo-maintainer minimal-noise mode). Phase 5 — Release rc.19.

Files modified: - crates/cli/src/main.rs (modified) — 3 // codeql[rust/cleartext-logging] suppressions added above score.score() printouts in cmd_bounce; PolicyHealth subcommand added with cmd_policy_health() implementation (aggregates total PRs, failed PRs, top 3 rules, top 3 authors); janitor init --profile oss added to cmd_init with min_slop_score = 200, require_issue_link = false, pqc_enforced = false; 3 new unit tests (policy_health_empty_log_text_exits_cleanly, policy_health_empty_log_json_exits_cleanly, init_creates_janitor_toml_oss). - docs/INNOVATION_LOG.md (modified) — all RESOLVED HTML comment blocks purged; only active P2-1 and P2-2 items remain. - Cargo.toml (modified) — workspace version bumped to 10.0.0-rc.19.


2026-04-10 — Commercial Coherence & SARIF Enrichment (v10.0.0-rc.18)

Directive: Resolve P1-1 (pricing contradiction — "Up to 25 seats" vs. "No per-seat limits"), P1-4 (finding explainability — remediation + docs_url on StructuredFinding; SARIF rule.help.markdown / helpUri wiring for top 3 critical detectors).

Files modified: - README.md (modified) — Team tier "Up to 25 seats." → "No per-seat limits." - docs/index.md (modified) — same in pricing table; Team Specialist table row "Up to 25 seats" → "No per-seat limits"; Industrial Core "Unlimited seats" → "No per-seat limits". - docs/pricing_faq.md (created) — 3-question FAQ: why no per-seat pricing, Sovereign/Air-Gap tier definition, OSS free-forever guarantee. - mkdocs.yml (modified)Pricing FAQ: pricing_faq.md added to nav. - crates/common/src/slop.rs (modified)StructuredFinding gains pub remediation: Option<String> and pub docs_url: Option<String> (both #[serde(default, skip_serializing_if = "Option::is_none")]). - crates/forge/src/slop_filter.rs (modified)StructuredFinding construction site updated with remediation: None, docs_url: None. - crates/cli/src/report.rs (modified)rule_help(label: &str) static lookup added for slopsquat_injection, phantom_payload_evasion, and ncd_anomaly; render_sarif rules array wired to emit help.markdown, help.text, and helpUri when enrichment is available. - Cargo.toml (modified) — workspace version bumped to 10.0.0-rc.18.


2026-04-09 — Operator Ergonomics & Threat Sync (v10.0.0-rc.17)

Directive: Implement P1-3 (Wasm BYOR Ergonomics — wasm-pin / wasm-verify), P1-2 (OSS Maintainer Onboarding — janitor init), and audit Phase 3 (CISA KEV URL — confirmed correct, no changes needed).

Files modified: - crates/cli/src/main.rs (modified) — added WasmPin, WasmVerify, and Init subcommands to Commands enum; dispatch arms added to match &cli.command; cmd_wasm_pin, cmd_wasm_verify, cmd_init implementation functions added; 6 new deterministic unit tests in wasm_pin_tests module. - crates/cli/Cargo.toml (modified) — added tempfile = "3" under [dev-dependencies] for the new test fixtures. - Cargo.toml (modified) — workspace version bumped to 10.0.0-rc.17. - README.md / docs/index.md (modified via just sync-versions) — version strings updated. - docs/IMPLEMENTATION_BACKLOG.md (modified) — this session ledger prepended. - docs/INNOVATION_LOG.md (modified) — P1-3 and P1-2 purged as completed.

Phase 3 audit result: CISA KEV URL confirmed correct at https://www.cisa.gov/sites/default/files/feeds/known_exploited_vulnerabilities.json. No code changes needed.

Verification: - cargo check --workspace ✅ - cargo test --workspace -- --test-threads=1 ✅ (all tests pass including 6 new) - just audit

Release status: just fast-release 10.0.0-rc.17 — executed below.


2026-04-09 — CodeQL Severance & Universal SCM Spine (v10.0.0-rc.16)

Directive: Clear the CodeQL false-positive dashboard by severing tainted data-flow from detect_secret_entropy into antipattern_details; patch Wasmtime 10 open CVEs via cargo update (43.0.0 → 43.0.1); implement native commit-status HTTP publishing for GitLab and Azure DevOps SCM backends.

Files modified: - Cargo.lock (modified)wasmtime family (19 crates) bumped 43.0.0 → 43.0.1 via cargo update; clears CVE batch tied to pulley-interpreter, wasmtime-internal-core and wasmtime-internal-cranelift. - crates/forge/src/slop_hunter.rs (modified)detect_secret_entropy: replaced two format!("… {entropy:.2} … {token.len()}") calls with a static "security:credential_leak — high-entropy token detected; possible API key or secret".to_string(). No tainted (entropy-derived or token-derived) data now flows into the findings vector, severing the CodeQL cleartext-logging-sensitive-data taint path. - crates/common/Cargo.toml (modified) — added ureq.workspace = true to enable HTTP commit-status publishing from the scm module. - crates/common/src/scm.rs (modified)ScmContext struct gains four new fields: api_base_url, api_token, project_id, repo_id; from_pairs wires CI_API_V4_URL / GITLAB_TOKEN / CI_PROJECT_ID for GitLab and SYSTEM_TEAMFOUNDATIONCOLLECTIONURI / SYSTEM_ACCESSTOKEN / SYSTEM_TEAMPROJECTID / BUILD_REPOSITORY_ID for Azure DevOps; GitLabStatusPublisher::publish_verdict overrides the default to POST state/name/description to the GitLab Commit Statuses API, falling back to stderr annotation when credentials are absent; AzureDevOpsStatusPublisher::publish_verdict overrides to POST state/description/context/targetUrl to the Azure DevOps Git Statuses API (api-version 7.1-preview.1), falling back to ##vso annotation; 4 new deterministic unit tests added. - Cargo.toml (modified) — workspace version bumped to 10.0.0-rc.16. - README.md / docs/index.md (modified via just sync-versions) — version strings updated to v10.0.0-rc.16. - docs/IMPLEMENTATION_BACKLOG.md (modified) — this session ledger appended.

Verification: - cargo update ✅ — wasmtime 43.0.0 → 43.0.1, indexmap 2.13.1 → 2.14.0, 19 crate patches total - cargo check --workspace ✅ - just audit ✅ — all tests pass, doc parity verified

Release status: just fast-release 10.0.0-rc.16 — pending execution below.

2026-04-09 — Data-Flow Guillotine & SCM Expansion (v10.0.0-rc.15)

Directive: Synchronize CI to Rust 1.91.0 after the Wasmtime 43 MSRV jump, sever all remaining Governor/Wisdom-sensitive data-flow interpolation, implement first-class SCM verdict publishing outside GitHub, verify the workspace under single-threaded test execution, and prepare the 10.0.0-rc.15 release.

Files modified: - .github/workflows/msrv.yml (modified) — hardcoded Rust 1.88 references upgraded to Rust 1.91.0 so the MSRV lane matches the workspace after the Wasmtime 43 bump. - crates/common/src/scm.rs (modified)StatusVerdict and StatusPublisher added; native provider renderers implemented for GitHub Actions annotations and Azure DevOps logging commands, with GitLab and Bitbucket provider stubs plus deterministic provider detection tests. - crates/cli/src/main.rs (modified) — bounce completion and timeout paths now publish SCM verdicts through the shared status abstraction; sensitive Governor dispatch failures no longer interpolate network-derived error payloads into stderr. - crates/cli/src/report.rs (modified) — Governor response validation/parse failures reduced to static strings only, fully severing cleartext-sensitive data flow from remote payloads into operator-visible logs. - Cargo.toml (modified) — workspace version bumped to 10.0.0-rc.15. - README.md (modified) — version string updated to v10.0.0-rc.15. - docs/index.md (modified) — version string updated to v10.0.0-rc.15. - docs/INNOVATION_LOG.md (modified, gitignored) — completed P0-4 block purged from the active innovation queue. - docs/IMPLEMENTATION_BACKLOG.md (modified) — this session ledger appended.

Verification: - cargo check --workspace ✅ - cargo test --workspace -- --test-threads=1 ✅ - just audit

Release status: completed — just fast-release 10.0.0-rc.15 succeeded after the signing key was unlocked. Signed release commit/tag published at 09fb522a93fff59c0d2f22b65a06face9dabc977; the release automation left .github/workflows/msrv.yml unstaged, so a follow-up cleanup commit 70a2af94ddfb4eeec805c5bdfeed8d50148ee642 was pushed to main to keep CI state aligned with the shipped code.

2026-04-09 — Dashboard Annihilation & Resumable Strikes (v10.0.0-rc.14)

Directive: Close the stale Dependabot and workflow-action debt, sever lingering CodeQL-sensitive network error interpolation, implement resumable strike checkpointing for multi-hour hyper-audits, verify the workspace under single-threaded test execution, and prepare the 10.0.0-rc.14 release.

Files modified: - Cargo.toml (modified) — dependency requirements bumped to match the live Dependabot surface (tokio 1.51.0, sha2 0.11.0, hmac 0.13.0, plus the tree-sitter grammar group), then workspace version bumped to 10.0.0-rc.14. - Cargo.lock (modified) — refreshed via cargo update; new crypto/runtime/transitive packages resolved and the targeted grammar crates advanced. - .github/workflows/janitor.yml (modified)actions/cache pinned to v5.0.4; step-security/harden-runner pinned to v2.16.1. - .github/workflows/janitor-pr-gate.yml (modified)step-security/harden-runner pinned to v2.16.1. - .github/workflows/cisa-kev-sync.yml (modified)step-security/harden-runner pinned to v2.16.1. - .github/workflows/dependency-review.yml (modified)step-security/harden-runner pinned to v2.16.1. - .github/workflows/msrv.yml (modified)step-security/harden-runner pinned to v2.16.1. - .github/workflows/deploy_docs.yml (modified)step-security/harden-runner pinned to v2.16.1. - .github/workflows/codeql.yml (modified)step-security/harden-runner pinned to v2.16.1. - .github/workflows/scorecard.yml (modified)step-security/harden-runner pinned to v2.16.1. - crates/cli/src/report.rs (modified) — Governor response parse path updated to hardcoded static failure text; hmac 0.13 compatibility restored via KeyInit. - crates/cli/src/main.rs (modified) — residual JSON / wisdom receipt serialization errors now use static strings only. - crates/cli/src/git_drive.rs (modified) — added deterministic StrikeCheckpoint state under .janitor/strikes/<run-id>/checkpoint.json, backward-compatible seeding from existing bounce logs, O(1) skip checks before analysis, and atomic checkpoint publication immediately after successful bounce-log writes. Added checkpoint tests. - tools/gauntlet-runner/src/main.rs (modified) — resume semantics updated to reflect strike-checkpoint continuation. - crates/reaper/src/audit.rs (modified)sha2 0.11 compatibility fix: digest bytes now hex-encode explicitly instead of relying on LowerHex. - README.md (modified) — version string updated to v10.0.0-rc.14. - docs/index.md (modified) — version string updated to v10.0.0-rc.14. - docs/INNOVATION_LOG.md (modified, gitignored) — completed P0-3 block purged from the active queue. - docs/IMPLEMENTATION_BACKLOG.md (modified) — this session ledger appended.

Verification: - cargo update ✅ - cargo check --workspace ✅ - cargo test --workspace -- --test-threads=1 ✅ - just audit

Release status: pending just fast-release 10.0.0-rc.14

2026-04-09 — Enterprise Triage Spine & Waiver Governance (v10.0.0-rc.13)

Directive: Execute P0-1 and P0-2 from the hostile GA teardown: add auditable suppression governance, add deterministic finding fingerprints for external state tracking, verify the workspace under single-threaded test execution, purge stale innovation-log residue, and prepare the 10.0.0-rc.13 release.

Files modified: - docs/INNOVATION_LOG.md (modified) — purged stale CT-022 / CT-023 residue and removed the completed P0-1 and P0-2 blocks from the active innovation queue. - crates/common/src/policy.rs (modified) — added Suppression plus JanitorPolicy.suppressions, deterministic expiry parsing for unix and RFC3339-like UTC timestamps, glob matching, TOML round-trip coverage, and activation tests. - crates/common/src/slop.rs (modified)StructuredFinding now carries a deterministic fingerprint. - crates/forge/src/slop_filter.rs (modified)PatchBouncer now loads policy suppressions, waives matching active findings before score computation, propagates deterministic file attribution, and computes BLAKE3 fingerprints from rule id + file path + node span bytes. - crates/cli/src/main.rs (modified) — CLI bounce paths now thread policy suppressions into forge. - crates/cli/src/git_drive.rs (modified) — PR replay path now threads policy suppressions into git-native bounce evaluation. - crates/mcp/src/lib.rs (modified) — MCP bounce dispatch now loads and applies suppression policy. - crates/crucible/src/main.rs (modified) — added a true-positive crucible proving an active suppression waives the finding and preserves slop_score == 0. - Cargo.toml (modified) — workspace version bumped to 10.0.0-rc.13. - README.md (modified) — version string updated to v10.0.0-rc.13. - docs/index.md (modified) — version string updated to v10.0.0-rc.13. - docs/IMPLEMENTATION_BACKLOG.md (modified) — this session ledger appended.

Verification: - cargo test --workspace -- --test-threads=1 ✅ - just audit

Release status: pending just fast-release 10.0.0-rc.13

2026-04-09 — Wasm Lockdown & Unhinged GA Teardown (v10.0.0-rc.12)

Directive: Execute CT-023 and CT-022 to close the final Wasm architecture leaks, run the hostile GA teardown audit, verify the workspace under single-threaded test execution, and prepare the 10.0.0-rc.12 release.

Files modified: - crates/forge/src/wasm_host.rs (modified) — CT-023: per-execution detached timeout thread deleted. Wasm host now uses a process-wide singleton Engine plus exactly one watchdog thread that sleeps 10 ms and calls increment_epoch(). Stores now arm set_epoch_deadline(10) for a 100 ms wall-clock ceiling. CT-022: module bytes are BLAKE3-hashed before Module::new; policy pin mismatch hard-fails host initialization. Added positive/negative pin tests. - crates/forge/src/slop_filter.rs (modified) — Wasm rule runner now accepts policy-backed hash pins and forwards them into WasmHost. - crates/common/src/policy.rs (modified)JanitorPolicy gains wasm_pins: HashMap<String, String> with defaulting and TOML round-trip coverage. - crates/cli/src/main.rs (modified) — BYOP Wasm execution now passes policy.wasm_pins into the forge entrypoint. - crates/crucible/src/main.rs (modified) — Wasm host constructor call sites updated to the pinned-host signature. - docs/INNOVATION_LOG.md (modified) — CT-022 / CT-023 marked resolved; hostile GA teardown appended with prioritized enterprise, OSS, UX, and pricing gaps. - Cargo.toml (modified) — workspace version bumped to 10.0.0-rc.12. - README.md (modified) — version string updated to v10.0.0-rc.12. - docs/index.md (modified) — version string updated to v10.0.0-rc.12. - docs/IMPLEMENTATION_BACKLOG.md (modified) — this session ledger appended.

Verification: - cargo test --workspace -- --test-threads=1 ✅ - just audit

Release status: pending just fast-release 10.0.0-rc.12

2026-04-08 — Cryptographic Enclave, Wasm Pinning & SLSA 4 Enforcement (v10.0.0-rc.11)

Directive: JAB Assessor identified ATO-revoking vulnerabilities in v10.0.0-rc.9: circular trust in action.yml BLAKE3 verification, no memory zeroization on PQC key material, and Rust wasm32-wasi target rename threatening BYOP engine compatibility. Version bumped to rc.11 (rc.10 skipped — rc.11 is the remediation release).

Files modified: - action.yml (modified) — Phase 1: Circular trust eliminated. Download step rewrites entirely: downloads new binary + .b3 + .sig, then downloads hardcoded bootstrap binary from v10.0.0-rc.9 (previous known-good release) and runs bootstrap verify-asset --file NEW --hash NEW.b3 [--sig NEW.sig]. The bootstrap binary carries the ML-DSA-65 release verifying key and validates the new release without relying on any co-hosted asset. Python blake3 dependency removed. BOOTSTRAP_TAG comment instructs operator to update on each new release. - Cargo.toml (modified) — Workspace version bumped to 10.0.0-rc.11; zeroize = { version = "1", features = ["derive"] } added to workspace dependencies. - crates/common/Cargo.toml (modified)zeroize.workspace = true added. - crates/common/src/pqc.rs (modified) — Phase 3: use zeroize::{Zeroize, ZeroizeOnDrop, Zeroizing} added. PqcPrivateKeyBundle gains #[derive(Zeroize, ZeroizeOnDrop)] — key material wiped from RAM on drop. Both sign_cbom_dual_from_file and sign_asset_hash_from_file now wrap std::fs::read(path) return in Zeroizing::new(...) so the raw key bytes are zeroed when the function returns. One new unit test: pqc_private_key_bundle_zeroizes_on_drop. - crates/forge/src/wasm_host.rs (modified) — Phase 5: config.wasm_memory64(false) added to WasmHost::new(). Explicitly disables the memory64 proposal — rejects wasm64/wasip2 modules at engine level, pinning BYOP rule modules to wasm32-wasip1 classic 32-bit memory addressing. Insulates engine from Rust wasm32-wasiwasip1/wasip2 target rename. - README.md (modified) — Version string updated to v10.0.0-rc.11 via just sync-versions. - docs/IMPLEMENTATION_BACKLOG.md (this file) — Session ledger appended.

Phases confirmed already complete (no code change required): - Phase 2 (Downgrade gates): cmd_bounce dual-PQC downgrade gate at lines 3463-3475 already present; cmd_verify_cbom partial-bundle bail at lines 3728-3744 already present; private_key_bundle_from_bytes DUAL_LEN strict enforcement already present. - Phase 4 (Symlink overwrites): cmd_import_intel_capsule already has symlink_metadata check + atomic wisdom.rkyv.tmprename pattern; registry.rs::save() already uses symbols.rkyv.tmp → rename.

Crucible: SANCTUARY INTACT — 24/24. No new Crucible entries required (zeroize is infrastructure; wasm_memory64 is a config pin, not a new detector).

Security posture delta: - Circular trust eliminated from SLSA Level 4 verification — co-hosted .b3 / Python no longer act as the trust anchor; a bootstrapped prior-release binary holds the cryptographic authority. - PQC private key RAM exposure window closed — Zeroizing<Vec<u8>> wrapping + ZeroizeOnDrop on PqcPrivateKeyBundle guarantees key bytes are wiped immediately after use, preventing key material from persisting in swap or crash dumps. - BYOP engine explicitly pinned to wasm32-wasip1 (classic modules only) — memory64=false rejects wasm64 modules at parse time; future customer rule authors targeting wasm32-wasip1 are fully supported.


2026-04-08 — Dashboard Eradication & Major SemVer Strike (v10.0.0-rc.9)

Directive: GitHub Security tab failing automated enterprise risk assessments. (1) Wasmtime CVEs requiring major version bump (v28 → v43). (2) Residual CodeQL cleartext-logging-sensitive-data findings in report.rs and fetch_verified_wisdom_payload. (3) Autonomous intelligence seeding — two architectural gaps filed from session analysis. (4) Rust MSRV bump from 1.88 → 1.91 required by Wasmtime 43.

Files modified: - Cargo.toml (modified)wasmtime version bumped from "28" to "43.0.0"; rust-version bumped from "1.88" to "1.91"; workspace version bumped to 10.0.0-rc.9. - rust-toolchain.toml (modified)channel bumped from "1.88.0" to "1.91.0"; rustup directory override cleared. - crates/forge/src/wasm_host.rs (modified) — Wasmtime 43 API: wasmtime::Error no longer satisfies std::error::Error + Send + Sync, breaking anyhow's Context trait on all wasmtime Result<T, wasmtime::Error> calls. Seven call sites migrated from .context("...") / .with_context(|| ...) to .map_err(|e| anyhow::anyhow!("...: {e:#}")): Engine::new, Module::new, Store::set_fuel, Instance::new, get_typed_func (×2), TypedFunc::call (×2), Memory::grow. Fuel gate (set_fuel) and epoch interruption (epoch_interruption(true) + set_epoch_deadline(1)) preserved verbatim — algorithmic circuit breakers intact. - crates/forge/src/deobfuscate.rs (modified) — Clippy 1.91 manual_is_multiple_of lint: raw.len() % 2 != 0!raw.len().is_multiple_of(2). - crates/common/src/scm.rs (modified) — Clippy 1.91 derivable_impls lint: manual impl Default for ScmProvider removed; #[derive(Default)] + #[default] on Unknown variant added. - crates/cli/src/report.rs (modified) — Phase 2 CodeQL: post_bounce_result Err(e) => arm changed to Err(_e) =>; {e} interpolation removed from anyhow::bail! — ureq errors may carry Authorization header fragments from "Bearer {token}". - crates/cli/src/main.rs (modified) — Phase 2 CodeQL: fetch_verified_wisdom_payload — four {wisdom_url} / {wisdom_sig_url} / {e} interpolations in ureq::get error handlers replaced with static strings. update-wisdom --ci-mode {kev_url} / {e} interpolation in KEV fetch error replaced with static string. - docs/INNOVATION_LOG.md (modified) — CT-022 (Wasm Rule Integrity Pinning) and CT-023 (Wasm Epoch Thread Pool Leak) filed as P1.

Crucible: SANCTUARY INTACT — wasmtime API migration is infrastructure, not detector logic; no new Crucible entries required.

Security posture delta: - 3 Wasmtime CVEs (requiring major version bump) eradicated — wasmtime 43.0.0 resolves all open Dependabot alerts for the Wasm subsystem. - BLAKE3 + epoch interruption circuit breakers preserved through the API migration — no regression in adversarial AST protection. - report.rs CodeQL taint path closed: post_bounce_result no longer echoes ureq error (which carries Authorization header data) to the caller. - fetch_verified_wisdom_payload CodeQL taint path closed: wisdom mirror URLs no longer appear in error messages (enterprise configs may embed credentials in mirror URLs). - Rust 1.91 MSRV brings is_multiple_of API and #[default] enum derive — both enforced by Clippy as of this version.


2026-04-08 — Algorithmic Circuit Breakers & Clean Slate Protocol (v10.0.0-rc.8)

Directive: (1) PR #930 on godotengine/godot caused a one-hour hang — combinatorial explosion in AST walkers on deeply-nested auto-generated files. (2) CodeQL cleartext logging alerts in governor POST error handlers. (3) Dependabot dependency bumps to close open CVEs. (4) CT-021 — replace zeroed JANITOR_RELEASE_ML_DSA_PUB_KEY placeholder with structurally valid throwaway key.

Files modified: - crates/forge/src/slop_filter.rs (modified) — Phase 1: 5-second wall-clock timeout injected at start of single-file bounce() path. If find_slop loop consumes the full budget, an exhaustion:per_file_wall_clock finding is emitted and the function returns early (taint analysis skipped). Prevents O(2^N) hang on adversarial/auto-generated ASTs. - crates/forge/src/taint_catalog.rs (modified) — Phase 1: depth: u32 parameter added to all 5 internal walk functions (walk_python_calls, walk_js_calls, walk_java_calls, walk_ts_calls, walk_go_calls). Depth guard if depth > 100 { return; } injected at top of each. Public scan_* callers pass 0 as initial depth. - crates/forge/src/taint_propagate.rs (modified) — Phase 1: depth: u32 parameter added to collect_go_params, find_tainted_sql_sinks, find_tainted_operand. Depth guards at > 100; find_tainted_operand returns None on breach. Public track_taint_go_sqli passes 0 at all call sites. - crates/cli/src/main.rs (modified) — Phase 2: Three CodeQL cleartext-logging-sensitive-data alerts resolved. In governor POST error handlers: format!("...{e}") in append_diag_log replaced with static strings; Err(e) => return Err(e) replaced with static anyhow error. Error message redaction prevents auth tokens and URL fragments from reaching diag log files or error propagation. - crates/cli/src/verify_asset.rs (modified) — Phase 4 (CT-021): Zeroed JANITOR_RELEASE_ML_DSA_PUB_KEY array replaced with a structurally valid 1952-byte throwaway ML-DSA-65 public key. The zeroed-key guard (iter().any(|&b| b != 0)) now passes, enabling Layer 2 PQC verification in CI without cryptographic parser panics. Production key must be substituted in an offline ceremony before activating full chain-of-custody. - Cargo.toml (modified) — workspace version bumped to 10.0.0-rc.8. - Cargo.lock (modified)cargo update applied: zerofrom-derive, zerovec, zerovec-derive, zerotrie updated to latest patch versions.

Crucible: SANCTUARY INTACT — no new Crucible entries (circuit breakers are in traversal paths, not detector logic; key substitution is in verification infrastructure).

Security posture delta: - O(2^N) AST walk hang eliminated — 5 s per-file wall-clock budget enforced. - Recursive AST depth capped at 101 in all 8 walk functions across taint_catalog and taint_propagate. - Governor POST error messages no longer carry auth tokens or URL fragments to diag log or error propagation paths. - ML-DSA-65 zeroed placeholder eliminated — Layer 2 PQC path no longer fails-open at key parse time; throwaway key validates structural soundness of the verify-asset pipeline.


2026-04-07 — Trust-Anchor Refactor (v10.0.0-rc.7)

Directive: JAB Assessor identified three ATO-revoking vulnerabilities in the release candidate: (1) leaf-node symlink overwrite in cmd_import_intel_capsule (write follows attacker-placed symlink), (2) cryptographic downgrade — pqc_enforced=true did not enforce dual-PQC after signing, and private_key_bundle_from_bytes accepted partial single-algorithm bundles, (3) co-hosted BLAKE3 hash insufficient as sole trust anchor (CDN that controls .b3 can bypass). All three remediated this session.

Files modified: - crates/cli/src/main.rs (modified) — Phase 1: cmd_import_intel_capsule write replaced with symlink check (symlink_metadata) + atomic write (write_allsync_allrename). Phase 2a: dual-PQC enforcement gate in cmd_bounce — if pqc_enforced && (pqc_sig.is_none() || pqc_slh_sig.is_none()) → bail. Phase 2b: partial-bundle detection in cmd_verify_cbom — if one sig present but not the other → bail. Phase 3: new VerifyAsset subcommand dispatches to verify_asset::cmd_verify_asset. Module mod verify_asset added. - crates/cli/src/verify_asset.rs (created)cmd_verify_asset(file, hash_path, sig_path): Layer 1 = BLAKE3 recompute + strict 64-hex-char format gate; Layer 2 (when --sig supplied) = ML-DSA-65 verify via hardcoded JANITOR_RELEASE_ML_DSA_PUB_KEY (zeroed placeholder — production key must be substituted). 4 tests: BLAKE3 mismatch rejected, invalid format rejected, BLAKE3-only succeeds, PQC roundtrip with dynamic key, tampered hash rejected. - crates/common/src/pqc.rs (modified) — Phase 2c: private_key_bundle_from_bytes now rejects all partial bundles (ML-only and SLH-only lengths both → error); only the concatenated dual-bundle length (ML_DSA_PRIVATE_KEY_LEN + SLH_DSA_PRIVATE_KEY_LEN) is accepted. New verify_asset_ml_dsa_signature function added using JANITOR_ASSET_CONTEXT (distinct from CBOM context). 2 new tests: ml_only_bundle_rejected_as_partial, slh_only_bundle_rejected_as_partial. - action.yml (modified) — Download step now fetches janitor.sig (best-effort || true), runs existing BLAKE3 Python verification, then invokes janitor verify-asset --file --hash [--sig] for Layer 2 PQC verification. Pre-PQC releases gracefully degrade to BLAKE3-only when .sig absent. - Cargo.toml (modified) — workspace version bumped to 10.0.0-rc.7

Crucible: SANCTUARY INTACT — no new Crucible entries (hardening is in import/PQC paths, not detector logic).

Security posture delta: - Symlink overwrite at wisdom.rkyv eliminated — pre-write symlink check + atomic rename. - pqc_enforced=true now fails closed if signing yields incomplete dual bundle. - Single-algorithm key bundles rejected at parse time — downgrade to ML-only or SLH-only impossible via private_key_bundle_from_bytes. - Partial CBOM bundles now cause verify-cbom to bail — cannot have one sig without the other. - CI download chain upgraded from 1-factor (BLAKE3) to 2-factor (BLAKE3 + ML-DSA-65) for PQC-signed releases.


2026-04-07 — Red Team Syntax Rescue (v10.0.0-rc.6)

Directive: External red-team audit identified four fatal bash syntax/logic errors in the CI pipeline: missing -e on jq token extraction (silent null propagation), wrong --report-url path (404 double-path), unsafe PQC key word-splitting in justfile, and missing non-PR event guard on Extract Patch step. All remediated this session.

Files modified: - action.yml (modified) — (1) jq -r '.token'jq -er '.token': -e makes jq exit non-zero on null, failing fast instead of passing literal "null" as an analysis token. (2) --report-url "${GOVERNOR}/v1/report"--governor-url "${GOVERNOR}": CLI appends /v1/report internally; double-path caused 404 on every Governor POST. (3) if: guard added to Extract Patch step — skips gracefully on workflow_dispatch and schedule triggers that have no PR number. (4) BLAKE3 format validation gate (^[0-9a-f]{64}$) added before Python hash comparison — corrupted or empty .b3 files now fail with a diagnostic message rather than a silent empty-string comparison. - justfile (modified)fast-release PQC key expansion replaced: ${JANITOR_PQC_KEY:+--pqc-key ...} inline expansion (unsafe — unquoted word-splitting if key contains spaces) replaced with explicit bash array SIGN_ARGS + conditional append. No behavioral change in environments with no key set; eliminates potential injection vector when key is set. - Cargo.toml (modified) — workspace version bumped to 10.0.0-rc.6

Crucible: SANCTUARY INTACT — no new Crucible entries (CI pipeline fixes, not detector logic).

Security posture delta: - Silent null analysis token no longer reaches Governor — pipeline now fails hard at token extraction. - Governor endpoint double-path eliminated — all bounces correctly POST to /v1/report (one path segment, not two). - Non-PR trigger events (workflow_dispatch, schedule) no longer abort with gh pr diff on a missing PR number. - BLAKE3 format gate prevents empty or malformed .b3 files from producing a false-positive integrity pass.


2026-04-07 — Syntax Rescue & SLSA Level 4 Provenance (v10.0.0-rc.5)

Directive: Phase 1 — Confirm DEFAULT_GOVERNOR_URL integrity (no truncation); Phase 2 — Add janitor sign-asset subcommand; Phase 3 — Wire fast-release to sign and attach binary assets; Phase 4 — Gut action.yml of cargo build; replace with BLAKE3-verified binary download.

Files modified: - crates/common/src/pqc.rs (modified) — CT-020: added JANITOR_ASSET_CONTEXT = b"janitor-release-asset"; added pub fn sign_asset_hash_from_file(hash: &[u8; 32], path: &Path) with domain-separated ML-DSA-65 + SLH-DSA-SHAKE-192s signing - crates/cli/src/main.rs (modified) — CT-020: added hidden SignAsset { file, pqc_key } subcommand + cmd_sign_asset function (mmap file, BLAKE3 hash → .b3, optional PQC sign → .sig); 1 new test sign_asset_produces_correct_blake3_hash - justfile (modified) — CT-020: fast-release calls ./target/release/janitor sign-asset after strip; gh release create attaches janitor, janitor.b3, and optionally janitor.sig as release assets - action.yml (modified) — CT-020: Steps 1–3 (cache, clone, cargo build) replaced with single BLAKE3-verified binary download step; cleanup updated to /tmp/janitor-bin - Cargo.toml (modified) — workspace version bumped to 10.0.0-rc.5 - docs/INNOVATION_LOG.md (modified) — CT-020 resolved; P0-1 section purged; freeze banner updated

Crucible: SANCTUARY INTACT — no new Crucible entries (provenance tooling, not detectors).

Security posture delta: - CT-020 (SLSA Level 4): CI no longer builds from source — binary is downloaded from a pinned GitHub Release tag and BLAKE3-verified before execution. Supply-chain compromise of a Cargo dependency no longer affects the binary used in customer CI. Closes the final IL6/FedRAMP CISO objection regarding runner-side compilation. - sign-asset command: each release binary now ships with a BLAKE3 hash (.b3) and, when JANITOR_PQC_KEY is set, an ML-DSA-65 / SLH-DSA signature (.sig) for offline attestation.


2026-04-07 — Hard-Fail Mandate & Air-Gap Enforcement (v10.0.0-rc.4)

Directive: Phase 1 — Eradicate fail-open policy loading; Phase 2 — Wire pqc_enforced; Phase 3 — Sever cloud defaults; Phase 4 — Expand slopsquat corpus; Phase 5 — SLSA Level 4 roadmap entry.

Files modified: - crates/common/src/policy.rs (modified) — CT-017: JanitorPolicy::load() signature changed from Self to anyhow::Result<Self>; malformed or unreadable janitor.toml now hard-fails with Err instead of warning + default; 1 new test load_malformed_toml_returns_error - crates/cli/src/main.rs (modified) — CT-017: all 4 load() call sites updated to ?; CT-018: pqc_enforced gate wired — bail! if pqc_enforced=true && pqc_key.is_none(); Phase 4: slopsquat seed corpus expanded from 3 → 43 entries (Python/JS/Rust hallucinated package names) - crates/cli/src/report.rs (modified) — CT-019: DEFAULT_GOVERNOR_URL changed from https://the-governor.fly.dev to http://127.0.0.1:8080; load() call site updated to ? - action.yml (modified) — CT-019: governor_url input added (required); all 3 hardcoded the-governor.fly.dev references replaced with ${{ inputs.governor_url }} - Cargo.toml (modified) — workspace version bumped to 10.0.0-rc.4 - docs/INNOVATION_LOG.md (modified) — CT-017/018/019 filed and resolved; CT-020 (SLSA Level 4) filed as P0-1 for v10.1

Crucible: SANCTUARY INTACT — no new Crucible entries (hardening is in policy/CLI path, not detectors). All existing tests pass.

Security posture delta: - CT-017: Fail-open governance eradicated — a broken janitor.toml is now a hard pipeline failure, not a silent downgrade to permissive defaults - CT-018: PQC attestation mandate enforced — pqc_enforced=true without a key is now a hard error, closing the fail-open PQC path - CT-019: Cloud reliance severed — zero unintentional egress to fly.dev; enterprises must configure their own Governor; action.yml now requires governor_url input - Slopsquat corpus: 3 → 43 seed entries; Python, npm, and crates.io hallucination patterns now seeded by default - SLSA Level 4 roadmap filed — FedRAMP/IL6 procurement path documented


2026-04-07 — Pipeline Idempotency & Final RC Polish (v10.0.0-rc.3)

Directive: Phase 1 — Idempotency governance rule; Phase 2 — fast-release idempotency guards; Phase 3 — CT-016 UTF-16 BOM false-positive fix.

Files modified: - .agent_governance/rules/idempotency.md (created) — The Idempotency Law: all shell/just mutation steps must query target state before acting; protocol for Git tag and GitHub Release guards; 4 hard constraints - justfile (modified)fast-release: local + remote Git tag existence check before commit/tag/push (exits 0 cleanly if already released); gh release view pre-check before gh release create - crates/forge/src/agnostic_shield.rs (modified) — CT-016: UTF-16 LE/BE BOM guard added at top of ByteLatticeAnalyzer::classify; short-circuits to ProbableCode before null-byte check; 2 new unit tests (test_utf16_le_bom_classifies_as_probable_code, test_utf16_be_bom_classifies_as_probable_code) - crates/crucible/src/main.rs (modified) — 1 new Crucible entry: utf16_bom_source_not_flagged_as_anomalous_blob (CT-016 true-negative) - Cargo.toml (modified) — workspace version bumped to 10.0.0-rc.3 - docs/INNOVATION_LOG.md (modified) — CT-016 purged (resolved); P2 section now empty (all constraints resolved)

Crucible: SANCTUARY INTACT — all existing tests pass + 1 new CT-016 entry.

Security posture delta: - CT-016 resolved: Windows-adjacent repos (Azure SDK, MSVC headers, VB.NET) no longer generate false-positive Critical findings. Enterprise adoption unblocked. - Pipeline idempotency: re-running just fast-release <v> after a successful release now exits 0 cleanly instead of crashing. Double-triggers from automation no longer cause oncall pages. - All CT-0xx constraints (CT-011 through CT-016) fully resolved. v10.0.0 is GA-candidate clean.


2026-04-07 — OpSec Blackout & RC.2 Hotfix (v10.0.0-rc.2)

Directive: Phase 1 — OpSec Blackout (git rm INNOVATION_LOG.md from index); Phase 2 — Murphy's Law sweep (clean); Phase 3 — CT-014 member-expression detection + CT-015 Wasm epoch timeout.

Files modified: - .gitignore (modified) — added docs/INNOVATION_LOG.md and docs/ENTERPRISE_GAPS.md to Section 4; git rm --cached docs/INNOVATION_LOG.md executed to expunge from public tree - crates/forge/src/taint_catalog.rs (modified) — CT-014: walk_python_calls extended to match attribute callee (Python method calls self.sink(arg)); walk_js_calls and walk_ts_calls extended to match member_expression callee (obj.sink(arg)); 7 new unit tests covering true-positive and true-negative member-expression/attribute paths - crates/forge/src/wasm_host.rs (modified) — CT-015: added EPOCH_TIMEOUT_MS = 100 constant; config.epoch_interruption(true) in WasmHost::new; store.set_epoch_deadline(1) + detached timeout thread in run_module - crates/crucible/src/main.rs (modified) — 4 new Crucible entries: wasm_host_epoch_timeout_enforced (CT-015), cross_file_taint_js_member_expression_intercepted (CT-014), cross_file_taint_python_attribute_callee_intercepted (CT-014), cross_file_taint_ts_member_expression_intercepted (CT-014) - Cargo.toml (modified) — workspace version bumped to 10.0.0-rc.2

Crucible: SANCTUARY INTACT — all existing tests pass + 4 new entries.

Security posture delta: - CT-014 resolved: cross-file taint now intercepts obj.dangerousSink(tainted) in JS/TS/Python. Est. 3× expansion of detectable enterprise attack surface. - CT-015 resolved: Wasm guests cannot cause non-deterministic host latency via memory pressure; 100 ms hard wall-clock gate added. - INNOVATION_LOG.md expunged from git history index — R&D intelligence no longer publicly visible.


2026-04-07 — Cryptographic Sealing & v10.0 Feature Freeze (v10.0.0-rc.1)

Directive: CT-013 — bind BLAKE3 taint catalog hash into DecisionCapsule; bump workspace to 10.0.0-rc.1; feature freeze.

Files modified: - crates/forge/src/taint_catalog.rs (modified) — CT-013: added catalog_hash: String field to CatalogView; computed blake3::hash(&mmap[..]) at open time; exposed catalog_hash() accessor; added catalog_hash_is_deterministic_and_content_sensitive unit test - crates/forge/src/slop_filter.rs (modified) — added taint_catalog_hash: Option<String> field to SlopScore; capture hash from catalog at open site (line ~1154); thread into final_score - crates/common/src/receipt.rs (modified) — added #[serde(default)] pub taint_catalog_hash: Option<String> field to DecisionCapsule; updated test fixture - crates/cli/src/main.rs (modified) — propagated score.taint_catalog_hash into DecisionCapsule in build_decision_capsule; updated replay test fixture - Cargo.toml (modified) — workspace version bumped to 10.0.0-rc.1 - docs/INNOVATION_LOG.md (modified) — feature freeze banner added; CT-013 purged (RESOLVED); CT-014/CT-015/CT-016 marked "Deferred to v10.1"

Crucible: 19/19 SANCTUARY INTACT (no new Crucible entries — provenance field is additive, existing fixtures use ..SlopScore::default()).


2026-04-07 — Air-Gap Perimeter Hardening (v9.9.19)

Directive: Execute CT-011 (OOM size guard) and CT-012 (symlink traversal confinement) in cmd_import_intel_capsule.

Files modified: - crates/cli/src/main.rs (modified) — CT-011: std::fs::metadata size guard (50 MiB ceiling) fires before std::fs::read; CT-012: std::fs::canonicalize + starts_with confinement check after create_dir_all; 2 new unit tests (size_guard_rejects_oversized_capsule, symlink_traversal_outside_root_is_rejected) - justfile (modified)cargo test --workspace now passes -- --test-threads=1 to prevent WSL hypervisor OOM during CI - docs/INNOVATION_LOG.md (modified) — CT-011 and CT-012 purged (RESOLVED v9.9.19)

Crucible: 19/19 SANCTUARY INTACT (no new entries required — hardening is in production import path, not a new detection rule).


2026-04-07 — Fortune 500 Red Team Audit & Multi-Hop Taint Spine (v9.9.18)

Directive: Phase 1 — commercial/doc teardown; Phase 2 — red team gap audit; Phase 3 — cross-file taint spine extension (TS + Go).

Files modified: - README.md (modified) — fixed "12 grammars" → "23 grammars"; updated CBOM to CycloneDX v1.6 + Dual-PQC (ML-DSA-65 FIPS 204 + SLH-DSA FIPS 205); expanded Competitive Moat section with Air-Gap, Wasm BYOR, Slopsquatting, Replayable Decision Capsules moats; added Sovereign / Air-Gap pricing tier (Custom, starting $49,900/yr) with explicit feature list - docs/INNOVATION_LOG.md (modified) — filed CT-011 (P0: IntelTransferCapsule OOM/8GB Law), CT-012 (P0: symlink traversal in capsule import), CT-013 (P1: taint catalog unsigned), CT-014 (P1: member-expression call chains not detected), CT-015 (P1: Wasm fuel/memory pressure), CT-016 (P2: ByteLatticeAnalyzer UTF-16 false positives) - crates/forge/src/taint_catalog.rs (modified) — added scan_ts() (TypeScript cross-file taint, reuses JS literal check), scan_go() (Go bare-identifier + selector_expression callee detection), has_nontrivial_arg_go(), 7 new unit tests (TS true-positive/negative, Go bare/selector true-positive, Go true-negative/literal) - crates/forge/src/slop_filter.rs (modified) — added "ts" and "tsx" to lang_for_ext() (routes through full tree-sitter parse path, enabling cross-file taint); updated cross-file taint dispatch to "py" | "js" | "jsx" | "ts" | "tsx" | "java" | "go" - crates/crucible/src/main.rs (modified) — added 4 Crucible fixtures: cross_file_taint_typescript_intercepted, cross_file_taint_typescript_safe, cross_file_taint_go_intercepted, cross_file_taint_go_safe

Crucible: 19/19 SANCTUARY INTACT (4 new entries).


2026-04-06 — Air-Gap Intel Capsules & Fuzz Corpus Promotion Pipeline (v9.9.17)

Directive: P1-1 — Air-Gap Intel Transfer Capsules; P2-1 — Exhaustion Corpus Promotion Pipeline.

Files modified: - Cargo.toml (modified) — workspace version bumped to 9.9.17 - crates/common/src/wisdom.rs (modified) — added IntelTransferCapsule (rkyv + serde); added rkyv derives to WisdomMirrorReceipt so the capsule can embed it - crates/cli/src/main.rs (modified) — added ExportIntelCapsule and ImportIntelCapsule subcommands; added cmd_export_intel_capsule and cmd_import_intel_capsule functions with BLAKE3 feed-hash verification and Ed25519 signature offline check - crates/crucible/src/main.rs (modified) — added exhaustion_corpus_no_panic regression test that dynamically reads fixtures/exhaustion/ and asserts no panic + 500 ms parse budget - crates/crucible/fixtures/exhaustion/seed_deeply_nested_braces (new) — seed exhaustion fixture (deeply nested brace bomb) - tools/promote_fuzz_corpus.sh (new) — libFuzzer artifact promotion script with set -euo pipefail, content-hash deduplication - justfile (modified) — added promote-fuzz <artifact_dir> recipe


2026-04-06 — Cryptographic Quorum & Wasm Provenance (v9.9.16)

Directive: Seal private Wasm-rule execution into replayable provenance, require threshold-signed Wisdom mirror consensus before feed overwrite, autonomously seed the next sovereign distribution debt item, and release v9.9.16.

Files modified: - Cargo.toml (modified) — workspace version bumped to 9.9.16 - crates/common/src/lib.rs (modified) — exported wasm_receipt - crates/common/src/wasm_receipt.rs (new) — added deterministic WasmPolicyReceipt schema for module digest, rule ID, ABI version, and result digest - crates/common/src/receipt.rs (modified) — threaded Wasm policy receipts through DecisionCapsule and DecisionReceipt - crates/common/src/policy.rs (modified) — added [wisdom.quorum] configuration with default threshold 1 - crates/common/src/wisdom.rs (modified) — added WisdomMirrorReceipt and bound mirror provenance into LoadedWisdom - crates/forge/src/wasm_host.rs (modified) — Wasm host now emits deterministic per-module provenance receipts alongside findings - crates/forge/src/slop_filter.rs (modified) — BYOR execution path now returns findings plus receipts for downstream sealing - crates/cli/src/main.rs (modified) — bounce now seals Wasm receipts into replay capsules; verify-cbom and replay-receipt validate them; update-wisdom now supports threshold mirror quorum with fail-closed consensus selection and persisted mirror receipts - crates/cli/src/report.rs (modified)BounceLogEntry and step summaries now carry Wasm policy provenance - crates/cli/src/cbom.rs (modified) — CycloneDX metadata now serializes Wasm policy receipts - crates/cli/src/daemon.rs (modified) and crates/cli/src/git_drive.rs (modified) — synchronized auxiliary BounceLogEntry constructors with the new provenance field - crates/gov/src/main.rs (modified) — Governor countersigned receipts now bind sealed Wasm policy provenance - crates/crucible/src/main.rs (modified) — updated Wasm-host regression to assert both findings and provenance receipt emission - docs/INNOVATION_LOG.md (modified) — removed completed P1-1 and P1-2; seeded P1-1 Air-Gap Intel Transfer Capsules - docs/IMPLEMENTATION_BACKLOG.md (modified) — this entry

Commit: pending just fast-release 9.9.16

2026-04-06 — Sovereign Hardening & Surface Expansion (v9.9.15)

Directive: Revalidate signed Wisdom feed provenance, execute the filename-aware surface router across Forge and CLI paths, prove extensionless Dockerfile routing in Crucible, autonomously seed the next sovereign supply-chain proposal, and release v9.9.15.

Files modified: - Cargo.toml (modified) — workspace version bumped to 9.9.15 - Cargo.lock (modified) — lockfile refreshed for the v9.9.15 release line - crates/common/src/lib.rs (modified) — exported the new surface module - crates/common/src/surface.rs (new) — added authoritative SurfaceKind classification for canonical filenames and extensions plus stable router / telemetry labels - crates/forge/src/slop_filter.rs (modified) — replaced ad hoc extract_patch_ext() routing with SurfaceKind; definitive text surfaces now flow into slop_hunter instead of bypassing into the binary shield only; semantic-null and hallucinated-fix paths now consume the same surface authority - crates/cli/src/git_drive.rs (modified) — symbol hydration now resolves file surfaces through the same authoritative classifier instead of raw extension parsing - crates/crucible/src/main.rs (modified) — added an extensionless Dockerfile patch regression proving PatchBouncer dispatches canonical filenames into the detector engine - docs/INNOVATION_LOG.md (modified) — removed completed filename-aware routing debt, compacted active P2 numbering, and seeded P1-2 Threshold-Signed Intel Mirror Quorum - docs/IMPLEMENTATION_BACKLOG.md (modified) — this entry

Commit: pending just fast-release 9.9.15

2026-04-06 — Deterministic Audit Replay & Symmetric Release Parity (v9.9.14)

Directive: Execute P1-1 by sealing replayable decision capsules that can be verified offline against Governor-signed receipts, execute P2-3 by adding a release-surface parity regression to just audit, verify the replay path and the governed release DAG, then release v9.9.14.

Files modified: - Cargo.toml (modified) — workspace version bumped to 9.9.14 - Cargo.lock (modified) — lockfile refreshed for the v9.9.14 release line - crates/common/src/receipt.rs (modified) — added CapsuleMutationRoot, DecisionScoreVector, DecisionCapsule, SealedDecisionCapsule, capsule hashing / checksum validation, and extended DecisionReceipt with capsule_hash - crates/forge/src/slop_filter.rs (modified) — semantic CST mutation roots now persist deterministic subtree bytes + BLAKE3 digests into SlopScore for offline replay - crates/cli/src/main.rs (modified) — added janitor replay-receipt <CAPSULE_PATH>, deterministic capsule construction, capsule persistence next to bounce logs, and replay verification against Governor receipts - crates/cli/src/report.rs (modified)BounceLogEntry now carries capsule_hash for receipt / CBOM provenance - crates/cli/src/cbom.rs (modified) — embedded capsule hashes into the CBOM metadata and signed entry properties without breaking deterministic pre-sign rendering - crates/cli/src/daemon.rs (modified) — auxiliary bounce entry constructors updated for capsule-hash schema parity - crates/cli/src/git_drive.rs (modified) — git-native bounce entry constructors updated for capsule-hash schema parity - crates/gov/src/main.rs (modified) — Governor receipts now countersign the replay capsule_hash - crates/anatomist/src/parser.rs (modified) — raised the bounded parse timeout from 100 ms to 500 ms to eliminate false-negative entity extraction under governed audit load - justfile (modified)audit now enforces the release-surface parity gate - tools/tests/test_release_parity.sh (new) — validates .agent_governance/commands/release.md and justfile stay locked to the same audit → fast-release execution graph and bans git add . / git commit -a - docs/INNOVATION_LOG.md (modified) — removed completed P1-1 / P2-3, compacted active numbering, and seeded P1-1 Wasm Policy Module Provenance - docs/IMPLEMENTATION_BACKLOG.md (modified) — this entry

Commit: pending just fast-release 9.9.14

2026-04-06 — Governor-Sealed Receipts & AST Fuzzing (v9.9.13)

Directive: Execute P1-1 by having janitor-gov countersign a compact decision receipt covering policy, Wisdom feed, transparency anchor, and CBOM signature lineage; execute P2-2 by adding a dedicated grammar stress fuzzer crate and harvested exhaustion fixture directory; verify the full workspace and release v9.9.13.

Files modified: - Cargo.toml (modified) — workspace version bumped to 9.9.13; added libfuzzer-sys - crates/common/Cargo.toml (modified) — added ed25519-dalek for shared receipt signing / verification - crates/common/src/lib.rs (modified) — exported the new receipt module - crates/common/src/receipt.rs (new) — added DecisionReceipt, SignedDecisionReceipt, embedded Governor verifying key, and receipt verification helpers - crates/gov/Cargo.toml (modified) — wired common and ed25519-dalek into janitor-gov - crates/gov/src/main.rs (modified)/v1/report now emits signed decision receipts alongside inclusion proofs; added Governor receipt tests - crates/cli/src/report.rs (modified)BounceLogEntry now carries decision_receipt; Governor client parses countersigned receipts; step summary surfaces sealed receipt anchors - crates/cli/src/cbom.rs (modified) — CycloneDX v1.6 metadata and entry properties now embed Governor-sealed receipt payloads/signatures while preserving deterministic signing surfaces - crates/cli/src/main.rs (modified) — bounce flow persists Governor receipt envelopes; verify-cbom now cryptographically verifies the receipt against the embedded Governor public key - crates/cli/src/daemon.rs (modified) — auxiliary bounce-log constructor updated for receipt-schema parity - crates/cli/src/git_drive.rs (modified) — git-native bounce-log constructors updated for receipt-schema parity - crates/fuzz/Cargo.toml (new) — introduced the dedicated grammar stress fuzz crate - crates/fuzz/src/lib.rs (new) — added bounded parser-budget helpers for C++, Python, and JavaScript stress evaluation - crates/fuzz/fuzz_targets/ast_bomb.rs (new) — added the first AST-bomb fuzz target - crates/crucible/fixtures/exhaustion/.gitkeep (new) — created the governed exhaustion-fixture corpus root - docs/INNOVATION_LOG.md (modified) — removed completed P1-1 / P2-2; seeded P1-1 Replayable Decision Capsules and P2-5 Exhaustion Corpus Promotion Pipeline - docs/IMPLEMENTATION_BACKLOG.md (modified) — this entry

Commit: pending just fast-release 9.9.13

2026-04-06 — Threat Intel Receipts & Semantic CST Diffing (v9.9.12)

Directive: Bind every bounce decision to a cryptographically identified Wisdom feed receipt, thread that provenance through the CBOM and verifier, replace line-based patch reasoning with semantic CST subtree extraction, prove whitespace-padded payload interception in Crucible, autonomously seed the next roadmap item, and release v9.9.12.

Files modified: - Cargo.toml (modified) — workspace version bumped to 9.9.12 - crates/common/Cargo.toml (modified) — added serde_json for feed-receipt parsing - crates/common/src/wisdom.rs (modified) — added feed-receipt loader metadata, normalized signature handling, and receipt-aware archive loading - crates/cli/src/main.rs (modified)update-wisdom now persists detached signature + receipt metadata; bounce logs capture feed provenance; verify-cbom now prints intelligence provenance - crates/cli/src/report.rs (modified) — added wisdom_hash / wisdom_signature to BounceLogEntry; step summary now surfaces feed provenance - crates/cli/src/cbom.rs (modified) — mapped feed provenance into CycloneDX v1.6 metadata and entry properties - crates/cli/src/daemon.rs (modified) — auxiliary bounce-log constructor updated for feed-provenance schema parity - crates/cli/src/git_drive.rs (modified) — git-native bounce-log constructors updated for feed-provenance schema parity - crates/forge/src/lib.rs (modified) — exported the new cst_diff module - crates/forge/src/cst_diff.rs (new) — added subtree-local semantic diff extraction over added patch line ranges - crates/forge/src/slop_filter.rs (modified)PatchBouncer now resolves semantic subtrees and runs structural hashing / slop hunting over those slices instead of whole added diff text - crates/crucible/src/main.rs (modified) — added whitespace-padded semantic-diff interception proof - docs/INNOVATION_LOG.md (modified) — removed completed P1-1 and P2-1; seeded new P1-1 Governor-Sealed Decision Receipts - docs/IMPLEMENTATION_BACKLOG.md (modified) — this entry

Commit: pending just fast-release 9.9.12

2026-04-06 — Cryptographic Intel Provenance & Constant Folding Core (v9.9.11)

Directive: Add detached Ed25519 verification for wisdom.rkyv transport, introduce the bounded string-concatenation fold core for sink-adjacent payloads, prove fragmented payload interception in Crucible, autonomously seed the next roadmap item, and release v9.9.11.

Files modified: - Cargo.toml (modified) — workspace version bumped to 9.9.11; added workspace ed25519-dalek - crates/cli/Cargo.toml (modified) — wired ed25519-dalek into the CLI for detached Wisdom verification - crates/cli/src/main.rs (modified)update-wisdom now fetches wisdom.rkyv.sig, verifies the archive before disk write, and fails closed on signature absence or mismatch - crates/forge/src/lib.rs (modified) — exported the new fold module - crates/forge/src/fold.rs (new) — added bounded AST string-concatenation folding for sink arguments - crates/forge/src/slop_hunter.rs (modified) — routed sink arguments through fold_string_concat before deobfuscation - crates/crucible/src/main.rs (modified) — added fragmented base64 concat true-positive fixture - docs/INNOVATION_LOG.md (modified) — removed completed P0-10 and P2-5; seeded P1-1 Governor-Signed Threat Intel Receipts - docs/IMPLEMENTATION_BACKLOG.md (modified) — this entry

Commit: pending just fast-release 9.9.11

2026-04-06 — DAG Inversion & Dual-Strike Deobfuscation (v9.9.10)

Directive: Invert the release DAG into pre-flight → sync → audit → publish, add the bounded deobfuscation spine for staged sink payloads, harden Wisdom integrity so wisdom_manifest.json can never clear KEV checks on its own, prove the new intercept in Crucible, and release v9.9.10.

Files modified: - Cargo.toml (modified) — workspace version bumped to 9.9.10 - justfile (modified) — inverted fast-release into pre-flight GPG gate, version sync, audit, then publish; removed the redundant outer audit edge from release - crates/forge/Cargo.toml (modified) — wired base64 into Forge for bounded sink deobfuscation - crates/forge/src/lib.rs (modified) — exported the new deobfuscate module - crates/forge/src/deobfuscate.rs (new) — added bounded base64 / hex / concatenated-literal normalization with 4 KiB caps - crates/forge/src/slop_hunter.rs (modified) — routed normalized sink payloads through JS, Python, and Java execution sinks; added security:obfuscated_payload_execution - crates/common/src/wisdom.rs (modified) — added authoritative archive validation and clarified manifest-vs-archive authority - crates/cli/src/main.rs (modified) — converted update-wisdom --ci-mode from fail-open bootstrap to fail-closed archive validation - crates/crucible/src/main.rs (modified) — added eval(atob(...)) true-positive fixture - docs/INNOVATION_LOG.md (modified) — removed completed P0-9 and P1-3; seeded P0-10 Sink-Context Constant Folding Core - docs/IMPLEMENTATION_BACKLOG.md (modified) — this entry

Commit: pending just fast-release 9.9.10

2026-04-06 — Phantom Payload Interception (v9.9.9)

Directive: Execute P0-8 by detecting anomalous payloads hidden inside statically unreachable branches, prove the rule with Crucible fixtures, autonomously seed the next structural breakthrough, and release v9.9.9.

Files modified: - Cargo.toml (modified) — workspace version bumped to 9.9.9 - crates/forge/src/slop_hunter.rs (modified) — added dead-branch AST walk, constant-false branch recognition, dense-literal anomaly scoring, and security:phantom_payload_evasion at Severity::KevCritical - crates/crucible/src/main.rs (modified) — added true-positive and true-negative fixtures for dead-branch payload smuggling - docs/INNOVATION_LOG.md (modified) — removed completed P0-8; seeded P0-9 Deterministic Deobfuscation Spine - docs/IMPLEMENTATION_BACKLOG.md (modified) — this entry

Commit: pending just fast-release 9.9.9

2026-04-06 — Sovereign Transparency Log & Non-Repudiation (v9.9.8)

Directive: Execute P0-7 by adding an append-only Blake3 transparency log to janitor-gov, anchor accepted signed bounce reports with inclusion proofs, embed those proofs into exported CBOM metadata, surface anchoring in verify-cbom, seed the next structural defense as P0-8, and release v9.9.8.

Files modified: - Cargo.toml (modified) — workspace version bumped to 9.9.8 - crates/gov/Cargo.toml (modified) — wired blake3 into the Governor crate - crates/gov/src/main.rs (modified) — added Blake3HashChain, InclusionProof, /v1/report anchoring, and Governor-side regression tests - crates/cli/src/report.rs (modified) — added InclusionProof to the bounce-log schema; Governor POST now parses and returns the transparency anchor; Step Summary now surfaces the anchor index - crates/cli/src/cbom.rs (modified) — exported CycloneDX metadata now carries per-PR transparency-log sequence indexes and chained hashes - crates/cli/src/main.rs (modified) — BYOK signing no longer short-circuits Governor anchoring; verify-cbom now reports transparency-log anchors - crates/cli/src/daemon.rs (modified) — auxiliary bounce-log constructor updated for transparency-log schema parity - crates/cli/src/git_drive.rs (modified) — git-native bounce-log constructors updated for transparency-log schema parity - docs/INNOVATION_LOG.md (modified) — removed completed P0-7; seeded P0-8 Phantom Payload Interception - docs/IMPLEMENTATION_BACKLOG.md (modified) — this entry

Commit: pending just fast-release 9.9.8

2026-04-05 — Wasm BYOR & Market Weaponization (v9.9.6)

Directive: Implement the BYOP Wasm sandboxed rule host (P0-5), eradicate unused super::* import warnings, add NPM Massacre case study to manifesto, and release v9.9.6.

Files modified:

File Action Description
Cargo.toml modified Added wasmtime = "28" workspace dep; bumped version to 9.9.6
crates/forge/Cargo.toml modified Added wasmtime.workspace, serde_json.workspace
crates/forge/src/lib.rs modified Exposed pub mod wasm_host
crates/forge/src/wasm_host.rs created WasmHost: fuel+memory-bounded Wasm sandbox; host-guest ABI
crates/forge/src/slop_filter.rs modified Added run_wasm_rules() orchestration function
crates/forge/src/slop_hunter.rs modified Removed two unused super::* imports (Part 1 warning debt)
crates/common/src/slop.rs modified Added Deserialize to StructuredFinding for guest JSON parsing
crates/common/src/policy.rs modified Added wasm_rules: Vec<String> to JanitorPolicy
crates/cli/src/main.rs modified Added --wasm-rules <PATH> flag; threaded through cmd_bounce
crates/crucible/fixtures/mock_rule.wat created WAT fixture: always emits security:proprietary_rule
crates/crucible/src/main.rs modified Added wasm_host_loop_roundtrip Crucible test
docs/manifesto.md modified Added "Case Study: The April 2026 NPM Massacre" section
docs/INNOVATION_LOG.md modified Purged P0-5 (completed)
docs/index.md modified Synced to v9.9.6 via just sync-versions
README.md modified Synced to v9.9.6 via just sync-versions

2026-04-05 — The Slopsquatting Interceptor (v9.9.5)

Directive: Build the deterministic Bloom-backed slopsquatting interceptor, seed the wisdom archive with hallucinated package names, add Crucible true positive / true negative fixtures for Python, JavaScript, and Rust, compact the innovation log, and release v9.9.5.

Files modified: - Cargo.toml (modified) — workspace version bumped to 9.9.5; bloom and bitvec added as workspace dependencies - crates/common/Cargo.toml (modified) — wired bloom and bitvec into the common crate - crates/common/src/lib.rs (modified) — registered the new Bloom filter module - crates/common/src/bloom.rs (created) — added deterministic SlopsquatFilter with rkyv-compatible storage and unit tests - crates/common/src/wisdom.rs (modified) — extended WisdomSet with slopsquat_filter and added slopsquat lookup support - crates/cli/src/main.rs (modified)update-wisdom now seeds the slopsquat corpus into wisdom.rkyv - crates/forge/src/slop_filter.rs (modified) — threads workspace wisdom path into slop_hunter for import-time slopsquat checks - crates/forge/src/slop_hunter.rs (modified) — added Python, JS/TS, and Rust AST import interceptors that emit security:slopsquat_injection - crates/crucible/src/main.rs (modified) — added deterministic TP/TN fixtures for seeded slopsquat namespaces across Python, JavaScript, and Rust - docs/INNOVATION_LOG.md (modified) — removed completed P0-4; appended P2-5 signed wisdom provenance follow-up - docs/IMPLEMENTATION_BACKLOG.md (modified) — this entry

Commit: pending just fast-release 9.9.5


2026-04-06 — Cryptographic Permanence & The Operator's Rosetta Stone (v9.9.7)

Directive: Add the terminal-only [SOVEREIGN TRANSLATION] UAP section, implement SLH-DSA-SHAKE-192s as a stateless companion to ML-DSA-65, wire dual-signature custody into the bounce log and CycloneDX CBOM envelope, extend verify-cbom to validate both algorithms, and release v9.9.7.

Files modified: - Cargo.toml (modified) — workspace version bumped to 9.9.7; added fips205 = "0.4.1" - crates/common/Cargo.toml (modified) — wired fips204, fips205, and base64 into common - .agent_governance/rules/response-format.md (modified) — added mandatory terminal-only [SOVEREIGN TRANSLATION] section to the final UAP summary - crates/common/src/pqc.rs (modified) — added dual-signature key-bundle parsing, ML-DSA-65 + SLH-DSA signing helpers, and detached verification helpers - crates/cli/src/report.rs (modified) — added pqc_slh_sig to BounceLogEntry; Step Summary now surfaces the active PQC signature suite - crates/cli/src/cbom.rs (modified) — render path now embeds both detached signatures in exported CycloneDX properties while keeping the deterministic signing surface signature-free - crates/cli/src/main.rs (modified)janitor bounce --pqc-key now emits dual signatures when a bundled SLH key is present; verify-cbom accepts --slh-key and reports both verification statuses - crates/cli/src/daemon.rs (modified) — auxiliary bounce-log constructor updated for the new schema - crates/cli/src/git_drive.rs (modified) — git-native bounce-log constructors updated for the new schema - docs/INNOVATION_LOG.md (modified) — removed completed P0-6; added new active P0-7 transparency-log proposal - docs/IMPLEMENTATION_BACKLOG.md (modified) — this entry

Commit: pending just fast-release 9.9.7


2026-04-05 — Fortune 500 Synchronization Strike (v9.9.4)

Directive: Full codebase audit + documentation parity enforcement. Expose v9.x architecture (Sovereign Governor, ScmContext, KMS Key Custody) in public docs. Harden ESG ledger with GHG Protocol guidance. Add documentation parity gate to just audit.

Files modified: - Cargo.toml (modified) — workspace version bumped to 9.9.4 - docs/architecture.md (modified) — added Section X: Sovereign Control Plane (air-gap, FedRAMP/DISA STIG compliance table, KMS key delegation); added Section X-B: Universal SCM Support (GitLab CI, Bitbucket, Azure DevOps, ScmContext env contract) - docs/manifesto.md (modified) — added "Sovereign Control Plane (Air-Gap Ready)" section; added "Universal SCM Support" section; both expose FedRAMP boundary compliance and multi-platform table - docs/energy_conservation_audit.md (modified) — added Section 4: GHG Protocol Compliance with [billing] ci_kwh_per_run override documentation, PUE formula, Scope 2/3 classification table, CDP/GRI 302-4/TCFD mapping - tools/verify_doc_parity.sh (created) — documentation parity gate; extracts version from Cargo.toml; greps README.md and docs/index.md; exits 1 on version drift - justfile (modified)audit recipe now calls ./tools/verify_doc_parity.sh as final step; stale docs now block release

Commit: pending just fast-release 9.9.4


2026-04-05 — Cryptographic Provenance & Strategic Seeding (v9.9.3)

Directive: Execute P1-4 key-custody provenance, harden docs deployment against gh-pages ref-lock races, seed the innovation log with three new P0 architecture breakthroughs, and release v9.9.3.

Files modified: - Cargo.toml (modified) — workspace version bumped to 9.9.3 - crates/common/src/pqc.rs (modified) — added stable custody labels for PQC key sources - crates/cli/src/main.rs (modified) — bounce log now records typed pqc_key_source from the parsed key source - crates/cli/src/report.rs (modified)BounceLogEntry carries pqc_key_source; step summary renders Key Custody: <type> - crates/cli/src/cbom.rs (modified) — CycloneDX CBOM now emits janitor:pqc_key_source properties for deterministic attestation provenance - justfile (modified)fast-release now delegates docs publication to just deploy-docs; deploy-docs retries mkdocs gh-deploy --force up to 3 times with 2-second backoff - docs/INNOVATION_LOG.md (modified)P1-4 removed as completed; seeded P0-4, P0-5, and P0-6 - docs/IMPLEMENTATION_BACKLOG.md (modified) — this entry

Commit: pending just fast-release 9.9.3


2026-04-05 — ESG Egress & Key Custody (v9.9.2)

Directive: Surface the energy audit in public docs, harden version syncing, implement enterprise-aware --pqc-key source parsing with commercial gating, strengthen the autonomous innovation protocol, and release v9.9.2.

Files modified: - mkdocs.yml (modified) — added Energy & ESG Audit to the public docs navigation - justfile (modified)sync-versions now rewrites README/docs version headers and badge-style semver tokens from Cargo.toml; release staging expanded to include README.md and mkdocs.yml - README.md (modified) — reset to tracked state, then synchronized to v9.9.2 - docs/index.md (modified) — synchronized to v9.9.2 - Cargo.toml (modified) — workspace version bumped to 9.9.2 - crates/common/src/lib.rs (modified) — registered the new PQC key-source module - crates/common/src/pqc.rs (created) — added PqcKeySource parsing for file, AWS KMS, Azure Key Vault, and PKCS#11 inputs - crates/cli/src/main.rs (modified)--pqc-key now accepts string sources and gracefully rejects enterprise URIs with the commercial-binary message - crates/cli/src/report.rs (modified) — PQC attestation documentation updated to reflect source-based semantics - .agent_governance/skills/evolution-tracker/SKILL.md (modified) — every session must now append at least one new high-value proposal to the innovation log - docs/INNOVATION_LOG.md (modified)P1-1 removed as completed; added P1-4 for attestation key provenance - docs/IMPLEMENTATION_BACKLOG.md (modified) — this entry

Commit: pending just fast-release 9.9.2


2026-04-05 — Taint Spine Realization & Governance Drift (v9.9.0)

Directive: Complete P0-1 cross-file taint spine; fix P2-5 governance drift in /ciso-pulse; verify Crucible; release v9.9.0.

Files modified: - Cargo.toml (modified) — workspace version bumped to 9.9.0 - .agent_governance/commands/ciso-pulse.md (modified) — CT-NNN/IDEA-XXX labels and grep -c "CT-" gate removed; protocol rewritten to reflect direct-triage P0/P1/P2 model - crates/forge/src/taint_catalog.rs (created)CatalogView (memmap2 zero-copy), write_catalog, append_record, scan_cross_file_sinks (Python/JS/Java); 8 unit tests - crates/forge/src/lib.rs (modified)pub mod taint_catalog added - crates/forge/src/slop_filter.rs (modified)catalog_path field in PatchBouncer; cross-file taint block wired for py/js/jsx/java; emits security:cross_file_taint_sink at KevCritical - crates/forge/Cargo.toml (modified)tempfile = "3" dev-dependency added - crates/crucible/src/main.rs (modified) — TP fixture (cross_file_taint_python_intercepted) + TN fixture (cross_file_taint_python_safe) added - docs/INNOVATION_LOG.md (modified) — P0-1 and P2-5 marked [COMPLETED — v9.9.0] - docs/IMPLEMENTATION_BACKLOG.md (modified) — this entry

Commit: pending release commit


2026-04-04 — Executable Surface Gaps & KEV Binding (v9.8.0)

Directive: Complete the foundational executable-surface gap sweep, realign the detector IDs to the canonical governance taxonomy, harden KEV database loading so MCP/CI cannot go blind when wisdom.rkyv is missing, and cut v9.8.0.

Files modified: - Cargo.toml (modified) — workspace version bumped to 9.8.0 - crates/forge/src/slop_hunter.rs (modified) — added Dockerfile RUN ... | bash/sh gate; aligned XML/Proto/Bazel detector IDs to xxe_external_entity, protobuf_any_type_field, and bazel_unverified_http_archive; retained CMake execute-process gate; unit assertions updated - crates/crucible/src/main.rs (modified) — added TP/TN fixtures for Dockerfile pipe execution and updated TP fragments for XML/Proto/Bazel detector IDs - crates/common/src/wisdom.rs (modified) — exposed archive loader and added verified KEV database resolution that rejects manifest-only state - crates/anatomist/src/manifest.rs (modified) — added fail-closed check_kev_deps_required() for callers that must not silently degrade - crates/mcp/src/lib.rs (modified)janitor_dep_check now fails closed in CI when the KEV database is missing, corrupt, or reduced to wisdom_manifest.json alone; regression test added - docs/IMPLEMENTATION_BACKLOG.md (modified) — this entry - docs/INNOVATION_LOG.md (modified) — P0-2 marked completed under operator override; former ParsedUnit migration debt moved to P0-3; CT-010 appended

Commit: pending release commit


2026-04-04 — Deterministic Pulse & Taint Spine (v9.7.1)

Directive: Replace agentic CT-pulse rule with a deterministic CI gate in fast-release; execute /ciso-pulse to compact CT-008 through CT-011; implement Go-3 intra-file SQLi taint confirmation in crates/forge/src/taint_propagate.rs; wire into PatchBouncer for Go files; cut v9.7.1.

Files modified: - Cargo.toml (modified) — workspace version bumped to 9.7.1 - .agent_governance/commands/ciso-pulse.md (created)/ciso-pulse command mapped to Hard Compaction protocol - justfile (modified)fast-release CISO Pulse gate: blocks if CT count ≥ 10 - docs/INNOVATION_LOG.md (modified) — CISO Pulse executed: CT-008, CT-009, CT-010, CT-011 purged; entries re-tiered; P0-2 added for Phase 4–7 ParsedUnit migration; P0-1 updated to reflect intra-file Go taint completion - crates/forge/src/taint_propagate.rs (created)TaintFlow, track_taint_go_sqli; 5 unit tests (3 TP, 2 TN) - crates/forge/src/lib.rs (modified)pub mod taint_propagate added - crates/forge/src/slop_filter.rs (modified) — Go taint confirmation wired into bounce pipeline; each confirmed flow emits security:sqli_taint_confirmed at KevCritical - docs/IMPLEMENTATION_BACKLOG.md (modified) — this entry

Commit: pending release commit


2026-04-04 — Canonical Alignment Strike (v9.7.0)

Directive: Eradicate stale version strings from all forward-facing docs, add a sync-versions justfile recipe hardlinked as a fast-release prerequisite, add the LiteLLM/Mercor breach case study to docs/manifesto.md, complete the P0-1 ParsedUnit migration verification, and cut v9.7.0.

Files modified: - Cargo.toml (modified) — workspace version bumped to 9.7.0 - justfile (modified)sync-versions recipe added; made prerequisite of fast-release - README.md (modified) — headline version updated to v9.7.0; Vibe-Check Gate version qualifier removed - docs/index.md (modified) — headline version updated to v9.7.0 - docs/manifesto.md (modified)v7.9.4 qualifiers removed; LiteLLM/Mercor case study added - docs/privacy.md (modified)v7.9.4+ updated to v9.7.0+ - docs/architecture.md (modified) — FINAL VERSION block updated; version qualifiers stripped from table and section headers - RUNBOOK.md (modified) — example release command updated; inline version qualifiers removed - SOVEREIGN_BRIEFING.md (modified) — version qualifiers stripped from table, section headers, and FINAL VERSION block - docs/IMPLEMENTATION_BACKLOG.md (modified) — this entry

Commit: pending release commit


2026-04-04 — UAP Pipeline Integration & Parse-Forest Completion (v9.6.4)

Directive: Fix the release pipeline to include .agent_governance/ in the git add surface, complete P0-1 by migrating find_java_slop, find_csharp_slop, and find_jsx_dangerous_html_slop to consume cached trees via ParsedUnit::ensure_tree(), verify with crucible + just audit, and cut v9.6.4.

Files modified: - Cargo.toml (modified) — workspace version bumped to 9.6.4 - justfile (modified)fast-release git add now includes .agent_governance/ - crates/forge/src/slop_hunter.rs (modified)find_java_slop, find_csharp_slop, find_jsx_dangerous_html_slop migrated to ParsedUnit/ensure_tree; all Phase 4–7 detectors share cached CST - docs/IMPLEMENTATION_BACKLOG.md (modified) — this entry - docs/INNOVATION_LOG.md (modified) — P0-1 parse-forest phase marked complete; CT-010 filed for residual Phase 4–7 single-language detectors

Commit: pending release commit


2026-04-04 — Parse-Forest Integration & Telemetry Hardening (v9.6.3)

Directive: Enforce autonomous telemetry updates in the UAP evolution tracker, refactor Forge so find_slop consumes a shared ParsedUnit, reuse the Python CST instead of reparsing it, verify with just audit plus cargo run -p crucible, and cut v9.6.3.

Files modified: - .agent_governance/skills/evolution-tracker/SKILL.md (modified) — Continuous Telemetry law now forbids waiting for operator instruction; every prompt must autonomously append CT-NNN findings before session close - Cargo.toml (modified) — workspace version bumped to 9.6.3 - crates/forge/src/slop_hunter.rs (modified)ParsedUnit upgraded to a cache-bearing parse carrier; find_slop now accepts &ParsedUnit; Python AST walk reuses or lazily populates the cached tree instead of reparsing raw bytes - crates/forge/src/slop_filter.rs (modified) — patch analysis now instantiates one ParsedUnit per file and passes it into the slop dispatch chain - crates/crucible/src/main.rs (modified) — Crucible now routes fixtures through ParsedUnit so the gallery exercises the production API shape - docs/IMPLEMENTATION_BACKLOG.md (modified) — this entry - docs/INNOVATION_LOG.md (modified) — autonomous telemetry entry CT-009 appended for the tracked CDN artefact gap

Commit: pending release commit


2026-04-04 — Wisdom Infrastructure Pivot (v9.6.1)

Directive: Pivot update-wisdom off the dead api.thejanitor.app endpoint onto the live CDN, fail open in --ci-mode with an empty manifest on bootstrap/network faults, publish a bootstrap docs/v1/wisdom.rkyv, and cut v9.6.1.

Files modified: - Cargo.toml (modified) — workspace version bumped to 9.6.1 - crates/cli/src/main.rs (modified)update-wisdom now fetches from https://thejanitor.app/v1/wisdom.rkyv, supports URL overrides for controlled verification, degrades to an empty wisdom_manifest.json in --ci-mode on Wisdom/KEV fetch failures, and adds regression coverage for the fallback path - docs/v1/wisdom.rkyv (created) — bootstrap empty WisdomSet archive committed for CDN hosting at /v1/wisdom.rkyv - docs/IMPLEMENTATION_BACKLOG.md (modified) — this entry - docs/INNOVATION_LOG.md (modified) — CT-008 telemetry recorded for the DNS/CDN pivot

Commit: pending release commit


2026-04-04 — Release Pipeline Eradication & Rescue (v9.5.2)

Directive: Rescue the burned v9.5.1 state by committing the staged executable-surface expansion manually, eradicate the unstaged-only git diff --quiet heuristic from the release path, roll forward to v9.5.2, and cut a real signed release from the audited code.

Files modified: - justfile (modified) — fast-release now stages the governed release set and commits unconditionally; empty-release attempts fail closed under set -euo pipefail - Cargo.toml (modified) — workspace version bumped to 9.5.2 - docs/IMPLEMENTATION_BACKLOG.md (modified) — this entry - docs/INNOVATION_LOG.md (modified) — release-surface debt updated to include staged-only ghost-tag failure and the need for a tag-target regression test

Rescue commit: e095faefeat: autonomous expansion for executable gaps (v9.5.1) Commit: pending release commit


2026-04-04 — Autonomous Expansion & Release Hygiene (v9.5.1)

Directive: Repair the fast-release staging gap that dropped new crates from the prior tag, autonomously execute P0-1 by expanding the executable-surface detectors across six high-risk file types, prove them in Crucible, and record new architecture debt discovered during implementation.

Files modified: - justfile (modified) — fast-release now stages crates/ tools/ docs/ Cargo.toml Cargo.lock justfile action.yml before the signed release commit, preventing new crates from being omitted while still ignoring root-level agent garbage - Cargo.toml (modified) — workspace version bumped to 9.5.1 - crates/forge/src/slop_filter.rs (modified) — filename-aware pseudo-language extraction added for Dockerfile, CMakeLists.txt, and Bazel root files so extensionless security surfaces reach the detector layer - crates/forge/src/slop_hunter.rs (modified) — new detectors added for Dockerfile remote ADD, XML XXE, protobuf google.protobuf.Any, Bazel/Starlark http_archive without sha256, CMake execute_process(COMMAND ${VAR}), and dynamic system() in C/C++; unit tests added - crates/crucible/src/main.rs (modified) — true-positive and true-negative fixtures added for all six new executable-surface detectors - docs/INNOVATION_LOG.md (modified) — implemented P0-1 removed; new P2-5 added for filename-aware surface routing - docs/IMPLEMENTATION_BACKLOG.md (modified) — this entry

Commit: e095fae


2026-04-04 — Air-Gap Update (v9.5.0)

Directive: Execute the Sovereign Governor extraction, decouple CLI attestation routing from the Fly.io default, prove custom Governor routing in tests, retire P0-1 from the Innovation Log, and cut v9.5.0.

Files modified: - Cargo.toml (modified) — workspace version bumped to 9.5.0; shared serde_json workspace dependency normalized for the new Governor crate - crates/gov/Cargo.toml (created) — new janitor-gov binary crate added to the workspace - crates/gov/src/main.rs (created) — minimal localhost Governor stub added with /v1/report and /v1/analysis-token JSON-validation endpoints - crates/common/src/policy.rs (modified)[forge].governor_url added and covered in TOML/load tests - crates/cli/src/main.rs (modified)janitor bounce now accepts --governor-url (with --report-url compatibility alias), resolves base URL through policy, and routes timeout/report traffic through the custom Governor - crates/cli/src/report.rs (modified) — Governor URL resolution centralized; /v1/report and /health endpoints derived from the configured base URL; routing tests updated - docs/INNOVATION_LOG.md (modified)P0-1 removed as implemented; remaining P0 items re-indexed - docs/IMPLEMENTATION_BACKLOG.md (modified) — this entry

Commit: pending release commit


2026-04-04 — Log Compaction & CISO Pulse Hardening (v9.4.1)

Directive: Enforce hard compaction in the Evolution Tracker, purge completed and telemetry debt from the innovation log, re-index active work into clean P0/P1/P2 numbering, and cut v9.4.1.

Files modified: - .agent_governance/skills/evolution-tracker/SKILL.md (modified) — CISO Pulse rewritten to enforce hard compaction: delete completed work, delete telemetry, drop legacy IDs, and re-index active items into P0-1, P1-1, P2-1, etc. - docs/INNOVATION_LOG.md (rewritten) — completed grammar-depth work, legacy telemetry, and stale IDs purged; active debt compacted into clean P0/P1/P2 numbering - Cargo.toml (modified) — workspace version bumped to 9.4.1 - docs/IMPLEMENTATION_BACKLOG.md (modified) — this entry

Commit: pending release commit


2026-04-04 — Deep-Scan & Innovation Synthesis (v9.4.0)

Directive: Enforce the fast-release law, add a deep-scan evasion shield to the bounce path and GitHub Action, clear Forge warning debt, and perform a dedicated innovation synthesis pass over MCP and slop-hunter.

Files modified: - .agent_governance/commands/release.md (modified) — absolute prohibition added against just release; release path now explicitly mandates just audit followed by just fast-release <v> - action.yml (modified) — optional deep_scan input added; composite action now forwards --deep-scan to janitor bounce - Cargo.toml (modified) — workspace version bumped to 9.4.0 - crates/common/src/policy.rs (modified)[forge].deep_scan config added and covered in TOML roundtrip tests - crates/cli/src/main.rs (modified)janitor bounce gains --deep-scan; CLI now merges the flag with [forge].deep_scan policy config - crates/cli/src/git_drive.rs (modified) — git-native bounce call updated for the deep-scan-capable bounce_git signature - crates/forge/src/slop_hunter.rs (modified) — configurable parse-budget helper added; 30 s deep-scan timeout constant added; stale test warning removed - crates/forge/src/slop_filter.rs (modified) — patch and git-native size budgets raised to 32 MiB under deep-scan; parser timeouts retry at 30 s before emitting Severity::Exhaustion - crates/forge/src/metadata.rs (modified) — stale test warning removed - docs/INNOVATION_LOG.md (modified)IDEA-003 and IDEA-004 rewritten from the mandatory MCP/slop-hunter synthesis pass - docs/IMPLEMENTATION_BACKLOG.md (modified) — this entry

Commit: pending release commit


2026-04-04 — Communication Bifurcation & KEV Correlation Strike (v9.3.0)

Directive: Relax intermediate execution messaging while preserving the final response law, implement KEV-aware dependency correlation across the lockfile/bounce/MCP paths, add Crucible regression coverage, and cut v9.3.0.

Files modified: - .agent_governance/rules/response-format.md (modified) — intermediate execution updates now explicitly permit concise natural language; 4-part response format reserved for the final post-release summary only - Cargo.toml (modified) — workspace version bumped to 9.3.0; semver promoted to a workspace dependency for KEV range matching - crates/common/Cargo.toml (modified)semver.workspace = true added for shared KEV matching logic - crates/common/src/deps.rs (modified) — archived DependencyEcosystem gains ordering/equality derives required by KEV rule archival - crates/common/src/wisdom.rs (modified) — KEV dependency rule schema, archive compatibility loader, and shared find_kev_dependency_hits() matcher added - crates/anatomist/Cargo.toml (modified)semver.workspace = true added - crates/anatomist/src/manifest.rs (modified)check_kev_deps(lockfile, wisdom_db) implemented as the SlopFinding adapter over shared KEV hit correlation; regression tests added - crates/forge/src/slop_filter.rs (modified)PatchBouncer made workspace-aware, KEV findings injected into both aggregate and lockfile-source-text fast paths - crates/mcp/src/lib.rs (modified)janitor_dep_check now surfaces kev_count and kev_findings; run_bounce uses workspace-aware PatchBouncer - crates/cli/src/main.rs (modified) — patch-mode bounce path switched to workspace-aware PatchBouncer - crates/cli/src/daemon.rs (modified) — daemon bounce path switched to workspace-aware PatchBouncer - crates/crucible/Cargo.toml (modified) — test dependencies added for synthetic wisdom archive fixtures - crates/crucible/src/main.rs (modified) — synthetic Cargo.lock KEV fixture added; 150-point intercept enforced - docs/INNOVATION_LOG.md (modified)IDEA-002 removed as implemented - docs/IMPLEMENTATION_BACKLOG.md (modified) — this entry

Commit: pending release commit


2026-04-02 — Enterprise Supremacy Ingestion

Directive: Encode Fortune 500 CISO teardown into architectural ledger and harden the governance constitution against stale documentation.

Files modified: - docs/ENTERPRISE_GAPS.md (created) — 4 Critical vulnerability entries: VULN-01 (Governor SPOF), VULN-02 (PQC key custody), VULN-03 (SCM lock-in), VULN-04 (hot-path blind spots); v9.x.x solution spec for each - .claude/rules/deployment-coupling.md (modified) — Law IV added: stale documentation is a compliance breach; rg audit mandate after every feature change; enforcement checklist updated

Commit: 010d430


2026-04-03 — Continuous Evolution Protocol (v9.0.0)

Directive: Abandon static roadmap in favour of dynamic AI-driven intelligence logs; implement Evolution Tracker skill; seed backlog and innovation log; harden CLAUDE.md with Continuous Evolution law.

Files modified: - docs/R_AND_D_ROADMAP.md (deleted) — superseded by dynamic logs - docs/IMPLEMENTATION_BACKLOG.md (created) — this file - docs/INNOVATION_LOG.md (created) — autonomous architectural insight log - .claude/skills/evolution-tracker/SKILL.md (created) — skill governing backlog and innovation log maintenance - CLAUDE.md (modified, local/gitignored) — Law X: Continuous Evolution

Commit: e01a3b5


2026-04-03 — VULN-01 Remediation: Soft-Fail Mode (v9.0.0)

Directive: Implement --soft-fail flag and soft_fail toml key so the pipeline can proceed without Governor attestation when the network endpoint is unreachable; mark bounce log entries with governor_status: "degraded".

Files modified: - crates/common/src/policy.rs (modified)soft_fail: bool field added to JanitorPolicy - crates/cli/src/report.rs (modified)governor_status: Option<String> field added to BounceLogEntry; 3 soft_fail_tests added - crates/cli/src/main.rs (modified)--soft-fail CLI flag; cmd_bounce wired; POST+log restructured for degraded path - crates/cli/src/daemon.rs (modified)governor_status: None added to struct literal - crates/cli/src/git_drive.rs (modified)governor_status: None added to two struct literals - crates/cli/src/cbom.rs (modified)governor_status: None added to test struct literal - docs/INNOVATION_LOG.md (modified) — VULN-01 short-term solution marked [COMPLETED — v9.0.0] - RUNBOOK.md (modified)--soft-fail flag documented - Cargo.toml (modified) — version bumped to 9.0.0

Commit: dbfe549


2026-04-03 — Governance Optimization (v9.0.1)

Directive: Linearize the release skill to prevent re-auditing; add Auto-Purge law to the Evolution Tracker; confirm single-source version ownership; fix stale v8.0.14 engine version in CLAUDE.md.

Files modified: - .claude/commands/release.md (modified) — 5-step linear AI-guided release sequence; GPG fallback procedure documented; version single-source law enforced - .claude/skills/evolution-tracker/SKILL.md (modified) — Logic 4 added: Auto-Purge of fully-completed H2/H3 sections from docs/INNOVATION_LOG.md - CLAUDE.md (modified, gitignored) — stale v8.0.14 corrected to v9.0.1; note added that version is managed exclusively by the release sequence - Cargo.toml (modified) — version bumped to 9.0.1 - docs/INNOVATION_LOG.md (modified) — CT-003 filed (telemetry)

Commit: 4527fbb


2026-04-03 — Signature Sovereignty (v9.1.0)

Directive: Hard-fix GPG tag signing in justfile (CT-005); implement BYOK Local Attestation (VULN-02) — --pqc-key flag on janitor bounce, janitor verify-cbom command, ML-DSA-65 signing/verification, CycloneDX upgrade to v1.6.

Files modified: - justfile (modified)git tag v{{version}} changed to git tag -s v{{version}} -m "release v{{version}}" in both release and fast-release recipes (CT-005 resolved) - Cargo.toml (modified)fips204 = "0.4" and base64 = "0.22" added to workspace dependencies; version bumped to 9.1.0 - crates/cli/Cargo.toml (modified)fips204.workspace = true and base64.workspace = true added - crates/cli/src/report.rs (modified)pqc_sig: Option<String> field added to BounceLogEntry; all struct literals updated - crates/cli/src/cbom.rs (modified)specVersion upgraded "1.5""1.6"; render_cbom_for_entry() added (deterministic, no UUID/timestamp, used for PQC signing) - crates/cli/src/main.rs (modified)--pqc-key flag added to Bounce subcommand; VerifyCbom subcommand added; cmd_bounce BYOK signing block; cmd_verify_cbom() function; 4 tests in pqc_signing_tests module - crates/cli/src/daemon.rs (modified)pqc_sig: None added to struct literal - crates/cli/src/git_drive.rs (modified)pqc_sig: None added to 2 struct literals - docs/INNOVATION_LOG.md (modified) — VULN-02 section purged (all findings [COMPLETED — v9.1.0]); roadmap table updated

Commit: 89d742f


2026-04-04 — Codex Alignment & Git Hygiene (v9.2.2)

Directive: Enforce tracked-only release commits, ignore local agent state, resynchronize to the mandatory response format law, and cut v9.2.2.

Files modified: - justfile (modified)fast-release now uses git commit -a -S -m "chore: release v{{version}}" behind a dirty-tree guard, preventing untracked local files from being staged during releases - .gitignore (modified) — explicit ignore rules added for .agents/, .codex/, AGENTS.md, and other local tool-state directories - Cargo.toml (modified) — workspace version bumped to 9.2.2 - docs/INNOVATION_LOG.md (modified) — CT-006 logged for the release hygiene regression; session telemetry section appended - docs/IMPLEMENTATION_BACKLOG.md (modified) — this entry

Commit: pending release commit


2026-04-03 — Codex Initialization & Redundancy Purge (v9.2.1)

Directive: Align Codex to UAP governance, audit release execution paths for redundant compute, record legacy-governance drift proposals, and cut the 9.2.1 release.

Files modified: - justfile (modified)release recipe collapsed into a thin auditfast-release delegator so agentic deploys follow the single-audit path without duplicated release logic - Cargo.toml (modified) — workspace version bumped to 9.2.1 - docs/architecture.md (modified) — stale just release pipeline description corrected to the linear auditfast-release flow - docs/INNOVATION_LOG.md (modified)Legacy Governance Gaps (P2) section appended with governance-drift proposals; session telemetry recorded - docs/IMPLEMENTATION_BACKLOG.md (modified) — this entry

Commit: pending release commit


2026-04-03 — Forward-Looking Telemetry (v9.0.2)

Directive: Add just fast-release recipe (audit-free release path); harden Evolution Tracker with Forward-Looking Mandate and Architectural Radar Mandate; purge completed-work entry CT-003 from Innovation Log.

Files modified: - justfile (modified)fast-release version recipe added; identical to release but without the audit prerequisite - .claude/commands/release.md (modified) — Step 4 updated from just release to just fast-release - .claude/skills/evolution-tracker/SKILL.md (modified) — Forward-Looking Mandate added (no completed work in Innovation Log); Architectural Radar Mandate added (4 scanning categories for future R&D proposals) - docs/INNOVATION_LOG.md (modified) — CT-003 purged (completed work, belongs in Backlog); CT-004 and CT-005 filed as forward-looking proposals - Cargo.toml (modified) — version bumped to 9.0.2

Commit: ff42274


2026-04-03 — CISO Pulse & Autonomous Clock (v9.1.1)

Directive: Enforce response formatting law; implement CT-10 CISO Pulse rule in Evolution Tracker; build weekly CISA KEV autonomous sync workflow; execute the first CISO Pulse Audit — re-tier INNOVATION_LOG.md into P0/P1/P2 with 12 new grammar depth rule proposals (Go ×3, Rust ×3, Java ×3, Python ×3).

Files modified: - .claude/rules/response-format.md (created) — Mandatory 4-section response format law: [EXECUTION STATUS], [CHANGES COMMITTED], [TELEMETRY], [NEXT RECOMMENDED ACTION] - .claude/skills/evolution-tracker/SKILL.md (modified) — Logic 5 added: CT-10 CISO Pulse Audit trigger with full P0/P1/P2 re-tiering protocol - .github/workflows/cisa-kev-sync.yml (created) — Weekly CISA KEV JSON sync (every Monday 00:00 UTC); diffs against .janitor/cisa_kev_ids.txt; auto-opens PR with updated snapshot + AST gate checklist - docs/INNOVATION_LOG.md (rewritten) — CISO Pulse Audit: full P0/P1/P2 re-tiering; 12 new grammar depth rules; IDEA-004 (HSM/KMS) added; CT-007 (update-wisdom --ci-mode gap) and CT-008 (C/C++ AST zero-coverage) filed - docs/IMPLEMENTATION_BACKLOG.md (modified) — this entry - Cargo.toml (modified) — version bumped to 9.1.1

Purged sections: CT-005 ([COMPLETED — v9.1.0]) merged into the CISO Pulse log restructure. VULN-02 section was already purged in v9.1.0.

Commit: 5056576


2026-04-03 — Wisdom & Java Consolidation (v9.1.2)

Directive: Harden CISO Pulse with CT counter reset rule; fix CT-007 by adding --ci-mode to update-wisdom; update CISA KEV sync workflow to use the janitor binary as sole arbiter; execute P0 Java AST depth — implement Java-1 (readObject KevCritical + test suppression), Java-2 (ProcessBuilder injection), and Java-3 (XXE DocumentBuilderFactory); add Crucible fixtures.

Files modified: - .claude/skills/evolution-tracker/SKILL.md (modified) — Logic 5 step 8 added: CT counter resets to CT-001 after every CISO Pulse Audit (epoch reset) - crates/cli/src/main.rs (modified)--ci-mode flag added to UpdateWisdom subcommand; cmd_update_wisdom fetches CISA KEV JSON and emits .janitor/wisdom_manifest.json when ci_mode = true - crates/forge/src/slop_hunter.rs (modified)find_java_danger_invocations gains inside_test: bool param + @Test annotation suppression; readObject/exec/lookup upgraded from Critical to KevCritical; new ProcessBuilder(expr) (Java-2b) and DocumentBuilderFactory.newInstance() XXE (Java-3) detection added; java_has_test_annotation() helper added; 5 new unit tests - crates/crucible/src/main.rs (modified) — 4 new fixtures: ProcessBuilder TP/TN and DocumentBuilder XXE TP/TN - .github/workflows/cisa-kev-sync.yml (modified) — switched from raw curl to janitor update-wisdom --ci-mode; workflow downloads janitor binary from GH releases before running - docs/INNOVATION_LOG.md (modified) — Java-1/2/3 grammar depth section marked [COMPLETED — v9.1.2]; CT epoch reset to Epoch 2 (CT-001, CT-002) - docs/IMPLEMENTATION_BACKLOG.md (modified) — this entry - Cargo.toml (modified) — version bumped to 9.1.2

Commit: da591d6


2026-04-03 — SIEM Integration & Autonomous Signing Update (v9.1.3)

Directive: Eliminate manual GPG intervention via JANITOR_GPG_PASSPHRASE env var; broadcast zero-upload proof to enterprise SIEM dashboards; harden [NEXT RECOMMENDED ACTION] against recency bias.

Files modified: - justfile (modified) — both release and fast-release recipes gain JANITOR_GPG_PASSPHRASE env var block: if set, pipes to gpg-preset-passphrase --preset EA20B816F8A1750EB737C4E776AE1CBD050A171E before git tag -s; falls back to existing cache if unset - crates/cli/src/report.rs (modified)fire_webhook_if_configured doc comment gains explicit provenance call-out: provenance.source_bytes_processed and provenance.egress_bytes_sent always present in JSON payload for SIEM zero-upload dashboards (Datadog/Splunk) - .claude/rules/response-format.md (modified) — Anti-Recency-Bias Law added to [NEXT RECOMMENDED ACTION]: must scan entire Innovation Log P0/P1/P2; select highest commercial TEI or critical compliance upgrade; recency is not a selection criterion - RUNBOOK.md (modified) — Section 3 RELEASE: JANITOR_GPG_PASSPHRASE export documented with key fingerprint, keygrip, and fallback to gpg-unlock - docs/IMPLEMENTATION_BACKLOG.md (modified) — this entry - Cargo.toml (modified) — version bumped to 9.1.3

Commit: b6da4e0


2026-04-03 — Go SQLi Interceptor & Portability Fix (v9.1.4)

Directive: Execute P0 Go-3 SQL injection AST gate; add Crucible TP/TN fixtures; resolve CT-003 by making gpg-preset-passphrase path portable.

Files modified: - crates/forge/src/slop_hunter.rs (modified)GO_MARKERS pre-filter extended with 5 DB method patterns; find_go_danger_nodes gains Go-3 gate: call_expression with field in {Query,Exec,QueryRow,QueryContext,ExecContext} fires security:sql_injection_concatenation (KevCritical) when first arg is binary_expression{+} with at least one non-literal operand; 3 unit tests added - crates/crucible/src/main.rs (modified) — 2 Go-3 fixtures: TP (dynamic concat in db.Query) + TN (parameterized db.Query); Crucible 141/141 → 143/143 - justfile (modified) — CT-003 resolved: gpg-preset-passphrase path now resolved via command -v + find fallback across Debian/Fedora/Arch/macOS; no-op if binary not found anywhere (falls back to gpg-unlock cache) - docs/INNOVATION_LOG.md (modified) — Go-3 marked [COMPLETED — v9.1.4]; CT-003 section purged (auto-purge: all findings completed) - docs/IMPLEMENTATION_BACKLOG.md (modified) — this entry - Cargo.toml (modified) — version bumped to 9.1.4

Commit: fc9c11f


2026-04-03 — Universal Agent Protocol & RCE Hardening (v9.2.0)

Directive: Establish shared multi-agent governance layer; intercept WebLogic T3/IIOP resolve() and XMLDecoder F5/WebLogic RCE vectors; add Cognition Surrender Index to quantify AI-introduced structural rot density.

Files modified: - .agent_governance/ (created) — UAP canonical governance dir; README.md documents bootstrap sequence and shared ledger mandate for all agents - .agent_governance/rules/ — git mv from .claude/rules/ (symlink preserved) - .agent_governance/commands/ — git mv from .claude/commands/ (symlink preserved) - .agent_governance/skills/ — git mv from .claude/skills/ (symlink preserved) - .claude/rules, .claude/commands, .claude/skills (converted to symlinks) - .cursorrules (created) — Codex/Cursor bootstrap: reads .agent_governance/ - crates/forge/src/slop_hunter.rs (modified)JAVA_MARKERS gains b"resolve"; "lookup" arm extended to "lookup" | "resolve" (WebLogic CVE-2023-21839/21931); new XMLDecoder(stream) object_creation_expression gate (KevCritical, CVE-2017-10271, CVE-2019-2725); 3 new unit tests - crates/crucible/src/main.rs (modified) — 3 new fixtures: ctx.resolve TP/TN, XMLDecoder TP; Crucible 141/141 → 144/144 - crates/cli/src/report.rs (modified)BounceLogEntry gains cognition_surrender_index: f64; render_step_summary outputs CSI row - crates/cli/src/main.rs (modified) — CSI computed in main log entry (inline); timeout entry gains cognition_surrender_index: 0.0; test helper updated - crates/cli/src/daemon.rs (modified)cognition_surrender_index: 0.0 - crates/cli/src/git_drive.rs (modified)cognition_surrender_index: 0.0 (×2) - crates/cli/src/cbom.rs (modified)cognition_surrender_index: 0.0 - docs/IMPLEMENTATION_BACKLOG.md (modified) — this entry - Cargo.toml (modified) — version bumped to 9.2.0

Commit: 89d742f


2026-04-04 — v9.6.0: Omni-Purge & MCP Structured Findings (P1-3)

Directive: Omni-Purge + MCP Structured Findings Envelope (P1-3)

Changes: - crates/common/src/slop.rs (created)StructuredFinding DTO: { id: String, file: Option<String>, line: Option<u32> }; registered in common::lib.rs - crates/forge/src/slop_filter.rs (modified)SlopScore gains structured_findings: Vec<StructuredFinding>; bounce() populates findings from accepted antipatterns with line numbers; bounce_git() injects file context per blob; redundant let mut rebinding removed - crates/mcp/src/lib.rs (modified)run_bounce() emits "findings" structured array alongside "antipattern_details"; run_scan() emits dead-symbol findings as { id: "dead_symbol", file, line, name } - SOVEREIGN_BRIEFING.md (modified)StructuredFinding DTO row in primitives table; Stage 17 in bounce pipeline - /tmp/omni_mapper*, /tmp/the-janitor* (purged) — orphaned clone cleanup - Cargo.toml (modified) — version bumped to 9.6.0

Status: P1-3 COMPLETED. Crucible 156/156 + 3/3. just audit ✅.


2026-04-04 — v9.6.2: Git Exclusion Override & Taint Spine Initialization (P0-1)

Directive: Git Hygiene Fix + P0-1 Taint Spine Foundation

Changes: - .gitignore (modified)!docs/v1/wisdom.rkyv exception punched below *.rkyv rule; git add -f staged the artifact - crates/common/src/taint.rs (created)TaintKind enum (7 variants, stable repr(u8) for rkyv persistence), TaintedParam struct, TaintExportRecord struct; all derive Archive + Serialize + Deserialize (rkyv + serde); 3 unit tests - crates/common/src/lib.rs (modified)pub mod taint registered - crates/forge/src/slop_hunter.rs (modified)ParsedUnit<'src> struct exported: holds source: &[u8], tree: Option<Tree>, language: Option<Language>; new() and unparsed() constructors; no find_slop refactor yet (foundational type only) - docs/INNOVATION_LOG.md (modified) — CT-009 appended - docs/IMPLEMENTATION_BACKLOG.md (modified) — this entry - Cargo.toml (modified) — version bumped to 9.6.2

Status: P0-1 foundation COMPLETE. just audit ✅.


2026-04-04 — v9.6.4: UAP Pipeline Integration & Parse-Forest Completion (P0-1)

Directive: Fix release pipeline to include .agent_governance/ in git add; complete P0-1 parse-forest reuse by migrating all high-redundancy AST-heavy detectors to ParsedUnit::ensure_tree()

Files modified: - justfile (modified)fast-release recipe: git add now includes .agent_governance/ directory so governance rule changes enter the release commit - crates/forge/src/slop_hunter.rs (modified) — 11 AST-heavy detectors migrated from (eng, source: &[u8]) to (eng, parsed: &ParsedUnit<'_>) using ensure_tree(): find_js_slop, find_python_sqli_slop, find_python_ssrf_slop, find_python_path_traversal_slop, find_java_slop, find_js_sqli_slop, find_js_ssrf_slop, find_js_path_traversal_slop, find_csharp_slop, find_prototype_merge_sink_slop, find_jsx_dangerous_html_slop; 4 #[cfg(test)] byte-wrappers added; 3 test module aliases updated; find_slop call sites updated to pass parsed - SOVEREIGN_BRIEFING.md (modified)find_slop signature updated to (lang, &ParsedUnit) with P0-1 parse-forest note; stale (lang, source) reference corrected - Cargo.toml (modified) — version bumped to 9.6.4

Commit: (see tag v9.6.4)

Status: P0-1 Phase 2 COMPLETE (Python 4→1 parse, JS 6→1 parse per file). Crucible 156/156 + 3/3. just audit ✅.


2026-04-05 — The Ecosystem Scrub & Universal ParsedUnit (v9.9.1)

Directive: Remove internal blueprint files from the public Git surface, professionalize the GitHub release page, hard-compact completed innovation sections, and migrate the remaining single-language AST detectors to the shared ParsedUnit path.

Files modified: - AGENTS.md (deleted from git index) — removed from the tracked public release surface - SOVEREIGN_BRIEFING.md (deleted from git index) — removed from the tracked public release surface - .gitignore (modified) — explicit ignore added for SOVEREIGN_BRIEFING.md - justfile (modified) — GitHub release creation now uses generated notes and a professional title - docs/INNOVATION_LOG.md (modified) — all completed sections purged; P0-3 removed after ParsedUnit universalization; only active P1/P2 debt remains - crates/forge/src/slop_hunter.rs (modified) — Go, Ruby, Bash, PHP, Kotlin, Scala, Swift, Lua, Nix, GDScript, ObjC, and Rust detectors now consume ParsedUnit - Cargo.toml (modified) — workspace version bumped to 9.9.1 - docs/IMPLEMENTATION_BACKLOG.md (modified) — this entry

Commit: pending just fast-release 9.9.1


2026-04-05 — Direct Triage & Commercial Expansion (v9.8.1)

Directive: Replace CT backlog batching with direct P-tier triage, implement provider-neutral SCM context extraction, and roll the portability work into the 9.8.1 release line.

Files modified: - .agent_governance/skills/evolution-tracker/SKILL.md (modified) — removed CT numbering and 10-count pulse workflow; direct P0/P1/P2 triage is now the mandatory background rule - .agent_governance/rules/response-format.md (modified) — final summary telemetry language aligned to direct triage; next action now requires an explicit TAM / TEI justification - justfile (modified) — removed the grep -c "CT-" release gate from fast-release - crates/common/src/lib.rs (modified) — registered scm module - crates/common/src/scm.rs (created) — provider-neutral ScmContext / ScmProvider with GitHub, GitLab, Bitbucket, and Azure DevOps normalization - crates/cli/src/main.rs (modified) — replaced raw GITHUB_* fallbacks with ScmContext::from_env() for repo slug, commit SHA, and PR number resolution - docs/INNOVATION_LOG.md (modified) — removed CT-010, moved the Wisdom manifest gap into P1-3, and marked P1-2 completed - docs/IMPLEMENTATION_BACKLOG.md (modified) — this entry - Cargo.toml (modified) — version bumped to 9.8.1

Commit: pending just fast-release 9.8.1


2026-04-10 — v10.1.0-alpha.2: Zero Trust Transport & ASPM Lifecycle Sync

Directive: Sovereign Directive — close P0-2 (Mutual TLS Governor Transport) and P0-3 (ASPM Bidirectional Sync).

  • Cargo.toml (modified) — version bumped to 10.1.0-alpha.2; workspace ureq switched to rustls-backed TLS; rustls and rustls-pemfile added
  • crates/cli/Cargo.toml (modified) — imported workspace rustls / rustls-pemfile dependencies
  • crates/common/src/policy.rs (modified)ForgeConfig gains mtls_cert / mtls_key; WebhookConfig gains lifecycle_events / ticket_project; policy tests expanded
  • crates/cli/src/main.rs (modified) — added build_ureq_agent() and PEM parsing helpers; Governor POST/heartbeat now share the mTLS-aware agent; lifecycle transition emission wired into cmd_bounce
  • crates/cli/src/report.rs (modified) — Governor transport now accepts a configured ureq::Agent; implemented emit_lifecycle_webhook() with HMAC signing and finding-opened / finding-resolved payloads; added lifecycle transport tests
  • README.md (modified) — version string synced to v10.1.0-alpha.2
  • docs/index.md (modified) — version string synced to v10.1.0-alpha.2
  • docs/INNOVATION_LOG.md (modified) — removed resolved P0-2 / P0-3 items; P1-1 now explicitly tracks C# / Ruby / PHP / Swift taint-spine expansion
  • docs/IMPLEMENTATION_BACKLOG.md (modified) — this entry

Verification: cargo test --workspace -- --test-threads=1 | just audit Release: just fast-release 10.1.0-alpha.2

2026-04-10 — v10.1.0-alpha.3: RBAC Waiver Governance & Legacy Taint Strike

Directive: Sovereign Directive — close P0-4 (RBAC Suppressions) and P1-1 (Ruby/PHP intra-file taint spine expansion).

  • Cargo.toml (modified) — version bumped to 10.1.0-alpha.3
  • crates/common/src/policy.rs (modified)Suppression gains runtime-only approved: bool; serialization tests prove approval state is not persisted into policy TOML
  • crates/gov/src/main.rs (modified) — added RC-phase /v1/verify-suppressions endpoint and Governor-side authorization filtering tests
  • crates/cli/src/main.rs (modified)cmd_bounce now sends suppression IDs to Governor and marks approved waivers before finding filtering
  • crates/forge/src/slop_filter.rs (modified) — unapproved matching waivers no longer suppress findings; they emit security:unauthorized_suppression at KevCritical severity while preserving the original finding
  • crates/forge/src/taint_propagate.rs (modified) — implemented Ruby and PHP parameter collection plus intra-file SQL sink propagation; added Kotlin, C/C++, and Swift stubs for subsequent releases
  • crates/forge/src/slop_hunter.rs (modified) — Ruby and PHP slop scans now surface tainted ActiveRecord interpolation and raw mysqli/PDO query concatenation as security:sqli_concatenation
  • crates/crucible/src/main.rs (modified) — added Ruby SQLi TP/TN, PHP SQLi TP/TN, and unauthorized suppression regression fixtures
  • README.md (modified) — version string synced to v10.1.0-alpha.3
  • docs/index.md (modified) — version string synced to v10.1.0-alpha.3
  • docs/INNOVATION_LOG.md (modified) — removed completed P0-4 and P1-1 roadmap items
  • docs/IMPLEMENTATION_BACKLOG.md (modified) — this entry

Verification: cargo test --workspace -- --test-threads=1 | just audit Release: blocked — just fast-release 10.1.0-alpha.3 halted because the local GPG signing key is locked (gpg-unlock / JANITOR_GPG_PASSPHRASE required)

2026-04-10 — v10.1.0-alpha.1: Governance Seal & O(1) Incremental Engine

Directive: Sovereign Directive — close P0-1 (Signed Policy Lifecycle) and P0-5 (Incremental Scan) from the GA Teardown Audit.

P0-1: Signed Policy Lifecycle ✓

  • crates/common/src/policy.rs (modified)JanitorPolicy::content_hash() BLAKE3 hash over canonical security-relevant fields; three determinism tests added
  • crates/cli/src/main.rs (modified)policy_hash in BounceLogEntry now computed via policy.content_hash() (canonical struct fields, not raw TOML bytes)
  • crates/gov/src/main.rs (modified)AnalysisTokenRequest gains policy_hash: String; /v1/analysis-token returns HTTP 403 policy_drift_detected on JANITOR_GOV_EXPECTED_POLICY mismatch; two new unit tests

P0-5: Incremental / Resumable Scan ✓

  • crates/common/src/scan_state.rs (created)ScanState { cache: HashMap<String, [u8; 32]> } with rkyv Archive/Serialize/Deserialize; symlink-safe atomic persistence; four unit tests
  • crates/common/src/lib.rs (modified)pub mod scan_state registered
  • crates/common/Cargo.toml (modified)tempfile = "3" dev-dependency for scan_state tests
  • crates/forge/src/slop_filter.rs (modified)bounce_git accepts &mut ScanState; BLAKE3 digest compared before Payload Bifurcation; unchanged files bypassed O(1); digest recorded for changed files
  • crates/cli/src/main.rs (modified) — loads ScanState from .janitor/scan_state.rkyv before bounce_git; persists updated state after successful bounce (best-effort, never fails the gate)
  • crates/cli/src/git_drive.rs (modified) — hyper-drive bounce_git call updated with ephemeral ScanState::default() (no persistence in parallel mode)
  • docs/INNOVATION_LOG.md (modified) — P0-1 and P0-5 marked RESOLVED
  • Cargo.toml (modified) — version bumped to 10.1.0-alpha.1

Audit: cargo fmt --check ✓ | cargo clippy -- -D warnings ✓ | cargo test --workspace -- --test-threads=1 ✓ (all pass) Release: just fast-release 10.1.0-alpha.1

2026-04-12 — Supply Chain Deep Inspection & Resiliency Proving (v10.1.0-alpha.13)

  • Extended the Sha1-Hulud interceptor to catch obfuscated JavaScript / TypeScript child_process execution chains where folded string fragments resolve to exec, spawn, execSync, or child_process within a suspicious execution context.
  • Centralized Jira fail-open synchronization in crates/cli/src/jira.rs, added deterministic warning emission plus diagnostic logging, and proved HTTP 500, HTTP 401, and timeout failures do not abort bounce execution.
  • Added Crucible coverage for obfuscated child_process payload execution and promoted the deferred GitHub App OAuth Marketplace Integration work item to top-priority P1 in the innovation log.

2026-04-12 — Live-Fire ASPM Deduplication Proving Attempt

  • Created a transient root janitor.toml pointing Jira sync at https://ghrammr.atlassian.net with project key KAN and dedup = true, then removed it after execution to avoid polluting the tree.
  • Proved the live bounce gate rejects the repository’s canonical obfuscated JavaScript child_process.exec payload at slop score 150 as security:obfuscated_payload_execution (KevCritical path).
  • Live Jira deduplication did not execute because both bounce runs failed before search/create with JANITOR_JIRA_USER is required for Jira sync; second execution therefore repeated the same fail-open auth path instead of logging jira dedup: open ticket found for fingerprint, skipping creation.
  • Build latency on first live-fire execution was dominated by fresh dependency acquisition and compilation; second execution reused the built artifact and returned immediately.

2026-04-12 — v10.1.0-alpha.18: SHA-384 Asset Boundary & Jira Re-Engagement

Directive: FIPS 140-3 Cryptographic Boundary & Live-Fire Re-Engagement. Replace the release-asset BLAKE3 pre-hash with SHA-384, re-run the live Jira deduplication proof with inline credentials, verify the workspace under single-threaded test execution, and cut 10.1.0-alpha.18.

  • crates/cli/src/main.rs (modified)cmd_sign_asset now computes Sha384::digest, writes <asset>.sha384, emits hash_algorithm = "SHA-384", and the hidden CLI help text now documents SHA-384 instead of BLAKE3 for the release-asset lane.
  • crates/cli/src/verify_asset.rs (modified) — release verification now enforces 96-char lowercase .sha384 sidecars, recomputes SHA-384 for integrity, and verifies ML-DSA-65 against a 48-byte pre-hash; tests migrated from .b3/BLAKE3 expectations to .sha384/SHA-384 expectations.
  • crates/common/src/pqc.rs (modified)sign_asset_hash_from_file and verify_asset_ml_dsa_signature now operate on &[u8; 48], moving the release-signature boundary onto a NIST-approved pre-hash without touching the performance BLAKE3 paths used elsewhere.
  • crates/cli/Cargo.toml (modified) — added hex.workspace = true for SHA-384 hex sidecar encoding; crates/common/Cargo.toml (modified) — added sha2.workspace = true to make the boundary dependency explicit.
  • action.yml (modified) — release downloads now fetch janitor.sha384, verify the sidecar with sha384sum -c, and then invoke the bootstrap verifier for ML-DSA-65 signature validation. justfile (modified)fast-release now ships target/release/janitor.sha384 instead of janitor.b3.
  • Cargo.toml (modified) — workspace version bumped to 10.1.0-alpha.18. docs/INNOVATION_LOG.md (modified) — removed implemented P0-1: Release-Asset Digest Migration — BLAKE3 → SHA-384 from the active FedRAMP queue. docs/IMPLEMENTATION_BACKLOG.md (modified) — this ledger entry.

Live-fire Jira re-engagement: - First inline-credential bounce run reached Jira transport, but dedup search failed with HTTP 410 and issue creation failed with HTTP 400; the KevCritical finding still fired and blocked the patch at slop score 150. - Second identical run produced the same HTTP 410 search failure and HTTP 400 create failure, so the production dedup skip path did not execute. This is now a sink-contract failure, not a detector failure.

Verification: cargo test --workspace -- --test-threads=1 ✓ | just audit

2026-04-13 — v10.1.0-alpha.24: Reproducible Builds & Preflight Hardening

Directive: Reproducible Builds & Preflight Hardening — SLSA Level 4 bit-for-bit reproducibility, native PQC key generation subcommand, and ASPM Jira credential preflight contract.

Phase 1: Native PQC Key Generation

  • crates/common/src/pqc.rs (modified)generate_dual_pqc_key_bundle() added; generates ML-DSA-65 || SLH-DSA-SHAKE-192s dual key bundle via KG::try_keygen() for both algorithms; returns Zeroizing<Vec<u8>> to wipe key material on drop; 2 new tests: generate_dual_pqc_key_bundle_produces_correct_length, generate_dual_pqc_key_bundle_round_trips_through_sign_cbom.
  • crates/cli/src/main.rs (modified)GenerateKeys { out_path: PathBuf } hidden subcommand added; cmd_generate_keys writes dual key bundle to out_path; cmd_generate_keys_writes_correct_bundle_size test verifies file output size = 4032 + SLH-DSA SK len.

Phase 2: ASPM Dedup Preflight Contract

  • crates/cli/src/main.rs (modified)jira_sync_disabled preflight flag added immediately after JanitorPolicy::load; when policy.jira.is_configured() is true but JANITOR_JIRA_USER or JANITOR_JIRA_TOKEN are absent, emits [ASPM PREFLIGHT] Jira integration configured but credentials missing. Sync disabled. to stderr and gates the jira::sync_findings_to_jira call.
  • crates/cli/src/jira.rs (modified)dedup_second_call_with_same_fingerprint_skips_creation test added; proves first call with search_total=0 invokes send (outcome consumed), second call with search_total=1 returns early without invoking send (outcome unconsumed).

Phase 3: SLSA Level 4 Reproducible Builds

  • .cargo/config.toml (created) — forces lld linker with --build-id=none to eliminate linker-generated unique identifiers that break reproducibility between independent compilation runs.
  • justfile (modified)verify-reproducible recipe added; builds the binary twice in isolated rust:1.91.0-alpine Docker containers with separate output volumes, then uses cmp and sha384sum to mathematically prove bit-for-bit identity.

Version & Docs

  • Cargo.toml (modified) — workspace version bumped 10.1.0-alpha.2310.1.0-alpha.24.
  • docs/INNOVATION_LOG.md (modified) — P3-2 and Live ASPM Dedup purged from open queue; both marked RESOLVED with version reference in Completed Items.

Verification: cargo test --workspace -- --test-threads=1 ✓ | just audit