Skip to content

Sprint Review - WK29

Cycle 2026-07-13 → 07-19 · Mirror BANA-1839 · Delivery-first scorecard (SPACE / DORA / Flow).

62/100 - Needs attention
53Done
42.7%Completion
9Awaiting acceptance
68Carried
Committed124Cancelled3
Done53Carried68
Completion42.7%Health62 - Needs attention
Commits~200Contributors13

The week in four lines

  • A big code audit rewrote the board. All 100 open items were code-verified (50 "started"-group items in full, the rest by pattern/age); 32 were actually shipped and got corrected to Done. Done rose from a board-reported 21 to a verified 53.
  • A 36-item QA test-case dump is the real story. A batch of pre-written scenario tickets (POS-DASH-001..025, SC-TABLE/PAY/KITCHEN-*) landed on the board 2026-06-15 and has sat almost entirely untouched since - 33 of 36 are still in draft. It alone accounts for over half this cycle's carry-over and drags Flow & Aging to its worst score in the 6-cycle window.
  • A real security gap surfaced. get sale order has no merchant-scope check - any authenticated user with generic read access can fetch another merchant's order by ID. Not fixed yet.
  • The reservation-indicator zombie finally split. Table floor-map indicators (#1183) shipped this cycle after two reviews of no progress; its twin, the queue-vs-table distinction (#1184), is still untouched.

Executive Summary

~200commits
13contributors
~29commits/day
10feature branches

What shipped this cycle, by theme:

  • Kitchen Display System, for real this time shippedsale-renderer-2 gets a full KDS/kitchen-board screen with a "Send to kitchen" button - closes the stub gap flagged in WK28's PRD audit (Khoa Nguyen). Table floor-map live status + elapsed-time indicators also shipped, reversing a flag that had been open since WK27 (Hai Cao, Khoa Nguyen).

  • Back Office, wave 2 shipped Seven more BO screens - product, stock, inventory-location, category, POS settings, merchant-user/role revamp, configuration management with a JSON editor - all sat unmarked on the board and were code-verified this review (Diem Phan, Thuan Hoang).

  • Input-length validation hardening, closed out shipped Shared @nx/core schemas (name/description/code/phone/money bounds) rolled out across identity, commerce, finance, tax, invoice and licensing, both backend and frontend, in one coordinated sweep (Duc Bach, Phat Chung).

  • 5 Inventory PRDs ratified shipped LDG (ledger), STK (stock/locations), UOM (units), VAL (valuation), RSV (reservation) - all v1.0, unlocking August's inventory-by-industry work (Phat Nguyen).

  • A QA test-case batch nobody triaged risk 36 pre-written scenario tickets landed 2026-06-15; 33 are still in draft five weeks later. It is the single biggest contributor to this cycle's carry-over and its worst-in-window Flow & Aging score.

  • A merchant-scope gap in get sale order risk No ownership check on the read path - any authenticated user can fetch another merchant's order by ID. Ticketed, not fixed.

Deployment Status

11items in dev→deploy pipeline
2dev-ready (203)
3deploy-ready (205)
6test-ready (210)
StateItemsMeaning
203_READY_TO_DEVELOP2PRD/spec locked, ready for dev
205_READY_TO_DEPLOY3Code merged, awaiting deploy to the test environment
210_READY_TO_TEST6Deployed to the test environment, awaiting QA sign-off

11 items total sit across the dev→deploy→test steps, not yet counted as done. Monte Carlo forecast: 50% likely to clear the 9-item deploy/test pipeline (205/210) within WK30, 85% likely by early August.

Delivery Scorecard

DimensionScoreTrendReading
Throughput6753 done vs a trailing median of 79 (WK24-28)
Flow & Aging22▼▼53 of 68 open items (78%) are older than two weeks - worst in the 6-cycle window
Predictability73volume swings less than the trailing window (CoV ≈ 27%)
Quality90cancel rate 2.4%; 9 items where the board overstated progress
Sustainability84top-2 done-share 48.1% (sum-based), over the 40% bus-factor line
Delivery Health62 - Needs attention0.30·T + 0.25·F + 0.20·P + 0.15·Q + 0.10·S

Health drops from 70 (Good) to 62 (Needs attention). The driver is almost entirely Flow & Aging - the QA test-case batch alone accounts for 36 of the 68 open items, all aged 3-5 weeks with zero movement.

Planning signals (reported apart from Health):

  • Commitment ratio ~2.95× - 124 items vs a sustainable ~42 (21 active × 2/week). Larger than WK28's 97-item cycle, not smaller.
  • Completion 42.7% (53/124) - down from WK28's 58.8%, but the verified-floor Done count (53) is close to WK28's 57; the drop is a larger denominator, not less output.

Definition of done

Merged code progresses 205_READY_TO_DEPLOY210_READY_TO_TEST300_DONE; only QA-accepted (or code-verified this review) work counts as done. A new state 203_READY_TO_DEVELOP (added 2026-07-15, sits between 200_IN_PROGRESS and 205_READY_TO_DEPLOY) marks a PRD/spec as locked and ready for dev - it is also open, not done. 9 items currently sit in 205_READY_TO_DEPLOY/210_READY_TO_TEST (3 + 6); 2 more sit in the new 203_READY_TO_DEVELOP.

Value Delivered (EBM)

Key Value AreaWhat landed
Current Value
usable now
Table floor-map indicators + full KDS/kitchen-board on sale-renderer-2 · 7-screen BO wave 2 (product, stock, inventory-location, category, POS settings, merchant-user/role, configuration+JSON editor) · merchant growth analytics dashboard
Time-to-Market
speed to ship
Shared core validation-schema rollout across BE+FE closes a multi-week input-hardening initiative in one sweep
Ability-to-Innovate
future speed
Reusable JSON-editor component for BO configuration screens · policy-definition-v2 subject console (server-side search, scoped grants)
Unrealized Value
opportunity ahead
5 newly-ratified Inventory PRDs unlock August's inventory-by-industry work · 9-item deploy/test pipeline is real value not yet counted · 36-item QA batch is unrealized risk, not value, until triaged

Effort & Contribution

Context, not a leaderboard. Commits are an activity proxy, not output. "Done" counts multi-assignee items once per assignee - a large share of this cycle's Done count (32 of 53) comes from the Step-0 code-audit correction batch, not net-new work shipped this week; see the Correction Log.

MemberCommitsAreasDoneWhat they built
Khoa Nguyen38sale-renderer-2, client, bo10KDS/kitchen-board screen, cart/checkout/payment UI, Settings page, discount
Hai Cao32sale, core, helpdesk, taxation11Sale-order APIs, table-overview/kitchen-ticket batch actions, WebSocket event service
Duc Bach31bo, core, client4policy-definition-v2 subject console, core validation-schema rollout
Tai Nguyen26bo, client, core1Merchant analytics dashboard, Help Desk SLA/category refactor
Huy Pham13commerce, asset, core0S3 proxy for asset uploads, import-progress + websocket notifications, merchant import
Phat Chung10core, identity, sale, helpdesk3Grant-tier permission model, string-length schema sweep, ledger cron controller
Thuan Hoang9bo, core, client2Configuration management CRUD + JSON editor, OrganizerFilterInput refactor
Kien Truong9client, core, sale-renderer0 in flightShift refactor, sale-channel hooks, shift-template i18n
Diem Phan7commerce, bo, asset, sale-renderer-214BO wave-2 screens (product, stock, fare-set, inventory-location, category, POS settings), merchant update-flow fix
Viet Anh Vo7invoice, sale, core, finance0 in flightWebhook-v2 duplicate guard, tax-engine/invoice restructure, shift device-id
Tinh Nguyen (PO)4docs / PRD2PRD-SHF-001 (multi-employee shifts) and PRD-SLF-001 (QR self-order) revisions
Phuc Duong3search, core0CDC pricing pipeline, search retry-log tuning, internal-only wiki CI
Phat Nguyen (PM/PO)11platform, PRD255 ratified Inventory PRDs, IGNIS/platform work, code-audit correction batch
Le Linh-QA3QA acceptance pass
Anh Do-QA2QA acceptance pass
Oanh Phan-QA1QA acceptance pass
Thuong Nguyen-Design3Retail selling-flow design (in Figma, not yet committed to repo)

Invisible work

Diem Phan's Done count (14) is more than double her commit count (7) this cycle - most of it is BO wave-2 screens that were built and merged over the prior two cycles but never marked Done on the board until this review's code audit caught up with them.

What Shipped - Detailed Work Log

Sale / POS

  • sale-renderer-2: full KDS/kitchen-board screen, "Send to kitchen" button, table floor-map live status + elapsed-time indicators, cart normalization, discount, checkout/payment UI (Khoa Nguyen)
  • Sale-domain APIs: table-clean, table-overview status/filter, kitchen-ticket batch actions, cart-id on kitchen ticket, draft-order checkout validation, WebSocket event service for orders/kitchen tickets/allocation (Hai Cao)

Back Office - wave 2

  • Product list + create/edit (variants, options, bundler, POS preview) · Stock list with inline-edit panel · Inventory-location CRUD · Product-category management + sidebar submenu · POS settings (shift management & reservation) · merchant-user & employee role revamp · merchant update-flow bo↔client sync fix (Diem Phan)
  • Configuration management - CRUD screens + a reusable JSON editor · OrganizerFilterInput refactor (Thuan Hoang)

Permissions

  • policy-definition-v2 subject console: server-side subject search, scoped grant guard, UI upgrade · tier-to-leaf permission-matrix merge shared with the role-edit screen (Duc Bach)

Platform / validation hardening

  • Shared @nx/core schemas (name/description/code/phone/money length bounds) applied across identity, commerce, finance, tax, invoice, licensing - both backend request schemas and frontend Zod forms (Duc Bach, Phat Chung)
  • S3 proxy for asset uploads, import-progress tracking with websocket notifications, merchant-import functionality (Huy Pham)

Merchant analytics

  • Growth/distribution dashboard verified shipped: SnapshotSection, chart sections, province breakdown (Tai Nguyen)

Inventory PRDs

  • 5 new ratified v1.0 specs: LDG (ledger), STK (stock/locations), UOM (units), VAL (valuation), RSV (reservation) (Phat Nguyen)

Aged backlog cleared

  • A 19.6-week-old FE/client Appearance-page ticket (feature existed, board never updated) · VNPAY-TEST QA-verification batch (create-store, product, space/table - all confirmed working) · TB-001/002 booking-overlap validation on create and edit

Still in flight

  • Reservation search box (UI built, not wired to the filter) · option-value duplicate-blocking · KDS status field on sale order · Excel product import (ticketed, zero implementation found) · EmployeeForm de-duplication between apps/client and apps/bo (zero extraction work done)

Project & Phase Progress

  • Phase 2 (target Sep 2026): 53 done this cycle (verified floor after code audit). Biggest movers: Sale/POS (KDS + table indicators), Back Office wave 2, Permissions.
  • Burnup: Phase-2 scope keeps growing - 5 new Inventory PRD leaf items entered this cycle alone. Read Epic Progress below as directional; the counting method changed mid-cycle (see note).
  • Long poles: the QA test-case batch (36 items, 33 still draft) is now the dominant carry-over driver, ahead of any single epic. See Phase 2 Plan.

Epic Progress (Phase 2)

Directional. Baseline = the 2026-07-12 snapshot in phase-2-plan.md.

Method changed this cycle - read before trusting the deltas

This review computed each epic's % via full recursive descent to true-leaf work items (up to 3 levels: Epic → FEAT → PRD → BE/FE sub-task), rather than the shallower count that likely produced the 07-12 baseline. Several large deltas below (E1, E2, E5, E9, E10) mix real progress with a deeper, more complete count - they are not pure one-week velocity. Keep the same (deeper) method next review for a clean comparison.

EpicOwnerWas → NowΔStatus
E1 · Tax (S2a, T-VAN)Việt Võ / Phát75% → 100%+25method change - verify
E2 · Commerce (Retail)Hải / Khoa / Phát96% → 75%-21method change - deeper recursion added new PRD sub-tasks
E3 · Products (Entitlement)Hải / Khoa / Phátre-scoped → 67% (2/3)startedscaffolding begun
E4 · Sale (Shift + reconcile)Việt Võ / Phát95% → 92%-3stable
E5 · Customer (MST + groups)Hải / Khoa / Phát48% → 100%+52method change - verify, no customer-domain commits this cycle
E6 · InventoryPhát50% → 37%-13scope grew - 5 new PRDs added as not-yet-done children
E7 · FinanceViệt Võ / Phát88% → 87%-1stable
E8 · Sale (Kitchen & self-order)Hải / Khoa / Phát25% → 38%+13real - KDS shipped this cycle
E9 · Sale (Selling experience)Hải / Khoa / Phát70% → 98%+28method change - verify
E10 · PricingHải / Khoa / Phát52% → 100%+48method change - verify
E11 · PermissionsPhát / Hải88% → 95%+7on-track
E12 · Commerce (Backoffice portal)Hải / Phát84% → 98%+14near-done

Two bookkeeping notes

  • E6 (Inventory) dropped, but nothing regressed. 5 new PRD leaf items (LDG/STK/UOM/VAL/RSV) entered as children this cycle, immediately diluting the %. This is scope growth made visible, exactly what burnup tracking is supposed to show.
  • E2/E5/E9/E10's large jumps need a human sanity-check. No git evidence of Customer-domain (E5) code work landed this cycle, yet its computed % jumped from 48% to 100% - almost certainly because this review's deeper recursion found more already-done leaves the shallower baseline count missed, not new work.

Bottlenecks & Flow

SignalReading
Aging WIP53 of 68 open items (78%) are older than two weeks - worst in the 6-cycle window. Oldest: #708 (Docs/overture, 15.7wk), #899/#919/#921 (dead overture tooling spikes, ~13wk), #1184 (queue-vs-table zombie, 7.3wk, 3rd review running)
WIP distributionbacklog 39 · upcoming 10 · on-hold 1 · in-progress 7 · dev-ready 2 · deploy-ready 3 · test-ready 6
The QA test-case batch36 items (POS-DASH-001..025, SC-TABLE/PAY/KITCHEN-*), created 2026-06-15 as a block; 33 still in 000_DRAFT five weeks later. Never triaged, never executed
Concentrationtop-2 done-share 48.1% (sum-based) - over the 40% line, but inflated by the PM/PO's own correction-batch assignments (QA-verification/PRD tickets), not raw dev throughput
Blockednone flagged. Plane has no relations API, so blocked-by is not tracked structurally

Carry-Over Analysis

68 items remain open. Guidance: ≥3wk → split or cancel · 2wk → review · 1wk → transfer.

BucketCountAgeWhat is in it
Zombie backlog53≥3wkThe 36-item QA test-case batch · 4 dead overture/docs spikes (13-16wk) · reservation zombie #1184 (7.3wk) · 6 Phase-2 items still draft/partial (#1539, #1562, #1575, #1576, #1582, #1652)
Review2~2-3wk#1724 inventory-ticket draft, #1731 VNPAY-login QA item
Normal transfer13<2wkRecently-created BO/client items and this-week's platform work still in flight

By Module (capability)

Authoritative for the 65 items carrying a capability module. 59 items - mostly the QA test-case batch, VNPAY-TEST items, and PRD/legacy tickets without a module tag - show as Unmapped, a bigger gap than WK28's (26.8%) because the QA batch alone is 36 unmapped items.

ModuleItemsDoneCarry
Sale29199 (+1 cancelled)
Inventory1282 (+2 cancelled)
Platform550
User Management523
Products422
Commerce440
Tax220
Reports110
Pricing101
Permissions101
Device101
Unmapped591049

By Label

LabelItemsDoneCancelled
Task77300
Bug31121
Improvement330
PRD17112
Phase 284502

Risks & Blockers

RiskImpactMitigationOwner
get sale order has no merchant-scope check (#1795-b) - any authenticated user with generic read can fetch another merchant's order by IDReal cross-merchant data leakExtend the sale-order service/controller with MerchantScopedService.findById, already used elsewhere in the frameworkHai Cao
36-item QA test-case batch untouched for 5 weeks (33 still draft)Single biggest driver of this cycle's worst-in-window Flow & Aging score; inflates commitment ratio without real progressExplicit triage: execute or cancel, do not let it silently re-carry againPhat / QA lead
#1772 Fare & Fare-set BO screen still does not exist in apps/bo, 3rd review running, still sits in 205_READY_TO_DEPLOYThe screen cannot be deployed because it was never builtDemote to backlog and re-scopePhat / Diem
#1803 headquarter/owner-deletion guard missing despite board state 205_READY_TO_DEPLOYAn organizer-owner or headquarter merchant could be deleted, breaking join-domain grantsAdd the guard before the next deploy sign-offPhat Chung
#1575 Entitlements fully stubbed, no forward progress since WK28Blocks E3 (Products/Entitlement)Start the mint/redeem/reverse logic or re-scope the epicKhoa / Hai
4 dead overture/docs tooling-spike items, 13-16 weeks oldStale scope inflates the board with no path to completionClose as superseded or explicitly re-scopePhat
MetricWK24WK25WK26WK27WK28WK29Dir
Throughput (done)928640795753
Completion %53.836.421.750.058.842.7
Carry-over78142143783868
Delivery Health778067737062

Every metric moved the wrong way this cycle, but the absolute Done count (53) is close to WK28's verified 57 - the story is a larger, un-sized cycle (124 vs 97 committed) plus a 36-item QA-test-case dump that never should have carried silently, not a drop in team output.

Forecast (Monte Carlo)

From observed throughput (40-92 done/cycle over 6 cycles).

MilestoneRemaining50%85%
Fix the merchant-scope security gap1 itemthis weekthis week - should not wait for organic velocity
Triage the QA test-case batch36 itemsneeds an explicit decision, not a date-
Entitlements (E3)stubbed, zero progress since WK28SeptemberQ4 - needs a kickoff decision
Clear the 9-item deploy/test pipeline9WK30early August

Action Items

  • ✅ Code-audited all 100 pre-correction open items; corrected 32 to verified Done - Phat
  • ⬜ Fix #1795-b merchant-scope enforcement on get sale order immediately (security) - Hai Cao
  • ⬜ Triage the 36-item QA test-case batch (POS-DASH-*, SC-*) - execute or cancel, stop the silent re-carry - Phat / QA lead
  • ⬜ Demote/re-scope #1772 (Fare BO screen never built, 3rd review) - Phat / Diem
  • ⬜ Fix #1803 owner/headquarter-deletion guard before next deploy sign-off - Phat Chung
  • ⬜ Close or re-scope the 4 dead overture/docs spike items (13-16wk old) - Phat
  • ⬜ Resume Entitlements (E3) - zero forward progress since WK28 - Khoa / Hai

Code-Audit Correction Log

Coverage: all 100 pre-correction open items were triaged; the 50 "started"-group items (200/203/205/210 - closest to done, highest risk of a stale board) were individually code-verified by 5 parallel read-only agents; the remaining 50 backlog/upcoming items were assessed by title and creation-date pattern only (dominated by the QA test-case batch and old draft tickets), not read against code. 53 Done is a verified floor for the audited set - further corrections may exist in the unaudited backlog.

ItemWasNowEvidence
#536 Appearance settings page205 (19.6wk old)Doneapps/client/.../account-settings/appearance/Appearance.screen.tsx
#1183 Table floor-map indicators205 (zombie, 2 reviews)DoneTableGridItem.tsx, TableGridItemTimeBadge.tsx
#1359 KDS UI + kitchen button200Doneapps/sale-renderer-2/.../kitchen/Kitchen.screen.tsx, GoToKDSBtn.tsx
#1445 VNPAY-TEST-001 create store210Donepackages/commerce/.../merchant.service.ts
#1455 VNPAY-TEST-014 product210Donepackages/commerce/.../product-create.service.ts
#1456 VNPAY-TEST-015 space/table210DoneAllocationZone/AllocationUnit controllers
#1580 Hide store column210Doneapps/client/src/constants/table.ts
#1647 TB-001 booking overlap (create)200DoneuseReservationDraftOverlap.ts, SaveFormBtn.tsx
#1648 TB-002 booking overlap (edit)200Donesame hook, ReservationEdit.tsx
#1699 Merchant growth dashboard200Doneapps/bo/.../analysis/growth/MerchantGrowth.screen.tsx
#1770 BO product screen205Doneapps/bo/.../product/{list,create,edit}
#1771 BO stock list205DoneStock.screen.tsx, StockEditPanel.tsx
#1773 BO inventory-location CRUD210Doneapps/bo/.../inventory-location/{list,create,edit}
#1774 BO category management205Doneapps/bo/.../product/category
#1775 Edit organizer logo & name210DoneOrganizerEditNameDialog.tsx
#1776 Set default sale channel210DoneSaleChannelForm.tsx
#1780 BE string-length reconcile203Donecommits 288baaaaf, 724c21eb0
#1781 BE input-length sync205DoneSCHEMA_LENGTH_LIMIT (same commits)
#1782 FE input-length sync210Doneapps/core/src/schemas/common.schema.ts
#1791 POS settings screen205DonePosSettings.screen.tsx
#1792 Merchant-user/role revamp205Donecommit 8a2fb7b37
#1793 Show all input filters210DoneTableInquiryV2.tsx (15 client + 27 bo tables)
#1795 Validate draft state on checkout200Donecheckout.service.ts::_loadDraftOrderForCheckout
#1798 WebSocket support (sale)200DoneSaleSocketEventService
#1802 AppearancePOS screen205DoneAppearancePOS.screen.tsx
#1805 Merchant update-flow fix205Donecommits 9037f81af, 80de2eb62
#1811 Configuration mgmt + JSON editor210DoneConfigurationForm.tsx (RHFJsonEditor)
#1815 PRD-LDG-001 (ledger)203Donev1.0 ratified doc
#1816 PRD-STK-001 (stock/locations)203Donev1.0 ratified doc
#1817 PRD-UOM-001 (units)203Donev1.0 ratified doc
#1818 PRD-VAL-001 (valuation)203Donev1.0 ratified doc, has "Ratified" callout
#1819 PRD-RSV-001 (reservation)203Donev1.0 ratified doc

Verified still open: #1772 (Fare BO screen, NOT-DONE) · #1803 (owner-delete guard, NOT-DONE) · #1184 (queue/table distinction, NOT-DONE) · #1795-b (merchant scope, NOT-DONE) · #1797 (KDS status field, NOT-DONE) · #1810 / #1835 / #1838 (FE/client, NOT-DONE) · #1575 (Entitlements, PARTIAL/stubbed) · #1576 (kitchen-station mgmt, PARTIAL) · #1539 / #1562 (PRDs, PARTIAL draft) · #1582 / #1652 / #1777 (PARTIAL) · #1681 (VAR-024, uncertain - no matching commit found) · #1695 / #1801 (not code-checkable - QA sign-off / Figma-only design work).

Appendix - data sources & method

  • Git: git log --all --since=2026-07-13 --until=2026-07-20 on nx-seller. 200 non-merge commits, 13 tracked contributors. IGNIS is a private npm dependency (version-bumped this cycle), not a local checkout - no separate git log pulled.
  • Board: retrieve_cycle + per-item list for 2026_WK29, read 2026-07-19 (cycle's own end date).
  • Code audit: 5 parallel read-only agents covering the 50 "started"-group items; 32 corrected to Done via update_work_item.
  • Scorecard: throughput baseline = trailing median WK24-28 (79). Predictability = CoV over WK24-28 (≈27%). Quality = cancel rate + count of items where the board overstated progress in a 203/205/210 state. Sustainability = sum-based top-2 done-share (primary-assignee-only attribution would read far higher, ~74%, driven by the PM/PO's correction-batch assignments - flagged, not used, to stay consistent with prior weeks' method).
  • By Module: authoritative for 65 of 124 items; 59 unmapped, dominated by the 36-item QA test-case batch.
  • Epic Progress: computed via full recursive descent to true-leaf work items (see method note above) - a deeper method than the 07-12 baseline likely used; several large deltas are directional, not verified one-week velocity.

Sprint Reviews · Roadmap · Phase 2 Plan · Traceability Matrix · Plane BANA-1839

Proprietary and Confidential. Unauthorized copying, distribution, or use of this software is strictly prohibited.