feat: Locked Spec wave 1 — the shell: five circles, seven tabs, My things, Stop, one nav tree - #63
Merged
Merged
Conversation
…d spec's shell (wave 1) The phone is the design; the desktop is the phone with room. Five circles live in a fixed bottom bar (a left rail at ≥900dp, with subtitles and the instruments under it), the seven tabs scroll above the content (all fit at ≥700dp), and the two things that are not a circle — who you are, and the way to stop — sit in the top bar where a thumb can always reach them. Never a sixth item, never reordered, never a drawer. ONE NAV TREE. `ui/nav/CirclesNav.kt` places every surface exactly once — in a tab for some circles, or under one of the five instruments behind My things — from the design's Card Atlas. The two independent axes that filed Config under one group while it hung off a parent in another are gone, and so are the fourteen chevron-only orphans. `CirclesNavTest` pins it: every surface placed once or a flow, the node build a subset of the agent build, People/Safety/Rules/Record never empty, the honest empties where the design put them. A tab with one card shows it (People IS Contacts); with several, rows; with none, the honest sentence — Decisions in Just me saying there is nobody here to decide with is a finished screen, not a gap. DELETED, NOT RESTYLED: the SOON badge, `ComingSoonPlaceholder`, the substrate gate enum, the greyed rail states, the six rail groups and `EpistemicSidebar`, and the five placeholder-only screens (agents list, video, private groups, voting, participate) whose concepts arrive with the tabs in waves 2 and 3. Stop everything is on every circle and every tab: a three-fact ConfirmSheet then the emergency shutdown on an agent build; on a bare node the sheet says nothing is running for you, and the button stays where it always is. Tags: circle_<slug>, tab_<id>, btn_my_things, nav_instrument_<id>, btn_stop_everything, and nav_epistemic_<surface> wherever a surface is listed. `/screen` names and every existing screen tag are unchanged; the brightness strip keeps its btn_brightness_* tags under My things. Co-Authored-By: Claude Opus 5 (1M context) <[email protected]> Claude-Session: https://claude.ai/code/session_01Xv1s8qrUoPoFX2MHZUPA15
…; My things, instrument, row The runner walks to a flow's first screen from the client's own tables, and those tables changed shape. `nav_map.py` now parses `CirclesNav.kt`: `[circle_<slug>, tab_<id>, nav_epistemic_<surface>]` for a placed surface, `[btn_my_things, nav_instrument_<id>, nav_epistemic_<surface>]` for an instrument one, with the node build a subset (`--node`). A tab whose only card is the surface shows it directly, so that chain ends on the tab — a `nav_epistemic_contacts` row there would be a ghost, and `expected_tail()` is what check_csd_v3 compares now. `screen_atlas.py` stops looking for chevrons and group headers; the CSDs' prose names the new hops; all six validate. Co-Authored-By: Claude Opus 5 (1M context) <[email protected]> Claude-Session: https://claude.ai/code/session_01Xv1s8qrUoPoFX2MHZUPA15
Circle subtitles and governance lines, the seven tab names, the five
instruments, the honest empties per tab (with Just me and Family's Decisions
and Just me's Files said differently), My things, Stop everything and its
three facts — through `localize.py` into the 28 locales and the four
bundles. Three governance fragments the reviewer refused as fragments were
sharpened into sentences ("anyone can stop something; only a majority can
undo that") and re-reviewed in every locale.
`docs/FSD-ui-language.md` §5a describes the shell; `client/VENDORING.md` §1
re-recorded; `packaging/gates.sh` green.
Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
Claude-Session: https://claude.ai/code/session_01Xv1s8qrUoPoFX2MHZUPA15
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
Contributor
Author
|
Five-platform run on this branch: https://github.com/CIRISAI/CIRISClient/actions/runs/35482279146 — Linux + Android, Windows, macOS + iOS simulator, gallery: all green, first attempt. The entry screens and the walk are unchanged by the shell; the bottom bar (phone) and the rail (desktop) both come up in every leg's screenshot. 🤖 Generated with Claude Code |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Wave 1 of the Locked Spec — the shell
Builds on #62 (wave 0) and #45 (Delegation, Constitutional, capacity attestations, the environment card). Done when: you can move between all five circles and all seven tabs with empty tabs rendering honestly — verified on desktop by driving all 35 circle × tab cells through the automation server on a bare node: 12 show a screen, 12 a list of cards, 11 the honest empty.
What landed
ui/nav/CirclesNav.kt— every surface placed once, in a tab for some circles or under one of five instruments, from the design's Card AtlasCirclesNavTest: no orphans, no double placements, node build ⊂ agent build, People/Safety/Rules/Record never empty, the honest empties where the design puts them;CirclesNavCopyTest: every derived key resolvesui/shell/CirclesShell.kt(top bar: My things avatar, circle name + governance line, Stop everything; tab strip scrolling <700dp; bottom bar <900dp, 208dp rail ≥900dp with subtitles and the instruments),TabPage,InstrumentPage,MyThingsSheet,StopSheetComingSoonPlaceholder, the SOON badge,SubstrateGate, the six rail groups,EpistemicSidebar, the five placeholder-only screens (agents list, video, private groups, voting, participate)testing/gate/nav_map.pyderives[circle_<slug>, tab_<id>, nav_epistemic_<s>]/[btn_my_things, nav_instrument_<id>, nav_epistemic_<s>]from the tree; a single-card tab shows the card so its chain ends on the tab (expected_tail)test_nav_map.py, all six CSDs validate against the new hopscheck_localization_sync --strict, gates greenDecisions worth a look
Accord("Trust Root") is placed there, not under an instrument.ConfirmSheetthen the emergency shutdown.LocalIsCompactWindowis true at every width there); wave 2 removes the per-screen bars. The shell's back appears only when a card was opened from a list or an instrument.For the agent team (CIRISAgent issue to follow)
nav_group_*and the chevrons are gone.nav_epistemic_<surface>tags are unchanged wherever a surface is listed; the hops are nowcircle_<slug> → tab_<id> → …andbtn_my_things → nav_instrument_<id> → nav_epistemic_<surface>. Manage Nodes:btn_my_things → nav_instrument_this_node → nav_epistemic_nodes. The layer hubs:circle_family → tab_rules → nav_epistemic_layer_familyetc.btn_nav_drawer_openisbtn_my_things;btn_nav_backstill appears where there is somewhere to go back to./screennames, entry screens and everycontacts_*/btn_brightness_*tag are unchanged.Verified
:shared:desktopTestgreen; desktop, Android and iOS-simulator Kotlin compile;packaging/gates.sh[OK] every release gate passed.🤖 Generated with Claude Code
https://claude.ai/code/session_01Xv1s8qrUoPoFX2MHZUPA15