Skip to content

16j-beam-mcp-dep: depend on beam_mcp 0.1.0 from Hex, not an in-tree copy - #13

Merged
HackTuah merged 1 commit into
mainfrom
slice/16j-beam-mcp-dep
Sep 7, 2026
Merged

16j-beam-mcp-dep: depend on beam_mcp 0.1.0 from Hex, not an in-tree copy#13
HackTuah merged 1 commit into
mainfrom
slice/16j-beam-mcp-dep

Conversation

@HackTuah

@HackTuah HackTuah commented Sep 7, 2026

Copy link
Copy Markdown
Member

Replaces the in-tree MCP protocol core with the published beam_mcp 0.1.0, from Hex, not a path dep. mix.lock records :hex and the registry's own outer checksum b8c351933260d90844eae1614ae4759cf979d4a524ee139fbbef1c2dfaab5e7f.

Deletes apps/hacktui_agent/lib/hacktui_agent/mcp/{server,stdio,schema,tool_spec}.ex. The domain the package deliberately shed comes back here: per-tool input_schemas become catalog data on the ToolSpecs, captured from the deleted server.ex rather than retyped, and the "contain":contain coercion moves into dispatch. tools/list is byte-identical across the swap — six tools, field by field, 0 differences, against a recording whose provenance was proved against b425f63 rather than assumed.

Client revision moves 2024-11-052025-11-25.

Review

Seven rounds, fourteen lane verdicts, twelve rejections. The mechanism has been green since round 2; every rejection after it was the §10 surface disclosure or the record describing it.

Four drafts of that disclosure each asserted a completeness its enumeration did not have — two methods claimed against six, one behavioural change against seven, nine table rows against thirteen clauses, then a tenth change. The owner ruled it out of prose: the disclosure lives in tests that ship, plus one BACKLOG.md line carrying no count and no verb about what the swap did beyond "changed". A row cannot be over-generalised, because it is not a generalisation.

Four tests pin what nothing else pinned — the bare default revision, the modern-era resultType decoration, content[0].text no longer carrying inspect/1 output, and an unsupported revision via _meta being refused. Each proved red against base b425f63 (4 of 4) and each killed by reverting the behaviour it pins.

ping carrying a _meta revision is deliberately pinned by nothing: it is a defect in beam_mcp 0.1.0, and a test would pin the defect. Filed upstream.

Round 7: PASS / PASS, both lanes on tree 45e853ed, signoff written by tools/signoff.sh after it refused an earlier attempt over a moved index.

Gates

269 tests, 0 failures. credo held at 76, dialyzer at 43, both baseline callers rc=0. Compile, format, secret-scan, review-signoff and review-tree all pass. 17 files, 340 insertions, 632 deletions.

Advisory, unchanged by this diff: deps.audit 12, hex.audit 21, sobelow 7.

Acceptance criteria

1, 2, 4, 5, 6 met. Criterion 3 was amended by the owner after round 1 — the package shed this tree's domain, so every test reaching into that domain through a deleted module has to reach it through the catalog. Twelve tests, measured, not the two originally scoped.

Evidence: internal/slices/16j-beam-mcp-dep/FINDINGS.md.

🤖 Generated with Claude Code

https://claude.ai/code/session_01VNdY6wVS773UJgrHUeBN3Y

Deletes the four in-tree MCP protocol modules and depends on the published
package. mix.lock records :hex and the registry's own outer checksum
b8c351933260d90844eae1614ae4759cf979d4a524ee139fbbef1c2dfaab5e7f, so the
build fetches what hex.pm serves rather than a local tree.

The domain the package deliberately shed comes back here: per-tool
input_schemas become catalog data on the ToolSpecs, captured from the
deleted server.ex rather than retyped, and the "contain" -> :contain
coercion moves into dispatch. tools/list is byte-identical across the
swap - six tools, field by field, 0 differences, compared against a
recording whose provenance was proved against b425f63 rather than assumed.

The client revision moves 2024-11-05 -> 2025-11-25.

Acceptance criteria: 1, 2, 4, 5, 6 met. Criterion 3 was amended by the
owner after round 1 - the package shed this tree's domain, so every test
reaching into that domain through a deleted module has to reach it through
the catalog; twelve tests, measured, not the two originally scoped.

Seven rounds, fourteen lane verdicts, twelve rejections. The mechanism has
been green since round 2; every rejection after it was the section 10
surface disclosure or the record describing it. Four drafts of that
disclosure each asserted a completeness its enumeration did not have, so
the owner ruled it out of prose entirely: it lives in tests that ship, and
one BACKLOG line carrying no count and no verb about what the swap did
beyond "changed". A row cannot be over-generalised, because it is not a
generalisation.

Four tests pin the changes nothing else pinned - the bare default revision,
the modern-era resultType decoration, content[0].text no longer carrying
inspect/1 output, and an unsupported revision via _meta being refused.
Each was proved red against base b425f63, 4 of 4, and each was killed by
reverting the behaviour it pins. ping carrying a _meta revision is
deliberately pinned by nothing: it is a defect in beam_mcp 0.1.0, and a
test would pin the defect.

269 tests, 0 failures. credo held at 76, dialyzer at 43, both baseline
callers rc=0. 17 files, 340 insertions, 632 deletions.

Evidence: internal/slices/16j-beam-mcp-dep/FINDINGS.md

Reviewed-diff: sha256:4e2cab172a3f773e8be48f1b8a987ae54cb0d79afb109dd198906df69df8d1a4
@HackTuah
HackTuah merged commit 86681a2 into main Sep 7, 2026
20 of 22 checks passed
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