diff --git a/apps/api/tests/test_api/test_financial_service.py b/apps/api/tests/test_api/test_financial_service.py index ff71a0cc..61098a02 100644 --- a/apps/api/tests/test_api/test_financial_service.py +++ b/apps/api/tests/test_api/test_financial_service.py @@ -376,7 +376,7 @@ def test_financial_merge_uses_certified_ttm_when_provider_has_no_source(reason): assert _merge_financial_statement_rows([primary], [])[0].unavailable_reason == reason result = _merge_financial_statement_rows([primary], [fallback]) assert len(result) == 1 - assert result[0] is fallback + assert result[0].revenue == 40 assert result[0].unavailable_reason is None diff --git a/docs/qa-deployed-2026-10-08.md b/docs/qa-deployed-2026-10-08.md index 72bec815..ac8ef1aa 100644 --- a/docs/qa-deployed-2026-10-08.md +++ b/docs/qa-deployed-2026-10-08.md @@ -58,6 +58,13 @@ The [peer-corrected hosted run](https://github.com/Kohnnn/vnibb/actions/runs/379 The TTM merge now allows only a source-less missing/calculation-failed placeholder to yield to a matching certified stored TTM row. Source-bearing rejected rows and unknown units remain withheld. The direct smoke recovered revenue `40`; the existing public income-statement test returned stored revenue `520` and net income `104` for empty, missing-source and calculation-failed provider cases. All 156 financial-service/endpoint tests passed with one baseline NumPy warning; API compilation and changed-line Ruff passed. Hosted CI on this final change is still required. +Final [PR CI](https://github.com/Kohnnn/vnibb/actions/runs/37938294844) on `2274758` passed all four jobs: 157 suites/1,044 frontend tests and 1,621 backend passes/four skips. Standards and Spec reviews of the precedence repair found zero remaining findings. [PR #112](https://github.com/Kohnnn/vnibb/pull/112) merged as `0e5dfdd87a75bf755794727efd2470e52f24b0d2`; [main CI](https://github.com/Kohnnn/vnibb/actions/runs/37939636005) passed all four jobs and nine root steps in 373.0 seconds with the same counts. + +Canonical production frontend `vnibb-web.vercel.app` now resolves to READY deployment `dpl_CVbWJxYdHQQV7soRVhUgGM7MkMdb`, built from that exact merged SHA. Normal HTTPS `/api/live` and `/api/ready` returned HTTP 200. The immutable deployment URL is SSO-protected; public acceptance used the canonical alias without bypassing protection. The production smoke completed in 164.79 seconds: four workspaces, 20 tabs, 40/40 navigation checks and 12/12 classifier self-checks. Fast inventory bodies were two ready, 20 pending, six error, two unavailable and ten unknown; these are not 40 data-success surfaces. Quant warm reload left zero pending, nine unavailable and one unknown within 30 seconds. Six HTTP errors were the old API's Industry Bubble 404; all 100 failed requests were navigation cancellations, with zero outside navigation. + +A real browser MSR Quant replay visibly withheld momentum score/returns, signal, gap statistics, backtest and sweep on uncertified history. The backend still reports `2c57654277ef5546662afc3cc7ed4a4e355e441e`: both Tailscale additional-check sessions expired without human approval. No policy/host-key/TLS bypass was used. API/MCP/scheduler replacement and new-backend financial acceptance remain blocked; frontend fail-closed behavior does not certify provider data or deploy the backend changes. [Image publication](https://github.com/Kohnnn/vnibb/actions/runs/37940732576) passed and published merged revision `0e5dfdd87a75bf755794727efd2470e52f24b0d2` for `linux/arm64`, immutable tag `qa-20261009-0e5dfdd`, image `ghcr.io/kohnnn/vnibb-api@sha256:b1ec3141fce79a7077ba6e13c2099cd0eaf2d45f06f52f4e08b80866eaebd68e`. The downloaded manifest's revision, platform, repository and digest format were verified; publication is not OCI replacement. + +The separate five-scenario production replay completed in 90.78 seconds: MSR Quant and Technical consumers rendered unavailable states with no sampled legacy extreme-return/BUY/Strong Downtrend tokens; each checked consumer was matched to responses from its own navigation window. Invalid-tab navigation resolved to the real Quant tab and rewrote the URL; warm reload ended with ten unavailable widgets and zero loading. VNM shared TTM selected the period and disclosed unsupported TTM ratios. The old API also supplied populated statement values, including assets `55,677,822.01B VND`; these old-backend quantities are not financially validated and must not be treated as acceptance of the new normalization/lineage contract. Console errors were zero in the five scenarios; all 59 failed requests were navigation aborts. ## Historical QA record — superseded by the follow-up above diff --git a/qa-ticket-plan.md b/qa-ticket-plan.md index fc608636..a6b68d1d 100644 --- a/qa-ticket-plan.md +++ b/qa-ticket-plan.md @@ -32,7 +32,7 @@ Executed verification: TypeScript and production build passed; ESLint had zero e - [x] Preserve explicit unavailable TTM reasons for empty source results and ordinary calculation failures; the before/after service smoke failed/passed and all 29 financial-service tests passed. Cancellation propagation and null metrics remain intact. - [x] Preserve HTTPS certificate verification in the existing Oracle runtime/smoke scripts; public baseline smoke passed and an invalid trust bundle was rejected. -- [x] Run the uninterrupted release gate on frozen source: all nine steps passed, 157 suites/1,044 frontend tests and 1,610 backend tests with four skips. Review the scoped changes since `a7a301a` before commit. -- [ ] Commit only release-owned changes; publish and merge through the existing CI-controlled release workflow. -- [ ] Capture the current API image and Vercel rollback target, publish a revision-pinned image and deploy API/MCP/scheduler plus the canonical `vnibb-web` project. -- [ ] Verify live revision identity, health, price guards, financial unavailable states, navigation and warm reload; retain provider/data limits separately. +- [x] Run the uninterrupted release gate on frozen source and resolve review findings. Final PR and main CI passed all four jobs, 157 suites/1,044 frontend tests and 1,621 backend tests with four skips; the TTM fallback regression and React type-peer boundary are repaired. +- [x] Commit only release-owned changes; publish and merge through the existing CI-controlled release workflow. PR #112 merged as `0e5dfdd87a75bf755794727efd2470e52f24b0d2`. +- [ ] Complete backend rollout after renewed Tailscale SSH approval. Frontend rollback target is retained; canonical `vnibb-web` now serves READY `dpl_CVbWJxYdHQQV7soRVhUgGM7MkMdb` at merged revision `0e5dfdd`. ARM64 publication run `37940732576` passed with digest `sha256:b1ec3141fce79a7077ba6e13c2099cd0eaf2d45f06f52f4e08b80866eaebd68e`; API/MCP/scheduler remain on `2c576542` until approved replacement. +- [ ] Complete new-backend live acceptance after rollout. Frontend health returned HTTP 200, navigation passed 40/40, and warm reload left zero loading widgets. MSR price guards visibly withheld uncertified analytics; old-backend financial/provider limits remain separate from frontend success.