Context
Surfaced by PR #150 (fix(aspect+e2e)). Once the Elixir-install fix in #150 got the E2E server actually starting (it had been dying at preflight on main since 2026-05-20), 17 feature-level failures became visible. 3 of those are MCP failures fixed in #150 (deno needed --allow-read). The remaining 14 are a structural mismatch between tests/e2e_full.sh and elixir/lib/boj_rest/router.ex.
The mismatch
router.ex exposes 6 routes:
| Method |
Path |
| GET |
/.well-known/boj-node-pubkey |
| GET |
/health |
| GET |
/menu |
| GET |
/cartridges |
| GET |
/cartridge/:name |
| POST |
/cartridge/:name/invoke |
| POST |
/cartridge/:name/sse |
The test calls:
| Test (file:line) |
Calls |
Exists? |
| step 6a |
POST /cartridges/feedback-mcp/load |
❌ no /load route |
| step 6b–6h |
POST /cartridges/feedback-mcp/invoke |
❌ plural /cartridges/... |
| step 7 |
POST /order |
❌ no /order route |
Both routes that exist plurally on the test side (/cartridges/.../invoke) are singular in the router (/cartridge/:name/invoke), and there's no /load step at all in the server (cartridges auto-load via BojRest.Catalog).
The 14 failures
feedback-mcp load
feedback register (open_channel)
feedback submit (positive)
feedback submit (negative)
feedback summary
feedback export
feedback status
feedback list_channels
order ticket returns result
- … and 5 related variants
Two ways to close
- (A) Update tests to use existing routes — drop the
/load step (auto-loaded), singularise /cartridges/.../invoke → /cartridge/:name/invoke, remove or replace the /order test. Smaller diff; lower risk; preserves current server API.
- (B) Add the missing routes —
POST /cartridges/:name/load (no-op or warmup), POST /cartridges/:name/invoke (alias), POST /order (whatever order semantics the test exercises). Bigger diff; needs an ADR; preserves the test as the spec.
I'd recommend (A): the router is the source of truth; the test was probably ported from an earlier API that drifted.
Related
Context
Surfaced by PR #150 (
fix(aspect+e2e)). Once the Elixir-install fix in #150 got the E2E server actually starting (it had been dying at preflight on main since 2026-05-20), 17 feature-level failures became visible. 3 of those are MCP failures fixed in #150 (deno needed--allow-read). The remaining 14 are a structural mismatch betweentests/e2e_full.shandelixir/lib/boj_rest/router.ex.The mismatch
router.exexposes 6 routes:/.well-known/boj-node-pubkey/health/menu/cartridges/cartridge/:name/cartridge/:name/invoke/cartridge/:name/sseThe test calls:
POST /cartridges/feedback-mcp/load/loadroutePOST /cartridges/feedback-mcp/invoke/cartridges/...POST /order/orderrouteBoth routes that exist plurally on the test side (
/cartridges/.../invoke) are singular in the router (/cartridge/:name/invoke), and there's no/loadstep at all in the server (cartridges auto-load viaBojRest.Catalog).The 14 failures
feedback-mcp loadfeedback register (open_channel)feedback submit (positive)feedback submit (negative)feedback summaryfeedback exportfeedback statusfeedback list_channelsorder ticket returns resultTwo ways to close
/loadstep (auto-loaded), singularise/cartridges/.../invoke→/cartridge/:name/invoke, remove or replace the/ordertest. Smaller diff; lower risk; preserves current server API.POST /cartridges/:name/load(no-op or warmup),POST /cartridges/:name/invoke(alias),POST /order(whatever order semantics the test exercises). Bigger diff; needs an ADR; preserves the test as the spec.I'd recommend (A): the router is the source of truth; the test was probably ported from an earlier API that drifted.
Related
command -v mixcheck before reaching any feature test.