Repository navigation
[EPIC] T27 OS: the 27-petal menu from one t27 spec, trios to FPGA #10782
Copy link
Copy link
Open
Labels
Description
Goal
T27 OS is a minimum viable operating surface written in t27. Its home screen is the 27-petal
999 triangle menu. Pressing a petal opens that petal's menu, a grid of cards for existing widgets.
The same spec drives the trios macOS app today and an FPGA board (AX7203) at the end.
Why it matters
- The triangle is drawn today by Swift in
trinity/apps/queen(TriangleLogo.swift), which was ported from Zig (photon_trinity_canvas.zig). - The rule behind it lives in three hand-kept tables that disagree:
Screen.screenForBlocklists 28 screens for 27 petals (its DUKH row has 10), sosettingscan never be reached.- Its screen names do not match the tooltip names in
TriangleLogo.worlds.
- One spec means one home for that rule, and the only home that can lower to hardware.
Source of truth
specs/t27f/petal_menu.t27(moduleT27fPetalMenu) holds layers L1-L7: geometry, meaning, look, fit, input, state, menu.specs/t27f/frontend.t27holdsSF_PETAL_MENUand theI_OS_HOMEintent.- Widget ids come from
trinity: apps/website/specs/widgets/gallery.t27. Cards reference them; they never copy them. - Repository: https://github.com/gHashTag/t27os (managed by TRI CLAW, see TRI CLAW: all CI gates in one GitHub App (TRI-27 / Trinity S3AI), spec-first, sellable #9271)
Sub-tasks (checkboxes)
- M1. Spec: petal geometry, hit test, fills, open/back state, empty card grid (test-report 10/10 + frontend 8/8)
- M2. The trios/QueenUILib host draws from the spec (generated code), and the 28-vs-27 table is deleted
- M3. Cards: each petal's menu lists real widget cards by
widgets_galleryid - M4. Make
petal_menu.t27icarus-lowerable (today:not_lowerable, string and colour tables) - M5. A framebuffer spec (HDMI/VGA scan-out) and a rasteriser for the 27 quads, in t27
- M6.
gen-verilogfor the hit test, fills and state on the AX7203, read back on the die - M7. Input on the board (buttons, UART or touch) wired to
on_tap/on_back - M8. TRI CLAW gates on gHashTag/t27os (via the App or the pinned
claw-v*workflow, TRI CLAW: all CI gates in one GitHub App (TRI-27 / Trinity S3AI), spec-first, sellable #9271) - M9. Native macOS window from the spec: sidebar QUEEN / SPACES / AGENTS, DOCTOR panel, footer "OPEN SOURCE T27" (PR feat(t27f): T27 OS home -- the 27-petal triangle menu as one spec #10783, stacked feat(t27f): petal_menu.t27 is Icarus-lowerable and simulates 10/10 (M4 of #10782) #10786)
- M10. herdr-style PTY server with crash restore; a live Claude Code pane that survives
kill -9of the server (PR feat(t27os): PTY server that owns the agent terminals and restores them (Refs #10782) #10934; live resize pending, t27#10902) - M11. Responsive window and terminal: real pane size at spawn and on resize (debounced, no ring replay), idle redraw skip, min window size, backing scale factor, row glyph cache, sidebar truncation. Audit 2026-10-19: P0 items are the 24x80 hard-code in
pty_server.t27, the per-frame grid wipe on resize and the 30 fps idle redraw; t27b gaps: variadic calls (t27b: lower @extern calls to libSystem (blocks the T27 OS PTY server) #10902), callbacks, ObjC class creation - M12. KEYS tab and one key manager in .t27: macOS Keychain storage, masked display, status and rotation, key injection into agent panes (strip
CLAUDE_CODE_*at spawn); editors table with "open in editor"; a live check of all 9 agent CLIs. Reuseskey_store.t27,queen-contributor-keys.t27,specs/provider/*and the trios SR-00 key model - M12b. Provider router so a pane never hits "organization has disabled Claude subscription access" (owner screenshot 2026-10-19). Stage 1: per-pane profile (Anthropic API key, or z.ai
ANTHROPIC_BASE_URL+glm-4.7-flash), subscription variables stripped, live pre-flight probe. Stage 2: a local Anthropic-compatible router in .t27 (Free Claude Code style) that walks the existing chain inspecs/automation/agent-provider-chain.t27usingspecs/provider/transform.t27, with failover on 429/529/402; blocked on t27b socket primitives if missing (file a t27c issue, no foreign code) - M13. T27 OS on the FPGA, stage 1: UART VT100 shell on the AX7203 whose screen is produced by the pure-logic specs (
vt,pane_state, spaces list, agent table) lowered to the WASM board cell or Verilog; feasibility note first - M14. T27 OS on the FPGA, stage 2: VGA text-mode scan-out (timing, font ROM, black-and-white palette) in .t27, simulation-checked first; the owner has a VGA monitor ready; connector or adapter and pin map are not established yet (never guess pins)
Done when (acceptance)
- A tap on any of the 27 petals on the AX7203 opens that petal's card menu.
- Back returns to the triangle.
- trios renders the same spec with no hand-kept petal table left.
How to verify
test-reportonspecs/t27f/petal_menu.t27andspecs/t27f/frontend.t27icarus-lowerableonpetal_menu.t27, thensiliconfor M6
Risks / blockers
- The TRI CLAW GitHub App is v0.2 (TRI CLAW: all CI gates in one GitHub App (TRI-27 / Trinity S3AI), spec-first, sellable #9271).
- No HDMI or framebuffer spec exists yet.
- Board time is needed for M6 and M7.
Status update — 2026-10-19 (end of day, handed to the Queen)
Landed or green:
- PR feat(t27f): T27 OS home -- the 27-petal triangle menu as one spec #10783 (window, base branch
feat/t27os-petal-menu): CI green on4c451b9cf(Spec Guards, Seal Coverage). Carries the M11 glyph cache and sidebar truncation, window-state and model restore (304836bc3), and the refreshed t27f seal. The branch was rebased twice; old tips0db6bdfee,8f67a31f1, new tip4c451b9cf(stacked branches usegit rebase --onto). - PR feat(t27os): PTY server that owns the agent terminals and restores them (Refs #10782) #10934 (PTY server, herdr-style crash restore): merged. PR feat(t27f): petal_menu.t27 is Icarus-lowerable and simulates 10/10 (M4 of #10782) #10786 (M4 icarus-lowerable): merged.
- The Mac app runs:
/tmp/hx/gw/T27OS.app, launched withopen; re-link after a lab build withld(see the feat(t27f): T27 OS home -- the 27-petal triangle menu as one spec #10783 conversation).
Open PRs: - feat(t27os): key manager, KEYS tab, per-pane profile, router decisions (Refs #10782) #10977 (KEYS tab, key manager, editors, agent check, M12; label
no-auto-merge). It replaces feat(t27os): KEYS tab, Keychain key manager, open-in-editor, agent check #10959 and feat(t27os): key manager, KEYS tab, per-pane profile, router decisions (Refs #10782) #10972, both closed. A second session also opened fix(t27os): CTL verbs match whole words; escaped keys and expect; agent check table #11015 for the same work; keep one of them. - fpga: T27 OS over UART on the AX7203 (feasibility + shell spec) (Refs #10782) #10949 (draft, FPGA feasibility note for M13/M14): trinity-fpga lessons in section 6, SiI9134 init read as text from ALINX demo
11_1_hdmi_out. Not done: I2C FSM, board top, bitstream, silicon readback. The IDCODE difference is only the silicon-revision nibble of the same XC7A200T.
Red on the base, not caused by the stacked PRs:t27b-native-ratchet(UNLISTED 25, STALE 4 forspecs/t27os/*indocs/reports/t27b_expectations.json),duplicate-bodies(11 bodies:chan,clamp01,digits_val,flag_bit,scale, sixws_*),Verilog widths(glass_window.t27: 1535999,pty_server.t27: 9175039).
Not started: M12b stage 2 (local provider router), HDMI capture tool, TMDS and pin table for the AX7203, real logos (needs owner confirmation of file name, source and size).
Delegated to the Queen: the three red gates, M11 resize work, M13/M14 next step (see the Refs comments on this issue).
Constraints: only .t27 (no hand-written code in other languages); builds, tests and synthesis run on the Railway lab, never on the Mac; key values are never printed, committed or read by agents.
Reactions are currently unavailable
Activity
gHashTag commentedon Oct 19, 2026
Repository created: https://github.com/gHashTag/t27os (home spec
specs/os/home.t27, test-report 2/2). M1 spec PR: #10783. TRI CLAW management is pending the App (v0.2, #9271); no hand-written workflow YAML was added.feat(t27f): petal_menu.t27 passes t27c icarus-simulate, 10/10 on Icarus
feat(t27f): petal_glass -- trios glassmorphism, 27-block assembly and…
gHashTag commentedon Oct 19, 2026
Status: glassmorphism and animation are ported (PR #10783, commit 822f488).
specs/t27f/petal_glass.t27(moduleT27fPetalGlass) draws the home as the trios app does, every pixel from the spec:used frompetal_menu.t27, not copied;LogoAnimationfrom photon_trinity_canvas.zig ported exactly (800-unit fly-in, phase 1 at 4.5/s, spring k 28 damping 0.86);g_wave_transitionfade (10 frames) of a blackGlass panel holding the 3x3 empty card slots.Lab: 6/6 tests, 11498 runtime asserts (the anti-aliased edge distance agrees with petal_menu's ray-cast hit test).
t27c gen+ zig render 270 frames of 960x540 piped to ffmpeg in 29 s: a 9 s clip of assembly, hover sweep, tap on petal 13, menu in, back, menu out.Next: M2 (the trios host draws the generated code), M4 (icarus-lowerable petal_menu, in progress).
feat(t27f): petal_menu.t27 is Icarus-lowerable and simulates 10/10 (M…
feat(t27os): native macOS glass window in t27, built by t27b (Refs #1…
feat(t27os): wide card grid -- the widget panel spans 880 x 440 of th…
feat(t27os): top bar, trios sidebar mode, Dock icon drawn in t27
feat(t27os): glass window behaves as trios -- title bar, crossfaded c…
fix(t27os): title logo in petal_menu style at 14 pt, 4x frames, home …
seal(t27f): re-seal frontend.t27, stale since 2e561c6 -- Seal Coverag…
feat(t27os): fold into the trios compact panel (Refs #10782)
feat(t27os): strict black full screen, point-for-point and hairline (…
feat(t27os): brand-mark logo and a single TRINITY label (Refs #10782)
120 remaining items
gHashTag commentedon Oct 19, 2026
T27 OS agent check on the Mac, part C: work saved here
Session: part C of the T27 OS keys task (the real agent check). Parts A, B and the editors stayed with keys-2 (PR #10959).
What was done
specs/t27os/agents.t27on the Mac, through the PTY server. The result table and the five findings are in the side-session notes (agent-check-2026-10-19.md) and in the PR body.feat/t27os-petal-menu, labelno-auto-merge): the client mode of the PTY server learns whole-word verbslist | spawn | kill | read | keys | expect.keysdecodes\e \r \n \t \\ \xHHand appends CR unlessT27OS_RAWis set.expectpolls every 500 ms with ANSI stripped,T27OS_EXPECTis the text,T27OS_WAITthe timeout (default 30 s); exit 0 when found, 1 on timeout.specs/t27os/pty_logic.t27(4 new tests). Lab run: 17 passed, 0 failed. The server builds to an arm64 Mach-O on the lab.Findings that stay open
~/.t27os/pty.sockcan exist with no listener (connect refused). The app connects only at start and then falls back to offline echo mode; it never reconnects. Fixed by hand on the Mac by starting a fresh server; the app needs a reconnect path.ANTHROPIC_*/CLAUDE_CODE_*to its panes, so Claude Code in a pane answers "Not logged in". Restarting underenv -ifixed it. A scrub in the server is in flight in a separate session (local_4e996ab3).--resume <sid>) and Aider (--restore-chat-history) only. Gemini, OpenCode, Cursor and Copilot are not recorded; this needs each CLI's--helpon the Mac.pty_protoMISMATCH is a separate defect, not touched.~/.t27os/hooks.jsonstill points at a removed/private/tmp/t27os-run/t27os-server.Not verified
keys/expectverbs were never run live on the Mac: the lab has no link step, so the live rerun of the agent check withexpectis still owed.Red checks on #11015 that are inherited from the base (not caused by it, not blessed)
glass_window,pty_server)specs/t27os)They need a one-time ledger refresh on the base branch.
Dependency worth knowing
specs/t27os/does not exist onorigin/master(0 entries).feat/t27os-petal-menuis 38 commits ahead and PR #10783 is OPEN and DIRTY. Queen bees branch from master, so the follow-up issues filed from this note name that dependency and stay in the Queen's blocked column until the stack lands.gHashTag commentedon Oct 19, 2026
Delegated to the Queen from the agent check (part C): #11030 (clear the three inherited red checks in the t27os specs) and #11031 (terminal pane reconnect after a stale socket or a late server). Both wait for #10783, because specs/t27os is not on master yet. Resume ids for Gemini, OpenCode, Cursor and Copilot stay with whoever has those CLIs on the Mac (needs each --help).
gHashTag commentedon Oct 19, 2026
Also open: PR #11029 (PTY server child strips Claude Code session variables before spawn; matcher tests 21/21 on the lab with three negative controls; server side not run on macOS; label no-auto-merge).
gHashTag commentedon Oct 19, 2026
Parent: mega epic #11037.
Merge master into feat/t27os-petal-menu: t27b ledger rows in path ord…
feat(t27f): T27 OS home -- the 27-petal triangle menu as one spec (#1…
ci: width ledger names the base's bit_diff and lut_treemap widget buf…
t27: queen-contributor-keys v3 names its flag and the rule that reads…
ci: t27b ledger names the t27os and widget specs the reference passes…
ci: t27b ledger keeps its one-row-per-line layout (Refs #10782)
t27: hive-proxy.t27 carries the proxy's own error types and every err…
hive-proxy.t27: who may spend a stored provider key over the Anthropi…
Merge master into claude/t27os-keys-v3: the T27 OS stack onto the mer…
T27 OS: key manager and KEYS tab, key orchestration, glass window, 27…
T27 OS: matte glass everywhere in a window, black in full screen, pan…