feat: read-only global view across all boards #13

Merged
jwarykowski merged 2 commits from feat/global-view into master 2026-07-12 12:04:52 +00:00
jwarykowski commented 2026-07-12 11:56:22 +00:00 (Migrated from github.com)

summary

See every board at once — the default plus all projects/*.md — in one read-only aggregate.

  • --all launches the global view; A toggles in/out of any board (the focused board is saved first).
  • v cycles four groupings: project → category → priority → table. Rows carry a [project] tag in the non-project groupings; the table gets a project column.
  • Read-only by construction: a dedicated updateGlobal key handler with no mutation cases, and the aggregate is never written back to disk (items from many files must not be flattened into one).
  • Command API: shepherd list --all [--json] mirrors it, adding a project field per item.

internals

  • store.Boards / LoadAll / BoardsLatestMod — enumerate (glob projects/*.md, skip *-archive.md), aggregate with Source set, and drive the multi-file reload check.
  • todo.Item.Source — derived from the filename, never serialized.
  • todo.SortBySource — orders by board first so each project stays contiguous under its header (comparator extracted from Sort).
  • Reuses groupOf/groupCount/listView/tableView/visible — new grouping + data source only, not a new screen.
## summary See every board at once — the default plus all `projects/*.md` — in one **read-only** aggregate. - `--all` launches the global view; `A` toggles in/out of any board (the focused board is saved first). - `v` cycles four groupings: **project → category → priority → table**. Rows carry a `[project]` tag in the non-project groupings; the table gets a `project` column. - **Read-only by construction**: a dedicated `updateGlobal` key handler with no mutation cases, and the aggregate is *never* written back to disk (items from many files must not be flattened into one). - Command API: `shepherd list --all [--json]` mirrors it, adding a `project` field per item. ## internals - `store.Boards` / `LoadAll` / `BoardsLatestMod` — enumerate (glob `projects/*.md`, skip `*-archive.md`), aggregate with `Source` set, and drive the multi-file reload check. - `todo.Item.Source` — derived from the filename, never serialized. - `todo.SortBySource` — orders by board first so each project stays contiguous under its header (comparator extracted from `Sort`). - Reuses `groupOf`/`groupCount`/`listView`/`tableView`/`visible` — new grouping + data source only, not a new screen.
Sign in to join this conversation.
No description provided.