kell_creations/docs/development/build_execution_tracker.md

69 KiB
Raw Blame History

Build Execution Tracker

Current status

  • main baseline updated through: feat/square-catalog-sync-repositories (Stage 10C complete, 2026-07-25)
  • audit completed: chore/audit-state-sync — Comprehensive State Audit (PROJECT_STATE_AUDIT.md) completed 2026-07-25; all findings incorporated into master_development_brief.md and this tracker
  • merged: feat/square-catalog-sync-service (Stage 10D) — merged to main; 506/506 feature_wordpress, 167/167 feature_inventory; analyze clean
  • main baseline updated through: feat/square-sync-ui (Stage 10F complete, merged 2026-07-25)
  • active branch: none — on main
  • next branch: feat/square-mobile-pos (Stage 10C) — Square Mobile POS / Checkout; or feat/custom-order-domain (Stage 11A) — Custom order domain and data
  • total tests on main: 651/651 passing (545 feature_wordpress + 52 kell_web + 54 kell_mobile); dart analyze clean across all packages

Slice tracker

feat/description-only-edit

  • status: merged to main
  • commit: cebac4c
  • inspection: complete
  • implementation: complete
  • tests: passed (212/212)
  • analyze: passed
  • brief updated: yes

feat/category-only-edit

  • status: merged to main
  • commit: 8e7e4cb
  • inspection: complete
  • implementation: complete
  • tests: passed (223/223 feature_wordpress, 5/5 kell_web dashboard)
  • analyze: passed (dart analyze — no issues found)
  • brief updated: yes

feat/post-write-consistency

  • status: merged to main
  • commit: 7acff83
  • inspection: complete
  • implementation: complete
  • files changed:
    • feature_wordpress/lib/src/application/product_publishing_controller.dart — added _refreshSelection() helper; wired into load() and all write methods to preserve/refresh selectedDraft by id after reload
    • feature_wordpress/test/product_publishing_controller_test.dart — added 11 post-write consistency tests covering selection preservation, field refresh (status/price/name/description/category), lastModified, filter/search/sort persistence after writes, item repositioning under active sort, and filter-exit auto-reselection
  • tests: passed (234/234 feature_wordpress)
  • analyze: passed (dart analyze — no issues found)
  • brief updated: yes

feat/publishing-ux-hardening

  • status: merged to main
  • commit: b81016d
  • inspection: complete
  • implementation: complete
  • files changed:
    • feature_wordpress/lib/src/presentation/widgets/product_preview_panel.dart — added inline validation error state (_nameError, _priceError, _descriptionError, _categoryError); error messages shown below text fields on empty/invalid submit; errors cleared on cancel; added onCategoryChanged callback; text fields and save buttons disabled during isUpdating; added tooltips (Save price, Save category, Cancel) for consistency
    • feature_wordpress/lib/src/presentation/widgets/status_action_snack_bar.dart — failure SnackBar now appends errorMessage detail to the failure text for operator visibility
    • feature_wordpress/test/widgets/product_preview_panel_test.dart — added onCategoryChanged to test helper; added 13 new tests: inline validation errors (name, price, description, category), error-clears-on-cancel, valid-input-clears-error, and text-field-disabled-during-isUpdating for all four edit fields
    • feature_wordpress/test/widgets/status_action_snack_bar_test.dart — updated 2 failure SnackBar assertions to match new wording that includes error detail
  • tests: passed (247/247 feature_wordpress)
  • analyze: passed (dart analyze — no issues found)
  • brief updated: yes

feat/multi-select-groundwork

  • status: merged to main
  • date: 2026-05-22
  • inspection: complete
  • implementation: complete
  • files changed:
    • feature_wordpress/lib/src/application/product_publishing_controller.dart — added multi-selection state (toggleMultiSelect, clearMultiSelection, selectAllVisible, isMultiSelected, multiSelectedIds, multiSelectedCount)
    • feature_wordpress/lib/src/presentation/widgets/product_draft_card.dart — added optional leading checkbox for multi-select mode
    • feature_wordpress/lib/src/presentation/product_publishing_page.dart — added _MultiSelectBar with selected-count display, Select All, and Clear actions
    • feature_wordpress/test/product_publishing_controller_test.dart — added 15 new multi-select tests
  • tests: passed (262/262 feature_wordpress)
  • analyze: passed
  • brief updated: yes

feat/list-efficiency-improvements

  • status: merged to main
  • date: 2026-05-22
  • inspection: complete
  • implementation: complete
  • files changed:
    • feature_wordpress/lib/src/application/product_publishing_controller.dart — added ListDensity enum, compact/standard view toggle, staleness detection (isStale(), staleCount() with 30-day threshold), keyboard navigation (selectNextDraft/selectPreviousDraft with wrapping)
    • feature_wordpress/lib/src/presentation/widgets/product_draft_card.dart — added compact two-row layout variant, description snippet in standard card, stale indicator icon, Flexible overflow handling
    • feature_wordpress/lib/src/presentation/product_publishing_page.dart — wired Focus+onKeyEvent for arrow keys and density toggle button
    • feature_wordpress/test/product_publishing_controller_test.dart — added 32 new tests
  • tests: passed (294/294 feature_wordpress, 5/5 kell_web dashboard)
  • analyze: passed
  • brief updated: yes

feat/design-system-shared-widgets

  • status: merged to main
  • date: 2026-05-22
  • inspection: complete
  • implementation: complete
  • files changed:
    • design_system/lib/design_system.dart — expanded barrel exports with typography, layout, and 5 new widgets
    • design_system/lib/src/theme/kc_typography.dart — new shared typography scale (KcTypography) with full Material 3 text style hierarchy and applyKcTypography() helper
    • design_system/lib/src/theme/kc_theme.dart — updated to use KcTypography.applyKcTypography() instead of inline text styles
    • design_system/lib/src/layout/kc_breakpoints.dart — new responsive breakpoint utilities (KcBreakpoints) with compact/medium/expanded/large queries and grid column helper
    • design_system/lib/src/widgets/kc_empty_state.dart — migrated from kell_web EmptyStatePanel as KcEmptyState
    • design_system/lib/src/widgets/kc_section_header.dart — migrated from kell_web SectionHeader as KcSectionHeader
    • design_system/lib/src/widgets/kc_summary_card.dart — migrated from kell_web SummaryCard as KcSummaryCard
    • design_system/lib/src/widgets/kc_loading_state.dart — new shared loading state widget
    • design_system/lib/src/widgets/kc_error_state.dart — new shared error state widget with optional retry
    • design_system/test/design_system_test.dart — expanded from 3 to 41 tests covering all new widgets, typography, breakpoints, colors, spacing
    • kell_web/lib/pages/dashboard_page.dart — updated imports to use design_system widgets directly (KcSectionHeader, KcSummaryCard, KcEmptyState)
    • kell_web/lib/shell/widgets/empty_state_panel.dart — replaced with backward-compatible typedef re-export
    • kell_web/lib/shell/widgets/section_header.dart — replaced with backward-compatible typedef re-export
    • kell_web/lib/shell/widgets/summary_card.dart — replaced with backward-compatible typedef re-export
  • tests: passed (41/41 design_system, 294/294 feature_wordpress, 24/24 kell_web)
  • analyze: passed (dart analyze — no issues found in design_system and kell_web)
  • brief updated: yes

feat/shared-composition-pattern

  • status: merged to main
  • date: 2026-05-22
  • inspection: complete
  • implementation: complete
  • files changed:
    • core/lib/src/app/ — extracted shared composition abstractions (KcAppConfig, KcAppEnvironment, KcAppServices, KcServiceFactory, KcBootstrap, KcAppScope)
    • core/lib/core.dart — expanded barrel exports for app composition
    • core/test/core_test.dart — added 20 tests for shared composition abstractions
    • kell_web/ — updated to use core composition abstractions
  • tests: passed (20/20 core, 41/41 design_system, 294/294 feature_wordpress, 24/24 kell_web)
  • analyze: passed
  • brief updated: yes

feat/flutter-cicd

  • status: merged to main
  • date: 2026-05-22
  • inspection: complete
  • implementation: complete
  • files changed:
    • .forgejo/workflows/flutter-analyze.yml — new Forgejo Actions workflow for dart analyze on all 8 packages/apps
    • .forgejo/workflows/flutter-test.yml — new Forgejo Actions workflow for flutter test per package with aggregate pass/fail summary
    • kell_creations_apps/tools/run_all_tests.sh — new local CI helper script with optional --analyze flag
    • kell_creations_apps/tools/README.md — documents scripts and CI workflow inventory
  • tests: passed (20/20 core, 41/41 design_system, 294/294 feature_wordpress, 24/24 kell_web — 379 total)
  • analyze: passed (dart analyze — no issues found across all 8 packages/apps)
  • brief updated: yes

feat/test-coverage-visibility

  • status: merged to main
  • date: 2026-05-22
  • inspection: complete
  • implementation: complete
  • files changed:
    • .forgejo/workflows/flutter-test.yml — enhanced to run flutter test --coverage, parse lcov.info, report per-package line coverage percentages in aggregate summary table
    • kell_creations_apps/tools/collect_coverage.sh — new local coverage helper script with summary table
    • kell_creations_apps/tools/README.md — documented collect_coverage.sh script
    • .gitignore — added coverage/ directories
    • docs/development/master_development_brief.md — marked Stage 4D complete, documented baseline coverage table, updated next branch to Stage 5A, partially resolved improvement #5
  • tests: passed (20/20 core, 41/41 design_system, 294/294 feature_wordpress, 24/24 kell_web — 379 total)
  • analyze: passed
  • coverage baseline: core 85.7%, design_system 100.0%, feature_wordpress 84.7%, kell_web 54.1%, overall 78.4%
  • brief updated: yes

feat/android-app-shell

  • status: merged to main
  • date: 2026-05-28
  • inspection: complete
  • implementation: complete
  • files changed:
    • kell_mobile/pubspec.yaml — replaced default template dependencies with shared packages (core, design_system, feature_inventory, feature_orders, feature_policy, feature_wordpress); SDK constraint corrected to ^3.11.0
    • kell_mobile/lib/main.dart — replaced counter template with KcBootstrap entry point using --dart-define environment variables
    • kell_mobile/lib/app.dart — new KellMobileApp widget with KcAppScope<MobileAppServices>, KcTheme, and environment badge
    • kell_mobile/lib/composition/mobile_app_services.dart — new MobileAppServices extending KcAppServices with fake() and wp() factory constructors
    • kell_mobile/lib/shell/mobile_shell.dart — new MobileShell with 5-tab NavigationBar (Dashboard, Inventory, Orders, Publishing, More) and IndexedStack body
    • kell_mobile/lib/dashboard/domain/dashboard_summary.dart — shared DashboardSummary value object with fromData() and empty() constructors
    • kell_mobile/lib/dashboard/application/get_dashboard_summary.dart — use case aggregating inventory, orders, and publishing repositories
    • kell_mobile/lib/dashboard/application/dashboard_controller.dartChangeNotifier controller with loading/error/summary state
    • kell_mobile/lib/pages/dashboard_page.dart — mobile-optimized dashboard with GridView summary cards using design system widgets
    • kell_mobile/lib/pages/finance_placeholder_page.dart — placeholder page for Finance tab
    • kell_mobile/lib/pages/integrations_placeholder_page.dart — placeholder page for Integrations tab
    • kell_mobile/test/widget_test.dart — 6 widget tests covering shell loading, summary cards, environment badge, navigation bar, tab switching, and More menu
    • 13 other pubspec.yaml files — SDK constraint corrected from ^3.11.4 to ^3.11.0 across all packages
  • tests: passed (6/6 kell_mobile, 24/24 kell_web, 294/294 feature_wordpress — all passing)
  • analyze: not yet run (SDK constraint fix was prerequisite)
  • brief updated: yes

feat/android-publishing-surface

  • status: merged to main
  • date: 2026-05-29
  • inspection: complete
  • implementation: complete
  • files changed:
    • feature_wordpress/lib/feature_wordpress.dart — expanded barrel exports with ProductPublishingController, ProductSortField, ProductDraftCard, ProductPreviewPanel, and all 5 use cases + snack bar helpers for mobile consumption
    • kell_mobile/lib/pages/mobile_publishing_page.dart — new mobile-optimized publishing workspace with search bar, horizontal filter chips, sort dropdown, product count, compact card list, pull-to-refresh, and push navigation to detail page
    • kell_mobile/lib/pages/mobile_product_detail_page.dart — new full-screen product detail page wrapping shared ProductPreviewPanel with all narrow edit callbacks
    • kell_mobile/lib/shell/mobile_shell.dart — Products tab (case 2) switched from ProductPublishingPage to MobilePublishingPage; removed unused feature_wordpress import
    • kell_mobile/test/widget_test.dart — added 4 new mobile publishing surface tests (search bar, filter chips, product count, sort button) — 10 total kell_mobile tests
  • tests: passed (10/10 kell_mobile)
  • analyze: passed (dart analyze — no issues found)
  • brief updated: yes

feat/android-feedback-polish

  • status: merged to main
  • date: 2026-05-29
  • inspection: complete
  • implementation: complete
  • files changed:
    • kell_mobile/lib/pages/mobile_product_detail_page.dart — converted from stateless to StatefulWidget; added local controller listener for SnackBar feedback in detail page context; added confirmation dialogs for publish/move-to-draft actions; added haptic feedback (mediumImpact for status, lightImpact for field edits) on successful actions
    • kell_mobile/lib/pages/mobile_publishing_page.dart — added _detailPageActive guard to suppress SnackBars when detail page is pushed (prevents invisible behind-route feedback); updated _navigateToDetail to set/clear the guard flag using Navigator.push().then()
    • kell_mobile/test/widget_test.dart — added 4 new Stage 6A tests: detail page navigation, confirmation dialog for status changes, product name in app bar, and back navigation returning to product list
  • tests: passed (14/14 kell_mobile)
  • analyze: passed (dart analyze — no issues found)
  • brief updated: yes

feat/android-mobile-ux-hardening

  • status: merged to main
  • date: 2026-05-30
  • inspection: complete
  • implementation: complete
  • files changed:
    • feature_wordpress/lib/src/presentation/widgets/product_preview_panel.dart — removed constraints: BoxConstraints() and padding: EdgeInsets.zero overrides from 12 IconButtons (edit/save/cancel for name, price, description, category) to restore Material Design 48×48dp minimum touch targets; replaced fixed-width SizedBox(width: 80) on price edit TextField with Expanded for flexible layout on narrow mobile screens; added tooltip: 'Edit price' for consistency with other edit buttons
    • kell_mobile/lib/pages/mobile_product_detail_page.dart — wrapped ProductPreviewPanel in SafeArea to prevent content clipping under system UI on devices with notches/gesture bars
    • feature_wordpress/test/widgets/product_preview_panel_test.dart — added 6 new touch target tests: rendered size ≥ 48×48dp verification for edit name, edit price, edit category, edit description, save/cancel name buttons, and flexible price edit TextField width
  • tests: passed (300/300 feature_wordpress, 14/14 kell_mobile, 24/24 kell_web, 41/41 design_system — 379 total)
  • analyze: passed
  • brief updated: yes

feat/bulk-status-actions

  • status: merged to main
  • commit: 2c3ed3b
  • date: 2026-05-30
  • inspection: complete
  • implementation: complete
  • files changed:
    • feature_wordpress/lib/src/application/product_publishing_controller.dart — added BulkActionResult value class with successCount, failureCount, targetStatus, failedProductNames, totalCount, allSucceeded; added lastBulkActionResult, consumeBulkActionResult(), and bulkUpdateStatus() method that processes selected products sequentially with per-row updating state, then reloads once and clears multi-selection
    • feature_wordpress/lib/src/presentation/widgets/status_action_snack_bar.dart — added showBulkActionSnackBar() helper with success/partial-failure/total-failure variants showing count summaries and up to 3 failed product names
    • feature_wordpress/lib/src/presentation/product_publishing_page.dart — added _confirmBulkMoveToDraft() confirmation dialog; updated _MultiSelectBar with onBulkMoveToDraft callback and "Move to Draft" OutlinedButton.icon; added bulk result listener in _onControllerChanged
    • feature_wordpress/test/product_publishing_controller_test.dart — added 11 new bulkUpdateStatus tests: no-op on empty selection, moves all to draft, sets result on all-success, clears multi-selection, clears updatingIds, handles mixed statuses, consume clears result, starts null, preserves preview selection, persists filter/sort, disposal safety
  • tests: passed (311/311 feature_wordpress, 24/24 kell_web — 335+ total)
  • analyze: passed (info-level only — 8 pre-existing unnecessary_import in test files)
  • brief updated: yes

feat/inventory-domain-expansion

  • status: merged to main
  • date: 2026-07-10
  • inspection: complete
  • implementation: complete
  • files changed:
    • feature_inventory/lib/src/domain/inventory_item.dart — expanded model with description, imageUrl, category, reorderPoint, supplier, location, lastUpdated fields; added copyWith()
    • feature_inventory/lib/src/domain/inventory_adjustment_result.dart — new value object with success, updatedItem, errorMessage; named constructors success() and failure()
    • feature_inventory/lib/src/domain/inventory_repository.dart — expanded contract with adjustQuantity(), setQuantity(), createItem(), updateItem(), updateItemImage()
    • feature_inventory/lib/src/data/fake_inventory_repository.dart — expanded seed data (6 items with full fields, supplier/location, reorderPoint); implemented all write methods with status auto-update logic
    • feature_inventory/lib/src/application/adjust_inventory_quantity.dart — new use case wrapping adjustQuantity()
    • feature_inventory/lib/src/application/create_inventory_item.dart — new use case wrapping createItem()
    • feature_inventory/lib/src/application/update_inventory_item.dart — new use case wrapping updateItem()
    • feature_inventory/lib/src/application/inventory_controller.dart — added isUpdating, lastActionResult, adjustQuantity(), createItem(), updateItem(), _refreshItem() with pre-filter selectedItem refresh
    • feature_inventory/lib/src/presentation/inventory_page.dart — updated InventoryController constructor call to pass all 4 use cases
    • feature_inventory/lib/feature_inventory.dart — expanded barrel exports for all new types and use cases
    • feature_inventory/test/feature_inventory_test.dart — 49 tests covering InventoryStatus, InventoryItem, InventoryAdjustmentResult, FakeInventoryRepository (all write methods), and InventoryController (read + write actions)
    • kell_web/test/dashboard/domain/dashboard_summary_test.dart — updated InventoryItem construction to use expanded model
    • kell_web/test/dashboard/application/dashboard_controller_test.dart — updated stub InventoryRepository to implement expanded contract
  • tests: passed (49/49 feature_inventory, 24/24 kell_web, 20/20 core, 41/41 design_system, 311/311 feature_wordpress — 445 total)
  • analyze: passed (dart analyze — no issues found)
  • brief updated: yes

feat/inventory-page-ui

  • status: merged to main
  • date: 2026-07-10
  • inspection: complete
  • implementation: complete
  • files changed:
    • feature_inventory/lib/src/presentation/inventory_page.dart — full inventory page with search bar, status filter chips (All / In Stock / Low Stock / Out of Stock / Draft), item count display, InventoryItemCard list, initialFilter and initialQuery constructor params
    • feature_inventory/lib/src/presentation/widgets/inventory_status_chip.dartInventoryStatusChip widget mapping InventoryStatus to label and color
    • feature_inventory/lib/src/presentation/widgets/inventory_detail_panel.dartInventoryDetailPanel with name, SKU, description, quantity, price, status chip, supplier, location, reorder point, last updated; Adjust Quantity and View Product action buttons; isUpdating loading indicator
    • feature_inventory/lib/src/presentation/widgets/adjust_quantity_dialog.dartAdjustQuantityDialog with +/- delta input, reason field, and AdjustQuantityDialogResult value object
    • feature_inventory/lib/src/presentation/inventory_action_snack_bar.dartshowInventoryActionSnackBar() helper for success/failure feedback
    • feature_inventory/lib/feature_inventory.dart — expanded barrel exports for all new presentation types
    • feature_inventory/test/widgets/inventory_page_test.dart — 26 new widget tests covering InventoryStatusChip (4), InventoryDetailPanel (11), InventoryPage (9), AdjustQuantityDialogResult (2)
    • kell_creations_apps/tools/run_all_tests.sh — added feature_inventory to TESTABLE list
  • tests: passed (75/75 feature_inventory, 311/311 feature_wordpress, 24/24 kell_web, 14/14 kell_mobile, 41/41 design_system, 20/20 core — 485 total)
  • analyze: passed (dart analyze --fatal-infos — no issues found)
  • brief updated: yes

feat/orders-domain

  • status: merged to main
  • date: 2026-07-10
  • inspection: complete
  • implementation: complete
  • files changed:
    • feature_orders/lib/src/domain/order.dart — added customerPhone, notes, orderNotes fields; added copyWith()
    • feature_orders/lib/src/domain/order_action_result.dart — new value object with success, updatedOrder, errorMessage; named constructors success() and failure()
    • feature_orders/lib/src/domain/orders_repository.dart — expanded contract with updateOrderStatus(), addOrderNote(), createOrder()
    • feature_orders/lib/src/data/fake_orders_repository.dart — added customerPhone to seed data; implemented all write methods with duplicate-check, empty-note guard, and status auto-update
    • feature_orders/lib/src/application/update_order_status.dart — new use case wrapping updateOrderStatus()
    • feature_orders/lib/src/application/add_order_note.dart — new use case wrapping addOrderNote()
    • feature_orders/lib/src/application/create_order.dart — new use case wrapping createOrder()
    • feature_orders/lib/src/application/orders_controller.dart — added isUpdating, lastActionResult, updateOrderStatus(), addOrderNote(), createOrder(), consumeActionResult(), _reloadAndRefresh() with filter/search persistence after writes; write use cases are optional named params for backward compatibility
    • feature_orders/lib/feature_orders.dart — expanded barrel exports for all new types and use cases
    • feature_orders/test/feature_orders_test.dart — expanded domain tests: Order (copyWith, defaults, computed props), OrderItem, OrderStatus, OrderActionResult, barrel smoke test
    • feature_orders/test/fake_orders_repository_test.dart — expanded with write method tests: updateOrderStatus (4), addOrderNote (6), createOrder (4)
    • feature_orders/test/orders_controller_test.dart — expanded with write-side tests: updateOrderStatus (6), addOrderNote (6), createOrder (4), consumeActionResult (3), filter/search persistence (2); read-side tests preserved
    • kell_web/test/dashboard/application/dashboard_controller_test.dart — updated _StubOrdersRepository to implement expanded OrdersRepository contract
    • kell_creations_apps/tools/run_all_tests.sh — added feature_orders and kell_mobile to TESTABLE list
  • tests: passed (90/90 feature_orders, 24/24 kell_web — all passing)
  • analyze: passed (dart analyze --fatal-infos — no issues found in feature_orders and kell_web)
  • brief updated: yes

feat/orders-page-ui

  • status: merged to main
  • date: 2026-07-10
  • inspection: complete
  • implementation: complete
  • files changed:
    • feature_orders/lib/src/presentation/orders_page.dart — full orders page with search bar, status filter chips (All / Pending / Processing / Shipped / Delivered / Cancelled), order count display, OrderCard list, master-detail wide layout, push-navigation narrow layout; initialFilter, initialQuery, initialSelectedId constructor params; onViewProduct and onViewInventory cross-feature callbacks
    • feature_orders/lib/src/presentation/widgets/order_card.dartOrderCard with order ID, customer name, date, status chip, item count, and total
    • feature_orders/lib/src/presentation/widgets/order_detail_panel.dartOrderDetailPanel with customer info, shipping address, line items table, order total, order notes, status update dropdown, Add Note button, and isUpdating loading indicator; optional onViewProduct/onViewInventory cross-feature links per line item
    • feature_orders/lib/src/presentation/widgets/order_status_chip.dartOrderStatusChip mapping OrderStatus to label and color
    • feature_orders/lib/src/presentation/widgets/add_note_dialog.dartAddNoteDialog with text field, empty-note validation, and AddNoteDialogResult value object
    • feature_orders/lib/src/presentation/orders_action_snack_bar.dartshowOrderActionSnackBar() helper for success/failure feedback
    • feature_orders/lib/feature_orders.dart — expanded barrel exports for all new presentation types and OrdersController
    • feature_orders/test/widgets/orders_page_test.dart — 25 new widget tests covering OrderDetailPanel (14), AddNoteDialog (3), OrdersPage (6), and _EmptyOrdersRepository test double
  • tests: passed (115/115 feature_orders, 24/24 kell_web — 139 total for affected packages)
  • analyze: passed (dart analyze — no issues found)
  • brief updated: yes

feat/orders-mobile-surface

  • status: merged to main
  • date: 2026-07-10
  • inspection: complete
  • implementation: complete
  • files changed:
    • kell_mobile/lib/pages/mobile_orders_page.dart — new MobileOrdersPage with search bar, horizontal status filter chips (All / Pending / Processing / Shipped / Delivered / Cancelled), order count display, OrderCard list at 160px height, pull-to-refresh, _detailPageActive guard to suppress behind-route SnackBars
    • kell_mobile/lib/pages/mobile_order_detail_page.dart — new MobileOrderDetailPage wrapping shared OrderDetailPanel; StatefulWidget with local controller listener for SnackBar feedback; confirmation dialog before status changes; haptic feedback (mediumImpact for status, lightImpact for note additions); SafeArea wrapper
    • kell_mobile/lib/shell/mobile_shell.dart — Orders tab (case 3) switched from shared OrdersPage to MobileOrdersPage; removed unused feature_orders direct import
    • kell_mobile/test/widget_test.dart — added 6 new Stage 6B tests: Orders tab search bar, status filter chips, order count, order card navigation to detail, confirmation dialog for status change, back navigation returning to orders list — 20 total kell_mobile tests
  • tests: passed (20/20 kell_mobile, 115/115 feature_orders — all passing)
  • analyze: passed (dart analyze --fatal-infos — no issues found)
  • brief updated: yes

feat/inventory-mobile-surface

  • status: merged to main
  • date: 2026-07-10
  • inspection: complete
  • implementation: complete
  • files changed:
    • kell_mobile/lib/pages/mobile_inventory_page.dart — new MobileInventoryPage with search bar, horizontal status filter chips (All / In Stock / Low Stock / Out of Stock / Draft), item count display, compact _MobileInventoryCard list at 120px height showing name, SKU, status chip, and quantity-on-hand, pull-to-refresh, _detailPageActive guard to suppress behind-route SnackBars
    • kell_mobile/lib/pages/mobile_inventory_detail_page.dart — new MobileInventoryDetailPage wrapping shared InventoryDetailPanel; StatefulWidget with local controller listener for SnackBar feedback; shows showAdjustQuantityDialog on Adjust Quantity tap; haptic feedback (mediumImpact on result, lightImpact on successful adjust); SafeArea wrapper
    • kell_mobile/lib/shell/mobile_shell.dart — Inventory tab (case 1) switched from shared InventoryPage to MobileInventoryPage; removed unused feature_inventory direct import
    • kell_mobile/test/widget_test.dart — added 6 new Stage 6C tests: Inventory tab search bar, status filter chips, item count, inventory card navigation to detail, adjust quantity dialog, back navigation returning to inventory list — 26 total kell_mobile tests
  • tests: passed (26/26 kell_mobile, 75/75 feature_inventory — all passing)
  • analyze: passed (dart analyze --fatal-infos — no issues found)
  • brief updated: yes

chore/analyze-cleanup-and-tracker-sync

  • status: merged to main
  • date: 2026-05-30
  • inspection: complete
  • implementation: complete
  • files changed:
    • feature_wordpress/test/product_publishing_controller_test.dart — removed 3 unnecessary_import directives (get_product_drafts, product_publishing_controller, publish_product)
    • feature_wordpress/test/widgets/product_draft_card_test.dart — removed 1 unnecessary_import directive (product_draft_card)
    • feature_wordpress/test/widgets/product_preview_panel_test.dart — removed 1 unnecessary_import directive (product_preview_panel)
    • feature_wordpress/test/widgets/publish_status_chip_test.dart — removed 1 unnecessary_import directive (publish_status_chip)
    • feature_wordpress/test/widgets/status_action_snack_bar_test.dart — removed 2 unnecessary_import directives (product_publishing_controller, status_action_snack_bar)
    • kell_mobile/test/widget_test.dart — removed unused productCards local variable
    • docs/development/build_execution_tracker.md — updated Stage 7A to merged, synced current status
    • docs/development/master_development_brief.md — updated next recommended branch, validation state, test counts
  • tests: passed (311/311 feature_wordpress, 14/14 kell_mobile, 24/24 kell_web, 41/41 design_system, 20/20 core — 410 total)
  • analyze: passed (dart analyze --fatal-infos — no issues found across all packages)
  • brief updated: yes

feat/integrations-contracts

  • status: merged to main
  • date: 2026-07-11
  • inspection: complete
  • implementation: complete
  • files changed:
    • integrations/lib/src/api_exception.dart — new ApiException base class with statusCode, message, body; replaces placeholder Calculator class
    • integrations/lib/src/api_client.dart — new ApiClient abstract class with initialize(), dispose(), isReady, execute<T>() lifecycle contract
    • integrations/lib/src/retry_policy.dart — new RetryPolicy abstract class; NoRetryPolicy (never retries); ExponentialBackoffRetryPolicy (doubles delay per attempt, capped at maxDelay, retries on 5xx and network errors)
    • integrations/lib/src/rate_limiter.dart — new RateLimiter abstract class; NoRateLimiter (no-op); TokenBucketRateLimiter (maxRequests per window, queues excess requests)
    • integrations/lib/src/integration_health_check.dart — new HealthCheckResult value object with healthy/unhealthy named constructors; IntegrationHealthCheck abstract contract
    • integrations/lib/src/webhook_handler.dart — new WebhookEvent, WebhookProcessingStatus enum, WebhookResult with processed/ignored/failed constructors; WebhookHandler abstract contract
    • integrations/lib/src/channel_adapter.dart — new ChannelProduct, ChannelOrder, ChannelOrderItem, ChannelInventoryCount neutral value objects; ChannelAdapter abstract contract with products/orders/inventory operations
    • integrations/lib/integrations.dart — replaced Calculator placeholder with barrel exports for all 7 new contract files
    • integrations/test/integrations_test.dart — replaced placeholder test with 38 tests covering all contracts and value objects
    • feature_wordpress/lib/src/data/woo_commerce_api_client.dartWooCommerceApiClient now implements ApiClient; added initialize(), isReady, execute<T>(); dispose() also resets _ready
    • feature_wordpress/lib/src/data/woo_commerce_api_client.dartWooCommerceApiException now extends ApiException instead of implementing Exception directly
    • feature_wordpress/pubspec.yaml — added integrations: path: ../integrations dependency
    • kell_creations_apps/tools/run_all_tests.sh — added packages/integrations to both TESTABLE and ANALYZABLE lists
  • tests: passed (38/38 integrations, 319/319 feature_wordpress — 357 total for affected packages)
  • analyze: passed (dart analyze --fatal-infos — no issues found in integrations and feature_wordpress)
  • brief updated: yes

feat/data-layer-contracts

  • status: merged to main
  • date: 2026-07-11
  • inspection: complete
  • implementation: complete
  • files changed:
    • data/lib/src/local_cache.dart — new LocalCache<T> abstract contract; InMemoryCache<T> implementation with TTL-based expiry, key enumeration, and dispose
    • data/lib/src/sync_queue.dart — new SyncOperationStatus enum, SyncOperation value object with copyWith(); SyncFlushResult with success/failure constructors; SyncQueue abstract contract; InMemorySyncQueue implementation with enqueue, process (success/failure tracking), remove, pruneCompleted, and length
    • data/lib/src/conflict_resolver.dart — new ConflictResolution enum, ConflictResult<T> with useLocal/useRemote/merged/requiresReview constructors; ConflictResolver<T> abstract contract; LastWriteWinsResolver<T>, LocalAlwaysWinsResolver<T>, RemoteAlwaysWinsResolver<T> concrete implementations
    • data/lib/src/change_tracker.dart — new ChangeState enum, TrackedChange<T> value object with copyWith(); ChangeTracker<T> abstract contract; InMemoryChangeTracker<T> implementation with trackCreated/trackModified/trackDeleted/markSynced/markSyncError/pendingChanges/hasPendingChanges/clear
    • data/lib/src/data_mapper.dart — new DataMapper<TLocal, TRemote> abstract contract with fromRemote/toRemote/fromRemoteList/toRemoteList; DataMappingException with field, message, rawValue
    • data/lib/data.dart — replaced Calculator placeholder with barrel exports for all 5 new contract files
    • data/test/data_test.dart — replaced placeholder test with 63 tests covering all contracts and implementations
    • kell_creations_apps/tools/run_all_tests.sh — added packages/data to both TESTABLE and ANALYZABLE lists
  • tests: passed (63/63 data)
  • analyze: passed (dart analyze --fatal-infos — no issues found)
  • brief updated: yes

feat/auth-foundation

  • status: merged to main
  • date: 2026-07-11
  • inspection: complete
  • implementation: complete
  • files changed:
    • auth/lib/src/domain/kc_user.dartKcUser value object with id, displayName, email, role; KcUserRole enum (admin, operator, viewer)
    • auth/lib/src/domain/auth_state.dartAuthState sealed class hierarchy: AuthStateUnauthenticated, AuthStateAuthenticated, AuthStateLoading, AuthStateError
    • auth/lib/src/domain/auth_exception.dartAuthException with code and message; named constructors invalidCredentials, sessionExpired, networkError, unknown
    • auth/lib/src/domain/auth_service.dartAuthService abstract contract with login(), logout(), currentUser, authStateStream, isAuthenticated
    • auth/lib/src/domain/credential_store.dartCredentialKeys constants; CredentialStore abstract contract with save(), load(), delete(), clear()
    • auth/lib/src/data/in_memory_credential_store.dartInMemoryCredentialStore implementation
    • auth/lib/src/data/fake_auth_service.dartFakeAuthService with configurable users, delay simulation, and stream broadcasting
    • auth/lib/auth.dart — barrel exports for all auth types
    • auth/test/auth_test.dart — 42 tests covering all domain models, contracts, and implementations
    • core/lib/src/app/kc_app_environment.dart — added KcAppEnvironment.square value
    • kell_creations_apps/tools/run_all_tests.sh — added packages/auth to TESTABLE and ANALYZABLE lists
  • tests: passed (42/42 auth, 21/21 core — all passing)
  • analyze: passed (dart analyze --fatal-infos — no issues found)
  • brief updated: yes

feat/wc-orders-integration

  • status: merged to main
  • date: 2026-07-11
  • inspection: complete
  • implementation: complete
  • files changed:
    • feature_orders/lib/src/domain/order_status.dart — added onHold, refunded, failed values
    • feature_orders/lib/src/domain/order_item.dart — added productId, variationId, customizations fields
    • feature_orders/lib/src/domain/order.dart — added paymentMethod, source, customFields fields
    • feature_orders/lib/src/domain/orders_repository.dart — added getOrder(id) to contract
    • feature_orders/lib/src/domain/order_source.dart — new OrderSource enum (online, market, manual)
    • feature_orders/lib/src/data/fake_orders_repository.dart — implemented getOrder(id) with null-safe lookup
    • feature_orders/lib/src/data/woo_commerce_order_mapper.dart — new WooCommerceOrderMapper mapping WooCommerce JSON ↔ Order domain model
    • feature_orders/lib/src/data/woo_commerce_orders_repository.dart — new WooCommerceOrdersRepository implementing full OrdersRepository contract via WooCommerceApiClient
    • feature_orders/lib/feature_orders.dart — expanded barrel exports for all new types
    • feature_orders/pubspec.yaml — added feature_wordpress dependency; added http dev dependency
    • feature_wordpress/lib/src/data/woo_commerce_api_client.dart — added getOrders(), getOrder(id), updateOrderStatus(), createOrder(), addOrderNote() methods
    • feature_wordpress/lib/feature_wordpress.dart — exported WooCommerceApiClient and WooCommerceApiException
    • feature_orders/test/woo_commerce_order_mapper_test.dart — 25 mapper tests covering full JSON → domain mapping, status mapping, item mapping, customizations, edge cases
    • feature_orders/test/woo_commerce_orders_repository_test.dart — 23 repository and API client tests covering all CRUD operations, error handling, empty-note guard, and FakeOrdersRepository.getOrder
  • tests: passed (198/198 feature_orders, 24/24 kell_web, 26/26 kell_mobile — 248 total for affected packages; 847/847 total across all packages)
  • analyze: passed (dart analyze --fatal-infos — no issues found in feature_orders, feature_wordpress, kell_web, kell_mobile)
  • brief updated: yes

feat/bulk-operator-workflows

  • status: merged to main
  • date: 2026-05-30
  • inspection: complete
  • implementation: complete
  • files changed:
    • feature_wordpress/lib/src/data/wordpress_product_mapper.darttoWooCommerceStatus() now maps PublishStatus.pendingReview'pending' instead of throwing ArgumentError; only unpublished throws
    • feature_wordpress/lib/src/presentation/product_publishing_page.dart — added _confirmBulkPublish() and _confirmBulkSubmitForReview() confirmation dialogs; updated _MultiSelectBar with onBulkPublish and onBulkSubmitForReview callbacks; added "Publish" and "Submit for Review" OutlinedButton.icon buttons; refactored bar layout from Row to Wrap for responsive overflow
    • feature_wordpress/test/wordpress_product_mapper_test.dart — updated pendingReview test: now expects 'pending' return value instead of ArgumentError
    • feature_wordpress/test/product_publishing_controller_test.dart — added 3 new bulk tests: publishes all selected products, submits all for review, handles mixed statuses to published
    • feature_wordpress/test/widgets/product_publishing_page_test.dart — added 5 new widget tests: multi-select bar shows Publish button, Publish confirmation dialog, Submit for Review confirmation dialog, cancel preserves selection, plural count in dialog
    • feature_wordpress/test/wordpress_product_publishing_repository_test.dart — removed pendingReview from unsupported-throws test; only unpublished asserted
  • tests: passed (319/319 feature_wordpress)
  • analyze: passed (dart analyze --fatal-infos — no issues found)
  • brief updated: yes

feat/wc-inventory-sync

  • status: merged to main
  • date: 2026-07-11
  • inspection: complete
  • implementation: complete
  • files changed:
    • feature_inventory/lib/src/domain/inventory_sync_status.dart — new InventorySyncStatus enum (notSynced, synced, pending, conflict, error)
    • feature_inventory/lib/src/domain/inventory_item.dart — added wooCommerceProductId (nullable int), syncStatus, lastSyncedAt fields; updated copyWith() to preserve/update all three
    • feature_inventory/lib/src/domain/inventory_repository.dart — added getItemBySku(sku) and syncWithRemote(id, remoteQuantity, reason) to contract
    • feature_inventory/lib/src/data/fake_inventory_repository.dart — updated seed data with wooCommerceProductId, syncStatus, lastSyncedAt; implemented getItemBySku() and syncWithRemote() with status auto-derivation and lastSyncedAt stamping
    • feature_inventory/lib/src/application/inventory_sync_service.dart — new InventorySyncService orchestrating pull-only or bidirectional sync; syncAll(), syncItem(id), checkDifference(id); InventorySyncResult value object; StockDifference value object
    • feature_inventory/lib/src/data/woo_commerce_inventory_repository.dart — new WooCommerceInventoryRepository implementing full InventoryRepository contract; adjustQuantity() and setQuantity() push to WooCommerce via updateProductStock(); syncWithRemote() pulls remote quantity and stamps lastSyncedAt; local-only items (no wooCommerceProductId) skip WooCommerce calls
    • feature_inventory/lib/feature_inventory.dart — expanded barrel exports for InventorySyncService, WooCommerceInventoryRepository, InventorySyncStatus
    • feature_inventory/pubspec.yaml — added feature_wordpress: path: ../feature_wordpress dependency; added http: ^1.4.0 dev dependency
    • feature_wordpress/lib/src/data/woo_commerce_api_client.dart — added getProductStock(productId), updateProductStock(productId, quantity), batchUpdateStock(updates) methods
    • feature_inventory/test/woo_commerce_inventory_sync_test.dart — 57 new tests covering InventorySyncStatus, InventoryItem sync fields, FakeInventoryRepository (getItemBySku, syncWithRemote), WooCommerceApiClient stock methods, WooCommerceInventoryRepository, InventorySyncService, StockDifference, InventorySyncResult
    • kell_web/test/dashboard/application/dashboard_controller_test.dart — updated _StubInventoryRepository and _FailingInventoryRepository stubs to implement expanded InventoryRepository contract (getItemBySku, syncWithRemote)
  • tests: passed (132/132 feature_inventory, 24/24 kell_web, 319/319 feature_wordpress — all passing)
  • analyze: passed (dart analyze — no issues found)
  • brief updated: yes

feat/wc-catalog-expansion

  • status: merged to main
  • date: 2026-07-11
  • inspection: complete
  • implementation: complete
  • files changed:
    • feature_wordpress/lib/src/domain/product_category.dart — new ProductCategory value object with id, name, slug, parentId, count; copyWith(), ==/hashCode, toString()
    • feature_wordpress/lib/src/domain/product_image.dart — new ProductImage value object with id, url, alt, position; copyWith(), ==/hashCode
    • feature_wordpress/lib/src/domain/product_publishing_repository.dart — added createProduct(), deleteProduct(), updateProductImages(), getProductImages(), getCategories(), createCategory(), updateCategory(), deleteCategory() to contract
    • feature_wordpress/lib/src/data/fake_product_publishing_repository.dart — implemented all 8 new repository methods; added seed categories (Jewelry, Accessories, Home Decor, Kitchen Accessories); createProduct() resolves category name from id; createCategory() auto-generates slug from name; updateCategory() and deleteCategory() throw StateError for unknown ids
    • feature_wordpress/lib/src/data/woo_commerce_api_client.dart — added createProduct(), deleteProduct(), getCategories(), createCategory(), updateCategory(), deleteCategory(), getProductImages(), setProductImages() methods; getCategories() paginates with per_page=100
    • feature_wordpress/lib/src/data/wordpress_product_publishing_repository.dart — implemented all 8 new repository methods delegating to WooCommerceApiClient; maps JSON ↔ domain models
    • feature_wordpress/lib/src/application/create_product.dart — new CreateProduct use case
    • feature_wordpress/lib/src/application/delete_product.dart — new DeleteProduct use case
    • feature_wordpress/lib/src/application/get_categories.dart — new GetCategories use case
    • feature_wordpress/lib/src/application/create_category.dart — new CreateCategory use case
    • feature_wordpress/lib/src/application/update_product_images.dart — new UpdateProductImages use case
    • feature_wordpress/lib/feature_wordpress.dart — exported all new domain models and use cases
    • feature_wordpress/test/wc_catalog_expansion_test.dart — 69 new tests covering ProductCategory, ProductImage, FakeProductPublishingRepository (all new methods), WooCommerceApiClient (all new methods), WordPressProductPublishingRepository (all new methods), and all 5 use cases
    • kell_web/test/dashboard/application/dashboard_controller_test.dart — updated _StubProductPublishingRepository to implement expanded ProductPublishingRepository contract
    • kell_creations_apps/packages/feature_wordpress/test/widgets/product_publishing_page_test.dart — updated _FakeProductPublishingRepository stub to implement expanded contract
  • tests: passed (388/388 feature_wordpress, 24/24 kell_web — all passing)
  • analyze: passed (dart analyze — no issues found)
  • brief updated: yes

feat/wc-catalog-expansion-ui

  • status: merged to main
  • date: 2026-07-11
  • inspection: complete
  • implementation: complete
  • files changed:
    • feature_wordpress/lib/src/presentation/widgets/create_product_dialog.dart — new CreateProductDialog StatefulWidget with name (required), price (required), SKU, category dropdown, description, and initial-status SegmentedButton (Draft / Review); inline validation errors; CreateProductDialogResult value object; showCreateProductDialog() helper
    • feature_wordpress/lib/src/presentation/category_management_page.dart — new CategoryManagementPage with category list, add-category FAB, inline rename, delete with confirmation dialog, empty state, loading/error states; CategoryManagementPage.route() static helper
    • feature_wordpress/lib/src/application/product_publishing_controller.dart — added CreateProductResult sealed class (CreateProductSuccess, CreateProductFailure); added lastCreateProductResult, consumeCreateProductResult(), createNewProduct() (calls CreateProduct use case, auto-selects new product, reloads); added fetchCategories() (calls GetCategories use case); CreateProduct and GetCategories use cases are optional named constructor params for backward compatibility
    • feature_wordpress/lib/src/presentation/product_publishing_page.dart — added "New Product" FilledButton.icon in toolbar; wired showCreateProductDialog()controller.createNewProduct(); added showCreateProductSnackBar() result listener; added "Manage Categories" TextButton in toolbar linking to CategoryManagementPage
    • feature_wordpress/lib/feature_wordpress.dart — exported CreateProductDialog, CreateProductDialogResult, showCreateProductDialog, CategoryManagementPage, CreateProductResult, CreateProductSuccess, CreateProductFailure
    • kell_mobile/lib/pages/mobile_create_product_page.dart — new MobileCreateProductPage full-screen form (name, price, SKU, category dropdown, description, initial status) with AppBar and "Create Product" action button; mirrors dialog fields in a scrollable page layout
    • kell_mobile/lib/pages/mobile_publishing_page.dart — added "New Product" FloatingActionButton navigating to MobileCreateProductPage; wired result back to controller.createNewProduct(); added showCreateProductSnackBar() result listener
    • feature_wordpress/test/widgets/create_product_dialog_test.dart — 13 new widget tests: renders fields, Cancel returns null, name/price validation errors, valid submit returns result, SKU/description included, category dropdown shown/hidden, initial status defaults to draft, error-clears-on-type, standalone render
    • feature_wordpress/test/widgets/category_management_page_test.dart — 14 new widget tests: renders category list, empty state, add category dialog, rename inline, delete confirmation, loading state, error state, category count
    • feature_wordpress/test/product_publishing_controller_test.dart — added 7 new controller tests: createNewProduct success/auto-select/failure/consume/null-use-case, fetchCategories success/null-use-case
  • tests: passed (424/424 feature_wordpress — all passing)
  • analyze: passed (dart analyze --fatal-infos — no issues found)
  • brief updated: yes

feat/square-api-client

  • status: merged to main
  • date: 2026-07-19
  • inspection: complete
  • implementation: complete
  • files changed:
    • integrations/lib/src/square_api_client.dart — new SquareApiClient implementing ApiClient contract; sandbox() and production() factory constructors; initialize(), dispose(), isReady, execute<T>() lifecycle; Catalog API (listCatalogItems() with cursor pagination, getCatalogItem(), upsertCatalogItem(), deleteCatalogItem()); Inventory API (getInventoryCount(), batchChangeInventory()); Orders API (createOrder(), listOrders(), getOrder()); Payments API (createPayment(), getPayment()); Bearer token + Square-Version headers on all requests
    • integrations/lib/src/square_api_exception.dart — new SquareApiException extending ApiException with statusCode, message, body; toString() includes all fields
    • integrations/lib/integrations.dart — expanded barrel exports for SquareApiClient and SquareApiException
    • integrations/test/square_api_client_test.dart — 50 new tests covering SquareApiException (5), SquareApiClient construction (2), ApiClient contract (5), Catalog API (12), Inventory API (7), Orders API (9), Payments API (8), auth headers (2)
    • integrations/pubspec.yaml — removed duplicate http dev dependency (was also in normal dependencies)
    • core/lib/src/composition/kc_app_environment.dart — added multi value to KcAppEnvironment enum (joining existing fake, wp, square)
    • core/lib/src/composition/kc_app_config.dart — added KC_SQUARE_ACCESS_TOKEN, KC_SQUARE_LOCATION_ID, KC_SQUARE_ENVIRONMENT dart-define key constants
    • core/test/core_test.dart — added 3 new tests: KcAppEnvironment.multi exists, KC_SQUARE_ACCESS_TOKEN constant, KC_SQUARE_LOCATION_ID constant — 24 total core tests
  • tests: passed (88/88 integrations, 24/24 kell_web, 26/26 kell_mobile, 424/424 feature_wordpress, 132/132 feature_inventory, 198/198 feature_orders, 41/41 design_system, 24/24 core — 957 total)
  • analyze: passed (dart analyze --fatal-infos — no issues found across all 11 packages/apps)
  • brief updated: yes

feat/square-catalog-sync

  • status: in progress on branch (commit a6f888c)
  • date: 2026-07-25
  • inspection: complete
  • implementation: complete (Stage 10B slice)
  • files changed:
    • integrations/lib/src/square_product_mapper.dart — new SquareProductMapper; fromSquareCatalogObject() maps Square ITEM CatalogObject JSON → ChannelProduct (cents→dollars, is_deletedarchived status, first-variation SKU/price extraction); fromSquareCatalogList() batch variant skipping non-ITEM entries; toSquareCatalogObject() maps ChannelProduct → Square ITEM JSON (dollars→cents rounding, default variation with FIXED_PRICING, location_overrides with track_inventory, optional description/SKU omitted when null)
    • integrations/lib/src/square_inventory_mapper.dart — new SquareInventoryMapper; fromSquareInventoryCount() maps Square InventoryCount JSON → ChannelInventoryCount (IN_STOCK only, string quantity parsed safely); fromSquareInventoryCountList() batch variant; toSquareBatchChangeEntry() maps ChannelInventoryCount → Square PHYSICAL_COUNT batch-change entry (quantity as string, RFC 3339 timestamp); toSquareBatchChangeEntries() batch variant
    • integrations/lib/integrations.dart — added square_inventory_mapper.dart and square_product_mapper.dart to barrel exports
    • integrations/test/square_catalog_sync_test.dart — 35 new tests: SquareProductMapper (20: fromSquareCatalogObject ×9, fromSquareCatalogList ×3, toSquareCatalogObject ×6) and SquareInventoryMapper (15: fromSquareInventoryCount ×8, fromSquareInventoryCountList ×3, toSquareBatchChangeEntry ×3, toSquareBatchChangeEntries ×2)
    • feature_wordpress/lib/src/domain/product_id_mapping.dart — new ProductIdMapping value object with localId, wooCommerceId, squareCatalogObjectId, squareVariationId, lastUpdated; copyWith(), ==/hashCode, toString()
    • feature_wordpress/lib/src/domain/product_id_mapping_repository.dart — new ProductIdMappingRepository abstract contract: getAllMappings(), getMappingByLocalId(), getMappingByWooCommerceId(), getMappingBySquareId(), saveMapping() (upsert), deleteMapping() (no-op safe)
    • feature_wordpress/lib/src/data/fake_product_id_mapping_repository.dart — new FakeProductIdMappingRepository in-memory implementation; seeded with 6 mappings matching fake catalog (products 13 fully synced with Square IDs, products 45 WooCommerce-only, product 6 draft/unsynced); 50ms simulated async delay on all operations; getAllMappings() returns List.unmodifiable
    • feature_wordpress/lib/feature_wordpress.dart — added fake_product_id_mapping_repository.dart, product_id_mapping.dart, product_id_mapping_repository.dart to barrel exports
    • feature_wordpress/test/product_id_mapping_test.dart — 23 new tests: ProductIdMapping (7: fields, null defaults, copyWith, equality, hashCode, toString) and FakeProductIdMappingRepository (16: getAllMappings, getMappingByLocalId, getMappingByWooCommerceId, getMappingBySquareId, seed state, saveMapping insert/replace/count, deleteMapping remove/count/no-op, unmodifiable list)
  • tests: passed (123/123 integrations ← +35 new; 23/23 feature_wordpress product_id_mapping ← +23 new)
  • analyze: clean (no new issues introduced)
  • brief updated: yes

feat/square-catalog-sync-service

  • status: in progress on branch — ready for merge
  • date: 2026-07-25
  • inspection: complete
  • implementation: complete (Stage 10D slice)
  • files changed:
    • feature_wordpress/lib/src/application/square_catalog_sync_service.dart — new SquareCatalogSyncService application-layer service; SyncError value object with itemId, message, ==/hashCode/toString(); SquareSyncResult value object with catalogSynced, inventorySynced, catalogFailed, inventoryFailed, errors, totalProcessed, allSucceeded, merge(); InventorySyncAdapter abstract contract with syncItem(itemId, remoteQuantity); syncCatalog() fetches all products via ProductPublishingRepository.getProductDrafts(), looks up or creates ProductIdMapping per product via ProductIdMappingRepository, captures per-item failures without aborting; syncInventory() iterates all mappings with a squareVariationId, calls InventorySyncAdapter.syncItem() for each, captures per-item failures; syncAll() runs syncCatalog() then syncInventory() and merges results; no-op when no adapter provided
    • feature_wordpress/lib/feature_wordpress.dart — added square_catalog_sync_service.dart to barrel exports (Application section)
    • feature_wordpress/test/square_catalog_sync_service_test.dart — 31 new tests: SyncError (3: fields, equality, toString), SquareSyncResult (7: defaults, totalProcessed, allSucceeded×3, merge, toString), syncCatalog (9: empty, single, id match, multiple, existing-not-duplicated, fetch-failure, saveMapping-failure, partial-failure, SyncError-details), syncInventory (7: no-adapter, no-variationId-skipped, synced, false-return, throw-continues, getAllMappings-failure, empty-mappings), syncAll (5: merges, pre-seeded-variation-IDs, totalProcessed, catalog-failure-no-prevent-inventory, no-adapter)
  • tests: passed (506/506 feature_wordpress ← +31 new, 167/167 feature_inventory — all passing)
  • analyze: clean (dart analyze — no issues found)
  • brief updated: yes

chore/audit-state-sync

  • status: complete (documentation-only — no code changes)
  • date: 2026-07-25
  • inspection: complete — full repository audit conducted against all 11 packages/apps
  • implementation: complete
  • audit reference: PROJECT_STATE_AUDIT.md — Kell Creations Operations Platform Comprehensive Code Audit
  • files changed:
    • PROJECT_STATE_AUDIT.md — new comprehensive audit document; covers monorepo architecture, built vs. remaining matrix for all 13 packages + 2 apps, technical debt assessment (dead code, error handling gaps, hardcoded values, test coverage, architectural antipatterns), and actionable engineering backlog (Phase 1/2/3 priorities)
    • docs/development/master_development_brief.md — updated validation state (core 24/24, feature_wordpress 506/506 post-10D, total 1,015/1,015); updated next recommended branch to include P1.1P1.5 scope; added "Comprehensive State Audit (2026-07-25)" section with platform scorecard, Phase 1/2/3 backlog tables, and key technical debt findings; updated Appendix A (feature maturity matrix — all test counts, completeness percentages, kell_web/kell_mobile rows added); updated Appendix B (integration landscape — all Square repos now marked complete, WC repos status corrected); updated Appendix C (Square keys moved from "Planned" to "Active"; KC_ENV values table updated with current status)
    • docs/development/build_execution_tracker.md — updated current status section (audit completion noted, pending merge flagged, next branch scope documented); added this slice entry
  • tests: n/a (documentation-only change)
  • analyze: n/a (documentation-only change)
  • brief updated: yes
  • audit findings summary:
    • 1,015/1,015 tests passing across all 11 packages/apps
    • dart analyze --fatal-infos clean across all 11 packages/apps
    • CRITICAL: AppServices/MobileAppServices have no square() or multi() factory — KC_ENV=square silently falls to fake mode
    • HIGH: SquareCatalogSyncService ID conflation bug; RetryPolicy/RateLimiter not wired; auth package not imported by any app
    • Phase 1 (5 items) → target feat/square-catalog-sync-service-controller (Stage 10E)
    • Phase 2 (10 items) → Stages 10C, 11, 12, 13, 14, 15
    • Phase 3 (12 items) → Stages 16A/B + standalone hardening tasks

feat/square-catalog-sync-repositories

  • status: in progress on branch — ready for merge
  • date: 2026-07-25
  • inspection: complete
  • implementation: complete (Stage 10C slice)
  • files changed:
    • feature_wordpress/lib/src/data/square_catalog_repository.dart — new SquareCatalogRepository implementing ProductPublishingRepository; backed by SquareApiClient; getProductDrafts() calls listCatalogItems() and maps via SquareProductMapper, populating an in-memory cache; publishDraft() returns cached draft with published status (no-op — Square items are always live); updateProductStatus(), updateProductPrice(), updateProductName(), updateProductDescription(), updateProductCategory() each mutate the cached ProductDraft, call upsertCatalogItem() with the updated Square JSON, and return the refreshed draft; createProduct() calls upsertCatalogItem() with a #NEW_ idempotency key, maps the response, and adds to cache; deleteProduct() calls deleteCatalogItem() and removes from cache; updateProductImages(), getCategories(), createCategory(), updateCategory(), deleteCategory(), getProductImages() throw UnsupportedError (Square manages these separately)
    • feature_wordpress/lib/feature_wordpress.dart — added square_catalog_repository.dart to barrel exports
    • feature_inventory/lib/src/domain/inventory_item.dart — added squareVariationId (nullable String) field; updated copyWith() to preserve/update it
    • feature_inventory/lib/src/data/square_inventory_repository.dart — new SquareInventoryRepository implementing InventoryRepository; backed by SquareApiClient + initialItems seed list; getInventoryItems() returns List.unmodifiable; getItemBySku() linear scan; adjustQuantity() validates non-negative result, pushes batchChangeInventory() when squareVariationId is set (stamps synced/lastSyncedAt), otherwise marks notSynced; setQuantity() validates non-negative, same Square push pattern; syncWithRemote() validates non-negative, calls getInventoryCount() when squareVariationId is set and uses live count (falls back to remoteQuantity on empty response), stamps synced/lastSyncedAt; createItem() appends to local store; updateItem() replaces by id and stamps lastUpdated; updateItemImage() updates imageUrl by id; all write failures return InventoryAdjustmentResult.failure() with descriptive messages; status auto-derived from quantity vs reorderPoint
    • feature_inventory/lib/feature_inventory.dart — added square_inventory_repository.dart to barrel exports
    • feature_inventory/pubspec.yaml — added integrations: path: ../integrations dependency
    • feature_wordpress/test/square_catalog_repository_test.dart — 30 new tests: getProductDrafts (5: empty, single mapping, is_deleted status, multi+skip non-ITEM, cache population), publishDraft (2: success, StateError), updateProductStatus (2: upserts, StateError), updateProductPrice (2: upserts, StateError), updateProductName (1), updateProductDescription (1), updateProductCategory (1), createProduct (4: maps result, draft status, StateError on bad type, adds to cache), deleteProduct (1: removes from cache), unsupported operations (6: images/categories all throw UnsupportedError), status mapping (2), SquareApiException propagation (1)
    • feature_inventory/test/square_inventory_repository_test.dart — 37 new tests: getInventoryItems (3: all items, empty, unmodifiable), getItemBySku (2), adjustQuantity (8: local-only, Square push, not-found, below-zero, API failure, inStock/lowStock/outOfStock status derivation), setQuantity (5: local-only, Square push, negative, not-found, API failure), syncWithRemote (6: local-only, Square pull, empty-count fallback, negative, not-found, API failure), createItem (2), updateItem (3: updates, StateError, stamps lastUpdated), updateItemImage (2), InventoryItem.squareVariationId (4: default null, constructor, copyWith preserve, copyWith update)
  • tests: passed (123/123 integrations, 475/475 feature_wordpress ← +51 new, 167/167 feature_inventory ← +35 new)
  • analyze: clean
  • brief updated: yes

feat/square-sync-ui

  • status: ready for merge (branch feat/square-sync-ui)
  • date: 2026-07-25
  • inspection: complete
  • implementation: complete (Stage 10F — Square sync UI surface)
  • files changed:
    • feature_wordpress/lib/src/presentation/widgets/square_sync_status_panel.dart — new SquareSyncStatusPanel StatefulWidget; listens to SquareSyncController; shows status chip (Never synced / OK / Partial / Error), last-synced timestamp, Syncing… progress indicator during sync, Sync Now FilledButton (disabled while syncing), and last-sync-result section with Catalog/Inventory row counts when lastResult is non-null
    • feature_wordpress/lib/feature_wordpress.dart — added square_sync_status_panel.dart to barrel exports (Presentation section)
    • kell_creations_apps/apps/kell_web/lib/pages/integrations_page.dart — new IntegrationsPage; shows SquareSyncStatusPanel when squareSyncController is non-null; shows placeholder card with hub icon and "No integrations configured" message otherwise; "Square" section label when controller is present
    • kell_creations_apps/apps/kell_mobile/lib/pages/mobile_integrations_page.dart — new MobileIntegrationsPage; mirrors IntegrationsPage layout for mobile; SafeArea wrapper
    • kell_creations_apps/apps/kell_web/lib/routing/app_routes.dart — added AppRoute.integrations case routing to IntegrationsPage(squareSyncController: services.squareSyncController)
    • kell_creations_apps/apps/kell_mobile/lib/shell/mobile_shell.dart — More tab (case 4) switched from IntegrationsPlaceholderPage to MobileIntegrationsPage(squareSyncController: services.squareSyncController)
    • feature_wordpress/test/square_sync_status_panel_test.dart — 8 new widget tests: renders title, shows Never synced chip, shows Last synced: Never, Sync Now button enabled, shows OK chip after sync, shows last sync result section, rebuilds on notify, unregisters listener on dispose; uses tester.pump(Duration) to advance fake time through Future.delayed timers
    • kell_creations_apps/apps/kell_web/test/pages/integrations_page_test.dart — 4 new widget tests: placeholder when controller null, shows SquareSyncStatusPanel when controller provided, shows Square section label, placeholder shows hub icon
    • kell_creations_apps/apps/kell_mobile/test/pages/mobile_integrations_page_test.dart — 4 new widget tests: mirroring kell_web integrations page tests for mobile
    • kell_creations_apps/apps/kell_web/test/composition/app_services_test.dart — expanded to 28 tests (added squareSyncController non-null assertion for square() factory, multi() factory tests, full KcBootstrap credential validation tests)
    • kell_creations_apps/apps/kell_mobile/test/composition/mobile_app_services_test.dart — expanded to 28 tests (mirrored kell_web composition tests)
  • tests: passed (545/545 feature_wordpress ← +8 new; 52/52 kell_web ← +5 new; 54/54 kell_mobile ← +5 new — 651 total across tested packages)
  • analyze: passed (dart analyze --fatal-infos — no issues found across all packages)
  • brief updated: yes

feat/square-catalog-sync-service-controller

  • status: ready for merge (branch feat/square-catalog-sync-service-controller)
  • date: 2026-07-25
  • inspection: complete
  • implementation: complete (Stage 10E — all P1.1P1.5 items)
  • files changed:
    • feature_wordpress/lib/src/application/square_sync_controller.dart — new SquareSyncController ChangeNotifier; SyncPhase enum (idle, syncing, done, error); syncAll() delegates to SquareCatalogSyncService, sets phase/lastResult/lastError, guards against concurrent calls; reset() returns to idle; isLoading getter; disposal guard prevents post-dispose notifications
    • feature_wordpress/lib/feature_wordpress.dart — added square_sync_controller.dart to barrel exports (Application section)
    • kell_creations_apps/apps/kell_web/lib/composition/app_services.dart — added square() factory (P1.1): SquareCatalogRepository as productPublishingRepository, SquareInventoryRepository as inventoryRepository, SquareSyncController wired to SquareCatalogSyncService; added multi() factory: SquareInventoryRepository + WordPressProductPublishingRepository; updated KcBootstrap to validate Square credentials (P1.5) and fall back to fake with warning; added squareSyncController field to AppServices
    • kell_creations_apps/apps/kell_mobile/lib/composition/mobile_app_services.dart — mirrored square() and multi() factories; added squareSyncController field; same KcBootstrap Square credential validation
    • feature_wordpress/lib/src/domain/product_draft.dart — added squareCatalogObjectId (nullable String) field to ProductDraft; updated copyWith() to preserve/update it; updated ==/hashCode/toString()
    • feature_wordpress/lib/src/application/square_catalog_sync_service.dart — fixed ID conflation bug (P1.2): syncCatalog() now reads draft.squareCatalogObjectId to look up existing mapping instead of using draft.id; mapping lookup uses getMappingBySquareId() when Square ID is present, falls back to getMappingByLocalId() for unsynced items; prevents duplicate mapping creation for already-synced products
    • feature_wordpress/test/square_sync_controller_test.dart — 18 new tests: SyncPhase enum (1), SquareSyncController construction (2), syncAll success (3), syncAll error (2), concurrent guard (2), reset() (2), isLoading (2), disposal guard (2), lastResult/lastError lifecycle (2)
    • kell_creations_apps/apps/kell_web/test/composition/app_services_test.dart — added square() factory tests (3: creates instance, SquareCatalogRepository, SquareInventoryRepository), multi() factory tests (2), KcBootstrap Square credential validation tests (3: selects square with credentials, selects multi with all credentials, falls back to fake without credentials) — 23 total kell_web composition tests
    • kell_creations_apps/apps/kell_mobile/test/composition/mobile_app_services_test.dart — mirrored kell_web composition tests — 23 total kell_mobile composition tests
  • tests: passed (537/537 feature_wordpress ← +31 new; 47/47 kell_web ← +23 new; 49/49 kell_mobile ← +23 new; 34/34 core; 167/167 feature_inventory — 834 total across tested packages)
  • analyze: passed (dart analyze --fatal-infos — no issues found across all 5 packages)
  • brief updated: yes