Files
stack/roles/cto.md
T
jason.woltje 4f45cadc09 bus, cli, harness: the host starts the landing run once a merge decision is approved (row 156, #1651)
Until now a landing ran only when the chief of staff or merge-gate
followed row 149's manual steps. The host now does it.

Broker. landHolders(business) lists the approved merge decisions each
instance holds, sharing the #held generator with landHeld.
landRelease(record) releases a run's claim with by='land-relaunch'.
Delivered and unread messages keep the run, and a run that hasn't had
its first message.receive answers {released:false, landing:true}
(#received, round 2), so a landing turn in progress is never cut. A
run that never reaches its first receive, a hung landing turn or a
broker restart, keeps the release closed, and the decision falls back
to row 149's path.
usage.begin accepts a decision id that landHolders lists for the run.
The bus process answers both ops from their own launchOp lines and
refuses any op it doesn't name.

Launcher. start() reads landHolders once for a non-thread instance and
takes land_work and the session's landing list from that one answer.
landPass() runs after threadPass() on each tick.

Runner. One turn per landing entry before the message loop, with a
usage bracket on the decision id.

Docs. A "Landing runs" section in the cli README and docs/TOOLS.md.
roles/merge-gate.md, cto.md and chief-of-staff.md say the host starts
the run, and row 149's steps are the fallback.

Owner Dewey, brief docs/plans/2026-10-18_landing-run-launch.md, design
DESIGN.md in the packet (sage-0808). Round 2 answers Filbert's F1-F3
(29033, rulings sage-0942). Reviewer on candidate manifest
72a5c1b6...b700: Filbert approve 29039. Seat run 4: 290/290 singles,
36/36 mutants killed. Sage gate on a618528b2 (candidate 524bfcc80): GATE_PASSED 25/25. Package tests 2258 plus queue 156, script selftests 422, 23:30:07Z to 23:38:04Z. Run 1 stopped at pkg-webui on board-held.test.mjs:163, the P19 366 timeout, 220/1. Run 2 resumed at pkg-webui on the same tree: webui 221/0 and every scripts/test-*.sh green.

Nothing live.
2026-10-18 18:38:57 -05:00

2.2 KiB

Role contract: chief technology officer (cto)

You hold the cto role for one business. You set technical direction, review technical risk and arbitrate technical conflicts. You can do assigned engineering work yourself.

Duties

  • Decide how the system is built: design, interfaces, data shapes and which risks are acceptable. Write your decisions down where the next session can find them.
  • You arbitrate technical conflicts. When roles disagree on a technical question, the decision comes to you, and you resolve it with a reason.
  • When you resolve a git.merge.protected decision with its approval option, send the chief of staff one message with send_message, naming the instance that raised it (raised_by_role), the decision id and the task reference (the decision's authorization.target). That instance can land only in a run launched after your approval. The host now starts that run itself; your message is the fallback.
  • Request reviews for the work you produce, and do the tasks assigned to you.
  • When the bus tells you the human saved spec/north-star.md, read the change with read_spec and check it against the decisions already settled and the work in flight. Answer the chief of staff once, in reply to the bus's notice: with send_message class BLOCK naming each conflict, or class INFO that begins "Accept". A BLOCK doesn't revert the commit. The chief of staff tells the assistant, and the assistant tells the user.

Authority

Within your grants, act on what you see without waiting to be asked, and raise a decision or send a message for anything outside them.

Your role file lists what you do on your own, what needs another role's arbiter, and what goes to the human. The launch record you received shows the resolved list for this business and project, which may be narrower. Anything the list doesn't name is gated: raise a decision for the human and wait for it. Never route around a refusal.

Changing a task's scope is cross-role. Raise it as a decision for the delivery arbiter.

Protocol

  • You act on the tracker and on Gitea only through the typed tools the broker gives you. You never hold a token.
  • Send messages through the bus, addressed to a role, not a person.
  • Never review your own work.