--- id: IHUB-WP-0014 type: workplan title: "Pre-flight: Close Deployment Gaps" domain: inter_hub repo: inter-hub status: done owner: custodian topic_slug: inter_hub created: "2026-04-03" updated: "2026-04-04" state_hub_sync: done state_hub_workstream_id: "532761e7-7c97-42e6-a5ea-59a972a80230" --- # IHUB-WP-0014 — Pre-flight: Close Deployment Gaps ## Goal Reach a verified, locally-runnable state of inter-hub before building the public-facing intro/tutorial UI. Three concrete gaps must be closed: CSS pipeline not building, no admin user seeding, and the build never verified in this environment. ## Background All 12 IHF phases are implemented (58 controllers, 115+ views, 1102-line schema, 13 migrations). Nix/direnv are installed. However: - `static/app.css` is empty (0 bytes) — Tailwind build command is commented out in `flake.nix`; views use Tailwind classes throughout all phases. - `Application/Fixtures.sql` is empty — no default admin user, so the app is inaccessible after a clean DB init. - The codebase has never been compiled in this environment — compilation errors from any of the 12 phases would block everything else. ## Tasks ### A1 — Attempt first build ✓ Build achieved on haskelseed (Alpine 3.23, GHC 9.10.3, IHP 1.5) via RunDevServer. 615/616 modules loaded cleanly (IHUB-WP-0017). ### A2 — Fix compilation errors ✓ Resolved proactively before first build based on static analysis of all 140+ modified files. Key fixes (commit f1978c3): - Removed inline FK constraints from Schema.sql (IHP schema parser cannot parse them); restored via `1744329600-restore-fk-constraints.sql`. - Renamed `#label` → `#label_` to avoid Haskell built-in clash. - Fixed UUID comparisons (`toUUID hub.id`). - Replaced `setStatus`/`respondJson` with `renderJsonWithStatusCode`. - Refactored 100+ HSX inline lambdas to named helper functions (GHC type inference limitation in quasi-quotes). - Fixed missing imports throughout helpers and controllers. - Moved type-registry INSERT seeds to `1744502400-seed-type-registries.sql`. ### A3 — Enable Tailwind build pipeline ✓ - `tailwindcss` added to `flake.nix` packages. - `tailwind.exec` process uncommented in devenv shell. - `tailwind/tailwind.config.js` and `tailwind/app.css` created. - `static/app.css` will be populated when `devenv up` runs the watcher. ### A4 — Admin user seed migration ✓ - `Application/Migration/1744416000-seed-admin-user.sql`: inserts `admin@inter-hub.local` / `admin1234!` (bcrypt cost 10). - `.env.example` added documenting all required env vars and admin creds. ### A5 — Smoke test ✓ Verified on haskelseed (192.168.178.135:8080, Alpine 3.23, 2026-04-29): login works, hub list renders styled, all dashboards load, API v2 requires API key (correct — 401 on unauthenticated call). Tagged v0.2.0-alpha.1. ## Exit Criteria - `devenv up` starts cleanly with no compilation errors - `static/app.css` is non-empty (Tailwind output present) - Login with seeded admin user succeeds at `http://localhost:8000` - Hub list page renders with correct styling - Smoke test A5 passes for all five checks