From d8ce9727bc0144f997ea03b3f05767a0499437d0 Mon Sep 17 00:00:00 2001 From: wshallwshall Date: Sat, 22 Aug 2026 15:51:44 -0500 Subject: [PATCH] docs(claude): route owner questions through the Liaison and pushes through the Lander Owner-set 2026-08-22, in their words: all sessions should send issues and questions to the owner via the Liaison whenever a Liaison session is running, and send all push, merge and similar to the Lander whenever a Lander session is running. Sited in CLAUDE.md rather than the vault role playbooks because it binds EVERY session, including undeclared ones that never read a playbook. A rule for "all sessions" has to live where all sessions read. Names the check instead of asserting the condition: fleet.ps1 prints a SEAT column and a STATE column, so "is a Lander running" is one command rather than a judgement. Verified by running it -- liaison and LANDER both showed RUNNING at 20:49Z. Carries the casing trap, measured in that same render: the live rows read liaison, LANDER, Steward and asvs-tracker -- four seats, four casings. A case-sensitive test for "lander" returns nothing and reports it as "no Lander running", which is a false negative shaped exactly like a clean answer. States what the routing does NOT do. The owner still approves every push, PR and merge; the Lander executes an approved action and does not authorise one, and handing it a branch does not convert an unapproved push into an approved one. Without that sentence the rule reads as a transfer of authority, which is not what was asked for. --- CLAUDE.md | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/CLAUDE.md b/CLAUDE.md index 19c86fff..ad22391c 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -296,6 +296,39 @@ diverge enough to warrant it; keep this root file general. - **An undeclared seat is now visible rather than silent.** `goalPromptedAt` separates *asked and ignored* from *never asked* — two states with opposite fixes that used to render identically. +### Route it to the seat that owns it + +**Owner-set 2026-08-22. Two routes, each conditional on that seat actually running:** + +| What you are holding | Send it to | Instead of | +|---|---|---| +| A question or issue for the owner | the **Liaison** | asking the owner directly | +| A push, PR, or merge | the **Lander** | doing it yourself | + +**Check which seats are live with one command** — read the `SEAT` column on rows whose `STATE` is +`RUNNING`: + +``` +pwsh -NoProfile -File scripts\coord\fleet.ps1 +``` + +**MATCH THE SEAT NAME CASE-INSENSITIVELY.** Measured 2026-08-22, the live rows carried `liaison`, +`LANDER`, `Steward` and `asvs-tracker` — four seats, four casings, in one render. A case-sensitive +test for `lander` finds nothing and reports it as "no Lander running", which is the failure that +looks like a clean answer. + +**No such seat running? The old path stands** — ask the owner directly, and get their approval for +your own push. **Neither seat is a required hop.** Neither may sit on your item either: a Liaison that +is slow must say so and tell you to go direct. + +**Reach them with `mail.ps1` (leaves a receipt, reaches an idle or different-login peer) or a +cross-session message (faster, no receipt, dies with the session).** + +**ROUTING IS NOT AUTHORITY, and this is the half to get right.** The owner still approves every push, +PR and merge. **The Lander EXECUTES an approved action; it does not AUTHORISE one**, and handing it +your branch does not convert your unapproved push into an approved one. Same for the Liaison: it +compresses and presents your question, and it does not answer it. + ### Git discipline - Work on a **feature branch and open a PR**; commit at logical stops, **one coherent layer per commit**, with clear messages. (Direct pushes to `main` are blocked by the harness, so