Skip to content

docs: sync version + cartridge-count claims, mark gRPC/GraphQL planned#40

Merged
hyperpolymath merged 1 commit intomainfrom
spec-drift-2026-04-30
Apr 30, 2026
Merged

docs: sync version + cartridge-count claims, mark gRPC/GraphQL planned#40
hyperpolymath merged 1 commit intomainfrom
spec-drift-2026-04-30

Conversation

@hyperpolymath
Copy link
Copy Markdown
Owner

Summary

Sync of the canonical version + cartridge-count claims across the repo, plus an honest disclosure that the gRPC and GraphQL ports advertised in QUICKSTART-USER.adoc aren't implemented yet (only REST :7700 is live in elixir/lib/boj_rest/). 15 files, +37/-30. Pure docs/metadata change — no code or build behaviour affected.

Drift reconciled

Surface Before After
Justfile version := 0.3.1 0.4.6
openapi.yaml info.version 0.4.0 0.4.6
docs/specification/openapi.yaml version 0.3.0 0.4.6
smithery.yaml version 0.4.0 0.4.6
gemini-extension.json version 0.4.0 0.4.6
stapeln.toml version 0.3.1 0.4.6
README.md two count claims 50+ / 100 115 / 115
README.adoc two count claims 106+ / 100 115 / 115
QUICKSTART-USER.adoc two count claims 112 / 112 115 / 115
openapi.yaml description 106 ... cartridges 115 ... cartridges
ai-plugin.json two descriptions 55 ... cartridges + V-lang adapter 115 ... cartridges + Deno/JS adapter
smithery.yaml description + boj_menu 53 ... cartridges 115 ... cartridges
docs/glama/CAPABILITIES.md **106 Cartridges** **115 Cartridges**
docs/glama/RESOURCES.md example supports 106 cartridges supports 115 cartridges
llm-warmup-dev.md (3 occurrences) 112 cartridge… 115 cartridge…
llm-warmup-user.md file map row 112 cartridge directories 115 cartridge directories
EXPLAINME.adoc (4 occurrences) 112 cartridge… 115 cartridge…

package.json was already at 0.4.6 and is treated as the authoritative version. 115 is the actual count of cartridges/*/ directories on disk.

Honest disclosure: gRPC + GraphQL not implemented

QUICKSTART-USER.adoc's Key Ports table previously advertised :7701 gRPC and :7702 GraphQL alongside :7700 REST without qualification. Verified against the current tree:

  • elixir/lib/boj_rest/ contains only application/catalog/credential_decryptor/invoker/js_invoker/js_worker/js_worker_pool/node_key/router/trust_policy.ex. Zero matches for grpc, graphql, or absinthe.
  • No .proto files anywhere in the repo (gh search code repo:hyperpolymath/boj-server extension:proto → 0 hits).
  • No GraphQL schema files.
  • Boj.Protocol ABI enum lists GRPC but not GraphQL.

This is consistent with docs/ARCHITECTURE.md L163 ("gRPC (7701), GraphQL (7702), and SSE (7703) are not yet live — tracked as future work in ROADMAP.adoc"); the QUICKSTART table just hadn't been updated to match. The PR adds a per-row qualifier and a NOTE block under the table, preserving the forward-looking intent without making false claims.

What's deliberately not in this PR

These warrant a follow-up; flagging here so they don't surprise:

  • Date-stamped historicals (ROADMAP.adoc v1.0.1 checkboxes, TEST-NEEDS.md L124, TOPOLOGY.md L4, ARCHITECTURE.md cartridge status breakdown): these reference measurements taken on 2026-04-25 (e.g. "all 112 cartridges covered 2026-04-25"). Those statements were correct at that date — fixing them is re-measurement against the current scaffold/build/.so state, not substitution. Out of scope.
  • docs/READINESS.md L75: per-cartridge metrics ("103/106 shared libs built", "113 FFI tests pass") — same re-measurement story.
  • docs/outreach/awesome-list-descriptions.md and docs/outreach/blog-post-draft.md: heavily reference V-lang adapter (banned 2026-04-12, replaced by Deno/JS). They need a bigger rewrite, not just count substitution. Updating them in this PR would leave the architecture description internally inconsistent.
  • docs/decisions/0006-cartridge-invoke-abi.md L130 "~100 cartridges" — hedged, in an ADR, historical. Fine as-is.

This PR also explicitly advances the open checkbox in ROADMAP.adoc v1.0.1: "Refresh repo documentation claims after migration closure (counts, completion text, handover docs)."

Test plan

  • CI green on the branch.
  • just doctor still parses Justfile cleanly with new version.
  • npm run test (mcp-bridge dispatch coherence test) still passes — no tool surface changes here, so this should be a no-op.
  • OpenAPI lint on openapi.yaml (e.g. redocly lint openapi.yaml) still clean.
  • Spot-check that boj_menu description in smithery.yaml still matches the actual boj_menu tool's documented behaviour in mcp-bridge/.
  • Visual review of the QUICKSTART port table NOTE block renders as expected on GitHub's AsciiDoc preview.

🤖 Generated with Claude Code

Spec drift sweep across canonical surfaces. Brings every advertised
version string into agreement with package.json (0.4.6) and every
cartridge-count claim into agreement with the actual count of
cartridges/*/ directories on disk (115).

