Define the `Report` model — the single contract between the widget and the backend. - [ ] `Report`: id, created_at, category (bug|feature|question|other), title, body, page_url, env, screenshot_ref?, console?(opt-in), network?(opt-in), identity, origin, status - [ ] `Identity`: anon_id (default) + optional user; client IP used transiently for rate-limiting only, never stored as an id - [ ] `Status` enum: received → triaged → open(planned→started→completed) | declined | duplicate(of=…) - [ ] `Environment` / `LogEntry` / `NetEntry` submodels Pydantic v2; module docstring (D100). Design: misc/docs/design.md (Data model) · Rationale: #1
Define the
Reportmodel — the single contract between the widget and the backend.Report: id, created_at, category (bug|feature|question|other), title, body, page_url, env, screenshot_ref?, console?(opt-in), network?(opt-in), identity, origin, statusIdentity: anon_id (default) + optional user; client IP used transiently for rate-limiting only, never stored as an idStatusenum: received → triaged → open(planned→started→completed) | declined | duplicate(of=…)Environment/LogEntry/NetEntrysubmodelsPydantic v2; module docstring (D100). Design: misc/docs/design.md (Data model) · Rationale: #1