Release of the v2.5.5 cohort that landed across 11 PRs in panic-attack + wiki + gitbot-fleet on 2026-06-02 PM. Tagged 2026-06-02 PM-evening.
Added (2026-06-02 PM) — v2.5.5 context-awareness cohort + v3.0.0 Chapel→VeriSimDB push + PROOF-PROGRAMME
Eight PRs landed in one cohort closing the v2.5.5 ROADMAP section, a v3.0.0 item, and opening the first proof slice of the new PROOF-PROGRAMME.
v2.5.5 — Attack Surface Widening (false-positive reduction)
test_contextfoundation (#102): newsrc/test_context.rsmodule with cross-language test-path classification (Rust / Python / Go / JavaScript / Julia / Zig / Elixir / docs-examples). NewWeakPoint.test_context: Option<TestContext>field (Production / TestOnly / Doc) plumbed through 137 construction sites. Content-based promotion viause ExUnit.Case/unittest.TestCase/pytest.fixture/@testsetmarkers.comment_markerinline suppression (#105): newsrc/comment_marker.rsmodule recognising// panic-attack: accepted [- reason]on the same or preceding line. Cross-language comment leaders://mid-line for C-family;#/--/;/%///////!start-of-line for Python/Haskell/Lisp/Erlang/Rust-doc/Rust-inner-doc. String-literal aware. Shebang#!excluded.ffi_kindsubtyping (#106): newsrc/ffi_kind.rsmodule subtypingWeakPointCategory::UnsafeFFI(PA013) into BuildSystem / RuntimeAbi / TestMock / Unknown.classify_by_pathdistinguishesbuild.zig/build.rs(BuildSystem, audit-accepted by default) frombindings//ffi//sys//cdef.zig(RuntimeAbi, audit-significant) fromtests/mocks//tests/stubs/(TestMock, also audit-accepted). Newis_audited_boundary(audit_text, file_path)parsesaudits/audit-ffi-unsafe.md## Approved boundariesmarkdown.jit_contextclassifier (#107): newsrc/jit_context.rsmodule classifying JIT frameworks — Cranelift / Llvm / Wasm / Javascript / None. Factors existing inline Cranelift detection atanalyzer.rs:1117..1129into reusable surface.transmute_targets_fn_ptrmade tolerant of= unsafe { ... transmute(..) }wrappers.- Phase 2 analyzer wire-up (#110): new
apply_v255_context_suppression(&mut report)runs after the kanren-based rule pass and (a) marker-flipsWeakPoint.suppressed = truewhenpanic-attack: acceptedis on or above the line, (b) auto-suppressesPanicPathin TestOnly/Doc context, (c) auto-suppressesUnsafeFFIin BuildSystem/TestMock context. Setstest_contextmetadata on every finding with a known file path.
v3.0.0 — Distributed Scanning (HTTP push from Chapel)
panic-attack verisim-push <hexad>subcommand (#108): newCommands::VerisimPushgated on thehttpCargo feature. Reads a JSON hexad (typically what ChapeltakeSnapshotjust wrote), POSTs to$VERISIMDB_URL(defaulthttp://localhost:8080) via the existingstorage::push_hexad_http_with_retry.--fallback-dirwrites a JSON copy on HTTP failure for offline replay.- Chapel
takeSnapshotoverload (#108): new 6-arg form acceptingverisimPushUrl+panicAttackBinparameters. Spawnspanic-attack verisim-push --url <url> --retry <hexad>after local hexad write. Local writes remain authoritative; push is additive. Closes the[ ]ROADMAP item.
PROOF-PROGRAMME — first-principles soundness
PROOF-PROGRAMME.md(#104): 3-layer landscape (Surface / Engine / Persistence) covering all 25 PA-code soundness proofs + miniKanren correctness + bridge reachability + attestation chain unforgeability. 9-phase sequencing (~16 weeks). Identifiesprovencross-fit candidates: onlySafePath+SafeUrlqualify as port-to-Rust (perf-neutral, semantic-equivalent);SafeJson/SafeRegex/SafeDateTime/SafeCommand/SafeEnv/SafeUUIDmarked skip (already total / semantic mismatch).- Layer 1.0 partial (#111): new
src/abi/Stripping.idrQed-closing the foundation lemmas for line-comment stripping —stripBodyProducesStrippedShape(every body output satisfiesIsStrippedBody) + base cases ofstripLineCommentsIdempotent(empty + non-slash-headed input). Open: the slash-slash inductive closurestripIsIdentityOnStrippedBody(recorded as the next Layer-1.0 slice inPROOF-NEEDS.md).
- README badge + Status block corrected: 402 → 782 runnable tests
(per
cargo test --release -- --list; the underlying 539#[test]annotations expand via doctests + integration tiers). The badge had not tracked actual count for several releases. Wiki Home was282+. - chapel-ci
chapel-multilocalegate robustified (#100 collateral): pinnedCHPL_UNWIND=systemexplicitly + movedlibunwind-devinstall to always-run (not gated on cache-hit). On cache-hit runs without libunwind-dev, chpl auto-inferredCHPL_UNWIND=bundledand aborted with "no runtime for bundled" because the cached runtime was built withsystem. Cache-gen counter bumpedv1→v2to discard the inconsistent cache. Fifth Chapel-2.8.0 sharp edge from #99 Wave 2. - ROADMAP v2.2.0: downgraded "Per-project VeriSimDB instance:
deploy/panic-attack/fly.tomlforverisim-panic-api" from[x]to[~]— the API runs but the toml file is NOT in this repo (lives in theverisimdbdeployment tree). The[x]checkbox previously pointed at a path that didn't exist onmain. - ROADMAP front matter + Wiki Home: "500+ repositories" replaced
with the empirically verifiable "303-repo hyperpolymath estate
(2026-04-12)" — the number that appears in
docs/mass-panic-fnirs-paper.adocTable I. chapel/README.md: 5× softening of "~5–15% slower" to "(UNMEASURED ESTIMATE)" with explicit link topanic-attack#87 Wave-3 followupfor the actual benchmark.- README Status block + Wiki Home: noted that the 25 canonical
PA codes correspond to 26
WeakPointCategoryenum variants —PA001⇒UncheckedAllocationandPA001b⇒UnboundedAllocationshare the same canonical SARIF rule for taxonomy purposes (seesrc/report/sarif.rs).
chapel-multilocaleCI gate (#99, closes #87 option A): adds a 7th strict chapel-ci job that builds Chapel 2.8.0 from source withCHPL_COMM=gasnet+CHPL_COMM_SUBSTRATE=smp+CHPL_LAUNCHER=smp, caches$CHPL_HOME(actions/cache@v4, stable key with manualCHAPEL_MULTILOCALE_CACHE_GENinvalidation counter; cold build ~30-40 min, warm restore ~30s for 7 days), runsmass-panic --numLocales=2against a synthetic 2-repo corpus, and greps the emittedsystem-image-*.jsonfor both repo names to prove cross-locale aggregation actually executed. The Wave 1 binary.debinstall path is single-locale only; this gate closes the gap.- Aggregator
chapel-ci-gateupdated to wait on the 7th job and to surface it asmultilocale=<result>in the gate summary. - Wave 3 (
gasnet/ofiover a real NIC across cluster nodes) and the ~50-repo "~5-15% slower" benchmark fromchapel/README.mdremain parked — both need a beefier or self-hosted runner to be meaningful.
- Dogfood Gate A2ML validation restored (#94, #97): bumped
hyperpolymath/a2ml-validate-actionfrom59145c7dto6bff6ecto pick up s-expression-form identity/version recognition (upstream PR #26); relocateddocs/campaigns/2026-05-26.a2mlto.machine_readable/campaigns/so it inherits the structural-identity exemption (the file's own header describes it as "machine-readable A2ML form"). - Governance Trusted-base reduction policy restored (#94): added
.trusted-base-ignoreexemption forsrc/assail/analyzer.rs— the file IS the scanner that defines the escape-hatch patterns, so its literal references to them are by design. - Secret Scanner rust-secrets false-positive cleared (#94):
refactored
RE_HARDCODED_SECRETregex construction viaconcat!to split detector keywords across source-string boundaries (the literalpasswordkeyword in the source was self-flagging). - Rust CI reusable SHA bumped past
standards#334(#97) — caller now resolves the${{ }}-wrapped job-levelif:fix and unblocks therust-ci.ymlwrapper that was reporting 0-second parse failures (root cause documented atstandards#322). - rsr-template scaffolding gaps filled (#96): LICENSE flipped from
AGPL-3.0 body to MPL-2.0 (matching SPDX headers + Cargo.toml +
README.adoc); CODE_OF_CONDUCT.md placeholders instantiated
(
{{CONDUCT_EMAIL}}→j.d.a.jewell@open.ac.uk,{{CONDUCT_TEAM}}→panic-attack maintainers,{{RESPONSE_TIME}}→48 hours,language-bridges→panic-attack); bug_report/feature_request issue templates Rust-toolchain-aware; emptycustom.mdremoved; SECURITY.md version table updated from0.2.xto2.5.x.
- Dependabot rust-minor group bumps (#93):
log0.4.29 → 0.4.30,eframeminor update.
- VeriSimDB hexad persistence complete (issue #33 S1–S3) — per-finding
hexads, campaign state lifecycle, and S-expression query DSL all shipped:
- S1: per-finding hexad emission gated by
PANIC_ATTACK_STORE_FINDING_HEXADS=1(src/storage/mod.rs :: build_finding_hexads, subject formatfinding:<repo>:<file>:<line>:<category>). - S2:
panic-attack campaignsubcommand (register-pr,dismiss,status,poll) drives finding lifecycle with state transitions persisted as campaign hexads.pollperforms GitHub PR state transitions (open → pr-filed → pr-merged / pr-closed). - S3:
panic-attack query <expr>evaluates a small S-expression language over the persisted hexads. Heads:category,rule-id,severity,repo,file,pr-state,since,crosslang,diff,and,or,not.
- S1: per-finding hexad emission gated by
- Query parser:
(diff :since :category ...)head + inline:keyword VALUEkwargs on every unary head (src/query/mod.rs). The issue body's three literal example expressions now parse verbatim:(crosslang :from FFI :to ProofDrift)— already worked.(category PA001 :severity Critical :pr-state nil)— now parses as(and (rule-id PA001) (severity Critical) (pr-state nil)), with PA-prefixed values oncategoryauto-routed torule-idso the query actually matches findings.(diff :since 2026-04-12 :category PA022)— newdiffhead is keyword-only sugar for an(and ...)over its kwarg pairs. Inline kwargs are accepted oncategory,rule-id,severity,repo,file,pr-state, andsince— adding a:keyword VALUEafter the positional value desugars to(and (head positional) (kw value) ...). Behaviour unchanged for existing query expressions; 12 new unit tests.
- User-classification registry (
assail::UserClassification,load_user_classifications,apply_user_classifications): panic-attack now reads an optional project-local classification file at every assail pass and flips matching findings tosuppressed = trueafter the kanren structural-suppression pass. Two lookup paths:<project_root>/audits/assail-classifications.a2ml(preferred)<project_root>/.panic-attack-classifications.a2ml(fallback) File format is a simple A2ML S-expression with(classification (file …) (category …) (audit …) (rationale …))blocks;;;line comments ignored. The registry pattern lets repositories record audited findings out-of-band from the source under scan so a PR adding a new unsafe block cannot self-suppress without a reviewable companion edit to the registry.
- Rocq scaffold classifier (
analyze_coq+count_rocq_unverified_postulates+is_rocq_abstraction_parameter): the Rocq detector no longer counts Section-scopedVariable/Hypothesis/Parameterdeclarations (they discharge atEnd Section) and classifies module-levelParameterdeclarations by stated type: carrier types (Type,Set), decidability witnesses (forall _, { _ = _ } + { _ <> _ }), and function types with a concrete non-Prop codomain are treated as abstraction parameters. Prop-valued declarations (classical excluded-middle, choice, unresolved theorem statements) remain counted. Removes the false-positive stream that surfaced on every canonical-proof-suite scaffold.
- Suppression pipeline:
analyze()andanalyze_verbose()now chainapply_suppression→apply_user_classificationsin that order; the explicit post-analyze calls inassail::analyzeandassail::analyze_verboseat the module boundary are retained for API-contract clarity but are no-ops when anAnalyzerpass has already run. - Rocq test coverage: 12 new unit tests across
analyzer.rs(Section-scoped Variables / module-level Type carriers / decidable equality / concrete-codomain functions / Prop-valued axioms / missing type annotation / full scaffold shape — 7 tests) andmod.rs(missing-registry / single-entry / multiple-entry / comment handling / end-to-end suppression-flip — 5 tests).
- 007 canonical-proof-suite scan: active finding count 8 → 0
(the 6 scaffold ProofDrifts via the detector enhancement, the 2
zig_bridge.rsUnsafeCode findings via the classification registry pointing ataudits/audit-ffi-unsafe.md §1). No in-source suppression markers added to either repo.
- InputBoundary category (PA024): New weak point category detecting unguarded structured-data
parsing at trust boundaries.
- Rust:
serde_cbor::from_slice/from_reader,ciborium::de::from_reader,rmp_serde::from_slice/from_read— CBOR/MessagePack deserialization without a validation layer (Medium). All five crate patterns flagged. - JavaScript/ReScript:
JSON.parse(in files without anytry/catchcontext (High). Files that do wrap their JSON.parse in try/catch are not flagged. - Julia:
JSON3.read(andJSON.parse(without error handling context (High). - Taint tracking from external reads to trust-sensitive sinks deferred to kanren phase.
- A2ML boundary detection deferred — requires cross-file analysis.
- Rust:
- PA024 → panicbot: InputBoundary mapped to
static-analysis/input-boundary, 0.72 confidence, Control tier, Partial fixability. - MutationGap category (PA025): New weak point category detecting mutation and chaos
coverage gaps in test suites.
- Rust (project-level): Tests present (
mod tests/#[cfg(test)]) but nocargo-mutantsconfig inCargo.tomlormutants.toml— mutation tooling absent (Low). - Julia (per-file):
@testsetblocks where every@testis a type-check assertion (@test … isa …) with no value assertions — no assertion diversity (Medium). - Elixir (per-file): Test files using
ExUnit.Casewithout importingExUnitPropertiesorStreamDatafor property-based testing (Low). - Coverage-plus-mutation-score check deferred — requires runtime coverage data.
- Rust (project-level): Tests present (
- PA025 → panicbot: MutationGap mapped to
static-analysis/mutation-gap, 0.80 confidence, Substitute tier, Partial fixability. - Idris2 ABI completeness:
PatternCompleteness.idrupdated — InputBoundary (Rust/JS/Julia) and MutationGap (Rust/Julia/Elixir) added toWPCategorywithdetectorsForentries.
- Category count: 23 → 25 (added InputBoundary, MutationGap)
- v2.5.0 milestone: All tractable items complete. Two deferred items each for
input_boundary(taint+A2ML) andmutation(coverage-score), and three forcrypto_misuse(key-reuse, nonce-reuse, sig-verify) marked as statically undetectable or requiring runtime data.
- CryptoMisuse category (PA022): New weak point category detecting cryptographic primitive
misuse across five languages. Context-window heuristic (±200 chars) restricts MD5/SHA-1
findings to security-sensitive usage — MD5 for file checksums is not flagged.
- Rust:
md5::compute/Md5::newandsha1::Sha1/Sha1::newin security context (High);==comparison onsecret/password/token/keyvariables (Critical — timing attack). - Python:
hashlib.md5()/hashlib.sha1()in security context (High);==on secret-named variables — usehmac.compare_digest()instead (Critical). - JavaScript:
crypto.createHash('md5')andcrypto.createHash('sha1')(High);crypto.createHash('sha256')is fine and not flagged. - Go:
md5.New()/md5.Sum()andsha1.New()/sha1.Sum()in security context (High). - Elixir:
:crypto.hash(:md5, ...)and:crypto.hash(:sha, ...)(High);:crypto.mac(:hmac, :sha, ...)is acceptable (HMAC-SHA1 is not broken) and not flagged. - Key-reuse and nonce-reuse deferred — not reliably detectable statically.
- Rust:
- has_security_context() helper: Module-level helper function checks ±200 char window around a pattern match for security vocabulary (password, secret, token, auth, key, credential, hash, sign, verify, encrypt) to reduce false positives on benign MD5/SHA-1 use.
- PA022 → panicbot: CryptoMisuse mapped to fleet category
static-analysis/crypto-misusewith 0.75 confidence, Eliminate tier, Partial fixability. Confidence is honest — the context window has a modest false-positive rate when security vocabulary appears for unrelated reasons. - Idris2 ABI completeness:
PatternCompleteness.idrupdated — CryptoMisuse added toWPCategorywithdetectorsForcovering Rust, Python, JavaScript, Go, Elixir.
- SupplyChain category (PA023): New weak point category detecting dependency and build
integrity gaps:
Cargo.tomlgit dependencies withoutrev =, absentCargo.lockfor library/binary crates, JuliaManifest.tomlwithoutgit-tree-sha1hash entries,flake.nixinputs withoutnarHash, anddeno.jsonimport map entries without a version pin. Project-level manifest checks run as a synthesis stage after file analysis. Confidence 0.85 — these are explicit manifest/config patterns with low false-positive rate. - PA023 → panicbot: SupplyChain mapped to fleet category
static-analysis/supply-chainwith 0.85 confidence, Eliminate tier, fixable (adding pins resolves the finding). - Idris2 ABI completeness:
PatternCompleteness.idrupdated — SupplyChain added toWPCategorywithdetectorsForcovering Rust, Julia, Nix, JavaScript.
- Category count: 22 → 23 (added SupplyChain)
- ProofDrift category (PA021): New weak point category detecting formal verification drift
across all proof assistant languages. Catches banned proof escape hatches (
sorry,Admitted,believe_me,oops,trustMe,assert_total,%partial,{-# TERMINATING #-}) and Julia mirror files substituting@test x isa Yor# sorrycomments for formal proofs. Confidence 0.92 — proof escape hatches have essentially no false positives in their file types. - Isabelle/HOL language support:
.thyfiles parsed withanalyze_isabelle()detectingsorry,oops, andaxiomatizationas ProofDrift findings. - Coq/Rocq language support:
.vfiles parsed withanalyze_coq()detectingAdmitted,admittactic,Axiom/Parameterdeclarations, andObj.magicin extraction artifacts. - Isabelle + Coq dispatch: Both new languages wired into
analyze_inner()dispatch. - Lean4 ProofDrift upgrade:
sorryupgraded from UnsafeCode → ProofDrift (Critical). AddedunsafeNativeIO/unsafeBaseIOas ProofDrift (IO discipline bypass). - Agda ProofDrift upgrade:
trustMe/primTrustMeupgraded to ProofDrift (Critical). Added{-# TERMINATING #-},{-# NON_TERMINATING #-}, barepostulateas ProofDrift. - Idris2 ProofDrift upgrade:
believe_mealready ProofDrift; addedassert_total(High) and%partial(Medium) as ProofDrift findings. - Julia mirror detection:
# sorry,# TODO: prove,# admittedcomments and@test x isa Ypatterns (no value check) flagged as ProofDrift in Julia files. - FP suppression wiring:
apply_suppression()now runs on every scan, marking weak pointssuppressed: truewhen logic engine finds defensive-pattern context. Suppressed items stay in report for audit transparency; filtered by panicbot and CI gates. - PA021 → panicbot: ProofDrift mapped to fleet category
static-analysis/proof-driftwith 0.92 confidence and Control tier. - Idris2 ABI completeness:
PatternCompleteness.idrupdated — Isabelle, Coq added toLangenum; ProofDrift added toWPCategorywithdetectorsForcovering all new languages. - Hypatia integration: JSON AssailReport consumed by Hypatia Elixir rules. Logtalk export removed 2026-04-12.
- Language count: 47 → 49 (added Isabelle, Coq)
- Category count: 20 → 21 (added ProofDrift)
- Verbose output: Two views — filtered (active, what CI sees) and unfiltered (total, audit transparency) with explicit labelling of what each count means.
- A2ML parser: Now handles TOML-like format (key = "value") in addition to S-expression format
- Manifest lookup: Tries
0-AI-MANIFEST.a2mlfirst before falling back toAI.a2ml - Language detection: Skips
external_corpora/,third_party/, andcorpus/directories to avoid false positives from vendored or reference text
- SARIF output format:
--output-format sariffor GitHub Security tab integration - Assemblyline batch scanning: Scan entire directories of repos with
assemblylinesubcommand- Rayon parallelism: 17.7x speedup (141 repos in 39.9s)
- BLAKE3 fingerprinting for incremental scanning (infrastructure ready)
- Sorted output: riskiest repos first
- Notification pipeline:
notifysubcommand generates annotated finding summaries- Markdown output with severity breakdown per repo
--critical-onlyflag for filtering--create-issuesfor GitHub issue creation
- Cryptographic attestation chain: Three-phase model (intent, evidence, seal)
- Pre-execution commitment hashing
- Rolling evidence accumulator
- Post-execution binding with optional Ed25519 signing (
--features signing) - A2ML envelope wrapper for attestation bundles
- i18n support: ISO 639-1, 10 languages (en, fr, de, es, it, pt, ja, zh, ko, ar)
- Compile-time safe catalog with
t()andt_or_key()lookups - Doc-tested examples
- Compile-time safe catalog with
- Panicbot integration: JSON output contract verified for gitbot-fleet
- PA001-PA020 rule mapping for all 20 WeakPointCategory variants
- Bot directives at
.machine_readable/bot_directives/panicbot.scm - Diagnostics self-check for panicbot readiness
- Machine-verifiable readiness tests: 18 tests across CRG grades D/C/B
- Grade D (Alpha): component runs without crashing
- Grade C (Beta): correct output on representative input
- Grade B (RC): edge cases and multi-language support
- Justfile: build, test, readiness, readiness-summary, clean, install, dogfood, lint recipes
- Manifest-first framework detection: Detects frameworks from Cargo.toml, mix.exs, package.json etc. instead of source scanning (eliminates false positives)
- Framework detection false positives: Self-referential matches eliminated by using dependency manifests as primary signal; Rust source scanning removed entirely
- All compiler warnings: 0 warnings in both release and test builds
- Test count: 269 tests (up from ~30), 0 failures
- Diagnostics: Now checks panicbot integration readiness (JSON contract, directives)
- AI.a2ml: Added panicbot, updated SARIF format, corrected metadata
- ECOSYSTEM.scm: Added panicbot with full interface documentation
- STATE.scm: Updated with all session 8/9 capabilities and outcomes
- 47-language support: BEAM (Elixir, Erlang, Gleam), ML (ReScript, OCaml, SML), Lisp (Scheme, Racket), Functional (Haskell, PureScript), Proof (Idris, Lean, Agda), Logic (Prolog, Logtalk, Datalog), Systems (Zig, Ada, Odin, Nim, Pony, D), Config (Nickel, Nix), Scripting (Shell, Julia, Lua), plus 12 nextgen DSLs
- 20 weak point categories: UnsafeCode, PanicPath, CommandInjection, UnsafeDeserialization, DynamicCodeExecution, UnsafeFFI, AtomExhaustion, InsecureProtocol, ExcessivePermissions, PathTraversal, HardcodedSecret, UncheckedError, InfiniteRecursion, UnsafeTypeCoercion, UncheckedAllocation, UnboundedLoop, BlockingIO, RaceCondition, DeadlockPotential, ResourceLeak
- miniKanren-inspired logic engine (
src/kanren/):- Substitution-based unification
- Forward chaining: derives vulnerability facts from rules
- Backward queries: find files by vulnerability category
- Taint analysis: source-to-sink data flow tracking
- Cross-language vulnerability chain detection (FFI/NIF/Port/subprocess)
- Search strategy auto-selection (RiskWeighted, BoundaryFirst, LanguageFamily, BreadthFirst, DepthFirst)
- PanLL event-chain export: DAW-style timeline export for visualisation
- Ambush timeline scheduling: Stressor sequencing with timeline files
- Report views: Summary, accordion, dashboard, matrix views + TUI viewer
- Nickel output format
- Renamed: xray -> assail, XRayReport -> AssailReport, src/xray/ -> src/assail/
- Renamed: panic-attacker binary -> panic-attack
- CI/CD workflows: All GitHub Actions now passing
- Updated MSRV from 1.75.0 to 1.85.0 (required for Cargo.lock v4 format)
- Fixed invalid codeql-action SHA pins
- Fixed TruffleHog configuration
- Fixed EditorConfig indentation violations
- Code quality: Resolved clippy warnings, removed unused imports
- MSRV: Updated from 1.75.0 to 1.85.0
- Production-ready infrastructure: RSR compliance, 11 workflows, docs
- Testing: 21 unit + 3 integration + 3 regression tests
- Configuration: Config file support, EditorConfig, MSRV policy
- Weak points now per-file: Eliminates duplicates (echidna: 271 -> 15)
- File locations always populated: No more
location: None
- FileStatistics, Latin-1 fallback, verbose mode, pattern library, integration tests
Initial proof-of-concept: Assail static analysis, multi-axis stress testing, logic-based bug signature detection.