Skip to content

home: needs you becomes two groups — the questions that stopped something, then the landings to check - #900

Merged
santoshkumarradha merged 8 commits into
devfrom
home/needs-groups
Sep 11, 2026
Merged

santoshkumarradha merged 8 commits into
devfrom
home/needs-groups

Conversation

@santoshkumarradha

Copy link
Copy Markdown
Member

Part of #884. Lane H of the home-and-tasks wave — option A for the needs you panel.

What was true

needs you drew three sources as one flat list, oldest first. Every landing carried the
same sub-line — landed unchecked · enter to look, nine words repeated on nine rows — so
nine items were eighteen lines and pushed where you were off a forty-row frame. A live
consent question sorted UNDER week-old landings. A landing wore the amber ?, which means
stopped on you, over work that had already finished. And the same landing could be drawn
twice on one panel, and again in since you left.

What is true now

One panel, two groups. needs you is the live questions — a conversation stopped on a
question or a consent card, a watch that needs somebody — longest wait first, wearing the
mark. Under them a dim group line, to check · N at the left and
finished, nobody has checked it at the right, holding every task whose call is the
person's, newest first, one line each: the name, N files · age. The row under the
cursor grows a second line — the report's first sentence and the task's own two answers.

 needs you · 1
  tell me when CI goes red on master                     1m
   May I re-run the typecheck job to see whether it i… enter

 to check · 4                finished, nobody has checked it
   Cut every list on the task surface over to… 4 files · 28m
   Read what the four nearest competitors charge          7h
   Take the fortnight's spend apart by model     1 file · 1d
   Write the page about reading a task, and e… 17 files · 1d
   Seventeen sections, each under two… 1 accept  2 not right
   1 older · tasks

The one abstraction

homePanelGroup — a run of rows at the FOOT of a panel's list, drawn under a dim line of
its own, which folds before the panel gives up a row above it. It is the panel's own
shape said one level down
, so the squeeze needed no second rule: the group's rows are
last, the ordinary bottom-up cut spends them first, and when none is left the panel's own
fold reads 4 to check · 1 older · tasks instead of 4 more. shrink() got simpler as a
result. Any panel can take one.

homeCell.grows is the second: a row one line tall whose panel reserves the line it grows
into, so the column keeps its shape whichever row the cursor stands on — no relayout on an
arrow key.

What it deleted

needsUncheckedWord, the amber mark on a landing, needsItem.answers and the
draw-the-chips-on-the-first-row flag, and the old homeGridAnswer walk. Drawing and
routing now call ONE function (homeAnswerAt), so the chip on the screen and the key a
person presses cannot be two different rows.

Two defects the tmux drive found

  • A live conversation waiting on nothing but its own landing was drawn twice.
    Agent.waitingOnPerson reads a pending decision last and has no question object to write
    for it, so such a session says waiting on you · your call on <title> with
    PresenceQuestion zero — and that was drawn as a question above the to check row for
    the same work. The landing's row is the one that survives; it has the work's own name, its
    files and its answers.
  • a/n cannot be answer keys on home. The landing keys are task-states' own letter
    for letter everywhere else, but home's box promises "type to search or start something
    new" and a bare letter there always types. So the WORDS stay the task's own
    (session.TaskAsk) and the KEY is the drawn digit — the one printable exception home
    already makes — mapped back to LandingYesKey/LandingNoKey before the answer leaves
    the surface. Verified on disk:
    {"kind":"landing","id":1,"key":"a","from":"home","decidedBy":"person"}.

Also

  • since you left drops a landing to check is showing, and takes it back when it is
    answered or ages out.
  • The pulse's N want you is now the sum of both groups, through the panel's own
    needsCallOf/needsAged rather than a second test.
  • The demo home grew four more unchecked landings across three projects, so the fixture
    draws a group rather than a group of one.
  • Manual: home.md (needs you is the questions alone, a new to check section),
    keys.md, places.md; docs/design/home-mission-control/DESIGN.md laws 5, 7 and 8.

🤖 Generated with Claude Code

santoshkumarradha added a commit that referenced this pull request Sep 11, 2026
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
santoshkumarradha and others added 7 commits September 11, 2026 11:41
…ething, then the landings to check

