@hachej/boring-workspace 0.1.64 → 0.1.65

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/dist/FileTree-B_fRS4Om.js +230 -0
  2. package/dist/MarkdownEditor-C55gVDyW.js +743 -0
  3. package/dist/WorkspaceLoadingState-D3i4X-eH.js +847 -0
  4. package/dist/WorkspaceProvider-Ddx7GByq.js +8770 -0
  5. package/dist/app-front.d.ts +79 -2
  6. package/dist/app-front.js +3110 -2467
  7. package/dist/app-server.d.ts +2 -2
  8. package/dist/app-server.js +6 -4
  9. package/dist/boring-workspace.css +2 -1
  10. package/dist/charts.d.ts +6 -1
  11. package/dist/charts.js +131 -138
  12. package/dist/plugin.d.ts +64 -1
  13. package/dist/plugin.js +32 -0
  14. package/dist/rolldown-runtime-Dqa2HsxW.js +20 -0
  15. package/dist/{runtimeEnv-HolIkcoB.d.ts → runtimeEnv-CU-c4kaV.d.ts} +7 -0
  16. package/dist/server.d.ts +2 -2
  17. package/dist/server.js +4 -3
  18. package/dist/testing-e2e.d.ts +5 -0
  19. package/dist/testing-e2e.js +33 -42
  20. package/dist/testing.d.ts +6 -1
  21. package/dist/testing.js +9474 -10814
  22. package/dist/utils-BRcxFdrz.js +8 -0
  23. package/dist/workspace.css +2756 -290
  24. package/dist/workspace.d.ts +132 -15
  25. package/dist/workspace.js +568 -734
  26. package/docs/plans/archive/CODE_OWNERSHIP_CLEANUP_PLAN.md +1 -1
  27. package/docs/plans/archive/DECLARATIVE_LAYOUT_MIGRATION.md +4 -4
  28. package/docs/plans/archive/GENERIC_EXPLORER_PLUGIN_PLAN.md +10 -10
  29. package/docs/plans/archive/PLUGIN_MODEL.md +37 -37
  30. package/docs/plans/archive/WORKSPACE_V2_PLAN.md +2 -2
  31. package/package.json +50 -50
  32. package/dist/FileTree-DjhAzlg3.js +0 -315
  33. package/dist/MarkdownEditor-CeN7n6mw.js +0 -610
  34. package/dist/WorkspaceLoadingState-D4SB2awA.js +0 -867
  35. package/dist/WorkspaceProvider-CEZUOy1M.js +0 -8725
  36. package/dist/utils-B6yFEsav.js +0 -8
@@ -367,7 +367,7 @@ Phase 5 is opportunistic — none of it blocks Phases 1–4.
367
367
  1. `packages/workspace/e2e/fixture/**` + migrated generic specs.
368
368
  2. Reduced `apps/boring-macro-v2/e2e/**` containing only macro-specific specs.
369
369
  3. Playground mock backend deduplicated with workspace testing utility.
370
- 4. Follow-up extraction beads:
370
+ 4. Follow-up extraction tasks:
371
371
  - core server helpers from full-app
372
372
  - delete macro `tabBus`; route via existing UI bridge
373
373
  - generic queue/rate-limit primitive from macro refresh flow
@@ -2,7 +2,7 @@
2
2
 
3
3
  > **⚠ SUPERSEDED 2026-04-29 — content merged into [PLUGIN_MODEL.md](./PLUGIN_MODEL.md) §"Phase 1.5: Consumer migration".**
4
4
  >
5
- > Per user decision (v7.4 merger): the two plans had substantial scope overlap (macro migration, ChatCenteredShell removal, plugin extraction). Folded into one mega-plan + one epic (boring-ui-v2-j9p7) with a single acceptance gate. Phase 1.5 in PLUGIN_MODEL.md is the canonical reference; phase beads are j9p7.24-29 + j9p7.18-20 (the latter reframed under Phase E).
5
+ > Per user decision (v7.4 merger): the two plans had substantial scope overlap (macro migration, ChatCenteredShell removal, plugin extraction). Folded into one mega-plan + one epic (boring-ui-v2-j9p7) with a single acceptance gate. Phase 1.5 in PLUGIN_MODEL.md is the canonical reference; phase tasks are j9p7.24-29 + j9p7.18-20 (the latter reframed under Phase E).
6
6
  >
7
7
  > Epic boring-ui-v2-zrby closed as merged.
8
8
  >
@@ -203,14 +203,14 @@ export { definePlugin, definePanel, PluginError, ... } from "./plugin"
203
203
  export { CatalogRegistry, useCommands, useActivePanels, useCatalogs, ... } from "./plugin"
