Verify · 001-portfolio-analytics

Real-time portfolio analytics

How to run, demo, and verify this feature — aggregated from the spec and tasks, with a Run/Demo block grounded in the run that actually happened.

Generated from spec.html · tasks.html Derived status accepted (from spec.html — this view carries no status of its own) Read time

A derived view — regenerate with spectastic verify 001-portfolio-analytics; do not hand-edit. The trace links are aggregated from the bundle; only the Run/Demo block is authored, from the real run.

1 · Run / Demo

portfolio.analytics.enabled=false — the analytics REST surface ships dark (P-8); the test profile flips it on export JAVA_HOME="$(asdf where java temurin-21.0.9+10.0.LTS)" && mvn verify Run mvn verify: 20 tests pass. ReconcileToReplayTest folds a 3,000-event stream and shows incremental analytics equal a from-zero replay and that restore(snapshot@N)+tail equals the continued fold; AnalyticsPlatformTest and the @QuarkusTest drive one trade stream through positions, weights, and tax lots at once (realized 650.00, net 50, weight 1.0), and a fourth trivial fold is added over the ledger with no ledger change.

2 · Verification trace

Every success criterion, traced to its acceptance scenario and the test task that closes it.

Success criterionAcceptanceProof (tests)
SC-001US1T-100
SC-002US3T-300

3 · Observables trace

Every reliability NFR, traced to its SLO — objective, SLI, and golden signal. Micrometer times the folds these SLOs measure.

NFRObjectiveSLISignal
NFR-001p99 < 1 mstrade-or-tick to all affected analytics updated, in-process (good ÷ valid)latency
NFR-00299.999% of daily reconciliations bit-match replayincremental-vs-replay reconciliations matching to the centerrors
NFR-003hot-set RSS < 4 GB at 1e9 lifetime tradesresident hot-set bytes ÷ the 4 GB ceiling, at peaksaturation