4.1 KiB
4.1 KiB
BAT-025 Developer Self-Verification
- Status: draft — initial independent QC failed on provenance/hygiene; re-QC pending
- Batch: BAT-025
- Requirement: REQ-057
- Date: 2026-07-15
- Scope boundary: local isolated PostgreSQL evidence only. No production DB, deployment, service activation, push, merge, or release action was performed.
Acceptance mapping
| REQ-057 acceptance area | Evidence | Result |
|---|---|---|
Explicit 0028 revision is the chain head |
alembic_version queried in a throwaway PostgreSQL DB after upgrade |
Pass — current revision 20260715_0028 |
| Existing broker/manual business data survives upgrade | Real 20260628_0027 → head upgrade after a representative pre-existing ledger row is inserted; row fields and metadata are asserted after upgrade |
Pass |
source is backfilled/defaulted/not-null |
Real upgrade asserts preserved row source='broker'; schema inspection checks text type, non-null constraint, and default |
Pass |
| Runtime-precreated metadata schema converges | Real test creates all four columns with nullable source, invokes bootstrap, and asserts source backfill/default/not-null plus current=head |
Pass |
| Representative broker/manual writes still work | Post-upgrade synthetic repository writes assert broker source and manual metadata fields | Pass |
| Earlier fresh PostgreSQL chain can reach 0028 | 0025 identity-column PostgreSQL incompatibility corrected and exercised by fresh throwaway DB migration path |
Pass |
| API/manual-ledger regression | tests/test_v1_portfolios_manual_ledger.py, tests/test_v1_portfolios_trades.py, tests/test_v1_portfolios_ledger.py |
Pass — 33 tests |
| Whole-repository regression | pytest with project dev extra plus temporary TestClient dependency overlay | Pass — 597 tests, 11 warnings |
| Lint/compile/diff hygiene | Ruff, compileall, git diff --check |
Pass |
Executed commands and results
BAT025_LOCAL_POSTGRES_DSN=[REDACTED local loopback maintenance DSN] PYTHONPATH=. uv run --extra dev --with httpx2 python -m pytest -q --override-ini addopts='' -p no:cacheprovider tests/test_bat025_portfolio_ledger_manual_metadata_migration.py- 3 passed in 6.10s.
- Each test creates and removes a UUID-named database on local loopback PostgreSQL; it refuses non-loopback hosts and non-
postgresmaintenance databases.
PYTHONPATH=. uv run --extra dev --with httpx2 python -m pytest -q --override-ini addopts='' -p no:cacheprovider- 597 passed, 11 warnings in 41.41s.
- Warnings are Starlette deprecations for
HTTP_422_UNPROCESSABLE_ENTITY; they are not BAT-025 failures.
uv run --extra dev ruff check app/db/migrations.py migrations/env.py migrations/versions/20260605_0025_ledger_consolidation.py tests/test_bat025_portfolio_ledger_manual_metadata_migration.py- All checks passed.
python3 -m compileall -q app migrationsandgit diff --check- exit 0.
Evidence boundaries and blockers
- The local container is an isolated test target, not a staging or production database.
- No production backup/restore, lock-duration measurement under production load, migration run against an operational DB, deploy, or service activation was attempted.
- The test command uses a transient
httpx2overlay because this environment's resolved Starlette TestClient requires it while the project declareshttpx; no dependency source change was made for this batch. - The initial independent QC reproduced the technical evidence but returned FAIL because the then-committed document described the remediation as uncommitted and its test run produced an untracked
uv.lock. This follow-up corrects provenance/hygiene only; independent re-QC must inspect the follow-up committed diff before a QC verdict can change.
Gate result
- Developer self-verification: complete for committed remediation
779d6f7711d700d6f56be22023cb826cc6f2fe28. - Initial independent QC: FAIL — documentation provenance and untracked
uv.lockhygiene only; technical ACs reproduced. - Independent re-QC: pending.
confirm-batch-verification: not eligible until re-QC PASS.- M5 release / operational migration: not started and remains blocked.