|
1 | | -# Render Pipeline + Multi-Tab Spec Plan |
| 1 | +# Render Pipeline + Multi-Tab Vital Remaining Spec TODOs |
2 | 2 |
|
3 | | -This document outlines test coverage to add after the render pipeline rewrite is fully integrated with the multi-tab UX. |
| 3 | +This file tracks only high-value gaps that still need coverage. |
4 | 4 |
|
5 | | -## Why this plan exists |
| 5 | +## Already Covered (summary) |
6 | 6 |
|
7 | | -Current test coverage intentionally removed a subset of specs that were tightly coupled to pre-rewrite assumptions: |
| 7 | +1. Entry-tab role behavior, rename stability, and restore behavior. |
| 8 | +2. Cross-tab import graph basics, missing-module and circular-import determinism. |
| 9 | +3. Core diagnostics/status flows, including pending/error/neutral transitions. |
| 10 | +4. Workspace persistence and per-repo context/config isolation baseline. |
8 | 11 |
|
9 | | -1. Legacy assumptions around default-export hydration behavior in preview module assembly. |
10 | | -2. Styles diagnostics behavior that depended on old compile/lint sequencing. |
11 | | -3. PR drawer path validation timing assumptions tied to previous field sync flow. |
| 12 | +## Vital Remaining TODOs |
12 | 13 |
|
13 | | -These should return as updated tests once the new pipeline contract is finalized. |
| 14 | +## 1. Default Export Support Matrix (High Risk) |
14 | 15 |
|
15 | | -## Proposed Test Areas |
| 16 | +Add explicit render/typecheck specs for: |
16 | 17 |
|
17 | | -## 1. Entry Resolution and Execution Semantics |
| 18 | +1. `export default class ...` in React mode. |
| 19 | +2. `function App() { ... } export default App` behavior. |
| 20 | +3. `const X = ...; export default X` behavior with entry-wrapper rules. |
| 21 | +4. Unsupported default-export combinations producing deterministic diagnostics. |
18 | 22 |
|
19 | | -Goal: Validate how preview entry is resolved from workspace tabs under the `role: entry` model. |
| 23 | +## 2. Style Compile vs Lint Contract (High Risk) |
20 | 24 |
|
21 | | -Add specs for: |
| 25 | +Lock down precedence and parity: |
22 | 26 |
|
23 | | -1. Entry selection prefers explicit `role: entry`, with documented fallback behavior only when no explicit entry is present. |
24 | | -2. Entry rename between `App.tsx` and `App.js` keeps execution stable. |
25 | | -3. Entry path updates preserve directory while enforcing filename convention. |
26 | | -4. Reload restores same entry tab and executes same source. |
| 27 | +1. Less error-path parity with Sass error behavior. |
| 28 | +2. Compile diagnostics + lint diagnostics precedence/coexistence contract. |
| 29 | +3. Clearing styles diagnostics does not affect component diagnostics/status. |
27 | 30 |
|
28 | | -## 2. Default Export Handling in New Hydration Pipeline |
| 31 | +## 3. Status Aggregation Contract (High Risk) |
29 | 32 |
|
30 | | -Goal: Reintroduce export-default tests against the final module assembly support matrix. |
| 33 | +Add state-machine coverage for: |
31 | 34 |
|
32 | | -Add specs for: |
| 35 | +1. Multiple simultaneous error sources aggregating counts correctly. |
| 36 | +2. Clearing one scope updates only that scope and leaves other error states intact. |
33 | 37 |
|
34 | | -1. `export default () => ...` in entry tab with manual render. |
35 | | -2. `export default class ...` in React mode. |
36 | | -3. `function App() { ... } export default App` compatibility. |
37 | | -4. `const Button = ...; export default Button` behavior when App wrapper is implicit or explicit. |
38 | | -5. Negative cases: unsupported default-export combinations produce deterministic diagnostics. |
| 38 | +## 4. Inactive Panel Mutation Guard (Medium Risk) |
39 | 39 |
|
40 | | -## 3. Cross-Tab Import Graph Hydration |
| 40 | +Add keyboard/actionability spec that proves inactive editor panel input cannot mutate source. |
41 | 41 |
|
42 | | -Goal: Ensure workspace graph resolution works across multiple component and style tabs. |
| 42 | +## 5. Update Obsolete PR Path-Validation Section (Doc/Test Hygiene) |
43 | 43 |
|
44 | | -Add specs for: |
| 44 | +Old PR drawer filename-field validation cases are obsolete after tab-derived commit targets. |
45 | 45 |
|
46 | | -1. Entry imports sibling component tab by relative specifier. |
47 | | -2. Nested dependency chain (A imports B imports C) hydrates in stable order. |
48 | | -3. Missing module path reports actionable preview error including unresolved specifier. |
49 | | -4. Circular import emits stable error (or supported behavior) without hanging. |
50 | | -5. Windows-style and POSIX-style separators normalize consistently in lookup keys. |
| 46 | +1. Replace with tab-derived commit target validation/normalization tests. |
| 47 | +2. Remove any remaining assumptions about component/styles filename fields in PR drawer flows. |
51 | 48 |
|
52 | | -## 4. Styles Pipeline and Diagnostics Contract |
| 49 | +## Minimal Done Criteria |
53 | 50 |
|
54 | | -Goal: Lock down expected diagnostics and status transitions for style dialects. |
55 | | - |
56 | | -Add specs for: |
57 | | - |
58 | | -1. Sass compilation error sets diagnostics state to error with styles-scope detail. |
59 | | -2. Less error path behavior parity with Sass. |
60 | | -3. Switching style mode clears stale diagnostics according to final pipeline contract. |
61 | | -4. Styles lint diagnostics and compile diagnostics coexist or prioritize per contract. |
62 | | -5. Clearing style diagnostics does not clear unrelated component diagnostics. |
63 | | - |
64 | | -## 5. Status and Diagnostics State Machine |
65 | | - |
66 | | -Goal: Ensure app status text/class and diagnostics toggle class remain consistent. |
67 | | - |
68 | | -Add specs for: |
69 | | - |
70 | | -1. Pending to error to neutral transitions for typecheck + lint + render. |
71 | | -2. Multiple error sources aggregate counts correctly. |
72 | | -3. Clearing one scope updates only corresponding status/diagnostics indicators. |
73 | | -4. Auto-render off path keeps status stable until explicit render. |
74 | | - |
75 | | -## 6. Multi-Tab Tool Visibility and Actionability |
76 | | - |
77 | | -Goal: Guarantee controls are actionable only for active editor tab and panel. |
78 | | - |
79 | | -Add specs for: |
80 | | - |
81 | | -1. Component controls hidden/inert when styles tab is active. |
82 | | -2. Styles controls hidden/inert when component tab is active. |
83 | | -3. Keyboard interactions in inactive panel do not mutate source. |
84 | | -4. Tab switches maintain tool visibility state and collapse state correctly. |
85 | | - |
86 | | -## 7. Persistence and Isolation Guarantees |
87 | | - |
88 | | -Goal: Verify deterministic startup and no stale state bleed between sessions. |
89 | | - |
90 | | -Add specs for: |
91 | | - |
92 | | -1. IndexedDB workspace restore across reload preserves tabs, active tab, entry role, and paths. |
93 | | -2. PR drawer saved config does not unexpectedly overwrite active workspace tab paths. |
94 | | -3. New session starts clean when storage is reset in tests. |
95 | | -4. Repository switch behavior isolates per-repo local context and config. |
96 | | - |
97 | | -## 8. PR Drawer Path Validation and Sync |
98 | | - |
99 | | -Goal: Revisit path validation behavior after final field sync implementation. |
100 | | - |
101 | | -Add specs for: |
102 | | - |
103 | | -1. Reject traversal (`../`) for component and styles paths. |
104 | | -2. Reject trailing slash paths for component and styles fields. |
105 | | -3. Allow dotted segments that are not traversal. |
106 | | -4. Entry-specific filename rule enforcement (`App.tsx` or `App.js`) reflected in drawer path values. |
107 | | - |
108 | | -## 9. Test Infrastructure Improvements |
109 | | - |
110 | | -Goal: Keep suites stable as UX evolves. |
111 | | - |
112 | | -Actions: |
113 | | - |
114 | | -1. Add helper APIs for tab activation before control interactions. |
115 | | -2. Add one reset helper per suite to clear localStorage, sessionStorage, and IndexedDB. |
116 | | -3. Prefer role/name selectors that match active-tab semantics. |
117 | | -4. Avoid assertions that require hidden panel controls to be clickable. |
118 | | - |
119 | | -## Suggested Rollout Order |
120 | | - |
121 | | -1. Entry resolution + default-export support matrix. |
122 | | -2. Cross-tab import graph hydration. |
123 | | -3. Styles diagnostics contract. |
124 | | -4. Status state machine. |
125 | | -5. PR drawer path validation synchronization. |
126 | | -6. Persistence/isolation hardening. |
127 | | - |
128 | | -## Definition of Done for this plan |
129 | | - |
130 | | -Before reintroducing removed specs, the render pipeline implementation should provide a written behavior contract for: |
131 | | - |
132 | | -1. Entry tab selection. |
133 | | -2. Default export support matrix. |
134 | | -3. Style compile + lint diagnostics precedence. |
135 | | -4. Status/diagnostics state transitions. |
136 | | -5. Path normalization and validation across workspace tabs and PR drawer fields. |
| 51 | +This plan is complete when the five sections above are covered by Playwright tests and linked from the affected suites. |
0 commit comments