Phase 3 J/K/L: Sell Decision + Trade Execution + Portfolio Reconciliation (+ fix pre-existing build/boot breakage) #28
Reference in New Issue
Block a user
Delete Branch "feat/L-vs14-portfolio-reconciliation"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
PHASE_3_IMPLEMENTATION_PLAN.md.maindid not build and the Host had never successfully booted before this PR (see "Root-cause fixes" below). These were required to verify anything, not optional cleanup.Root-cause fixes (blocking, pre-existing on
main)PollyPackageVersionaccidentally deleted fromDirectory.Packages.props(brokeKArtSell.Host).MediatRdependency in Compliance/VS-04 that was never actually installed (ICommand/ICommandHandler/IMediatornever existed in this repo) and wiredEndpoint -> Handlerdirectly, matching this repo's established convention.SendOkAsync/SendAsync/SendCreatedAtAsync/SendNotFoundAsync,Description().WithName()) to the v7Send.*fluent API across ~10 endpoint files (the repo is pinned to FastEndpoints 7.1.0).0036/0038/0039/0040: rewritten from invalid T-SQL (IF NOT EXISTS ... BEGIN ... END) to idiomatic Postgres (CREATE TABLE/INDEX IF NOT EXISTS) — these could not apply to any fresh database before this fix.BuildingBlocksversions and caused type-mismatch compile errors:IKrxDataService,IOutboxWriter(ReconcileTradeHandler),IClock(ApprovalWorkflow/ApprovalPolicy).IClock(BuildingBlocks.Time) in place of directDateTime.Now/UtcNowacross 19 files to satisfy the architecture test for the AGENTS.md "no direct system time" rule (architecture tests now 13/13, were 12/13).Program.csDI (SellDecision, TradeExecution, PortfolioReconciliation, Compliance,Features/ApprovalWorkflow) — the Host had never successfully completed a boot with this code present.[DontRegister]) the older, route-collidingApprovalWorkflow/(Workstream H) endpoint set in favor ofFeatures/ApprovalWorkflow/(Workstream G, matches the documentedFeatures/<Slice>/convention). Kept for its existing test coverage; see DEBT-017 for the follow-up decision needed.New tech debt recorded (
TECH_DEBT_REGISTER.md)TradeExecution/PortfolioReconciliation(crash between the two writes drops the event silently).BuildingBlocks(partially resolved this PR); recommends a pre-implementation checklist step for future slices.Test plan
dotnet build KArtSell.sln -c Release— 0 errors, 0 warningsRegistered 34 endpoints,Now listening on :5002) — verified by actually starting it, not just by unit tests🤖 Generated with Claude Code
Completes VS-10/VS-12/VS-14 and makes the solution and Host actually build and boot for the first time on this branch (main did not build before this commit). Root-cause fixes required to reach a green build/boot (not scoped to J/K/L but blocking any verification of it): - Restore Polly PackageVersion accidentally deleted from Directory.Packages.props (broke KArtSell.Host). - Remove MediatR dependency from Compliance/VS-04 (package was never installed; ICommand/ICommandHandler/IMediator never existed) and wire Endpoint -> Handler directly per this repo's convention. - Migrate FastEndpoints v5 API calls (SendOkAsync/SendAsync/ SendCreatedAtAsync/SendNotFoundAsync, Description().WithName()) to the v7 Send.* fluent API across ~10 endpoint files. - Fix migrations 0036/0038/0039/0040: rewritten from invalid T-SQL (`IF NOT EXISTS ... BEGIN ... END`) to idiomatic Postgres (`CREATE TABLE/INDEX IF NOT EXISTS`) — these could not apply to any fresh database before this fix. - Collapse 3 duplicate cross-cutting abstractions that shadowed the BuildingBlocks versions and caused type-mismatch compile errors: IKrxDataService, IOutboxWriter (ReconcileTradeHandler), IClock (ApprovalWorkflow/ApprovalPolicy). - Inject IClock (BuildingBlocks.Time) in place of direct DateTime.Now/UtcNow across 19 files to satisfy the architecture test AGENTS.md#DateTime-abstraction rule (13/13 architecture tests now pass, was 12/13). - Register all new and previously-unregistered slices in Program.cs DI (SellDecision, TradeExecution, PortfolioReconciliation, Compliance, Features/ApprovalWorkflow) — the Host had never successfully completed a boot with this code present. - Disable ("[DontRegister]") the older, route-colliding ApprovalWorkflow/ (Workstream H) endpoint set in favor of Features/ApprovalWorkflow/ (Workstream G, matches the documented Features/<Slice>/ convention); kept for its existing test coverage. See TECH_DEBT-017 for the follow-up decision needed. Verified: dotnet build 0 errors/0 warnings; architecture tests 13/13; unit tests 54/54 + 18/18; integration tests 34/36 (2 failures are a local test-DB migration-journal/schema mismatch, not a code defect); Host boots cleanly and registers all 34 endpoints. New tech debt recorded: DEBT-017 (duplicate VS-03 implementation), DEBT-018 (outbox write not co-transactional with entity write in TradeExecution/PortfolioReconciliation), DEBT-019 (duplicate BuildingBlocks-shadowing abstractions, partially resolved). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>