Skip to content

Ideony — Status

Reference — live status. Single source of truth for what’s in-flight right now.


2026-04-21


ItemTaskOwnerStartedBlocked byTarget
post-demo UXUI + bug-sweep multi-agent batch2026-04-21local-only, deploy when stable
E2E M4Multi-role harness: TestModule + tenant-isolation middleware (nestjs-cls + Prisma $extends) + ClockService/DelayService + orchestrator & S1 scenario2026-04-21merged; S2–S6 scenarios next
Docs frameworkStarlight + llms.txt + auto-gen (OpenAPI/Prisma/env/CLI) + quality gates + zero-drift audit. Spec 2026-04-21-docs-framework-design.md, ADR 0027, plan 2026-04-21-docs-framework-impl.md2026-04-21Phase 2 Task 2.1 shipped (llms.txt generation live); Tasks 2.2–2.5 in flight

  • E2E M4 S2–S6 scenarios shipped (web-only). Full fan-out: SOS dispatch + accept under FakeClock (S2), cancel + refund (S3), chat diagnostic wrapper marked test.fail pending BE socket gateway (S4), credentials submit + admin approve (S5), review + aggregate (S6). All specs test.skip cleanly without test envs. seed.ts helper type aligned with actual BE { consumerId, professionalUserId, ... } shape. Dry-run + full-suite runs next.
  • E2E M4 — multi-role harness merged. BE TestModule + tenant-isolation middleware (nestjs-cls + Prisma $extends) + ClockService/DelayService deterministic-time wrappers + e2e/multi-role/ orchestrator and first S1 scenario. TestController at /test/* (tenant create/cleanup, state polls, seed, advance-time) gated by env flag + HMAC-signed X-Test-Tenant header. Orchestrator allocates one tenant per spec, exposes actor(name) over N BrowserContexts, teardowns idempotently. S1 covers full booking lifecycle, each transition fenced by waitForBookingStatus. New test:multi-role / test:s1 scripts, Playwright spec skips without env. S2–S6 next.
  • E2E M3b — browser i18n smoke. Consumer-profile picker IT↔EN toggle covered by e2e/web/i18n/language-switch.spec.ts; testID added to LanguagePicker modal/options + profile menu row. New test:i18n script.
  • E2E M3 — gap-closure audit. Docs correction: webhook + i18n API-integ coverage already existed (apps/api/test/e2e/{clerk,stripe}-webhook.e2e-spec.ts, e2e/tests/11-webhooks/, e2e/tests/12-i18n/); spec “GAP” markers stale. Remaining work split: M3b browser i18n (needs testID instrumentation), M3c rate-limit E2E (blocked on throttler).
  • E2E M2 — post-CD prod smoke. playwright.prod-smoke.config.ts + test:prod-smoke script; runs 3 unauthenticated smoke specs against PROD_FE_URL via Chromium. scripts/deploy.sh now aborts + prints rollback hint if smoke fails. Authed smoke deferred to M3+ (needs prod Clerk test user).
  • E2E M1 — 3 demo walkthrough specs. e2e/web/demo/demo-01..03.spec.ts cover home→triage→results, results→book→success, bookings list→detail. Shared helpers/demo-auth.ts (signInAsConsumer + missingDemoEnv). pnpm --filter @ideony/e2e test:demo runs all 3 in <2 min. Skips when Clerk BAPI env absent. First milestone of docs/specs/2026-04-21-e2e-strategy.md delivered.
  • docs: E2E strategy spec locked — web + iOS + Android day 1, envs local/dev/staging/prod, nightly post-MVP0. docs/specs/2026-04-21-e2e-strategy.md supersedes Phase E spec (carried forward as M4 track). Q1–Q5 locked per user 2026-04-21: real test users on prod via test_tenant isolation, C→A→B build order (demo → deploy → multi-role), both iOS+Android sims from day 1, free-tier device cloud (LambdaTest), SOTA (BrowserStack App Live $99/mo) post-revenue. Framing: cover everything built so far, red tests = diagnostic delta. Plus docs/plans/2026-04-21-rate-limit-throttler-audit.md@nestjs/throttler 4-tier plan (authStrict/userWrite/userRead/costly), Redis-backed storage, migrate existing credential throttle, DEFERRED post-MVP0 (~0.5 dev day). Saved ecosystem-plugin-preference rule: prefer @nestjs/* / expo-* first.
  • P1b-c — E2E auto-boot + web-build smoke. e2e/playwright.config.ts gains webServer block (local only) that auto-starts the NestJS API; scripts/verify-local.sh adds pnpm --filter @ideony/mobile build:web smoke when mobile sources change. P1a dropped — apps/mobile/playwright.config.ts is live (preview/tour screenshot tests), not dead. See docs/testing.md for E2E commands.
  • B30 — /book address Input: GPS auto-fill + Mapbox Places autocomplete. New components/book/AddressField.tsx — MapPin button reverse-geocodes device GPS, typing debounces 300 ms into Mapbox Search Box /suggest (Italy only, Italian, max 5), tap result resolves via /retrieve w/ rotating session token. Booking submit posts resolved {lat, lng}. Helpers in lib/mapbox/geocode.ts.
  • B29 — image upload on /book web fix. apps/mobile/lib/media/upload.ts branches on Platform.OS === "web" to skip expo-image-manipulator (unsupported in the browser, throws on import) and skip the iOS/Android permission prompt (browser handles via file-picker dialog). 2/2 unit tests green.
  • UXUI Sole token cleanup (A4–A7 mechanical sweep). Replaced remaining hardcoded hex literals in booking detail, book success screen, pro calendar/earnings/credentials/onboarding-portfolio with semantic colors.* tokens (textInverse, warning, text, background). All screens were already on Gambarino/Switzer — this closes the token-alignment audit. Typecheck green.
  • HARDEN revert — pre-public security restore. Every MVP/PoC relaxation from alpha-2026-04-20-cofounder-demo reverted: AUTH_BYPASS=1 branch + resolveBypassUser() removed from ClerkGuard; RolesGuard env short-circuit removed; @fastify/helmet back to defaults (CSP + all Cross-Origin-* policies on); main.ts CORS + both WebSocket gateways (sos, professionals) switched from origin: true reflect-any to process.env.CORS_ORIGIN?.split(",") allowlist with explicit allowed headers; demoMode flag removed from auth store + useApiClient + app/index.tsx + use-continue-flow + continue.tsx + continue screen test. Net −123 / +12 across 11 files.
  • Alpha crystallized 2026-04-20 — tag alpha-2026-04-20-cofounder-demo. End-to-end demo flow works on web: home prompt → /triage SSE stream (typing/results_ready) → /results?category=<slug>/professional/[id]/book/[professionalId] (triage prefill + address Input) → Send request → success screen → bookings tab (list + detail). Snapshot + rollback runbook: docs/plans/2026-04-20-alpha-crystallization.md.
  • fix(api): triage stream silent exit — response_format: json_object blocked tool calls + legacy prompt rewritten — GPT-5.4-mini now calls askUserQuestion / searchProfessionals correctly; Italian prompt requires tool usage explicitly; catch {} logs primary + fallback failures
  • fix(api): SSE responses carry CORS headers — bypasses Fastify onSend hookreply.raw.writeHead(200, ...) now injects Access-Control-Allow-Origin/-Credentials/Vary via shared buildCorsHeaders(reply)
  • fix(mobile): SSE parser reads event:prefix line, notevent.type“ — triage results now render; flattens {location:{lat,lng}} to {latitude,longitude} to match BE Zod DTO
  • fix(api): CORS reflects any origin + AUTH_BYPASS=1 unblocks demo flow — Helmet CSP + cross-origin policies disabled; ClerkGuard + RolesGuard short-circuit on env flag; revert before public launch (HARDEN comments flag every spot)
  • fix(mobile): book screen address Input always rendered — submit no longer permanently disabled with triage prefill — B30 (GPS auto + autocomplete) deferred to bug-sweep doc
  • fix(api): bookings list + detail flatten professional.businessNamefindByConsumer / findByProfessional / findById now include professional.professionalProfile, mapped via flattenBookingProfessional() helper; FE optional-chains for stale caches
  • fix(api): /triage/stream 404 — TriageModule now wired in AppModule + AgentFactory exported from AiModule — consumer home prompt → triage crash resolved; AI assistant flow usable again.
  • fix(mobile): HomeMap web static image renders — Dimensions.get at module load returns 0 on web; switched to useWindowDimensions hook — hero map on consumer home no longer renders as a blank cream box on web
  • fix(mobile): bookings tab 401 on web — token null before Clerk readyuseConsumerBookings and useBookingDetail fired their TanStack Query queryFn before @clerk/clerk-expo had hydrated the JWT on web (first render); getToken() returned null, Authorization header silently omitted, backend returned 401. Fixed: enabled: !!isSignedIn (from useAuth()) on both queries; useBookingDetail retains existing !!id guard. No dep changes, no routing changes; native (iOS/Android) unaffected.
  • feat(api): demo seed for cofounder walkthrough — idempotent seed adds Edoardo demo consumer + 2 bookings (PENDING electrical + ACCEPTED plumbing); runbook at docs/plans/2026-04-21-demo-runbook.md
  • fix(mobile): web bundle runtime crash — pretty-format@30 broken ESM + local API port + push notif web guard — Metro resolver redirects pretty-format → v29 CJS (v30’s .mjs returns undefined default through babel’s _interopDefault); apps/mobile/.env corrected to http://localhost:3000 (was 3001, caused ERR_CONNECTION_REFUSED loop); use-push-notifications.ts guards web platform so the VAPID-key error toast stops firing. ADR-0025 locks LTS-deps-only policy (rationale: this was the second canary-transitive bug this week).
  • feat(mobile): category chip navigates to filtered results — B20 — tapping a chip on consumer home now pushes /results?category=<slug> and the results empty state branches on the category param with Italian + English copy.
  • fix(mobile): SOS tab label + loader fallback — B14 — eliminates infinite-spinner on SOS tab (route-group URL collision made router.replace("/sos") a no-op), unclips the “sos” tab-bar label, and adds a 4 s geolocation timeout so the browser prompt can’t hang the form
  • fix(mobile): move triage screen out of consumer tab group — B17 — triage moves to root Stack (app/triage.tsx) so it no longer leaks into the tab bar on web
  • feat(mobile): home hero map w/ real-time pro presence (B18 + B26) — 45% viewport Mapbox view under prompt/chips; Socket.IO /professionals namespace broadcasts pro.presence.update events on toggle-online; native uses @rnmapbox/maps + web uses Static Images API
  • feat(mobile): unified triage flow — no double ask from prompt to booking (B19 + B24) — home prompt routes through /triage and seeds useTriageStore; /book reads the store, replaces the raw description/address form with an editable “La tua richiesta” summary card, and clears the session after a successful submit. 12 home + 21 triage + 13 book unit tests green.
  • feat(mobile): themed settings + language picker + destructive button variant — B15 B16 B21 — consumer Profile/Settings rebuilt on Button + useThemedColors(); Light/Dark/System now propagates app-wide (previous bug: orphan theme store only retinted tab bar); IT/EN language picker modal persists user.locale to AsyncStorage.
  • feat(mobile): chat attachment picker — B22AttachmentBar (photo/video/audio strip) in chat composer; pickPhoto/pickVideo via expo-image-picker, pickAudio via expo-document-picker; 13 unit tests green.
  • fix(api): AI keyword pre-classifier + Italian plumbing disambiguation (B23) — “mi perde il rubinetto” → plumbing; short-circuit at confidence ≥ 0.9 in job-parser graph
  • fix(api+mobile): Send request 500 on invalid categoryId + empty description (B25) — categoryId existence check before insert, description.min(1) in DTO, submit button guarded on firstCategory; 2 e2e regression tests
  • fix(mobile): P0 rock-solid pass — post-auth route crash, Metro --clear, Docker Mapbox ARG, .dockerignore env leak — 5 demo-blocker bugs fixed (B1, B2, B3, B5 per specs/2026-04-21-rock-solid-fe-be-design.md)
  • feat(mobile): dark-mode codemod — chrome + ui primitives via useThemedColors() — #180 complete; system-theme support unblocked
  • fix(mobile): cofounder mobile login on prod — OAuth popup + email OTP + guest CTA — mobile Safari popup-blocker on useOAuth routed to signIn.authenticateWithRedirect on web; email flow now checks supportedFirstFactors before prepareFirstFactor (was causing Clerk “is missing”); new “Entra come ospite (demo)” CTA on /(welcome)/continue flips demoMode in auth store and skips Clerk entirely (pairs with BE AUTH_BYPASS=1). MVP/PoC — HARDEN before public launch.
  • fix(test): update book.test.tsx address label assertion — address Input always renders; test adjusted to match alpha behaviour
  • feat(mobile): booking cancel CTA + useCancelBooking hook — consumer cancel flow end-to-end
  • fix(test): add useCancelBooking mock to booking detail test — test coverage for cancel hook
  • feat(mobile): guard review screen against duplicate submissions — idempotency guard on review submit
  • fix(typecheck): remove stale @ts-expect-error directives in Input test — zero-warnings cleanup
  • docs: UXUI realignment sprint plan 2026-04-21 — sprint locked, phases A/C/B/D defined
  • feat(mobile): design system M0 — Italian Sole tokens, Gambarino + Switzer fonts (lib/fonts.ts 0c8182b)
  • feat(mobile): Mapbox integration — replaced react-native-maps + Google Maps, Day 1 decision 2026-04-19
  • feat(api): pro credentials module — Phase A complete (upload, admin queue, trust engine)
  • chore: OpenAPI SDK generation pipelinepnpm generate:sdkpackages/api-client/
  • CI green: 195 unit + 45 E2E + 122 Playwright all passing on main

  1. Finish #174 R8 visual validation (only remaining Phase 0 item)
  2. Cofounder demo + online review of canonical docs (this evening) — SHA 1af62c5 live on prod
  3. After demo: holy test suite — E2E Phase A/B resumed per specs/2026-04-20-phase-e-multi-role-e2e-spec.md

ItemBlockerAction needed
E2E Phase A (formerly #153)Deferred to post-cofounder-reviewBrainstorm locked in specs/2026-04-20-phase-e-multi-role-e2e-spec.md; resume after demo
E2E Phase B multi-role (formerly #154)BE test-tenancy APIs not yet shipped + deferredResume w/ Phase A after demo
Named tunnel migration (infra)is-a.dev/register#36614 PR not mergedMonitor PR; swap Quick Tunnel → named tunnel after zone active
Post-v0 secret rotation (infra)v0 not yet stableSchedule post-launch rotation sprint

  • Task starts → add row to In flight table
  • Task ships → move to Recently shipped, remove from In flight
  • Blocked → add to Blocked / waiting with explicit blocker + action
  • Weekly: prune Recently shipped to last 7 days, roll older entries to CHANGELOG.md
  • Do NOT duplicate milestone or feature state here — that belongs in roadmap.md