Skip to content

Commit 056534a

Browse files
hyperpolymathclaude
andcommitted
docs(dogfood): first MCP-routed entry — surfaces REST API gap
Actually invoked boj_health, boj_cartridges, boj_research through the MCP bridge. Finding: cartridge enumeration works offline, but the REST path is broken (no listener on the port that boj_health/boj_research expect). Unit file openly admits REST server is "pending Elixir rewrite" and still runs /usr/bin/node (banned estate-wide). This is the kind of evidence the dogfood log exists for: routing real work through BoJ and writing down what worked vs. what didn't. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent 55ed590 commit 056534a

1 file changed

Lines changed: 54 additions & 0 deletions

File tree

docs/practice/DOGFOOD-LOG.adoc

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,60 @@ Remediation::
118118

119119
Witness:: Jonathan D.A. Jewell (via AI-assisted session, Claude Opus 4.7).
120120

121+
=== 2026-04-18 — Second entry: first MCP-routed query surfaces REST-gap
122+
123+
Component:: MCP bridge (`mcp-bridge/main.js`), `boj_health` tool, `boj_cartridges`
124+
tool, `boj_research` tool, systemd unit `boj-server.service`.
125+
126+
Context:: Follow-up to the inaugural entry, which noted that no BoJ cartridge
127+
had actually been exercised during the audit. This entry deliberately
128+
routes work through the MCP bridge to begin accumulating real
129+
runtime evidence:
130+
(1) `boj_health` called directly from the AI assistant.
131+
(2) `boj_cartridges` called to enumerate the matrix.
132+
(3) `boj_research` called with operation=search to surface any
133+
cartridge-routed lookups.
134+
135+
Outcome::
136+
* `boj_cartridges` returned a 23-item list **in offline mode** — correct
137+
degradation behaviour (the MCP bridge knows the cartridge names statically
138+
and does not need the REST API to enumerate them).
139+
* Bridge answered both `boj_health` and `boj_cartridges` invocations cleanly
140+
under stdio transport; no crashes, no timeouts.
141+
* `systemctl --user start boj-server` succeeds repeatedly (six recent starts
142+
logged between Apr 15 and Apr 18, all `status=0/SUCCESS`).
143+
144+
Failures::
145+
* **REST API unreachable.** `boj_health` returns
146+
`{"status":"offline","message":"BoJ REST API not reachable. Start the server
147+
with: systemctl --user start boj-server"}` even immediately after starting
148+
the unit. The hint is misleading: the unit `ExecStart` runs
149+
`/usr/bin/node mcp-bridge/main.js` (an stdio MCP proxy that exits when no
150+
client is attached — observed CPU time ~500 ms per invocation). No process
151+
is listening on the port the REST-facing tools expect.
152+
* **`boj_research` fails with a same-message error** on any operation, because
153+
the research cartridge goes through the REST path, not the stdio path, and
154+
the REST path has no server behind it.
155+
* **Language-policy drift in the unit file.** The `ExecStart` line uses
156+
`/usr/bin/node` — Node.js is banned estate-wide (CLAUDE.md: "Node.js →
157+
Deno"). The inline comment in the unit file acknowledges this: "REST server
158+
pending Elixir rewrite. Cartridges run as standalone MCP servers via Claude
159+
Code settings until BoJ REST is restored."
160+
161+
Remediation::
162+
* **Architectural, not a quick fix.** The REST server is explicitly on the
163+
backlog pending Elixir port; this log entry is the first concrete
164+
user-facing consequence recorded. Two tracks follow:
165+
(a) Fix the `boj_health` message — if the design is stdio-only today, the
166+
hint should stop pointing at a nonexistent REST server.
167+
(b) Land the Elixir port so `boj_research`, `boj_codeseeker`, and the other
168+
REST-backed tools work.
169+
* **Node → Deno.** The user-unit `ExecStart` should move to Deno when the MCP
170+
bridge is rewritten; tracked implicitly under the Elixir-port task.
171+
172+
Witness:: Jonathan D.A. Jewell (via AI-assisted session, Claude Opus 4.7,
173+
MCP stdio transport).
174+
121175
== Maintenance
122176

123177
Each calendar month, the current maintainer SHOULD:

0 commit comments

Comments
 (0)