Commit Graph

15 Commits

Author SHA1 Message Date
Mike Kell ea4b76b407 chore: reconcile working tree with main and re-baseline master documents
Reconciles repository state after the local toolchain moved to Flutter 3.47.0
/ Dart 3.13.0. No product code changed - no lib/ or test/ file was modified.

Working tree drift:

1. analysis_options.yaml churn (accepted, 11 files). Flutter 3.47 ships
   AnalysisOptionsMigration, which unconditionally writes a fixed
   analyzer.exclude block into every analysis_options.yaml. It runs from
   ensureReadyForPlatformSpecificTooling, so pub get / analyze / run / build
   all restore it, and there is no opt-out (flutter#191160, flutter#191131).
   Commit 92d83e0 previously reverted this; the revert did not hold - a full
   test sweep regenerated the block in 8 more packages. Accepted and committed
   rather than fighting the tool. Verified the risky web/** entry drops
   nothing: neither kell_web/web/ nor kell_mobile/web/ contains .dart files.

2. kell_mobile web scaffold (reverted). A stray `flutter create
   --platforms=web` had added an untracked web/ directory and rewritten
   .metadata so the android platform entry was replaced by web. kell_mobile is
   the Android target, so .metadata was restored and the scaffold deleted.

3. kell_mobile/pubspec.lock (accepted). Transitive bumps resolved under the
   newer SDK: clock, matcher, meta, stack_trace, test_api, vector_math,
   vm_service. All SDK-pinned.

Master document reconciliation:

- PROJECT_STATE_AUDIT.md: removed a duplicated "## 5. Summary Scorecard"
  section - the scorecard and readiness table were present twice from a bad
  append. Re-baselined the remaining §5 against main, added a test-count
  column, and corrected §3.4 counts and §3.5 antipattern status. Stages
  10C-10F, 11A, and 16A had landed but were still recorded as missing.
- master_development_brief.md: Appendix A maturity matrix refreshed to the
  verified counts; new "Toolchain baseline" section documents the Flutter 3.47
  behaviour so a future slice does not try to revert it again.
- build_execution_tracker.md: added the reconciliation slice entry and a
  toolchain note.
- Fixed a pre-existing MD040 lint error (unlabelled code fence).

Verification:
- dart analyze --fatal-infos: clean across all 11 packages and apps
- tests: 1,898 / 1,898 passing (core 90, design_system 51, auth 42,
  integrations 123, data 63, feature_wordpress 545, feature_inventory 167,
  feature_orders 657, feature_policy 17, kell_web 62, kell_mobile 81) -
  identical to the Stage 11A total, confirming no behaviour change
- markdownlint-cli2: 0 issues
2026-09-25 14:19:36 -04:00
Mike Kell 92d83e00e2 chore: revert unrelated Flutter tool churn to analysis_options.yaml and pubspec.lock 2026-08-29 15:20:35 -04:00
Mike Kell a2354ccd36 chore: update tracker - feat/custom-order-domain merged to main (Stage 11A complete) 2026-08-29 15:20:19 -04:00
Mike Kell 86c630d670 feat(stage-11a): custom order domain and data
Adds the custom/made-to-order commission workflow to feature_orders at the
domain and data layers. No UI in this slice — Stage 11B/11C cover the
CustomOrderFormPage, confirmation, and tracking surfaces.

Custom orders extend the existing Order aggregate rather than forming a
parallel system, so they flow through the same repository contract and the
same order management pipeline as standard orders.

Domain:

- OrderType enum (standard, custom) with wireValue/fromWire; fromWire defaults
  to standard so an order written by an older client is never mis-classified
  as a commission.
- CustomOrderSpec value object — material, color, size, dimensions,
  unmodifiable reference image URLs, free-text notes, estimated completion.
  Immutable with copyWith, list-aware ==/hashCode, and a toString that reports
  the reference image count rather than the URLs.
- DepositInfo value object — all money as integer cents, consistent with
  PaymentResult.amountCents, so repeated deposit/balance/settlement arithmetic
  cannot drift. Derived balanceDueCents clamps at zero rather than reporting a
  credit when a deposit exceeds the total.
- FulfillmentStatus pipeline: quoted -> depositReceived -> inProduction ->
  qualityCheck -> readyForPickup -> completed, plus cancelled from any
  non-terminal stage. FulfillmentTransition enforces legality in the domain —
  illegal jumps, same-stage advances, and any move out of a terminal stage are
  rejected with an explanatory reason rather than silently applied.
  qualityCheck -> inProduction is permitted: failed inspection sending a piece
  back to the bench is a real workshop operation.
- Order extended with orderType (defaults to standard), nullable
  customOrderSpec, depositInfo, and fulfillmentStatus, plus isCustom,
  hasDeposit, and balanceDueCents. Every existing field, default, and copyWith
  semantic is preserved.
- OrdersRepository extended with createCustomOrder, updateCustomOrderSpec,
  recordDeposit, and advanceFulfillmentStatus.

Data:

- FakeOrdersRepository implements all four methods and seeds five custom
  orders (KC-C2001..KC-C2005) covering every non-terminal pipeline stage. The
  six standard orders are unchanged.
- WooCommerceOrdersRepository implements all four methods. Custom order state
  round-trips through 13 _kc_-prefixed order meta keys; the full mapping table
  is documented on WooCommerceOrderMapper. Spec edits and stage advances PUT
  only meta, so they can never mutate a price, a line item, or a customer
  record. balanceDueCents is derived on read, never persisted, to avoid a
  second source of truth.
- WooCommerceApiClient.updateOrder added in feature_wordpress — only
  updateOrderStatus existed, which cannot carry meta.

Observability (Stage 16A layer):

- KcLogger injected into both repositories, defaulting to KcLogger.silent().
  Domain rejections log at warning; API failures log at error with the status
  code and originating exception.
- No silent catch (_) {} blocks — every swallowed error produces both a log
  record and a failure result.
- Log context is limited to identifiers, operation names, and status names.
  Customer identity, addresses, money amounts, and payment identifiers are
  never logged, and all context additionally passes through KcRedactor.
- The deposit transaction ID is deliberately absent from both DepositInfo and
  the WooCommerce meta mapping — it lives on PaymentResult alone, because
  order meta is readable by any store administrator. Asserted by tests on both
  the object and the outgoing request body.

Also closes P3.8: adds .metadata, CHANGELOG.md, LICENSE, and README.md to
feature_orders so it matches every other package (.gitignore already existed).
The README documents the pipeline, the meta mapping, and the privacy rules.

Deviations from the brief, recorded in the Stage 11A section:

- estimatedCompletionDate lives on CustomOrderSpec rather than Order, and
  there is no separate updateEstimatedCompletion — a date revision goes
  through updateCustomOrderSpec. Deferred for review in Stage 11C.
- internalNotes not added; Order.notes already serves that purpose.

Validation:

- 423 new tests in feature_orders (234 -> 657), including an exhaustive 7x7
  legal/illegal transition matrix and coverage of every new repository method
  on both implementations.
- 1,898/1,898 passing across all packages; no regression from the 1,475
  baseline at 666abd2.
- dart analyze --fatal-infos clean across all 11 packages and apps.
- dart format --line-length 100 clean on every file touched by this slice.

Closes: P2.2 (domain + data portion), P3.8
2026-08-29 15:19:29 -04:00
Mike Kell 47b13b1ed1 feat(stage-10c): Square Mobile POS / Checkout
- Add PaymentMethod enum (cash, card) with label/iconHint extensions
- Add PaymentResult value object (transactionId, amountCents, method, completedAt, receiptUrl, amountFormatted)
- Add PaymentService abstract contract + PaymentException
- Add CheckoutController (ChangeNotifier) with CartEntry and sealed CheckoutState hierarchy
- Add FakePaymentService (always succeeds, counter-based IDs)
- Update feature_orders barrel exports
- Add MobileCheckoutPage (product selection -> cart -> payment -> receipt flow)
- Add Sales tab (index 4) to MobileShell; 6 tabs total
- Wire paymentService + checkoutCatalogue into all MobileAppServices factories
- Add 36 new feature_orders tests (234 total)
- Add 18 new kell_mobile tests (72 total); 1373 total across all packages
- Update widget_test.dart: destination count 5 -> 6
- Update build_execution_tracker.md and master_development_brief.md

All tests passing. dart analyze clean.
2026-07-25 17:37:36 -04:00
Mike Kell e92788038a feat(orders): Stage 9A - WooCommerce Orders API integration
- Extend OrderStatus with onHold, refunded, failed
- Extend OrderItem with productId, variationId, customizations
- Extend Order with paymentMethod, source, customFields
- Add OrderSource enum (online, market, manual)
- Add getOrder(id) to OrdersRepository contract and FakeOrdersRepository
- Add WooCommerceOrderMapper (WooCommerce JSON <-> Order domain)
- Add WooCommerceOrdersRepository implementing full OrdersRepository
- Add orders API methods to WooCommerceApiClient (getOrders, getOrder,
  updateOrderStatus, createOrder, addOrderNote)
- Export WooCommerceApiClient/WooCommerceApiException from feature_wordpress
- Add feature_wordpress + http dev deps to feature_orders pubspec
- 83 new tests: mapper (25), repository+API client (23), FakeRepo.getOrder (3),
  plus existing suite grows to 198/198 feature_orders
- All packages analyze clean; 847/847 total tests passing
- Update master_development_brief.md and build_execution_tracker.md
2026-07-11 09:45:36 -04:00
Mike Kell fb3f6f43d4 chore(analyze): remove unnecessary_import directives in feature_orders tests
Remove 6 redundant direct src/ imports from feature_orders test files.
All symbols are already re-exported via the package barrel
(feature_orders/feature_orders.dart), making the src/ imports unnecessary.

Files cleaned:

- test/orders_controller_test.dart — removed orders_controller.dart import
- test/widgets/order_card_test.dart — removed order_card.dart import
- test/widgets/order_detail_panel_test.dart — removed order_detail_panel.dart import
- test/widgets/order_status_chip_test.dart — removed order_status_chip.dart import
- test/widgets/orders_page_test.dart — removed add_note_dialog.dart and
  order_detail_panel.dart imports

All 115/115 feature_orders tests still passing.
dart analyze: no issues found across all packages.
2026-07-10 20:18:48 -04:00
Mike Kell 3662f4fcc5 feat(orders): Stage 5D - orders page UI hardening
- OrdersPage with search bar, status filter chips, order count, master-detail wide layout, push-navigation narrow layout
- OrderCard widget with order ID, customer name, date, status chip, item count, total
- OrderDetailPanel with customer info, shipping address, line items, total, notes, status dropdown, Add Note button, isUpdating indicator
- OrderStatusChip mapping OrderStatus to label and color
- AddNoteDialog with text field, empty-note validation, AddNoteDialogResult value object
- showOrderActionSnackBar helper for success/failure feedback
- Cross-feature onViewProduct/onViewInventory callbacks per line item
- initialFilter, initialQuery, initialSelectedId constructor params on OrdersPage
- Expanded feature_orders barrel exports (OrdersController, all presentation types)
- 25 new widget tests (OrderDetailPanel x14, AddNoteDialog x3, OrdersPage x6)
- 115/115 feature_orders tests passing, 24/24 kell_web tests passing
- Updated build_execution_tracker.md and master_development_brief.md
2026-07-10 19:52:19 -04:00
Mike Kell b2bec44fcb feat/orders-domain: expand orders domain with write operations and 90 tests 2026-07-10 19:04:39 -04:00
Mike Kell fba7cba835 chore(feature_orders): add .gitignore, untrack .dart_tool and pubspec.lock
- Add standard Flutter library .gitignore to feature_orders package
  (was missing, unlike all other packages)
- Remove .dart_tool/ directory and pubspec.lock from git tracking
  to match project conventions
2026-05-30 10:09:40 -04:00
Mike Kell 65466ba513 feat(mobile): Stage 5A — Android app shell and bootstrap
Validate Docs / validate-docs (push) Successful in 3m31s Details
Flutter Analyze / Dart Analyze (push) Has been cancelled Details
Flutter Test / Flutter Tests (push) Has been cancelled Details
Replace default Flutter counter template in kell_mobile with a fully
integrated mobile operations platform shell reusing shared packages.

Mobile app shell:
- MobileAppServices extending KcAppServices with fake()/wp() factories
- KellMobileApp with KcAppScope<MobileAppServices>, KcTheme, env badge
- MobileShell with 5-tab NavigationBar (Dashboard, Inventory, Orders,
  Publishing, More) using IndexedStack for state preservation
- KcBootstrap entry point with --dart-define environment variables

Dashboard:
- DashboardSummary value object with fromData()/empty() constructors
- GetDashboardSummary use case aggregating inventory, orders, publishing
- DashboardController (ChangeNotifier) with loading/error/summary state
- MobileDashboardPage with GridView summary cards using design system
  widgets (KcSectionHeader, KcSummaryCard, KcEmptyState)

Placeholder pages:
- FinancePlaceholderPage, IntegrationsPlaceholderPage for More tab
- Feature tab pages delegate to shared feature presentation layers

Infrastructure:
- pubspec.yaml references all shared packages (core, design_system,
  feature_inventory, feature_orders, feature_policy, feature_wordpress)
- SDK constraint corrected from ^3.11.4 to ^3.11.0 across all 14
  pubspec.yaml files to match installed Dart SDK 3.11.3

Tests:
- 6 new kell_mobile widget tests: shell loading, summary cards,
  environment badge, navigation bar destinations, tab switching, More menu
- All existing tests remain passing (24/24 kell_web, 294/294
  feature_wordpress)

Documentation:
- master_development_brief.md: Stage 5A marked complete, next branch
  updated to feat/android-publishing-surface (Stage 5B), kell_mobile
  platform description updated
- build_execution_tracker.md: Stage 5A entry added with full file list
2026-05-28 19:10:14 -04:00
Mike Kell 039612cb6e Update main with product publishing
Publish Docs / publish-docs (push) Successful in 1m57s Details
2026-04-05 20:03:10 -04:00
Mike Kell 23ea1bebe1 feat(workflows): add shared filtering search and selection persistence
Validate Docs / validate-docs (push) Successful in 1m0s Details
2026-04-04 14:59:26 -04:00
Mike Kell 0f61badba6 feat(navigation): add cross-feature workflow handoffs
Validate Docs / validate-docs (push) Successful in 1m5s Details
2026-04-04 14:42:03 -04:00
Mike Kell 3330ed23b3 feat(orders): add orders workspace vertical slice
Validate Docs / validate-docs (push) Successful in 52s Details
2026-04-04 13:57:27 -04:00