Versions (all -> 0.4.6):
- Justfile: 0.3.1 -> 0.4.6
- openapi.yaml: 0.4.0 -> 0.4.6
- docs/specification/openapi.yaml: 0.3.0 -> 0.4.6
- smithery.yaml: 0.4.0 -> 0.4.6
- gemini-extension.json: 0.4.0 -> 0.4.6
- stapeln.toml: 0.3.1 -> 0.4.6

Cartridge counts (all -> 115, the actual filesystem count):
- README.md: "50+" and "100" -> "115"
- README.adoc: "106+" and "100" -> "115"
- QUICKSTART-USER.adoc: "112" (x2) -> "115"
- openapi.yaml description: 106 -> 115
- ai-plugin.json: 55 -> 115 (also: V-lang -> Deno/JS, V-lang banned 2026-04-12)
- smithery.yaml: 53 -> 115 (description + boj_menu tool)
- docs/glama/CAPABILITIES.md: 106 -> 115
- docs/glama/RESOURCES.md: 106 -> 115 (observation example)
- llm-warmup-dev.md: 112 -> 115 (3 places)
- llm-warmup-user.md: 112 -> 115 (file map row)
- EXPLAINME.adoc: 112 -> 115 (4 places)

QUICKSTART-USER.adoc port table: gRPC (7701) and GraphQL (7702) marked
planned, with explicit NOTE that only REST :7700 is implemented today.
This is consistent with ARCHITECTURE.md L163, which already records the
gap. Verified: elixir/lib/boj_rest only contains a Plug router; zero
matches for grpc/graphql/absinthe; no .proto or .graphql schema files
exist in the repo.

Out of scope (left unchanged; flagged for separate work):
- ROADMAP.adoc, TEST-NEEDS.md, TOPOLOGY.md, ARCHITECTURE.md cartridge
  status breakdowns: date-stamped historical measurements
  (as of 2026-04-25) — re-measurement, not substitution.
- docs/READINESS.md L75: per-cartridge metrics (103/106 built etc.) —
  needs re-run, not bump.
- docs/outreach/awesome-list-descriptions.md and blog-post-draft.md:
  reference V-lang adapter as a third language; need a bigger rewrite
  now that V-lang is banned and Deno/JS replaces it.
- docs/decisions/0006-cartridge-invoke-abi.md: hedged ~100 cartridges
  in an ADR — historical, fine.

