Skip to content

Chat: a standard pairing grants T3 Code v0.1.0's scopes only, never access management or T3 Connect writes (Lazurio/t3code#97) - #583

Merged
immakermatty merged 1 commit into
mainfrom
agent/DEV-6646-pairing-scopes
Oct 21, 2026
Merged

immakermatty merged 1 commit into
mainfrom
agent/DEV-6646-pairing-scopes

Conversation

@immakermatty

Copy link
Copy Markdown
Contributor

Why

T3 Code v0.1.1 widens the default grant of t3 auth pairing create from 13 scopes to 16: access:read, access:write and relay:write join it (pingdotgg/t3code#20432). The Launchpad mints that standard pairing for every visitor of a public Environment, and wherever T3 Code offers no operator pairing, including after a failed t3 lazurio capabilities call. Once 0.1.1 is installed, a visitor of a public Environment could manage the Environment's access and its T3 Connect.

The T3 Code fork's rebuild onto v0.1.1 records this as a gate (Lazurio/t3code#97, gate "Párování a rozsahy sezení", decided under the Organization Admin's mandate): the Platform pairs with explicit scopes, never relay:write, and on a public Environment never access:write. The change must ship before 0.1.1 reaches a public Environment.

What changes

  • The standard call names its own scopes: T3 Code v0.1.0's 13 standard client scopes (standardPairingScopes), one --scope each, which replaces T3's default set. On v0.1.0 that is exactly the default, so today's Environments get the same grant as before.
  • --scope exists from T3 Code v0.1.0, so the standard call first asks t3 --version. An older T3 Code (Machines still installs 0.0.45 on a new Environment) pairs as before. With no version to read, nobody is paired (t3-pairing-failed), and the page opens T3 Code's plain origin, as after any failed pairing.
  • The operator pairing (t3 lazurio pairing) is unchanged: the fork keeps its scopes and never grants relay:write.
  • docs/launchpad-development.md ("Chat entry") says which scopes the standard pairing grants and why.

What does not change

  • Which call is chosen (operator or standard), the label, the 60-second TTL, the route GET /.lazurio/chat/pairing, lazurio chat link and their admission.

Verification

  • tests/launchpad-chat.test.ts (16) and tests/chat-link-cli.test.ts (5) pass, with the version call in every standard sequence and two new tests:
    • which versions take the scopes;
    • which scopes a public Environment's pairing passes for 0.1.1, 0.1.0 and the 0.1.0 preview, none for 0.0.45, and no pairing call for an unreadable, failed or timed-out version.
  • Mutation checks: dropping the --scope flags fails 3 tests, and a version gate that always says yes fails 2.
  • bun run lint, bun run typecheck and bun run check:public pass. The full bun test suite passes locally: 4517 pass, 9 skip, 0 fail across 308 files.
  • Not yet verified on an Environment. It goes out with the next Platform release candidate, where Ring 0 checks that Chat pairs as Bob on admin-01 and as a visitor on the public try-01.

Rollout and risks

  • This must be in the released Platform on every public Environment before T3 Code 0.1.1-lazurio.1 reaches it. Until then nothing changes, because every Environment runs T3 Code 0.1.0.
  • A standard pairing makes one more short call (t3 --version).
  • If t3 --version cannot be read, the standard pairing stops (fail-closed) instead of granting T3's default.

🤖 Generated with Claude Code

…ccess management or T3 Connect writes (Lazurio/t3code#97)

T3 Code v0.1.1 widens the default grant of `t3 auth pairing create` from
13 scopes to 16: access:read, access:write and relay:write join it
(pingdotgg/t3code#20432). The Launchpad mints that standard pairing on every
public Environment and wherever T3 Code offers no operator pairing, so on
v0.1.1 a visitor of a public Environment could manage the Environment's
access and its T3 Connect. The T3 Code fork's rebuild onto v0.1.1 records the
decision (Lazurio/t3code#97, gate "Párování a rozsahy sezení"): the Platform
pairs with explicit scopes, never relay:write, and on public Environments
never access:write, before 0.1.1 reaches a public Environment.

The standard call now names its scopes: T3 Code v0.1.0's standard client
scopes (`standardPairingScopes`), one `--scope` each, which replaces T3's
default set. On v0.1.0 that is exactly the default, so nothing changes for
today's Environments. `--scope` exists from T3 Code v0.1.0, so the call asks
`t3 --version` first: an older T3 Code (Machines still installs 0.0.45 on a
new Environment) pairs as before, and with no version to read nobody is
paired. The operator pairing (`t3 lazurio pairing`) is unchanged: the fork
keeps its scopes, never relay:write.

Co-Authored-By: Claude Opus 5.5 <[email protected]>

@agentrozjedemeai agentrozjedemeai left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@immakermatty Schvaluji přesný HEAD 7583fa3. Seznam 13 rozsahů jsem strojově porovnal s T3 Code v0.1.0 (81493efb); v0.1.1 (fe27e8e3) přidává access:read, access:write a relay:write, které standardní volání nepředá. Ověřil jsem pravidlo verzí pro fork i prosté X.Y.Z, odmítnutí nečitelné/chybné/timeout verze, nezměněnou operátorskou větev a skutečné --scope argumenty. Lokálně 32/32 zaměřených testů, lint, typecheck, check:public a git diff --check; CI scope, static i oba testovací shardy jsou zelené, 0 otevřených vláken. Nové main b7ecaa4 se synteticky slučuje bez konfliktu. Další t3 --version je přiměřený náklad, avšak Ring 0 musí ověřit odezvu samo-párování v pětisekundovém limitu webového klienta. Poznámka k rozsahu tvrzení: tohle omezuje explicitní session scopes, nikoli schopnosti přístupu k shellu, který je v původních 13 rozsazích. Nemergoval jsem a neověřoval skutečné Environmenty.

@immakermatty
immakermatty merged commit 46635e8 into main Oct 21, 2026
7 checks passed
@immakermatty
immakermatty deleted the agent/DEV-6646-pairing-scopes branch October 21, 2026 11:50
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.

2 participants