|
| 1 | +--- |
| 2 | +title: "Workspace-scope legibility — empty workspaces and stale org restores should explain themselves, not look broken" |
| 3 | +lede: "Switching to humain-vc (0 orgs) made the workbench look dead: 'Filter 0 orgs', 'no orgs match', and a red 'organization not found: new-america' for the restored last-worked org. All three are per-workspace visibility working correctly — the plan is to make the correct behavior say so." |
| 4 | +date_created: 2026-07-24 |
| 5 | +date_modified: 2026-07-24 |
| 6 | +authors: |
| 7 | + - Michael Staton |
| 8 | +augmented_with: |
| 9 | + - Claude Code on Claude Fable 5 |
| 10 | +semantic_version: 0.0.0.1 |
| 11 | +tags: |
| 12 | + - Plan |
| 13 | + - Augment-It |
| 14 | + - Org-Workbench |
| 15 | + - Workspaces |
| 16 | + - Usability |
| 17 | +status: Draft |
| 18 | +--- |
| 19 | + |
| 20 | +# Workspace-scope legibility |
| 21 | + |
| 22 | +## Diagnosis (live-verified 2026-07-24) |
| 23 | + |
| 24 | +`humain-vc` has **0** organizations in the canonical layer; all 319 carry |
| 25 | +`client_access: [reach-edu]`. With the workspace on humain-vc the workbench |
| 26 | +showed: an empty roster ("no orgs match" — wrong message, right data), and |
| 27 | +"organization not found: new-america" (App restores the last-worked org from |
| 28 | +localStorage; the org exists but isn't visible from this workspace). The |
| 29 | +system behaved exactly per [[../../CLAUDE.md]]'s canonical-tagging model; |
| 30 | +only the *messaging* failed. Operator's read: "no organizations are loading." |
| 31 | + |
| 32 | +## Steps |
| 33 | + |
| 34 | +1. **Roster empty-state distinguishes empty-workspace from empty-filter.** |
| 35 | + `OrgRoster.svelte`: when the server returned 0 rows, render "Workspace |
| 36 | + ‹client› has no organizations yet" (+ a hint that ➕ New organization |
| 37 | + creates the first one, and that other workspaces' orgs are hidden by |
| 38 | + design). "no orgs match" stays only for a non-empty roster narrowed to |
| 39 | + nothing by the filter box. |
| 40 | +2. **Active-org restore becomes per-workspace.** `App.svelte`: key the |
| 41 | + localStorage slot by client (`augment-it:org-workbench:active-org:<client>`) |
| 42 | + so switching workspaces restores *that workspace's* last org (or nothing) |
| 43 | + instead of failing on another's. Migrate the old un-keyed value once. |
| 44 | +3. **Cross-workspace not-found reads as scope, not error.** When a restored |
| 45 | + load fails, clear the stored slot and show a neutral note ("‹slug› isn't |
| 46 | + visible in workspace ‹client›") instead of the red error band. Manual |
| 47 | + loads keep the error styling — a click that fails IS an error. |
| 48 | +4. **Verify** — svelte-check + build; walk-through: on humain-vc the roster |
| 49 | + explains itself and no red error appears; back on reach-edu the roster |
| 50 | + and last-worked org return. Frontend-only; no service or container work. |
| 51 | +5. Changelog rider on the day's entries; commit per [[git-conventions]]. |
| 52 | + |
| 53 | +## Non-goals |
| 54 | + |
| 55 | +- No cross-workspace org browsing or client_access editing — visibility |
| 56 | + stays per-workspace by design ([[../issues/Merge-Organizations-Or-People-Non-Destructive-Dedupe]] |
| 57 | + and the unlock flow own the sharing questions). |
| 58 | +- No workspace-switcher changes in the shell. |
0 commit comments