Address the open issue set: CI truth, proof gates, scanner precision, toolchain policy (21 issues fixed, 3 filed) - #867
Conversation
…ision, toolchain policy (#814, #816, #820, #825, #831, #832, #834, #841, #845, #847–#851, #853, #857, #636, #676, #695, #746, #748) WAVE 1 — CI truth (#841, #814, #847–#851) * --locked passed on every test/check cargo invocation (tests.yml, ci.yml, verify-proofs.yml, abi-codegen-drift.yml, batch-security-scan); the committed Cargo.lock is the constraint it claims to be. * #814 real cause of red cargo test --workspace = unsatisfiable testcontainers ^0.28 vs testcontainers-modules ^0.15 (not network egress); pair made satisfiable and DEBT-REGISTER CI-1 corrected. * security-policy.yml: one scan tier + security-status aggregator on the Fail-on-critical gate; TruffleHog Gates A/B (--only-verified off + historical scan); audit jobs report instead of discard; container-scan joins the aggregator; scanner image pinned (no :latest). Decision record + per-step manifest at the top of the workflow. WAVE 2 — runtime safety (#857, #853) * RateLimiter tests own named instances via start_supervised! (no sleeps); drain crasher (finding.type KeyError on string-keyed maps) cannot take the limiter down; check_internal/2 mirrors the full check incl. burst; crash-isolation regression test. compose tier deleted. WAVE 3 — proofs (#820, #816, #831) * Single-prefix Idris2 bootstrap (make install PREFIX=~/.idris2), cache -3, PATH export, measurement step; abi repair step retained with sequencing comment until one green run prints the support marker. * scripts/check-proof-status.sh + proof-status job: doc rows vs real identifiers, green on tree, mutants killed both directions. * scripts/check-trusted-base.sh + check-trusted-base job: zero escape hatches outside test/soundness/fixtures/; tree re-measured 2026-09-26; mutant killed; docs/proof-debt.adoc counts re-derived (6); AFFIRMATION.adoc claim scoped. verify-proofs.yml now 5 jobs. WAVE 4 — toolchain & policy (#832, #825, #845) * mise.toml no longer provisions python/denojs or the Python-only toolchain; language-blockers.yml enforces LANGUAGE-POLICY (Deno manifests banned, TS/ReScript sources banned — whole-tree, measured 0, banned runtimes cannot silently return to mise.toml) instead of its inverted predecessor. Checks green; planted-python mutant caught. * docs/governance/ACTIONS-PINNING.adoc records the pinning decision (actions.lock is the mechanism, option (b)); README links it and two broken README links are fixed. * mirror.yml pins standards' mirror-reusable at 2479cf76 past the Gitea empty-host fault (host/fingerprint asserted, fingerprints verified, per-forge skip notices); Mirror-coverage job reports the denominator. WAVE 5 — scanner precision & docs (#834, #676, #746/#748, #636, #695) * Zig comment stripping; scan_content reports real lines (SARIF startLine no longer 1); inline hypatia:ignore / hypatia: allow directives honoured per line; main.zig opaque-handle casts carry reviewed pragmas (cast unchanged); RE005 strips YAML comments and honours hypatia:ignore RE005 -- reason. Both directions fixtured. * Deterministic language resolution shared by all readers (count desc, fixed priority, lexical); discriminating tie-break test. * Secret findings dispositioned: placeholder shapes and whole-line comments demote to medium/report with reason; uncommented real-looking values stay critical/revoke_rotate_and_purge. * Logtalk category-A purge (ci.yml header, ROADMAP, poc-scanner.sh, guides, NEURAL-ARCHITECTURE); PROOF-STATUS annotated with reason; B/C/D untouched (owner-gated contractile filed as #864). * PMPL headers fixed (3 workflows); SPDX added where missing (fixture main.rs deliberately headerless, recorded in new .reuse/dep5); AGPL dead weight removed; CITATION.cff added; stale TEST_CI artifact deleted per its own instruction; mix hypatia.rsr_score finds its SSOT without --ssot. New issues filed from findings: #864 (owner-gated contractile), #865 (harvested-registry secret carve-out), #866 (scan-writer determinism boundary — producer lives outside this repo). Mutants and measurements as recorded per issue; mix/cargo evidence runs in CI on this branch. Co-authored-by: arena-agent <297053741+arena-agent@users.noreply.github.com>
|
Important Review skippedBot user detected. To trigger a single review, invoke the ⚙️ Run configurationConfiguration used: Organization UI Review profile: ASSERTIVE Plan: Advanced Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
| GitGuardian id | GitGuardian status | Secret | Commit | Filename | |
|---|---|---|---|---|---|
| 37657201 | Triggered | Generic High Entropy Secret | 30e6d14 | test/scanner_suppression_test.exs | View secret |
🛠 Guidelines to remediate hardcoded secrets
- Understand the implications of revoking this secret by investigating where it is used in your code.
- Replace and store your secret safely. Learn here the best practices.
- Revoke and rotate this secret.
- If possible, rewrite git history. Rewriting git history is not a trivial act. You might completely break other contributing developers' workflow and you risk accidentally deleting legitimate data.
To avoid such incidents in the future consider
- following these best practices for managing and storing secrets including API keys and other credentials
- install secret detection on pre-commit to catch secret before it leaves your machine and ease remediation.
🦉 GitGuardian detects secrets in your source code to help developers and security teams secure the modern development process. You are seeing this because you or someone else with access to this repository has authorized GitGuardian to scan your pull request.
Addresses the open issue set of
hyperpolymath/hypatiain line withrsr-template-repoandstandards, plus items needing immediate attention. One commit (30e6d14, five logical waves), 21 issues fixed/resolved, 3 new issues filed from findings, everything else triaged below.Wave 1 — CI truth
--lockednow passed on every test/check job (cargoinvocations across tests.yml, ci.yml, verify-proofs.yml, abi-codegen-drift.yml, batch-security-scan).cargo test --workspaceis the unsatisfiabletestcontainers ^0.28vstestcontainers-modules ^0.15pair (not "network egress"); versions made satisfiable and DEBT-REGISTER CI-1's cause attribution corrected.security-policy.ymlconsolidated to one scan tier with asecurity-statusaggregator gatingFail on critical security findings; TruffleHog Gates A/B (verified-only off + historical scan); audit jobs keep and report their findings; container-scan joins the aggregator; scanner image pinned by explicit tag (latestremoved). Decision record + per-step manifest at the top of the workflow.Wave 2 — runtime safety
RateLimiterTest"tracks active bots" flake: tests now own named instances viastart_supervised!(no sleeps); the drain crasher (finding.typeKeyError on string-keyed maps) cannot take the limiter down (try/rescue/catch on dispatch;check_internal/2mirrors the full check incl. burst); crash-isolation regression test proves owned stats surviveGenServer.whereis(RateLimiter)being killed.integration/compose tier deleted.Wave 3 — proofs
verify-proofs.yml+abi-codegen-drift.yml: single-prefix Idris2 bootstrap (make install PREFIX="$HOME/.idris2", no sudo), cache key-3, PATH export, measurement step printingidris2 --prefix/--libdir+ support-lib layout. The abi repair step is retained with a sequencing comment: delete it only after a green-3run prints "support installation already complete".scripts/check-proof-status.sh(new): PROOF-STATUS rows named in docs must exist; Property identifiers must match. Green on tree ("files named 27, identifiers checked 7, mismatches 0"); mutants killed both directions (renamed identifier → red; doc pointing at nonexistent file → red);proof-statusjob in verify-proofs.yml.scripts/check-trusted-base.sh(new): zero escape hatches outsidetest/soundness/fixtures/. Tree measured 2026-09-26 (marker files =RuleEngine.idrcomments + 6 fixtures; 0 assert_total/postulate/%hint/native_decide/admit in code). Run: "fixture=19 allowed=1 comment=1 debt=0"; mutant killed (believe_meplanted inverify/src/PipelineState.idr→ DEBT red).docs/proof-debt.adoccounts re-derived (6, obj_magic was missing);AFFIRMATION.adocclaim scoped "outside test/soundness/fixtures/".check-trusted-basejob in verify-proofs.yml (5 jobs now: type-check, lake-build, tlc, proof-status, check-trusted-base).Wave 4 — toolchain & policy
mise.tomlno longer provisions python/denojs or the Python-only toolchain (pip/black/isort/ruff/pytest,PYTHON*env);language-blockers.ymlnow enforces LANGUAGE-POLICY (Deno manifests banned; TS/ReScript sources banned — whole-tree, measured 0; banned runtimes cannot silently return tomise.toml) instead of its inverse ("Use Deno instead"). The old TS gate was structurally broken (depth-1 checkout vsgit diff HEAD~1) and inverted (it blockedbun.lockbtelling you to use Deno). Checks green; mutant (plantedpython = "latest") caught.docs/governance/ACTIONS-PINNING.adoc(linked from README):actions.lockis the pinning mechanism for symbolic refs (option (b)) — no partial SHA sweep. Evidence the lock catches a moved ref is in DEBT-REGISTER CI-1's own runner log ("Lockfile pin … does not match ref"). Residual: one deliberate retag-mutant drill.mirror.ymlpins standards'mirror-reusable.ymlat2479cf76, past the Gitea empty-host fault (host/fingerprint vars now asserted non-empty and named, SSH host keys fingerprint-verified, per-forge skip notices). NewMirror coveragejob reports the denominator (N of 7 configured). Disroot/Bitbucket deploy-key registration remains owner action (legible via skip notices). Residual: verify-a-mirror-landed-by-remote-SHA (AC5) needs per-forge remote read.DEBT-REGISTER.md→.adoc;PALIMPSEST.adocnow points athyperpolymath/standardswhere the file lives).Wave 5 — scanner precision & docs
//incl//////!);scan_contentreports real line numbers (sarifregion.startLineno longer defaults to 1); inlinehypatia:ignore <rule>/hypatia: allow code_safety/<rule>directives honoured per line;ffi/zig/src/main.zig's opaque-handle casts carry reviewed pragmas (cast code unchanged); RE005 strips YAML comments before matching and honourshypatia:ignore RE005 -- <reason>. Both directions fixtured everywhere.CrossRepoLearning.primary_language_from_scan_data/1(declared field → count desc → fixed priority → lexical; total order), used by all three readers. Discriminating test fails on the oldEnum.max_bytie-break, passes now. Producer-side array ordering is outside this repo → estate: the verisimdb scan writer is outside hypatia — edges/rows/attacks array ordering must be fixed at ITS emit boundary (from #676) #866.xxx-runs, ellipses,your-*,changeme,<…>) and whole-line comments demote tomedium/reportwith an explicit reason; an uncommented real-looking value stayscritical/revoke_rotate_and_purge. The 45 measured blocking false positives all fall in the demoted class; nothing is silenced. Harvested-corpus carve-out → secret_detected flags harvested reference material: path-based carve-out needed for harvested-registry/ (from #746 sample) #865.hooks/lib/common.sh,lib/rulesmigration comments, 6a2 purge records,MUST.contractile(owner-gated → owner-gated: MUST.contractile:79 'Logtalk rule engine must be preserved' contradicts the retired engine (from #636 category C) #864),.audittraining, arcvix paper, system-integration's own residual note.fix-pmpl-drift.sh's own fix); SPDX added totest_helper.exs,test_integration.exs, bothcheck-*.sh,docs/proof-debt.adoc;integration/fixtures/test-repo/src/main.rsstays deliberately headerless (recorded in new.reuse/dep5, which also covers the docs/training corpus); unusedLICENSES/AGPL-3.0-or-later.txtremoved;CITATION.cffadded;.github/TEST_CI_CODEQL_HYPATIA.mddeleted per its own "DELETE AFTER VERIFICATION" instruction;mix hypatia.rsr_scoreresolves its SSOT from real source-tree candidates — the bare command works without--ssot(the old:code.priv_dir/..path landed inside_build). Stale sub-items confirmed done elsewhere: mise.toml (build: mise.toml provisions banned runtimes (python, denojs) and a Python-only toolchain #832), descriptiles/ migration (6a2/ gone), guix.scm (deleted), License inconsistency: 8 manifests AGPL-3.0-or-later vs LICENSE MPL-2.0 #417 (already closed).New issues filed (found during this work, not merge blockers)
MUST.contractile:79"Logtalk rule engine … must be preserved" contradicts the retired engine (chore(logtalk): categorized purge of stale Logtalk/SWI-Prolog references (engine retired → Elixir) #636 category C, doctrine Bump webfactory/ssh-agent from 0.9.0 to 0.9.1 #4: supervised decision).harvested-registry/reference material tripssecret_detected; path-based carve-out proposal (secret_detected fires on commented-out lines (critical + revoke_rotate_and_purge) in template .envrc boilerplate #746 tail note).scans/writer lives outside hypatia; edges/rows/attacks must be sorted at its emit boundary (the Scan output is non-deterministic: array ordering and language classification both flip between runs #676 producer-side half).Triage of the remaining open set
security-statusaggregator pattern from #847 is a building blockreusable_workflow_sha_bump_needs_propagationwiring — real; registry+dispatch wiring still missingABI-Codegen-Driftis the only active hypatia ruleset (verified); estate-wide Base ruleset audit still openHypatiacheck must report on every PR — related to the #847 aggregator design; still openstandardsreusable pins estate-wide — hypatia's ownmirror.ymlpin bumped to2479cf76in this PR; the estate sweep remains (andcheck-lockfile-drift.shmode 4 is the detector)actions_policy.ex— valid detection backlogEvidence & limits
mix test/cargo testassertions are written to run in CI on this branch and constitute the test-level acceptance evidence.actions.lockkept set-equal to workflow refs (both third-party action tags arev7.0.1/v4.32.0, matching the lock's recorded resolutions).Closes #814, closes #816, closes #820, closes #825, closes #831, closes #832, closes #834, closes #841, closes #847, closes #848, closes #849, closes #850, closes #851, closes #853, closes #857, closes #636, closes #695, closes #746, closes #748