Commit Graph

124 Commits

Author SHA1 Message Date
Mike Kell c67f92f844 Merge feat/bulk-operator-workflows into main (Stage 7B complete)
Publish Docs / publish-docs (push) Successful in 41s Details
2026-07-11 08:08:14 -04:00
Mike Kell 6898d9b877 chore: mark feat/bulk-operator-workflows as merged to main in tracker 2026-07-11 08:04:15 -04:00
Mike Kell a3c1214aff Merge chore/dart-analyze-cleanup into main (analyze clean)
Publish Docs / publish-docs (push) Successful in 33s Details
2026-07-10 20:18:56 -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 cef112872a Merge feat/inventory-mobile-surface into main (Stage 6C complete)
Publish Docs / publish-docs (push) Successful in 1m10s Details
2026-07-10 20:13:35 -04:00
Mike Kell 585dc14829 feat(mobile): Stage 6C — mobile inventory surface
- Add 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 (name, SKU, status chip,
  quantity-on-hand), pull-to-refresh, and _detailPageActive guard to suppress
  behind-route SnackBars
- Add MobileInventoryDetailPage wrapping shared InventoryDetailPanel; local
  controller listener for SnackBar feedback; showAdjustQuantityDialog on
  Adjust Quantity tap; haptic feedback (mediumImpact on result, lightImpact
  on successful adjust); SafeArea wrapper
- Update MobileShell Inventory tab (case 1) from shared InventoryPage to
  MobileInventoryPage; remove unused feature_inventory direct import
- Add 6 Stage 6C widget tests: Inventory tab search bar, status filter chips,
  item count, card navigation to detail, adjust quantity dialog, back
  navigation returning to list (26/26 kell_mobile total)

All tests passing: 26/26 kell_mobile, 75/75 feature_inventory
dart analyze --fatal-infos: no issues found
Stage 6 complete — Products, Orders, and Inventory all have mobile surfaces
2026-07-10 20:13:27 -04:00
Mike Kell 427bb38381 Merge feat/orders-mobile-surface into main (Stage 6B complete)
Publish Docs / publish-docs (push) Successful in 1m3s Details
2026-07-10 20:03:30 -04:00
Mike Kell 6697bb02dd feat(mobile): Stage 6B — mobile orders surface
- Add 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, and
  \_detailPageActive guard to suppress behind-route SnackBars
- Add MobileOrderDetailPage wrapping shared OrderDetailPanel as a
  StatefulWidget with local controller listener for SnackBar feedback,
  confirmation dialog before status changes, haptic feedback
  (mediumImpact for status, lightImpact for note additions), and SafeArea
- Wire Orders tab (case 3) in MobileShell to MobileOrdersPage; remove
  unused feature_orders direct import from shell
- Add 6 new Stage 6B widget 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
- Update build_execution_tracker.md and master_development_brief.md

Tests: 20/20 kell_mobile, 115/115 feature_orders — all passing
Analyze: dart analyze --fatal-infos — no issues found
2026-07-10 20:03:22 -04:00
Mike Kell 6f839d24cd Merge feat/orders-page-ui into main (Stage 5D complete)
Publish Docs / publish-docs (push) Successful in 41s Details
2026-07-10 19:52:28 -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 9a66a8a2b0 Merge feat/orders-domain into main (Stage 5C complete)
Publish Docs / publish-docs (push) Successful in 50s Details
2026-07-10 19:04:49 -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 73fdcf99e7 chore(inventory): stage uncommitted presentation layer files from Stage 5B
Publish Docs / publish-docs (push) Successful in 42s Details
2026-07-10 18:52:29 -04:00
Mike Kell 44689b5cdb Merge feat/inventory-page-ui into main — Stage 5B complete 2026-07-10 18:51:19 -04:00
Mike Kell f2b29d47a1 feat(inventory): Stage 5B — inventory page UI with search, filter chips, detail panel, quantity adjust dialog, and snack bar feedback 2026-07-10 18:51:09 -04:00
Mike Kell b2df206123 Merge feat/inventory-domain-expansion into main (Stage 5A)
Publish Docs / publish-docs (push) Successful in 1m37s Details
2026-07-10 18:33:14 -04:00
Mike Kell d36c2d1e73 feat(inventory): Stage 5A — inventory domain expansion with write actions 2026-07-10 18:33:02 -04:00
Mike Kell c4f76a90e5 feat: add bulk publish and bulk submit-for-review actions (Stage 7B)
Validate Docs / validate-docs (push) Successful in 59s Details
Flutter Analyze / Dart Analyze (push) Has been cancelled Details
Flutter Test / Flutter Tests (push) Has been cancelled Details
- Enable pendingReview in WordPressProductMapper.toWooCommerceStatus()
  (maps to WooCommerce 'pending'; only unpublished throws ArgumentError)
