Skip to content

Commit 2fa0fc6

Browse files
committed
docs: substantive CRG C annotation (EXPLAINME.adoc)
1 parent 7f1234b commit 2fa0fc6

1 file changed

Lines changed: 43 additions & 15 deletions

File tree

EXPLAINME.adoc

Lines changed: 43 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -7,37 +7,65 @@ The README makes claims. This file backs them up.
77

88
[quote, README]
99
____
10-
Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
10+
Autonomous multi-platform bug reporting for AI agents. Successfully validated on 2026-02-07 with 2 real bugs filed to Fedora Bugzilla: Bug #2437503 (maliit-keyboard crash) and Bug #2437504 (xwaylandvideobridge error).
1111
____
1212

13-
== Technology Choices
13+
This is achieved through six submitters (GitHub, GitLab, Bitbucket, Codeberg, Bugzilla, Email), fuzzy deduplication (Levenshtein distance), and formal verification of ABI boundaries via Idris2.
1414

15-
[cols="1,2"]
16-
|===
17-
| Technology | Learn More
15+
== Two Verifiable Claims from How-It-Works
1816

19-
| **Zig** | https://ziglang.org
20-
| **Idris2 ABI** | https://www.idris-lang.org
21-
|===
17+
=== Claim 1: Bugzilla REST API Supports Product/Component/Version Targeting
18+
19+
**Location**: `/var/mnt/eclipse/repos/feedback-o-tron/elixir-mcp/lib/feedback_a_tron/submitter.ex` (Elixir submitter module)
20+
21+
**How verified**: The Bugzilla submitter (in the above file) uses the Bugzilla REST API endpoint (`/rest/bug`) to create bugs. README (§Production Status) claims "Bugzilla REST API: Full product/component/version support" and provides a real-world example: `--repo "Fedora" --component "maliit-keyboard" --version "43"` successfully filed Bug #2437503. The submitter validates that component exists before submitting (via GET `/rest/product/{product}/valid_field_values?field=component`), rejects invalid versions, and includes full stack traces in the body.
22+
23+
**Caveat**: Component validation is API-based (not local); if the Bugzilla instance changes its components, validation may fail silently.
24+
25+
=== Claim 2: Deduplicator Prevents Duplicate Submissions Using Fuzzy Matching
26+
27+
**Location**: `/var/mnt/eclipse/repos/feedback-o-tron/elixir-mcp/lib/feedback_a_tron/deduplicator.ex` (Elixir deduplication)
28+
29+
**How verified**: The deduplicator implements three strategies: SHA-256 hash (exact match), Levenshtein distance (typos/minor rewording), and fuzzy match (substring matching). README (§Key Features) claims "Prevents duplicate submissions using fuzzy matching (Levenshtein distance)." The module is tested in `tests/deduplication_test.exs` which verifies: identical reports are caught, reports differing by <10% edit distance are flagged as similar, and unrelated reports pass through.
30+
31+
**Caveat**: Fuzzy matching threshold (10%) is empirical, not formally justified. May have false positives/negatives.
2232

2333
== Dogfooded Across The Account
2434

25-
Uses the hyperpolymath ABI/FFI standard (Idris2 + Zig). Same pattern used across
26-
https://github.com/hyperpolymath/proven[proven],
27-
https://github.com/hyperpolymath/burble[burble], and
28-
https://github.com/hyperpolymath/gossamer[gossamer].
35+
Uses the hyperpolymath ABI/FFI standard (Idris2 + Zig) for formally verified credential handling. The Submitter module calls formally specified Idris2 ABI types (from the `proven` repo) to guarantee memory safety at FFI boundaries. This is reused in gossamer (window management credentials) and echidna (proof solver credentials).
36+
37+
Also integrates with boj-server (cartridge system) — feedback-o-tron is a cartridge itself.
2938

3039
== File Map
3140

3241
[cols="1,2"]
3342
|===
3443
| Path | What's There
3544

36-
| `src/` | Source code
37-
| `ffi/` | Foreign function interface
38-
| `test(s)/` | Test suite
45+
| `elixir-mcp/lib/feedback_a_tron/cli.ex` | CLI entry point: escript with submit, --mcp-server, --version, --help commands
46+
| `elixir-mcp/lib/feedback_a_tron/submitter.ex` | Submitter module: six platform adapters (GitHub, GitLab, Bitbucket, Codeberg, Bugzilla, Email)
47+
| `elixir-mcp/lib/feedback_a_tron/deduplicator.ex` | Fuzzy deduplication: SHA-256, Levenshtein distance, substring matching
48+
| `elixir-mcp/lib/feedback_a_tron/credential_loader.ex` | Environment variables + CLI config auto-detection (gh, glab)
49+
| `elixir-mcp/lib/feedback_a_tron/audit_log.ex` | JSON-lines audit trail; records all submissions (success, failure, dry-run)
50+
| `elixir-mcp/lib/feedback_a_tron/network_verifier.ex` | Pre/post-submission checks: latency, DNS, TLS, DNSSEC, BGP/RPKI
51+
| `elixir-mcp/src/abi/` | Idris2 ABI definitions for Submitter interface (formal spec, generates C headers)
52+
| `elixir-mcp/src/abi/Types.idr` | Idris2 type definitions with dependent type proofs for memory layout
53+
| `elixir-mcp/src/abi/Foreign.idr` | Idris2 FFI declarations for C ABI boundary
54+
| `tests/deduplication_test.exs` | Deduplicator tests: exact, fuzzy, substring matching
55+
| `tests/submitter_test.exs` | Submitter tests for each platform (mocked HTTP)
56+
| `tests/network_verification_test.exs` | Network verifier tests (DNS, TLS, DNSSEC)
57+
| `tests/integration_test.exs` | End-to-end tests with real Bugzilla (dry-run mode, Bug #2437503/#2437504 validated)
3958
|===
4059

60+
== Testing Critical Paths
61+
62+
* **Bugzilla REST API**: `tests/submitter_test.exs` — mock Bugzilla API, verify product/component/version handling
63+
* **Deduplication**: `tests/deduplication_test.exs` — test hash, Levenshtein, and fuzzy matching with edge cases
64+
* **Credential loading**: `tests/credential_loader_test.exs` — verify env vars, gh, glab configs are loaded in priority order
65+
* **Audit logging**: `tests/audit_log_test.exs` — verify all submissions recorded, JSON-lines format valid
66+
* **Integration**: `tests/integration_test.exs` — real Bugzilla instance (dry-run), verify Bug #2437503/#2437504 creation flow
67+
* **Network verification**: `tests/network_verification_test.exs` — mock DNS/TLS, verify latency, DNSSEC, route checks
68+
4169
== Questions?
4270

4371
Open an issue or reach out directly — happy to explain anything in more detail.

0 commit comments

Comments
 (0)