M9-S8: seller-obligation e2e + M9 close housekeeping#113
Merged
Conversation
Closes the M9 Seller Console milestone (the slice plan's close, renumbered from S7 to S8 after the cross-queue race fix took S7). - Seller-perspective Playwright e2e (client/e2e/tests/seller-obligation.spec.ts): a seeded listing sells via the dev Buy-It-Now trigger, the seller console surfaces the post-sale obligation, the seller provides tracking through the console UI, and the obligation auto-confirms to Fulfilled. Identity bridge = seed-then-inject the seeded sellerId into the console session (no backend change). Two consecutive green runs against the live Aspire stack. - AppHost sets Obligations__DemoMode=true so the post-sale lifecycle runs live in demo seconds (the documented conference-demo posture; production defaults to false). The dev host previously ran production timers (days), making the lifecycle un-demoable and the e2e terminal unreachable. - Docs: bounded-contexts.md (three SPAs + shared + e2e), STATUS.md regenerated to v0.7 (M9 complete, 328 backend / 189 Vitest / 2 e2e), milestone doc closed + §7 renumbered + §1 ticked, narrative 006 e2e-coverage row. - CI frontend coverage verified (seller+shared already covered since M9-S1). - Pre-M10 skills audit: frontend-slice-discipline extended (all SPAs + e2e; host runtime config is part of the lived surface); signalr refresh + FakeHubConnection extraction recorded as M10 carry-forwards. - M9-S8 slice retro + M9 milestone retrospective. Backend 328/328 green; SPA Vitest 189 green; e2e member type-checks clean.
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.
Closes the M9 Seller Console milestone — the slice plan's close (renumbered from S7 to S8 after the
CatalogListingViewcross-queue race fix took S7 mid-milestone).What's in this PR
Seller-perspective Playwright e2e (
client/e2e/tests/seller-obligation.spec.ts) — the milestone's last owed artifact and the full obligation-lifecycle e2e M9-S6 deferred here. From the seller console's vantage: a seeded listing sells (forced via the dev Buy-It-Now trigger), the console surfaces the post-sale obligation, the seller provides tracking through thereact-hook-formdialog, and the obligation auto-confirms toFulfilled/ "Completed". Two consecutive green runs against the live Aspire stack (17.6s, 13.3s).Sanctioned dev-host config — the AppHost now sets
Obligations__DemoMode=true. Reading the lived host config (frontend-slice-discipline Rule 1) surfaced thatObligationsOptions.DemoModedefaulted to false in the dev run, so the post-sale lifecycle ran on production timers (auto-confirm 3 days out) — making it un-demoable live and the e2e terminal unreachable. Enabling demo mode is the documented conference-demo posture; production bindsDemoMode=falseby default. (Escalated and user-confirmed mid-session, since it exceeded the "no backend change" envelope.)Identity bridge = seed-then-inject (OQ-1) — the dev
seed-flashendpoint already creates a registered seller + open listing; the e2e injects thatsellerIdinto the console's session storage so the console adopts the seeded identity. No backend change; operator session management stays out of the seller console (milestone §3 non-goal).Housekeeping
bounded-contexts.md: three SPAs +shared+e2e(was two SPAs).STATUS.md: regenerated to v0.7 — M9 ✅ Complete, final slice ledger, 328 backend / 189 Vitest / 2 e2e, deferred ledger re-derived.CLAUDE.md§Frontend: verified current (no edit needed).frontendmatrix: verified it already coversseller(build-test) +shared/e2e(typecheck) — coverage landed at M9-S1, restructured at fix: remove shouldUnregister bug + CI pipeline restructure #111. No matrix edit.Pre-M10 skills audit (per the
m9-skills-reviewcarry-forward)frontend-slice-disciplineextended to all SPAs + the e2e harness, and a Rule 1 note that host runtime config is part of the lived surface (the DemoMode lesson).createSignalRProviderfactory + the obligation push channel), theFakeHubConnectionshared test-util extraction.Retros: the M9-S8 slice retro + the M9 milestone retrospective.
Verification
dotnet buildclean (0 errors; heldNU1903+CS0108baseline warnings only).dotnet test CritterBids.slnx: 328/328 green (Auctions 77, Api 46, Selling 45, Relay 45, Operations 38, Settlement 30, Listings 24, Obligations 16, Participants 6, Contracts 1).@critterbids/e2etype-checks clean.Notes for review
.cschange is one line insrc/CritterBids.AppHost/Program.cs(theDemoModedev-host env var). NoCritterBids.Contractschange, no new domain events/sagas/BCs.e2emember is type-checked in CI, not executed.