204
204
  ```
205
205
 
206
- ## Phase breakdown — 7 child beads
206
+ ## Phase breakdown — 7 child tasks
207
207
 
208
208
  A. **Decompose chat shells into per-pane folders + bridge/**
209
209
  - `git mv` `components/chat/{SessionBrowser, ChatStagePlaceholder, SurfaceShell, WorkbenchLeftPane}.tsx` into per-pane folders under `panes/`. Each pane gains a `definition.ts` exporting a `PanelConfig`.
210
210
  - Create `panes/chat/ChatPanel.tsx` (thin wrapper around `@boring/agent`'s ChatPanel + workspace integrations) + `definition.ts`.
211
211
  - `git mv` `components/chat/{uiCommandStream, uiCommandDispatcher}.ts` → `bridge/`.
212
212
  - Update internal imports.
213
- - **Don't touch `ChatCenteredShell.tsx` or `ChatTopBar.tsx` yet** — they stay in `components/chat/` until later beads.
213
+ - **Don't touch `ChatCenteredShell.tsx` or `ChatTopBar.tsx` yet** — they stay in `components/chat/` until later tasks.
214
214
 
215
215
  B. **Wire core panel registrations in WorkspaceProvider**
216
216
  - Create `registry/coreRegistrations.ts` exporting `coreWorkspacePanels: PanelConfig[]` aggregating the 4 core panel defs.
@@ -270,7 +270,7 @@ A and B can run in parallel. C depends on A. D, E, F can run in parallel after A
270
270
 
271
271
  ## Ship criteria
272
272
 
273
- - All 7 phase beads closed.
273
+ - All 7 phase tasks closed.
274
274
  - Three apps run on declarative layouts in production.
275
275
  - `ChatCenteredShell` and `ChatShellContext` deleted from the tree.
276
276
  - Public API exposes Tier 1 / Tier 2 / Tier 3 entries with jsdoc.
@@ -392,9 +392,9 @@ Avoid breaking current consumers in the first pass.
392
392
  3. `DataCatalog` and `DataCatalogPane` root exports are removed now; use data catalog plugin helpers instead.
393
393
  4. Move app/plugin imports to `plugins/data-explorer` or package-root exports.
394
394
 
395
- ## Implementation Beads
395
+ ## Implementation Tasks
396
396
 
397
- ### Bead 1 — Explorer plugin skeleton
397
+ ### Task 1 — Explorer plugin skeleton
398
398
 
399
399
  - Add `plugins/data-explorer/src` with current `DataExplorer` code moved mostly
400
400
  intact.
@@ -403,14 +403,14 @@ Avoid breaking current consumers in the first pass.
403
403
  `plugins/data-explorer`.
404
404
  - Tests: current DataExplorer tests pass unchanged after path update.
405
405
 
406
- ### Bead 2 — Data catalog plugin composition
406
+ ### Task 2 — Data catalog plugin composition
407
407
 
408
408
  - Change the `@hachej/boring-data-catalog` package to import explorer APIs from `@hachej/boring-data-explorer`.
409
409
  - Split data catalog helpers into `catalogs.ts` if useful.
410
410
  - Keep `front/components/data-catalog` removed; do not add compatibility wrappers back.
411
411
  - Tests: data catalog package tests and public API tests.
412
412
 
413
- ### Bead 3 — Tree adapter design
413
+ ### Task 3 — Tree adapter design
414
414
 
415
415
  - Add `ExplorerTreeAdapter`, `ExplorerNode`, section/folder node types.
416
416
  - Add tree state hook or extend explorer state carefully, including per-section
@@ -418,7 +418,7 @@ Avoid breaking current consumers in the first pass.
418
418
  - Do not rewrite filesystem tree yet.
419
419
  - Tests: adapter contract, expansion, per-node loading, abort handling.
420
420
 
421
- ### Bead 4 — Feret project tree spike
421
+ ### Task 4 — Feret project tree spike
422
422
 
423
423
  - In Feret v2/app playground, build a project tree using `ExplorerTreeAdapter`.
424
424
  - Prove mixed rows and section filters.
@@ -426,14 +426,14 @@ Avoid breaking current consumers in the first pass.
426
426
  - Output is either a shippable Feret integration PR or a plan update with the
427
427
  gaps found during the spike.
428
428
 
429
- ### Bead 5 — Optional filesystem reuse
429
+ ### Task 5 — Optional filesystem reuse
430
430
 
431
431
  - Evaluate whether filesystem tree should remain custom or wrap explorer tree.
432
432
  - Decision trigger: after the Feret project tree spike, compare required file
433
433
  tree behavior (path validation, file events, expand-to-file, selection, editor
434
434
  lifecycle) against explorer tree behavior.
435
435
  - Exit criteria: record either `keep custom filesystem tree` or `migrate
436
- filesystem tree to explorer tree` before the legacy data-catalog removal bead.
436
+ filesystem tree to explorer tree` before the legacy data-catalog removal task.
437
437
  - Only migrate if benefits outweigh loss of file-tree-specific behavior.
438
438
 
439
439
  ## Non-goals
@@ -441,8 +441,8 @@ filesystem tree to explorer tree` before the legacy data-catalog removal bead.
441
441
  - Do not make every visual component a plugin. `@boring/ui`, layout,
442
442
  chrome hosts, registries, bridge, and provider stay front-owned.
443
443
  - Do not force filesystem to depend on data catalog.
444
- - Do not rewrite file tree in the first bead.
445
- - Do not remove public exports without an explicit breaking cleanup bead.
444
+ - Do not rewrite file tree in the first task.
445
+ - Do not remove public exports without an explicit breaking cleanup task.
446
446
  - Do not allow reverse imports from `@hachej/boring-data-explorer` into domain plugins. Add or
447
447
  extend invariant lint so allowed direction is domain plugin -> data explorer package,
448
448
  never data explorer package -> data catalog package, filesystemPlugin, or app plugins.
@@ -453,5 +453,5 @@ filesystem tree to explorer tree` before the legacy data-catalog removal bead.
453
453
  - Domain-named components do not live under `front/components`.
454
454
  - Explorer APIs are reusable by data catalog, filesystem, and Feret without
455
455
  cross-domain plugin imports.
456
- - Existing public API remains source-compatible until an approved breaking bead.
456
+ - Existing public API remains source-compatible until an approved breaking task.
457
457
  - Feret Project Tree requirements are representable without forking explorer UI.
@@ -4,7 +4,7 @@
4
4
  > `../../INTERFACES.md` and `../../PLUGIN_STRUCTURE.md` for the current concise
5
5
  > contract reference.
6
6
 
7
- **Status:** v7.7 — round-7 governance: ChatPanel via dependency injection (NOT plugin); baseline protocol uses `git worktree` (NOT `git stash`); systemPrompt ordering reaffirmed (bootstrap first, createAgentApp second); excludeDefaults semantics corrected (UI off; tools stay); j9p7.30 sed→explicit Edits; bead-level dep + path fixes integrated.
7
+ **Status:** v7.7 — round-7 governance: ChatPanel via dependency injection (NOT plugin); baseline protocol uses `git worktree` (NOT `git stash`); systemPrompt ordering reaffirmed (bootstrap first, createAgentApp second); excludeDefaults semantics corrected (UI off; tools stay); j9p7.30 sed→explicit Edits; task-level dep + path fixes integrated.
8
8
 
