Skip to content

Commit 124b9a9

Browse files
claudehyperpolymath
authored andcommitted
feat(catalog): truthful availability — available:true ⇒ built + verified-real
The catalog defaulted every cartridge to available:true (router.ex), so all 125 cartridges advertised as working when only feedback-mcp is actually built and returns real results. This makes the catalogue tell the truth and adds a CI gate so it cannot silently regress. - cartridge.json (×125): add explicit `available` (true only for feedback-mcp); add `status` where missing ("catalogued"), preserving existing stub/ffi_only labels; fix orchestrator-lsp's duplicate `status` key (kept ffi_only). - router.ex: flip the `available` default true→false so a cartridge must opt in to being advertised as working, never by omission. - tests/truthfulness_check.sh + .github/workflows/truthfulness.yml: a gate that builds every available cartridge and invokes its first tool, failing on a "status":"stub" reply (or none). Verified to catch a stub flipped to available. - router_test.exs / contract_test.exs: fix /menu tests that asserted the pre-tiering cartridges/count shape (broken since tiered /menu landed) to assert the real tier_*/summary shape and the new availability invariant (summary.ready == count of available entries). https://claude.ai/code/session_019tMcRS1Dm1nWjjYP4WvbJa
1 parent d84f817 commit 124b9a9

130 files changed

Lines changed: 448 additions & 13 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/truthfulness.yml

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
# SPDX-License-Identifier: MPL-2.0
2+
# Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) <j.d.a.jewell@open.ac.uk>
3+
#
4+
# Truthfulness invariant: the cartridge catalogue must never advertise as
5+
# `available: true` anything that isn't built and returning real results.
6+
# This gate builds every available cartridge and invokes its first tool,
7+
# failing if the reply carries a `"status":"stub"` marker (or no reply at all).
8+
# See tests/truthfulness_check.sh for the rules.
9+
10+
name: Truthfulness
11+
12+
on:
13+
push:
14+
branches: [main, master, develop]
15+
paths:
16+
- 'cartridges/**/cartridge.json'
17+
- 'cartridges/**/ffi/**'
18+
- 'ffi/**'
19+
- 'elixir/lib/boj_rest/router.ex'
20+
- 'tests/truthfulness_check.sh'
21+
- '.github/workflows/truthfulness.yml'
22+
pull_request:
23+
branches: [main, master]
24+
paths:
25+
- 'cartridges/**/cartridge.json'
26+
- 'cartridges/**/ffi/**'
27+
- 'ffi/**'
28+
- 'elixir/lib/boj_rest/router.ex'
29+
- 'tests/truthfulness_check.sh'
30+
- '.github/workflows/truthfulness.yml'
31+
workflow_dispatch:
32+
33+
permissions: read-all
34+
35+
concurrency:
36+
group: truthfulness-${{ github.ref }}
37+
cancel-in-progress: true
38+
39+
jobs:
40+
truthfulness:
41+
name: Catalogue truthfulness (available ⇒ built + real)
42+
runs-on: ubuntu-latest
43+
timeout-minutes: 15
44+
45+
steps:
46+
- name: Checkout
47+
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
48+
49+
- name: Install Zig
50+
uses: goto-bus-stop/setup-zig@9566bb3e8749893055694249726756f25e099b30 # v2
51+
with:
52+
version: 0.15.1
53+
54+
- name: Install jq
55+
run: sudo apt-get update && sudo apt-get install -y jq
56+
57+
# The script builds boj-invoke and (re)builds each available cartridge's
58+
# .so itself, so it is the single source of truth for the gate.
59+
- name: Run truthfulness check (probe)
60+
run: bash tests/truthfulness_check.sh --probe

cartridges/007-mcp/cartridge.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,8 @@
5151
"tag_map_path": "schemas/memory-tag-map.a2ml"
5252
},
5353
"name": "007-mcp",
54+
"available": false,
55+
"status": "catalogued",
5456
"protocols": [
5557
"MCP",
5658
"Agentic"

cartridges/academic-workflow-mcp/cartridge.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
"spdx": "MPL-2.0",
44
"copyright": "Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) <j.d.a.jewell@open.ac.uk>",
55
"name": "academic-workflow-mcp",
6+
"available": false,
7+
"status": "catalogued",
68
"version": "1.0.0",
79
"description": "Academic workflow — Zotero integration, citations, paper review",
810
"domain": "Research",

cartridges/aerie-mcp/cartridge.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
"spdx": "MPL-2.0",
44
"copyright": "Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) <j.d.a.jewell@open.ac.uk>",
55
"name": "aerie-mcp",
6+
"available": false,
7+
"status": "catalogued",
68
"version": "0.1.0",
79
"description": "Aerie environment lifecycle manager",
810
"domain": "infrastructure",

cartridges/affinescript-mcp/cartridge.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
"spdx": "MPL-2.0",
44
"copyright": "Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath)",
55
"name": "affinescript-mcp",
6+
"available": false,
7+
"status": "catalogued",
68
"version": "0.1.0",
79
"description": "AffineScript language cartridge -- type checking, parsing, formatting, linting, compiling, hover/goto-def/completion queries, error explanation, stdlib browsing, and syntax reference for the AffineScript language (substructural type system with affine/linear types, algebraic effects)",
810
"domain": "Languages",

cartridges/agent-mcp/cartridge.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
"spdx": "MPL-2.0",
44
"copyright": "Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) <j.d.a.jewell@open.ac.uk>",
55
"name": "agent-mcp",
6+
"available": false,
7+
"status": "catalogued",
68
"version": "0.1.0",
79
"description": "OODA loop agent session enforcer",
810
"domain": "ai",

cartridges/airtable-mcp/cartridge.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
"spdx": "MPL-2.0",
44
"copyright": "Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath)",
55
"name": "airtable-mcp",
6+
"available": false,
7+
"status": "catalogued",
68
"version": "0.2.0",
79
"description": "Airtable cartridge -- base listing, table schema retrieval, record search, record creation, record update, field listing, view browsing, webhook management, comment access, and revision history via the Airtable REST API",
810
"domain": "Productivity",

cartridges/arango-mcp/cartridge.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
"spdx": "MPL-2.0",
44
"copyright": "Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath)",
55
"name": "arango-mcp",
6+
"available": false,
7+
"status": "catalogued",
68
"version": "0.1.0",
79
"description": "ArangoDB multi-model database gateway. AQL queries, document operations, graph traversals, and collection management.",
810
"domain": "Database",

cartridges/aws-mcp/cartridge.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
"spdx": "MPL-2.0",
44
"copyright": "Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath)",
55
"name": "aws-mcp",
6+
"available": false,
7+
"status": "catalogued",
68
"version": "0.1.0",
79
"description": "AWS cloud gateway. Session-based authentication with per-region slots, throttle management, and multi-service action routing.",
810
"domain": "Cloud",

cartridges/bofig-mcp/cartridge.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
"spdx": "MPL-2.0",
44
"copyright": "Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath)",
55
"name": "bofig-mcp",
6+
"available": false,
7+
"status": "catalogued",
68
"version": "1.0.0",
79
"description": "Bofig Cartridge — Evidence graph query tools for investigative workflows",
810
"domain": "Research",

0 commit comments

Comments
 (0)