KeyNova Phase 1 Launch Readiness
Target launch: April 14, 2026 Goal: Onboard 5 properties (Mumbai, Bangalore, Delhi, Jaipur, Goa) onto KeyNova production Status: READY WITH BLOCKERS — code, UI, tests, and onboarding playbook are complete; 4 P0 night-audit fixes, 1 design decision (D7 contrast), and external credentials remain Generated: 2026-04-07 (consolidated from Workstreams C, D, E, F)
If you read only one document before April 14, read this one. It links to every Phase 1 artifact, names every blocker, and tells you who needs to sign what off.
Status Overview
| Workstream | Owner | Tasks | Done | Blocked | P0 bugs found | Status |
|---|---|---|---|---|---|---|
| C — Critical code fixes | Platform | 7 | 7 | 0 | 0 | COMPLETE |
| D — UI / UX polish | Frontend | 7 | 7 | 0 | 0 (1 design decision) | COMPLETE |
| E — Testing | QA | 4 | 4 | 0 | 3 (night audit) | COMPLETE — bugs flagged |
| F — Onboarding playbook | Customer Success | 3 | 3 | 0 | 0 | COMPLETE |
| External — Credentials & assets | Ops / Design | — | — | 5 items | — | BLOCKED |
| External — P0 fixes (from E3) | Backend | 4 | 0 | — | — | OPEN |
Bottom line: All in-house Phase 1 hardening shipped. Launch is gated on (a) fixing 4 night-audit P0 bugs, (b) a design decision on D7 contrast, and (c) external credentials / assets / domain.
What's Ready
Workstream C — Critical Code Fixes
All 7 tasks merged on feature branches across the affected backend services. See
registry/dashboard.md for the per-task table.
| # | Task | What it ships |
|---|---|---|
| C1 | WebSocket gateway JWT auth | Housekeeping + Kitchen sockets now require valid JWT. +22 gateway tests. |
| C2 | Materialized view consumers | OccupancyMv, RevenueMv, and ChannelPerformanceMv consumers registered in analytics-service. +6 consumer tests. |
| C3 | Multi-property isolation E2E | 5 cross-property leak-prevention Playwright tests added; receiver-side assertPropertyTenant enforced in 3 services. |
| C4 | xPrisma → ServiceClient | 4 sites migrated in property/reservation/frontdesk services. +12 unit tests. |
| C4a | Internal service-account JWT | RS256 signed service tokens, iss=hmp-internal, 5-min TTL, 3-repo rollout. +18 auth tests. |
| C4b | Booking-engine xPrisma migration | 19 cross-service Prisma calls migrated to ServiceClient. +24 controller tests. |
| C5 | Event subscriptions + dispatcher | reservation.created, folio.posted, night.audit.completed flowing into prod compose. +6 dispatcher tests. |
New architecture docs:
- Cross-service communication
- Internal service-account JWT
- WebSocket gateway authentication
- Analytics event flow
- Multi-property isolation
- Booking engine support API
Workstream D — UI / UX Polish
| # | Task | What it ships |
|---|---|---|
| D1 | Dashboard UI consistency | 78 of 86 audit findings fixed; KpiCard standardized for dark zones; 22/22 UI tests pass. |
| D2 | Booking engine mobile responsive | Mobile 23/23, desktop 18/18, tablet 18/18 — 100% pass on all 3 viewports. |
| D3 | Booking engine empty / loading / error states | 17 new states across search, results, room selection, payment. |
| D4 | Dashboard skeleton loaders | Shared KpiCardSkeleton, page-level <Skeleton> rows on 11 pages. |
| D5 | Mobile app KeyNova branding | 14 screens rebranded across HK / Manager / F&B / Guest apps. |
| D6 | Branded receipt templates | ESC/POS + PDF receipts with KeyNova logo, GST footer; +47 tests. |
| D7 | WCAG 2.1 AA accessibility audit | 25 fixes across 26 files; 7 opacity-text contrast violations remain (see Critical Bugs). |
Workstream E — Testing
All 4 testing tasks complete. See per-task linked docs.
| # | Task | What it ships | Result |
|---|---|---|---|
| E1 | Seed 5 test properties | seed-5-test-properties.sql — Mumbai, Bangalore, Delhi, Jaipur, Goa, 350 rooms total | DONE |
| E2 | Full E2E test pass report | Dashboard 583, booking 66, backend 947/959 (98.7%) | 0 production bugs |
| E3 | Night audit scenarios + manual plan | 14 scenarios, manual test plan | 3 P0 bugs flagged (do not auto-fix) |
| E4 | Mobile device test plan | Device matrix + acceptance checklist | Plan ready for QA — Apr 7-13 |
Test deltas vs pre-Phase-1 baseline:
| Suite | Pre-Phase 1 | Phase 1 | Delta |
|---|---|---|---|
| Dashboard E2E | ~28 | 583 across 38 spec files | +555 |
| Booking engine E2E | 59 | 66 | +7 |
| Backend (5 priority services) | 82 | 959 | +877 |
| C-workstream test additions | — | +88 (gateway/consumer/auth/controller/dispatcher) | +88 |
| D-workstream test additions | — | +47 (receipts) + 8 (KpiCard) + 17 (booking states) | +72 |
| Mobile component tests | 0 | 8 (cannot run yet — workspace install pending) | +8 |
Total Phase 1 test count contribution: ~1,560 tests across dashboard, booking engine, and backend services. No production bugs identified by E2.
Workstream F — Onboarding Playbook
| # | Task | What it ships |
|---|---|---|
| F1 | Property Data Collection Form | 491-line questionnaire — property identity, rooms, rate plans, taxes, hardware, payment, channels, GSTIN, FSSAI |
| F2 | Day-by-Day Checklist (T-6 → T-0) | 7-day execution plan with roles, escalation path, daily tasks, GM sign-off gates |
| F3 | Training Materials Review | Audit of existing quick-start guides + per-role training plan (FD, HK, F&B, Manager) |
These together form the complete operating playbook for onboarding any of the 5 Phase 1 properties.
What's Blocked
External inputs needed (from non-engineering)
| # | Item | Owner | Needed by | Blocking |
|---|---|---|---|---|
| 1 | Production domain (api.keynova.in) DNS + cert | Ops | T-5 | API gateway, mobile apps API target |
| 2 | Razorpay live credentials (key + secret + webhook) | Finance | T-4 | Payment processing on launch day |
| 3 | SendGrid live API key + verified sender | Marketing | T-4 | Booking confirmations, password reset, OTP |
| 4 | ResAvenue live merchant credentials | Finance | T-3 | Channel manager bidirectional sync |
| 5 | Hotel-specific seed data (5 properties) | Hotel ops | T-6 → T-2 | Per-property go-live |
These are the only external dependencies. All software is shipped.
Asset gaps (from D-workstream)
| # | Asset | Owner | Workaround until landed |
|---|---|---|---|
| 6 | Final KeyNova logo SVG (dashboard + mobile) | Design team | Placeholder K-leaf in use; works for soft launch |
| 7 | Satoshi font in mobile apps via expo-font | Design team + mobile dev | System fonts in use; cosmetic-only |
Critical Bugs to Fix
P0 — Must fix before April 14 launch
The following 4 bugs were discovered during Workstream E3 (night audit testing) and must be fixed before any of the 5 properties go live. They were intentionally not auto-fixed during the testing pass — they require backend engineer review and a separate PR per fix.
| # | Bug | File | Why it blocks launch |
|---|---|---|---|
| 1 | prisma.pOSOrder.aggregate references model that doesn't exist in frontdesk-service | frontdesk-service/src/night-audit/night-audit.service.ts:445 | Cross-service Prisma drift — night audit FAILS TO COMPILE; 45 of 51 night-audit specs fail. Without this fix, no night audit can run, period. |
| 2 | advanceBusinessDate overwrites entire Property.settings JSON | night-audit.service.ts:662-675 | Wipes per-property timezone, currency, FSSAI license, GSTIN, hardware config on every audit. Will destroy all 5 production properties' settings on first run. |
| 3 | POS reconciliation aggregate missing propertyId filter | night-audit.service.ts:434-453 | In a 5-property tenant, Mumbai's audit aggregates every property's POS revenue. Reconciliation safeguard becomes meaningless. |
| 4 | pOSOrder aggregate has same flaw — no propertyId filter | night-audit.service.ts:445-451 | Same as #3, on the order side. Double-counts across the chain. |
Fix sequence:
- Fix #1 first (compile-restoring) — unblocks the test suite to verify #2, #3, #4
- Add a property-scoped wrapper around step 1 of
processNightAudit - Re-run the E3 manual test plan on the 5-property seed
- Re-run scenarios 1-14 from phase1-night-audit-scenarios.md
P1 — Should fix before April 14
| # | Bug | File | Severity |
|---|---|---|---|
| 5 | Audit log stuck in RUNNING if a post-transaction side effect throws | night-audit.service.ts:182-211 | P1 — needs PagerDuty alert as backstop until fixed |
| 6 | rollbackNightAudit does not decrement folio totals | night-audit.service.ts:536-576 | P1 — hide rollback button in dashboard until fixed |
| 7 | D7 — 7 dashboard pages have opacity-utility-based color contrast violations | dashboard *-bg-card/30, text-foreground/20, etc. | P1 — design decision needed: replace /20-/30 opacity classes with explicit brighter colors, OR formally scope these out of WCAG 2 AA audit |
P2 — Phase 2 candidates (do not block launch)
- Multi-currency reservations not converted to property currency in night audit (no Phase 1 property is multi-currency)
findManytake: 1000cap silently truncates large hotels (none of 5 Phase 1 properties exceed 120 rooms)- 67 pre-existing TS errors in
hmp-web-dashboardtest files - 20 pre-existing TS errors in
hmp-property-service - Mobile-apps workspace install + Jest setup
- 52 remaining
xPrismasites across 10 services
Onboarding Plan
The full per-property onboarding playbook is in docs/onboarding/:
- Property Data Collection Form — sent to hotel ops at T-6 (491 lines)
- Day-by-Day Checklist — T-6 to T-0 execution plan (475 lines)
- Training Materials Review — staff training audit + plan (520 lines)
Per-property timeline (5 properties)
| Property | Code | Rooms | Onboarding window | Go-live |
|---|---|---|---|---|
| Mumbai (Bandra) | KN-T-MUM | 40 | Apr 8 - Apr 14 | Apr 14 |
| Bangalore (Whitefield) | KN-T-BLR | 60 | Apr 8 - Apr 14 | Apr 14 |
| Delhi (Aerocity) | KN-T-DEL | 120 | Apr 8 - Apr 14 | Apr 14 |
| Jaipur (City Palace) | KN-T-JAI | 80 | Apr 8 - Apr 14 | Apr 14 |
| Goa (Calangute) | KN-T-GOA | 50 | Apr 8 - Apr 14 | Apr 14 |
| Total | 350 |
KN-Eng will run the day-by-day checklist for each property in parallel; KN-Ops coordinates kickoff calls and GM sign-offs.
Test Coverage
| Suite | Pass rate | Doc |
|---|---|---|
| Backend (5 priority services) | 98.7% (947/959) | phase1-e2e-report.md §3 |
| Booking engine E2E (after fixes) | 98.5% (65/66) | phase1-e2e-report.md §2 |
| Dashboard E2E (after auth fix) | 58% (337/583) — see triage | phase1-e2e-report.md §1 |
| Multi-property isolation E2E (C3) | 100% (5/5) | registry/EP-018/hardening-notes.md |
| Receipt rendering (D6) | 100% (47/47) | registry/EP-007/hardening-notes.md |
| Night audit suite | 0% (45/51 fail to compile) | phase1-night-audit-scenarios.md — fix P0 #1 first |
| Mobile (Jest) | N/A — workspace install pending | phase1-mobile-device-test-plan.md |
| Mobile (real-device) | Plan ready, execution Apr 7-13 | phase1-mobile-device-test-plan.md |
The dashboard's lower-than-backend pass rate is not a regression — it is dominated by:
- ~100 cascading false positives from a pre-existing
auth.setup.tsbug (fixed in E2 PR) - ~30 D1-stale selectors that need a 2-4 hour refresh sweep
- The 7 D7 contrast violations
- Visual regression baseline drift from the Ink & Brass redesign (cosmetic)
See phase1-e2e-report.md §1 for the full triage.
Architecture Changes
Phase 1 introduced 5 new architecture documents, all under docs/architecture/:
| Doc | Why it exists |
|---|---|
| Cross-service communication | Defines when to use HTTP ServiceClient vs. event bus vs. shared Redis cache. Replaces ad-hoc xPrisma calls. |
| Internal service-account JWT | RS256 service-account tokens for inter-service calls (iss=hmp-internal). Replaces shared HMAC secret. |
| WebSocket gateway authentication | Housekeeping + Kitchen sockets now JWT-authenticated. Documents handshake, token refresh, room-join authorization. |
| Analytics event flow | Materialized view consumers + event dispatcher topology. |
| Multi-property isolation | Receiver-side assertPropertyTenant, JWT property scoping, Playwright leak-prevention E2E suite. |
Plus a new public API surface for the booking engine:
- Booking engine support API — the cleaned-up endpoints that replace the 19 xPrisma calls.
Pre-Launch Checklist (T-7 → T-0)
Today (Apr 7) is T-7. Launch (Apr 14) is T-0.
T-7 (Apr 7) — TODAY
- Backend Begin work on P0 night-audit fix #1 (
pOSOrdercross-service drift) - Frontend Schedule 1-day sprint for D7 opacity-text contrast decision + fix
- Ops Confirm
api.keynova.inDNS owner + ETA - Customer Success Send Property Data Collection Form to all 5 hotels (Mumbai/BLR/DEL/JAI/GOA)
- QA Begin running mobile device test plan on lab Android devices
- Finance Request Razorpay + ResAvenue live credentials
T-6 (Apr 8)
- Backend P0 #1 lands; rerun E3 night-audit scenarios on suite
- Backend Begin work on P0 #2 (
advanceBusinessDatesettings overwrite) - KN-Eng Day 1 of day-by-day checklist for all 5 properties (kickoff calls)
- QA Mobile testing: HK + Manager apps on Android 13
T-5 (Apr 9)
- Backend P0 #2 lands; per-property settings preserved
- Backend Begin work on P0 #3 + #4 (POS reconciliation propertyId filter)
- Ops
api.keynova.inDNS + cert in place; mobile apps EAS-rebuilt with new endpoint - KN-Eng Day 2: per-property data import + Prisma seed for all 5 hotels
T-4 (Apr 10)
- Backend P0 #3 + #4 land; full E3 manual test pass on 5-property seed → all scenarios pass
- Frontend D7 opacity-text contrast fix lands OR formal scope-out documented
- Finance Razorpay + SendGrid credentials wired into prod env
- KN-Eng Day 3: rate plans + tax config + GSTIN per property
- QA Mobile testing: F&B + Guest apps on Android 11/14
T-3 (Apr 11)
- Backend Re-run E2 full E2E pass on prod env
- Backend ResAvenue live merchant credentials wired
- KN-Eng Day 4: hardware integration (locks, terminals, key encoders) per property
- QA Mobile sign-off per device per app — fill in acceptance checklist
T-2 (Apr 12)
- KN-Eng Day 5: full dry-run check-in/check-out cycle on each property
- KN-Eng Day 5: night audit dry-run on each property at staging time
- KN-Ops Staff training delivered per training-materials-review.md
- Backend PagerDuty alert wired for
nightAuditLog.status='RUNNING' for >30min - Ops Run
chaos-monkeysmoke on prod env
T-1 (Apr 13)
- KN-Eng Day 6: final pre-go-live night audit per property — verify clean state
- KN-Ops GM sign-off per property (signed acknowledgement form)
- Backend Final smoke test of all 13 microservices'
/healthendpoints - Backend Verify
night.audit.completedevent bus consumer running - All Pre-launch all-hands at 5 PM IST
T-0 (Apr 14) — LAUNCH
- 00:00 IST All 5 properties go live for new bookings
- 00:00 IST Booking engine + dashboard cut over to prod domain
- 02:00 IST First production night audit runs per property (cron
nightAuditHour=2) - 08:00 IST First check-ins of the day
- 18:00 IST End-of-day status check across all 5 properties — sign-off by KN-Ops + each H-GM
T+1 to T+7 (Apr 15-21)
- 24/7 KN-Dev on-call rotation
- Daily KN-Eng + KN-Ops daily standup with each H-GM
- T+7 Phase 1 retrospective + start Phase 2 planning
Risk Register
Top 10 risks ranked by impact × probability.
| # | Risk | Impact | Probability | Mitigation | Owner |
|---|---|---|---|---|---|
| 1 | P0 night audit bugs not fixed in time | CRITICAL — no property can roll over to next business day | HIGH (4 P0 bugs, 7 days to fix) | Dedicated backend engineer T-7 to T-3; daily standup; rollback to manual audit on day 1 if not landed | Backend lead |
| 2 | Razorpay / SendGrid / ResAvenue credentials delayed | HIGH — no payments, no notifications, no OTA sync | MEDIUM | Escalation to CFO at T-5 if not received; mock-mode fallback for soft-launch with public disclaimer | Finance + Ops |
| 3 | Hotel data not delivered by T-2 | HIGH — that property cannot launch with rest of cohort | MEDIUM (5 hotels = 5 chances to slip) | Daily H-Ops check-in; KN-Ops ladder to GM; pre-fill defaults from spec; defer property launch up to T+3 (do not block other 4) | KN-Ops |
| 4 | Multi-property isolation defect missed in E3 testing | HIGH — cross-property data leak in production | LOW (extensive E3 + C3 coverage) | E3 manual plan + C3 isolation E2E + receiver-side assertPropertyTenant triple-defense | QA + Backend |
| 5 | Mobile app crash on launch day | MEDIUM — staff fall back to web | MEDIUM (no Detox CI yet) | Mobile device test plan T-7 to T-3; web fallback always available | QA + Mobile lead |
| 6 | D7 contrast remains unfixed → public a11y complaint | LOW — 7 pages, dashboard-only (not booking engine) | MEDIUM | Designer + product to decide T-7; if scoped out, document on accessibility statement page | Design lead |
| 7 | Night audit cron skips a property due to timezone bug | MEDIUM — manual restart needed | LOW (all 5 share Asia/Kolkata) | E3 scenario 8 covers Goa timezone override | Backend |
| 8 | Logo asset never lands → KeyNova brand looks placeholder on day 1 | LOW — soft brand only | LOW | Placeholder works; design team commitment T-2 | Design |
| 9 | Visual regression baselines fail post-launch on first dashboard PR | LOW — non-blocking | HIGH (baselines drifted) | Re-snapshot on T-3 after final D-stream merges; flag as Phase 2 cleanup | Frontend |
| 10 | Backend tests start failing after P0 night-audit fixes due to spec drift | LOW | MEDIUM | Backend engineer reruns full E2 suite after each P0 fix lands | Backend |
Sign-off
The following sign-offs are required before the April 14 cutover. Each is recorded in
the Azure DevOps phase1-launch ticket.
| What | Who | When |
|---|---|---|
| All 4 P0 night-audit fixes verified on 5-property seed | Backend lead | T-3 (Apr 11) |
| D7 contrast fix landed OR formally scoped out | Design lead + Product | T-4 (Apr 10) |
| Razorpay + SendGrid + ResAvenue credentials live | Finance + Ops | T-3 (Apr 11) |
| Production domain DNS + cert | Ops | T-5 (Apr 9) |
| Mobile device test plan signed off per app per device | QA lead | T-2 (Apr 12) |
| Per-property data import complete | KN-Eng (× 5 properties) | T-2 (Apr 12) |
| Per-property GM sign-off form returned | H-GM (× 5 properties) | T-1 (Apr 13) |
| Customer Success readiness | KN-Ops (CS lead) | T-1 (Apr 13) |
| GO / NO-GO call | Engineering Manager + CTO + CS lead | T-1 (Apr 13) 17:00 IST |
If any of the P0 sign-offs is missing at the GO / NO-GO call, the launch slips to April 21 (T+7). The day-by-day playbook is designed to absorb a 7-day slip without re-work — only credentials and external inputs would need to be re-validated.
Phase 1 Branch Inventory
For the merge sequence after launch, see phase1-branch-list.md.
Where to file feedback
- Bugs found in the report itself:
hmp-docsrepo issue tracker - Phase 1 launch ticket: Azure DevOps
phase1-launch(KeyNova project) - Engineering escalation: KN Eng Manager → CTO (P0 night audit only)
- Customer Success escalation: KN-Ops → CS lead → CRO
This document is the consolidated executive summary for Phase 1 launch. It supersedes individual workstream status reports for the purpose of go/no-go decisioning. For deep detail on any item, follow the linked artifacts above.