← Changelog

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

The survey Board across the whole Lossless tree, with the repo scope picker beside the search box, above Open, In flight, Done and Parked columns of context-v docs and a list of open checkboxes

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-knots shows 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.