9
9
  > **2026-04-30 routing update:** any later references in this historical plan
10
10
  > to `PanelConfig.filePatterns`, `fileFallback`, or `PanelRegistry.resolve`
@@ -2111,7 +2111,7 @@ reviewers don't think they were missed.
2111
2111
  | **Plugin-vs-substrate tool name collision** | A plugin shipping a tool called `read` replaces substrate's. Late-wins logged. Could confuse the LLM if names diverge mid-session. | When agent-authored plugins (Phase 3) make accidental collision likely. |
2112
2112
  | **Catalog adapter memory** | If an adapter holds a long-running subscription (e.g., websocket to a remote search service), there's no place to clean up because there's no `onUnmount`. | When a real adapter needs it. Adding a teardown hook on `CatalogConfig` is non-breaking. |
2113
2113
  | **Non-React stateful adapters need lifecycle** | Gemini P1: an adapter that wants to subscribe to `events.on('file:moved', …)` to invalidate its cache has nowhere to do it. Module-scope `events.on(...)` fires globally for all hosts. Lazy on-first-call leaks (no unsubscribe). | First plugin that needs it. Re-introduce `Plugin.onMount(ctx) → cleanup` (we cut it in v6 because Phase 1 plugins are all React-component-based or factory-injected; that assumption breaks for stateful adapters). |
2114
- | **`registerAgentRoutes` lacks `disableDefaultFileTools`** | Codex round-4 P1: `createAgentApp` accepts `disableDefaultFileTools` (verified `createAgentApp.ts:47`) but `registerAgentRoutes` (the embedded-Fastify path used by `apps/full-app/src/server/main.ts:383`) does NOT — it always includes filesystem tools (`registerAgentRoutes.ts:94`). The "harness opt-out" promise only holds for the standalone `createAgentApp` path. | Add `disableDefaultFileTools` option to `registerAgentRoutes` plumbed through to its internal tool-catalog construction. **Out of scope for Phase 1** macro acceptance (macro uses `createWorkspaceAgentApp` which uses `createAgentApp`, not `registerAgentRoutes`). Add a follow-up bead under the j9p7 epic OR Phase 2 if a `registerAgentRoutes`-using host needs the opt-out. |
2114
+ | **`registerAgentRoutes` lacks `disableDefaultFileTools`** | Codex round-4 P1: `createAgentApp` accepts `disableDefaultFileTools` (verified `createAgentApp.ts:47`) but `registerAgentRoutes` (the embedded-Fastify path used by `apps/full-app/src/server/main.ts:383`) does NOT — it always includes filesystem tools (`registerAgentRoutes.ts:94`). The "harness opt-out" promise only holds for the standalone `createAgentApp` path. | Add `disableDefaultFileTools` option to `registerAgentRoutes` plumbed through to its internal tool-catalog construction. **Out of scope for Phase 1** macro acceptance (macro uses `createWorkspaceAgentApp` which uses `createAgentApp`, not `registerAgentRoutes`). Add a follow-up task under the j9p7 epic OR Phase 2 if a `registerAgentRoutes`-using host needs the opt-out. |
2115
2115
  | **Build-time enforcement of client/server split** | Documented invariant; not a custom lint rule. | If accidental cross-imports become common. |
2116
2116
  | **Plugin versioning / compat** | `Plugin.version` field cut. No compat negotiation. | Phase 2 npm distribution. |
2117
2117
  | **Layout migrations** | Renaming a panel id breaks cached dockview layouts. Same problem as today; not made worse by plugin model. | When layouts become stable enough to merit migration tooling. |
@@ -2496,7 +2496,7 @@ export { definePlugin, definePanel, PluginError, … } from "./plugin"
2496
2496
  export { CatalogRegistry, useCommands, useActivePanels, useCatalogs, … } from "./plugin"
