2026 07 19 kimi code k3 - #27
Open
FabianWesner wants to merge 29 commits into
Open
Conversation
…r-kit scaffolding
…middleware, RBAC policies/gates, auth guards - All migrations per spec 01 in FK dependency order (SQLite WAL, FK on) - BelongsToStore trait + StoreScope (no-op when current_store unbound) - ResolveStore/CheckStoreRole/CustomerAuthenticate middleware - Customer guard + CustomerUserProvider (store-scoped credentials) - 11 policies + ChecksStoreRole trait + 9 gates + 7 rate limiters - User model: password_hash auth, Sanctum tokens, roleForStore() - Tenancy tests: 15 passed
… services, jobs - ProductService with full status state machine + SKU uniqueness per store - VariantMatrixService cartesian rebuild (preserve/archive/delete) - InventoryService reserve/release/commit/restock in transactions - HandleGenerator, SanitizeHtml (DOMDocument allowlist) - ProcessMediaUpload job (GD, 4 sizes, aspect-ratio contain) - 63 new tests: 78 passed total
…erience - Theme/ThemeFile/ThemeSettings/Page/NavigationMenu/NavigationItem models - NavigationService (cached trees, URL resolution), ThemeSettingsService - Money formatting helper per spec - Storefront layout: announcement bar, header nav, footer, cart drawer shell, dark mode, skip links - Livewire storefront: Home, Collections Index/Show (filters/sort/pagination), Products Show (gallery, variant picker, stock states), Pages Show - Blade components: product-card, price, badge, quantity-selector, breadcrumbs, pagination - 27 new tests: 105 passed total; npm build green; real-env smoke test OK
- Models + factories: Cart, CartLine, Checkout, ShippingZone/Rate, TaxSettings, Discount - PricingEngine deterministic 7-step pipeline, largest-remainder allocation - DiscountService (6 error codes, automatic stacking), ShippingCalculator (zone specificity), TaxCalculator + Manual/Stripe providers - CartService with optimistic versioning, session binding, merge-on-login - CheckoutService state machine (started→addressed→shipping_selected→payment_selected→expired) - Storefront REST API: cart + checkout endpoints per spec 02 (409/410/422 semantics) - Livewire cart drawer, cart page, checkout stepper (payment step placeholder for Phase 5) - Scheduled jobs: ExpireAbandonedCheckouts (15min), CleanupAbandonedCarts (daily) - 114 new tests: 219 passed total
- Models + factories: Customer (full), CustomerAddress, Order, OrderLine, Payment, Refund, Fulfillment, FulfillmentLine - MockPaymentProvider (magic cards, PayPal, deferred bank transfer) + PaymentService - OrderService: atomic order creation, sequential numbering, idempotency, guest linking, digital auto-fulfillment, bank-transfer confirmation - RefundService, FulfillmentService (payment guard) - 9 domain events + audit-log listener + inventory release listener - completeCheckout + /pay API + order status API (HMAC token) - Checkout payment step UI + confirmation page - CancelUnpaidBankTransferOrders job (daily) - 75 new tests: 294 passed total
- Admin auth: Login/Logout/ForgotPassword/ResetPassword (Flux UI, rate-limited, generic errors, current_store_id on login) - Customer auth: Login/Register/Forgot/Reset with store-scoped token repository + broker, guest cart merge on login - Account pages: Dashboard, Orders Index/Show (timeline), Addresses CRUD - Email verification routes - 48 new tests: 342 passed total
- Admin layout: sidebar (role-aware nav), topbar (store switcher, profile), breadcrumbs, toasts - Dashboard: KPI tiles, 30-day SVG orders chart, recent orders, date ranges - Products: index (search/filter/sort/bulk actions) + shared create/edit form (options builder, variant matrix, media upload) - Inventory: inline quantity adjust, policy toggle, stock filters - 29 new tests: 371 passed total
- Orders: index with filters/search, detail with timeline/payments/fulfillments/refunds - Confirm bank-transfer payment, cancel with inventory release, fulfillment + refund modals with guards - Customers: index/show with stats, editable info - Discounts: index + shared form (rules builder, state machine transitions) - 47 new tests: 418 passed total
- Collections: index + shared form with product picker/reorder - Pages: CRUD with sanitization fix (xml encoding artifact) - Navigation: menu management with typed items + reorder - Settings: general/domains/checkout/notifications tabs, shipping zones+rates CRUD, tax config with per-zone overrides - Themes: cards with publish/duplicate/delete, three-pane settings editor - 44 new tests: 462 passed total
- products_fts FTS5 virtual table migration + SearchService (search/autocomplete/sync/reindex, synonyms + stop words, facets) - ProductObserver auto-sync - Storefront search API (/search, /search/suggest) with throttle - Search modal (autocomplete, ARIA combobox) + search results page (filters/sort/pagination) - Admin search settings (synonyms, stop words, reindex, recent queries) - 54 new tests: 516 passed total
- AnalyticsEvent/AnalyticsDaily models + AnalyticsService (dedupe, daily metrics with live fallback) - POST /api/storefront/v1/analytics/events batch ingestion (validation, dedupe, throttle) - Server-side tracking in CartService/CheckoutService/OrderService (failure-safe) - Storefront JS page_view/product_view snippet (sendBeacon) - AggregateAnalytics daily job (01:00 UTC) with all metrics - Admin analytics page: KPIs, sales/traffic charts, funnel, top products, search queries - 33 new tests: 549 passed total
- Models: App/AppInstallation/OauthClient/OauthToken/WebhookSubscription/WebhookDelivery (+encrypted casts) - WebhookService (HMAC sign/verify), DeliverWebhook job (5 headers, backoff, circuit breaker), DispatchWebhooks listener (8 events) - Developers UI: Sanctum token management (shop_ prefix, once-only display), webhook subscription CRUD + deliveries - Apps UI: directory, install/uninstall, detail - Admin REST API: platform, products, collections, orders (+CSV export) with ability middleware + route-based store resolution - 85 new tests: 634 passed total
- 19 idempotent seeders: 2 stores, 5 users/roles, settings, tax, shipping, themes, collections, 30 products with full variant graphs, discounts, customers, orders (#1001-#1015/#5001+), pages, navigation, analytics - products_fts reindexed; migrate:fresh --seed verified clean and idempotent - SeedersTest: 15 tests / 215 assertions; 649 passed total - Real-env smoke: both storefronts + search + admin login 200
…gging - Styled 404/503/403/500 error pages (storefront family, dark mode) - A11y: skip links, dialog ARIA, focus traps, heading levels; 12 accessibility tests - Order emails: confirmation/shipped/cancelled/refunded mailables + failure-safe listeners - Audit: auth.login + product.created/updated structured entries - 26 new tests: 675 passed total; pint clean; npm build green
…ypal pay - Livewire persistent middleware registered (parameter-less variants ResolveStorefrontStore/ResolveAdminStore/CheckAnyStoreRole + verified + customer auth) fixes 500 'Target class [current_store] does not exist' on all Livewire actions - Skip validate() with empty rules for paypal/bank_transfer (Livewire v4 MissingRulesException) - Favicon SVG link in all layouts (kills /favicon.ico 404 console error) - Regression tests: bank transfer + paypal pay through checkout page
…on sort - Taxes settings: wrap radios in flux:radio.group (Flux JS error) - Apps install: pass catalog index instead of @js(name) in flux:button attr - Developers: plain-string clipboard copy for token/secret - Collection sort: reorder() before applying non-default sorts — pivot position orderBy from the relation dominated every custom sort - Regression tests: collection price sort, bank transfer + paypal pay
- Topbar: smaller store-name cap on mobile, hide profile name below sm - Order show: min-w-0 on grid columns (grid item overflow) - Rebuilt assets for new utilities
- tests/Pest.php: Browser suite registration + bindBrowserStorefrontDomain + actingAsAdmin helpers (in-process server resolves 127.0.0.1 to seeded store) - phpunit.xml: file session driver for browser tests - playwright + chromium installed - SmokeTest: 3 passing (home, admin dashboard via actingAsAdmin, admin login) - Note: press() clicks the first exact-text match (headings too) — use CSS selectors for ambiguous buttons
…nventory, cart, checkout, admin auth, products, collections, pages) - SmokeTest 10, Browsing 15, Inventory 4, Cart 12, Checkout 13 (storefront) - Admin: Authentication 10, ProductManagement 7, Collections 3, Pages 3 - Patterns: CSS-explicit press targets, actingAsAdmin, bindBrowserStorefrontDomain
…lete browser suite - Discount form: valueAmount input never rendered (inline @if inside <flux:input> component tag broke Blade compilation) — all discount create/edit paths affected - Tax provider values aligned to spec: none/stripe_tax (was manual/stripe, which made tax settings unsaveable with seeded data) - Storefront toast system + 'Address saved' feedback - Browser tests use real UI paths now (workarounds removed) - Full suite: 678 unit/feature + 143 browser = 821 tests green
… MCP - Tour screenshots in .playwright-mcp/review/ - progress.md: all phases complete
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.




No description provided.