From 079bf8c0f0c8d8ae20ba111ebaa4b77c9d66bd45 Mon Sep 17 00:00:00 2001 From: Mike Kell Date: Sat, 25 Jul 2026 11:03:51 -0400 Subject: [PATCH] Updated Agentic Instructions --- .vscode/workspace_rules.md | 102 +++++++++++++++++++++++++++++++++++++ docs/development/PRD.md | 82 +++++++++++++++++++++++++++++ filetree.txt | Bin 0 -> 285910 bytes 3 files changed, 184 insertions(+) create mode 100644 .vscode/workspace_rules.md create mode 100644 docs/development/PRD.md create mode 100644 filetree.txt diff --git a/.vscode/workspace_rules.md b/.vscode/workspace_rules.md new file mode 100644 index 0000000..db11b77 --- /dev/null +++ b/.vscode/workspace_rules.md @@ -0,0 +1,102 @@ +# Workspace Development Rules: Kell Creations Platform + +## 1. Core Operating Principles + +1. **Vertical Slice Discipline:** Implement features in isolated, reviewable vertical slices on feature branches. Never push unverified, broad changes directly to `main`[cite: 3]. +2. **Inspection First:** Always inspect the codebase, verify existing tests, and review existing contracts before writing or modifying code[cite: 3]. +3. **Environment Isolation:** Maintain runtime environment modes (`fake`, `wp`, `square`, `multi`) specified exclusively via `--dart-define` keys[cite: 2, 3]. Never build hardcoded settings UIs or commit API keys/tokens to source control[cite: 3]. +4. **Strict Package Boundaries:** + - Feature packages (`feature_*`) must remain decoupled[cite: 1, 3]. + - Cross-feature communication must use shared abstractions in `core`, `integrations`, or `data`[cite: 1, 3]. + - Platform-specific UI code must reside in `apps/kell_web` or `apps/kell_mobile`[cite: 1, 3]. Re-use shared presenters and controllers[cite: 2, 3]. + +--- + +## 2. Code & Design Standards + +### Flutter & Dart Execution + +- Strict typing required; avoid `dynamic` unless explicitly serializing raw JSON[cite: 2, 3]. +- Use Material Design 3 guidelines[cite: 2, 3]. On mobile (`kell_mobile`), ensure all interactive targets adhere to a minimum 48×48dp target bounding box[cite: 2, 3]. +- Wrap mobile screens in `SafeArea` to avoid system overlay clipping[cite: 2, 3]. + +### Architecture Layering (per Package) + +lib/ +├── src/ +│ ├── domain/ # Entities, Value Objects, Repository Contracts (Pure Dart) +│ ├── application/ # Use Cases, Controllers (ChangeNotifiers) +│ ├── data/ # ApiClients, Mappers, Fake & Real Repositories +│ └── presentation/ # Widgets, Pages, Dialogs, SnackBars +└── feature_name.dart # Barrel File Exports + +--- + +## 3. Standard Execution Workflow for AI Agents (Cline / VS Code) + +Whenever initiating a new task or slice, execute the following workflow steps sequentially[cite: 3]: + +1. **Step 1: Context Verification** + - Read `docs/development/master_development_brief.md` and `docs/development/build_execution_tracker.md` to identify current status[cite: 2, 3]. + +2. **Step 2: Pre-flight Validation** + - Run local test suite using the CI script: + + ```bash + bash tools/run_all_tests.sh --analyze + + ``` + + - Confirm all tests pass and static analysis is clean prior to editing[cite: 2, 3]. + +3. **Step 3: Implementation** + - Create target feature branch (e.g., `feat/square-catalog-sync`)[cite: 2]. + - Implement domain models, repository contracts, API mappers, application logic, and UI components[cite: 2, 3]. + +4. **Step 4: Testing & Hardening** + - Write unit tests for domain models and application controllers[cite: 2]. + + - Write widget tests for presentation components[cite: 2]. + - Verify static analysis passes without warnings: + + ```bash + dart analyze --fatal-infos + ``` + +5. **Step 5: Documentation & Tracking** + - Update `docs/development/build_execution_tracker.md` with: + - Files modified/added[cite: 2]. + - Test counts and pass state[cite: 2]. + - Verification/analysis result[cite: 2]. + - Update `docs/development/master_development_brief.md` next branch indicator[cite: 2, 3]. + +--- + +## 4. Prompt Template for AI Sessions + +Continue the Kell Creations Flutter operations platform workstream from current main. + +Read docs/development/master_development_brief.md first and follow it as the authoritative planning document. + +Constraints: + +- Preserve strict package boundaries. +- Fake repositories remain in feature packages. +- Real integrations are incremental alongside fake ones. +- Runtime selection stays via --dart-define, not settings UI. +- No credentials hardcoded or committed. +- Keep WooCommerce details inside the WP repository layer. +- Keep Square details inside a dedicated Square integration layer. +- Multi-channel sync contracts before implementations. +- Use small, reviewable steps only. + +Working rules: + +1. Inspect first. Do not edit immediately. +2. Summarize current relevant state from main. +3. Propose the smallest implementation plan for the requested slice. +4. Implement only that slice. +5. Add/update focused tests. +6. Run validation (run_all_tests.sh --analyze). +7. Report changed files and validation results. +8. Update master_development_brief.md and build_execution_tracker.md. diff --git a/docs/development/PRD.md b/docs/development/PRD.md new file mode 100644 index 0000000..632ee55 --- /dev/null +++ b/docs/development/PRD.md @@ -0,0 +1,82 @@ +# Product Requirement Document (PRD): Kell Creations Operations Platform + +## 1. Executive Summary & Vision + +The **Kell Creations Operations Platform** is a cross-platform (Web & Android) multi-channel commerce management system. It unifies online storefront operations (WooCommerce), in-person craft market point-of-sale (Square), custom made-to-order requests, and raw supply/finished inventory management into a single operational interface[cite: 3]. + +## 2. Platform Architecture & Stack + +- **Framework:** Flutter (Dart 3.11+) +- **Target Platforms:** Windows Desktop / Web (`kell_web`), Android (`kell_mobile`)[cite: 1, 3] +- **Monorepo Architecture:** Feature-first modular packages (`feature_wordpress`, `feature_inventory`, `feature_orders`, `feature_policy`, `auth`, `data`, `integrations`, `design_system`, `core`)[cite: 1, 3] +- **State & Data Flow:** Unidirectional flow using `ChangeNotifier` controllers and repository interfaces with mock (`FAKE`) and production implementation modes. + +--- + +## 3. Core Functional Requirements + +### 3.1 Multi-Channel Catalog Management + +- **WooCommerce Storefront:** + - View, filter, search, and sort product drafts and published items. + - Single-field and controlled inline edits (Name, Price, Description, Category). + - Controlled status transitions (`unpublished` -> `draft`, `pendingReview` -> `draft`/`published`)[cite: 3]. + - Full Product Creation pipeline (`CreateProductDialog` on Web, `MobileCreateProductPage` on Android)[cite: 2, 3]. + - Product category CRUD and management workspace[cite: 2, 3]. + - Controlled bulk actions (Bulk move-to-draft, bulk publish, bulk submit for review)[cite: 2, 3]. +- **Square Catalog Integration:** + - Map WooCommerce items to Square Catalog API objects (`CatalogObject`)[cite: 2, 3]. + - Support cross-channel ID mapping (`ProductIdMapping`) to prevent duplicate listings[cite: 3]. + +### 3.2 Mobile Point-of-Sale (POS) & Market Sales + +- Android-optimized UI using Material 3 `NavigationBar` and `IndexedStack`[cite: 2, 3]. +- In-person checkout workflow via Square API integration[cite: 2, 3]. +- Support cash recording and card processing via Square Reader SDK[cite: 3]. +- Automatic inventory deduction and digital receipt generation upon payment completion[cite: 3]. + +### 3.3 Custom Orders Workflow + +- **Specification Tracking:** Record custom order specs (material, color, size, dimensions, reference images)[cite: 3]. +- **Financial Deposit Management:** Track deposit payments, deposit dates, remaining balance due, and final settlement[cite: 3]. +- **Fulfillment Pipeline:** Status tracking (`quoted` -> `depositReceived` -> `inProduction` -> `qualityCheck` -> `readyForPickup` -> `completed`)[cite: 3]. + +### 3.4 Inventory & Supply Chain Operations + +- **Dual-Type Tracking:** Separate raw materials/supplies (inputs) from finished goods (catalog items)[cite: 3]. +- **Stock Adjustments:** Delta adjustments (+/-) and explicit quantity setting with reason logging[cite: 2, 3]. +- **Bidirectional Stock Sync:** Real-time and batch stock synchronization across WooCommerce stock levels and Square inventory counts[cite: 2, 3]. +- **Reorder Logic:** Automated low-stock indicators based on item reorder points[cite: 2, 3]. + +### 3.5 Infrastructure & Shared Services + +- **Auth Foundation:** Role-based access (`admin`, `operator`, `viewer`) with encrypted local token/credential storage (`flutter_secure_storage`)[cite: 2, 3]. +- **Offline Operations:** Local SQLite caching (`LocalCache`) and offline sales queue (`SyncQueue`) with auto-reconciliation upon reconnection[cite: 2, 3]. + +--- + +## 4. Non-Functional Requirements & Metrics + +- **Code Coverage Visibility:** Maintain and expand line coverage visibility reported via Forgejo CI (`flutter test --coverage`)[cite: 2, 3]. +- **Touch Optimization:** Minimum 48×48dp touch target enforcement across all interactive controls on mobile surfaces[cite: 2, 3]. +- **Tactile & Visual Feedback:** Haptic feedback (`mediumImpact` for state changes, `lightImpact` for field edits) and explicit SnackBar feedback[cite: 2, 3]. +- **Zero Structural Regressions:** Mandatory static analysis passing (`dart analyze --fatal-infos`) on every commit[cite: 2, 3]. + +--- + +## 5. Milestone & Feature Release Schedule + +| Stage | Feature Focus | Status | +| :------------- | :------------------------------------------------------------------- | :------------------------------- | +| **Stages 1–3** | Controlled Product Editing, UX Hardening & List Efficiency | ✅ Merged[cite: 2, 3] | +| **Stage 4** | Shared Design System, Core Abstractions, CI/CD & Coverage Visibility | ✅ Merged[cite: 2, 3] | +| **Stage 5** | Android Shell Bootstrap & Publishing Surface | ✅ Merged[cite: 2, 3] | +| **Stage 6** | Android Touch Target Hardening & Mobile Surfaces (Orders/Inventory) | ✅ Merged[cite: 2, 3] | +| **Stage 7** | Bulk Status Workflows (Move to Draft, Publish, Submit for Review) | ✅ Merged[cite: 2, 3] | +| **Stage 8** | Core Integration Abstractions, Data Layer Contracts, Auth Foundation | ✅ Merged[cite: 2, 3] | +| **Stage 9** | WooCommerce API Expansion (Orders, Catalog, Catalog UI) | ✅ Merged[cite: 2, 3] | +| **Stage 10A** | Square API Client & Authentication | ✅ Merged[cite: 2, 3] | +| **Stage 10B** | **Square Catalog & Inventory Sync** | 🔄 **Current Stage**[cite: 2, 3] | +| **Stage 10C** | Square Mobile POS & In-Person Payments | ⏳ Planned[cite: 3] | +| **Stage 11** | Custom Orders Workflow & Deposit Tracking | ⏳ Planned[cite: 3] | +| **Stage 12** | Supplies Tracking & Multi-Channel Inventory Sync Engine | ⏳ Planned[cite: 3] | diff --git a/filetree.txt b/filetree.txt new file mode 100644 index 0000000000000000000000000000000000000000..8251a62ffd5e031b6ca5ad6082424b83452d53ab GIT binary patch literal 285910 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 literal 0 HcmV?d00001