Spec-compliance review (2026-07-15): findings & gap list #40
Labels
No labels
area/ai
area/backend
area/frontend
area/infra
area/scheduler
area/wled
good-first-issue
priority/high
priority/low
priority/medium
type/bug
type/chore
type/ci-cd
type/docs
type/feature
type/qa
v1.0.0
v1.1.0
v1.2.0
v2.0.0
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
rbrooks/Iris-WLED#40
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Full-project review of the v1 implementation against
docs/iris-spec.md, performed 2026-07-15. Three parallel audits (backend, frontend, infra/content/docs) plus a local reproduction of every failing CI job. This issue records the findings; individual gaps should be split into their own issues (proposed breakdown at the bottom).Release blockers (v1.0.0)
1. CI has never passed — all 52 runs red. Local reproduction of each job found concrete causes, all real code issues (not runner problems):
ruff check: 159 violations (60 auto-fixable);ruff format --check: 56 of 83 files unformattedmypy app/: 75 errors in 17 files (callableas a type, missing generics, untyped defs)pytest: collection fails outright —tests/test_ai_suggestion.py,test_webhooks.py,test_wled.pyimportrespx, but thedevdependency group shipspytest-httpxinstead. With respx installed: 201 passed, 1 failedtest_import_export.py::test_builtin_yaml_covers_bundled_eventsopensconfig/events.yamlrelative to cwd; CI's working dir isbackend/, so it fails on any runneralembic check: genuine model/migration drift — models droppedix_sessions_expires_at,ix_sessions_subject,ix_webhook_configs_enabledwith no migration@typescript-eslint/no-empty-object-typeerror infrontend/src/components/ui/input.tsx:42.
SESSION_SECRETnever reaches the container. Three docs (setup, troubleshooting, ASVS review) instruct users to set it, but it is absent fromdocker-compose.yml's environment block and.env.example, and no.envis mounted/copied into the image — every compose deployment silently runs with the hardcoded defaultchange-me-in-production, i.e. forgeable session cookies.3. Priority/conflict resolution is not wired to pushes.
services/priority_resolver.get_events_for_datecorrectly implements date pins, secondaries, and user-event shadowing (spec §2.5) but is referenced only by its own tests. Both real push paths (routers/wled.pypush_todayandschedule_service) use a naive max-priority query, so date pins and "Promote Secondary" have no runtime effect.Spec gaps — backend
default_schemesetting stored but never consulted — always pushes lights-off,dim_white/scheme-ref options deadretrypolicy retries immediately, not at 5-minute intervals;last_known_goodstores state but never re-pushes on reconnect (no reconnect watcher)phase_config/date-range edits do not stale/regenerate dependent schemesSpec gaps — frontend
Content & docs
schemes/builtin.yamlcovers ~57 keys (45 event_keys + 12 tags) vs spec §3.3's "~200 major events" — decide: expand, or amend the specholidays+ Layer 2 YAML); all 7 recurrence types exercisedTest coverage
DayCell+ calendar utils unit-tested; Playwright suite is 5 loose smoke tests; no coverage of approve/reject/edit, editor, import/export, settings mutations, role gating (tracked by #5)Code quality notes
invalidate_for_segment_changecomputes per-segment impact then unconditionally overrides it to “all schemes” (dead logic)routers/auth.pycallback has an unused, un-importedresponse: JSONResponse = Noneparamdatetime.utcnow()deprecation warnings (13k+ in a test run)backend/uv.lockis untracked; committing it would make CI reproducibleProcess findings
v1.0.0/v1.1.0/v1.2.0/v2.0.0milestones mirroring the labels and assign the 31 labeled issuesProposed issue breakdown
SESSION_SECRETthrough compose/.env.example(security)priority_resolverinto push paths so pins/promotions take effectReview findings split into individual tracked issues (all assigned to milestones):
Spec-compliance / release work (v1.0.0):
New feature proposals (v1.1.0 / v1.2.0):
Milestones
v1.0.0–v2.0.0created and all version-labeled issues assigned. Closing this issue as the record of the 2026-07-15 review; remaining work is tracked in the issues above.