Ideony — Status
Ideony — Status
Section titled “Ideony — Status”Reference — live status. Single source of truth for what’s in-flight right now.
Last updated
Section titled “Last updated”2026-04-21
In flight
Section titled “In flight”| Item | Task | Owner | Started | Blocked by | Target |
|---|---|---|---|---|---|
| — | post-demo UXUI + bug-sweep multi-agent batch | — | 2026-04-21 | — | local-only, deploy when stable |
| E2E M4 | Multi-role harness: TestModule + tenant-isolation middleware (nestjs-cls + Prisma $extends) + ClockService/DelayService + orchestrator & S1 scenario | — | 2026-04-21 | — | merged; S2–S6 scenarios next |
| Docs framework | Starlight + 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.md | — | 2026-04-21 | — | Phase 2 Task 2.1 shipped (llms.txt generation live); Tasks 2.2–2.5 in flight |
Recently shipped (last 7 days)
Section titled “Recently shipped (last 7 days)”- 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.failpending BE socket gateway (S4), credentials submit + admin approve (S5), review + aggregate (S6). All specstest.skipcleanly without test envs.seed.tshelper 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/DelayServicedeterministic-time wrappers +e2e/multi-role/orchestrator and first S1 scenario.TestControllerat/test/*(tenant create/cleanup, state polls, seed, advance-time) gated by env flag + HMAC-signedX-Test-Tenantheader. Orchestrator allocates one tenant per spec, exposesactor(name)over N BrowserContexts, teardowns idempotently. S1 covers full booking lifecycle, each transition fenced bywaitForBookingStatus. Newtest:multi-role/test:s1scripts, 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;testIDadded toLanguagePickermodal/options + profile menu row. Newtest:i18nscript. - 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-smokescript; runs 3 unauthenticated smoke specs againstPROD_FE_URLvia Chromium.scripts/deploy.shnow 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.tscover home→triage→results, results→book→success, bookings list→detail. Sharedhelpers/demo-auth.ts(signInAsConsumer+missingDemoEnv).pnpm --filter @ideony/e2e test:demoruns all 3 in <2 min. Skips when Clerk BAPI env absent. First milestone ofdocs/specs/2026-04-21-e2e-strategy.mddelivered. - 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.mdsupersedes Phase E spec (carried forward as M4 track). Q1–Q5 locked per user 2026-04-21: real test users on prod viatest_tenantisolation, 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. Plusdocs/plans/2026-04-21-rate-limit-throttler-audit.md—@nestjs/throttler4-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.tsgainswebServerblock (local only) that auto-starts the NestJS API;scripts/verify-local.shaddspnpm --filter @ideony/mobile build:websmoke when mobile sources change. P1a dropped —apps/mobile/playwright.config.tsis live (preview/tour screenshot tests), not dead. Seedocs/testing.mdfor E2E commands. - B30 —
/bookaddress Input: GPS auto-fill + Mapbox Places autocomplete. Newcomponents/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/retrievew/ rotating session token. Booking submit posts resolved{lat, lng}. Helpers inlib/mapbox/geocode.ts. - B29 — image upload on
/bookweb fix.apps/mobile/lib/media/upload.tsbranches onPlatform.OS === "web"to skipexpo-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-demoreverted:AUTH_BYPASS=1branch +resolveBypassUser()removed fromClerkGuard;RolesGuardenv short-circuit removed;@fastify/helmetback to defaults (CSP + allCross-Origin-*policies on);main.tsCORS + both WebSocket gateways (sos,professionals) switched fromorigin: truereflect-any toprocess.env.CORS_ORIGIN?.split(",")allowlist with explicit allowed headers;demoModeflag 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 →/triageSSE 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 callsaskUserQuestion/searchProfessionalscorrectly; Italian prompt requires tool usage explicitly;catch {}logs primary + fallback failuresfix(api): SSE responses carry CORS headers — bypasses Fastify onSend hook—reply.raw.writeHead(200, ...)now injectsAccess-Control-Allow-Origin/-Credentials/Varyvia sharedbuildCorsHeaders(reply)fix(mobile): SSE parser readsevent:prefix line, notevent.type“ — triage results now render; flattens{location:{lat,lng}}to{latitude,longitude}to match BE Zod DTOfix(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 docfix(api): bookings list + detail flatten professional.businessName—findByConsumer/findByProfessional/findByIdnow includeprofessional.professionalProfile, mapped viaflattenBookingProfessional()helper; FE optional-chains for stale cachesfix(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 webfix(mobile): bookings tab 401 on web — token null before Clerk ready—useConsumerBookingsanduseBookingDetailfired their TanStack QueryqueryFnbefore@clerk/clerk-expohad hydrated the JWT on web (first render);getToken()returnednull,Authorizationheader silently omitted, backend returned 401. Fixed:enabled: !!isSignedIn(fromuseAuth()) on both queries;useBookingDetailretains existing!!idguard. 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 atdocs/plans/2026-04-21-demo-runbook.mdfix(mobile): web bundle runtime crash — pretty-format@30 broken ESM + local API port + push notif web guard— Metro resolver redirectspretty-format→ v29 CJS (v30’s.mjsreturns undefined default through babel’s_interopDefault);apps/mobile/.envcorrected tohttp://localhost:3000(was 3001, caused ERR_CONNECTION_REFUSED loop);use-push-notifications.tsguards 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 thecategoryparam with Italian + English copy.fix(mobile): SOS tab label + loader fallback — B14— eliminates infinite-spinner on SOS tab (route-group URL collision maderouter.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 formfix(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 webfeat(mobile): home hero map w/ real-time pro presence (B18 + B26)— 45% viewport Mapbox view under prompt/chips; Socket.IO/professionalsnamespace broadcastspro.presence.updateevents on toggle-online; native uses@rnmapbox/maps+ web uses Static Images APIfeat(mobile): unified triage flow — no double ask from prompt to booking (B19 + B24)— home prompt routes through/triageand seedsuseTriageStore;/bookreads 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 onButton+useThemedColors(); Light/Dark/System now propagates app-wide (previous bug: orphan theme store only retinted tab bar); IT/EN language picker modal persistsuser.localeto AsyncStorage.feat(mobile): chat attachment picker — B22—AttachmentBar(photo/video/audio strip) in chat composer;pickPhoto/pickVideoviaexpo-image-picker,pickAudioviaexpo-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 graphfix(api+mobile): Send request 500 on invalid categoryId + empty description (B25)— categoryId existence check before insert,description.min(1)in DTO, submit button guarded onfirstCategory; 2 e2e regression testsfix(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 perspecs/2026-04-21-rock-solid-fe-be-design.md)feat(mobile): dark-mode codemod — chrome + ui primitives via useThemedColors()— #180 complete; system-theme support unblockedfix(mobile): cofounder mobile login on prod — OAuth popup + email OTP + guest CTA— mobile Safari popup-blocker onuseOAuthrouted tosignIn.authenticateWithRedirecton web; email flow now checkssupportedFirstFactorsbeforeprepareFirstFactor(was causing Clerk “is missing”); new “Entra come ospite (demo)” CTA on/(welcome)/continueflipsdemoModein auth store and skips Clerk entirely (pairs with BEAUTH_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 behaviourfeat(mobile): booking cancel CTA + useCancelBooking hook— consumer cancel flow end-to-endfix(test): add useCancelBooking mock to booking detail test— test coverage for cancel hookfeat(mobile): guard review screen against duplicate submissions— idempotency guard on review submitfix(typecheck): remove stale @ts-expect-error directives in Input test— zero-warnings cleanupdocs: UXUI realignment sprint plan 2026-04-21— sprint locked, phases A/C/B/D definedfeat(mobile): design system M0— Italian Sole tokens, Gambarino + Switzer fonts (lib/fonts.ts0c8182b)feat(mobile): Mapbox integration— replaced react-native-maps + Google Maps, Day 1 decision 2026-04-19feat(api): pro credentials module— Phase A complete (upload, admin queue, trust engine)chore: OpenAPI SDK generation pipeline—pnpm generate:sdk→packages/api-client/- CI green: 195 unit + 45 E2E + 122 Playwright all passing on main
Up next (this week)
Section titled “Up next (this week)”- Finish #174 R8 visual validation (only remaining Phase 0 item)
- Cofounder demo + online review of canonical docs (this evening) — SHA
1af62c5live on prod - After demo: holy test suite — E2E Phase A/B resumed per
specs/2026-04-20-phase-e-multi-role-e2e-spec.md
Blocked / waiting
Section titled “Blocked / waiting”| Item | Blocker | Action needed |
|---|---|---|
| E2E Phase A (formerly #153) | Deferred to post-cofounder-review | Brainstorm 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 + deferred | Resume w/ Phase A after demo |
| Named tunnel migration (infra) | is-a.dev/register#36614 PR not merged | Monitor PR; swap Quick Tunnel → named tunnel after zone active |
| Post-v0 secret rotation (infra) | v0 not yet stable | Schedule post-launch rotation sprint |
How to update
Section titled “How to update”- 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
Related
Section titled “Related”- roadmap.md — phases, milestones, feature matrix
- decisions/ — ADR log
- CHANGELOG.md — versioned history