Quality Dashboard
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
| Sprint | Materials | Methods | Machines | Measurement | Manpower | Environment | Total |
|---|---|---|---|---|---|---|---|
| Sprint 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Sprint 1 | 3 | 2 | 1 | 2 | 1 | 1 | 10 |
| Cumulative | 3 | 2 | 1 | 2 | 1 | 1 | 10 |
Sprint 1: CesiumJS Foundation & 3D Tile Integration
Defects by Category
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: e5fa867 — LabelStyle.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
| Category | Description | Examples |
|---|---|---|
| Materials | Defects in code, dependencies, or data | Wrong values, missing abstractions, library misuse, dead code |
| Methods | Process gaps that allowed the defect to escape | Skipped gates, missing checklists, TDD not enforced |
| Machines | Tooling or infrastructure failures | CI gaps, linter blind spots, missing build steps |
| Measurement | Testing or observability gaps | Missing tests, no assertions, silent failures |
| Manpower | Knowledge or skill gaps | API unfamiliarity, assumptions, no peer review |
| Environment | External constraints that contributed | Time 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
| ID | Sprint | Title | Primary Category | Link |
|---|---|---|---|---|
| RCA-003 | Sprint 1 | Camera pitch into space | Materials | Full analysis |
Feedback
Was this page helpful?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.