2497
2497
  ```
2498
2498
 
2499
- ### Phase 1.5 breakdown — 7 phase beads (A through G)
2499
+ ### Phase 1.5 breakdown — 7 phase tasks (A through G)
2500
2500
 
2501
2501
  A and B can run in parallel. C depends on A. D, E, F can run in parallel after A+B+C. G depends on D+E+F.
2502
2502
 
@@ -2519,7 +2519,7 @@ A and B can run in parallel. C depends on A. D, E, F can run in parallel after A
2519
2519
  │ - Update internal imports │
2520
2520
  │ - DON'T touch ChatCenteredShell.tsx or ChatTopBar.tsx yet — │
2521
2521
  │ they stay until Phase G/C respectively. │
2522
- Bead: j9p7.24 │
2522
+ Task: j9p7.24 │
2523
2523
  │ │
2524
2524
  │ Note: Step 0 already ran the workspace reorg into v7.6 layout, │
2525
2525
  │ so source paths use front/ prefix. ArtifactSurfacePane.tsx and │
@@ -2542,7 +2542,7 @@ A and B can run in parallel. C depends on A. D, E, F can run in parallel after A
2542
2542
  │ mount, BEFORE bootstrap() runs │
2543
2543
  │ - Test: render WorkspaceProvider with no plugins; assert the │
2544
2544
  │ panel registry has the 4 core ids │
2545
- Bead: j9p7.25 (depends on j9p7.24 closing for the actual │
2545
+ Task: j9p7.25 (depends on j9p7.24 closing for the actual │
2546
2546
  │ definition.ts files to import) │
2547
2547
  └──────────────────────────────────────────────────────────────────┘
2548
2548
 
@@ -2557,7 +2557,7 @@ A and B can run in parallel. C depends on A. D, E, F can run in parallel after A
2557
2557
  │ - Export ResponsiveDockviewShell from package barrel with jsdoc │
2558
2558
  │ explaining Tier 2 │
2559
2559
  │ - Add §"Three-tier API" to packages/workspace/README.md │
2560
- Bead: j9p7.26 │
2560
+ Task: j9p7.26 │
2561
2561
  └──────────────────────────────────────────────────────────────────┘
2562
2562
 
2563
2563
 
@@ -2569,7 +2569,7 @@ A and B can run in parallel. C depends on A. D, E, F can run in parallel after A
2569
2569
  │ - Confirm e2e tests (apps/workspace-playground/e2e/*.spec.ts) │
2570
2570
  │ still pass │
2571
2571
  │ - Document any gotchas for the next two app migrations │
2572
- Bead: j9p7.27 │
2572
+ Task: j9p7.27 │
2573
2573
  └──────────────────────────────────────────────────────────────────┘
2574
2574
 
2575
2575
 
@@ -2597,7 +2597,7 @@ A and B can run in parallel. C depends on A. D, E, F can run in parallel after A
2597
2597
  │ - macro's uiBridge.ts is ALREADY deleted in Step 1a (NOT here │
2598
2598
  │ — gemini P2 catch). │
2599
2599
  │ - Confirm boring-macro e2e tests pass │
2600
- Beads: j9p7.18 (plugin module), j9p7.19 (app refactor), │
2600
+ Tasks: j9p7.18 (plugin module), j9p7.19 (app refactor), │
2601
2601
  │ j9p7.20 (e2e gate). Reframed under Phase E. │
2602
2602
  └──────────────────────────────────────────────────────────────────┘
2603
2603
 
@@ -2608,7 +2608,7 @@ A and B can run in parallel. C depends on A. D, E, F can run in parallel after A
2608
2608
  │ - Rewrite apps/full-app/src/front/main.tsx to use the │
2609
2609
  │ appropriate declarative layout │
2610
2610
  │ - Confirm e2e tests pass │
2611
- Bead: j9p7.28 │
2611
+ Task: j9p7.28 │
2612
2612
  └──────────────────────────────────────────────────────────────────┘
2613
2613
 
2614
2614
 
@@ -2622,7 +2622,7 @@ A and B can run in parallel. C depends on A. D, E, F can run in parallel after A
2622
2622
  │ - Dropped related exports from src/index.ts │
2623
2623
  │ - Removed now-empty components/chat/ folder │
2624
2624
  │ - Updated WORKSPACE_V2_PLAN.md and active package docs │
2625
- Bead: j9p7.29 │
2625
+ Task: j9p7.29 │
2626
2626
  └──────────────────────────────────────────────────────────────────┘
2627
2627
  ```
2628
2628
 
@@ -2635,7 +2635,7 @@ A and B can run in parallel. C depends on A. D, E, F can run in parallel after A
2635
2635
 
2636
2636
  ### Phase 1.5 ship criteria
2637
2637
 
2638
- - All 7 phase beads (j9p7.24-29 + j9p7.18-20) closed
2638
+ - All 7 phase tasks (j9p7.24-29 + j9p7.18-20) closed
2639
2639
  - Three apps run on declarative layouts in production
2640
2640
  - `ChatCenteredShell` and `ChatShellContext` deleted from the tree
2641
2641
  - Public API exposes Tier 1 / Tier 2 / Tier 3 entries with jsdoc
@@ -2648,7 +2648,7 @@ The earlier Phase 1 Step 5b ("ChatCenteredShell drops `data` + `extraPanels` pro
2648
2648
  - Step 5b's "drop legacy props" becomes "delete the whole shell" (Phase G).
2649
2649
  - Step 5c's "registry-driven WorkbenchLeftPane" becomes "WorkbenchLeftPane is just one of the core panels registered by WorkspaceProvider; tab strip is gone" (Phase A + B).
2650
2650
 
2651
- Beads j9p7.16 (Step 5b) and j9p7.17 (Step 5c) close as **scope-shifted to Phase 1.5** — see Phase A/B beads for the new location.
2651
+ Tasks j9p7.16 (Step 5b) and j9p7.17 (Step 5c) close as **scope-shifted to Phase 1.5** — see Phase A/B tasks for the new location.
2652
2652
 
2653
2653
  ## Phase 2/3 (sketched, deferred)
2654
2654
 
@@ -2843,9 +2843,9 @@ pre-migration are not this gate's job.
2843
2843
  - Superseded plans: `COMMAND_PALETTE_REGISTRY.md` (older); v2-v5.2
2844
2844
  of this file (in git history).
2845
2845
 
2846
- ## Changelog v7.6 → v7.7 (round-7 governance + bead-level fixes)
2846
+ ## Changelog v7.6 → v7.7 (round-7 governance + task-level fixes)
2847
2847
 
2848
- Round-6 (codex bead-level review) returned 2 P0 governance questions, 7 P1s, 3 P2s. The user resolved both P0s; this changelog documents the integrated answers and the bead-level patches.
2848
+ Round-6 (codex task-level review) returned 2 P0 governance questions, 7 P1s, 3 P2s. The user resolved both P0s; this changelog documents the integrated answers and the task-level patches.
2849
2849
 
2850
2850
  ### P0 — ChatPanel resolution: dependency injection (NOT plugin)
2851
2851
 
@@ -2859,9 +2859,9 @@ Round-5 used `git stash` to establish a pre-migration baseline. That violates AG
2859
2859
 
2860
2860
  Spec edits: §"Acceptance" prepends a "Baseline protocol (v7.7 — worktree-based)" subsection with the canonical script. j9p7.20 (round-7 notes) replaces all `git stash` mentions with the worktree procedure. j9p7.20's dep on j9p7.19 was REMOVED via `br dep remove` — baseline runs BEFORE migration, so the graph edge that implied "baseline blocks on migration" was wrong.
2861
2861
 
2862
- ### P1 fixes (bead-level)
2862
+ ### P1 fixes (task-level)
2863
2863
 
2864
- 1. **systemPrompt ordering circularity (j9p7.11 / j9p7.31)** — both beads now state the canonical sequence: bootstrap FIRST (computes `systemPromptAppend` + stages agentTools), then `createAgentApp({ systemPromptAppend, extraTools: [...uiTools, ...stagedAgentTools] })`. agentTools are staged into a list during bootstrap, not registered against a live registry.
2864
+ 1. **systemPrompt ordering circularity (j9p7.11 / j9p7.31)** — both tasks now state the canonical sequence: bootstrap FIRST (computes `systemPromptAppend` + stages agentTools), then `createAgentApp({ systemPromptAppend, extraTools: [...uiTools, ...stagedAgentTools] })`. agentTools are staged into a list during bootstrap, not registered against a live registry.
2865
2865
 
2866
2866
  2. **excludeDefaults semantics correction (j9p7.10)** — the round-1 test "LLM file ops not in agentTool list" was wrong. `excludeDefaults: ['filesystem']` removes filesystemPlugin's UI contributions (panels + catalog). It does NOT remove file tools — those are HARNESS substrate, never in the plugin's `agentTools` (which is undefined). Two switches, two layers: `excludeDefaults` for UI, `disableDefaultFileTools` for tools.
2867
2867
 
@@ -2898,7 +2898,7 @@ Codex flagged: `shared/plugin/types.ts` referencing `ExplorerAdapter` from `comp
2898
2898
 
2899
2899
  ### P1 — Phase 1.5 step text path-updated
2900
2900
 
2901
- Codex flagged that Phase A still said `panes/<id>/`, Phase C said `layouts/TopBar.tsx`, Phase E said `src/macroPlugin.ts` — all pre-v7.5. **Fix:** Phase A → `front/chrome/<id>/`; Phase C → `front/layout/TopBar.tsx`; Phase E → `apps/.../src/plugin/{front,server}/` directly. Bead descriptions to be updated post-commit.
2901
+ Codex flagged that Phase A still said `panes/<id>/`, Phase C said `layouts/TopBar.tsx`, Phase E said `src/macroPlugin.ts` — all pre-v7.5. **Fix:** Phase A → `front/chrome/<id>/`; Phase C → `front/layout/TopBar.tsx`; Phase E → `apps/.../src/plugin/{front,server}/` directly. Task descriptions to be updated post-commit.
2902
2902
 
2903
2903
  ### P2 cleanup pack (applied)
2904
2904
 
@@ -2916,7 +2916,7 @@ Codex flagged that Phase A still said `panes/<id>/`, Phase C said `layouts/TopBa
2916
2916
 
2917
2917
  After v7.6 patches: both verdicts converge on **implementable as-is**. No reversals from earlier rounds. The architecture stands.
2918
2918
 
2919
- ### Beads needing path updates
2919
+ ### Tasks needing path updates
2920
2920
 
2921
2921
  - **NEW j9p7.31** — Step 0 workspace reorg (mechanical)
2922
2922
  - **j9p7.9** (filesystemPlugin) — paths under `plugins/filesystemPlugin/{index.ts (no server.ts since UI-only), front/}`
@@ -3004,7 +3004,7 @@ Apps mirror: each app contributes ONE plugin, lives in `apps/<host>/src/plugin/{
3004
3004
  4. **No category mixing at any level** — workspace own code is in `front/server/shared`; plugins are in `plugins/`; plugin machinery is in singular `plugin/` sub-folders. Zero ambiguity for new contributors.
3005
3005
  5. **Plays well with build invariants** — codex round-2 caught a P0 where server-only modules were about to leak into client code. With the explicit split, the lint rule "front/ must not import from server/" is one path-prefix check.
3006
3006
 
3007
- ### Bead impact
3007
+ ### Task impact
3008
3008
 
3009
3009
  Mostly path-string updates; no semantic changes:
3010
3010
 
@@ -3017,7 +3017,7 @@ Mostly path-string updates; no semantic changes:
3017
3017
  `apps/boring-macro-v2/src/plugin/{index,server}.ts` to
3018
3018
  `apps/boring-macro-v2/src/plugin/{index.ts,front/,server/}`
3019
3019
 
3020
- A new bead **j9p7.30** could capture the workspace front/server reorg
3020
+ A new task **j9p7.30** could capture the workspace front/server reorg
3021
3021
  itself if it's substantive enough to warrant separate tracking. For
3022
3022
  now, fold into Phase A (j9p7.24) since they're both restructuring
3023
3023
  the same directory.
@@ -3032,14 +3032,14 @@ User decision (2026-04-29): **merge into one mega-plan + one epic**. The earlier
3032
3032
  - Documents three-tier API (Tier 1 declarative pre-shaped layouts; Tier 2 custom LayoutConfig with stock chrome; Tier 3 raw primitives)
3033
3033
  - Substrate vs default-plugin vs app-plugin clarification (chat is core, not a plugin)
3034
3034
  - File-tree end state (panes/ as canonical home; components/chat/ disappears)
3035
- - 7 phase beads breakdown (Phase A → G) with parallelism map
3035
+ - 7 phase tasks breakdown (Phase A → G) with parallelism map
3036
3036
  - Risks + ship criteria
3037
3037
 
3038
- 2. **j9p7.16 (Step 5b) and j9p7.17 (Step 5c) marked obsolete** — scope-shifted to Phase 1.5. Closing them with reason "subsumed by Phase 1.5 Phase A/B." Replacement beads created for each Phase.
3038
+ 2. **j9p7.16 (Step 5b) and j9p7.17 (Step 5c) marked obsolete** — scope-shifted to Phase 1.5. Closing them with reason "subsumed by Phase 1.5 Phase A/B." Replacement tasks created for each Phase.
3039
3039
 
3040
3040
  3. **j9p7.18 / .19 / .20** (macro plugin module / app refactor / e2e gate) **reframed under Phase E**, not Step 6. Same work, different grouping.
3041
3041
 
3042
- 4. **6 new beads created** for Phase 1.5 phases that don't have direct j9p7 equivalents:
3042
+ 4. **6 new tasks created** for Phase 1.5 phases that don't have direct j9p7 equivalents:
3043
3043
  - j9p7.24 (Phase A — decompose shells)
3044
3044
  - j9p7.25 (Phase B — wire core panel registrations)
3045
3045
  - j9p7.26 (Phase C — lift TopBar chrome)
@@ -3065,7 +3065,7 @@ Merging gives:
3065
3065
 
3066
3066
  - PLUGIN_MODEL.md grows by ~280 lines (Phase 1.5 + this changelog entry)
3067
3067
  - DECLARATIVE_LAYOUT_MIGRATION.md gains a SUPERSEDED banner; content preserved in history
3068
- - j9p7 epic gains 6 new beads, closes 2 obsolete beads
3068
+ - j9p7 epic gains 6 new tasks, closes 2 obsolete tasks
3069
3069
  - zrby epic closes
3070
3070
  - Acceptance contract updated: j9p7 closes when Phase 1.5 ship criteria met (declarative apps + ChatCenteredShell deleted + Tier 1/2/3 public API)
3071
3071
 
@@ -3129,7 +3129,7 @@ without payoff.
3129
3129
  `pages` sketch + this changelog entry).
3130
3130
  - Contract: unchanged — same 7 fields (id, label, systemPrompt,
3131
3131
  panels, commands, catalogs, agentTools).
3132
- - Beads: unchanged. Bead descriptions can keep using
3132
+ - Tasks: unchanged. Task descriptions can keep using
3133
3133
  `placement: 'left-tab'` / `'center'` etc. as today.
3134
3134
 
3135
3135
  ## Changelog v7.1 → v7.2 (planning-workflow review pass)
@@ -3147,7 +3147,7 @@ cards) is wrapped in `<PluginErrorBoundary pluginId>`. A buggy
3147
3147
  plugin can no longer crash the workspace shell. Dropped errors
3148
3148
  push into `WorkspaceContext.errors[]` for visibility via
3149
3149
  `<PluginInspector />`. Implementation sites: PanelHost, CatalogResults,
3150
- chat-suggestion card list. ~50 LOC. New bead: j9p7.22.
3150
+ chat-suggestion card list. ~50 LOC. New task: j9p7.22.
3151
3151
 
3152
3152
  **2. CatalogRegistry search debouncing + AbortSignal propagation.**
3153
3153
  New hook: `useDebouncedCatalogSearch(query, opts?)` debounces 150ms,
@@ -3155,7 +3155,7 @@ aborts in-flight searches per keystroke via the AbortSignal that
3155
3155
  ExplorerAdapter.search ALREADY accepts (verified
3156
3156
  `packages/workspace/src/components/DataExplorer/types.ts:46-55` —
3157
3157
  no contract change needed; just consumer-side wiring). Per-catalog
3158
- errors isolated via try/catch. Updates bead j9p7.13.
3158
+ errors isolated via try/catch. Updates task j9p7.13.
3159
3159
 
3160
3160
  ### Compelling-feature addition (selected)
3161
3161
 
@@ -3164,7 +3164,7 @@ concatenates across registered plugins (in registration order),
3164
3164
  prepends to the harness's base system prompt. Lets plugin authors
3165
3165
  own their domain framing for the LLM ("you have a FRED database;
3166
3166
  use macro_* tools for X"). Concrete LLM-quality improvement;
3167
- reduces host-author burden. Updates beads j9p7.4 (contract +
3167
+ reduces host-author burden. Updates tasks j9p7.4 (contract +
3168
3168
  validation), j9p7.7 (bootstrap concat), j9p7.18 (macro plugin sets).
3169
3169
 
3170
3170
  ### DX additions (selected)
@@ -3173,7 +3173,7 @@ validation), j9p7.7 (bootstrap concat), j9p7.18 (macro plugin sets).
3173
3173
  ("console.log is enough"). Reversal justified: plugin authors hit
3174
3174
  "why didn't my command appear?" daily; visual check beats
3175
3175
  spelunking React DevTools. ~50 LOC, zero production cost
3176
- (import.meta.env.DEV gated). New bead: j9p7.23.
3176
+ (import.meta.env.DEV gated). New task: j9p7.23.
3177
3177
 
3178
3178
  **5. New §"Decisions log".** Single-table summary of locked
3179
3179
  architectural decisions with one-line rationale + pointer to the
@@ -3200,8 +3200,8 @@ harness-owns-tools framing. The two plans now read consistently.
3200
3200
 
3201
3201
  ### Net impact
3202
3202
 
3203
- - New beads: j9p7.22 (error boundaries) + j9p7.23 (PluginInspector)
3204
- - Updated beads: j9p7.4 (systemPrompt validation), j9p7.7 (bootstrap
3203
+ - New tasks: j9p7.22 (error boundaries) + j9p7.23 (PluginInspector)
3204
+ - Updated tasks: j9p7.4 (systemPrompt validation), j9p7.7 (bootstrap
3205
3205
  concat), j9p7.13 (debounced search), j9p7.18 (macro systemPrompt)
3206
3206
  - Spec additions: ~250 lines (decisions log + patterns + 3 new
3207
3207
  sections + v7.2 changelog)
@@ -3251,7 +3251,7 @@ implementation gap.
3251
3251
  path. **Out of scope for Phase 1 macro acceptance** (macro uses
3252
3252
  `createWorkspaceAgentApp` → `createAgentApp`, not
3253
3253
  `registerAgentRoutes`). Tracked as a known-gap; promote to a
3254
- bead if a `registerAgentRoutes`-using host needs the opt-out.
3254
+ task if a `registerAgentRoutes`-using host needs the opt-out.
3255
3255
 
3256
3256
  ### Cross-plan note (NOT patched in this commit)
3257
3257
 
@@ -3270,8 +3270,8 @@ ownership).
3270
3270
 
3271
3271
  Macro 260→46 still holds. v7 automatic file tools don't add macro
3272
3272
  glue; macro domain tools still fit `Plugin.agentTools`. Current
3273
- j9p7 beads are v7-aligned (verified post f2d73bc). Old uhwx
3274
- (pi-tools-migration) docs/beads are stale relative to v7 — track
3273
+ j9p7 tasks are v7-aligned (verified post f2d73bc). Old uhwx
3274
+ (pi-tools-migration) docs/tasks are stale relative to v7 — track
3275
3275
  separately.
3276
3276
 
3277
3277
  ## Changelog v6.3 → v7.0 (separation of concerns: harness owns tools)
@@ -3345,18 +3345,18 @@ changes is that macro's agentTools come ONLY from
3345
3345
  File tools come from the harness automatically. No plumbing
3346
3346
  difference for macro's host code.
3347
3347
 
3348
- ### Bead impact
3348
+ ### Task impact
3349
3349
 
3350
3350
  - **B2** (file ops bundle extraction) → reframed as "extract
3351
3351
  pi-factory wiring per pi-tools-migration; bundle includes pi
3352
3352
  tools + any custom additions." No dual-registration story.
3353
- - **B9** (filesystemPlugin) → becomes a tiny bead: plain const
3353
+ - **B9** (filesystemPlugin) → becomes a tiny task: plain const
3354
3354
  with panels + catalog, no agentTools. ~10 LOC of plugin code.
3355
3355
  - **B11** (createWorkspaceAgentApp) → no
3356
3356
  `disableDefaultFileTools: true` wiring; just wraps
3357
3357
  `createAgentApp` and runs bootstrap.
3358
3358
 
3359
- All three bead descriptions updated to match v7.0 framing.
3359
+ All three task descriptions updated to match v7.0 framing.
3360
3360
 
3361
3361
  ## Changelog v6.2 → v6.3 (gemini fresh-eyes review patches)
3362
3362
 
@@ -32,14 +32,14 @@ Use this section as the live handoff ledger while executing this plan.
32
32
  - **Phase 2 (Panes):** FileTree (react-arborist) ✓, MarkdownEditor (tiptap, 10 extensions) ✓, CodeEditor (CodeMirror 6) ✓, DataCatalogPane ✓, EmptyPane ✓, DataProvider + useFileContent/useFileList/useFileWrite ✓, useEditorLifecycle shared hook ✓
33
33
  - **Phase 3a (Integration):** Bridge SSE client ✓, Bridge command dispatch via Zustand ✓, ArtifactSurfacePane with nested DockviewShell ✓, WorkspaceProvider ✓
34
34
  - **Phase 4 (Polish):** useTheme hook ✓, CommandPalette (Cmd+P/K) ✓, ResponsiveDockviewShell with Sheet for mobile ✓, PanelErrorBoundary ✓, Testing module (@boring/workspace/testing) ✓
35
- - Current assessment: Package is feature-complete per this plan. Remaining work is app-shell migration (tracked in beads).
35
+ - Current assessment: Package is feature-complete per this plan. Remaining work is app-shell migration (tracked in tasks).
36
36
 
37
37
  ### Pass 1 — Initial validation (2026-04-24)
38
38
 
39
39
  - Full package verification: `pnpm --dir packages/workspace typecheck && pnpm --dir packages/workspace test` (green: 601 tests passing).
40
40
  - Replaced placeholder lint script with real gate: `packages/workspace/package.json` now uses `"lint": "pnpm run typecheck"`.
41
41
  - Core plan phases (foundation, panes, bridge integration, responsive behaviors, testing harness) are present and covered by the existing suite.
42
- - Remaining plan execution is now mostly migration/integration work in app shells (`apps/ide`, `apps/chat`, etc.), tracked in beads rather than missing package internals.
42
+ - Remaining plan execution is now mostly migration/integration work in app shells (`apps/ide`, `apps/chat`, etc.), tracked in tasks rather than missing package internals.
43
43
 
44
44
  ## Vision
45
45
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hachej/boring-workspace",
3
- "version": "0.1.64",
3
+ "version": "0.1.65",
4
4
  "type": "module",
5
5
  "license": "MIT",
6
6
  "description": "Workspace UI, plugin, and bridge package for composing chat, files, catalogs, editors, and app-specific panes.",
@@ -94,77 +94,77 @@
94
94
  }
95
95
  },
96
96
  "dependencies": {
97
- "@codemirror/commands": "^6.10.3",
97
+ "@codemirror/commands": "^6.10.4",
98
98
  "@codemirror/lang-javascript": "^6.2.5",
99
99
  "@codemirror/lang-json": "^6.0.2",
100
100
  "@codemirror/lang-markdown": "^6.5.0",
101
101
  "@codemirror/lang-python": "^6.2.1",
102
102
  "@codemirror/lang-sql": "^6.10.0",
103
103
  "@codemirror/lang-yaml": "^6.1.3",
104
- "@codemirror/language": "^6.12.3",
105
- "@codemirror/search": "^6.7.0",
106
- "@codemirror/state": "^6.6.0",
107
- "@codemirror/view": "^6.41.1",
104
+ "@codemirror/language": "^6.12.4",
105
+ "@codemirror/search": "^6.7.1",
106
+ "@codemirror/state": "^6.7.0",
107
+ "@codemirror/view": "^6.43.3",
108
108
  "@lezer/highlight": "^1.2.3",
109
- "@tanstack/react-query": "^5.0.0",
110
- "@tiptap/core": "^3.22.4",
111
- "@tiptap/extension-code-block-lowlight": "^3.22.4",
112
- "@tiptap/extension-highlight": "^3.22.4",
113
- "@tiptap/extension-image": "^3.22.4",
114
- "@tiptap/extension-link": "^3.22.4",
115
- "@tiptap/extension-placeholder": "^3.22.4",
116
- "@tiptap/extension-table": "^3.22.5",
117
- "@tiptap/extension-table-cell": "^3.22.5",
118
- "@tiptap/extension-table-header": "^3.22.5",
119
- "@tiptap/extension-table-row": "^3.22.5",
120
- "@tiptap/extension-task-item": "^3.22.4",
121
- "@tiptap/extension-task-list": "^3.22.4",
122
- "@tiptap/extension-text-align": "^3.22.4",
123
- "@tiptap/extension-underline": "^3.22.4",
124
- "@tiptap/markdown": "^3.22.4",
125
- "@tiptap/pm": "^3.22.4",
126
- "@tiptap/react": "^3.22.4",
127
- "@tiptap/starter-kit": "^3.22.4",
109
+ "@tanstack/react-query": "^5.101.1",
110
+ "@tiptap/core": "^3.27.1",
111
+ "@tiptap/extension-code-block-lowlight": "^3.27.1",
112
+ "@tiptap/extension-highlight": "^3.27.1",
113
+ "@tiptap/extension-image": "^3.27.1",
114
+ "@tiptap/extension-link": "^3.27.1",
115
+ "@tiptap/extension-placeholder": "^3.27.1",
116
+ "@tiptap/extension-table": "^3.27.1",
117
+ "@tiptap/extension-table-cell": "^3.27.1",
118
+ "@tiptap/extension-table-header": "^3.27.1",
119
+ "@tiptap/extension-table-row": "^3.27.1",
120
+ "@tiptap/extension-task-item": "^3.27.1",
121
+ "@tiptap/extension-task-list": "^3.27.1",
122
+ "@tiptap/extension-text-align": "^3.27.1",
123
+ "@tiptap/extension-underline": "^3.27.1",
124
+ "@tiptap/markdown": "^3.27.1",
125
+ "@tiptap/pm": "^3.27.1",
126
+ "@tiptap/react": "^3.27.1",
127
+ "@tiptap/starter-kit": "^3.27.1",
128
128
  "class-variance-authority": "^0.7.0",
129
129
  "clsx": "^2.1.0",
130
130
  "cmdk": "^1.1.1",
131
- "dockview-react": "^4.13.1",
132
- "dnd-core": "^14.0.1",
133
- "fastify": "^5.3.3",
134
- "jiti": "^2.6.1",
131
+ "dnd-core": "^16.0.1",
132
+ "dockview-react": "^7.0.2",
133
+ "fastify": "^5.9.0",
134
+ "jiti": "^2.7.0",
135
135
  "lowlight": "^3.3.0",
136
- "lucide-react": "^1.8.0",
137
- "react-arborist": "^3.4.0",
138
- "react-dnd-html5-backend": "^14.1.0",
136
+ "lucide-react": "^1.21.0",
137
+ "react-arborist": "^3.10.5",
138
+ "react-dnd-html5-backend": "^16.0.1",
139
139
  "tailwind-merge": "^2.0.0",
140
140
  "zod": "^3.23.0",
141
- "zustand": "^5.0.0",
142
- "@hachej/boring-agent": "0.1.64",
143
- "@hachej/boring-ui-plugin-cli": "0.1.64",
144
- "@hachej/boring-ui-kit": "0.1.64"
141
+ "zustand": "^5.0.14",
142
+ "@hachej/boring-ui-kit": "0.1.65",
143
+ "@hachej/boring-agent": "0.1.65",
144
+ "@hachej/boring-ui-plugin-cli": "0.1.65"
145
145
  },
146
146
  "devDependencies": {
147
- "@tailwindcss/postcss": "^4.0.0",
148
- "@tailwindcss/vite": "^4.0.0",
147
+ "@tailwindcss/postcss": "^4.3.1",
148
+ "@tailwindcss/vite": "^4.3.1",
149
149
  "@testing-library/jest-dom": "^6.9.1",
150
150
  "@testing-library/react": "^16.3.2",
151
151
  "@testing-library/user-event": "^14.6.1",
152
- "@types/node": "^22.15.3",
153
- "@types/react": "^19.0.0",
152
+ "@types/node": "^22.20.0",
153
+ "@types/react": "^19.2.17",
154
154
  "@types/react-dom": "^19.0.0",
155
155
  "@vitejs/plugin-react": "^4.0.0",
156
- "fast-check": "^4.7.0",
157
- "jsdom": "^29.0.2",
158
- "postcss": "^8.5.13",
159
- "react": "^19.0.0",
160
- "react-dom": "^19.0.0",
156
+ "fast-check": "^4.8.0",
157
+ "jsdom": "^29.1.1",
158
+ "postcss": "^8.5.15",
159
+ "react": "^19.2.7",
160
+ "react-dom": "^19.2.7",
161
161
  "recharts": "^2.15.4",
162
- "tailwindcss": "^4.0.0",
162
+ "tailwindcss": "^4.3.1",
163
163
  "tsup": "^8.0.0",
164
- "typescript": "^5.4.0",
165
- "vite": "^6.0.0",
166
- "vite-plugin-dts": "^4.5.4",
167
- "vitest": "^3.2.6",
164
+ "typescript": "^6.0.3",
165
+ "vite": "^8.1.0",
166
+ "vite-plugin-dts": "^5.0.3",
167
+ "vitest": "^4.1.9",
168
168
  "@boring-fixtures/default-plugin": "0.0.0"
169
169
  },
170
170
  "scripts": {