Skip to content

Commit c9dd706

Browse files
committed
docs: retire the honesty debt; state the goal; update the pipeline reality table
- README: 'Production Ready' and 'Idris-inside' badges removed/replaced with the true statement (Idris2 contract spec + Elixir runtime boundary); new Goal section (fluid for the sender, shaped for the receiver, intent- preserving, research mode, foundational sorting); the three tools and the interactive loop documented. - TOPOLOGY.md / STATE.a2ml: honest per-component statuses (no universal 100%). - ROADMAP.adoc: real history and forward path. - EXPLAINME.adoc: the engine is wrapped by bug-filing-mcp; it is not itself a cartridge, and feedback-mcp is unrelated. - AUTONOMOUS-BUG-PIPELINE.adoc: C1 redrawn engine-side (decision recorded); reality table updated — C1/C2 BUILT, C3 built as contract-spec + runtime boundary, Deduplicator wired, NetworkVerifier optionally wired; D0 RESOLVED; honesty-debt items marked retired. Part of hyperpolymath/boj-server#274. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017LDhR8gtnittEWSafunnrq
1 parent aaca6cc commit c9dd706

6 files changed

Lines changed: 441 additions & 241 deletions

File tree

.machine_readable/6a2/STATE.a2ml

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,34 @@
11
# SPDX-License-Identifier: MPL-2.0
22
# STATE.a2ml — Project state checkpoint
33
# Converted from STATE.scm on 2026-03-15
4-
# Updated 2026-04-09
4+
# Updated 2026-07-09
55

66
[metadata]
77
project = "feedback-o-tron"
8-
version = "1.0.0"
9-
last-updated = "2026-04-09"
10-
status = "production"
8+
version = "1.2.0-dev"
9+
last-updated = "2026-07-09"
10+
status = "active-development"
1111

1212
[project-context]
1313
name = "feedback-o-tron"
14-
completion-percentage = 95
15-
phase = "Production"
14+
completion-percentage = 75
15+
phase = "Synthesis Engine + honest reconciliation"
1616

1717
[components]
1818
cli = "100%"
19-
mcp-server = "100%"
19+
mcp-server = "100% (research_feedback, synthesize_feedback, submit_feedback, migration_observe)"
20+
http-intake = "done (Bandit :7722, localhost-only, off by default; boj bug-filing-mcp wire)"
21+
synthesis-engine = "done (this PR: TemplateFetcher, TemplateCache, IntentClassifier, Hydrator, Research, Synthesizer, FormValidator, FormRenderer, TextSimilarity)"
2022
channels-github = "100%"
21-
channels-gitlab = "100%"
22-
channels-bitbucket = "100%"
23-
channels-codeberg = "100%"
23+
channels-gitlab = "90%"
24+
channels-bitbucket = "90%"
25+
channels-codeberg = "90%"
2426
channels-bugzilla = "100%"
2527
channels-email = "80%"
26-
deduplication = "100%"
28+
deduplication = "wired (record/3 called on successful submission; check/1 consulted pre-dispatch and by Research)"
2729
audit-logging = "100%"
28-
network-verifier = "90%"
30+
network-verifier = "70% (real probing; opt-in via Hydrator network_probe; BGP/RPKI partial)"
2931
rate-limiter = "100%"
3032
retry-backoff = "100%"
31-
zig-ffi = "95%"
32-
idris2-proofs = "80%"
33+
zig-ffi = "stub"
34+
idris2 = "contract spec only (Contract.idr), no FFI enforcement"

EXPLAINME.adoc

Lines changed: 25 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -11,31 +11,31 @@ ____
1111
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).
1212
____
1313

14-
This is achieved through six submitters (GitHub, GitLab, Bitbucket, Codeberg, Bugzilla, Email), fuzzy deduplication (Levenshtein distance), and formal verification of ABI boundaries via Idris2.
14+
This is achieved through six submitters (GitHub, GitLab, Bitbucket, Codeberg, Bugzilla, Email), fuzzy deduplication (Levenshtein distance), and an Idris2-verified contract spec (`src/abi/FeedbackOTron/Contract.idr`) mirrored at runtime by the Elixir validation boundary (`FormValidator`). Full FFI enforcement (the Zig bridge) is not built — the contract is a proof-carrying spec, not a boundary the payload physically crosses.
1515

1616
== Two Verifiable Claims from How-It-Works
1717

1818
=== Claim 1: Bugzilla REST API Supports Product/Component/Version Targeting
1919

20-
**Location**: `/var/mnt/eclipse/repos/feedback-o-tron/elixir-mcp/lib/feedback_a_tron/submitter.ex` (Elixir submitter module)
20+
**Location**: `elixir-mcp/lib/feedback_a_tron/submitter.ex` and `elixir-mcp/lib/feedback_a_tron/channels/bugzilla.ex`
2121

2222
**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.
2323

2424
**Caveat**: Component validation is API-based (not local); if the Bugzilla instance changes its components, validation may fail silently.
2525

2626
=== Claim 2: Deduplicator Prevents Duplicate Submissions Using Fuzzy Matching
2727

28-
**Location**: `/var/mnt/eclipse/repos/feedback-o-tron/elixir-mcp/lib/feedback_a_tron/deduplicator.ex` (Elixir deduplication)
28+
**Location**: `elixir-mcp/lib/feedback_a_tron/deduplicator.ex` (Elixir deduplication)
2929

30-
**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+
**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 `elixir-mcp/test/deduplicator_test.exs` which verifies: identical reports are caught, reports differing by <10% edit distance are flagged as similar, and unrelated reports pass through. As of the Synthesis Engine branch the dedup is *wired end-to-end*: `Submitter` calls `Deduplicator.record/3` after each successful submission and `check/1` before dispatch, and `Synthesis.Research` consults `check/1` during research mode.
3131

3232
**Caveat**: Fuzzy matching threshold (10%) is empirical, not formally justified. May have false positives/negatives.
3333

3434
== Dogfooded Across The Account
3535

36-
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+
Follows the hyperpolymath ABI/FFI repo layout (Idris2 spec + Zig bridge). To be precise about what that means here: the Idris2 side is a real, proof-carrying contract spec (`Contract.idr`), the Elixir `FormValidator` enforces the same rules at runtime, and the Zig FFI bridge is a stub — the Submitter does **not** call Idris2-compiled code or `proven` types at any FFI boundary.
3737

38-
Also integrates with boj-server (cartridge system) — feedback-o-tron is a cartridge itself.
38+
Also integrates with boj-server (cartridge system) — but feedback-o-tron is **not** a cartridge itself. The engine is wrapped by the `bug-filing-mcp` cartridge in `boj-server-cartridges`, which forwards requests over the engine's localhost HTTP intake (`127.0.0.1:7722`). The similarly named `feedback-mcp` cartridge is an unrelated sentiment counter that merely shares the name (see `docs/AUTONOMOUS-BUG-PIPELINE.adoc` §5).
3939

4040
== File Map
4141

@@ -44,28 +44,31 @@ Also integrates with boj-server (cartridge system) — feedback-o-tron is a cart
4444
| Path | What's There
4545

4646
| `elixir-mcp/lib/feedback_a_tron/cli.ex` | CLI entry point: escript with submit, --mcp-server, --version, --help commands
47-
| `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/submitter.ex` | Submitter module: dispatch to platform channels; validates `template_data` against the fetched form before rendering/dispatch
48+
| `elixir-mcp/lib/feedback_a_tron/channels/` | Platform channel adapters (GitHub, GitLab, Bitbucket, Codeberg, Bugzilla, Email, and more)
4849
| `elixir-mcp/lib/feedback_a_tron/deduplicator.ex` | Fuzzy deduplication: SHA-256, Levenshtein distance, substring matching
49-
| `elixir-mcp/lib/feedback_a_tron/credential_loader.ex` | Environment variables + CLI config auto-detection (gh, glab)
50+
| `elixir-mcp/lib/feedback_a_tron/credentials.ex` | Environment variables + CLI config auto-detection (gh, glab)
5051
| `elixir-mcp/lib/feedback_a_tron/audit_log.ex` | JSON-lines audit trail; records all submissions (success, failure, dry-run)
51-
| `elixir-mcp/lib/feedback_a_tron/network_verifier.ex` | Pre/post-submission checks: latency, DNS, TLS, DNSSEC, BGP/RPKI
52-
| `elixir-mcp/src/abi/` | Idris2 ABI definitions for Submitter interface (formal spec, generates C headers)
53-
| `elixir-mcp/src/abi/Types.idr` | Idris2 type definitions with dependent type proofs for memory layout
54-
| `elixir-mcp/src/abi/Foreign.idr` | Idris2 FFI declarations for C ABI boundary
55-
| `tests/deduplication_test.exs` | Deduplicator tests: exact, fuzzy, substring matching
56-
| `tests/submitter_test.exs` | Submitter tests for each platform (mocked HTTP)
57-
| `tests/network_verification_test.exs` | Network verifier tests (DNS, TLS, DNSSEC)
58-
| `tests/integration_test.exs` | End-to-end tests with real Bugzilla (dry-run mode, Bug #2437503/#2437504 validated)
52+
| `elixir-mcp/lib/feedback_a_tron/network_verifier.ex` | Network checks: latency, DNS, TLS, DNSSEC, BGP/RPKI (opt-in via Hydrator `network_probe`)
53+
| `elixir-mcp/lib/feedback_a_tron/synthesis/` | Synthesis Engine: TemplateFetcher/Cache, IntentClassifier, Hydrator, Research, Synthesizer, FormValidator, FormRenderer
54+
| `elixir-mcp/lib/feedback_a_tron/http_intake/router.ex` | Optional localhost HTTP intake (`:7722`) — the boj `bug-filing-mcp` cartridge wire
55+
| `src/abi/FeedbackOTron/Contract.idr` | Idris2-verified contract spec for form validation (total, proof-carrying; mirrored by FormValidator)
56+
| `ffi/zig/src/main.zig` | Zig FFI bridge — currently a stub; no FFI enforcement
57+
| `elixir-mcp/test/deduplicator_test.exs` | Deduplicator tests: exact, fuzzy, substring matching
58+
| `elixir-mcp/test/submitter_test.exs` | Submitter tests for each platform (mocked HTTP)
59+
| `elixir-mcp/test/network_verifier_test.exs` | Network verifier tests (DNS, TLS, DNSSEC)
60+
| `elixir-mcp/test/synthesis/` | Synthesis Engine tests (classifier, hydrator, research, synthesizer, validator, renderer, fetcher)
5961
|===
6062

6163
== Testing Critical Paths
6264

63-
* **Bugzilla REST API**: `tests/submitter_test.exs` — mock Bugzilla API, verify product/component/version handling
64-
* **Deduplication**: `tests/deduplication_test.exs` — test hash, Levenshtein, and fuzzy matching with edge cases
65-
* **Credential loading**: `tests/credential_loader_test.exs` — verify env vars, gh, glab configs are loaded in priority order
66-
* **Audit logging**: `tests/audit_log_test.exs` — verify all submissions recorded, JSON-lines format valid
67-
* **Integration**: `tests/integration_test.exs` — real Bugzilla instance (dry-run), verify Bug #2437503/#2437504 creation flow
68-
* **Network verification**: `tests/network_verification_test.exs` — mock DNS/TLS, verify latency, DNSSEC, route checks
65+
* **Bugzilla REST API**: `elixir-mcp/test/submitter_test.exs` — mock Bugzilla API, verify product/component/version handling
66+
* **Deduplication**: `elixir-mcp/test/deduplicator_test.exs` — test hash, Levenshtein, and fuzzy matching with edge cases
67+
* **Credential loading**: `elixir-mcp/test/credentials_test.exs` — verify env vars, gh, glab configs are loaded in priority order
68+
* **Audit logging**: `elixir-mcp/test/audit_log_test.exs` — verify all submissions recorded, JSON-lines format valid
69+
* **Integration**: `elixir-mcp/test/integration/` and `elixir-mcp/test/e2e_test.exs` — end-to-end flows in dry-run mode
70+
* **Network verification**: `elixir-mcp/test/network_verifier_test.exs` — mock DNS/TLS, verify latency, DNSSEC, route checks
71+
* **Synthesis Engine**: `elixir-mcp/test/synthesis/` — classifier gate (salvage/reject/open-questions), hydration, research, form validation/rendering
6972

7073
== Questions?
7174

0 commit comments

Comments
 (0)