Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 24 additions & 0 deletions docs/changes/unreleased/955-question-evidence-split.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
---
kind: changed
title: An answer's evidence stands beside the answers, and the page a question opens is two panes
pr: 955
surface: [chat]
invalidates:
- "A question's panel drew no evidence at all — the diagram, the diff or the table an answer brought was reachable only through `o open full`. No longer true: where the answers carry blocks and the frame is a hundred columns or wider, the panel splits and the evidence of the answer the pointer is on stands beside the list; narrower, it unfolds under that answer's own row. `railSlimFloor` (100) is the one reading of `two columns fit`, for the task column and for a question alike."
- "The page `o` opens was one scrolling column of folding sections, one per answer, opened and folded with `→`/`←` and with `o` again. It is two panes now — the answers on the left, the evidence of the one you are standing on on the right — and one column only where the body is under a hundred cells. Nothing folds: the answer the pointer is on is the open one."
- "On that page `→` opened the answer you were on and `←` folded it. `→ detail` now hands the arrows to the evidence pane, `↑↓ scroll` moves it, and `← back to the answers` hands them back."
- "On that page a digit answered the question at once. It walks the pointer to that answer now and `enter` takes it; on the block above the box a digit still answers at once."
- "The page drew `‹ back` and named the asker's answer `my pick`. It draws neither: the recommendation wears `◆ recommended` on its own row in every view, and `esc` is the way out."
- "The asker's two-pane layout block went side by side above a hundred columns and stacked below. It decides by its content now — each pane's widest line fits its half, or the two stack — so a layout drawn in the pane beside a list is laid out on what it is rather than on how wide the window is."
- "A question put off drew its fold rule wherever the block stood, including under the page that was showing it. The page's own question no longer draws that rule: `o` folds what it opens, and `space open` under an open page was offering what was already open."
- "The tmux suite waited for `[o] open it`, a spelling the surface stopped using when the keys lost their brackets. The needle is `o open full`."
---

