Skip to content

Commit 476efd9

Browse files
hyperpolymathclaude
andcommitted
feat(v2.1.0): wire FP suppression + remove Logtalk export
Context-aware false-positive suppression now active in all scan paths: - WeakPoint gains suppressed: bool (serde default=false, audit-transparent) - AssailReport gains suppressed_count: usize (skipped when 0) - apply_suppression() wires kanren engine back to report after analysis - Analyzer::analyze_inner() calls apply_suppression() on every scan - Verbose output shows active/total counts with suppressed= semantics explained 10 suppression rules already in load_suppression_rules() now fire and mark findings: test_file (0.99), null_checked (0.95), mutex_guarded (0.95), constant_args (0.95), raii_managed (0.90), result_returning_fn (0.90), enum_args (0.90), path_canonicalized (0.90), schema_validated (0.85), timeout_protected (0.85). Heuristics intentionally broad (tune later). Remove Logtalk export: --logtalk CLI flag removed, export_logtalk() and write_logtalk_export() removed from kanren/mod.rs, all 3 completion files updated. Hypatia now consumes JSON AssailReport via Elixir rules directly. All docs updated: ROADMAP, EXPLAINME, CLAUDE.md, STATE.a2ml. Tests: 289 passing, 0 failing across all suites. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent f02af8c commit 476efd9

22 files changed

Lines changed: 203 additions & 103 deletions

.claude/CLAUDE.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@ Three self-contained modes — none requires the others:
168168

169169
1. **verisimdb HTTP API integration**: Push hexads via REST (awaiting API stabilisation)
170170
2. **kanren context-facts**: ~10 rules for FP suppression (~8% -> ~2-3%)
171-
3. **hypatia pipeline**: Export kanren facts as Logtalk predicates via PanLL
171+
3. **hypatia pipeline**: JSON AssailReport consumed by Hypatia Elixir rules (Logtalk export removed 2026-04-12)
172172
4. **Shell completions**: bash, zsh, fish, nushell
173173
5. **Chapel metalayer**: Distributed `coforall` scanning across compute clusters
174174

.machine_readable/6a2/STATE.a2ml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,6 @@ language-detection = "Skips external_corpora/, third_party/, and corpus/ directo
3333
[next-priorities]
3434
verisimdb-http = "Push hexads via REST (awaiting API stabilization)"
3535
kanren-fp-suppression = "~10 rules for false positive suppression (~8% -> ~2-3%)"
36-
hypatia-integration = "Export kanren facts as Logtalk predicates via PanLL"
36+
hypatia-integration = "JSON AssailReport consumed by Hypatia Elixir rules; Logtalk export removed 2026-04-12"
3737
shell-completions = "bash, zsh, fish, nushell"
3838
chapel-metalayer = "Distributed coforall scanning across compute clusters (future)"

EXPLAINME.adoc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ The README makes claims. This file backs them up.
6969
| Project | Integration |
7070
| **reposystem** | Feeds weak-point scores into graph aspects (security weight)
7171
| **proof-of-work** | Z3-verifies that assail findings are genuine vulnerabilities
72-
| **hypatia** | Consumes assail facts as Logtalk predicates for rule engine
72+
| **hypatia** | Consumes JSON AssailReport via Elixir rules for neurosymbolic reasoning
7373
| **januskey** | Scans operation metadata for unsafe patterns in audit trail code
7474

7575
== Readiness

ROADMAP.adoc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ binary, panicbot (gitbot-fleet CI integration), and mass-panic (org-scale batch
3535
* [x] Forward chaining: derive new vulnerability facts from rules
3636
* [x] Backward queries: find files that could cause a vulnerability type
3737
* [ ] Context-facts for false-positive suppression (~10 rules, target ~8% -> ~2-3% FP rate)
38-
* [ ] Kanren fact export as Logtalk predicates for Hypatia pipeline
38+
* [ ] Context-facts for Hypatia Elixir rules: export FactDB snapshot as JSON for direct consumption by Hypatia rule engine (replaces removed Logtalk export; Hypatia now consumes JSON AssailReport via Elixir rules)
3939

4040
== v2.2.0 -- VeriSimDB Integration
4141

completions/_panic-attack

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@ module completions {
4040
--verbose(-v) # Verbose output
4141
--attest # Enable attestation chain (writes .attestation.json sidecar)
4242
--signing-key: path # Path to Ed25519 private key (32-byte seed) for signing the attestation. Requires the `signing` feature
43-
--logtalk: path # Export kanren logic facts as Logtalk predicates for hypatia integration
4443
--report-view: string@"nu-complete panic-attack assail report_view"
4544
--expand-sections
4645
--output-format: string@"nu-complete panic-attack assail output_format"

completions/panic-attack.fish

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,6 @@ complete -c panic-attack -n "__fish_panic_attack_needs_command" -f -a "temporal"
7272
complete -c panic-attack -n "__fish_panic_attack_needs_command" -f -a "completions" -d 'Generate shell completions for the specified shell'
7373
complete -c panic-attack -n "__fish_panic_attack_using_subcommand assail" -s o -l output -d 'Output report to file' -r -F
7474
complete -c panic-attack -n "__fish_panic_attack_using_subcommand assail" -l signing-key -d 'Path to Ed25519 private key (32-byte seed) for signing the attestation. Requires the `signing` feature' -r -F
75-
complete -c panic-attack -n "__fish_panic_attack_using_subcommand assail" -l logtalk -d 'Export kanren logic facts as Logtalk predicates for hypatia integration' -r -F
7675
complete -c panic-attack -n "__fish_panic_attack_using_subcommand assail" -l report-view -r -f -a "summary\t''
7776
accordion\t''
7877
dashboard\t''

completions/panic-attack.zsh

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,6 @@ _arguments "${_arguments_options[@]}" : \
4545
'-o+[Output report to file]:OUTPUT:_files' \
4646
'--output=[Output report to file]:OUTPUT:_files' \
4747
'--signing-key=[Path to Ed25519 private key (32-byte seed) for signing the attestation. Requires the \`signing\` feature]:PATH:_files' \
48-
'--logtalk=[Export kanren logic facts as Logtalk predicates for hypatia integration]:PATH:_files' \
4948
'--report-view=[]:REPORT_VIEW:(summary accordion dashboard matrix)' \
5049
'--output-format=[]:OUTPUT_FORMAT:(json yaml nickel sarif)' \
5150
'--store=[]:DIR:_files' \

src/a2ml/mod.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -832,6 +832,7 @@ mod tests {
832832
severity: Severity::Medium,
833833
description: "unchecked result".to_string(),
834834
recommended_attack: vec![AttackAxis::Concurrency],
835+
suppressed: false,
835836
}],
836837
statistics: ProgramStatistics {
837838
total_lines: 42,
@@ -856,6 +857,7 @@ mod tests {
856857
dependency_graph: DependencyGraph::default(),
857858
taint_matrix: TaintMatrix::default(),
858859
migration_metrics: None,
860+
suppressed_count: 0,
859861
}
860862
}
861863

0 commit comments

Comments
 (0)