Release Checklist¶
Owner: Release Committee
Applies to: kell_web (Flutter Web / Windows Desktop) and kell_mobile (Flutter Android)
Last reviewed: 2026-08-29
Review cycle: Every release; document reviewed at least quarterly
Purpose¶
This document defines the mandatory gates a build must pass before it is promoted into each target environment. Each environment inherits every gate from the environment before it, then adds its own.
Promotion is sequential: Development → Test/QA → Staging → Production. A build may not skip an environment.
1. Environment Matrix¶
| Environment | Target | KC_ENV |
Square mode | Data | Audience | Approver |
|---|---|---|---|---|---|---|
| Development | Local workstation | fake |
n/a | In-memory fakes | Engineer | Self |
| Test / QA | CI runner + internal test devices | wordpress |
n/a | WooCommerce staging | Engineer + QA | Engineering lead |
| Staging | Pre-production host + test device | multi |
sandbox |
Staging WC + Square SBX | QA + business | Release committee |
| Production | Live web host + Play Store track | wordpress / multi |
production |
Live WC + Square live | Operators | Release committee |
Rule:
KC_SQUARE_ENVIRONMENT=productionis permitted only in the Production environment. Any lower environment using a live Square token is an immediate stop-ship defect.
2. Universal Gates (all environments)¶
These must pass before any promotion.
- [ ]
dart analyze --fatal-infosis clean for all 11 packages and both apps - [ ] Full test suite passes — current baseline 1,475 / 1,475
- [ ] No test is skipped,
@Skip-ed, or commented out without a linked issue - [ ]
docs/development/build_execution_tracker.mdhas a slice entry for the change - [ ]
docs/development/master_development_brief.mdreflects the new baseline - [ ] No secrets committed — credentials supplied only via
--dart-define - [ ] No
TODO/FIXMEintroduced without a linked tracker item
Commands:
cd kell_creations_apps
./tools/run_all_tests.sh --analyze
3. Development Environment¶
Purpose: Fast inner-loop work against in-memory fakes. No external calls.
Build¶
flutter run -d chrome --dart-define=KC_ENV=fake # kell_web
flutter run -d android --dart-define=KC_ENV=fake # kell_mobile
Gates¶
- [ ] Universal gates pass
- [ ] Feature branch is cut from current
main - [ ] Slice is vertical and reviewable (domain → application → data → presentation)
- [ ] New public APIs carry doc comments
- [ ] Environment badge renders
FAKE - [ ] "Report a problem" action opens the dialog and submits successfully
- [ ] No unexpected
ERROR/FATALrecords in the console during a smoke pass
Exit criteria¶
Analyze clean, tests green, tracker updated. Open PR into main.
4. Test / QA Environment¶
Purpose: Validate real WooCommerce integration and cross-platform parity.
Build¶
flutter build web --dart-define=KC_ENV=wordpress \
--dart-define=KC_WC_SITE_URL=https://staging.kellcreations.com \
--dart-define=KC_WC_CONSUMER_KEY=ck_xxx \
--dart-define=KC_WC_CONSUMER_SECRET=cs_xxx
flutter build apk --debug --dart-define=KC_ENV=wordpress \
--dart-define=KC_WC_SITE_URL=https://staging.kellcreations.com \
--dart-define=KC_WC_CONSUMER_KEY=ck_xxx \
--dart-define=KC_WC_CONSUMER_SECRET=cs_xxx
Gates¶
- [ ] All Development gates pass
- [ ] Forgejo
Flutter Testworkflow green - [ ] Forgejo
Flutter Analyzeworkflow green - [ ] Coverage reported in the CI summary; no unexplained decrease
- [ ] Credentials point at staging WooCommerce — never production
- [ ] Environment badge renders
WP - [ ] Missing-credential path verified: app falls back to
FAKEand logs a warning
Functional verification (WooCommerce)¶
- [ ] Product list loads, filters, searches, and sorts
- [ ] Single-field edits persist (name, price, description, category)
- [ ] Status transitions behave (
unpublished→draft,pendingReview→published) - [ ] Product creation completes on web (
CreateProductDialog) and mobile (MobileCreateProductPage) - [ ] Category CRUD works
- [ ] Bulk actions (move-to-draft, publish, submit-for-review) work
- [ ] API failures surface a user-visible error — never a silent failure
Observability verification¶
- [ ] Startup record written with the effective environment
- [ ] A forced API failure produces an
ERRORrecord with source and context - [ ] Bug report submission attaches the recent log tail
- [ ] Credential redaction confirmed — no token, key, or secret appears in any log or report
Mobile-specific¶
- [ ] Touch targets meet the 48×48dp minimum
- [ ] Haptics fire (
mediumImpactstate changes,lightImpactfield edits) - [ ] Layout is correct on a notch/gesture-bar device
- [ ] Back navigation behaves throughout
Exit criteria¶
CI green, functional pass recorded, no open Critical or High defects.
5. Staging Environment¶
Purpose: Production rehearsal with both channels live in sandbox mode.
Build¶
flutter build web --release --dart-define=KC_ENV=multi \
--dart-define=KC_WC_SITE_URL=https://staging.kellcreations.com \
--dart-define=KC_WC_CONSUMER_KEY=ck_xxx \
--dart-define=KC_WC_CONSUMER_SECRET=cs_xxx \
--dart-define=KC_SQUARE_ACCESS_TOKEN=EAAAl_sandbox_xxx \
--dart-define=KC_SQUARE_LOCATION_ID=L_xxx \
--dart-define=KC_SQUARE_ENVIRONMENT=sandbox
The Android build uses the same defines with flutter build apk --release.
Gates¶
- [ ] All Test/QA gates pass
- [ ] Built in release mode (not debug/profile)
- [ ]
KC_SQUARE_ENVIRONMENT=sandbox— confirmed, notproduction - [ ] Square token is a sandbox token
- [ ] Environment badge renders
MULTI - [ ] Incomplete-credential path falls back to
FAKEwith a logged warning
Multi-channel verification¶
- [ ] Square catalog sync completes;
SquareSyncStatusPanelreports the result - [ ]
ProductIdMappingrecords are created correctly — no duplicate listings - [ ] Already-synced products reuse their existing mapping (ID conflation regression check)
- [ ] Square inventory counts load and reconcile
- [ ] Partial sync failure surfaces per-item
SyncErrordetail - [ ] Integrations page reflects live sync state on web and mobile
Mobile POS verification (sandbox)¶
- [ ] Product selection → cart → payment flow completes
- [ ] Cash payment records correctly
- [ ] Card payment completes against Square sandbox
- [ ] Receipt renders with the correct total
- [ ] Payment failure is handled without data loss
Non-functional¶
- [ ] Release build starts within an acceptable time on a representative device
- [ ] No memory growth across an extended session
- [ ] Web build loads over the target network profile
- [ ] Offline/interrupted-network behaviour is understood and documented
Known limitation: Offline caching and the sales queue (Stage 14) are not implemented. Network loss during a market sale is currently unrecoverable. This must be stated in release notes for any field use.
Exit criteria¶
Business sign-off recorded, no open Critical/High defects, rollback plan agreed.
6. Production Environment¶
Purpose: Live operator use against real customers and real money.
Pre-flight¶
- [ ] All Staging gates pass
- [ ] Release committee approval recorded
- [ ] Release notes drafted, including known limitations
- [ ] Rollback plan documented and the previous artifact retained
- [ ] Version bumped in both
pubspec.yamlfiles - [ ]
AppServices.appVersionandMobileAppServices.appVersionmatchpubspec.yaml - [ ] Release tagged in Git
Credential and safety gates¶
- [ ] Production WooCommerce credentials sourced from the secret store — not the repo
- [ ]
KC_SQUARE_ENVIRONMENT=productionset deliberately - [ ] Square production token scoped to the minimum required permissions
- [ ] Square location ID matches the intended physical location
- [ ] A staging credential is confirmed absent from the production build
- [ ] Credential redaction verified once more in the production artifact
Build¶
flutter build web --release --dart-define=KC_ENV=multi \
--dart-define=KC_WC_SITE_URL=https://store.kellcreations.com \
--dart-define=KC_WC_CONSUMER_KEY=$WC_KEY \
--dart-define=KC_WC_CONSUMER_SECRET=$WC_SECRET \
--dart-define=KC_SQUARE_ACCESS_TOKEN=$SQUARE_TOKEN \
--dart-define=KC_SQUARE_LOCATION_ID=$SQUARE_LOCATION \
--dart-define=KC_SQUARE_ENVIRONMENT=production
The Android release build uses the same defines with flutter build appbundle --release.
Post-deployment verification¶
- [ ] App loads and the environment badge is correct
- [ ] A read-only operation succeeds (product list loads)
- [ ] A single low-risk write succeeds and is confirmed in WooCommerce admin
- [ ] Square sync runs once and mappings are correct
- [ ] One low-value real transaction processed end-to-end and reconciled in Square
- [ ] Bug reporting works from the production build
- [ ] No
ERROR/FATALrecords during the verification pass
Monitoring window¶
- [ ] Observed for the first operating session
- [ ] Bug report queue reviewed before sign-off
- [ ] Operators briefed on "Report a problem" and known limitations
Rollback triggers¶
Roll back immediately on any of:
- Incorrect pricing, inventory, or payment amounts
- Duplicate product listings from a sync defect
- Failed or double-charged payments
- Credential leakage in any log or report
- Any Critical defect without a workaround
7. Release Sign-Off Record¶
| Field | Value |
|---|---|
| Release version | |
| Git tag / commit | |
| Target environment | |
| Test result | __ / 1475 passing |
| Analyze result | |
| Known limitations | |
| Approver | |
| Date |
8. Open Release Blockers¶
Carried from PROJECT_STATE_AUDIT.md. Each must be closed or explicitly accepted
as a documented limitation before the affected environment is used in earnest.
| ID | Item | Blocks |
|---|---|---|
| P2.5 | WooCommerceOrdersRepository not wired into AppServices |
Test/QA orders workflow |
| P2.6 | WooCommerceInventoryRepository not wired into AppServices |
Test/QA inventory workflow |
| P2.8 | Offline cache and sales queue not implemented (Stage 14) | Production field use |
| P3.2 | SecureCredentialStore not implemented |
Production |
| P3.3 | Auth guard not wired into either shell | Production |
| P3.1 | RetryPolicy / RateLimiter not wired into API clients |
Staging, Production |
| P3.6 | feature_policy has only a smoke test |
Test/QA |
| P2.10 | Policy register CSVs contain headers only | Governance compliance |
Committee position: With Stage 16A complete, the platform now has error logging and bug reporting. It is approved for Development and Test/QA. Staging is conditionally approved pending P3.1. Production is not approved until P3.2, P3.3, and P2.8 are closed — the platform currently has no authentication guard, no secure credential storage, and no offline resilience for in-person sales.