Post-attention follow-ups: All-sessions view fix, wiki-lint CI parity, terminal/attention wiki pages #199

Merged
clawdie merged 3 commits from chore/post-attention-followups into main 2026-06-25 22:58:41 +02:00
Owner

Post-attention / post-terminal-capture follow-ups. Fresh branch off current main (includes the #195 attention fix), 3 commits / 6 files / +370−74.

Commit What
0b9ea33 fix(tui) Make the "All sessions" aggregated view reachable again + regression test
6de4133 chore(ci) Add the wiki-lint step to CI so it matches local ci-checks.sh
20b65f9 docs(wiki) New decision pages terminal.md (terminal-capture layer from #193) and operator-attention.md; fix state-machine drift in glasspane.md

Notes for review

  • The TUI fix restores reachability of the cross-session aggregated view and adds a guard test so it can't silently regress again.
  • terminal.md documents the capture/signature/edge-alert layer that landed in #193; operator-attention.md captures the attention-tier model (#191/#195). The glasspane.md edit corrects state-machine drift against the shipped code.
  • CI wiki-lint parity closes the gap where the markdown/wiki lint only ran locally.

Gates (verified green on the combined branch)

  • cargo fmt --all --check (checked by exit code, not piped)
  • cargo clippy --all -- -D warnings
  • cargo test — 292 pass
  • markdown lint + wiki-lint — 144 pass

🤖 Generated with Claude Code

Post-attention / post-terminal-capture follow-ups. Fresh branch off current `main` (includes the #195 attention fix), 3 commits / 6 files / +370−74. | Commit | What | |---|---| | `0b9ea33` fix(tui) | Make the "All sessions" aggregated view reachable again + regression test | | `6de4133` chore(ci) | Add the `wiki-lint` step to CI so it matches local `ci-checks.sh` | | `20b65f9` docs(wiki) | New decision pages `terminal.md` (terminal-capture layer from #193) and `operator-attention.md`; fix state-machine drift in `glasspane.md` | ### Notes for review - The TUI fix restores reachability of the cross-session aggregated view and adds a guard test so it can't silently regress again. - `terminal.md` documents the capture/signature/edge-alert layer that landed in #193; `operator-attention.md` captures the attention-tier model (#191/#195). The `glasspane.md` edit corrects state-machine drift against the shipped code. - CI `wiki-lint` parity closes the gap where the markdown/wiki lint only ran locally. ### Gates (verified green on the combined branch) - ✅ `cargo fmt --all --check` (checked by exit code, not piped) - ✅ `cargo clippy --all -- -D warnings` - ✅ `cargo test` — 292 pass - ✅ markdown lint + `wiki-lint` — 144 pass 🤖 Generated with [Claude Code](https://claude.com/claude-code)
clawdie added 3 commits 2026-06-25 22:57:56 +02:00
Once any pane carried a session_id, rebuild_session_list() forced
session_filter = Some(first), so the operator could never get back to the
aggregated "All sessions" view — Tab only cycled individual sessions.
Documented as a known bug in GLASSPANE-TUI-ENHANCEMENTS.md.

Model the session cycle as [All, s1, s2, ...]: index 0 is a synthetic "All
sessions" entry (filter = None), any other index scopes to sessions[i-1].
Two helpers encode the mapping:
  - session_count() = sessions.len() + 1 (All is always present)
  - apply_session_filter() maps session_idx -> filter (0 => None)

Behavior changes:
  - On connect, the operator now lands on "All sessions" (was: the
    alphabetically-first session). The aggregated view is the more useful
    default and is always reachable via Tab/BackTab.
  - The position indicator now shows for any cycle > 1 item, so the
    "All (1 of 2)" hint appears even with a single session.

self.sessions still holds real session ids only (no sentinel string), so the
sorted/deduped invariant is unchanged.

Tests:
  - rebuild_session_list_dedupes_and_sorts: updated for the new default +
    offset mapping (index 1 => s1, index 2 => s2).
  - all_sessions_view_is_reachable_with_sessions_present: new regression test
    covering connect-defaults-to-All and the Tab cycle All -> s1 -> s2 -> All.
  - attention_bar_ignores_other_session_panes: comment corrected (rebuild no
    longer selects the first session).

19/19 TUI tests pass; fmt + clippy (-D warnings) clean.

(Sam & Claude)
scripts/ci-checks.sh runs five gates; .forgejo/workflows/ci.yml ran only four
— wiki-lint --strict was missing. quality-gates.md states "ci.yml encodes the
same checks" as local, which was not quite true. Add the wiki-lint step to the
markdown job so CI matches local the day a runner is registered.

wiki-lint is pure POSIX sh (grep/awk/sed/find), so it runs in the existing
node:20 container — no new image or job.

This does not by itself stop drift reaching main: as quality-gates.md notes,
no Forgejo Actions runner is registered, so nothing enforces CI server-side
today. The local pre-push hook remains the active enforcement layer; this
change ensures CI is ready to take over once a runner exists. Verified
wiki-lint passes clean on main (137 pass / 0 fail).

(Sam & Claude)
docs(wiki): add terminal + operator-attention pages, fix glasspane drift
Some checks are pending
CI / rust (pull_request) Waiting to run
CI / markdown (pull_request) Waiting to run
CI / port (pull_request) Waiting to run
CI / agent-jail-pkgs (pull_request) Waiting to run
20b65f9577
Two new decisions captured, one page corrected:

terminal.md — the terminal-capability decision. Why colibri-tui and the agents
it supervises need modified-key reporting (Tab vs Shift-Tab, n vs N, Enter),
why the choice fell on Kitty, the tmux extended-keys + csi-u passthrough for
the in-tmux workflow, raw-vs-tmux distinction, the SSH xterm-kitty terminfo
gotcha, and pi's identical requirement. The decision is about capability;
Kitty is the instance.

operator-attention.md — the shipped attention system as one decision. Attention
as a derived view over the state machine (not a sixth variant), the TUI
bar/jump/filter/row-highlight, and the #193 terminal-capture + signature-triage
+ edge-triggered alerts. Records the has_attention session-filter bug and fix.
Lists what is still open (outbound push, answer-from-dashboard).

glasspane.md — corrected drift. The real AgentState enum is {Idle, Working,
Blocked, Done, Error}; Stalled is a derived flag, not a variant (the page's
diagram omitted Blocked and listed Stalled as a variant). The "Usability
roadmap (TODO)" listed the attention half as not-yet-built; it shipped via
#191/#193, so those items move to operator-attention.md and the roadmap keeps
only the genuinely-unbuilt direction.

index.md — two table rows (also satisfies the orphan-page check).

Verified: prettier-clean on all 4 files; wiki-lint --strict clean (144 pass /
0 fail, up from 137); no dangling refs, no orphans, no resurrected names.

(Sam & Claude)
clawdie merged commit c679e13307 into main 2026-06-25 22:58:41 +02:00
clawdie deleted branch chore/post-attention-followups 2026-06-25 22:58:41 +02:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: clawdie/colibri#199
No description provided.