Scope the Survey to Any Repo and Everything Under It
One picker on every survey dashboard narrows the page to a pseudomonorepo and all its children, like astro-knots and every site in it.
- Path
- changelog/2026-11-02_04.md
- Authors
- Michael Staton
- Augmented with
- Claude Code on Claude Opus 5.5
- Tags
- Survey · Dashboards · Pseudomonorepos
Why Care?
The survey reads every
context-v/
folder in a tree: 1,069 docs across 110 repos in the Lossless tree. That's the point, and it's also the problem. When you want to know what's open in one family of projects, a page of everything buries it.
The Lossless tree is nested. A pseudomonorepo like astro-knots holds a dozen sites, and ai-labs holds dididecks-ai, which holds its own client sites. The useful question is rarely "this one repo" and rarely "everything". It's "this repo and everything under it". The survey can now answer that.
What's New?
-
A scope picker on all three views. Board, Ledger and Map share one control. It lists repos as they nest on disk, each with the number of docs at or below it, so you can see where the thinking is before you pick.
-
Pick a parent, get its children. Choosing
astro-knotsshows astro-knots and every site and MCP inside it. On the Board that took the Open column from 434 docs to 91. -
Find a repo by typing. A search box at the top of the tree narrows it as you type and opens the branches that match.
-
The scope lives in the link. It's saved in the address (
#scope=astro-knots), so a reload keeps it and you can send someone straight to one corner of the tree.
How it Works
The tree is built from the parent of each repo that the scanner already records, not from folder depth. A site at
astro-knots/sites/fullstack-vc
sits one level under astro-knots, even though it's three folders down. Repos with no docs at or below them are left out. Each level is indented 10px, because the dashboard is already crowded.
What follows the scope on each view:
| View | Follows the scope |
| Board | Columns, the open-checkbox list, and the stat strip |
| Ledger | Doc table, task list, KPI counts, and the repo × lifecycle rows. Clicking a row sets the scope |
| Map | The picked branch plus the path down to it, and the heat grid |
Under the Hood
The picker is one shared module,
scope_picker.py
, built the same way as the copy-path button. It renders the tree and exposes
cvScope.get()
,
cvScope.has(repo)
and a
cv-scope
event. Each view listens for the event and filters with
has()
.
It replaces two flat dropdowns that couldn't show a parent with its children. The Board's dropdown tried to indent with spaces, which browsers collapse inside a
<select>
. The Ledger's matched one repo exactly.
Still tree-wide for now: the Board's folder chips and the Ledger's Folders and Health panels.