kell_creations/kell_creations_apps/apps/kell_mobile/lib/pages
Mike Kell 197cc66169 feat(stage-11c): custom order tracking and fulfillment
Adds the workshop-side counterpart to Stage 11B's intake form: a tracking workspace filtered by fulfillment stage, an auditable timeline of stage changes, and inventory deduction on completion. Closes audit finding P2.2; Stage 11 is complete.

Domain: FulfillmentEvent (append-only transition record with operator notes and a malformed-line-tolerant wire format), MaterialUsage, MaterialConsumptionPort + MaterialDeductionResult. Order gains fulfillmentHistory, materialUsage, derived stage accessors, and withFulfillmentEvent(). All existing fields, defaults, and copyWith semantics preserved.

Data: advanceFulfillmentStatus() records an event with an optional note and injectable clock; recordMaterialUsage() added. WooCommerce round-trips both through _kc_ meta keys, skipping malformed lines and never blanking remote values.

Application/presentation: AdvanceFulfillment, CompleteCustomOrder, CustomOrderTrackingController, CustomOrderTrackingPage, FulfillmentTimeline, showAdvanceStageDialog. Illegal transitions surface the domain rejection reason verbatim.

Architecture: inventory deduction crosses the feature boundary through an outbound port, not a package dependency. feature_orders still has no dependency on feature_inventory; each app supplies InventoryMaterialConsumptionAdapter. Completion advances first and deducts second, so a rejected transition can never decrement stock, and a deduction failure warns rather than failing the commission.

Tests: 329 new (293 feature_orders, 22 kell_mobile, 14 kell_web). 1085/1085 feature_orders, 109/109 kell_mobile, 81/81 kell_web. dart analyze --fatal-infos clean.
2026-09-25 16:54:51 -04:00
..
dashboard_page.dart feat(mobile): Stage 5A — Android app shell and bootstrap 2026-05-28 19:10:14 -04:00
finance_placeholder_page.dart feat(mobile): Stage 5A — Android app shell and bootstrap 2026-05-28 19:10:14 -04:00
integrations_placeholder_page.dart feat(mobile): Stage 5A — Android app shell and bootstrap 2026-05-28 19:10:14 -04:00
mobile_checkout_page.dart feat(stage-10c): Square Mobile POS / Checkout 2026-07-25 17:37:36 -04:00
mobile_create_product_page.dart feat(stage-9d): product creation UI, category management page, mobile create-product page 2026-07-11 10:50:32 -04:00
mobile_custom_order_page.dart feat(stage-11b): custom order intake UI 2026-09-25 15:45:04 -04:00
mobile_custom_order_tracking_page.dart feat(stage-11c): custom order tracking and fulfillment 2026-09-25 16:54:51 -04:00
mobile_integrations_page.dart feat(stage-10F): SquareSyncStatusPanel + IntegrationsPage + MobileIntegrationsPage + squareSyncController wired into both shells 2026-07-25 16:55:46 -04:00
mobile_inventory_detail_page.dart feat(mobile): Stage 6C — mobile inventory surface 2026-07-10 20:13:27 -04:00
mobile_inventory_page.dart feat(mobile): Stage 6C — mobile inventory surface 2026-07-10 20:13:27 -04:00
mobile_order_detail_page.dart feat(orders): Stage 9A - WooCommerce Orders API integration 2026-07-11 09:45:36 -04:00
mobile_orders_page.dart feat(stage-11c): custom order tracking and fulfillment 2026-09-25 16:54:51 -04:00
mobile_product_detail_page.dart feat(Stage 6B): Android mobile workflow hardening 2026-05-30 09:45:10 -04:00
mobile_publishing_page.dart feat(stage-9d): product creation UI, category management page, mobile create-product page 2026-07-11 10:50:32 -04:00