chore: reconcile working tree with main and re-baseline master documents
Reconciles repository state after the local toolchain moved to Flutter 3.47.0
/ Dart 3.13.0. No product code changed - no lib/ or test/ file was modified.
Working tree drift:
1. analysis_options.yaml churn (accepted, 11 files). Flutter 3.47 ships
AnalysisOptionsMigration, which unconditionally writes a fixed
analyzer.exclude block into every analysis_options.yaml. It runs from
ensureReadyForPlatformSpecificTooling, so pub get / analyze / run / build
all restore it, and there is no opt-out (flutter#191160, flutter#191131).
Commit 92d83e0 previously reverted this; the revert did not hold - a full
test sweep regenerated the block in 8 more packages. Accepted and committed
rather than fighting the tool. Verified the risky web/** entry drops
nothing: neither kell_web/web/ nor kell_mobile/web/ contains .dart files.
2. kell_mobile web scaffold (reverted). A stray `flutter create
--platforms=web` had added an untracked web/ directory and rewritten
.metadata so the android platform entry was replaced by web. kell_mobile is
the Android target, so .metadata was restored and the scaffold deleted.
3. kell_mobile/pubspec.lock (accepted). Transitive bumps resolved under the
newer SDK: clock, matcher, meta, stack_trace, test_api, vector_math,
vm_service. All SDK-pinned.
Master document reconciliation:
- PROJECT_STATE_AUDIT.md: removed a duplicated "## 5. Summary Scorecard"
section - the scorecard and readiness table were present twice from a bad
append. Re-baselined the remaining §5 against main, added a test-count
column, and corrected §3.4 counts and §3.5 antipattern status. Stages
10C-10F, 11A, and 16A had landed but were still recorded as missing.
- master_development_brief.md: Appendix A maturity matrix refreshed to the
verified counts; new "Toolchain baseline" section documents the Flutter 3.47
behaviour so a future slice does not try to revert it again.
- build_execution_tracker.md: added the reconciliation slice entry and a
toolchain note.
- Fixed a pre-existing MD040 lint error (unlabelled code fence).
Verification:
- dart analyze --fatal-infos: clean across all 11 packages and apps
- tests: 1,898 / 1,898 passing (core 90, design_system 51, auth 42,
integrations 123, data 63, feature_wordpress 545, feature_inventory 167,
feature_orders 657, feature_policy 17, kell_web 62, kell_mobile 81) -
identical to the Stage 11A total, confirming no behaviour change
- markdownlint-cli2: 0 issues
This commit is contained in:
parent
92d83e00e2
commit
ea4b76b407
|
|
@ -3,19 +3,28 @@
|
|||
## Kell Creations Operations Platform — Comprehensive Code Audit
|
||||
|
||||
**Audit Date:** 2026-07-25
|
||||
**Last Reconciled:** 2026-09-25 (`chore/state-reconciliation-flutter-347`)
|
||||
**Auditor:** Senior Software Engineering Review Board (Automated)
|
||||
**Baseline Commit:** `feat/square-catalog-sync-repositories` → `main` (Stage 10C complete)
|
||||
**Current Branch Work:** Stage 10D (`SquareCatalogSyncService`) — complete, pending merge
|
||||
**Total Tests (baseline):** 1,015 / 1,015 passing
|
||||
**Static Analysis:** `dart analyze --fatal-infos` — clean across all 11 packages/apps
|
||||
|
||||
> **Reconciliation notice (2026-09-25).** Sections 1–4 below are preserved as the
|
||||
> historical 2026-07-25 audit record and are **not** rewritten in place. Since that
|
||||
> date Stages 10C (POS), 10D, 10E, 10F, 11A, and 16A have all merged to `main`, so
|
||||
> many "❌ Missing" findings in those sections are now closed. §5 has been
|
||||
> re-baselined against `main` as of 2026-09-25 and is the authoritative scorecard.
|
||||
> A duplicated copy of §5 (a bad append in an earlier edit) was removed on the same
|
||||
> date.
|
||||
|
||||
---
|
||||
|
||||
## 1. Repository Architecture Overview
|
||||
|
||||
### Monorepo Structure
|
||||
|
||||
```
|
||||
```text
|
||||
kell_creations/
|
||||
├── kell_creations_apps/
|
||||
│ ├── apps/
|
||||
|
|
@ -420,19 +429,23 @@ kell_creations/
|
|||
|
||||
### 3.4 Test Coverage Assessment
|
||||
|
||||
> Test counts re-verified 2026-09-25 by a full local run — **1,898 / 1,898 passing**.
|
||||
> Coverage percentages are from the original 2026-07-25 audit and have not been
|
||||
> re-measured; treat them as indicative only.
|
||||
|
||||
| Package | Tests | Coverage | Assessment |
|
||||
| ------------------- | --------------- | -------- | ----------------------------------------------------- |
|
||||
| `core` | 24 | ~85.7% | Good — composition abstractions well covered |
|
||||
| `design_system` | 41 | 100% | Excellent |
|
||||
| `feature_wordpress` | 506 | ~84.7% | Good — broad coverage across all layers |
|
||||
| `core` | 90 | ~85.7% | Good — composition + observability well covered |
|
||||
| `design_system` | 51 | 100% | Excellent |
|
||||
| `feature_wordpress` | 545 | ~84.7% | Good — broad coverage across all layers |
|
||||
| `feature_inventory` | 167 | Unknown | Adequate — domain, data, and widget tests present |
|
||||
| `feature_orders` | 198 | Unknown | Good — domain, data, mapper, and widget tests present |
|
||||
| `feature_policy` | ~5 | Very low | **Gap** — only smoke test; no controller/widget tests |
|
||||
| `feature_orders` | 657 | Unknown | Excellent — custom order domain exhaustively tested |
|
||||
| `feature_policy` | 17 | Very low | **Gap** — thin; no controller/widget tests |
|
||||
| `auth` | 42 | Unknown | Good for contracts and fakes |
|
||||
| `data` | 63 | Unknown | Good for contracts and in-memory impls |
|
||||
| `integrations` | 123 | Unknown | Good — API client and mapper tests present |
|
||||
| `kell_web` | 24 | ~54.1% | **Gap** — low coverage; routing and shell untested |
|
||||
| `kell_mobile` | 26 | Unknown | Adequate — shell and page smoke tests |
|
||||
| `kell_web` | 62 | ~54.1% | **Gap** — low coverage; routing and shell untested |
|
||||
| `kell_mobile` | 81 | Unknown | Adequate — shell, page, and checkout tests |
|
||||
| `feature_finance` | 1 (placeholder) | ~0% | **Critical gap** — stub only |
|
||||
| `feature_mrp` | 1 (placeholder) | ~0% | **Critical gap** — stub only |
|
||||
| `feature_social` | 1 (placeholder) | ~0% | **Critical gap** — stub only |
|
||||
|
|
@ -447,14 +460,16 @@ kell_creations/
|
|||
|
||||
### 3.5 Architectural Antipatterns
|
||||
|
||||
| Issue | Description | Severity |
|
||||
| --------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------- |
|
||||
| **No state management framework** | All state uses `ChangeNotifier` + `AnimatedBuilder`. As complexity grows (sync engine, multi-channel, offline queue), this pattern will become difficult to compose. No Riverpod, BLoC, or equivalent. | MEDIUM |
|
||||
| **No dependency injection** | Services are constructed directly in factory methods. No DI container. Makes testing harder as the app grows. | MEDIUM |
|
||||
| **`SquareCatalogSyncService` ID conflation** | `syncCatalog()` uses `product.id` as the Square catalog object ID, but `product.id` is the local/WooCommerce ID. This will produce incorrect mappings when Square is the source. | HIGH |
|
||||
| **`AppServices` / `MobileAppServices` duplication** | Both files are nearly identical. A shared base class or factory could eliminate the duplication. | LOW |
|
||||
| **No logging infrastructure** | No structured logging anywhere in the codebase. Errors are caught and surfaced via SnackBars or swallowed silently. | MEDIUM |
|
||||
| **No crash reporting** | No Sentry, Firebase Crashlytics, or equivalent. Runtime errors are invisible in production. | MEDIUM |
|
||||
> Status column added 2026-09-25. Three findings below were closed by Stages 10E and 16A.
|
||||
|
||||
| Issue | Description | Severity | Status |
|
||||
| --------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------- | --------------------- |
|
||||
| **No state management framework** | All state uses `ChangeNotifier` + `AnimatedBuilder`. As complexity grows (sync engine, multi-channel, offline queue), this pattern will become difficult to compose. No Riverpod, BLoC, or equivalent. | MEDIUM | Open |
|
||||
| **No dependency injection** | Services are constructed directly in factory methods. No DI container. Makes testing harder as the app grows. | MEDIUM | Open |
|
||||
| **`SquareCatalogSyncService` ID conflation** | `syncCatalog()` used `product.id` as the Square catalog object ID when it is really the local/WooCommerce ID. | HIGH | ✅ Resolved (10E) |
|
||||
| **`AppServices` / `MobileAppServices` duplication** | Both files are nearly identical. A shared base class or factory could eliminate the duplication. | LOW | Open |
|
||||
| **No logging infrastructure** | Structured logging landed in `core`: `KcLogger`, `KcLogLevel`, `KcLogRecord`, `KcLogSink`, `KcRedactor`. Repositories log failures with redacted context instead of swallowing them. | MEDIUM | ✅ Resolved (16A) |
|
||||
| **No crash reporting** | `KcErrorReporter`, `KcObservability`, `KcBugReport`, and `KcBugReportService` capture crashes and user-submitted bug reports. No third-party SaaS dependency was introduced. | MEDIUM | ✅ Resolved (16A) |
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -614,25 +629,30 @@ These items harden the platform for production deployment.
|
|||
|
||||
## 5. Summary Scorecard
|
||||
|
||||
| Subsystem | Status | Completeness | Blocking Issues |
|
||||
| ------------------- | ----------- | ------------ | ----------------------------------------------------------------- |
|
||||
| `core` | ✅ COMPLETE | 95% | Square/multi bootstrap validation missing |
|
||||
| `design_system` | ✅ COMPLETE | 100% | None |
|
||||
| `auth` | ⚠️ PARTIAL | 40% | No production impl, not wired into app |
|
||||
| `data` | ⚠️ PARTIAL | 35% | No SQLite impl, not wired into any feature |
|
||||
| `integrations` | ⚠️ PARTIAL | 70% | RetryPolicy/RateLimiter not wired; ChannelAdapter not implemented |
|
||||
| `feature_wordpress` | ✅ COMPLETE | 95% | SquareSyncController (Stage 10E) pending |
|
||||
| `feature_inventory` | ⚠️ PARTIAL | 65% | No unified sync engine; ItemType/Supplier/PurchaseOrder missing |
|
||||
| `feature_orders` | ⚠️ PARTIAL | 70% | Custom orders missing; WC/Square repos not wired into AppServices |
|
||||
| `feature_policy` | ⚠️ PARTIAL | 50% | Fake-only; minimal tests; policy register empty |
|
||||
| `feature_finance` | ❌ MISSING | 0% | Pure stub |
|
||||
| `feature_mrp` | ❌ MISSING | 0% | Pure stub |
|
||||
| `feature_social` | ❌ MISSING | 0% | Pure stub |
|
||||
| `kell_web` | ⚠️ PARTIAL | 75% | Finance/Integrations placeholder; no square/multi factory |
|
||||
| `kell_mobile` | ⚠️ PARTIAL | 70% | No POS/checkout; no square/multi factory |
|
||||
| Architecture docs | ⚠️ PARTIAL | 80% | Square not represented; multi-channel model missing |
|
||||
| Policy register | ❌ MISSING | 10% | All CSVs empty |
|
||||
| CI/CD | ✅ COMPLETE | 85% | No coverage thresholds enforced |
|
||||
> **Re-baselined 2026-09-25** against `main` after Stages 10C–10F, 11A, and 16A
|
||||
> merged. Test counts are the verified per-package totals from a full local run
|
||||
> (**1,898 / 1,898 passing**); `dart analyze --fatal-infos` is clean across all
|
||||
> 11 packages and apps.
|
||||
|
||||
| Subsystem | Status | Completeness | Tests | Blocking Issues |
|
||||
| ------------------- | ----------- | ------------ | ----- | --------------------------------------------------------------------- |
|
||||
| `core` | ✅ COMPLETE | 100% | 90 | None — square/multi bootstrap validation landed (Stage 10E) |
|
||||
| `design_system` | ✅ COMPLETE | 100% | 51 | None |
|
||||
| `auth` | ⚠️ PARTIAL | 40% | 42 | No production impl; `SecureCredentialStore` TBD; not wired into shell |
|
||||
| `data` | ⚠️ PARTIAL | 35% | 63 | No SQLite impl; not wired into any feature |
|
||||
| `integrations` | ⚠️ PARTIAL | 70% | 123 | RetryPolicy/RateLimiter not wired; `ChannelAdapter` not implemented |
|
||||
| `feature_wordpress` | ✅ COMPLETE | 100% | 545 | None — `SquareSyncController` landed (Stage 10E) |
|
||||
| `feature_inventory` | ⚠️ PARTIAL | 65% | 167 | No unified sync engine; ItemType/Supplier/PurchaseOrder missing |
|
||||
| `feature_orders` | ⚠️ PARTIAL | 85% | 657 | Custom order **domain+data** landed (11A); custom order **UI** open |
|
||||
| `feature_policy` | ⚠️ PARTIAL | 50% | 17 | Fake-only; minimal tests; policy register empty |
|
||||
| `feature_finance` | ❌ MISSING | 0% | 1 | Pure stub |
|
||||
| `feature_mrp` | ❌ MISSING | 0% | 1 | Pure stub |
|
||||
| `feature_social` | ❌ MISSING | 0% | 1 | Pure stub |
|
||||
| `kell_web` | ⚠️ PARTIAL | 85% | 62 | Finance placeholder remains; Integrations page now real |
|
||||
| `kell_mobile` | ⚠️ PARTIAL | 85% | 81 | Finance placeholder remains; POS/checkout landed (Stage 10C) |
|
||||
| Architecture docs | ⚠️ PARTIAL | 80% | — | Square not represented; multi-channel model missing |
|
||||
| Policy register | ❌ MISSING | 10% | — | All CSVs empty |
|
||||
| CI/CD | ✅ COMPLETE | 85% | — | No coverage thresholds enforced |
|
||||
|
||||
### Overall Platform Readiness
|
||||
|
||||
|
|
@ -641,10 +661,11 @@ These items harden the platform for production deployment.
|
|||
| **WooCommerce catalog management** | ✅ Production-ready |
|
||||
| **WooCommerce orders** | ✅ Repository complete; not wired into AppServices |
|
||||
| **WooCommerce inventory sync** | ✅ Repository complete; not wired into AppServices |
|
||||
| **Square catalog sync** | ⚠️ Service layer complete; no UI trigger; ID conflation bug |
|
||||
| **Square inventory sync** | ⚠️ Repository complete; not wired into AppServices |
|
||||
| **Square payments / POS** | ❌ Not implemented |
|
||||
| **Custom orders** | ❌ Not implemented |
|
||||
| **Square catalog sync** | ✅ Service + controller + UI panel; ID bug fixed (10E/10F) |
|
||||
| **Square inventory sync** | ✅ Repository wired via `square()` / `multi()` factories |
|
||||
| **Square payments / POS** | ✅ Mobile checkout flow implemented (Stage 10C) |
|
||||
| **Custom orders** | ⚠️ Domain + data done (Stage 11A); UI open (Stage 11B) |
|
||||
| **Observability / error logging** | ✅ `KcLogger`, `KcErrorReporter`, bug reports (Stage 16A) |
|
||||
| **Supplies tracking** | ❌ Not implemented |
|
||||
| **Multi-channel sync engine** | ❌ Not implemented |
|
||||
| **Offline capability** | ❌ Not implemented |
|
||||
|
|
@ -655,48 +676,3 @@ These items harden the platform for production deployment.
|
|||
---
|
||||
|
||||
_Generated by automated repository audit. All findings are based on source code inspection, documentation review, and test suite analysis as of 2026-07-25._
|
||||
---
|
||||
|
||||
## 5. Summary Scorecard
|
||||
|
||||
| Subsystem | Status | Completeness | Blocking Issues |
|
||||
|---|---|---|---|
|
||||
| `core` | ✅ COMPLETE | 95% | Square/multi bootstrap validation missing |
|
||||
| `design_system` | ✅ COMPLETE | 100% | None |
|
||||
| `auth` | ⚠️ PARTIAL | 40% | No production impl, not wired into app |
|
||||
| `data` | ⚠️ PARTIAL | 35% | No SQLite impl, not wired into any feature |
|
||||
| `integrations` | ⚠️ PARTIAL | 70% | RetryPolicy/RateLimiter not wired; ChannelAdapter not implemented |
|
||||
| `feature_wordpress` | ✅ COMPLETE | 95% | SquareSyncController (Stage 10E) pending |
|
||||
| `feature_inventory` | ⚠️ PARTIAL | 65% | No unified sync engine; ItemType/Supplier/PurchaseOrder missing |
|
||||
| `feature_orders` | ⚠️ PARTIAL | 70% | Custom orders missing; WC/Square repos not wired into AppServices |
|
||||
| `feature_policy` | ⚠️ PARTIAL | 50% | Fake-only; minimal tests; policy register empty |
|
||||
| `feature_finance` | ❌ MISSING | 0% | Pure stub |
|
||||
| `feature_mrp` | ❌ MISSING | 0% | Pure stub |
|
||||
| `feature_social` | ❌ MISSING | 0% | Pure stub |
|
||||
| `kell_web` | ⚠️ PARTIAL | 75% | Finance/Integrations placeholder; no square/multi factory |
|
||||
| `kell_mobile` | ⚠️ PARTIAL | 70% | No POS/checkout; no square/multi factory |
|
||||
| Architecture docs | ⚠️ PARTIAL | 80% | Square not represented; multi-channel model missing |
|
||||
| Policy register | ❌ MISSING | 10% | All CSVs empty |
|
||||
| CI/CD | ✅ COMPLETE | 85% | No coverage thresholds enforced |
|
||||
|
||||
### Overall Platform Readiness
|
||||
|
||||
| Dimension | Assessment |
|
||||
|---|---|
|
||||
| **WooCommerce catalog management** | ✅ Production-ready |
|
||||
| **WooCommerce orders** | ✅ Repository complete; not wired into AppServices |
|
||||
| **WooCommerce inventory sync** | ✅ Repository complete; not wired into AppServices |
|
||||
| **Square catalog sync** | ⚠️ Service layer complete; no UI trigger; ID conflation bug |
|
||||
| **Square inventory sync** | ⚠️ Repository complete; not wired into AppServices |
|
||||
| **Square payments / POS** | ❌ Not implemented |
|
||||
| **Custom orders** | ❌ Not implemented |
|
||||
| **Supplies tracking** | ❌ Not implemented |
|
||||
| **Multi-channel sync engine** | ❌ Not implemented |
|
||||
| **Offline capability** | ❌ Not implemented |
|
||||
| **Authentication** | ❌ Contracts only; not wired |
|
||||
| **Financial reporting** | ❌ Not implemented |
|
||||
| **Social media management** | ❌ Not implemented |
|
||||
|
||||
---
|
||||
|
||||
*Generated by automated repository audit. All findings are based on source code inspection, documentation review, and test suite analysis as of 2026-07-25.*
|
||||
|
|
|
|||
|
|
@ -10,13 +10,88 @@
|
|||
- merged: `feat/observability-error-logging` (Stage 16A) — error logging, crash capture, and bug reporting; merged to main 2026-08-29
|
||||
- merged: `feat/custom-order-domain` (Stage 11A) — custom order domain and data; merged to main 2026-08-29, commit `85501fd`
|
||||
- main baseline updated through: `feat/custom-order-domain` (Stage 11A complete, merged 2026-08-29)
|
||||
- reconciled: `chore/state-reconciliation-flutter-347` — working tree vs. `main` reconciled 2026-09-25; toolchain moved to Flutter 3.47.0 / Dart 3.13.0; master documents re-baselined
|
||||
- next branch: `feat/custom-order-ui` (Stage 11B) — Custom order creation UI
|
||||
- total tests on branch: 1898/1898 passing (+423 new, all in feature_orders); dart analyze --fatal-infos clean across all 11 packages and apps
|
||||
- note: previously quoted totals omitted `feature_policy` (17 tests); it is now included in the count
|
||||
- release review: `docs/operations/release-checklist.md` created 2026-08-29 — per-environment release gates for Development, Test/QA, Staging, and Production
|
||||
- toolchain: Flutter 3.47.0 / Dart 3.13.0. Flutter 3.47 auto-generates an `analyzer.exclude` block in every `analysis_options.yaml` on each `pub get` / `analyze` / `run` / `build` with no opt-out ([flutter#191160](https://github.com/flutter/flutter/issues/191160)). **Do not open a slice to revert it** — see "Toolchain baseline" in `master_development_brief.md`
|
||||
|
||||
## Slice tracker
|
||||
|
||||
### chore/state-reconciliation-flutter-347
|
||||
|
||||
- status: merged to main
|
||||
- branch: `chore/state-reconciliation-flutter-347`
|
||||
- stage: n/a — repository state reconciliation, no product code change
|
||||
- date: 2026-09-25
|
||||
- baseline: `92d83e0` (main, Stage 11A complete)
|
||||
- inspection: complete
|
||||
- implementation: complete
|
||||
- trigger: the working tree had drifted from `main` and local `main` was 4 commits ahead of `origin/main`
|
||||
- scope: **documentation and toolchain hygiene only** — no `lib/` or `test/` source file was modified
|
||||
|
||||
#### What the drift actually was
|
||||
|
||||
1. **Flutter 3.47.0 `analysis_options.yaml` churn (accepted).** The local toolchain moved from
|
||||
Flutter 3.44.x to **Flutter 3.47.0 / Dart 3.13.0**. Flutter 3.47 ships `AnalysisOptionsMigration`,
|
||||
which unconditionally writes a fixed seven-entry `analyzer.exclude` block
|
||||
(`build/**`, `android/**`, `ios/**`, `web/**`, `windows/**`, `macos/**`, `linux/**`)
|
||||
into **every** `analysis_options.yaml` it finds. Upstream bugs:
|
||||
[flutter#191160](https://github.com/flutter/flutter/issues/191160) and
|
||||
[flutter#191131](https://github.com/flutter/flutter/issues/191131).
|
||||
- Commit `92d83e0` previously tried to revert this. **That revert does not hold.** The migration
|
||||
runs from `ensureReadyForPlatformSpecificTooling`, so `flutter pub get`, `flutter analyze`,
|
||||
`flutter run`, and `flutter build` all rewrite the block. There is **no opt-out**.
|
||||
This was confirmed empirically: a full `flutter test` sweep regenerated the block in 8
|
||||
further packages that were clean beforehand.
|
||||
- **Decision: accept and commit the block** in all 11 packages/apps rather than fight the tool.
|
||||
Reverting it only produces a permanently dirty working tree and misleading diffs.
|
||||
- **Safety check:** the `web/**` entry is the dangerous one (it can hide real Dart sources in
|
||||
`dart create -t web` packages). Verified that neither `kell_web/web/` nor `kell_mobile/web/`
|
||||
contains any `.dart` file, so nothing is dropped from analysis here. `dart analyze
|
||||
--fatal-infos` remains clean across all 11 packages and apps.
|
||||
2. **`kell_mobile` web scaffold (reverted).** Someone had run `flutter create --platforms=web`
|
||||
inside `kell_mobile`, which produced an untracked `web/` directory (`index.html`,
|
||||
`manifest.json`, `favicon.png`, 4 icons) and rewrote `.metadata` so the `android` platform
|
||||
entry was **replaced** by `web`. `kell_mobile` is the Android target and its `android/`
|
||||
directory is tracked, so this was unintended tool output, not a deliberate platform addition.
|
||||
- **Decision: reverted.** `.metadata` restored to the tracked Android-only revision
|
||||
(`ad70ec46…`); the untracked `web/` scaffold deleted. `kell_mobile` remains Android-only.
|
||||
3. **`kell_mobile/pubspec.lock` transitive bumps (accepted).** Resolved under the newer SDK:
|
||||
`clock` 1.1.2→1.1.3, `matcher` 0.12.19→0.12.20, `meta` 1.18.0→1.18.3,
|
||||
`stack_trace` 1.12.1→1.12.2, `test_api` 0.7.11→0.7.12, `vector_math` 2.2.0→2.4.2,
|
||||
plus `vm_service`. All transitive, all pinned by the Flutter SDK. Committed so the lock file
|
||||
matches the toolchain that is actually in use.
|
||||
|
||||
#### Master document corrections
|
||||
|
||||
- `PROJECT_STATE_AUDIT.md` — **removed a duplicated `## 5. Summary Scorecard` section.** The file
|
||||
carried the entire scorecard and readiness table twice (lines 615–657 and 658–702), the second
|
||||
copy being a bad append. Removed the duplicate, leaving one authoritative §5.
|
||||
- `PROJECT_STATE_AUDIT.md` — added a reconciliation notice clarifying that §1–§4 are the preserved
|
||||
historical 2026-07-25 record while §5 is re-baselined to `main`.
|
||||
- `PROJECT_STATE_AUDIT.md` §3.4 — test counts corrected to the verified run
|
||||
(`core` 24→90, `design_system` 41→51, `feature_wordpress` 506→545, `feature_orders` 198→657,
|
||||
`feature_policy` ~5→17, `kell_web` 24→62, `kell_mobile` 26→81).
|
||||
- `PROJECT_STATE_AUDIT.md` §3.5 — marked three antipatterns resolved:
|
||||
`SquareCatalogSyncService` ID conflation (10E), no logging infrastructure (16A),
|
||||
no crash reporting (16A).
|
||||
- `PROJECT_STATE_AUDIT.md` §5 — scorecard re-baselined with a test-count column; Square POS,
|
||||
Square catalog/inventory sync, and observability moved to ✅; custom orders moved to ⚠️
|
||||
(domain+data done, UI open).
|
||||
- `master_development_brief.md` Appendix A — feature maturity matrix refreshed to the same
|
||||
verified counts and maturity levels.
|
||||
- `master_development_brief.md` — toolchain baseline recorded (Flutter 3.47.0 / Dart 3.13.0) with
|
||||
the `analysis_options.yaml` caveat so the next slice does not try to revert it again.
|
||||
|
||||
- tests: passed (**1,898 / 1,898** — core 90, design_system 51, auth 42, integrations 123, data 63,
|
||||
feature_wordpress 545, feature_inventory 167, feature_orders 657, feature_policy 17,
|
||||
kell_web 62, kell_mobile 81). Identical to the Stage 11A total, confirming this slice changed
|
||||
no behaviour.
|
||||
- analyze: passed (`dart analyze --fatal-infos` — no issues found across all 11 packages and apps)
|
||||
- brief updated: yes
|
||||
|
||||
### feat/custom-order-domain
|
||||
|
||||
- status: merged to main
|
||||
|
|
|
|||
|
|
@ -565,6 +565,53 @@ These must be preserved in all future work:
|
|||
|
||||
---
|
||||
|
||||
## Toolchain baseline
|
||||
|
||||
> **Last verified:** 2026-09-25 — `chore/state-reconciliation-flutter-347`
|
||||
|
||||
| Tool | Version |
|
||||
| -------------------------------------- | -------------------------------------- |
|
||||
| Flutter | 3.47.0 (stable, revision `4cf2416426`) |
|
||||
| Dart | 3.13.0 |
|
||||
| SDK constraint in every `pubspec.yaml` | `^3.11.0` |
|
||||
|
||||
### Known toolchain caveat — `analysis_options.yaml` is tool-managed
|
||||
|
||||
Flutter 3.47 ships `AnalysisOptionsMigration`, which **unconditionally rewrites every
|
||||
`analysis_options.yaml`** in the workspace to contain:
|
||||
|
||||
```yaml
|
||||
analyzer:
|
||||
exclude:
|
||||
- build/**
|
||||
- android/**
|
||||
- ios/**
|
||||
- web/**
|
||||
- windows/**
|
||||
- macos/**
|
||||
- linux/**
|
||||
```
|
||||
|
||||
The list is a hardcoded constant — it is not derived from the platforms a project
|
||||
actually has. The migration runs from `ensureReadyForPlatformSpecificTooling`, so
|
||||
`flutter pub get`, `flutter analyze`, `flutter run`, and `flutter build` all restore it.
|
||||
**There is no opt-out.** Upstream:
|
||||
[flutter#191160](https://github.com/flutter/flutter/issues/191160),
|
||||
[flutter#191131](https://github.com/flutter/flutter/issues/191131).
|
||||
|
||||
**Rule for all future slices:** treat this block as generated content and leave it in place.
|
||||
Do **not** open a slice to strip it — an earlier attempt (`92d83e0`) was undone by the very
|
||||
next `flutter` command and only produced a permanently dirty working tree. If a diff shows
|
||||
only this block appearing, commit it or ignore it; it is never a real change.
|
||||
|
||||
**Caveat to re-check if the repo layout changes:** the `web/**` entry will silently drop real
|
||||
Dart sources from analysis in any package that uses `web/` as a source directory (as
|
||||
`dart create -t web` does). This is safe today because neither `kell_web/web/` nor
|
||||
`kell_mobile/web/` contains `.dart` files — they are pure browser-asset scaffolds. Re-verify
|
||||
this if a Dart web package is ever added.
|
||||
|
||||
---
|
||||
|
||||
## Development stages
|
||||
|
||||
### Stage 1 — Web application completion: controlled product editing
|
||||
|
|
@ -1606,32 +1653,35 @@ Working rules:
|
|||
|
||||
## Appendix A: Feature maturity matrix
|
||||
|
||||
> **Last updated:** 2026-07-25 — Comprehensive State Audit
|
||||
> **Last updated:** 2026-09-25 — `chore/state-reconciliation-flutter-347`
|
||||
> (test counts verified by a full local run: **1,898 / 1,898 passing**)
|
||||
|
||||
| Package | Domain Layer | Application Layer | Data (Fake) | Data (Real) | Presentation | Tests | Maturity |
|
||||
| ------------------- | ------------ | ------------------------ | ----------- | ------------------------- | -------------------------------------------------- | ----- | -------------------------- |
|
||||
| `feature_wordpress` | ✅ Complete | ✅ Complete | ✅ Complete | ✅ WooCommerce + Square | ✅ Complete | 506 | **Production-ready (95%)** |
|
||||
| ------------------- | ------------ | ---------------------------- | ----------- | ------------------------- | -------------------------------------------------- | ----- | --------------------------- |
|
||||
| `feature_wordpress` | ✅ Complete | ✅ Complete + SquareSync | ✅ Complete | ✅ WooCommerce + Square | ✅ Complete + sync panel | 545 | **Production-ready (100%)** |
|
||||
| `feature_inventory` | ✅ Complete | ✅ Write ops | ✅ Complete | ✅ WooCommerce + Square | ✅ Complete | 167 | **Partial (65%)** |
|
||||
| `feature_orders` | ✅ Complete | ✅ Write ops | ✅ Complete | ✅ WooCommerce | ✅ Complete | 198 | **Partial (70%)** |
|
||||
| `feature_policy` | ✅ Complete | ✅ Complete | ✅ Complete | ❌ None | ✅ Complete | ~5 | **Fake-only (50%)** |
|
||||
| `feature_orders` | ✅ Complete | ✅ Write ops + custom orders | ✅ Complete | ✅ WooCommerce | ⚠️ Standard orders only (custom order UI open) | 657 | **Partial (85%)** |
|
||||
| `feature_policy` | ✅ Complete | ✅ Complete | ✅ Complete | ❌ None | ✅ Complete | 17 | **Fake-only (50%)** |
|
||||
| `feature_finance` | ❌ Stub | ❌ Stub | ❌ Stub | ❌ None | ❌ Stub | 1 | **Scaffolded only (0%)** |
|
||||
| `feature_mrp` | ❌ Stub | ❌ Stub | ❌ Stub | ❌ None | ❌ Stub | 1 | **Scaffolded only (0%)** |
|
||||
| `feature_social` | ❌ Stub | ❌ Stub | ❌ Stub | ❌ None | ❌ Stub | 1 | **Scaffolded only (0%)** |
|
||||
| `auth` | ✅ Complete | ✅ FakeAuthService | ✅ InMemory | ❌ None (SecureStore TBD) | N/A | 42 | **Foundation ready (40%)** |
|
||||
| `data` | ✅ Contracts | N/A | ✅ InMemory | ❌ None (SQLite TBD) | N/A | 63 | **Foundation ready (35%)** |
|
||||
| `integrations` | ✅ Contracts | N/A | N/A | ✅ WooCommerce + Square | N/A | 123 | **Partial (70%)** |
|
||||
| `design_system` | N/A | N/A | N/A | N/A | ✅ Expanded (theme, typography, layout, 7 widgets) | 41 | **Complete (100%)** |
|
||||
| `core` | ✅ Complete | ✅ Composition | N/A | N/A | N/A | 24 | **Complete (95%)** |
|
||||
| `kell_web` | N/A | ✅ AppServices (wp only) | N/A | N/A | ✅ 7 routes (2 placeholder) | 24 | **Partial (75%)** |
|
||||
| `kell_mobile` | N/A | ✅ MobileAppServices | N/A | N/A | ✅ 5-tab shell (no POS) | 26 | **Partial (70%)** |
|
||||
| `design_system` | N/A | N/A | N/A | N/A | ✅ Expanded (theme, typography, layout, 7 widgets) | 51 | **Complete (100%)** |
|
||||
| `core` | ✅ Complete | ✅ Composition + observ. | N/A | N/A | N/A | 90 | **Complete (100%)** |
|
||||
| `kell_web` | N/A | ✅ AppServices ×4 modes | N/A | N/A | ✅ 7 routes (1 placeholder) | 62 | **Partial (85%)** |
|
||||
| `kell_mobile` | N/A | ✅ MobileAppServices ×4 | N/A | N/A | ✅ 5-tab shell + POS checkout | 81 | **Partial (85%)** |
|
||||
|
||||
### Key changes from previous matrix (updated 2026-07-25)
|
||||
### Key changes from previous matrix (updated 2026-09-25)
|
||||
|
||||
- `feature_wordpress` test count updated to 506 (Stage 10D, pending merge); real data layer now includes Square repositories.
|
||||
- `feature_inventory` and `feature_orders` upgraded from "Read-only" — write operations, real WooCommerce/Square repositories now complete.
|
||||
- `integrations` test count updated to 123; Square API client and mappers complete.
|
||||
- `core` test count updated to 24; `kell_web` and `kell_mobile` rows added.
|
||||
- Completeness percentages sourced from `PROJECT_STATE_AUDIT.md` §5 scorecard (2026-07-25).
|
||||
- All test counts re-verified by a full local run — **1,898 / 1,898 passing**; previous figures predated Stages 10C–10F, 11A, and 16A.
|
||||
- `feature_orders` 198 → 657 and upgraded to 85%: custom order domain and data landed (Stage 11A). Custom order **UI** is the remaining gap (Stage 11B).
|
||||
- `feature_wordpress` 506 → 545 and promoted to 100%: `SquareSyncController` and the sync panel landed (Stages 10E/10F).
|
||||
- `core` 24 → 90 and promoted to 100%: observability (`KcLogger`, `KcErrorReporter`, `KcRedactor`) plus square/multi bootstrap validation landed.
|
||||
- `kell_web` 24 → 62 and `kell_mobile` 26 → 81, both to 85%: all four `KC_ENV` modes are wired, the Integrations page is real, and mobile POS checkout landed (Stage 10C). Finance remains a placeholder on both.
|
||||
- `design_system` 41 → 51, `feature_policy` ~5 → 17.
|
||||
- Completeness percentages sourced from the re-baselined `PROJECT_STATE_AUDIT.md` §5 scorecard (2026-09-25).
|
||||
|
||||
---
|
||||
|
||||
|
|
|
|||
|
|
@ -7,6 +7,15 @@
|
|||
|
||||
# The following line activates a set of recommended lints for Flutter apps,
|
||||
# packages, and plugins designed to encourage good coding practices.
|
||||
analyzer:
|
||||
exclude:
|
||||
- build/**
|
||||
- android/**
|
||||
- ios/**
|
||||
- web/**
|
||||
- windows/**
|
||||
- macos/**
|
||||
- linux/**
|
||||
include: package:flutter_lints/flutter.yaml
|
||||
|
||||
linter:
|
||||
|
|
|
|||
|
|
@ -29,10 +29,10 @@ packages:
|
|||
dependency: transitive
|
||||
description:
|
||||
name: clock
|
||||
sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b
|
||||
sha256: e51d50bca3217c9a9fa2b41a30e4a38971133f5f9ec7a3d57bae095007f1d28e
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.1.2"
|
||||
version: "1.1.3"
|
||||
collection:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
|
@ -176,10 +176,10 @@ packages:
|
|||
dependency: transitive
|
||||
description:
|
||||
name: matcher
|
||||
sha256: dc0b7dc7651697ea4ff3e69ef44b0407ea32c487a39fff6a4004fa585e901861
|
||||
sha256: "31bd099b47c10cd1aeb55146a2d46ce0277630ecef3f7dae54ad7873f36696cd"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.12.19"
|
||||
version: "0.12.20"
|
||||
material_color_utilities:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
|
@ -192,10 +192,10 @@ packages:
|
|||
dependency: transitive
|
||||
description:
|
||||
name: meta
|
||||
sha256: "1741988757a65eb6b36abe716829688cf01910bbf91c34354ff7ec1c3de2b349"
|
||||
sha256: c82594181e3312f3d0695fc95aaaf7758d75b8d4ae2bbecf223b9fd5109a059d
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.18.0"
|
||||
version: "1.18.3"
|
||||
path:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
|
@ -221,10 +221,10 @@ packages:
|
|||
dependency: transitive
|
||||
description:
|
||||
name: stack_trace
|
||||
sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1"
|
||||
sha256: "277654b3034d17ac6f9f1cb5595db011b1d5d41e8806866db28e0abaa101c490"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.12.1"
|
||||
version: "1.12.2"
|
||||
stream_channel:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
|
@ -253,10 +253,10 @@ packages:
|
|||
dependency: transitive
|
||||
description:
|
||||
name: test_api
|
||||
sha256: "949a932224383300f01be9221c39180316445ecb8e7547f70a41a35bf421fb9e"
|
||||
sha256: "2a122cbe059f8b610d3a5415f42e255b6c17b1f21eee1d960f31080237fb4f11"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.7.11"
|
||||
version: "0.7.12"
|
||||
typed_data:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
|
@ -269,18 +269,18 @@ packages:
|
|||
dependency: transitive
|
||||
description:
|
||||
name: vector_math
|
||||
sha256: d530bd74fea330e6e364cda7a85019c434070188383e1cd8d9777ee586914c5b
|
||||
sha256: f36f9f3be64c6198714492bb455c11056e33e2f85d9a0b676a48301e44fdcf47
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.2.0"
|
||||
version: "2.4.2"
|
||||
vm_service:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: vm_service
|
||||
sha256: "0016aef94fc66495ac78af5859181e3f3bf2026bd8eecc72b9565601e19ab360"
|
||||
sha256: "5f37239c4851efcef929cea7824e76df7f2f0970aef85d66bbc430afa40e72f0"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "15.2.0"
|
||||
version: "15.3.0"
|
||||
web:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
|
|
|||
|
|
@ -7,6 +7,15 @@
|
|||
|
||||
# The following line activates a set of recommended lints for Flutter apps,
|
||||
# packages, and plugins designed to encourage good coding practices.
|
||||
analyzer:
|
||||
exclude:
|
||||
- build/**
|
||||
- android/**
|
||||
- ios/**
|
||||
- web/**
|
||||
- windows/**
|
||||
- macos/**
|
||||
- linux/**
|
||||
include: package:flutter_lints/flutter.yaml
|
||||
|
||||
linter:
|
||||
|
|
|
|||
|
|
@ -1,3 +1,12 @@
|
|||
analyzer:
|
||||
exclude:
|
||||
- build/**
|
||||
- android/**
|
||||
- ios/**
|
||||
- web/**
|
||||
- windows/**
|
||||
- macos/**
|
||||
- linux/**
|
||||
include: package:flutter_lints/flutter.yaml
|
||||
|
||||
# Additional information about this file can be found at
|
||||
|
|
|
|||
|
|
@ -1,3 +1,12 @@
|
|||
analyzer:
|
||||
exclude:
|
||||
- build/**
|
||||
- android/**
|
||||
- ios/**
|
||||
- web/**
|
||||
- windows/**
|
||||
- macos/**
|
||||
- linux/**
|
||||
include: package:flutter_lints/flutter.yaml
|
||||
|
||||
# Additional information about this file can be found at
|
||||
|
|
|
|||
|
|
@ -1,3 +1,12 @@
|
|||
analyzer:
|
||||
exclude:
|
||||
- build/**
|
||||
- android/**
|
||||
- ios/**
|
||||
- web/**
|
||||
- windows/**
|
||||
- macos/**
|
||||
- linux/**
|
||||
include: package:flutter_lints/flutter.yaml
|
||||
|
||||
# Additional information about this file can be found at
|
||||
|
|
|
|||
|
|
@ -1,3 +1,12 @@
|
|||
analyzer:
|
||||
exclude:
|
||||
- build/**
|
||||
- android/**
|
||||
- ios/**
|
||||
- web/**
|
||||
- windows/**
|
||||
- macos/**
|
||||
- linux/**
|
||||
include: package:flutter_lints/flutter.yaml
|
||||
|
||||
# Additional information about this file can be found at
|
||||
|
|
|
|||
|
|
@ -1,3 +1,12 @@
|
|||
analyzer:
|
||||
exclude:
|
||||
- build/**
|
||||
- android/**
|
||||
- ios/**
|
||||
- web/**
|
||||
- windows/**
|
||||
- macos/**
|
||||
- linux/**
|
||||
include: package:flutter_lints/flutter.yaml
|
||||
|
||||
# Additional information about this file can be found at
|
||||
|
|
|
|||
|
|
@ -1,3 +1,12 @@
|
|||
analyzer:
|
||||
exclude:
|
||||
- build/**
|
||||
- android/**
|
||||
- ios/**
|
||||
- web/**
|
||||
- windows/**
|
||||
- macos/**
|
||||
- linux/**
|
||||
include: package:flutter_lints/flutter.yaml
|
||||
|
||||
# Additional information about this file can be found at
|
||||
|
|
|
|||
|
|
@ -1,3 +1,12 @@
|
|||
analyzer:
|
||||
exclude:
|
||||
- build/**
|
||||
- android/**
|
||||
- ios/**
|
||||
- web/**
|
||||
- windows/**
|
||||
- macos/**
|
||||
- linux/**
|
||||
include: package:flutter_lints/flutter.yaml
|
||||
|
||||
# Additional information about this file can be found at
|
||||
|
|
|
|||
|
|
@ -1,3 +1,12 @@
|
|||
analyzer:
|
||||
exclude:
|
||||
- build/**
|
||||
- android/**
|
||||
- ios/**
|
||||
- web/**
|
||||
- windows/**
|
||||
- macos/**
|
||||
- linux/**
|
||||
include: package:flutter_lints/flutter.yaml
|
||||
|
||||
# Additional information about this file can be found at
|
||||
|
|
|
|||
|
|
@ -1,3 +1,12 @@
|
|||
analyzer:
|
||||
exclude:
|
||||
- build/**
|
||||
- android/**
|
||||
- ios/**
|
||||
- web/**
|
||||
- windows/**
|
||||
- macos/**
|
||||
- linux/**
|
||||
include: package:flutter_lints/flutter.yaml
|
||||
|
||||
# Additional information about this file can be found at
|
||||
|
|
|
|||
Loading…
Reference in New Issue