J.18.9 Viewer Regression Findings
Context
J.18 Multi-Project Dashboard Consolidation (38 tasks) merged BIO-QMS dashboard infrastructure back into coditect-core canonical templates. After consolidation, 7+ feature regressions were identified across 3 rounds of fixes.
Cross-Check Methodology
Three parallel agents performed exhaustive analysis:
- Agent 1: Extracted 200 features from BIO-QMS session logs (all sessions mentioning viewer/dashboard/sidebar)
- Agent 2: Extracted 116 features from PILOT session logs
- Agent 3: Full structural inventory comparing BIO-QMS vs CORE file-by-file
Cross-check covered:
- 8 components (Sidebar.jsx, MarkdownRenderer.jsx, PresentationMode.jsx, ProjectSwitcher.jsx, SearchModal.jsx, ThemeToggle.jsx, ShareExport.jsx, TableOfContents.jsx)
- 28 dashboards across 4 categories (system/9, business/8, compliance/4, planning/7)
- Keyboard shortcuts (12 total)
- Feature-by-feature verification of viewer.jsx (~660 lines)
Regression Summary
Round 1 (5 regressions fixed)
| # | Regression | Root Cause | Fix |
|---|---|---|---|
| 1 | Toggle-all sidebar button removed | J.18 extracted Sidebar.jsx without preserving forwardRef + toggleAll | Restored sidebarRef + ChevronsUpDown/FolderClosed icons |
| 2 | Branding title/subtitle lost | Hardcoded values removed during templatization | Load from project-manifest.json via homeDashboard config |
| 3 | sidebarRef disconnected | Ref not passed after component extraction | Reconnected ref={sidebarRef} + onCollapseStateChange prop |
| 4 | Home page shows category grid instead of project status | Configurable home not implemented | Added homeDashboard field to manifest |
| 5 | Missing project-manifest.json | New infrastructure not scaffolded for BIO-QMS | Created with full branding config |
Commits:
- coditect-core:
462e7c17 - BIO-QMS:
0402bc3 - rollout-master:
52ca2148
Round 2 (1 regression fixed)
| # | Regression | Root Cause | Fix |
|---|---|---|---|
| 6 | JSON data fetch 404 | Hardcoded project-dashboard-data-BIO-QMS.json URL | Use manifest jsonFile field instead of constructing from project ID |
Commits: Applied within Round 1 commit cycle.
Round 3 (3 regressions fixed)
| # | Regression | Root Cause | Fix |
|---|---|---|---|
| 7 | PresentationMode.jsx NOT imported | Import statement lost during J.18 viewer rewrite | Added import PresentationMode from "./components/PresentationMode.jsx" |
| 8 | impact-register-dashboard.jsx NOT in dashboardModules | Dashboard existed on disk but was never registered in the lazy-load map | Added "dashboards-system-impact-register-dashboard": lazy(() => import("./dashboards/system/impact-register-dashboard.jsx")) |
| 9 | Presentation P shortcut completely missing | State, keyboard handler, help modal entry, and rendering overlay all absent | Restored: presentationMode state, P key handler (uppercase, markdown-only), ShortcutsModal entry, <PresentationMode> overlay JSX |
Detailed Fix 9 (Presentation Mode) — 4 sub-fixes:
-
State declaration (after branding state):
const [presentationMode, setPresentationMode] = useState(false); -
Keyboard handler (in
useEffectkeydown listener):} else if (e.key === "P" && activeDoc?.type === "markdown" && markdownContent) {
setPresentationMode(true);
}Also added
markdownContentto effect dependency array. -
ShortcutsModal entry (before Escape and ? entries):
["P", "Presentation mode (markdown docs)"], -
Rendering overlay (before ShortcutsModal JSX):
{presentationMode && (
<PresentationMode
content={markdownContent}
title={activeDoc?.title || "Presentation"}
onExit={() => setPresentationMode(false)}
/>
)}
Commits:
- coditect-core:
ff571089 - BIO-QMS:
e76d5af - rollout-master:
06c1b367
Verified Features (No Regression)
The cross-check confirmed these features are intact post-consolidation:
| Feature | Status |
|---|---|
Hash-based routing (#doc-path) | OK |
| Dark mode toggle + persistence | OK |
| Search modal (Ctrl+K, /) | OK |
| Zoom/focus mode (click content area) | OK |
| Print (Ctrl+P) | OK |
| Back-to-top button | OK |
| Scroll progress bar | OK |
| Recent documents (localStorage) | OK |
| Keyboard navigation (j/k) | OK |
| Help modal (?) | OK |
| Category grid view | OK |
| Markdown rendering (KaTeX, Mermaid, syntax highlighting) | OK |
| Table of Contents extraction | OK |
| All 28 dashboards loadable | OK (after Fix 8) |
| Sidebar expand/collapse | OK (after Fix 1/3) |
| Project manifest loading | OK (after Fix 2/5) |
Files Modified (All 3 Rounds)
coditect-core (canonical)
tools/web-publishing-platform/viewer.jsx— Rounds 1, 2, 3
BIO-QMS (synced copy)
viewer.jsx— Synced after each roundpublic/project-manifest.json— Created in Round 1
rollout-master (parent)
- Submodule pointer updates after each round
Lessons Learned
-
Dashboard registration is manual — Adding a
.jsxfile todashboards/does NOT make it navigable. It must also be added to thedashboardModulesmap inviewer.jsx. Consider a dynamic import scanner or manifest-driven registration. -
Component imports are fragile — When rewriting viewer.jsx during consolidation, import statements for components that are conditionally rendered (PresentationMode only shows on
Ppress) are easy to lose because the file appears to work without them. -
Keyboard shortcuts need a registry — The shortcuts are scattered across the
useEffectkeydown handler. A central shortcut registry would make it harder to lose shortcuts during refactoring. -
Cross-check audits are essential after consolidation — A 38-task consolidation touched every file in the viewer. Without systematic cross-checking (feature extraction from session logs + structural inventory), regressions 7-9 would have remained hidden until a user tried to use presentation mode or navigate to the impact register dashboard.
Resolution Status
All 9 regressions identified and fixed across 3 rounds. No further regressions known.
Author: Claude (Opus 4.6) Task: J.18.9 Project: PILOT / BIO-QMS Date: 2026-02-17