Skip to main content

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:

  1. Agent 1: Extracted 200 features from BIO-QMS session logs (all sessions mentioning viewer/dashboard/sidebar)
  2. Agent 2: Extracted 116 features from PILOT session logs
  3. 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)

#RegressionRoot CauseFix
1Toggle-all sidebar button removedJ.18 extracted Sidebar.jsx without preserving forwardRef + toggleAllRestored sidebarRef + ChevronsUpDown/FolderClosed icons
2Branding title/subtitle lostHardcoded values removed during templatizationLoad from project-manifest.json via homeDashboard config
3sidebarRef disconnectedRef not passed after component extractionReconnected ref={sidebarRef} + onCollapseStateChange prop
4Home page shows category grid instead of project statusConfigurable home not implementedAdded homeDashboard field to manifest
5Missing project-manifest.jsonNew infrastructure not scaffolded for BIO-QMSCreated with full branding config

Commits:

  • coditect-core: 462e7c17
  • BIO-QMS: 0402bc3
  • rollout-master: 52ca2148

Round 2 (1 regression fixed)

#RegressionRoot CauseFix
6JSON data fetch 404Hardcoded project-dashboard-data-BIO-QMS.json URLUse manifest jsonFile field instead of constructing from project ID

Commits: Applied within Round 1 commit cycle.

Round 3 (3 regressions fixed)

#RegressionRoot CauseFix
7PresentationMode.jsx NOT importedImport statement lost during J.18 viewer rewriteAdded import PresentationMode from "./components/PresentationMode.jsx"
8impact-register-dashboard.jsx NOT in dashboardModulesDashboard existed on disk but was never registered in the lazy-load mapAdded "dashboards-system-impact-register-dashboard": lazy(() => import("./dashboards/system/impact-register-dashboard.jsx"))
9Presentation P shortcut completely missingState, keyboard handler, help modal entry, and rendering overlay all absentRestored: presentationMode state, P key handler (uppercase, markdown-only), ShortcutsModal entry, <PresentationMode> overlay JSX

Detailed Fix 9 (Presentation Mode) — 4 sub-fixes:

  1. State declaration (after branding state):

    const [presentationMode, setPresentationMode] = useState(false);
  2. Keyboard handler (in useEffect keydown listener):

    } else if (e.key === "P" && activeDoc?.type === "markdown" && markdownContent) {
    setPresentationMode(true);
    }

    Also added markdownContent to effect dependency array.

  3. ShortcutsModal entry (before Escape and ? entries):

    ["P", "Presentation mode (markdown docs)"],
  4. 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:

FeatureStatus
Hash-based routing (#doc-path)OK
Dark mode toggle + persistenceOK
Search modal (Ctrl+K, /)OK
Zoom/focus mode (click content area)OK
Print (Ctrl+P)OK
Back-to-top buttonOK
Scroll progress barOK
Recent documents (localStorage)OK
Keyboard navigation (j/k)OK
Help modal (?)OK
Category grid viewOK
Markdown rendering (KaTeX, Mermaid, syntax highlighting)OK
Table of Contents extractionOK
All 28 dashboards loadableOK (after Fix 8)
Sidebar expand/collapseOK (after Fix 1/3)
Project manifest loadingOK (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 round
  • public/project-manifest.json — Created in Round 1

rollout-master (parent)

  • Submodule pointer updates after each round

Lessons Learned

  1. Dashboard registration is manual — Adding a .jsx file to dashboards/ does NOT make it navigable. It must also be added to the dashboardModules map in viewer.jsx. Consider a dynamic import scanner or manifest-driven registration.

  2. Component imports are fragile — When rewriting viewer.jsx during consolidation, import statements for components that are conditionally rendered (PresentationMode only shows on P press) are easy to lose because the file appears to work without them.

  3. Keyboard shortcuts need a registry — The shortcuts are scattered across the useEffect keydown handler. A central shortcut registry would make it harder to lose shortcuts during refactoring.

  4. 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