A question is a decision handed to a person with its evidence attached, and the
evidence is per answer — so it is drawn where the answer is, at every size the
question has. One account of the case (`then ·`, `why this one ·`, `would switch
if`, `confidence ·`) and one renderer for the blocks now serve the panel's pane,
the panel's unfold, the page's pane and the page's one column; before this the
page spelled the labelled lines itself and the panel spelled its one-line case
itself, and the two disagreed about whether a model's `If you…` was joined onto
`would switch if` twice.
5 changes: 4 additions & 1 deletion docs/design/questions/DESIGN.md
Original file line number Diff line number Diff line change
Expand Up @@ -181,9 +181,12 @@ never resolves a task by itself.
- **line** — one row + one answers row, pinned above the box. Permission, confirmation, ratify.
- **card** — head · reason/attribution · one row per option (word · consequence · pick mark; a long word wraps, never cut; a checklist's rows carry its ticks and a digit toggles) · answers row. Transcript, home strip, other window, room foot. Every option is a row: the engine's cap (4, 8 on a checklist) is the only bound. Keys are digits `1`… in order; `ask` renumbers whatever the model wrote and hands the answer back in the model's own names. The asker's `form: line` is honoured only for plain options with no structured input; width decides the rest.
- **pointer** — every question with answers has the person's pointer (`▸` on a card, the band on a line): `↑↓`/`←→`/`tab` walk it, `enter` takes it, a digit takes at once. It starts on the asker's pick, which says `suggested` in its consequence column; on a confirmation it starts on the answer that loses nothing. The task record page (enter on a needs-you row) draws the node's landing question above its foot and takes its keys through the block's door. Landed 2026-09-10.
- **room** — a page over the conversation (the task-room idiom): head and attribution, the question's own `Attach` as ONE dim-titled section (`what it showed you`) above the answers, options as sections (`▸`/`▾`, bodies, blocks), `x` compare on the asker's dimensions (fallback: `+`/`−` lines), `c` comment on the focused part, `?` ask back (one exchange per option, answered in place, closes with the question), the foot composes the answer (pick · with · notes · scope), `d` you decide shows the pick and reason first, `D` sets the dial for the kind. **The pointer walks it**: `↑↓` choose (the foot says so), `→` opens the answer it is on and `←` folds it, `enter` takes it, a digit answers at once; a click on an answer's ROW moves onto it and opens it, and a second click on that row is `enter` — one press to read, one to decide. **An open answer reads in three tiers**: the label ordinary ink (as on a card — the hue is on the marks alone since the 2026-09-11 colour ruling below), the body ink, and every aside dim behind its own word — `then ·` the consequence, `why this one ·` the pick's reason, `would switch if` (the asker's sentence joined onto the clause, never `if If`) — one blank row closing each open answer.
- **room** — a page over the conversation (the task-room idiom), and the owner's page pick A of 2026-09-11: **two panes with a seam between them** where the body is `railSlimFloor` cells or wider — the answers on the left with the question's own `Attach` under them as ONE dim-titled section (`what it showed you`), and the evidence of the answer the pointer is on beside them — and **one column** narrower than that, the same evidence unfolded under that answer's own row. Nothing folds: the answer the pointer is on IS the open one. `x` compare on the asker's dimensions (fallback: `+`/`−` lines), `c` comment on the focused part, `?` ask back (one exchange per option, answered in place, closes with the question), the foot composes the answer (pick · with · notes · scope), `d` you decide shows the pick and reason first, `D` sets the dial for the kind. **The pointer walks it**: `↑↓` choose (the foot says so) and the answer it is on is always in view, `enter` takes it, a digit walks to it rather than answering, `→ detail` hands the arrows to the evidence pane and `← back to the answers` hands them back; a click on an answer's ROW moves onto it, and a second click on that row is `enter` — one press to read, one to decide. **The page keeps its own key road** — the two tiers written into its foot's rule, in place of the legend.
- **panel split** — the same reading on the block above the box (preview picks A and B, 2026-09-11): where the ANSWERS carry blocks, a panel `railSlimFloor` cells or wider draws the list on the left and the pointer's own evidence on the right, and a narrower one unfolds that evidence under the pointer's row — the row giving up its consequence to it rather than saying it twice. A panel never takes more than half the frame, and what will not fit is cut on a dim row saying how much is left and `o open full`. **A sentence about the whole QUESTION crosses the seam**, at the frame's own width, inside the frame — the clock's `any key stops the clock · you can still change the answer afterwards` (#954) is the worked example: in a column half the panel wide it is cut mid-word, in the pane beside the list it reads as the pointer's own answer, and under the frame it would sit in the second key tier. On the page the same sentence stands with the reason, above the panes. One account of the case and one block renderer serve both, and the page (`internal/tui3/questionevidence.go`).
- **sheet** — many questions from one step or many hands: grouped by shape, `✓`/`?` per row, `enter` opens one, `s` sends what is answered and delegates the rest, "same answer for all like this" on a group; dependent questions withdraw with a reason and the sheet re-flows.

**An answer's evidence reads in three tiers**, wherever it is drawn: the label bold in ordinary ink (as on a card — the hue is on the marks alone since the 2026-09-11 colour ruling below), the body ink, and every aside dim behind its own word — `then ·` the consequence, `why this one ·` the pick's reason, `would switch if` (the asker's sentence joined onto the clause, never `if If`), `confidence ·` how sure it is — then the blocks, a blank row above each.

Every form folds down (room → card → line → chip) and opens up (`enter`/`o`).
The chip lives in the status line: `<GlyphNeedsHuman> 3 questions · <key>` and
is reachable from every page; home lists every open question under its
Expand Down
58 changes: 57 additions & 1 deletion docs/design/questions/GALLERY.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,8 @@ the findings the suite is red on, and they are here for the same reason the rest
are: what a lane owes next is easier to see than to describe.

> **THESE PICTURES WERE TAKEN BEFORE THE OWNER'S RULINGS OF 2026-09-11 AND HAVE
> NOT BEEN RE-TAKEN.** What moved: every question now hangs in the one frame
> NOT BEEN RE-TAKEN** — except the eight under *The evidence beside the answers*,
> which are of the drawing those rulings asked for. What moved: every question now hangs in the one frame
> (`internal/tui3/frame.go`), the question's violet is retired and its amber is
> on the three marks only, the keys stand in two tiers, the receipt opens with
> `✓` rather than the word `decided`, a permission's pointer is placed by the
Expand Down Expand Up @@ -70,6 +71,9 @@ and when: `start it in 27s · your rule`.*

## The room

**The room below is the page as it was before 2026-09-11.** It is two panes now, and
the pictures of that are further down under *The evidence beside the answers*.

A page over the conversation, in the task-room idiom. The turn under it keeps
streaming; `esc` restores the conversation with its scroll untouched.

Expand Down Expand Up @@ -104,6 +108,58 @@ differently spelled. One of them is owed a deletion.*
![the answer reaches the asker](screens/the-room-compares-annotates-asks-back-and-sends-reply.png)
*The model's next turn, with the pick and the typed words in the tool result behind it.*

## The evidence beside the answers, and the page as two panes

**These eight are the only pictures in this folder taken after the owner's rulings of
2026-09-11**, and they are taken a different way: `~/af-qv-reports/R/drive.sh` opens
this worktree's own binary in a tmux session on a throwaway home with a fixture named
in the environment (`AFORGE_QUESTION_DEMO`, `internal/tui3/questiondemo.go`), so they
cost no model and can be re-taken in seconds. The marks that show as `▯` are the plain
glyph floor rendering in a font the renderer does not have; the terminal draws `?`, `◆`
and `✓`.

![the evidence beside the answers](screens/the-evidence-stands-beside-the-answers-panel-140.png)
*The block above the box, at 140 columns (preview pick A). The answers keep the left,
and the evidence of the one the pointer is on — its word, what it means, `then ·`,
`why this one ·`, `would switch if`, `confidence ·`, and the diagram it drew — stands
beside them. Walking the pointer changes the right-hand side and nothing else.*

![unfolded under its row](screens/the-evidence-stands-beside-the-answers-unfold-96.png)
*The same question at 96 columns (preview-narrow pick B). There is no room for two, so
the evidence unfolds under the answer's own row — and that row gives up its `then` line
to it rather than saying it twice. A panel never takes more than half the frame, so the
rest is cut on a row that says how much is left and the way to it:
`… 4 more lines · o open full`.*

![the page as two panes](screens/the-page-is-two-panes-140.png)
*`o`, at 140 columns (page pick A). The same split with the frame's height: the rules
above and below meet the seam at `┬` and `┴`, the foot's first row says what `enter`
would send, and the second carries the page's own two tiers of keys in place of the
legend.*

![the arrows move into the evidence](screens/the-page-is-two-panes-detail-140.png)
*After `→`. The foot swaps `↑↓ choose · … · → detail` for `↑↓ scroll · ← back to the
answers`: while the arrows are the pane's they move the pane, and the key that gives
them back is on the row. A key that is not drawn does nothing.*

![one column](screens/the-page-is-two-panes-column-96.png)
*The page at 96 columns. One column, the answer the pointer is on unfolded under its
row, the others each keeping their row — the same lines as the pane, stacked.*

![the phone](screens/the-page-is-two-panes-phone-56.png)
*And at 56. The head's attribution wraps to a row of its own, the second tier of keys is
given up from the right, and the evidence is still whole.*

![the layout block](screens/the-page-is-two-panes-layout-140.png)
*A layout block on the page: the asker's two drawings side by side, which they are here
because each one's widest line fits its half — the block decides on its content now,
not on a width.*

![the plain tier](screens/the-page-is-two-panes-ascii-110.png)
*110 columns on the light theme with the plain glyph floor: the rules are `-` runs, the
seam is a blank column, and the junctions are edge characters. A column of `|` down
every row is punctuation a screen reader says aloud on every line.*

## Fill in the blanks

![the card first](screens/a-sentence-with-holes-is-filled-in-card.png)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
aforge fri 5:52pm
 Home  new conversation ×  + 
────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

 · the engine on spark is an older aforge and is still holding work — it picks up this build the moment it goes quiet

┌─┐ ┌─ ┌─┐ ┌─┐ ┌─┐ ┌─┐
├─┤ ├─ │ │ │ └─┤ ├─╴
└─┘ │ └─┘ │ └─┘ └─┘
openai/gpt-4o-mini · custom crew

› 
try "what is in this folder" · /task <brief> starts work · / shows commands

╭─  which store should the ledger sit on? ──────────────────────────────────────────────────────────────────────── aforge asks · waiting ─╮
│ a schema change is next and it is cheaper before there are rows │
│ │ │
│  ▸ 1 postgres  recommended │ postgres │
│ 2 sqlite beside the project │ Rows already carry a foreign key into it and the migration is one file. │
│ 3 a file per day  │ + one place to back up │
│ 4 something else…  │ - another service to run locally │
│ │ │
│  just this once · for this project │ then · the ledger and the rest of the project share one connection │
│ │ why this one · because it is the only store the reporting job already reads │
│ │ would switch if the ledger ever has to run on a machine with no server on it │
│ │ confidence · fairly sure │
│ │ │
│ │ what it would look like │
│ │  app --> pg --> report │
╰─ ↑↓ choose · enter take it · esc later ──────────────────────────────────────────────────────────────────────────────────────────────────╯
 o open full · c change · ? ask back · d you decide · D decide these from now on · t how long · 1–3 jump
 which store should the ledger sit… · alt+a · idle
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading