Quality Dashboard

Sprint-by-sprint tracking of defects found, categorized by Ishikawa root cause category. Used to identify systemic quality patterns across the Phenom 3D Geospatial Digital Twin project.

This dashboard tracks defects that reached dev-nest.thephenom.app (escaped the testing pyramid). Each defect is analyzed via Ishikawa fishbone RCA and categorized. The goal is to drive each category toward zero over time.

Defect Summary by Sprint

SprintMaterialsMethodsMachinesMeasurementManpowerEnvironmentTotal
Sprint 00000000
Sprint 132121110
Cumulative32121110

Sprint 1: CesiumJS Foundation & 3D Tile Integration

Defects by Category

pie title Sprint 1 Defect Distribution "Materials" : 3 "Methods" : 2 "Machines" : 1 "Measurement" : 2 "Manpower" : 1 "Environment" : 1

Defect Log

DEF-001: mapReady ReferenceError — runtime crash

Category: Materials (dead code left after migration) Severity: Critical (site non-functional) RCA: Removed mapReady state declaration but left 20+ references in effects and handlers. Fix: 91ed101 — removed all dead Google Maps refs Escaped because: No typecheck gate before deploy (Methods), no unit test for MapCard render (Measurement)

DEF-002: isRotating ReferenceError — runtime crash

Category: Materials (incomplete state cleanup) Severity: Critical (site non-functional) RCA: Removed rotation state block but left isRotating references in sidebar toolbar and mobile sheet. Fix: 425b155 — restored isRotating state declaration Escaped because: Same as DEF-001 — pyramid gates not yet enforced (Methods)

DEF-003: Camera pitch pointing into space

Category: Materials (library convention mismatch) Severity: User-visible (camera flies up instead of down) RCA: Full Ishikawa analysis Fix: 2eb89a2 — changed pitch from -45 to -75 Escaped because: No unit test for flyTo orientation (Measurement), no code review dispatched (Methods)

DEF-004: Cesium Ion token prompt

Category: Materials (unnecessary dependency) Severity: User-visible (confusing prompt on screen) RCA: Default CesiumJS Viewer connects to Cesium Ion cloud service. We use Google 3D Tiles directly and don’t need Ion. Fix: d5e7ab0 — set Ion.defaultAccessToken = '' Escaped because: Not caught by any automated check (Machines — no lint rule for this)

DEF-005: Firebase auth failure — no markers loading

Category: Environment (missing credentials in build) Severity: Functional (no data visible) RCA: .env with VITE_FIREBASE_AUTH_EMAIL was gitignored and not present on ai build server. Vite bakes VITE_ vars at build time. Fix: Transferred .env to ai, rebuilt with credentials baked in Escaped because: Expected behavior on credential-less build — environment gap, not code bug

DEF-006: NestProvider lists fetch returning HTML

Category: Machines (API not deployed to dev-nest) Severity: Non-blocking (graceful degradation) RCA: The nest-api Cloudflare Worker is deployed for nest.thephenom.app, not dev-nest. API calls to /api/lists return the SPA HTML fallback. Fix: Known limitation — API not yet wired to dev-nest domain Escaped because: Expected for standalone Pages deploy without Worker binding

DEF-007: Package.json missing cesium/resium — CF Pages build failure

Category: Methods (deps installed locally but not committed) Severity: Build failure (CF Pages) RCA: npm install cesium resium was run on ai but package.json changes weren’t committed. CF Pages installs from committed package.json. Fix: 0e6dd2f — committed package.json + package-lock.json Escaped because: Local build worked (deps in node_modules), no CI build gate to catch (Machines)

DEF-008: Unused imports — PolylineGraphics, defined, HorizontalOrigin, HeadingPitchRange

Category: Materials (leftover imports from initial scaffold) Severity: Low (bundle size, lint warning) RCA: CesiumGlobe was scaffolded with imports for planned features (polylines, heading rays) that weren’t implemented yet. Fix: e5fa867 — removed unused imports Escaped because: noUnusedLocals catches this in strict TS but build on ai used vite build (skips tsc)

DEF-009: Magic number style: 2 and Cartesian3 as any for pixel offset

Category: Manpower (unfamiliarity with CesiumJS API) Severity: Low (works but fragile) RCA: Used raw integer for LabelStyle.FILL_AND_OUTLINE and wrong Cesium type (Cartesian3 instead of Cartesian2) masked with as any. Fix: e5fa867LabelStyle.FILL_AND_OUTLINE + Cartesian2 Escaped because: Runtime behavior was correct, only discoverable by code review (Measurement — no test for label style)

DEF-010: RAF rotation loop running at 60fps when paused

Category: Machines (no perf monitoring) Severity: Low (wasted CPU/battery) RCA: requestAnimationFrame loop ran continuously even when isRotating was false. Loop body checked the flag but still scheduled next frame. Fix: 0e6dd2f — early-return from useEffect when !isRotating Escaped because: No performance monitoring or CPU profiling in pipeline (Machines)


Category Definitions

CategoryDescriptionExamples
MaterialsDefects in code, dependencies, or dataWrong values, missing abstractions, library misuse, dead code
MethodsProcess gaps that allowed the defect to escapeSkipped gates, missing checklists, TDD not enforced
MachinesTooling or infrastructure failuresCI gaps, linter blind spots, missing build steps
MeasurementTesting or observability gapsMissing tests, no assertions, silent failures
ManpowerKnowledge or skill gapsAPI unfamiliarity, assumptions, no peer review
EnvironmentExternal constraints that contributedTime pressure, resource limits, missing credentials

Trend Target

The goal is to see Materials and Methods defects decline sprint-over-sprint as:

  • The testing pyramid (Layers 1-4) catches Materials defects before deploy
  • Process enforcement (deploy gates) eliminates Methods defects
  • CI/CD automation (GitHub Actions) eliminates Machines defects

A healthy project trends toward defects only in Environment (genuinely external) and Measurement (expanding test coverage into new areas).


RCA Archive

IDSprintTitlePrimary CategoryLink
RCA-003Sprint 1Camera pitch into spaceMaterialsFull analysis