WIP checkpoint on the lane branch. The panel gains a group mechanism
([homePanelGroup]): a run of rows at the foot of a panel drawn under a dim
line of its own, which folds before any row above it gives way.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Blocking first, the group line's shape and that it is not a stop, the chips on
one row of the frame, `since you left` stepping aside, the squeeze order and the
pulse's count.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
`home.md`'s `needs you` section is the questions alone; a new `to check` section
is the landings, their one line at rest, the line the cursor grows and the two
keys that answer it. `keys.md` and `places.md` stop saying `the top question`.
DESIGN.md laws 5, 7 and 8 say the group's squeeze, the answering row and that a
landing wears no mark.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The fixture had ONE `unverified` row, which draws a `to check` group of one —
the shape a group line, its count, its clause and its fold are all untested by.
Four more, deliberately unlike each other: seventeen files, no files, a name
long enough to be cut, and one old enough to age onto the fold.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Driving the binary found the same landing on two rows of `needs you`: a live
conversation waiting on nothing but its own landing writes `waiting on you ·
your call on <title>` with NO question object, so it was drawn as a question
above the `to check` row for the same work. The landing's row is the one that
survives.

Also from the drive: the group line stands at the panel's own left edge, and a
landing's files and age are one clause, `3 files · 1d`.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…ne is the report

A BARE LETTER ON HOME ALWAYS TYPES — the box promises "type to search or start
something new" and the promise has no asterisk — so `[a]`/`[n]`, the landing's
keys everywhere else, cannot be answer keys on this screen. The WORDS stay the
task's own ([session.TaskAsk]); the key a person presses here is the drawn
digit, which is the one printable exception home already makes, and it is mapped
back to the landing's own key before the answer leaves the surface.

And the line the cursor grows is the report's first sentence, with the engine's
reason standing in only where the work left no report.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
… landing, and three counts agree

A fresh-eyes pass over the diff found six things worth fixing and they share one
cause: `to check` gives one conversation more than one answerable row, and every
reading built when a conversation had at most one was wrong in a new way.

- `needsLandingsSpeakFor` is the ENGINE'S SENTENCE and not an absence. Reading
  "no question object" as "only waiting on its landing" took a conversation
  stopped at its FUEL GATE or on a sub-harness offer off home entirely: both
  lanes bank no card at the desk and say so. The test is now
  `your call on <title of one of its own landings>`.
- `needsCallOf` refuses an archived conversation, so work somebody put away is
  neither a row of `to check` nor a want.
- `needsWants` is the ONE reading of how many rows of `needs you` a conversation
  is, and the pulse counts from it — it used to count the conversation AND its
  landing for the row it had just dropped.
- `answerSlot` keys a sent answer by the QUESTION and not by the conversation.
  Answering a second landing forgot the first, whose chips came back and whose
  key sent a second answer for a question already answered from here.
- `needsOpenWord` no longer claims a landing says `enter`, and
  `needsCallAnswers` states why every ask that reaches home is
  [session.TaskAskCheck] (the index carries no merge, ground or phase facts, so
  `taskAskOf` can only take its check arm) — which is why
  `needsLandingQuestion` names one kind rather than guessing between two.
- DESIGN.md law 7 said the keys are the question's own, which is what this change
  deliberately departs from for a landing. It says which, and why.
- `taskLedgerKey` is the one spelling of a piece of work's identity across home's
  columns; it was written out three times.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@santoshkumarradha
santoshkumarradha marked this pull request as ready for review September 11, 2026 16:21
@santoshkumarradha
santoshkumarradha merged commit f9b3183 into dev Sep 11, 2026
3 checks passed
@santoshkumarradha
santoshkumarradha deleted the home/needs-groups branch September 11, 2026 16:22
@santoshkumarradha santoshkumarradha added the area:chat The v3 surface a person sits in front of (internal/tui3) label Oct 3, 2026
@santoshkumarradha santoshkumarradha added this to the Chat & connections milestone Oct 3, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:chat The v3 surface a person sits in front of (internal/tui3)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant