Mike Kell
7ccc119a62
feat(stage-10c): SquareCatalogRepository + SquareInventoryRepository
2026-07-25 15:04:26 -04:00
Mike Kell
a6f888c672
feat(stage-10b): Square catalog and inventory sync mappers + ProductIdMapping
2026-07-25 07:59:13 -04:00
Mike Kell
a127ddba3a
feat(stage-9d): product creation UI, category management page, mobile create-product page
2026-07-11 10:50:32 -04:00
Mike Kell
0a45ecb1c0
feat(wc-catalog-expansion): Stage 9C — WooCommerce catalog expansion
...
- Add ProductCategory domain model (id, name, slug, parentId, count) with copyWith, equality, toString
- Add ProductImage domain model (id, url, alt, position) with copyWith, equality
- Extend ProductPublishingRepository contract: createProduct, deleteProduct, updateProductImages, getProductImages, getCategories, createCategory, updateCategory, deleteCategory
- Implement all 8 new methods in FakeProductPublishingRepository with seed categories
- Implement all 8 new methods in WordPressProductPublishingRepository
- Add WooCommerceApiClient methods: createProduct, deleteProduct, getCategories (paginated), createCategory, updateCategory, deleteCategory, getProductImages, setProductImages
- Add use cases: CreateProduct, DeleteProduct, GetCategories, CreateCategory, UpdateProductImages
- Update feature_wordpress.dart barrel exports
- Update test stubs in dashboard_controller_test.dart and product_publishing_page_test.dart
- Add 69 new tests in wc_catalog_expansion_test.dart (388 total feature_wordpress, 24 kell_web — all passing)
- Update master_development_brief.md and build_execution_tracker.md
2026-07-11 10:23:31 -04:00
Mike Kell
5df3d8beac
feat(inventory): Stage 9B — WooCommerce stock/inventory sync
2026-07-11 10:00:55 -04:00
Mike Kell
e92788038a
feat(orders): Stage 9A - WooCommerce Orders API integration
...
- Extend OrderStatus with onHold, refunded, failed
- Extend OrderItem with productId, variationId, customizations
- Extend Order with paymentMethod, source, customFields
- Add OrderSource enum (online, market, manual)
- Add getOrder(id) to OrdersRepository contract and FakeOrdersRepository
- Add WooCommerceOrderMapper (WooCommerce JSON <-> Order domain)
- Add WooCommerceOrdersRepository implementing full OrdersRepository
- Add orders API methods to WooCommerceApiClient (getOrders, getOrder,
updateOrderStatus, createOrder, addOrderNote)
- Export WooCommerceApiClient/WooCommerceApiException from feature_wordpress
- Add feature_wordpress + http dev deps to feature_orders pubspec
- 83 new tests: mapper (25), repository+API client (23), FakeRepo.getOrder (3),
plus existing suite grows to 198/198 feature_orders
- All packages analyze clean; 847/847 total tests passing
- Update master_development_brief.md and build_execution_tracker.md
2026-07-11 09:45:36 -04:00
Mike Kell
ec66626074
feat(integrations): Stage 8A - integration abstractions contracts
...
- Add ApiException base class (statusCode, message, body)
- Add ApiClient abstract class (initialize, dispose, isReady, execute<T>)
- Add RetryPolicy abstraction (NoRetryPolicy, ExponentialBackoffRetryPolicy)
- Add RateLimiter abstraction (NoRateLimiter, TokenBucketRateLimiter)
- Add IntegrationHealthCheck contract (HealthCheckResult value object)
- Add WebhookHandler contract (WebhookEvent, WebhookResult, WebhookProcessingStatus)
- Add ChannelAdapter contract (ChannelProduct, ChannelOrder, ChannelOrderItem, ChannelInventoryCount)
- Replace Calculator placeholder with barrel exports for all 7 contract files
- Refactor WooCommerceApiClient to implement ApiClient contract
- Refactor WooCommerceApiException to extend ApiException
- Add integrations dependency to feature_wordpress pubspec
- Add packages/integrations to TESTABLE and ANALYZABLE in run_all_tests.sh
- Add 38 tests for all contracts and value objects
- dart analyze clean (no issues in integrations and feature_wordpress)
- Tests: 38/38 integrations, 319/319 feature_wordpress
2026-07-11 08:21:03 -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
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
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
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
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
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
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
Mike Kell
cf0889d4a9
feat: post-write consistency hardening (Stage 2A)
...
Validate Docs / validate-docs (push) Successful in 1m4s
Details
Add _refreshSelection() to ProductPublishingController to preserve and refresh selectedDraft by id after all write-triggered reloads. Selection stays on the same product with latest data, or auto-selects first visible item if the original leaves the active filter.
- 11 new post-write consistency tests (234 total)
- dart analyze clean
2026-04-11 16:11:06 -04:00
Mike Kell
b69edd3e4a
feat(wordpress): add category-only product edit (Stage 1B)
Validate Docs / validate-docs (push) Successful in 1m3s
Details
2026-04-11 15:54:51 -04:00
Mike Kell
8d1a01581a
tage 1A — Description-only product edit implemented
Validate Docs / validate-docs (push) Successful in 56s
Details
2026-04-11 11:07:36 -04:00
Mike Kell
ae9c1dd90c
feat(feature_wordpress): add name-only product update
Publish Docs / publish-docs (push) Successful in 57s
Details
2026-04-11 10:36:00 -04:00
Mike Kell
f8f373b018
fix(feature_wordpress): allow pending review products to move to draft
Publish Docs / publish-docs (push) Successful in 1m12s
Details
2026-04-11 08:16:49 -04:00
Mike Kell
ed2333d188
Implement WooCommerce publishDraft flow
Validate Docs / validate-docs (push) Successful in 1m24s
Details
2026-04-05 20:15:00 -04:00
Mike Kell
039612cb6e
Update main with product publishing
Publish Docs / publish-docs (push) Successful in 1m57s
Details
2026-04-05 20:03:10 -04:00
Mike Kell
7ab526f083
feat(wordpress): add real WooCommerce read-only product repository
Validate Docs / validate-docs (push) Successful in 1m9s
Details
2026-04-04 15:14:38 -04:00
Mike Kell
23ea1bebe1
feat(workflows): add shared filtering search and selection persistence
Validate Docs / validate-docs (push) Successful in 1m0s
Details
2026-04-04 14:59:26 -04:00
Mike Kell
0f61badba6
feat(navigation): add cross-feature workflow handoffs
Validate Docs / validate-docs (push) Successful in 1m5s
Details
2026-04-04 14:42:03 -04:00
Mike Kell
e06c2d8f94
refactor(kell-web): add app-level dependency composition
Validate Docs / validate-docs (push) Successful in 1m9s
Details
2026-04-04 13:38:51 -04:00
Mike Kell
226b21d22d
feat(products): add product publishing workspace vertical slice
Validate Docs / validate-docs (push) Successful in 50s
Details
2026-04-04 13:13:26 -04:00
Mike Kell
59548cedbd
Add Flutter app and package monorepo scaffold
Publish Docs / publish-docs (push) Successful in 59s
Details
2026-04-04 09:19:46 -04:00