Files
trex-core/docs/releases/rel-012_20260717_cost-basis-safe-sync-seed-hotfix.md
T

6.8 KiB
Raw Blame History

REL-012: cost-basis canonical parse 및 안전 sync seed 긴급 핫픽스

  • Status: Draft / Release-Pending
  • Profile: app-service
  • Priority: urgent
  • Owner: 팀장 / 운영팀
  • Included batch: BAT-058 (REQ-123)
  • Source discovery: dcy-038
  • Batch verification: BAT-058 verification — lead confirm-batch-verification, QC-7 PASS-WITH-NOTES
  • Operations handoff: REL-012 deployment request

Release intent

portfolio-hub의 기존 cost-basis 응답에서 canonical cost_basis_per_unit을 우선 해석하고, broker quantity가 양수인 inactive-slot onboarding에서 WAC/avg_price를 얻지 못하면 live sync가 slot status/qty/avg_price/warning을 쓰지 않은 채 non-zero로 fail-closed하도록 한다. dry-run은 sanitized source/reason과 no-write preview를 제공한다.

Source publication boundary

Item Current evidence Release constraint
Remote origin/main 18bd8d9f0b7bb76b08303bbf8743e6ddf916de89 (2026-07-17 fetch) BAT-058 source is not included in this remote revision.
BAT-058 candidate 81a853a on origin/feat/dcy-038-cost-basis-safe-sync-seed Reviewed code + BAT/REL/runbook source is published; target remains subject to production approval.
Immutable deploy payload 81a853a Published and remote-ref verified 2026-07-17; this is the immutable code/test payload used for the daemon checkout.
Authoritative release manifest This REL-012/runbook revision on PR #43 A docs-only successor of 81a853a; it is not the daemon payload. Before execution, operations records both the immutable payload SHA and the exact manifest commit URL used for the approved runbook.

The immutable daemon deploy payload and the release manifest have distinct roles: 81a853a is the verified code/test payload; the REL-012/runbook document is an immutable docs-only successor on the same PR. Operations must record both revisions in its evidence. This document is a release draft and preflight request only. It does not authorize deployment, daemon restart, broker/portfolio access, sync --live, database writes, configuration activation, or credential access.

Included scope

  1. cost_basis_per_unit canonical priority parsing and approved legacy compatibility chain (avg_cost → wac → cost_basis) only when canonical is absent.
  2. Canonical invalid/null/non-numeric/zero/negative values are not silently masked by a legacy value; diagnostic reasons remain sanitized.
  3. Inactive slot + positive broker quantity + unavailable WAC: dry-run no-write preview; live non-zero fail-closed with no slot/warning mutation.
  4. Existing HOLDING reconciliation remains compatible; sanitized CLI/operator diagnostics preserve seeded_avg_price, source, and absence reason.

Explicit exclusions / no-go

  • portfolio-hub API/schema/auth changes, token/config changes, dependency upgrade, DB migration, direct DB edit/delete, AMQP wire/topology change.
  • Any sync --live, --yes live write, automatic remediation, order action (enter/exit/cancel), or target portfolio selection.
  • Changing credential_fetch_enabled, break-glass mode, instance configuration, endpoint, or secrets.
  • Strategy daemon deployment.

A single-target sync --live --yes remains a separately approved post-release action even after this source rollout. It must not be used as a deployment smoke shortcut.

Draft verification evidence

Check Result Evidence / limitation
Independent QC-7 PASS-WITH-NOTES Legacy-invalid focused 8 passed, 19 deselected; affected suite 113 passed; full suite 833 passed, 47 skipped; Ruff/compileall/diff hygiene pass.
Release-prep full regression PASS 2026-07-17 delivery worktree: 833 passed, 47 skipped in 1.88s.
Focused Ruff PASS Changed adapter/reconcile/CLI and relevant tests: All checks passed!.
Focused compile check PASS Six changed source/test paths, compileall -q, exit 0.
Live broker, live PostgreSQL, production deploy NOT EXECUTED Outside batch verification and this draft; no claim is made.
Source publication PUBLISHED Immutable daemon payload 81a853a is remote-ref verified on origin/feat/dcy-038-cost-basis-safe-sync-seed; authoritative REL/runbook is a docs-only successor in PR #43. Operations records both revisions before execution.

Release approval gates

All items must be satisfied before operations executes the runbook:

  • Git-ops published the reviewed source and initial REL/runbook draft; target 81a853a is remote-ref verified on origin/feat/dcy-038-cost-basis-safe-sync-seed.
  • Operations verifies the exact immutable daemon payload SHA and records the exact immutable REL/runbook manifest commit URL used for the run; captures the actual deployed revision as ROLLBACK_REVISION.
  • User/approver explicitly authorizes production execution and the approved off-market window is recorded.
  • Operations confirms the source checkout is clean; existing runtime configuration and credential/break-glass modes will not change.
  • Operations confirms no dependency or migration delta exists between ROLLBACK_REVISION and the exact target SHA.
  • Operations records the approved supervisor method, instance key (redacted as necessary), and post-deploy observation owner.

Rollout and rollback policy

  1. Use the pinned immutable source only; use the host’s existing approved supervisor to restart the same daemon with unchanged approved configuration.
  2. After startup acceptance, run only the read/dry-run commands in the REL-012 runbook.
  3. Stop and roll back on startup failure, traceback/error regression, unexpected credential/source-mode behavior, unexpected mutation indication, or smoke output that violates the no-write/fail-closed contract.
  4. Roll back by restoring the actual captured ROLLBACK_REVISION and restarting with unchanged configuration. Do not run database rollback commands, direct DB edits, or live sync.

Evidence required for confirm-release

Operations returns a secret-free record containing: approver/window/operator; ROLLBACK_REVISION and target SHA; clean-checkout/preflight result; restart/startup result; dry-run smoke and verify exit/status summaries; observed no-write/fail-closed classifications; and rollback disposition. The lead then reviews that evidence before changing REL-012 from Draft / Release-Pending.