Implementation Roadmap¶
Current Status (Updated 2026-04-23)¶
Progress: Ontario selective expansion + deploy/smoke hardening complete (2026-04-23) | Ontario Public Health Hub Phase 2 Complete (2026-04-20) | Production Neon Launch Upgrade Confirmed (2026-04-18; billing active 2026-04-16; $100 credit recorded) | Frontend Dependency Refresh + Node 22 Baseline Alignment Complete (2026-04-17) | VPS Frontend Release/Verification Complete (2026-04-17) | Data-Quality Semantics + Runtime Contract Alignment Complete (2026-04-15) | Playwright UI Regression Stabilization Complete (2026-04-09) | Public Status Source Filtering Hardened In Repo (2026-04-01) | Production DB Connectivity Recovery Verified (2026-04-01) | Neon Quick-Start Docs Added (2026-04-01) | Coverage Artifact Retention Replaced Codecov Uploads (2026-04-01) | Public Health Hub Batch A Live (2026-03-27) | Public Ops KPI Cadence Alignment Complete (2026-03-28) | Comparability Matrix Upgrade Complete (2026-03-28) | Historical Snapshot Cadence Annotation Complete (2026-03-28) | GitHub Actions Security Workflow Dependencies Reconciled (2026-03-28) | Neon Transfer Quota Incident Recorded (2026-03-28) | Production Domain Launch Complete (2026-03-12) | M33 Complete (Historical Occupancy Trends) | M32 Complete (Deployment Readiness & CSV Divergence) | M31 Complete (Divergence Briefs & Quality Drift UI) | M30 Complete (Scraper Visibility & Reliability Hardening) | M29 Complete (Equity Academic Rigor Hardening) | M23 Complete (Quality & Standardization) | M19 Complete (Governance & Quality) | M18 Complete (Occupancy Frontend UI) | M17 Complete (Quebec Occupancy Implementation) | M16 Complete (Multi-Province Operationalization) | Milestone 15 Complete & Archived | Milestone 14 Complete & Archived
Strategic Direction: Admissions strengthening phase remains active (2026-04-23), with the frontend live on the shared VPS and the backend scheduler path still live on GitHub Actions. Engineering foundation is mature (33 milestones, 4 provinces, public /resources module live). Focus remains on real-world engagement, external validation, public-facing artifacts, and keeping the VPS frontend path operationally cheap while backend cutover stays deferred until the Ontario source is reachable from the chosen runtime. The GitHub Actions Ontario fetch path has scraper-specific read-timeout hardening, the manual cleanup workflow enforces 30-day retention without turning maintenance into a 5-minute aggregate backfill, the live VPS frontend serves repeat anonymous reads from a short-lived in-process cache, and the Ontario-first public-health-hub now includes a first-class source catalog, analytics-only Ontario EMS system context, Ontario-scoped long-term drinking water advisories for reserve systems, and a restored live ODHF secondary facility ingest in addition to the original Batch A facility/AED/alerts/AQHI surfaces. As of 2026-04-23, the shared-VPS frontend toolchain baseline remains aligned to Node 22 across local guidance, CI, and the VPS/Docker runtime family, the production Neon project remains on Launch with the current billing period beginning on 2026-04-16, and the frontend deploy helper now waits for localized route readiness before post-deploy smoke. The remaining Neon work is monitoring that first Launch billing window, not another billing/application change. See admissions-strengthening-plan.md, docs/operations/direct-vps-frontend.md, and docs/operations/direct-vps-backend.md.
Deployment Note (2026-03-13): Frontend hosting is now live on the shared VPS, https://wait-time.ca presents a valid Let's Encrypt certificate from Caddy, https://www.wait-time.ca redirects to the canonical host, and production smoke passes against the canonical domain.
Migration Note (2026-03-13): The backend scheduler/runtime cutover was attempted on the shared VPS, but the Ontario source timed out repeatedly from this host:
- frontend via host Caddy + a loopback-bound Docker container is now live
- backend scrapers/heartbeat/quality jobs remain on GitHub Actions
- Neon remains the managed production database in this wave
Netlify should now be treated as rollback-only for the frontend, and GitHub Actions remains the live backend scheduler path until an Ontario-compatible worker runtime is proven.
Completed Milestones¶
| Milestone | Summary |
|---|---|
| M1: Database Foundation | Neon PostgreSQL schema, ontology enums, Quebec scraper, heartbeat monitoring |
| M2: Ontario End-to-End | Ontario HTTP/HTML scraper, Nominatim geocoding, Mapbox frontend, 160 hospitals |
| M3: Methodology Warnings | DivergenceWarning component, /methods comparability matrix, hospital detail modal |
| M4: Polish & Launch | 911 banner, dark mode, split view, trend charts, hero section, PWA setup |
| M7: UX Polish & SEO | Schema.org structured data, skeleton loading, search/filter, geolocation, live indicators |
| M8: UX Enhancements | Expandable cards, FAQ page, quick actions, landing page architecture, distance sorting |
| M9: Portfolio Launch (partial) | About section, LinkedIn post draft, screenshot guide, application summary |
| M10: Multi-Province (partial) | Alberta scraper skeleton, BC scraper (ADR-0007). Superseded by M16. |
| M11: Access & Equity (partial) | Access Burden Estimator with fuel + parking cost (ADR-0005, 21 tests) |
| M12: Research Infra (partial) | Citation-ready data export (19 tests), Dead Man's Switch alerts (7 tests), SystemStatus component, occupancy availability endpoint/UI state |
| M13: Aggregation Pipeline | Permanent hourly/daily/weekly/monthly aggregates, backfill CLI, enhanced trends (90d/6m/1y), extended data export (ADR-0008) |
| M14: Data Quality & Anomaly Detection | DataQualityService, AnomalyDetectionService, MethodologyChangeDetector, /data-quality dashboard, 3 new DB tables (ADR-0009) |
| M15: Analytics & Benchmarking | Peer benchmarking, temporal pattern analysis, regional intelligence mapping, system trend dashboard, dedicated /analytics page |
| M16: Multi-Province Operationalization | Trusted source auto-approval, hospital seed data (65 hospitals for AB/BC/QC), methodology docs for all 4 provinces, region data (15 regions), 380+ hospitals visible |
| M17: Quebec Occupancy Implementation | Quebec scraper extracts stretcher occupancy percentages, API endpoint returns real-time occupancy data, 17 unit tests, STRETCHER_OCCUPANCY metric family |
| M18: Occupancy Frontend UI | OccupancyBadge component with color-coded indicators, hospital API includes occupancy data, visual display on Quebec hospital cards, methodology note, 15 unit tests |
| M19: Governance & Quality | Added LICENSE, SECURITY.md, CODE_OF_CONDUCT, CITATION.cff, CHANGELOG, dependabot, issue/PR templates, error boundaries, and loading states |
| Operations: Test Stabilization | Resolved intermittent Map legend failures, optimized viewport constraints (45vh Hero), restored aria-labels for toggles, verified full suite (15/15 passing) |
| Operations: Production Verification | Verified all 4 scrapers operational, heartbeat monitoring active, BC source metadata corrected, comprehensive operations documentation created |
| M20: Reliability & Verification | API response time tracking (headers/logging), Backend E2E pipeline test, Visual regression testing (Playwright) |
| M21: French Language Support | Full bilingual support with next-intl, routing (/fr), translated UI components, comparability warnings, and metadata |
| M22: Portfolio Documentation | OpenAPI spec, MkDocs deployment, freshness badges, and roadmap reconciliation for admissions credibility |
| M25: Reliability & Verification Phase 2 | Backend coverage increased to 80%, API integration tests (hospitals, health, export, geolocation), hardened E2E pipeline, connection pool monitoring |
| M23: Quality & Standardization | Stricter backend typing (mypy strict), frontend type safety audit, accessibility testing (axe-core), mobile responsiveness tests, API rate limiting & validation |
| M26: Strategic Documentation & Robustness | Data Dictionary (core schema reference), Data Flow Architecture, Property-based testing for comparability (Hypothesis), CONTRIBUTING guide updates |
| M27: Operational Observability & Resilience | Drift monitor script (monitor_drift.py) with 7 unit tests, public /status page with per-province uptime bars + drift event log, Lighthouse CI workflow, database migration guide |
| M28: Ontario Real-Data Equity Layer | Replaced scaffold linkage with real StatsCan CT overlays for ON; added acquisition provenance, processing manifest, ON-only rollout contract, and map/API integration |
| M29: Equity Academic Rigor Hardening (ON) | ON-scoped quintiles, suppression provenance, sensitivity + uncertainty outputs, non-causal/temporal messaging, reproducibility hardening (equity extras/docs), optimized layer output + API loader preference |
| M30: Scraper Visibility & Reliability Hardening | Added structured failure taxonomy + heartbeat metadata (last_success, last_error, consecutive_failures, run duration), standardized retry/backoff for ON/AB/BC/QC fetch paths, enhanced /api/health + check_heartbeat --verbose, and updated workflow/runbook operations |
| M31: Divergence Briefs & Quality Drift UI | Scheduled daily data quality snapshots (cron + CLI), added methodology divergence context to analytics trends API, added 7-Day Quality Drift UI panel to /data-quality page |
| M32: Deployment Readiness & CSV Divergence | Injected methodology divergence warnings into raw and aggregated CSV exports, fixed netlify-ignore.sh to enforce [release] gate logic on main, and implemented release.yml GitHub Actions workflow for automated version releases |
| M33: Historical Occupancy Trends | Extended aggregation pipeline to include STRETCHER_OCCUPANCY, added metric_family filtering to analytics trends API and SystemTrendChart, collapsible occupancy trend panel on analytics page, DB migration 015, ADR-0019 |
| Public Health Hub Batch A | Delivered /resources with Ontario facility search, OSM-backed AED fallback, Health Canada alerts, AQHI, new public-health tables/migrations, ingest workflows, production smoke coverage, readiness coverage, and source-specific operational monitoring |
Next Steps¶
Immediate restart point (updated 2026-04-18): the March 28 Neon transfer-quota outage is no longer the active blocker. Live verification on 2026-04-01 confirmed /api/health returning healthy: true with the database connected, /api/hospitals and /api/resources responding again, plus green Heartbeat Monitor and scheduled Production Smoke runs. Repo-side hardening for /api/health, /api/status, /api/data-quality, quality scrape-window semantics, runtime env bootstrap, and heartbeat threshold alignment is complete, the shared-VPS frontend release is now live and verified, the production Neon project is confirmed on Launch as of the billing period that started on 2026-04-16, and the Playwright UI regression suite remains stabilized in the repo. The next concrete work items are now:
- monitor Neon transfer/storage through the active 2026-04-16 → 2026-05-01 Launch billing window and keep the current cache/retention guardrails in place; the separate Neon Open Source Program application already resulted in a one-time
$100credit rather than full program approval, so no additional application work remains - keep Playwright browser verification CI-first and manual-dispatch on GitHub Actions to conserve free-tier minutes now that the suite itself is stable again, and run the post-refresh browser pass from CI instead of locally
- keep backend cutover deferred, but continue the backend-compatible runtime verification track so Ontario reachability is proven before any future shared-VPS scheduler migration is retried
- follow the shared docs-platform decision track: keep this repo on MkDocs 1.x for now, treat Zensical as the intended MkDocs replacement, and keep this repo in Wave 3 after
qquotesandvisitbrief, because the current docs flow still depends on a publish/deploy path that can replacemkdocs gh-deploy. If Zensical stalls, prefer Sphinx + MyST for any future standalone docs rebuild
Admissions strengthening plan active (2026-04-01). Production launch verification is complete and the internal credibility pass is materially further along. A1, A2, A6, A7, B5, C4, and C5 are delivered; C1/C3 exist as internal-only drafts. A3 (Zenodo DOI), A4 (stakeholder outreach), and B3 (LinkedIn launch) remain intentionally parked until explicit user go-ahead; B4 (video walkthrough) and A5 (private reflection document) have been intentionally de-scoped. See admissions-strengthening-plan.md for full details.
Parallel ops track (2026-03-26): keep the VPS frontend stable, watch Neon transfer after the new read-cache guardrails, and treat backend migration as deferred pending an Ontario reachability investigation for the VPS path.
Public health hub track (2026-04-23): Ontario Public Health Hub Phase 2 plus the first selective-expansion pass are live. /resources keeps facilities Ontario-only and gated, AED fallback explicitly crowdsourced, naloxone as official link-out only, and now adds a first-class source catalog, analytics-only Ontario EMS/system-context cards backed by stored annual metrics, plus Ontario-scoped ISC long-term drinking water advisory cards for reserve systems. ODHF is back in the live ingest/status path, so the shipped public-health source baseline is healthy again. Immediate follow-on work should stay selective: keep /resources stable, avoid blind Batch B implementation, and only reopen blocked domains (official AED registry path, naloxone ingestion, municipal inspection) when legal/product gates are clearer.
Beyond the admissions plan: M34 (multi-province equity layer) when StatsCan CT data is available; M35 (Nova Scotia scraper) when bandwidth allows. Both are Phase D (deferred) in the admissions plan. If Neon transfer remains tight even after moving off the free tier, the next optimization target is a more compact latest-snapshot path for GET /api/hospitals.
Roadmap Operating Model¶
Planning Standards¶
- Single source of truth: This file is the canonical roadmap status. Detailed execution plans live in milestone docs.
- Horizon-based planning: Work is prioritized as
Now(0-2 weeks),Next(2-6 weeks), andLater(6+ weeks). - Priority discipline:
P0= correctness/reliability blockers,P1= capability delivery,P2= polish. - Review cadence: Refresh this roadmap at least weekly and after any milestone closeout or major ops decision.
Definition of Done (Roadmap Items)¶
- Code merged to
mainwith tests passing in CI. - Required docs/ADRs updated if architecture or policy changed.
- Operational impact confirmed (alerts, workflows, secrets, deployment posture).
- Item status reflected in this roadmap and no duplicate open tasks remain.
Release and Cost Policy (Updated 2026-03-13)¶
- Frontend Hosting: Live on the shared VPS through host Caddy and a loopback Docker container.
- Public Hosting:
https://wait-time.cais live and has passed HTTPS, redirect, and production smoke verification. - Backend Scheduling: still live on GitHub Actions because the Ontario source timed out from the shared VPS during backend cutover testing.
- Current production cadence is
hourlyon GitHub Actions with heartbeat checks every 30 minutes and a120minute stale threshold. - Alerting is now state-change driven: one incident alert when a source becomes unhealthy, one recovery alert when it clears.
- If backend migration is revisited later, solve Ontario reachability first instead of re-running the same VPS timer cutover sequence blindly.
Focus Shift (2026-02-25)¶
Engineering foundation is mature (33 milestones, 777+ tests, 4 provinces). The gap is in real-world engagement, external validation, and public-facing artifacts. See the Admissions Strengthening Plan for the full phased strategy including analytical rationale (original plan, devil's advocate, steelman, and final synthesis).
Active Roadmap (Phase-Based)¶
Completed Engineering (Reference)¶
- P0 / Ops: Record Neon transfer quota incident (2026-03-28) — Added incident documentation after production verification showed that Neon was rejecting database connections with
Your project has exceeded the data transfer quota, leaving/api/hospitals,/api/resources,/api/status,/api/data-quality, and the heartbeat monitor DB-blocked until quota/reset or DB-path changes are addressed - P0 / Ops: Quebec parser zero-value guard — Zero-value occupancy as suppressed signal rather than hard failure
- P1 / Performance: Frontend read-cache + polling guardrails (2026-03-26) — Deployed short-lived in-process response caching for read-heavy VPS routes, kept shared cache headers/TTLs, and reduced status polling to a 5-minute visible-tab cadence
- P1 / Public Health Hub: Batch A delivery (2026-03-27) — Shipped
/resources, Batch A APIs, public-health schema/migrations, live source ingest, source freshness/caveat UI, and production deployment onwait-time.ca - P1 / Public Health Hub: Ops hardening (2026-03-27) — Added public-health ingest summaries, stateful hard-fail alerting, best-effort AED noise suppression, and production smoke/readiness coverage for
/resources - P1 / Public Health Hub: Ontario Phase 2 expansion (2026-04-20) — Added additive
source_catalogmetadata across public-health APIs, upgraded/resourcestransparency into a first-class source catalog, hardened Ontario facility ranking/deduplication plus AED caveat treatment, added Ontario EMS system-context storage/ingest/API/UI coverage, and extended smoke/docs for the new route - P1 / Public Health Hub: Ontario selective expansion (2026-04-23) — Added Ontario-scoped ISC long-term drinking water advisories to
/resources, aligned the advisory freshness window to the observed ISC publication cadence, and extended production smoke/docs for the new route - P1 / Public Health Hub: Restore ODHF live ingest health (2026-04-23) — Operationalized the live Statistics Canada ZIP ingest, fixed ODHF duplicate-ID handling for the real payload shape, and returned
public_health_hub_statusto overallhealthy - P2 / D6: Public Health Hub Batch B source review (2026-03-27) — Revalidated naloxone, EMS/system-context, and inspection datasets; naloxone now has a verified public ArcGIS connector path, EMS remains context-only, and Toronto inspections are strong but fragmented
- P2 / D8: Ontario naloxone interim posture (2026-03-28) — Recorded ADR-0024: use an official link-out only, not native ingestion or republication, until reuse rights are clearer
- P2 / D9: Municipal inspection pilot decision (2026-03-28) — Deferred a Toronto-only DineSafe/BodySafe pilot; the data is real, but the scope is too fragmented and the product fit is weaker than Ontario-wide or emergency-access-adjacent additions
- P1 / Ops: CI quota conservation (temporary) — Minimized free-tier GitHub Actions burn
- P1 / Ops: Raw retention + alerting stabilization — Duplicate suppression added, 30-day retention enforcement restored, and heartbeat alerts made state-change driven with a 120-minute threshold
- P1 / Ops: Bound database cleanup runtime (2026-03-23) — Production cleanup deleted 207,059 rows older than 30 days, then the workflow/runtime was tightened to skip zero-yield aggregate refresh and finish in 22 seconds instead of 5m48s
- P1 / Ops: CI/tooling maintenance (2026-02-23) — Resolved all mypy/pytest CI failures; upgraded ruff, mypy, react-map-gl v8, playwright, date-fns
- P1 / Ops: Refresh GitHub Actions security workflow dependencies — Reconciled on 2026-04-01 by replacing the deprecated
PyCQA/bandit-action@v1composite with an explicit Bandit run plus JSON artifact retention, removing the remaining Node 20 dependency warning path fromScraper CI - P1 / Docs: Add Neon hosted quick-start guidance (2026-04-01) — README, quick-start, and setup docs now document Neon as the default hosted quick-start path while preserving standard PostgreSQL portability
- P1 / Ops: Codecov coverage rollout (2026-03-16) — Added quiet Codecov configuration with split frontend/backend flags, carryforward support, and patch-focused PR status checks
- P1 / Ops: Replace deprecated Codecov upload path with coverage artifacts (2026-04-01) — Removed the third-party Codecov upload steps that were pulling a Node 20
actions/github-scriptdependency into CI, retained backend/frontend coverage generation, and switched both workflows to first-party artifact uploads - P1 / Ops: Harden public status/data-quality source filtering (2026-04-01) — Centralized the active live scraper source filter for the public status/data-quality rollups, added regression tests for legacy IDs (
manitoba-shared-health,on-health), and extended production smoke coverage to hit/api/statusplus aggregate/api/data-quality - P1 / Ops: Ontario timeout hardening (2026-03-21) — Added Ontario-specific HTTP read-timeout fallback and verified a healthy post-deploy production scrape on GitHub Actions
- P1 / Ops: Stabilize Playwright UI regression suite (2026-04-09) — Replaced brittle map/list/hero/mobile fixtures with shared deterministic homepage mocks, fixed the footer landmark a11y regression, added stable map marker test hooks, and re-verified frontend lint, type-check, unit, and build locally. Keep heavy browser verification CI-first and manual-dispatch to conserve GitHub Actions minutes.
- P2 / Ops: Batch frontend dependency refresh (2026-04-17) — Refreshed the frontend dependency tree within current major versions, regenerated
frontend/package-lock.jsonunder the Node 22 toolchain that matches the Docker/VPS runtime family, aligned frontend-facing GitHub Actions workflows and docs to Node 22, tightened Dependabot to group non-breaking frontend npm updates while ignoring semver-major churn, and fixed the stricterrechartstooltip typing surfaced by the refresh - P0 / Ops: Production domain launch verification —
wait-time.caHTTPS valid,www.wait-time.caredirect verified, release deploy published, production smoke passing - P1 / Ops: Harden Netlify release gate — M32 Complete
- P1 / Divergence Briefs in analytics + export — M32 Complete
- P2 / Historical occupancy trends — M33 Complete
Active Ops Track: VPS Frontend Live / Backend Follow-Up¶
- P0 / Ops: Restore production DB connectivity after Neon transfer quota exhaustion (2026-04-01) — Live verification on 2026-04-01 confirmed
/api/healthreturninghealthy: truewith the database connected again,/api/hospitalsand/api/resourcesresponding, plus greenHeartbeat Monitorand scheduledProduction Smokeruns - P1 / Ops: Release and verify the hardened public status/data-quality summaries on the VPS (2026-04-17) — The shared-VPS frontend was released from a workstation with Tailscale-backed SSH access, the staged release was deployed with the VPS env contract, and live smoke verification passed against
https://wait-time.ca, including/api/statusplus aggregate/api/data-quality. Those public rollups no longer exposemanitoba-shared-healthoron-health, and Ontario-only/resourcesscope checks returned the expected ON-only metadata behavior in production - P1 / Ops: Upgrade the production Neon project off the free tier (2026-04-16) — Neon billing is confirmed on Launch for the production project with the current billing period beginning on 2026-04-16. Live verification re-passed on 2026-04-18 via
/api/healthplus production smoke. Keep the existing cache/retention guardrails and monitor the first billed Launch window before revisiting self-hosting - P2 / Ops: Wait for localized frontend routes after deploy (2026-04-23) —
scripts/deploy-vps-frontend.shnow waits for private/api/health,/, and/methodsto return200before returning control to smoke/verification so restart-race false502s do not leak into routine deploy checks - P2 / Ops: Monitor first billed month on Neon Launch — Watch transfer/storage usage through the active 2026-04-16 → 2026-05-01 Launch billing window, keep the current frontend read-cache and bounded-cleanup guardrails in place, note that the separate Neon Open Source Program application already yielded a one-time
$100credit rather than full program approval, and only reopen deeper DB-path optimization or self-hosting if cost/reliability pressure remains meaningful on Launch - P1 / Add frontend VPS runtime packaging — Frontend Dockerfile, standalone Next.js output,
.dockerignore, and deploy/release helpers - P1 / Add backend VPS runtime packaging — Backend deploy/release helpers, systemd templates, and verification script
- P1 / Finalize VPS env contracts —
/etc/projects-merge/env/waittime-frontend.envand/etc/projects-merge/env/waittime-backend.envcreated on the shared VPS - P1 / Host cutover preparation — Caddy route, release roots, loopback bind target, backend timers, and Playwright runtime deps were staged on the shared VPS
- P1 / Backend-compatible cutover verification — Frontend private/public health and production smoke passed; backend verification exposed Ontario upstream timeouts from this VPS, so backend cutover is deferred until a compatible runtime path is proven
- P2 / Docs: Cross-repo documentation platform decision track — Keep Wait Time Canada on MkDocs 1.x plus Material for now, treat Zensical as the intended MkDocs replacement, and schedule this repo for Wave 3 after
qquotesandvisitbrief, once Zensical has a supported deploy path that can replace the currentmkdocs gh-deployworkflow. If Zensical fails or stalls, prefer Sphinx + MyST for any future docs rebuild
Phase A: Immediate Credibility Cleanup¶
Full details: admissions-strengthening-plan.md
- P1 / A1: Mission, equity, and stewardship section in README — Replace the maintainer blurb with a public-facing mission/equity/stewardship statement aligned to the site's official posture
- P1 / A2: Limitations section in README — Specific, technical limitations demonstrating intellectual maturity (delivered in README + application summary)
- P1 / A3: Fix placeholder Zenodo DOI — Repo-side preparation is complete (
CITATION.cff,.zenodo.json, current GitHub release). Remaining work is Zenodo account activation, publish, and then restoring the README badge once the DOI is real.Hold until explicit user go-ahead. - P1 / A4: Stakeholder interview outreach — Send 10–15 outreach messages to ER professionals using existing templates (2–3 h outreach; interviews on their schedule).
Hold until explicit user go-ahead. - P3 / A5: Private reflection document — Intentionally de-scoped on 2026-03-28. Kept out of active scope because it is private interview prep rather than a public-facing credibility artifact. Revisit only if future interview preparation clearly needs it.
- P1 / A6: Ottawa–Gatineau case study — Added the case study artifact, linked it from README/application summary, and verified the Ottawa/Gatineau pair against live production data on 2026-03-28
- P1 / A7: Quantified metrics & methodology findings — Added a dated "By the Numbers" section to README using operational and ontology-level findings only, with no cross-province performance claims
Phase B: Parked / Later Launch Items¶
Full details: admissions-strengthening-plan.md
- P2 / B2: First-party privacy-safe usage telemetry — Re-scoped away from Plausible/third-party analytics on 2026-03-28. If activated later, use minimal first-party aggregate telemetry from the direct-VPS/logging path, then update
/privacyaccordingly. Do not add paid analytics or client-side tracking scripts. This is a later/VPS-maturity item, not near-term work. (2 h) - P1 / B3: Publish LinkedIn launch post — Draft refreshed for the live mission/equity/stewardship posture and current feature set; remaining work is manual publication using
https://wait-time.ca.Hold until explicit user go-ahead.(30 min) - P3 / B4: Video walkthrough — Intentionally de-scoped on 2026-03-28. Kept out of active scope because the time cost and presentation burden are not justified right now relative to other work. Revisit only if future application needs make the payoff clearer.
- P2 / B5: GitHub topics & discoverability — Delivered 2026-03-28. GitHub homepage now points to
https://wait-time.ca, subject-matter topics were tightened, and a quick registry screen found no worthwhile immediate external listing step.
Phase C: After Verified Launch — Scholarly Artifacts & External Validation¶
Full details: admissions-strengthening-plan.md
- P1 / C1: Technical report — Draft completed at
docs/research/methodological-heterogeneity-four-province-audit-draft.mdon 2026-03-28. Keep it as an internal draft for now; do not move to external review/publication until that path is explicitly reactivated. (1–2 d) - P1 / C2: Targeted researcher outreach — 3 specific researchers at ICES/INSPQ/university labs; share technical report. Conditional only: activate this only if outward
C1review/publication is intentionally reactivated later. (3 h + response time) - P1 / C3: Equity layer interpretive summary — First draft now exists inside the C1 draft report. Keep it internal-only with C1 for now. (merged with C1)
- P2 / C4: Operational transparency report — First monthly report added at
docs/operations/reports/2026-03-operational-report.mdon 2026-03-28, including the current cadence/KPI mismatch caveat. - P2 / C5: Incident post-mortem — Added
docs/operations/incident-reports/2026-02-19-quebec-zero-value.mdon 2026-03-28, documenting the zero-value validation/persistence mismatch, resolution, and later occupancy-suppression follow-up - P2 / C6: Named reviewer acknowledgement — If A4 or C2 produces a willing reviewer, add Acknowledgements to README. Conditional only; do not pursue as a standalone task. (30 min)
Phase D: Deferred — If Time Permits¶
Full details: admissions-strengthening-plan.md
- P2 / D1: Comparability matrix upgrade — Delivered 2026-03-28. The
/methodscomparability matrix now shows explicit field-by-field match/mismatch verdicts for every unique province pair, plus pairwise match counts and short clinical implications. The shared frontend comparability utility also now powers the compare API's divergence logic so methodology verdicts stay consistent across surfaces. - P2 / D2: Quebec equity layer extension (M34) — Apply Ontario template to QC with full rigor (blocked on StatsCan CT data)
- P2 / D3: Per-hospital data freshness indicators — Confirmed delivered during roadmap reconciliation on 2026-03-28. Hospital APIs already expose
last_updated, the public map/list/details surfaces already render freshness state, and raw exports already includetimestamp_utc. - P2 / D4: Nova Scotia scraper (M35) — Only if NS methodology is confirmed novel (pre-research done)
- P2 / D5: Grant/competition application — Opportunistic only; do not actively search
- P2 / D7: Official Ontario AED registry path — Pursue partnership or explicit permission only if it improves coverage without weakening reuse clarity
- P2 / D10: Re-evaluate Ontario naloxone options — Revisit link-out vs embed vs native ingestion only if reuse rights become clearer or explicit permission is obtained
- P2 / D11: Revisit municipal inspection strategy — Reopen inspection/compliance work only if broader Ontario multi-jurisdiction coverage or a deliberate Toronto-first sidecar strategy emerges
- P2 / D12: Align public ops KPIs to live scheduler cadence — Delivered 2026-03-28.
/api/statusand/api/data-qualitynow score public aggregate KPIs against the active live source set (quebec-msss,ontario-health,alberta-ahs,bc-phsa) and the current hourly GitHub Actions cadence instead of the legacy 15-minute expectation model. BackendDataQualityServicecadence constants were aligned as well so future snapshots stop drifting from the public routes. - P3 / D13: Re-baseline historical quality snapshots after cadence shift — Delivered 2026-03-28 via the annotation path.
/api/data-quality?view=trendandview=diffnow emithistorical_annotationmetadata when a requested snapshot window spans both the legacy 15-minute expectation model (96expected runs/day) and the current hourly model (24expected runs/day), and the public/data-qualitypage now renders that mixed-cadence warning directly instead of implying seamless long-range comparability. - P1 / D14: Align data-quality scrape-window semantics and runtime env contracts — Delivered 2026-04-15. Backend quality snapshots and the hospital
/api/data-qualityroute now count distinct UTC hourly scrape windows instead of raw measurement rows, invalid/api/data-qualityquery combinations now return400instead of silently falling back to system data, backend runtime bootstrap requiresDATABASE_URLfrom the process environment rather than probing secret env files, and backend heartbeat stale defaults are centralized at the live 120-minute contract (ADR-0025). - P2 / Occupancy-based recommendations — Smart hospital suggestions based on current occupancy
- P2 / Monitoring dashboard — Prometheus/Grafana integration for operational visibility
- P2 / Advanced analytics — Predictive wait time modeling based on historical patterns
- P2 / Add GitHub Project board (#47) — Process overhead
Strategic Context¶
Each feature maps to CanMEDS competencies for medical school admissions:
| Competency | Delivered | Admissions Plan (New) |
|---|---|---|
| Scholar | Metric ontology, comparability matrix, citation export, aggregation pipeline, anomaly detection, methodology change detection, property-based testing, data dictionary, OpenAPI docs, citation metadata prep | Technical report (C1), Ottawa–Gatineau case study (A6), quantified findings (A7), equity interpretive summary (C3), limitations section (A2), real Zenodo DOI (A3) |
| Professional | Clinical defensibility, divergence warnings, data quality transparency, peer benchmarking, SECURITY.md, LICENSE, CODE_OF_CONDUCT, privacy policy, terms of use, error boundaries, security headers, uptime monitoring | Operational transparency report (C4), incident post-mortem (C5), README mission/equity/stewardship section (A1) |
| Health Advocate | Access Burden Estimator, equity layer (ON), temporal access patterns, accessibility testing (WCAG), French language support, mobile responsiveness | Stakeholder interview with ER professionals (A4), equity layer interpretation (C3) |
| Leader | Multi-province scaling, systems architecture, regional dashboards, data quality monitoring, release management, operational documentation | Live production URL (B1), LinkedIn launch (B3), usage analytics (B2) |
| Collaborator | Province-aware telehealth routing, issue/PR templates, CODE_OF_CONDUCT, CONTRIBUTING guidelines | Stakeholder interview (A4), researcher outreach (C2), named reviewer acknowledgement (C6) |
Roadmap Item Categories & Admissions Value¶
All 50 roadmap items are categorized by their primary OMSAS/CanMEDS impact:
Impact/Adoption (Evidence of Real-World Reach)¶
- #7: French i18n — Demonstrates cultural competency and expands genuine reach to Quebec FQN populations
Leadership/Collaboration (Governance & Team Readiness)¶
- #3: CODE_OF_CONDUCT.md — Community governance
- #46: GitHub issue templates — Structured contribution workflow
- #47: GitHub Project board — Visible project management
- #40: Contributor onboarding — Architecture walkthrough for new contributors
- #45: Stakeholder interview examples — Demonstrates governance framework
Communication/Documentation (Clarity & Professionalism)¶
- #4: CHANGELOG.md — Release history and semantic versioning
- #10: OpenAPI/Swagger docs — API reference for researchers
- #18: README badges — CI, coverage, license signals
- #23: Architecture diagram — Visual system design (Mermaid)
- #27: Automated screenshots — Portfolio artifacts (10+ views)
- #36: Methodology comparison table — Downloadable research artifact
- #48: mkdocs GitHub Pages — Live documentation site
- #50: Data dictionary — Formal documentation of all tables/columns/enums
- #24: Data flow per-scraper — Source-to-database pipeline documentation
Professionalism/Governance (Legal & Ethical Standards)¶
- #1: SECURITY.md — Responsible disclosure policy
- #2: LICENSE — Legal clarity (MIT/Apache-2.0)
- #8: Privacy Policy — PIPEDA/PHIPA awareness
- #26: Terms of Use — Data disclaimers, no medical advice
- #17: GitHub Releases — Versioned release management
- #20: Migration documentation — Database evolution tracking
- #30: Commitlint — Enforced conventional commits
Privacy/Security/Ethics (Responsible Data Handling)¶
- #16: Content Security Policy — XSS prevention, OWASP best practices
- #11: .pre-commit-config.yaml — Secrets detection, code quality gates
- #12: Dependabot/Renovate — Automated security updates
- #28: CORS configuration — Explicit origin policy
Reliability/Quality (Engineering Excellence)¶
- #5: Error boundaries — Graceful failure handling (error.tsx, not-found.tsx)
- #6: Accessibility testing (axe-core) — WCAG compliance
- #9: Rate limiting — Abuse prevention
- #13: Increase backend coverage to 85%+ — Thorough testing
- #14: Lighthouse CI — Performance/accessibility scoring
- #15: robots.txt & sitemap — SEO fundamentals
- #19: Loading states — Skeleton UX for all pages
- #21: API input validation (Zod) — All 16 routes validated
- #22: API integration tests — Database-backed E2E tests
- #25: Structured logging (frontend) — Professional log format
- #29: Database health check — Connection pool monitoring
- #31: Data freshness badge — Live "Last scrape: X mins ago"
- #33: Visual regression testing — Playwright pixel-diff
- #34: TypeScript strict audit — Zero
@ts-ignorein custom code - #35: mypy strict mode — Full backend type coverage
- #38: Database index optimization — Query performance tuning
- #39: End-to-end pipeline test — Scrape → DB → API → render
- #44: Mobile-responsive testing — 375px/414px viewport tests
- #49: API response time tracking — P50/P95/P99 latency monitoring
Scholarship/Evaluation (Research Infrastructure)¶
- #32: Property-based testing (Hypothesis) — Formal verification of ontology comparability
- #37: Uptime/status history page — 30/90-day operational transparency
- #41: CITATION.cff — "Cite this repository" button
- #42: Zenodo DOI — Permanent citation link
- #43: Data quality drift monitoring — Weekly trend tracking
Top 10 Highest-Impact Items for Admissions¶
Ranked by defensible admissions value per hour of effort (updated 2026-03-12 after production launch verification):
- A1: Mission/equity/stewardship section — Clarifies the site's public-interest posture and barrier-reduction goals (30 min)
- A4: Stakeholder interview — Unlocks Collaborator competency; transforms project category (2–3 h + scheduling)
- A6: Ottawa–Gatineau case study — Most narratively compelling specific story; interview-ready (2–3 h)
- A3: Fix placeholder Zenodo DOI — Eliminates fake-DOI credibility risk; third-party attestation (90 min)
- B3: LinkedIn launch post — Public timestamp; asymmetric upside for 30 min of effort (30 min)
- B4: Video walkthrough — Intentionally skipped; revisit only if future application needs make the payoff clearer
- C1: Technical report — Anchor Scholar artifact; no other pre-med applicant will have this (1–2 d)
- A7: Quantified metrics — Specificity is more credible than vagueness (3 h)
- B2: First-party privacy-safe usage telemetry — Useful later for stewardship and usage evidence, but only if the direct-VPS/logging path makes it worth the added policy/ops surface (2 h)
- C4: Operational transparency report — Demonstrates disciplined stewardship, not just shipping (2 h)
Completed from the prior ranking: A2 (limitations) and B1 (production hosting) are now done. The remaining gap is real-world engagement and public-facing artifacts.
Implementation Plans¶
Active milestone plans in docs/planning/implementation/: - admissions-strengthening-plan.md — Phased plan (A/B/C/D) for real-world credibility, external validation, and public-facing artifacts. Includes full analytical rationale from three-pass review (original → devil's advocate → steelman → synthesis).
Archived (delivered): - docs/planning/implementation/archived/public-health-data-hub-batch-a-plan.md — Public Health Hub Batch A implementation plan (delivered) - docs/planning/archive/public-health-data-hub-preplan.md — Ontario public health hub pre-plan (delivered and archived) - docs/planning/archive/public-health-data-hub-decision-brief.md — Ontario public health hub decision brief (delivered and archived) - docs/planning/archive/public-health-data-hub-identity-memo.md — Public health hub identity decision (delivered and archived) - docs/planning/archive/public-health-data-hub-batch-a-handoff.md — Batch A planning handoff (delivered and archived) - docs/planning/archive/public-health-data-hub-agent-execution-readiness.md — Agent execution packet for Batch A (delivered and archived) - docs/planning/archive/public-health-data-hub-execution-order.md — Locked Batch A execution order (delivered and archived) - docs/planning/archive/maintenance-2026-02-23.md — CI/tooling maintenance (2026-02-23) - docs/planning/archive/maintenance-2026-03-21.md — Ontario timeout hardening + repository maintenance sweep (2026-03-21) - docs/planning/archive/maintenance-2026-04-15.md — Data-quality/runtime contract maintenance, roadmap reconciliation, and repo hygiene sweep (2026-04-15) - docs/planning/archive/maintenance-2026-04-23.md — Ontario public-health production closeout, docs reconciliation, and repo hygiene sweep (2026-04-23) - docs/planning/archive/maintenance-2026-03-27.md — Public health hub Batch A maintenance, archive, and roadmap reconciliation - docs/planning/archive/maintenance-2026-02-19.md — Domain rebrand staging, M30 closeout (2026-02-19) - docs/planning/archive/milestone-32-deployment-readiness.md — Deployment Readiness & CSV Divergence (M32) - docs/planning/archive/milestone-33-historical-occupancy-trends.md — M33-M35 planning doc (M33 delivered) - docs/planning/archive/milestone-31-divergence-drift.md — Divergence Briefs & Quality Drift UI (M31) - docs/planning/archive/milestone-28-equity-real-data-ontario.md — Ontario real-data equity layer rollout (M28) - docs/planning/archive/milestone-29-equity-academic-rigor-hardening.md — Ontario equity methodology hardening and academic defensibility improvements (M29) - docs/planning/archive/milestone-25-reliability-verification.md — Reliability & Verification Phase 2 (M25) - docs/planning/archive/milestone-19-governance-quality.md — Governance, Quality & Professional Polish (M19) - docs/planning/implementation/archived/milestone-9-launch.md — Production deployment & stakeholder validation (M9) - docs/planning/implementation/archived/milestone-11-equity.md — Access Burden Estimator & equity layer (M11) - docs/planning/implementation/archived/milestone-12-research.md — Citation export & alert system (M12) - docs/planning/implementation/archived/m9-remaining-user-actions.md — M9 manual user action guide - docs/planning/archive/operations-production-verification.md — Production verification & operational documentation - docs/planning/archive/milestone-18-occupancy-frontend.md — Occupancy Frontend UI (M18) - docs/planning/archive/milestone-17-quebec-occupancy.md — Quebec Occupancy Implementation (M17) - docs/planning/archive/milestone-16-multi-province-ops.md — Multi-Province Operationalization (M16) - docs/planning/archive/milestone-15-analytics.md — Analytics & benchmarking (M15) - docs/planning/archive/milestone-14-data-quality.md — Data quality & anomaly detection (M14) - docs/planning/archive/milestone-13-aggregation.md — Aggregation pipeline (M13) - docs/planning/archive/milestone-10-provinces.md — Alberta scraper & multi-province support (M10, superseded by M16) - docs/planning/archive/task-er-watch-features.md — ER Watch feature execution checklist (completed) - docs/planning/archive/methods-ux-implementation.md — Methodology timeline, CSV export, deep-linking (P1) - docs/planning/archive/ci-hardening-implementation.md — CI hardening & quality gates (P1) - docs/planning/archive/test-quality-implementation.md — React act warning elimination (P2) - docs/planning/archive/docs-integrity-implementation.md — Roadmap consistency checks (P2) - docs/planning/archive/about-section-verification.md — About section implementation verification (M9)
Risk Register¶
Active Risks¶
Mapbox Cost — Free tier allows 50k map loads/month. Monitoring; unlikely concern for portfolio project.
Silent Scraper Failure — Heartbeat monitor + Dead Man's Switch alerts implemented (M12). Frontend displays "Last Audit" indicator.
Data Misinterpretation — Methodology divergence warnings implemented (M3). /methods page shows comparability matrix.
Resolved Risks¶
- Geocoding accuracy (resolved: Nominatim + city centroids)
- Ontario upstream slowness on GitHub Actions (resolved: extended HTTP read-timeout fallback for Ontario fetches)
- Hospital verification (resolved: verification gate in place)
Architecture¶
Database Schema (15 tables)¶
| Table | Purpose |
|---|---|
sources | Provincial data source metadata with telehealth routing |
hospitals | Facility metadata with verification workflow |
measurements | Audit log of scraped wait times with ontology tags |
scraper_status | Heartbeat monitoring |
scraper_alert_state | Active stale/error incident state for alert deduplication |
measurement_aggregates | Permanent statistical summaries (M13) |
data_quality_snapshots | Daily scraper reliability metrics (M14) |
methodology_change_events | Detected methodology shifts (M14) |
regions | Province region metadata for analytics segmentation (M15) |
hospital_regions | Hospital-to-region mappings for regional benchmarking (M15) |
public_data_sources | Public-health-hub source catalog with provenance, freshness, and reuse posture |
resource_locations | Normalized facility and AED locations for /resources |
public_health_alerts | Normalized Health Canada recall and safety alert records |
public_health_system_metrics | Analytics-only Ontario EMS system-context records for /resources/system-context |
public_health_source_alert_state | Stateful incident tracking for public-health ingest alert deduplication |
Key ADRs¶
| ADR | Decision |
|---|---|
| 0002 | Strict metric ontology for comparability |
| 0003 | Manual geocoding overrides |
| 0020 | Historical alerting/retention decision later superseded by ADR-0021 |
| 0004 | Landing page UX optimization |
| 0005 | Access Burden Estimator design |
| 0006 | Dead Man's Switch monitoring |
| 0007 | BC scraper implementation |
| 0008 | Two-tier aggregation pipeline |
| 0009 | Data quality & anomaly detection |
| 0010 | Region mapping coverage heuristics |
| 0011 | Equity layer scaffold-first delivery |
| 0012 | Occupancy availability contract |
| 0013 | Testimonial governance guardrails |
| 0014 | Unified scraper runtime pipeline |
| 0015 | Ontario real-data equity layer |
| 0016 | Ontario equity academic rigor hardening |
| 0017 | Domain rebrand to wait-time.ca |
| 0018 | Scraper observability & reliability hardening |
| 0019 | Include STRETCHER_OCCUPANCY in aggregation pipeline |
| 0021 | Keep 30-day raw retention cleanup bounded and separate from aggregate refresh |
| 0022 | Use short-lived frontend response caching to reduce Neon public transfer |
| 0023 | Keep the public-health hub Ontario-first, provenance-first, and separate from live wait-time claims |
| 0024 | Keep Ontario naloxone guidance as official link-out only until reuse rights are clearer |
| 0025 | Use distinct hourly scrape windows for quality metrics, explicit runtime env bootstrap, and a shared 120-minute heartbeat default |
Dependencies & Integrations¶
| Service | Purpose | Tier |
|---|---|---|
| Shared VPS | Live frontend hosting via Caddy + Docker | Shared host allocation |
| Neon PostgreSQL | Database hosting | Launch active in production; one-time $100 credit applied |
| Mapbox | Map tiles | Free (50k loads/month) |
| Nominatim (OSM) | Geocoding | Free (1 req/sec) |
| Netlify | Rollback-only frontend hosting path | Free (300 credits/month) |
| GitHub Actions | CI/CD + scrapers | Free (2000 min/month) |
Complete Item Tracking (All 50 Improvements)¶
Legend: S = Small (1-3h), M = Medium (1-2d), L = Large (1-4w)
Governance & Legal (7 items)¶
| # | Item | Effort | Status |
|---|---|---|---|
| 1 | Add SECURITY.md with responsible disclosure policy | S | ✅ Complete |
| 2 | Add LICENSE file (MIT/Apache-2.0) | S | ✅ Complete |
| 3 | Add CODE_OF_CONDUCT.md (Contributor Covenant) | S | ✅ Complete |
| 4 | Add CHANGELOG.md with semantic versioning | M | ✅ Complete |
| 8 | Add Privacy Policy page (/privacy) | S | ✅ Complete |
| 26 | Add Terms of Use page (/terms) | S | ✅ Complete |
| 30 | Add git commit hooks (commitlint) | S | ✅ Complete |
Documentation & Communication (11 items)¶
| # | Item | Effort | Status |
|---|---|---|---|
| 10 | Add OpenAPI/Swagger documentation | M | ✅ Complete |
| 18 | Add README badges (CI, coverage, license) | S | ✅ Complete |
| 20 | Add database migration documentation | S | ✅ Complete |
| 23 | Add architecture diagram (Mermaid) | S | ✅ Complete |
| - [x] P2 / Add data flow documentation (#24) — Source-to-database pipeline documentation | |||
| 36 | Add methodology comparison table as static asset | S | ✅ Complete |
| 40 | Add contributor onboarding guide | M | ✅ Complete |
| 46 | Add GitHub issue templates | S | ✅ Complete |
| 47 | Add GitHub Project board | S | ⬜ Not Started |
| 48 | Add mkdocs GitHub Pages deployment | M | ✅ Complete |
| - [x] P2 / Add data dictionary (#50) — Formal documentation of all tables/columns/enums |
Security & Privacy (5 items)¶
| # | Item | Effort | Status |
|---|---|---|---|
| 11 | Add .pre-commit-config.yaml | S | ✅ Complete |
| 12 | Add Dependabot/Renovate config | S | ✅ Complete |
| 16 | Add Content Security Policy headers | S | ✅ Complete |
| 28 | Add CORS configuration | S | ✅ Complete |
| 49 | Add API response time tracking | S | ✅ Complete |
Frontend Quality (9 items)¶
| # | Item | Effort | Status |
|---|---|---|---|
| 5 | Add error boundaries (error.tsx, not-found.tsx, global-error.tsx) | S | ✅ Complete |
| 6 | Add accessibility testing (axe-core) | M | ✅ Complete |
| 7 | Add French language support (i18n) | L | ✅ Complete |
| 15 | Add robots.txt and dynamic sitemap | S | ✅ Complete |
| 19 | Add loading states for all pages | S | ✅ Complete |
| 33 | Add visual regression testing | M | ✅ Complete |
| 34 | Add TypeScript strict mode audit | S | ✅ Complete |
| 44 | Add mobile-responsive testing | M | ✅ Complete |
| 25 | Add structured logging to frontend API routes | S | ✅ Complete |
Backend Quality & Testing (10 items)¶
| # | Item | Effort | Status |
|---|---|---|---|
| 9 | Add API rate limiting | M | ✅ Complete |
| 13 | Increase backend test coverage to 85%+ | M | ✅ Complete |
| 21 | Add API input validation (Zod) on all routes | M | ✅ Complete |
| 22 | Add comprehensive API integration tests | M | ✅ Complete |
| 29 | Add database health check enhancement | S | ✅ Complete |
| - [x] P2 / Property-based testing (Hypothesis) (#32) — Formal verification of ontology comparability | |||
| 35 | Add backend mypy strict mode | M | ✅ Complete |
| 38 | Add database index optimization | S | ✅ Complete |
| 39 | Add end-to-end data pipeline test | M | ✅ Complete |
| 42 | Add data quality drift monitoring | M | ✅ Complete |
CI/CD & Automation (5 items)¶
| # | Item | Effort | Status |
|---|---|---|---|
| 14 | Add Lighthouse CI to GitHub Actions | M | ✅ Complete |
| 17 | Add GitHub Releases with tagged versions | M | ✅ Complete |
| 27 | Expand automated screenshot generation | M | ✅ Complete |
| 31 | Add data freshness badge (dynamic) | M | ✅ Complete |
| 37 | Add uptime/status history page | M | ✅ Complete |
Research & Citations (3 items)¶
| # | Item | Effort | Status |
|---|---|---|---|
| 41 | Add CITATION.cff file | S | ✅ Complete |
| 42 | Add Zenodo integration for DOI | S | ⏸️ Parked |
| 45 | Populate stakeholder interview examples | S | ⏸️ Conditional |
Infrastructure Progress: 36/50 original items completed. All governance, testing, documentation, and CI/CD infrastructure is in place.
Current Execution Plan: Admissions Strengthening Plan — now functioning mainly as a decision framework. Most remaining items are parked by choice, internal-only, or conditional.
| Phase | Timeline | Items | Effort |
|---|---|---|---|
| A: Credibility Cleanup | Mostly delivered | A1, A2, A6, A7 delivered; A3 and A4 parked; A5 intentionally de-scoped | Parked work only |
| B: Launch Follow-Through | Selective / deferred | B5 delivered; B2 is a later/VPS-maturity item; B3 parked; B4 intentionally de-scoped | Low until reactivated |
| C: Scholarly Artifacts | Internal pass largely complete | C1/C3 retained as internal assets; C4/C5 delivered; C2 conditional on outward C1 activation; C6 conditional only | Mostly conditional |
| D: If Time Permits | Weeks 5–12 | D1–D5 (comparability matrix, QC equity, freshness indicators, NS scraper, grant/competition) | Variable |
Next Action: Keep A3, A4, and B3 parked by choice. Retain C1/C3 as internal-only assets; treat C2 as conditional on any future outward C1 activation, B2 as later/VPS-dependent, and C6 as conditional only. If focus returns to engineering/ops, there is no immediate low-risk cleanup item left; the next remaining engineering items are larger optional extensions such as D2, D4, or D7.