improvise-5xbq: resolve::page_rows is now the one home of the page-scroll
rule; the TUI's Move calls it instead of repeating visible_rows * 3 / 4.
A lockstep case pages (PgDn/PgUp, Ctrl-d/Ctrl-u) on a non-square window,
8 rows by 3 columns, and pins the TUI's landing rows as well as comparing
host and client, since one home moves both ends together. Both faults
the ticket injected (page_rows = window_rows / 2; paging by window_cols)
now fail at the first PgDn, before and after the move to one home.
improvise-1c5m: the help overlay draws the mode's own hint (hint_line,
the string #hint carries) in a sticky footer, so a narrow window whose
app bar wraps under #help still says how to page. Playwright case at
600px, red at base, and red again with the footer made non-sticky.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VdfEGXA7aJ6ftMsCc9PJze
- agent-rules "GitHub": authors reply on the PR to every finding they
address (commit, or why declined); reviewers read existing reviews first
with scripts/pr-reviews, answer every Codex review on its thread, and
state the head SHA they reviewed. SKILL.md points reviewers there.
- AGENTS.md "ADR pull requests": numbered open questions, the user answers
on the PR, "What the user decided", merge only on "Approved" (PR #122).
SKILL.md "Shepherding" points to it.
- Fix a pointer to the renamed policy section that wrapped across a line
break and so escaped the rename.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VdfEGXA7aJ6ftMsCc9PJze
Resolved context/test-evidence/clients.md: gh/main's version, whose
improvise-w7qd/5kdr paragraphs continue the entry above the conflict,
followed by this branch's two improvise-0j0f/4img entries.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VdfEGXA7aJ6ftMsCc9PJze
- User ruling: work is not done until it is in a PR and that PR has
merged. Stated once, in AGENTS.md's repo-owned section outside bd's
markers (renamed "Repository policy over the Beads blocks"); agent-rules
"Do not merge" and SKILL.md "Shepherding" point to it.
- "Who owns what" no longer says kb facts are batched two sentences
before saying they are not: repo-map lines are batched, kb facts are
written as they arrive.
- improvise-8haj: the ID audit takes its file list from git ls-files
(tracked + untracked, minus ignored), so build output such as
harness/serve and other agents' worktrees are not scanned; grep -d skip
passes over the .claude/skills symlinks.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VdfEGXA7aJ6ftMsCc9PJze
B clears the cell while A's editor is open, then A commits. The commit is
refused as RecordMoved. The store no longer holds the record, but
App::resolve_record falls back to the layout and still resolves it, and its
counter has moved. Under the claim-at-commit rival, the same commit is accepted
and re-creates the cell as 42. Corrects the evidence that reasoned RecordGone.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VdfEGXA7aJ6ftMsCc9PJze
21x21 grid, 8x8 window, start (10,10): moves land at 10+d, page-scroll at
10+page_rows(8)*d, jumps at 0/20. grid_move's page rule is page_rows(),
which the test reads rather than restating. Doubled move-selection, a
one-row scroll-rows and a page-size-blind page-scroll each fail.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VdfEGXA7aJ6ftMsCc9PJze
fresh_view points the new slice at the document's view instead of folding
a SwitchView from ViewState::default(), which recorded a visit to
"Default" that never happened. The records-grid enumeration now checks
each cell's CellId against its column's RecordCol rather than only that
it is Some.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VdfEGXA7aJ6ftMsCc9PJze
ApplyAndClearDrill walked pending_edits, a HashMap, and applied each edit on
its own. A rename moves the row's cells, so a measure edit replayed after it
wrote the old key. That left a ghost record there and a stale value in the moved
record. A second rename on the same row always found nothing and was dropped.
Across rows, a swap lost one record's data in either order.
RecordRewrite::of builds each row's final record once. It reads unedited values
off the model before anything is written, and applies every rename to every
cell. RecordRewrite::merged puts every clear before every write, in snapshot row
order. The plain records path calls the same function with its one edit, so
rename_record_coordinate and the drill's own copy are gone (gotcha 19).
Reasoning: context/code/command.md, RecordRewrite.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VdfEGXA7aJ6ftMsCc9PJze
The evidence file is gh/main plus this branch's five entries, inserted at
their original anchor. command.md no longer claims a client's history
cannot hold a dead name: fresh_view seeds a phantom Default frame
(improvise-lxg0, not fixed here).
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VdfEGXA7aJ6ftMsCc9PJze