Skip to content

feat: Locked Spec wave 1 — the shell: five circles, seven tabs, My things, Stop, one nav tree - #63

Merged
emooreatx merged 3 commits into
mainfrom
feat/locked-spec-wave1
Sep 20, 2026
Merged

emooreatx merged 3 commits into
mainfrom
feat/locked-spec-wave1

Conversation

@emooreatx

Copy link
Copy Markdown
Contributor

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

piece where proof
One nav tree 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 Atlas CirclesNavTest: 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 resolves
The shell ui/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, StopSheet screenshots in a comment
Gating deleted ComingSoonPlaceholder, the SOON badge, SubstrateGate, the six rail groups, EpistemicSidebar, the five placeholder-only screens (agents list, video, private groups, voting, participate) removed, not restyled; their concepts arrive with waves 2/3
Harness testing/gate/nav_map.py derives [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 hops
45 keys, 29 languages circle subtitles and governance lines, tabs, instruments, the honest empties, My things, Stop's three facts check_localization_sync --strict, gates green

Decisions worth a look

  • People is Contacts. A tab holding exactly one card shows that card directly; Delegations moved to Rules (who may act for whom becomes a property of a contact's row in wave 2), so People is the contact list in every circle but Communities & Businesses (where Users joins it as a list of two).
  • Trust roots live in Everyone › Rules (spec §6): Accord ("Trust Root") is placed there, not under an instrument.
  • Stop on a bare node says nothing is running for you and stays where it always is. On an agent build it is a three-fact ConfirmSheet then the emergency shutdown.
  • Card screens keep their own top bars for now and drop their back arrow inside the shell (LocalIsCompactWindow is 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.
  • No counts in the rail ("31 people") until the wire supplies per-circle counts — a made-up number would be a lie in a rail.

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 now circle_<slug> → tab_<id> → … and btn_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_family etc. btn_nav_drawer_open is btn_my_things; btn_nav_back still appears where there is somewhere to go back to. /screen names, entry screens and every contacts_* / btn_brightness_* tag are unchanged.

Verified

  • :shared:desktopTest green; desktop, Android and iOS-simulator Kotlin compile; packaging/gates.sh [OK] every release gate passed.
  • Desktop live on a scratch node: every circle × tab, My things → This node → Nodes → back, a list card → screen → back, Stop's node sheet, both grounds.
  • Five-platform run on the branch: link in a comment when it lands.

🤖 Generated with Claude Code

https://claude.ai/code/session_01Xv1s8qrUoPoFX2MHZUPA15

emooreatx and others added 3 commits September 19, 2026 20:18
…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
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, you can upgrade your account or add credits to your account and enable them for code reviews in your settings.

@emooreatx

Copy link
Copy Markdown
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

@emooreatx
emooreatx merged commit 45adeb6 into main Sep 20, 2026
10 checks passed
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.

1 participant