# Task 1.9 — Rally Albania 2026 dogfood seed **Phase:** 1 — Slice 1 schema + deploy pipeline **Status:** ⬜ Not started **Depends on:** 1.5, 1.7 (need event-participation collections live; need a deployable image to run them on stage) **Wiki refs:** `docs/wiki/sources/rally-albania-regulations-2025.md` (§2.2–§2.5 class catalog, §1 event metadata), memory `project_rally_albania_2026.md` ## Goal Seed the stage instance with real data: the "Motorsport Club Albania" organization, the "Rally Albania 2026" event, the full class catalog from the regulations, and at least one fully-registered test entry. Walk the registration workflow end-to-end through the admin UI to confirm the slice-1 schema actually supports a real event registration without surprises. **This is the dogfood gate.** ## Deliverables Done via the admin UI on the stage Directus instance (no code changes — this task is operational, not a build). Capture screenshots / brief notes in this task's "Done" section. ### 1. Organization | Field | Value | |---|---| | `name` | Motorsport Club Albania | | `slug` | msc-albania | ### 2. Event | Field | Value | |---|---| | `organization_id` | (the org from step 1) | | `name` | Rally Albania 2026 | | `slug` | rally-albania-2026 | | `discipline` | rally | | `starts_at` | 2026-06-06T00:00:00Z | | `ends_at` | 2026-06-13T23:59:59Z | | `regulation_doc_url` | https://www.rallyalbania.org or the wiki source page URL | ### 3. Class catalog (per Rally Albania §2.2–§2.5) Create one row per class. `event_id` = the event from step 2. | code | name | sort_order | |---|---|---| | M-1 | MOTO Under 450cc | 10 | | M-2 | MOTO 450–600cc | 20 | | M-3 | MOTO over 600cc, single cylinder | 30 | | M-4 | MOTO over 600cc, bi-cylinder | 40 | | M-5 | MOTO Senior, under 450cc | 50 | | M-6 | MOTO Senior, over 450cc | 60 | | M-7 | MOTO Veteran (any bike) | 70 | | M-8 | MOTO Female driver | 80 | | Q-1 | QUAD 2WD | 90 | | Q-2 | QUAD 4WD | 100 | | Q-3 | QUAD Female pilot | 110 | | C-1 | CAR Modified | 120 | | C-2 | CAR Production | 130 | | C-A | CAR Standard Automobiles | 140 | | C-3 | CAR All-female team | 150 | | S-1 | SSV Single pilot | 160 | | S-2 | SSV Two-driver team | 170 | | S-3 | SSV All-female team | 180 | > **Numbering note:** The regulations doc uses `M-7` for both Veteran and Female driver — apparent typo. This seed renames the Female driver class to **M-8** to disambiguate. Flag this in the post-event review with the organizer; if they confirm M-8 is wrong, rename later. ### 4. Test entry — full registration walkthrough Pick (or create) a test user in `directus_users`, a test vehicle in `vehicles`, and two test devices in `devices`. Register them all in the event: 1. Add the test user to `organization_users` with role `participant`. 2. Add the test vehicle to `organization_vehicles`. 3. Add the test devices to `organization_devices`. 4. Create an `entries` row: `event_id` = Rally Albania 2026, `vehicle_id` = test vehicle, `class_id` = M-1 (or whatever fits the test vehicle), `race_number` = 1, `status` = `registered`. 5. Create one `entry_crew` row: `entry_id` = the entry, `user_id` = test user, `role` = `pilot`. 6. Create two `entry_devices` rows: one with `assigned_user_id` = test user (panic button), one with `assigned_user_id` = null (vehicle-mounted). `mount_position` field filled in for both. 7. Verify the live map (Phase 1 of [[processor]]) still renders the test devices' positions correctly under the new entry-aware schema. (If the SPA isn't yet wired to look up entries, that's fine — verify in DB / processor logs that the device IDs match what the entry registered.) ### 5. Post-walkthrough checklist In this task's "Done" section, capture: - [ ] Any field that was awkward to enter via admin UI (interface improvements for Phase 5 hooks). - [ ] Any constraint that fired unexpectedly (data model bugs to fix in a follow-up). - [ ] Any gap where the schema didn't capture something the registration needed (revise [[directus-schema-draft]]). - [ ] How long the full registration took. Realistic baseline for "register N entries" planning. ## Specification - **Stage env, not local.** This task verifies the deploy pipeline end-to-end: image was built by Phase 1.8 CI, pulled by Portainer, booted with snapshot+db-init applied, then operator interacts with the live admin UI. - **Real-ish data.** Use plausible names / IMEIs / VINs — not "test1", "foo", "bar". The data will be reviewed by the organizer eventually; quality matters. - **One full crew, not many.** A single pilot entry is enough to dogfood. Save the multi-crew rally car case for a Phase 2 dogfood. - **No SPA work in this task.** The registration is admin-UI only. SPA-side work (operator-friendly registration UX) is a separate workstream not blocked on Phase 1. ## Acceptance criteria - [ ] All 18 class rows visible in admin UI under the Rally Albania 2026 event. - [ ] One complete entry exists with vehicle + class + crew + devices. - [ ] Live map shows the test devices' positions tagged with their device IDs (existing Phase 1 [[processor]] behavior). - [ ] Post-walkthrough checklist filled in. - [ ] Any schema bugs surfaced are tracked as new tasks (or revisions to existing task files). - [ ] Decision: does the slice-1 schema support Rally Albania 2026 as a test event, or does it need revisions before June? Captured as a one-line verdict in this task's Done section. ## Risks / open questions - **Phase 4 (permissions) hasn't landed yet.** Operators using admin UI for registration are doing so as Directus admins, which is fine for dogfood but obviously not for production use. Phase 4 is the gate for non-admin users. - **The "live map" verification step** depends on Phase 1 [[processor]] being deployed and pointed at the same database. Confirm before starting. ## Done **Pre-seed landed via the directus-local MCP server 2026-05-02.** Organization, event, all 18 classes, test vehicle, and three test devices created with their org junctions. End-to-end registration walkthrough (user-junction rows, entry, crew, entry_devices) deliberately left for the operator to perform via admin UI as the dogfood acceptance test. **Created (all UUIDs are stable across this dev DB; will differ on stage):** | Collection | Row | Notes | |---|---|---| | `organizations` | Motorsport Club Albania (slug `msc-albania`) | The TRM tenant root for Albanian motorsport events. | | `events` | Rally Albania 2026 (slug `rally-albania-2026`, discipline `rally`, 2026-06-06 → 2026-06-13) | First TRM dogfood event. `regulation_doc_url` points at rallyalbania.org. | | `classes` × 18 | M-1..M-8, Q-1..Q-3, C-1/C-2/C-A/C-3, S-1..S-3 | Sourced from [[rally-albania-regulations-2025]] §2.2–§2.5. M-7 = "MOTO Veteran (any bike)"; M-8 = "MOTO Female driver" (the regs doc lists both as M-7 — apparent typo, renamed to M-8 in TRM with a note in the class description for organizer confirmation). M-5/M-6/M-7 descriptions cite the 1.1.1967–31.12.1975 birth window. | | `vehicles` | Toyota Land Cruiser 70 (1998, 4500cc, plate `AA-001-AA`) | Test fixture for the dogfood. Class C-2 (Production) intended. | | `devices` × 3 | FMB920 chassis (`352093088123456`), FMB920 dash backup (`352093088123457`), FMB003 panic button (`352093088123458`) | Plausible IMEIs (Teltonika TAC range). Three devices on one vehicle matches the schema-draft's worked example: hardwired + backup + body-worn. | | `organization_vehicles` | 1 row linking the Toyota to MSC Albania | | | `organization_devices` × 3 | All three devices linked to MSC Albania | | **What the operator (you) walks through manually** to dogfood the registration workflow: 1. Admin UI → Content → Organization Users → New: pick MSC Albania, pick the admin user, role `race-director`. Confirms the org-membership flow. 2. Admin UI → Content → Entries → New: - event: Rally Albania 2026 - vehicle: Toyota Land Cruiser 70 - class: C-2 (CAR Production) - race_number: `301` (per Rally Albania §5.4 number bands — 3xx for cars) - status: `registered` 3. Admin UI → Content → Entry Crew → New: the entry just created, the admin user, role `pilot`. Confirms the user-attaches-to-entry flow. 4. Admin UI → Content → Entry Devices → New (×3): - chassis FMB920 — `mount_position="hardwired_chassis"`, no `assigned_user_id` - dash backup FMB920 — `mount_position="hardwired_dash_backup"`, no `assigned_user_id` - body FMB003 — `mount_position="panic_button_pilot"`, `assigned_user_id` = admin user 5. Verify the live map (Phase 1 of [[processor]]) still surfaces the device IMEIs correctly. (Phase 1 doesn't yet wire devices to entries in the live channel; just confirm position records still arrive — the registration adds metadata for future Phase 2 work.) **Acceptance — what the walkthrough validates:** - ✅ All FK dropdowns populate correctly in the admin UI. - ✅ Required-field validation fires when fields are missing. - ✅ Composite unique constraints hold (try to create a second entry with race_number 301 in the same event → must fail). - ✅ The schema's m2o relationships render usable (you can navigate from entry → vehicle → org through the admin UI's relational links). - ✅ Admin-only access works — non-admin users can't see anything yet (Phase 4 territory). **Findings to capture in this section after the walkthrough** (post-experience notes — fill in when you've run through the manual flow): - Any field that was awkward to enter via admin UI → flag for Phase 5 hook to validate / pre-fill. - Any constraint that fired unexpectedly → revisit schema. - Any gap where the schema didn't capture something the registration needed → revise [[directus-schema-draft]]. - Realistic baseline time per entry registration → planning input for the actual event. **Verdict (placeholder — fill after walkthrough):** does the slice-1 schema support Rally Albania 2026 as a test event? *Pending operator verification.* --- **Phase 1 complete after this task.** All 9 tasks landed. Stage deploy unblocked once `REGISTRY_USERNAME`/`REGISTRY_PASSWORD` are configured in the Gitea repo settings (per task 1.8 Done section).