Phase 1 — Mobile Device Test Plan
Task: E4 — Real-device mobile testing plan Scope: All 4 KeyNova mobile apps (Housekeeping, Manager, F&B, Guest) on physical Android devices Audience: QA team executing pre-launch validation during the week of April 7-13, 2026 (Phase 1 launch on April 14, 2026) Status: Draft — ready for QA team execution
Companion documents
phase1-mobile-device-matrix.md— device matrix, APK distribution, and EAS build commandsphase1-mobile-acceptance-checklist.md— quick-scan sign-off checklist
1. Overview
The KeyNova mobile suite consists of four React Native / Expo apps shipped as part of the hmp-mobile-apps monorepo:
| App | Package (Android) | Primary users | Form factor |
|---|---|---|---|
| KeyNova Housekeeping | com.keynova.housekeeping | Room attendants, HK supervisors | Phone / phablet |
| KeyNova Manager | com.keynova.manager | GMs, department heads, owners | Phone / tablet |
| KeyNova F&B | com.keynova.fnb | Waiters, captains, F&B managers | Phablet / tablet |
| KeyNova Guest | com.keynova.guest | In-house & upcoming guests (self-service) | Phone |
All four apps share:
- Expo SDK 50+ with
expo-routerfile-based navigation - Auth: JWT (access token + refresh token) stored in
expo-secure-store - API target (production build profile):
http://43.204.247.178/api(QA EC2 — will be swapped to prod domain before launch) - KeyNova Ink & Brass theme: navy
#0A1628splash background, gold#B8962Eaccents
1.1 iOS — Out of scope for Phase 1
As reported in task D5 (Mobile app KeyNova branding), iOS builds are not configured for any of the four apps — the eas.json submit section still contains placeholder Apple credentials, no app-specific-password, and no Apple Developer enrollment has been verified. All Phase 1 real-device testing is Android-only. iOS support will be revisited in Phase 2.
1.2 Test plan goals
- Verify each app installs and runs on Android 11, 13, and 14 without crash-on-launch
- Exercise every primary user journey (login, core task flow, logout) on a real device with a real network
- Validate the KeyNova branding lands correctly in production builds (splash, launcher name, header color)
- Confirm offline / WiFi-handoff behaviour for HK (only app with explicit offline-sync support)
- Identify what is acceptable for Phase 1 launch vs. what is a hard blocker
- Produce a dated sign-off report per device per app
1.3 Test plan non-goals
- Automated E2E (no Detox run on CI — tracked separately as
E2-F2) - iOS-specific flows
- Performance / load testing (smoke-level manual observation only)
- Localized language testing beyond English (Hindi/Tamil will be sampled only if visible strings are present)
2. Test environment
2.1 Backend target
| Environment | URL | Use for |
|---|---|---|
| QA (current) | http://43.204.247.178/api | Device testing from Apr 7-10 |
| Prod (from Apr 11) | https://api.keynova.in/api | Final go/no-go validation |
Note:
eas.jsoncurrently points production builds athttp://43.204.247.178/api. When the prod domain is cut over (per F1 task),eas.jsonin each of the four apps must be updated and a new APK produced. Retest the 4 smoke scenarios below on the re-built APK.
2.2 Test credentials (from seed — E1)
| Role | Password | |
|---|---|---|
| Admin | admin@hmphotel.com | <REDACTED> |
| Manager | manager@hmphotel.com | <REDACTED> |
| Front desk | frontdesk@hmphotel.com | <REDACTED> |
| Housekeeping | hk@hmphotel.com | <REDACTED> |
Fixed IDs for reference during assertions:
- Tenant:
00000000-0000-4000-a000-000000000001 - Property:
40b29005-5196-4ba7-a71d-94323caee4dc(Grand Vishram Hotel)
Additional 5 test properties seeded per E1 — see phase1-e2e-report.md for property list. The manager multi-property test must be executed against a user mapped to 3+ of those properties.
2.3 Guest app test data
Guest app login uses confirmation number + last name. Seed reservations from E1 that are currently in CHECKED_IN or CONFIRMED_UPCOMING state must be used. Pick 2 of each:
- 2 in-house (for "My Stay" home screen with in-house quick actions)
- 2 upcoming (for Pre Check-In flow)
2.4 Network conditions to exercise
| Condition | Purpose |
|---|---|
| Hotel WiFi (typical 2.4 GHz, 5–15 Mbps) | Baseline |
| Cellular 4G LTE | Field backup |
| WiFi drop → cell handoff mid-action | Resilience |
| Airplane mode mid-task | Offline sync (HK only) |
| Slow 3G (throttled via developer options) | Low-bandwidth demo properties |
3. Device matrix — summary
Full device procurement, specs, and rationale in phase1-mobile-device-matrix.md. At-a-glance:
| Slot | Device | Screen | Android | Covers |
|---|---|---|---|---|
| 1 | Samsung Galaxy A23 | 5.8" | 13 | Budget phone (dominant at demo properties) |
| 2 | Google Pixel 6 | 6.4" | 14 | Mainstream modern phone |
| 3 | Samsung Galaxy S23 Ultra | 6.8" | 14 | Phablet (manager day-to-day) |
| 4 | Samsung Galaxy Tab A8 | 10.5" | 11 | Tablet (F&B captain / manager tablet), older Android |
All four devices are REQUIRED for sign-off. Any app that crashes or fails login on any device is a blocker.
4. Per-app test checklists
Each checklist below is executed once per device (4 devices × 4 apps = 16 passes). Record results in phase1-mobile-acceptance-checklist.md.
4.1 KeyNova Housekeeping
Path: hmp-mobile-apps/apps/housekeeping/
| # | Step | Expected | Pass criteria |
|---|---|---|---|
| HK-01 | Launch app cold (killed) | Splash screen shows navy #0A1628 background; no Expo default art; launcher icon is KeyNova placeholder | Branded splash visible; no flash of default Expo logo |
| HK-02 | Login with hk@hmphotel.com | Token stored in SecureStore; redirect to (tabs)/my-tasks | Successful login within 3s |
| HK-03 | Property selection (multi-property staff only) | Picker shows properties the user is authorized for | Correct list; selection persists after relaunch |
| HK-04 | Tab navigation: my-tasks → tasks → rooms → maintenance → profile | All 5 tabs mount without error | No blank screens, no JS red box |
| HK-05 | Pull-to-refresh on My Tasks | Network fetch, skeleton shown, fresh data | New task count matches dashboard |
| HK-06 | Swipe-right on a task card | SwipeableTaskCard fires "accept" | Task moves from pending to in-progress; dashboard reflects it within 5s |
| HK-07 | Swipe-left on a task card | SwipeableTaskCard fires "defer" | Task marked deferred; dashboard reflects it |
| HK-08 | Open task detail, start Cleaning Timer | CleaningTimer begins counting from 00:00 | Color is green for 0–20m |
| HK-09 | Send app to background for 10s, return | Timer auto-pauses on background, resumes on foreground | Elapsed time does NOT include background seconds |
| HK-10 | Let timer run past 20m / 30m (can fast-forward via device clock) | Color transitions green → orange → red | Visible color change at 20m and 30m boundaries |
| HK-11 | Complete task with a photo | Camera permission prompt → photo capture → upload | Task marked complete; photo visible in task history on dashboard |
| HK-12 | Offline mode: enable airplane mode, create a task status update (e.g. "Clean") | Action queued via useOfflineSync; UI shows "Pending sync" state | No error dialog; pending count increments |
| HK-13 | Disable airplane mode (still on same screen) | Pending mutation auto-replays via POST /sync; queue drains | Dashboard reflects the status within 10s |
| HK-14 | Real-time from dashboard: have a second person assign a new task from the web dashboard | useRealtimeTasks hook receives WebSocket event on /housekeeping namespace; task appears without manual refresh | Task visible within 5s; no pull-to-refresh needed |
| HK-15 | Push notification: assign task while app is backgrounded | Expo push notification appears; tap opens the task detail screen | Deep link routes to the correct /task/[id] |
| HK-16 | Profile → Logout | SecureStore cleared; redirect to login | Cannot access (tabs)/* without re-login |
Known limitations for Phase 1:
- Badge count on launcher icon may not update (Expo notifications limitation on some OEM ROMs)
- Photo upload requires WiFi or 4G+; on 3G it may time out (acceptable)
4.2 KeyNova Manager
Path: hmp-mobile-apps/apps/manager/
| # | Step | Expected | Pass criteria |
|---|---|---|---|
| MG-01 | Cold launch | Navy splash, KeyNova placeholder icon in launcher | No Expo default flash |
| MG-02 | Login with manager@hmphotel.com | Redirect to (tabs)/dashboard | Within 3s |
| MG-03 | Dashboard KPIs visible | Occupancy %, ADR (₹), RevPAR (₹), Today's Revenue | All 4 values render, non-zero for seeded property |
| MG-04 | KPI trend arrows | Up/down indicators with delta vs. yesterday | Colors match direction (green up, red down) |
| MG-05 | Property selector (for chain users) | List of properties staff is authorized for | Switching updates all KPIs |
| MG-06 | Operations tab → arrivals list | Shows today's arrivals from seed | Count matches dashboard web view |
| MG-07 | Operations tab → departures list | Shows today's departures | Matches web |
| MG-08 | Operations tab → in-house | Shows currently checked-in guests | Matches web |
| MG-09 | Approvals tab | List of pending discount/void approvals | Tap approval shows ApprovalCard with Approve/Reject buttons |
| MG-10 | Approve a pending item | Confirmation dialog → approve → item removed from list | Dashboard web shows approved state |
| MG-11 | Reject a pending item with reason | Text input for reason → reject | Item removed; reason persisted |
| MG-12 | Reports tab | List of available reports (occupancy, revenue, etc.) | Tap opens report viewer |
| MG-13 | Alert card tap | Opens context for the alert | Correct routing (e.g. low occupancy → dashboard) |
| MG-14 | Profile → Logout | Back to login | Cannot re-enter without auth |
Known limitations:
- Chart rendering may be slow on Android 11 tablets (Victory Native performance) — acceptable if <3s
- No offline mode — all reads require network (documented)
4.3 KeyNova F&B
Path: hmp-mobile-apps/apps/fnb/
| # | Step | Expected | Pass criteria |
|---|---|---|---|
| FB-01 | Cold launch | Navy splash, KeyNova placeholder icon | No default art |
| FB-02 | Login with admin@hmphotel.com (or seeded F&B user) | Redirect to (tabs)/tables | Within 3s |
| FB-03 | Outlet selection | Picker with 4 seeded POS outlets | Selection persists |
| FB-04 | Tables floor plan (Konva canvas) | Tables rendered at posX/posY with status colors | All 29 seeded tables visible; pan/zoom works smoothly |
| FB-05 | Tap a vacant table | Opens order entry | Menu categories load |
| FB-06 | Add menu item to order | Haptic feedback; item appears in order summary | Item count increments |
| FB-07 | Add item with modifiers | ModifierSheet bottom sheet opens | Modifiers selectable; required modifiers enforced |
| FB-08 | Increase quantity on item already in order | Quantity increments, not duplicated | Single line item with qty=N |
| FB-09 | Special instructions field | Free text input saves with order | Instructions visible in KOT preview |
| FB-10 | Send to KDS (Send KOT) | Order posted; KOT printed to kitchen display; success toast | KDS display shows the new KOT within 5s |
| FB-11 | Real-time KOT status updates | useRealtimeKitchen hook receives kotAcknowledged + orderItemReady from /kitchen namespace | Status badge updates in real-time without refresh |
| FB-12 | Kitchen marks item ready → waiter receives push notification | Foreground: in-app toast; Background: system notification | Notification within 5s of kitchen action |
| FB-13 | Close table: generate bill | Bill preview with items, modifiers, tax breakdown | Totals match seeded tax config |
| FB-14 | Print bill (to seeded test printer or mock) | POST /pos/orders/:id/bill with printMock=true in env | Success toast; bill logged in folio |
| FB-15 | Orders tab | List of today's orders for the outlet | Count matches web dashboard |
| FB-16 | Kitchen tab (if staff role = kitchen) | KDS-like view of active KOTs | KOTs grouped by station |
| FB-17 | Profile → Logout | Back to login | SecureStore cleared |
Known limitations:
- Konva canvas panning may feel sluggish on Android 11 (acceptable)
- Split-bill UI exists but is flagged experimental — do not test in Phase 1
- Payment collection UI is deferred to Phase 2 (Razorpay SDK integration pending)
4.4 KeyNova Guest
Path: hmp-mobile-apps/apps/guest/
Scope verified from app/_layout.tsx and app/index.tsx: this is a guest-facing self-service app, not a kiosk. It has the following screens:
login.tsx— booking lookup (confirmation number + last name)index.tsx— "My Stay" home with welcome card, property name, booking number, status badgeroom-service.tsx— order food & beverages from in-roomrequests.tsx— housekeeping, maintenance, and other requestspre-checkin.tsx— pre-arrival check-in (hidden once status == CHECKED_IN)
| # | Step | Expected | Pass criteria |
|---|---|---|---|
| GU-01 | Cold launch | Navy splash | No default art |
| GU-02 | Open login (Find My Booking) | Form with confirmation number + last name | Form loads |
| GU-03 | Login with seeded upcoming booking | GuestAuthProvider stores session | Redirect to index ("My Stay") |
| GU-04 | "My Stay" welcome card | Shows guest name, property name, confirmation number, status badge ("Upcoming" or "In-House") | All fields populated from seed |
| GU-05 | Menu items visible | Room Service, Requests, Pre Check-In (Pre Check-In hidden if in-house) | Correct filtering by session.status |
| GU-06 | Tap Pre Check-In | pre-checkin.tsx loads form | Form submits successfully; status updates to "Pre Checked In" on dashboard |
| GU-07 | Login with in-house booking, tap Room Service | room-service.tsx loads menu | Menu items from POS outlet load |
| GU-08 | Place a room service order | Order submitted; confirmation number displayed | Order visible on dashboard |
| GU-09 | Tap Requests | requests.tsx loads; list of existing requests (if any) + new-request button | Form loads |
| GU-10 | Submit a housekeeping request (extra towels) | Request created with status PENDING | Visible in HK app's tasks list within 10s |
| GU-11 | Sign Out button | Session cleared; redirect to login | Cannot access index.tsx without re-auth |
Known limitations:
- No push notifications for guests in Phase 1 (no device token registration for guest sessions)
- No multi-language UI (English only in Phase 1)
- Pre Check-In does not yet upload guest ID photos (placeholder)
5. Cross-app test scenarios
Execute these on at least 1 phone and 1 tablet per app:
5.1 Battery consumption (soak test)
Procedure:
- Fully charge device to 100%
- Login to app, run typical usage loop for 60 minutes (see per-app typical loop below)
- Record battery percentage at 60m mark
- Target: ≤ 15% drain for HK/Manager/Guest, ≤ 20% for F&B (Konva canvas heavier)
Typical usage loops:
- HK: Accept task → start timer → mark 2 checklist items → upload photo → complete → repeat (6 tasks/hour)
- Manager: Open dashboard → scroll → switch property → view arrivals → approve 1 item → repeat (10 cycles/hour)
- F&B: Open table → add 5 items → send KOT → close → open next table → repeat (8 tables/hour)
- Guest: Login → view stay → order room service → view requests → logout → repeat (4 cycles/hour)
5.2 WiFi ↔ cellular handoff
Procedure:
- Connect to hotel WiFi, login, start an action (e.g., create an HK task update)
- Mid-action (just before hitting "Complete"), disable WiFi — device falls back to cellular automatically
- Complete the action
- Verify the action succeeded and no duplicate was created
Pass criteria:
- No crash
- Action either succeeds on cellular OR gets queued for offline sync (HK only)
- No duplicate mutations after reconnect
5.3 Cold start vs warm start
| Start type | Definition | Expected behavior |
|---|---|---|
| Cold | App killed from recents, then launched | Branded splash (navy) visible for 1-2s; login screen or resumed session |
| Warm | App backgrounded, foregrounded again | No splash; resume at previous screen; timer states preserved |
5.4 Low-light viewing
Test all 4 apps in:
- Bright sunlight (outdoor)
- Normal indoor lighting
- Low-light (back-of-house corridor, night shift)
Pass criteria:
- Gold
#B8962Eaccents still legible against#0A1628navy in all conditions - Dashboard KPI numbers readable at arm's length
- No dark UI elements invisible in low-light (common with gold-on-navy when contrast drops)
5.5 Rotation (portrait / landscape)
app.json for all 4 apps declares "orientation": "portrait". Therefore:
- Rotating the device should NOT change the UI orientation
- Tablet user rotating to landscape: UI remains portrait (letterboxed on tablet — acceptable for Phase 1)
- Confirm no crash on rotation
5.6 Accessibility: TalkBack (Android screen reader)
Procedure:
- Enable TalkBack (Settings → Accessibility → TalkBack)
- Navigate each app's primary flow using only screen reader gestures
- Record any unlabeled buttons, missing alt text, or focus traps
Pass criteria for Phase 1:
- Login form fields have labels readable by TalkBack
- Primary CTAs (Send KOT, Complete Task, Approve) have readable labels
- No focus traps (can always navigate back)
- Acceptable for Phase 1: some charts and the Konva canvas are not screen-reader accessible (known limitation; flagged for Phase 2 per D7 accessibility audit)
5.7 Text scaling (Android large text)
Procedure:
- Settings → Display → Font size → Largest
- Launch each app
- Scan for truncation, overlap, or unreadable UI
Pass criteria:
- No text cut off in critical CTAs
- Form fields remain usable
- Bottom navigation tabs don't overlap content
- Acceptable for Phase 1: some KPI cards may wrap awkwardly at 200% text size (not a blocker)
5.8 One-handed use (thumb reach)
For HK and Guest apps (phone form factor):
- Primary CTAs must be reachable with thumb when holding device in one hand
- Bottom nav is at the bottom (good) — verify it remains at bottom with on-screen keyboard hidden
- Pull-to-refresh works one-handed
6. KeyNova branding verification
Per task D5 (Mobile app KeyNova branding). Execute on every device × every app combination:
| # | Item | Pass criterion |
|---|---|---|
| BR-01 | Splash screen background | Navy #0A1628 — no flash of white |
| BR-02 | Launcher icon | KeyNova placeholder icon (navy + gold K-leaf) — NOT the default Expo blue icon |
| BR-03 | App name in launcher | "KeyNova Housekeeping" / "KeyNova Manager" / "KeyNova F&B" / "KeyNova Guest" — NOT "HMP" anywhere |
| BR-04 | Login screen | Navy header, gold accent on submit button |
| BR-05 | Header bar | Navy background, gold icon tint |
| BR-06 | Tab bar | Navy background, gold active tab indicator |
| BR-07 | Primary CTAs | Gold background on action buttons (Send KOT, Complete, Approve) |
| BR-08 | Full-text search for "HMP" | Run grep -r "HMP" app/ components/ in each app — should return 0 matches in user-visible strings |
| BR-09 | Notification channel names | Android system shows "KeyNova" prefix — not "HMP" |
| BR-10 | Deep links (scheme) | keynova-housekeeping://, keynova-manager://, keynova-fnb://, keynova-guest:// |
7. Known placeholder items (not blockers, but must be tracked)
Per D5 handoff:
| Item | Current state | Phase 1 action | Follow-up owner |
|---|---|---|---|
| Logo SVG | React-Native-rendered K-leaf placeholder; no high-res PNG | Accept placeholder; design team delivers final PNG pre-Phase-2 | Design team |
| Satoshi font | NOT loaded via expo-font — falls back to system font (Roboto on Android) | Accept system fallback; add expo-font load in Phase 2 | Mobile team |
| Splash PNGs | assets/splash.png in each app is still the old Expo placeholder art with navy tint applied | Accept for Phase 1 (navy background masks the art for 95% of the frame); replace with branded asset in Phase 2 | Design team |
| Launcher icon | assets/icon.png and assets/adaptive-icon.png are placeholders | Accept; replace with final branded assets in Phase 2 | Design team |
| Notification icon | Manager app uses ./assets/notification-icon.png placeholder | Accept; HK and F&B don't have notification icon plugin configured yet | Mobile team |
| iOS builds | Not configured (no bundle IDs verified, no provisioning) | Out of Phase 1 scope | Mobile team |
Action: Each of these must appear in the Phase 2 backlog (ticket IDs TBD by mobile team).
8. Expected defects vs acceptable state
8.1 BLOCKERS — must-fix before launch
- Crash on launch on any target device × any app
- Login failure on any app (token not stored, or 401 on valid creds)
- Data loss — action completed on device but not reflected in backend (except when offline queue is intentionally used)
- KOT fails to reach KDS (F&B)
- Offline sync drops mutations (HK) — verified by pending count not draining after reconnect
- HMP branding still visible in any launcher name or splash screen
- App crashes on TalkBack navigation (accessibility regression)
8.2 DEGRADED-BUT-OK — ship with it
- Splash screen shows placeholder Expo art (navy tint covers most of it)
- System font (Roboto) instead of Satoshi
- Gold color slightly off-hex on some OEM displays (Samsung cool white vs Pixel neutral)
- Konva canvas (F&B) has minor lag when panning with 25+ tables
- Chart renders (Manager) take 1-3s on Android 11 tablets
- Badge count on launcher icon doesn't update (Xiaomi / Oppo ROM limitation)
- Some KPI cards wrap awkwardly at 200% text scaling
- Pre Check-In ID photo upload not implemented (form still submits with text fields)
8.3 ACCEPTABLE FOR PHASE 1, DOCUMENT IN RELEASE NOTES
- No push notifications for Guest app
- No multi-language UI (English only)
- F&B payment collection is view-only (actual collection happens on front desk)
- Manager reports are read-only (no export)
- HK maintenance requests don't have in-app photo gallery (single photo per request)
9. Test execution schedule
Assumes 2 QA testers working in parallel. If fewer, the schedule extends accordingly.
| Day | Activity | Devices | Apps |
|---|---|---|---|
| Apr 7 (Tue) | APK build + device provisioning + first smoke | All 4 | HK + Manager |
| Apr 8 (Wed) | Full checklist pass | All 4 | HK + Manager |
| Apr 9 (Thu) | Full checklist pass | All 4 | F&B + Guest |
| Apr 10 (Fri) | Cross-app scenarios (battery, WiFi handoff, accessibility) | All 4 | All 4 |
| Apr 11 (Sat) | Re-test prod URL cut-over; retest any failures | All 4 | All 4 |
| Apr 12 (Sun) | Regression on any fixed defects | All 4 | As needed |
| Apr 13 (Mon) | Go/no-go sign-off review | — | — |
| Apr 14 | PHASE 1 LAUNCH |
Entry criteria (must be in place before testing begins)
- EAS account logged in (BLOCKED per D5 — requires user to run
eas logininteractively) - APKs built for all 4 apps (preview profile, Android only) — see device matrix doc
- APKs published to internal distribution URL
- 4 physical test devices provisioned with unknown-source installs enabled
- Test credentials verified against QA backend
- WebSocket endpoint reachable from test devices
- Push notification sandbox configured (Expo push credentials set in each app's
app.jsonextra field)
Exit criteria (for go/no-go decision)
- Zero blockers from section 8.1
- All 16 per-device/per-app full-checklist passes completed and signed off
- Cross-app scenarios (section 5) completed on at least 1 phone + 1 tablet
- Branding verification (section 6) zero "HMP" findings
- All degraded items documented in release notes
- QA lead signs the
phase1-mobile-acceptance-checklist.md
10. Test reporting
For each test run, record:
- Device make/model/Android version
- App name + version + build number
- APK profile (development/preview/production)
- Network condition (WiFi/cellular/mixed)
- Tester initials and date
- Per-check pass/fail/skipped
- Screenshot or screen recording for any failure
- Log capture:
adb logcat -s ReactNativeJS:Vfor 30s after the failure
Store artifacts in hmp-docs/docs/testing/phase1-mobile-artifacts/ (to be created by QA lead).
11. Escalation
| Severity | Definition | Action |
|---|---|---|
| P0 | Blocker from section 8.1 | Slack #keynova-phase1-launch, assign mobile on-call |
| P1 | Major degradation (crash on specific device; feature unusable) | File issue, assign to mobile team with target fix within 24h |
| P2 | Minor UX / cosmetic | File issue for Phase 2 backlog |
Mobile on-call rotation for Apr 7-14: see hmp-infrastructure/oncall/phase1-rotation.md (TBD by ops).
12. References
- Task D5 — Mobile app KeyNova branding (branding handoff notes and known placeholder list)
- Task E1 — Seeded 5 test properties with fixed IDs
- Task E2 — Full E2E test pass (includes workspace install gap
E2-F2) hmp-mobile-apps/CLAUDE.md— mobile app architecture overviewhmp-docs/docs/requirements/reviews/EP-021/— operations/mobile epic implementation reporthmp-docs/docs/testing/phase1-mobile-device-matrix.md— device matrix and APK distributionhmp-docs/docs/testing/phase1-mobile-acceptance-checklist.md— sign-off checklist