This advances ROADMAP.adoc v1.0.1's open checkbox:
"Refresh repo documentation claims after migration closure
(counts, completion text, handover docs)."

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@hyperpolymath hyperpolymath merged commit d0b12e0 into main Apr 30, 2026
9 of 13 checks passed
@hyperpolymath hyperpolymath deleted the spec-drift-2026-04-30 branch April 30, 2026 15:28
hyperpolymath added a commit that referenced this pull request Apr 30, 2026
)

## Summary

Re-measures the date-stamped historical statements PR #40 deliberately
left out of scope (because they were measurements taken on 2026-04-25
and substituting blind would have been wrong). Now refreshed against the
actual repo state on 2026-04-30 after `just build` produced **111 of
115** cartridge `.so` libraries.

## Numbers refreshed

| Surface | Old | New |
|---|---|---|
| `TOPOLOGY.md` L4 | "Updated 2026-04-25. 112 cartridges across 6
tiers." | "Updated 2026-04-30. 115 cartridges across 6 tiers (111 with
`.so` built, 4 pending)." |
| `TEST-NEEDS.md` L124 | "112 cartridges loaded … as of 2026-04-25" |
"115 cartridges loaded … as of 2026-04-30" + the 4 not-yet-building
names |
| `ROADMAP.adoc` v1.0.1 (4 checkboxes) | mixed 112/checked + unchecked |
bumped to 115, re-dated 2026-04-30, two unchecked items now [x] (this PR
closes them) |
| `ROADMAP.adoc` v1.1.0 | "99 of 106 cartridges use `mod.js`" | "4 of
115 cartridges still use `mod.js`" — the gap closed substantially |
| `docs/ARCHITECTURE.md` L138 | "Once all 112 cartridges have verified
`.so` builds" | 115 + parenthetical 2026-04-30 measurement |
| `docs/ARCHITECTURE.md` L209–212 | "1 complete (boj-health), 111 in
progress" — INVERTED | "111 with `.so` built, 4 not yet building" —
actually inverts the breakdown |
| `docs/READINESS.md` L75 | "Cartridge fleet (106) … 103/106 shared libs
built" | "Cartridge fleet (115) … 111/115 shared libs built" |

The 4 cartridges still without `.so`: **`database-mcp`**,
**`echidna-llm-mcp`**, **`lang-mcp`**, **`orchestrator-lsp-mcp`**.
Flagged in three places so the next investigator has a starting list.

## What this PR deliberately does NOT do

- **Re-run mix test / zig test / FFI test counts.** The numbers in
`READINESS.md` (`113 FFI tests`, `178 core tests`, `4 believe_me`, etc.)
are last-documented values, not re-measured. The row text in
`READINESS.md` honestly notes this. Test re-run is a separate follow-up.
- **Re-count per-directory READMEs.** The "393 per-directory READMEs"
number is also a last-documented value. Same reasoning.
- **Investigate the 4 build-failing cartridges.** Their `just build`
errors are out of scope here; flagged for a follow-up.
- **Touch any other ARCHITECTURE / ROADMAP claims unrelated to count or
build status.**

## Test plan

