Skip to content

Commit c879259

Browse files
Merge branch 'main' into dependabot/github_actions/actions-91dc52575a
2 parents cba41e4 + fcea39c commit c879259

65 files changed

Lines changed: 2638 additions & 207 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.hypatia-baseline.json

Lines changed: 11 additions & 101 deletions
Original file line numberDiff line numberDiff line change
@@ -251,12 +251,6 @@
251251
"type": "SD008",
252252
"file": "src/abi/EchidnaABI/AxiomTracker.idr"
253253
},
254-
{
255-
"severity": "critical",
256-
"rule_module": "structural_drift",
257-
"type": "SD008",
258-
"file": "src/abi/EchidnaABI/AxiomTracker.idr"
259-
},
260254
{
261255
"severity": "critical",
262256
"rule_module": "structural_drift",
@@ -1227,13 +1221,13 @@
12271221
"severity": "high",
12281222
"rule_module": "code_safety",
12291223
"type": "unwrap_without_check",
1230-
"file": "src/rust/provers/mizar_ar.rs"
1224+
"file": "src/rust/provers/mizar.rs"
12311225
},
12321226
{
12331227
"severity": "high",
12341228
"rule_module": "code_safety",
12351229
"type": "unwrap_without_check",
1236-
"file": "src/rust/provers/mizar.rs"
1230+
"file": "src/rust/provers/mizar_ar.rs"
12371231
},
12381232
{
12391233
"severity": "high",
@@ -1371,13 +1365,13 @@
13711365
"severity": "high",
13721366
"rule_module": "code_safety",
13731367
"type": "unwrap_without_check",
1374-
"file": "src/rust/provers/uppaal_stratego.rs"
1368+
"file": "src/rust/provers/uppaal.rs"
13751369
},
13761370
{
13771371
"severity": "high",
13781372
"rule_module": "code_safety",
13791373
"type": "unwrap_without_check",
1380-
"file": "src/rust/provers/uppaal.rs"
1374+
"file": "src/rust/provers/uppaal_stratego.rs"
13811375
},
13821376
{
13831377
"severity": "high",
@@ -1553,18 +1547,6 @@
15531547
"type": "deprecated_api",
15541548
"file": "echidna-playground/src/PlaygroundServer.res"
15551549
},
1556-
{
1557-
"severity": "high",
1558-
"rule_module": "migration_rules",
1559-
"type": "deprecated_api",
1560-
"file": "echidna-playground/src/PlaygroundServer.res"
1561-
},
1562-
{
1563-
"severity": "high",
1564-
"rule_module": "migration_rules",
1565-
"type": "deprecated_api",
1566-
"file": "echidna-playground/src/Server.res"
1567-
},
15681550
{
15691551
"severity": "high",
15701552
"rule_module": "migration_rules",
@@ -1577,36 +1559,6 @@
15771559
"type": "deprecated_api",
15781560
"file": "src/provers/clients/LeanTool.res"
15791561
},
1580-
{
1581-
"severity": "high",
1582-
"rule_module": "migration_rules",
1583-
"type": "deprecated_api",
1584-
"file": "src/provers/clients/LeanTool.res"
1585-
},
1586-
{
1587-
"severity": "high",
1588-
"rule_module": "migration_rules",
1589-
"type": "deprecated_api",
1590-
"file": "src/provers/clients/LeanTool.res"
1591-
},
1592-
{
1593-
"severity": "high",
1594-
"rule_module": "migration_rules",
1595-
"type": "deprecated_api",
1596-
"file": "src/provers/clients/Metamath.res"
1597-
},
1598-
{
1599-
"severity": "high",
1600-
"rule_module": "migration_rules",
1601-
"type": "deprecated_api",
1602-
"file": "src/provers/clients/Metamath.res"
1603-
},
1604-
{
1605-
"severity": "high",
1606-
"rule_module": "migration_rules",
1607-
"type": "deprecated_api",
1608-
"file": "src/provers/clients/Metamath.res"
1609-
},
16101562
{
16111563
"severity": "high",
16121564
"rule_module": "migration_rules",
@@ -1619,24 +1571,6 @@
16191571
"type": "deprecated_api",
16201572
"file": "src/provers/clients/SystemOnTptp.res"
16211573
},
1622-
{
1623-
"severity": "high",
1624-
"rule_module": "migration_rules",
1625-
"type": "deprecated_api",
1626-
"file": "src/provers/clients/SystemOnTptp.res"
1627-
},
1628-
{
1629-
"severity": "high",
1630-
"rule_module": "migration_rules",
1631-
"type": "deprecated_api",
1632-
"file": "src/provers/clients/SystemOnTptp.res"
1633-
},
1634-
{
1635-
"severity": "high",
1636-
"rule_module": "migration_rules",
1637-
"type": "deprecated_api",
1638-
"file": "src/provers/clients/Unified.res"
1639-
},
16401574
{
16411575
"severity": "high",
16421576
"rule_module": "migration_rules",
@@ -1655,18 +1589,6 @@
16551589
"type": "deprecated_api",
16561590
"file": "src/provers/clients/Wolfram.res"
16571591
},
1658-
{
1659-
"severity": "high",
1660-
"rule_module": "migration_rules",
1661-
"type": "deprecated_api",
1662-
"file": "src/provers/clients/Wolfram.res"
1663-
},
1664-
{
1665-
"severity": "high",
1666-
"rule_module": "migration_rules",
1667-
"type": "deprecated_api",
1668-
"file": "src/provers/clients/Wolfram.res"
1669-
},
16701592
{
16711593
"severity": "high",
16721594
"rule_module": "migration_rules",
@@ -1697,18 +1619,6 @@
16971619
"type": "deprecated_api",
16981620
"file": "src/provers/types/ProverTest.res"
16991621
},
1700-
{
1701-
"severity": "high",
1702-
"rule_module": "migration_rules",
1703-
"type": "deprecated_api",
1704-
"file": "src/provers/types/ProverTest.res"
1705-
},
1706-
{
1707-
"severity": "high",
1708-
"rule_module": "migration_rules",
1709-
"type": "deprecated_api",
1710-
"file": "src/provers/utils/Http.res"
1711-
},
17121622
{
17131623
"severity": "high",
17141624
"rule_module": "migration_rules",
@@ -1719,7 +1629,7 @@
17191629
"severity": "high",
17201630
"rule_module": "migration_rules",
17211631
"type": "deprecated_api",
1722-
"file": "src/provers/utils/Http.res"
1632+
"file": "src/rescript/src/Main.res"
17231633
},
17241634
{
17251635
"severity": "high",
@@ -1763,12 +1673,6 @@
17631673
"type": "deprecated_api",
17641674
"file": "src/rescript/src/components/TheoremSearch.res"
17651675
},
1766-
{
1767-
"severity": "high",
1768-
"rule_module": "migration_rules",
1769-
"type": "deprecated_api",
1770-
"file": "src/rescript/src/Main.res"
1771-
},
17721676
{
17731677
"severity": "high",
17741678
"rule_module": "migration_rules",
@@ -1781,6 +1685,12 @@
17811685
"type": "download_then_run",
17821686
"file": "mirror.yml"
17831687
},
1688+
{
1689+
"severity": "high",
1690+
"rule_module": "workflow_audit",
1691+
"type": "missing_workflow",
1692+
"file": "quality.yml"
1693+
},
17841694
{
17851695
"severity": "high",
17861696
"rule_module": "workflow_audit",

.machine_readable/6a2/AGENTIC.a2ml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,7 @@ can-access-training-data = true
189189

190190
[agent-constraints]
191191
never-use = [
192-
"believe_me, unsafeCoerce, sorry, assert_total, Admitted (Idris2 banned patterns)",
192+
"believe-me, unsafeCoerce, sorry, assert_total, Admitted (Idris2 banned patterns)",
193193
"TypeScript, Python, Go, zig, ATS2 (banned languages)",
194194
"hardcoded secrets or credentials",
195195
"AGPL license (use MPL-2.0)",

.machine_readable/6a2/NEUROSYM.a2ml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -191,11 +191,11 @@ discharge-requirements = [
191191
failure-action = "rollback-to-cosine (GNN model undershoots quality threshold; fall back to symbolic scoring)"
192192

193193
[proof-obligations.abi-integrity]
194-
name = "Idris2 ABI proofs must contain zero believe_me or unsafeCoerce"
194+
name = "Idris2 ABI proofs must contain zero believe-me or unsafeCoerce"
195195
claim-type = "verified (trust kernel)"
196196
verification-method = "panic-attack scan (code-only grep, not comments)"
197197
discharge-requirements = [
198-
"no believe_me in src/abi/*.idr",
198+
"no believe-me in src/abi/*.idr",
199199
"no unsafeCoerce in src/idris/*.idr",
200200
"no Admitted except designated Parameter-axiom stubs"
201201
]
@@ -241,5 +241,5 @@ scan-enabled = true
241241
scan-depth = "standard"
242242
report-format = "JSON (AssailReport)"
243243
proof-obligations-check = "panic-attack (code-only grep; no comments)"
244-
banned-patterns = ["believe_me", "unsafeCoerce", "Admitted", "sorry"]
244+
banned-patterns = ["believe-me", "unsafeCoerce", "Admitted", "sorry"]
245245
neurosym-rules-file = "standards-repo/neurosym-a2ml/hypatia-ruleset.json"

.machine_readable/6a2/STATE.a2ml

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
# SPDX-License-Identifier: MPL-2.0
22
# STATE.a2ml — Project state checkpoint
3-
# Converted from STATE.scm on 2026-03-15
3+
4+
[manifest]
5+
version = "1.1"
6+
project = "echidna"
7+
type = "state-file"
48

59
[metadata]
610
project = "echidna"
@@ -941,7 +945,7 @@ commits = [
941945
"echidna 4241abf fix(provers): bounded_read_proof_file helper + 25 wrapper migrations",
942946
"echidna 1b613c2 fix(rest+llm): /api/v1/consult e2e wiring — env-var port + cartridge name",
943947
]
944-
ipkg-detector-fix = "panic-attack analyze_idris now short-circuits on file_path.ends_with('.ipkg') — manifests share idr/ipkg routing but contain string-literal banned-pattern names ('zero believe_me' in package brief) that tripped substring detection. Verified: src/abi rescan drops to 0 ProofDrift findings."
948+
ipkg-detector-fix = "panic-attack analyze_idris now short-circuits on file_path.ends_with('.ipkg') — manifests share idr/ipkg routing but contain string-literal banned-pattern names ('zero believe-me' in package brief) that tripped substring detection. Verified: src/abi rescan drops to 0 ProofDrift findings."
945949
chapel-detector-fix = "panic-attack Language enum + extension map gain Chapel/.chpl. Routes through analyze_generic fallback (Chapel-specific patterns deferred — no Chapel-original code in echidna yet to dogfood). Verified: src/chapel rescan produces 6-entry AssailReport instead of erroring."
946950
prover-bounded-read = "src/rust/provers/io.rs ships bounded_read_proof_file with 64 MiB cap via AsyncReadExt::take(N+1) (TOCTOU-safe, errors on overflow). 25 prover backends migrated from bare tokio::fs::read_to_string. Re-scan confirms UnboundedAllocation findings 26 → 1 (only solver_integrity.rs TOML manifest read remains, separate threat shape — operator-controlled path, not a prover wrapper). 47 unflagged backends use the same pattern but already pass detector heuristic via 'limit' word presence; deferred for an estate-wide pass to avoid scope creep."
947951
consult-e2e-result = "Verified end-to-end up to BoJ boundary. Run echidna-rest under ECHIDNA_REST_ADDR=127.0.0.1:8765, BoJ already running on localhost:7700 in skeleton mode (cartridges_loaded=106 incl. echidna-llm-mcp). Curl POST /api/v1/consult returns: empty question → 400; valid question → 502 with 'BoJ consult returned 500 Internal Server Error' (BoJ skeleton mode self-declares invocation as placeholder). Echidna handler chain fully wired: validate → check_health → consult → POST → translate. Discovered + fixed cartridge URL bug (echidna-llm → echidna-llm-mcp) on the way."

.machine_readable/CLADE.a2ml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
# SPDX-License-Identifier: MPL-2.0
22
# Clade declaration — part of the gv-clade-index registry
3-
# See: https://github.com/hyperpolymath/gv-clade-index
3+
4+
[manifest]
5+
version = "1.1"
6+
project = "echidna"
7+
type = "clade-declaration"
48

59
[identity]
610
uuid = "6bab4e6b-e028-5e31-a5d8-d46c9359669b"

.machine_readable/ER.a2ml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@ prover-coverage = [
175175
"Agda: postulate, {!!}, --type-in-type",
176176
"Isabelle: sorry, oops",
177177
"HOL4: mk_thm (REJECT)",
178-
"Idris2: believe_me, assert_total, assert_smaller, unsafePerformIO, really_believe_me, prim__crash, unsafeCoerce",
178+
"Idris2: believe-me, assert_total, assert_smaller, unsafe-perform-io, really_believe-me, prim__crash, unsafeCoerce",
179179
"F*: admit, assume",
180180
]
181181
special-case = "scaffold-sorry lines carrying ECHIDNA_SCAFFOLD_SORRY marker are exempted from flagging (axiom:312-318)"

.machine_readable/ROADMAP.a2ml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ Core invariants across all stages:
2222
- Trust hardening via portfolio solvers, certificate checking, and axiom tracking
2323
- Agentic gating (entropy budgets, explicit intent, decision recording)
2424
- Neurosymbolic semantics (GNN-guided search, confidence scoring, mutation testing)
25-
- Formal verification (Idris2 ABI proofs, zero believe_me)
25+
- Formal verification (Idris2 ABI proofs, zero believe-me)
2626
- Modularity (echidna-core as service; echidnabot as autonomous consumer; cartridges for external access)
2727
"""
2828

@@ -419,7 +419,7 @@ stage-1-requirements = [
419419
"✓ 3GB corpus",
420420
"✓ 1.43M vocab",
421421
"✓ Zig FFI",
422-
"✓ Idris2 ABI (zero believe_me)",
422+
"✓ Idris2 ABI (zero believe-me)",
423423
"✓ Trust pipeline (portfolio, certificates, axioms, confidence, mutation)",
424424
"✓ REST/gRPC/GraphQL APIs",
425425
"✓ A2ML conformance (AGENTIC, NEUROSYM)",

.machine_readable/agent_instructions/methodology.a2ml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ deepen-not-broaden = true
7373
rules = [
7474
# Customise per project. Examples:
7575
# "Idris2 only for formal verification — no Lean4, Coq, Agda",
76-
# "believe_me count must remain zero",
76+
# "believe-me count must remain zero",
7777
# "FFI architecture: Idris2 → RefC → Zig → C ABI (no shortcuts)",
7878
]
7979

.machine_readable/ai/AI.a2ml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,6 @@ allow-silent-skip = false
1919
require-rerun-after-fix = true
2020

2121
[forbidden-patterns]
22-
idris2 = ["believe_me", "assert_total", "assert_smaller", "unsafePerformIO"]
22+
idris2 = ["believe-me", "assert_total", "assert_smaller", "unsafe-perform-io"]
2323
rust-unsafe = "require SAFETY comment"
24-
haskell = ["unsafeCoerce", "unsafePerformIO"]
24+
haskell = ["unsafeCoerce", "unsafe-perform-io"]

.machine_readable/bot_directives/echidnabot.a2ml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,11 @@
1010
# 3. echidnabot's `repositories.mode` DB column
1111
# 4. BotMode::default() = Verifier
1212

13+
[manifest]
14+
version = "1.1"
15+
project = "echidnabot"
16+
type = "bot-directive"
17+
1318
[metadata]
1419
version = "1.0.0"
1520
last-updated = "2026-04-25"

0 commit comments

Comments
 (0)