- Add Publish and Submit for Review buttons to _MultiSelectBar with
  confirmation dialogs and proper plural/singular messaging
- Refactor multi-select bar layout from Row to Wrap for responsive overflow
- Add 3 controller tests: bulk publish, bulk pending review, mixed statuses
- Add 5 page widget tests: button visibility, confirmation dialogs, cancel
  preserves selection, plural count
- Update repository test: remove pendingReview from unsupported-throws
- Update mapper test: pendingReview now returns 'pending'
- 319/319 feature_wordpress tests passing, dart analyze clean
- Update master_development_brief.md and build_execution_tracker.md
2026-05-30 11:17:13 -04:00
Mike Kell b61c886c23 chore: remove 8 unnecessary_import directives and 1 unused variable
Validate Docs / validate-docs (push) Successful in 49s Details
Publish Docs / publish-docs (push) Successful in 1m28s Details
Flutter Analyze / Dart Analyze (push) Has been cancelled Details
Flutter Test / Flutter Tests (push) Has been cancelled Details
- feature_wordpress/test: removed 8 unnecessary_import directives across
  5 test files (barrel exports already cover these symbols)
- kell_mobile/test: removed unused productCards local variable
- dart analyze --fatal-infos now passes clean across all packages
- All 410 tests still pass (311 feature_wordpress, 14 kell_mobile,
  24 kell_web, 41 design_system, 20 core)
- Updated build_execution_tracker.md (Stage 7A → merged)
- Updated master_development_brief.md (next branch, validation state)
2026-05-30 10:53:00 -04:00
Mike Kell 2c3ed3b926 Merge feat/bulk-status-actions: Stage 7A bulk move-to-draft action
Publish Docs / publish-docs (push) Successful in 1m38s Details
2026-05-30 10:36:13 -04:00
Mike Kell ffc643739c feat: add bulk move-to-draft action (Stage 7A)
Add bulk status-change capability to the product publishing workspace,
starting with 'Move to Draft' as the first controlled bulk action.

Controller:
- Add BulkActionResult value class (successCount, failureCount,
  targetStatus, failedProductNames, totalCount, allSucceeded)
- Add bulkUpdateStatus() method: processes selected products
  sequentially with per-row updating state, single reload after
  completion, auto-clears multi-selection
- Add lastBulkActionResult / consumeBulkActionResult() pattern

Presentation:
- Add showBulkActionSnackBar() with three variants: all-success
  (green), total-failure (red), partial-failure (amber with up to
  3 failed product names)
- Update _MultiSelectBar with 'Move to Draft' OutlinedButton.icon
  and onBulkMoveToDraft callback
- Add _confirmBulkMoveToDraft() confirmation dialog
- Wire bulk result listener into _onControllerChanged

Tests:
- 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
- Total: 311/311 feature_wordpress, 24/24 kell_web

Tracking:
- Update master_development_brief.md: Stage 7A marked complete,
  entry criteria marked as all met, test count updated to 311
- Update build_execution_tracker.md: new slice entry added
2026-05-30 10:36:00 -04:00
Mike Kell 8aec65b46b Merge feat/android-mobile-ux-hardening into main (Stage 6B complete)
Publish Docs / publish-docs (push) Successful in 1m38s Details
Stage 6B: Android mobile workflow hardening

- Restore Material Design 48x48dp minimum touch targets on 12 IconButtons
  in ProductPreviewPanel by removing constraints/padding overrides
- Replace fixed-width SizedBox(width:80) on price edit TextField with
  Expanded for flexible layout on narrow mobile screens
- Add tooltip 'Edit price' for consistency with other edit buttons
- Wrap ProductPreviewPanel in SafeArea in MobileProductDetailPage to
  prevent content clipping under notches/gesture bars
- Add 6 new touch target rendered-size tests verifying >= 48x48dp
- Add .gitignore for feature_orders, untrack .dart_tool and pubspec.lock

Tests: 300/300 feature_wordpress, 14/14 kell_mobile, 24/24 kell_web
2026-05-30 10:10:09 -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 871ae8c48b feat(Stage 6B): Android mobile workflow hardening
- Restore Material Design 48x48dp minimum touch targets on 12 IconButtons
  in ProductPreviewPanel by removing constraints/padding overrides
- Replace fixed-width SizedBox(width:80) on price edit TextField with
  Expanded for flexible layout on narrow mobile screens
- Add tooltip 'Edit price' for consistency with other edit buttons
- Wrap ProductPreviewPanel in SafeArea in MobileProductDetailPage to
  prevent content clipping under notches/gesture bars
- Add 6 new touch target rendered-size tests verifying >= 48x48dp
- Update master_development_brief.md and build_execution_tracker.md

Tests: 300/300 feature_wordpress, 14/14 kell_mobile, 24/24 kell_web,
       41/41 design_system — 379 total, all passing.
Stage 6 (Android operational maturity) complete.
2026-05-30 09:45:10 -04:00
Mike Kell 4b5c96c5ec docs: sync tracker and brief with Stage 6A merge to main — add kell_mobile validation state, update baseline commit, fix tracker date, update improvement #6 through Stage 6A
Publish Docs / publish-docs (push) Successful in 49s Details
2026-05-30 01:00:04 -04:00
Mike Kell e23d41b098 feat(mobile): Stage 6A — Android feedback and action polish
Validate Docs / validate-docs (push) Successful in 55s Details
Flutter Analyze / Dart Analyze (push) Has been cancelled Details
Flutter Test / Flutter Tests (push) Has been cancelled Details
- Convert MobileProductDetailPage to StatefulWidget with local controller
  listener for SnackBar feedback in detail page context
- Add confirmation dialogs for publish/move-to-draft status changes
- Add haptic feedback (mediumImpact for status, lightImpact for field edits)
  on successful actions
- Guard MobilePublishingPage SnackBars with _detailPageActive flag to prevent
  invisible behind-route feedback when detail page is pushed
- Add 4 new Stage 6A widget tests (14 total kell_mobile tests passing)
- Update build_execution_tracker.md and master_development_brief.md
2026-05-29 19:13:46 -04:00
Mike Kell 591de0c5c4 feat(mobile): add Android publishing surface (Stage 5B)
Validate Docs / validate-docs (push) Successful in 2m12s Details
Publish Docs / publish-docs (push) Successful in 59s Details
Flutter Analyze / Dart Analyze (push) Has been cancelled Details
Flutter Test / Flutter Tests (push) Has been cancelled Details
- Add MobilePublishingPage with search, filter chips, sort, product count,
  compact card list, pull-to-refresh, and push navigation to detail
- Add MobileProductDetailPage wrapping shared ProductPreviewPanel with
  all narrow edit callbacks (status, price, name, description, category)
- Switch Products tab in MobileShell from ProductPublishingPage to
  MobilePublishingPage
- Expand feature_wordpress barrel exports for mobile consumption
- Add 4 new widget tests (10 total kell_mobile tests passing)
- Zero business logic forked — all shared layers reused
- dart analyze clean, all tests passing

Stage 5 (Android application foundation) complete.
2026-05-29 02:32:28 -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 f056d5f0b5 docs: sync master development brief with completed stages and resolved recommendations
Publish Docs / publish-docs (push) Successful in 1m2s Details
2026-05-22 11:03:00 -04:00
Mike Kell effaadc84b docs: full project analysis with recommendations and fixes
Publish Docs / publish-docs (push) Successful in 1m9s Details
2026-05-22 10:51:53 -04:00
Mike Kell 2af9a8b6cb docs: update tracker for merged feat/test-coverage-visibility (Stage 4D)
Publish Docs / publish-docs (push) Successful in 1m5s Details
- Update current status to Stage 4D complete (Stage 4 complete)

- Add feat/test-coverage-visibility slice entry with coverage baseline

- Set next branch to feat/android-app-shell (Stage 5A)
2026-05-22 10:22:59 -04:00
Mike Kell 4f72bdb486 Merge feat/test-coverage-visibility into main (Stage 4D complete) 2026-05-22 10:22:16 -04:00
Mike Kell f30ad24d8a feat(ci): add test coverage visibility to CI pipeline (Stage 4D)
Enhance flutter-test.yml to run tests with --coverage and parse lcov.info

files, producing aggregate summary table with per-package line coverage.

Changes:

- flutter-test.yml: add --coverage flag, lcov.info parsing, coverage %

- collect_coverage.sh: new local coverage helper with summary table

- tools/README.md: document collect_coverage.sh script

- .gitignore: add coverage/ directories

- master_development_brief.md: mark Stage 4D complete, document baseline

  coverage table, update next branch to Stage 5A, resolve improvement #5

Baseline coverage (2026-05-22):

- core: 85.7%% (42/49 lines, 20 tests)

- design_system: 100.0%% (88/88 lines, 41 tests)

- feature_wordpress: 84.7%% (857/1012 lines, 294 tests)