- [ ] Visual review of the 5 changed files to make sure the numbers are
coherent (115 across the board for "total"; 111 for "built"; 4 for
"pending"; 2026-04-30 for "as of" dates).
- [ ] CI green on the branch (will hit the same 3 pre-existing failures
as #40 / #41 — TS/JS Blocker on the 6 `.ts` files, Hypatia missing
GITHUB_TOKEN; admin merge expected, same as those).

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
hyperpolymath added a commit that referenced this pull request Apr 30, 2026
… mix path in service unit (#43)

## Summary

Three of the four sub-parts of the deferred cleanup ledger from PR #40's
out-of-scope list. The fourth (port the 6 `.ts` cartridge adapters to
AffineScript→typed-wasm) is delegated to a scheduled remote agent that
fires 2026-05-07 and runs **one cartridge per pass**, so it stays
opportunistic and reviewable.

## Changes

| File | Fix |
|---|---|
| `.github/workflows/hypatia-scan.yml` | Adds job-level `GITHUB_TOKEN`
env (Hypatia CLI calls `gh api` for Dependabot lookups; without the
token it logs `Dependabot alerts unavailable: GITHUB_TOKEN not set` and
the job exits non-zero). Adds `security-events: read` permission. |
| `.github/workflows/rsr-antipattern.yml` | "use ReScript instead" →
"use AffineScript→typed-wasm instead". Header comment + Allows banner
updated to reflect estate-wide language policy 2026-04-30 (RS/TS/JS
default is AffineScript; ReScript transitional / adapter-shim only). |
| `.github/workflows/ts-blocker.yml` | "port to Zig or ReScript" / "use
Zig or ReScript instead" → "Zig (systems) or AffineScript→typed-wasm
(application)". Underlying detection unchanged. |
| `elixir/boj-rest.service` | Replace hardcoded `ExecStart=/usr/bin/mix`
(which is apt's 1.14, fails `mix.exs` `~> 1.15` check on Ubuntu 24.04
LTS) with `ExecStart=mix run --no-halt`. Adds `Environment=PATH` with
asdf shims, cargo bin, `~/.local/bin`. Adds `ASDF_DIR` + `ASDF_DATA_DIR`
so asdf shims work under systemd's clean env. Bumps cartridge-count
comment 112 → 115. |

## Why these specifically

PR #40 (spec drift) merged on 2026-04-30 surfaced four follow-up
cleanups; this PR closes three of them. The fourth (`.ts` → AffineScript
ports) was deliberately scheduled rather than rushed — verifying
AffineScript readiness for each cartridge is genuinely per-cartridge
work and the scheduled agent does it one at a time.

The `boj-rest.service` fix in particular was discovered the hard way
during the maintainer's install: the deployed unit needed a hand-patch
(`~/.config/systemd/user/boj-rest.service`) to point at
`~/.asdf/installs/elixir/1.18.4-otp-25/bin/mix`. Persisting the fix to
the source template (with `%h` systemd-substitution + asdf shim PATH)
means the next person installing on a fresh Ubuntu doesn't repeat the
dance.

The three pre-existing CI failures that were blocking PRs #40, #41, #42
are likely partially closed by this PR:

- **Hypatia** — should now pass with `GITHUB_TOKEN` wired up.
- **TS/JS Blocker** and **antipattern-check** — will *still* fail on the
6 `.ts` cartridge adapters (`academic-workflow-mcp`, `bofig-mcp`,
`ephapax-mcp`, `fireflag-mcp`, `hesiod-mcp`, `sanctify-mcp`). Those are
the scheduled agent's work. Admin-merge-without-CI is still expected for
this PR.

## Test plan

- [ ] CI shows Hypatia passing on this branch (GITHUB_TOKEN now
available).
- [ ] Diff visual review for the policy text — make sure no instance of
"use ReScript instead" remains in the workflow files.
- [ ] After merge, fresh install on a clean Ubuntu 24.04 LTS host with
asdf + the toolchain-pins from PR #41: `bash setup.sh && just doctor &&
just deps && just build && just install-service` — confirm
`boj-rest.service` starts cleanly without the `(Mix) You're trying to
run :boj_rest on Elixir v1.14.0` error that was previously hit.

## Out of scope

- The 6 `.ts` → AffineScript ports (scheduled, one per week from
2026-05-07, routine `trig_01X9BreihRW4AU5BdELY2QBY`).
- Re-running mix test / FFI tests for grade re-validation (READINESS.md
still lists the last-documented numbers per the re-measurement PR #42).
- The 4 cartridges still without `.so` (`database-mcp`,
`echidna-llm-mcp`, `lang-mcp`, `orchestrator-lsp-mcp`) — listed in #42
for follow-up.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant