🚦
SmartLights CR — Sprint 1 Command Board
Jun 15–21, 2026 · docs/weekly/2026-W25_jun15-21.md
📅 SPRINT 1 · W25 · Jun 15–21, 2026
CEO / Founder
8
open tasks of 8
4 critical open
Developer
12
open tasks of 12
3 critical open
Tester / QA
6
open tasks of 6
All critical tasks done ✓
Secretary / Operations
11
open tasks of 11
2 critical open
Comms / BD
7
open tasks of 7
2 critical open
🎯 Weekly Goals at a Glance
RoleGoal
👑 CEO
Confirm pilot municipality target (Curridabat or Escazú) + secure at least 1 institutional meeting request.
💻 Developer
Smoke test exits 0 headless + `env` package skeleton running with Grecia network.
🧪 Tester
All Phase 1–5 verification steps documented with pass/fail evidence committed to repo.
⚖️ Legal
MOPT DGIT petition filed via SQDC + IP ownership clause drafted and reviewed by CEO.
📋 Secretary
Field visit to Calle Blancos scheduled + PYME registration initiated + data template folders created.
📡 Comms
Curridabat intro email sent (CEO-approved) + SmartLights CR one-pager drafted in Spanish.
📊 Project TRL Status
TRL 1–3: SUMO Digital Twin40%
TRL 4–6: RL Training + Prototype5%
TRL 7–8: Municipal Pilot0%
Legal / Corporate Entity10%
Stakeholder Relationships5%
👑
CEO / Founder
Strategy, fundraising, partnerships, team direction & unblocking
🎯 Week Goal Confirm pilot municipality target (Curridabat or Escazú) + secure at least 1 institutional meeting request.
0 of 8 tasks done0%
Tasks — 8 total · 8 open · 0 done
Confirm Grecia as primary network
Grecia has 3 working TLS and is closer to trainable than Calle Blancos (which has 0 signals in net.xml). Decide and write into `docs/training-roadmap.md`.
#C1
Critical
Define MVP milestone
Write one paragraph: "RL agent on Grecia, single TLS, beats the default 39s/6s plan by any margin, with a KPI plot." Document in `docs/training-roadmap.md`.
#C2
Critical
Make go/no-go call on Curridabat as pilot municipality
Curridabat has a "Laboratorio de Innovación" aligned with mobility. Decision unblocks the Comms team from sending the first formal outreach email. Cannot wait.
#C3
Critical
File MOPT DGIT petition (or delegate to Legal)
Email rony.rodriguez@mopt.go.cr + register in SQDC portal (serviciosweb.mopt.go.cr/SQDC/). Request: signal timing plan + vehicle counts at Calle Blancos. 10-day legal clock starts on submission.
#C4
Critical
Brief Legal on IP ownership structure
Algorithm stays proprietary, State gets usage license. Pre-condition for any CPI filing or external demo. Brief before any municipality pitch.
#C5
High
Confirm v2 setup (pip-only) as canonical — deprecate v1 (macOS/Homebrew)
Two conflicting setup docs exist (`docs/setup-v1-vs-v2.md`). v2 is OS-agnostic and Docker-portable. Decision unblocks developer and Secretary.
#C6
High
Choose funding path
CPI (Iniciativa Privada) route vs. MEIC grant vs. angel. Each has different company formation requirements. Pick one to pursue this quarter.
#C7
High
Align on Estadística Multivariada paper status
Paper was due April 8, 2026. If approved, it is a reusable asset for the MOPT pitch (statistical validation via MANOVA). Confirm if pending corrections exist.
#C8
Medium
💻
Developer
SUMO digital twin · RL agent · Infrastructure code
🎯 Week Goal Smoke test exits 0 headless + `env` package skeleton running with Grecia network.
0 of 12 tasks done0%
Tasks — 12 total · 12 open · 0 done
`src/smartlights/env/single_intersection.py` — thin sumo-rl wrapper driven by YAML config
Builds a `sumo_rl.SumoEnvironment` from the merged YAML config (net/route files, step_length, min/max green, gui flags). Config drives the env instead of hardcoded paths.
#D1
Critical
`src/smartlights/train/run.py` — replace config-printer with real PPO loop
Use SB3 `PPO` + `SubprocVecEnv` per `train.num_envs`. Write checkpoints + TensorBoard logs to `outputs/<run_id>/`.
#D2
Critical
Smoke run on `networks/_smoketest/` with `total_timesteps: 5000`
Confirm: env resets, PPO trains, checkpoints land in `outputs/`, TensorBoard logs are readable. This is Stage 1 complete.
#D3
Critical
Generate placeholder demand for Grecia: `randomTrips.py` + `duarouter` → `networks/grecia/routes.rou.xml`
Waits on CEO confirming Grecia-first (C1). Placeholder demand to be replaced by calibrated counts from `data/raw/grecia/`.
#D4
High
Wire Grecia net + routes into config so a full headless episode runs
Verify with `scripts/smoke_sumorl.py` pointed at Grecia that `env.ts_ids` is non-empty and an episode completes.
#D5
High
Identify `terminal_edge` for TUAN bus terminal (Calle 6) in netedit
Fill the blank `terminal_edge` field in `data/raw/grecia/bus_schedules/tuan_routes.csv`. Requires XQuartz on macOS.
#D6
High
`src/smartlights/env/rewards.py` — `weighted_wait` motorcycle-weighted reward
Implement the person-flow waiting-time reward per `configs/base.yaml`'s `env.reward` spec.
#D7
Medium
`src/smartlights/baseline/fixed_time.py` — fixed-time plan replica
Runnable through the same env interface so it produces directly comparable episode metrics to the RL agent.
#D8
Medium
`src/smartlights/eval/kpis.py` + `eval/plots.py`
Compute `mean_wait_s`, `mean_queue_len`, `throughput_veh`, `co2_proxy` over `eval.episodes`. Plot agent-vs-baseline comparisons into `outputs/`.
#D9
Medium
Add traffic light to Calle Blancos net (netedit or XML edit)
After Grecia path works. Calle Blancos currently has 0 TLS in net.xml — not usable by sumo-rl until this is fixed.
#D10
Low
Turn counts CSV → SUMO `.rou.xml` demand generation script
Waits on field data in `data/raw/`. Use jtrrouter or duarouter with turn ratios.
#D11
Low
Dockerfile: ubuntu:24.04, SUMO from PyPI, headless only, uv.lock frozen
Entrypoint: `scripts/run_training.sh --config cloud`. Build for linux/amd64. No XQuartz or GUI deps.
#D12
Low
🧪
Tester / QA
Validate every phase before developer advances · own the Definition of Done
🎯 Week Goal All Phase 1–5 verification steps documented with pass/fail evidence committed to repo.
0 of 6 tasks done0%
Tasks — 6 total · 6 open · 0 done
Add `tests/test_env.py` — assert env instantiates, step returns (obs, reward, done, info), reset works
Two passing tests minimum. This is the gate for D1.
#T1
High
Verify headless episode with Grecia net runs without error
Waits on D4 + D5. Test: env instantiates with Grecia net, 1 episode completes, `env.ts_ids` is non-empty.
#T2
High
Document Phase 1–5 verification gates with terminal output evidence
Commit a `docs/test-log-W25.md` with pass/fail + output for each gate (imports, binaries, SUMO_HOME resolver, config merge, smoke scripts).
#T3
High
Mark SUMO-spawning tests with `@pytest.mark.slow` — confirm `pytest -m "not slow"` stays under 5 seconds
Already in CLAUDE.md conventions; verify it's actually enforced.
#T4
Medium
Add `tests/test_kpis.py` — unit test KPI functions on synthetic episode data (no SUMO needed)
Waits on D9. Synthetic data means this runs in CI without SUMO installed.
#T5
Medium
Confirm `uv run ruff check` + `uv run pytest -m "not slow"` pass cleanly on a fresh checkout
Simulate CI: clone to a temp dir, `uv sync`, run checks. Catches any missing deps or import errors.
#T6
Low
📋
Secretary / Operations
Admin, coordination, tracking, document management, meeting logistics
🎯 Week Goal Field visit to Calle Blancos scheduled + PYME registration initiated + data template folders created.
0 of 11 tasks done0%
Tasks — 11 total · 11 open · 0 done
Schedule field visit to Calle Blancos intersection this week
Purpose: (1) confirm semáforo is MOPT-operated and active; (2) identify optimal camera placement for AM/PM peak video capture (6–8am, 4–6pm); (3) photograph cabinet type (NEMA TS2 / Semex). Book at least 2 people.
#S1
Critical
Initiate PYME registration at MEIC (meic.go.cr)
Coordinate with Legal to confirm CCSS + Hacienda + INS are clear (L5) before submitting. Required to participate in public procurement under SICOP.
#S2
Critical
Track MOPT SQDC petition once filed
Log: (1) SQDC tracking number, (2) submission date, (3) legal deadline (10 business days per Ley 9097). Set calendar reminder for day 8. Escalation: Contraloría de Servicios (2523-2774) if no response by day 10.
#S3
High
Create `networks/calle_blancos/README.md`
Mirror the Grecia one. Document the 0-TLS situation explicitly (why it can't be used by sumo-rl yet) and the planned fix (D10).
#S4
High
Create `data/raw/grecia/turning_counts/TEMPLATE.csv` + `SOURCE.md` placeholder
Field collection template so the data collector knows the exact format expected. Include SUMO TLS ids from `networks/grecia/README.md` as the reference.
#S5
High
Create `data/raw/grecia/signal_plans/TEMPLATE.yaml` + `SOURCE.md` placeholder
Template for recording the real fixed-time plans that will replace the netconvert 39s/6s guessed programs.
#S6
High
Download MOPT Anuario de Tránsito — check TPDA portal for Calle Blancos / Radial de Guadalupe data
Free public data. Useful for SUMO route calibration while waiting for official DGIT response (L1). Archive in `data/raw/calle_blancos/`.
#S7
High
Manual visit to yoviajocr.com — capture local TUAN routes missing from `tuan_routes.csv`
Sarchí, Tacares, Poás routes out of the Grecia terminal. These affect total bus volume at the Calle 6 signal (TLS 2395356612).
#S8
Medium
Update `docs/training-roadmap.md` to reflect Grecia as active primary network
Waits on CEO decision C1. Change all references from Calle Blancos to Grecia as the primary training target.
#S9
Medium
Deprecate v1 section of `docs/setup-v1-vs-v2.md`
Add DEPRECATED header once CEO confirms C6. Prevents developer confusion from two conflicting setup approaches.
#S10
Medium
Set up project tracker (GitHub Projects) — import this weekly board as initial backlog
Single source of truth across roles. Link SQDC petition numbers, MEIC application, and Git commit hashes as they are created.
#S11
Medium
📡
Comms / BD
Municipality outreach · Narrative · Press · Partner pipeline
🎯 Week Goal Curridabat intro email sent (CEO-approved) + SmartLights CR one-pager drafted in Spanish.
0 of 7 tasks done0%
Tasks — 7 total · 7 open · 0 done
Draft + send intro email to Municipalidad de Curridabat (Laboratorio de Innovación)
Angle: "reduce wait times 15%, aligns with clean mobility plan, zero infrastructure replacement." Request an exploratory meeting. Do NOT mention SUMO or technical stack — focus on citizen benefit and KPIs. CEO must approve (C3) before sending.
#BD1
Critical
Draft SmartLights CR one-pager in Spanish (PDF, 1 page, for municipal officials)
Content: Problem (GAM congestion crisis) / Solution (retrofit + Edge AI, 10x cheaper than NoTraffic/Miovision) / KPI promise (≥15% wait time reduction) / Proof point (digital twin in progress) / Ask (pilot intersection). No jargon.
#BD2
Critical
Prepare Escazú pitch angle (security-dual-use value proposition)
Escazú already has a camera security system. Pitch: "edge AI nodes do double duty — traffic control AND feed your existing security monitoring center. Maximize ROI on cameras you already paid for." Prepare separately — audience differs from Curridabat.
#BD3
High
Contact UCR SIMOVI lab (Dr. Fabián Abarca, github.com/fabianabarca)
Explore GTFS tooling coverage for TUAN routes + possible research collaboration on Costa Rica transit data.
#BD4
Medium
Contact CTP (Consejo de Transporte Público) for official TUAN route data
Request whether any GTFS program exists for 2026 and if official headway/stop data is available for the Grecia corridor.
#BD5
Medium
Research TomTom Move free 30-day trial for Calle Blancos calibration data
TomTom Move provides directional speed and volume data. Evaluate before committing to a commercial license. Report to CEO: useful or skip?
#BD6
Low
Initiate contact with MOPT Waze for Cities / CONAVI alliance
CONAVI has a Waze bidirectional data partnership. Position SmartLights CR as a complementary local layer (Waze gives macro flow, we give intersection-level real-time control).
#BD7
Low
🎯
Weekly Goals — Jun 15–21, 2026
One measurable goal per area. End of Friday: each owner reports 🟢 / 🟡 / 🔴.
RoleGoalOpen / TotalOwner
👑 CEO / Founder
Confirm pilot municipality target (Curridabat or Escazú) + secure at least 1 institutional meeting request.
8 open / 8 total
CEO
💻 Developer
Smoke test exits 0 headless + `env` package skeleton running with Grecia network.
12 open / 12 total
Developer
🧪 Tester / QA
All Phase 1–5 verification steps documented with pass/fail evidence committed to repo.
6 open / 6 total
Tester
⚖️ Legal / Compliance
MOPT DGIT petition filed via SQDC + IP ownership clause drafted and reviewed by CEO.
7 open / 7 total
Legal
📋 Secretary / Operations
Field visit to Calle Blancos scheduled + PYME registration initiated + data template folders created.
11 open / 11 total
Secretary
📡 Comms / BD
Curridabat intro email sent (CEO-approved) + SmartLights CR one-pager drafted in Spanish.
7 open / 7 total
Comms
📁 Source of Truth
This dashboard was generated from docs/weekly/2026-W25_jun15-21.md
Sprint 1 · W25 · Jun 15–21, 2026

To update: edit the markdown file, then run:
uv run python scripts/sprint_dashboard.py --week <md-file>
To start next sprint:
uv run python scripts/sprint_dashboard.py --week <md-file> --carry-forward --next-dates "Jun 22–28, 2026"