- kell_web: 54.1%% (191/353 lines, 24 tests)

- Overall: 78.4%% (1178/1502 lines, 379 tests)

No minimum thresholds enforced — visibility first.
2026-05-22 10:22:05 -04:00
Mike Kell 71abe9df7f docs: update briefs for merged feat/flutter-cicd (Stage 4C)
Publish Docs / publish-docs (push) Successful in 1m16s Details
- master_development_brief.md: mark Stage 4C complete, update baseline commit,

  next recommended branch (Stage 4D), tools/ description, resolve improvement #9

- build_execution_tracker.md: update current status to Stage 4C, add missing

  feat/shared-composition-pattern and feat/flutter-cicd slice entries
2026-05-22 10:11:51 -04:00
Mike Kell 6a6323ef57 Merge feat/flutter-cicd into main (Stage 4C complete) 2026-05-22 10:09:49 -04:00
Mike Kell b00072474b feat(ci): add Flutter CI/CD pipeline for Forgejo Actions (Stage 4C)
Add Forgejo Actions workflows for automated Flutter validation on PRs:

- flutter-analyze.yml: runs dart analyze --fatal-infos on all 8 packages/apps

- flutter-test.yml: runs flutter test per package with pass/fail reporting

- Aggregate test result summary table in workflow output

- Workflows trigger on PRs to main and all non-main branch pushes

- Uses ghcr.io/cirruslabs/flutter:stable container image

Populate tools/ directory with CI helper scripts:

- run_all_tests.sh: local test runner with optional --analyze flag

- README.md: documents scripts and CI workflow inventory

Validated locally:

- dart analyze: all 8 packages/apps clean (no issues)

- core: 20/20 tests passed

- design_system: 41/41 tests passed

- feature_wordpress: 294/294 tests passed

- kell_web: 24/24 tests passed

- Total: 379/379 tests passed
2026-05-22 10:09:42 -04:00
Mike Kell 0a0abc2c3d Merge feat/shared-composition-pattern into main (Stage 4B complete)
Publish Docs / publish-docs (push) Successful in 58s Details
2026-05-22 09:57:59 -04:00
Mike Kell 9eafc68fec feat(core): extract shared composition pattern into core package (Stage 4B)
Validate Docs / validate-docs (push) Successful in 1m13s Details
Extract AppConfig/AppEnvironment, AppServices, Bootstrap, and AppScope into core package as KcAppConfig, KcAppServices, KcBootstrap, and KcAppScope generic abstractions.

New core composition types:

- KcAppConfig: runtime config from --dart-define (KC_ENV, WC credentials)

- KcAppEnvironment: enum for fake/wordpress environments

- KcAppServices: abstract base for app service containers

- KcServiceFactory<T>: generic factory for fake/wordpress service creation

- KcBootstrap: shared bootstrap with env switch and WP credential fallback

- KcAppScope<T>: InheritedWidget exposing typed services + config to tree

kell_web backward compatibility:

- AppConfig/AppEnvironment are now typedefs to Kc-prefixed types

- AppServices extends KcAppServices with concrete repositories

- AppScope extends KcAppScope<AppServices> with direct InheritedWidget lookup

- Bootstrap delegates to KcBootstrap.run with app-specific factory

Tests: 20 new core tests, all 379 tests passing (core 20, design_system 41, feature_wordpress 294, kell_web 24). dart analyze clean.
2026-05-22 09:57:51 -04:00
Mike Kell 6f10efc88d Merge feat/design-system-shared-widgets into main — Stage 4A complete
Publish Docs / publish-docs (push) Successful in 57s Details
2026-05-22 09:42:39 -04:00
Mike Kell 8facefdff1 feat(design-system): Stage 4A — design system expansion and shared widget migration
- Migrate EmptyStatePanel, SectionHeader, SummaryCard from kell_web into design_system as KcEmptyState, KcSectionHeader, KcSummaryCard

- Add KcTypography shared typography scale with full Material 3 text style hierarchy

- Add KcBreakpoints responsive layout breakpoint utilities (compact/medium/expanded/large)

- Add KcLoadingState and KcErrorState shared state widgets

- Update kc_theme.dart to use KcTypography.applyKcTypography()

- Update kell_web dashboard_page.dart to use design_system widgets directly

- Replace kell_web shell widget files with backward-compatible typedef re-exports

- Expand design_system tests from 3 to 41 (all passing)

- All existing tests passing: design_system 41/41, feature_wordpress 294/294, kell_web 24/24

- dart analyze clean across design_system and kell_web
2026-05-22 09:42:31 -04:00
Mike Kell bee610ca2c docs: add Stage 4 — Platform foundations and cross-platform readiness
Publish Docs / publish-docs (push) Successful in 1m9s Details
2026-05-22 09:26:39 -04:00
Mike Kell 02090cde6a docs: add suggested improvements to master development brief
Publish Docs / publish-docs (push) Successful in 1m3s Details
2026-05-22 09:17:08 -04:00
Mike Kell eaf3e70d30 docs: update master development brief — Stage 3B complete, Stage 3 done
Publish Docs / publish-docs (push) Successful in 1m10s Details
Mark Stage 3B (list efficiency improvements) as complete with 294 tests passing. Update baseline commit reference, test count, and next recommended branch to Stage 4A (Android app shell).
2026-05-22 08:53:10 -04:00
Mike Kell 738336d953 Merge feat/list-efficiency-improvements into main — Stage 3B complete 2026-05-22 08:51:57 -04:00
Mike Kell a0aea373c2 feat(wordpress): Stage 3B — list efficiency improvements
Add compact/standard view toggle (ListDensity enum) to controller and page, allowing users to switch between a dense single-row layout and the full metadata card view.

Add staleness detection: isStale() flags products not modified in 30+ days with a schedule icon; staleCount() returns the count of stale items in the current filtered view.

Add keyboard navigation: selectNextDraft/selectPreviousDraft with arrow-key wrapping support; page wires up Focus + onKeyEvent for arrow-down/arrow-up.

Update ProductDraftCard with compact layout variant (two-row dense metadata), stale indicator icon, and description snippet in standard mode. Wrap long text in Flexible widgets to prevent overflow.

Increase standard card height from 160px to 180px to accommodate the new description snippet row.

Export ListDensity and ProductSortField from barrel file.

Add 42 new focused tests covering listDensity toggle, staleness boundary conditions, staleCount with filters, keyboard navigation wrapping, and compact card rendering. All 294 tests pass, dart analyze clean.
2026-05-22 08:51:32 -04:00
Mike Kell f3fbbca06d Merge feat/multi-select-groundwork into main (Stage 3A complete)
Publish Docs / publish-docs (push) Successful in 1m26s Details
2026-05-22 08:33:32 -04:00
Mike Kell dfe7ae1811 feat: add multi-select groundwork to product publishing (Stage 3A)
Add read-only multi-selection state to the product publishing workspace, preparing for future bulk actions without introducing any bulk writes.

Controller (ProductPublishingController):

- Add _multiSelectedIds Set<String> for tracking multi-selected product IDs

- Add toggleMultiSelect(id) to add/remove individual IDs

- Add clearMultiSelection() to deselect all

- Add selectAllVisible() to select all currently visible (filtered/searched) drafts

- Add isMultiSelected(id), multiSelectedIds, multiSelectedCount, isMultiSelectActive getters

- Multi-selection is independent of single-item preview selection

- Multi-selection persists across load cycles and write operations

UI (ProductDraftCard):

- Add optional isMultiSelected/onMultiSelectToggle props

- Show leading Checkbox when multi-select mode is active

- Tapping checkbox toggles multi-select; tapping card body still fires single-item preview

UI (ProductPublishingPage):

- Add _MultiSelectBar widget above product list when multi-select is active

- Shows selected count, Select All button, and Clear button

- Replace deprecated withOpacity() calls with withValues(alpha:)

Tests:

- 15 new multi-select controller tests covering toggle, clear, select-all,

  filter/search interaction, independence from preview selection, persistence

  across loads and writes, and listener notifications

- Total: 262 feature_wordpress tests passing

Validation:

- dart analyze: clean (0 issues)

- flutter test: 262/262 passed

Changed files:

- lib/src/application/product_publishing_controller.dart

- lib/src/presentation/widgets/product_draft_card.dart

- lib/src/presentation/product_publishing_page.dart

- test/product_publishing_controller_test.dart

- docs/development/master_development_brief.md
2026-05-22 08:33:24 -04:00
Mike Kell 49a3702cec Updated build status
Publish Docs / publish-docs (push) Successful in 1m34s Details
2026-04-11 16:49:51 -04:00
mtkell b81016df28 Merge pull request 'feat/publishing-ux-hardening' (#6) from feat/publishing-ux-hardening into main
Publish Docs / publish-docs (push) Successful in 59s Details
Reviewed-on: #6
2026-04-11 20:42:21 +00:00
Mike Kell 02cc75c655 feat: publishing workflow UX hardening (Stage 2B)
Validate Docs / validate-docs (push) Successful in 1m9s Details
2026-04-11 16:40:10 -04:00