Skip to content

spec(t27mcp): service.t27 -- one MCP service, TRI CLAW's /mcp with the t27 tools mounted - #10484

Merged
gHashTag merged 2 commits into
masterfrom
t27mcp/one-service
Oct 18, 2026
Merged

gHashTag merged 2 commits into
masterfrom
t27mcp/one-service

Conversation

@gHashTag

Copy link
Copy Markdown
Owner

Step 1 of #10483. This PR adds specs/t27mcp/service.t27, the contract for one MCP service: TRI CLAW's /mcp with the t27 tools mounted into it.

What the spec decides:

  • Ownership by prefix. The t27 module owns names starting with t27_ and t27f_. Every other name, tg_* included, belongs to TRI CLAW. t27ai is not a t27 name.
  • admit(name, offered_by) decides what happens to each tool a side offers:
    • A t27 tool is mounted.
    • A t27-mcp tool under a TRI CLAW name is a forwarder. It would call the service it is part of, so it is dropped.
    • A TRI CLAW tool under a t27 name is a collision and is refused.
    • A name MCP would not carry (1 to 64 characters of a-z, 0-9 and _) is refused on either side.
  • t27_visible(scope). The mounted tools read public data and change nothing, so they are shown to the owner's scope only. Editorial keys and game tokens keep the fixed sets TRI CLAW gives them.
  • local_serves(name). The keyless local t27 server keeps the t27 names and retires its tg_* forwarders.
  • CODER_TOOLS. TRI CLAW's coder persona carries t27_check, t27_find, t27_spec and t27_examples.

The spec does not copy the endpoint or the key variable; they stay in telegram.t27 until the forwarders retire. The per-tool schemas stay in tool_schema.t27.

Checked on the lab against master 82bd5f4 with t27c 0.5.2:

  • t27c check is OK, with 0 errors and 0 warnings.
  • t27c test-report passes 9 of 9, with 0 vacuous. Three of the tests are negative controls.
  • t27c seal --save wrote .trinity/seals/t27mcp_T27mcpService.json, and its spec_hash matches the file.
  • tri types ratchet is CLEAN, with 107 names in the ledger and 107 observed.

This PR adds no code in another language. Steps 2 and 3 are JS in t27-mcp and TS in TRI CLAW; they wait for the owner's owner-approved-foreign label.

Refs #10483, #10066

🤖 Generated with Claude Code

…e t27 tools mounted

Names belong to a home by prefix (t27_ and t27f_ to the t27 module, the rest
to TRI CLAW). admit() mounts the t27 tools, drops the t27-mcp tg_ forwarders,
and refuses a collision or a name MCP would not carry. The mounted tools are
shown to the owner's scope only. The keyless local server keeps the t27 names,
and TRI CLAW's coder persona carries four t27 tools. 9 of 9 tests pass, 0 are
vacuous, and the seal is saved.

Refs #10483

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

PR Dashboard

Generated at: 2026-10-18 14:30:08 UTC

Summary

Status Count
Total Open PRs 50
PRs with Failing Checks 49
PRs with All Checks Green 1
READY 0
FAILING 49
PENDING 0
NO CHECKS YET 0

These columns do not partition: 0 + 49 + 0 + 0 = 49, and there are 50 open PRs. A PR is being counted twice or not at all.

Seal Status

  • ⚠️ STALE -- sha256(compiler.rs)=fad12492937a != manifest seal=87e5cbd3ad94.
    The committed NMSE numbers were certified against an older compiler.rs.
    Run scripts/reseal-check.sh locally for the two-step reseal command (advisory; not a merge gate).

…lds the wasm both servers call

gen-c lowers a `string` parameter as NUL-terminated text and needs u32
indices; with `str` it emitted name.len on a const char*. Checked on the
lab: 9 of 9 tests, 0 vacuous; gen-c plus zig cc gives a 736-byte wasm
exporting admit, local_serves, t27_visible, home_of and name_ok.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

PR Dashboard

Generated at: 2026-10-18 14:35:33 UTC

Summary

Status Count
Total Open PRs 50
PRs with Failing Checks 50
PRs with All Checks Green 0
READY 0
FAILING 50
PENDING 0
NO CHECKS YET 0

Seal Status

  • ⚠️ STALE -- sha256(compiler.rs)=fad12492937a != manifest seal=87e5cbd3ad94.
    The committed NMSE numbers were certified against an older compiler.rs.
    Run scripts/reseal-check.sh locally for the two-step reseal command (advisory; not a merge gate).

@gHashTag
gHashTag merged commit 5bfc4b2 into master Oct 18, 2026
30 of 33 checks passed
gHashTag added a commit that referenced this pull request Oct 18, 2026
… passes (Refs #10385)

Both specs reached master in #10485 and #10484 without ledger lines, so the ratchet reported them UNLISTED.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
gHashTag added a commit that referenced this pull request Oct 18, 2026
…token_floor uses it (Closes #10385) (#10388)

* t27f: frame shards as a generic spec, frame_shard.t27 (Closes #10385)

The shard partition and the TF_SHARD/TF_SHARDS reader, with the reel
length as a parameter, so any renderer opts in with three lines in its
main instead of copying them. token_floor.t27 switches to it in its
owner's render(wide) rewrite. Lab: test report 5/5, 0 vacuous; sealed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* t27f: token_floor takes its shards from frame_shard.t27; t27b ledger names frame_shard (Closes #10385)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* t27f: reseal token_floor after the frame_shard swap (Refs #10385)

Lab: t27c test-report token_floor 32/32, frame_shard 5/5, 0 vacuous; frame_shard seal verifies unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* t27f: reseal token_floor_mux, whose closure holds token_floor's hash (Refs #10385)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* t27b ledger: list ledger_union.t27 and t27mcp/service.t27, which t27b passes (Refs #10385)

Both specs reached master in #10485 and #10484 without ledger lines, so the ratchet reported them UNLISTED.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* t27f: reseal token_floor_mux after merging master (Refs #10385)

Master's mux seal recorded the token_floor hash from before the frame_shard swap.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* t27b ledger: list model_route, lesson_reel and reel_topics as CI's t27b run saw them (Refs #10385)

model_route.t27 and reel_topics.t27 pass. lesson_reel.t27 is blocked on type [N]T, like frame_shard, so max_not_pass goes from 133 to 134.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <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