Тема
Tech Debt — Resolved & Archived (immutable history)
Снимок закрытых TD-entries и тех, что относятся к архивированным стратегиям (per ADR-024). Living tech-debt backlog —
docs/operations/tech-debt-backlog.md.Файл immutable: создан 2026-05-20 при разделении backlog'а. Новые закрытия добавлять append-only.
Header history (хронология обновлений backlog'а)
Сводки циклов из старого backlog'а — оставлены для traceability.
2026-05-06 (Spec-Driven Coverage Phase 0 — test-coverage audit) — Doc-only sub-round. Созданы
docs/operations/test-coverage-matrix.md(172 rule-IDs G/BA/DIR/MK/MR/MA),docs/specs/feature-liveness-matrix.md(143 LIV-IDs across 50 feature groups, 16mappedpost-TD-31/32 closure — LIV-1.4 viatests/rtds_hook_e2e.rs, LIV-1.7 viatests/rtds_active_cancel.rs— plus 2partialдля LIV-1.3 и LIV-1.9; 125unmappedstrict + 2 partial),docs/operations/acceptance-criteria-trading.md(10 Gherkin AC для top critical paths),test-audit-report.md(1572 tests classified into Bucket A=210 / B=1230 / C=47), иphase-0-signoff-2026-05-06.md(BLOCKING gate — 6 decision points D1..D6). Newpm-test-utilscrate (2985 LOC, 73 unit tests, clippy clean). CI gatescoverage.yml+mutation-nightly.yml. Helper scriptsscripts/{check-requirement-coverage,check-liveness-coverage}.py. Cross-mapping сliveness-audit-2026-05-06.md: TD-31 + TD-32 CLOSED; TD-33 PARTIALLY CLOSED. 22 NEW TDs (TD-35..TD-56) для silent-broken-suspect LIV-IDs — full table вtest-audit-report.md. 8 HIGH-risk financial-system gaps escalated. Memory anchors:feedback_spec_driven_tests,feedback_silent_feature_broken,feedback_worktree_isolation.2026-05-04 (ADR-009 Phase 9 — legacy cleanup) — По прямой user-авторизации удалено ~5.0 KLOC legacy capture/replay кода:
crates/pm-bot/src/io/clob/simulator/{engine,replay}.rs(≈2.4 KLOC),crates/pm-bot/src/persistence/capture/poller_compat.rs+ tests (≈546 LOC),crates/pm-bot/tests/e2e_hook_parity_replay.rs(103 LOC), весьxtask/workspace member сmigrate-cyyz-to-parquet(≈559 LOC),.cargo/config.toml(xtask alias), и 260 MBcyyz-poller.dbsource artifact. pm-analytics'replay/sweep/whatifsub-commands схлопнуты — JSONL.zstd / Parquet единственный принимаемый input. 4tests/e2e_*_replay.rsпереписаны на frozen-v1 Parquet branches. Workspace = 7 CORE members (xtask gone). Tests 1597 → 1561 green, 0 failed, 5 ignored.2026-05-04 (ADR-009 Phase 7 — test migration to capture-fixtures) — Мигрировано 9 cyyz-replay E2E тестов (bucket-arb / directional / maker / maker-rebate) и 3 ws_load теста из
#[ignore]на default-on.record_ws_fixtureretained как deprecated stub. Все replay-тесты читают inline frozen-v1 fixtures (~7.3 MB total). Новыйreplay_determinism.rs(10× identical SHA256 gate) +capture_smoke.rs(round-trip + Parquet schema parity). Workspace = 7 CORE crates + 1 utility (xtask).2026-05-03 (X2.5 — final closure docs + production-ready verdict) — Doc-only sub-round. Создан
multi-wallet-migration-runbook-2026-05-03.md(537 LOC). Закрыты TD-7 (paired maker-rebate) и TD-27 (dashboard rebuild). Verdict обновлён до READY for sustained 24/7 production. Implementation queue пуст впервые с создания файла. Тесты: 1071 pm-bot lib + 27 pm-cli + 28 pm-dashboard + 18 pm-sdk = 1144 green, 0 clippy.2026-05-03 (X2.1..X2.4 — ADR-015 multi-wallet sprint) — ADR-015 Accepted; X2.2 FE-1 encrypted
wallets.db(Argon2id + AES-256-GCM)- 6
pm-cli walletsubcommands; X2.3 FE-2 plaintextconfig.db+ 7pm-cli strategysubcommands + FE-5 budget predicate; X2.4 WebUI configurator (5 Vue views +/api/wallets/*+/api/strategies/*).
- 6
2026-05-03 (X5.1..X5.4 — TD-7 paired maker-rebate sprint) — ADR-011 Accepted; X5.2 pure evaluator + 17 unit tests; X5.3 state machine + integration tests (
Decision::CallMergePositions); X5.4 runbook. Lib tests 980 → 1014 (+34). Phase 1 single-side parity bit-identical приMAKER_REBATE_PAIRED_ENABLED=false. Теперь ARCHIVED-BY-024.2026-05-03 (X3 strategy bug-fix sprint) — TD-2 / TD-3 / TD-4 bundle: bucket-arb pricing-mode persistence + R8-2 drift detector + TUI badge. 964 lib tests, 0 clippy. Теперь ARCHIVED-BY-024.
2026-05-03 (TD-27 scope finalization) — ADR-012 Accepted (585 LOC). Split pm-dashboard на Rust axum backend + Vue 3 SPA. Stack: Vue 3 + Vite + TypeScript + Pinia + PrimeVue (Aura dark) + Chart.js
- Caddy + Docker Compose.
2026-05-03 (user-decision sweep) — User прогнал весь backlog через 5 AskUserQuestion раундов. Implement now / defer with architecture / delete для каждой строки. Удалены: TD-15, TD-16, TD-25, TD-26, testnet validation, Telegram / SMTP backends.
2026-05-03 (alerts + retention sprint) — TD-12a alerts engine (
application/alerts/, 4 stock rules, LogSink baseline, +27 lib tests); TD-11 RESOLVED viapm-cli journal gc+auto_prune(+16 lib tests).2026-05-03 (pre-production sweep) — TD-1 OBSOLETE, TD-6 RESOLVED, TD-8 RESOLVED, TD-17 OBSOLETE, TD-2/3/4/5 explicit deferral docs.
2026-05-03 (next-iteration polish N1..N7) — clean-rewrite db / journal schema ladder в single-shot installer at
schema_version = 1; TD-19 / TD-22 OBSOLETE; TD-21 + TD-23 + TD-24 RESOLVED; TD-18 RESOLVED.
RESOLVED
| # | Status | Closure notes |
|---|---|---|
| TD-1 | OBSOLETE 2026-05-03 | pm-orchestrator crate removed from the workspace; original NEG_RISK_ADAPTER_ADDRESS test-compile errors unreachable from the start. |
| TD-8 | RESOLVED 2026-05-03 | scripts/cleanup-worktrees.sh shipped (interactive listing + --dry-run + --force; skips primary checkout + locked worktrees). |
| TD-9 | MERGED into TD-27 | Reframed by user 2026-05-03: dashboard rebuild surfaces "trading terminal-style analytical info" — visually readable data из underlying log/event stream. Implementation tracked под TD-27. |
| TD-10 | MERGED into TD-27 | Comparison overlay tracked под TD-27 dashboard rebuild; reuses existing PrimeVue ui-components. |
| TD-11 | RESOLVED 2026-05-03 | pm-cli journal gc + application::auto_prune scheduler shipped (canonical journal::gc primitive, 4 env knobs, +16 lib tests). Runbook journal-retention-2026-05-03.md. |
| TD-12 | RESOLVED 2026-05-03 | Alerts engine + LogSink baseline shipped (application/alerts/, 4 stock rules, +27 lib tests). Историческая страница alerts-2026-05-03.md в docs/history/. |
| TD-13 | MERGED into TD-27 | Order management from UI scoped to cancel-only (no modify) by user 2026-05-03. ADR + impl под TD-27. |
| TD-14 | MERGED into TD-27 | Sharpe / Sortino / max drawdown tracked под TD-27 — analytical dashboard widgets. |
| TD-15 | DELETED in cleanup 9fe2e5f 2026-05-03 | Never user-scoped. |
| TD-16 | DELETED in cleanup 9fe2e5f 2026-05-03 | Never user-scoped. |
| TD-17 | OBSOLETE 2026-05-03 | local_api::serve и webhook::server уже разделяют axum with_graceful_shutdown pattern; backport не нужен. |
| TD-18 | RESOLVED 2026-05-03 | metrics_loop tokio::spawn wired в main.rs рядом с local_api::serve. Live SSE smoke 1Hz cadence со всеми Phase 7c + TD-21 RTDS counters. |
| TD-19 | OBSOLETE 2026-05-03 | Subsumed by clean-rewrite single-shot installer at schema_version = 1. |
| TD-20 | RESOLVED 2026-05-03 | bot_kv_state ships как часть clean-rewrite; HistoryWriterPersistClient implements PersistClient via DbCommand::PersistKv. |
| TD-21 | RESOLVED 2026-05-03 | RTDS observability metrics wired через BotEvent::MetricsTick (10 fields, forward-compat). |
| TD-22 | OBSOLETE 2026-05-03 | Обе ladders схлопнуты в единый init_schema + init_journal_schema pair stamped at schema_version = 1. |
| TD-23 | RESOLVED 2026-05-03 | pm-bot clippy warnings 43 → 0 (N4 polish batch). |
| TD-24 | RESOLVED 2026-05-03 | rtds_probe.rs HTML-tag rustdoc warning fixed in N5. |
| TD-25 | DELETED in cleanup 9fe2e5f 2026-05-03 | Telegram backend — never user-scoped. |
| TD-26 | DELETED in cleanup 9fe2e5f 2026-05-03 | SMTP backend — never user-scoped. |
| Testnet validation row | DELETED in cleanup 9fe2e5f 2026-05-03 | Never user-scoped. |
| TD-27 | RESOLVED 2026-05-03 (X1.0..X1.5b + X2.4 complete) | Dashboard UI redesign shipped end-to-end. X1.0 ADR-012 Accepted (585 LOC) — split pm-dashboard на Rust axum backend (REST + SSE proxy) + Vue 3 SPA at frontend/pm-dashboard-web/. X1.1 frontend scaffold + pnpm link to ui-components. X1.2 backend REST endpoints /api/local/*. X1.3 Pinia stores wired to SSE + REST. X1.4a darkPreset + PnL chart + WalletView migration. X1.4b chunks + Compare view + persistence + events + retired routes. X1.5a cancel UI hardening (single-row + 5s undo + paranoid bulk gate; ADR-013). X1.5b risk widgets (RiskBadge / Annualisation row / EquityCurve / DrawdownChart; ADR-014). X2.4 WebUI configurator (wallet/strategy CRUD + 5 Vue views; ADR-015 §D8/D9). Bundled TD-9 / TD-10 / TD-13 / TD-14. 28 pm-dashboard integration tests. Trading hot path bit-identical. |
| FE-1 | RESOLVED 2026-05-03 (X2.2 complete) | Encrypted multi-wallet store shipped per ADR-015. Encrypted wallets.db (Argon2id KDF + AES-256-GCM, per-DB salt) + 6 pm-cli wallet subcommands. pm-bot startup loader. BOT_WALLET_LABEL semantic-Optional ⇒ legacy .env path bit-identical при unset. WALLETS_MASTER_PASSPHRASE mandatory when label set. Migration runbook multi-wallet-migration-runbook-2026-05-03.md. Lib tests 1014 → 1071. Commit 0f2978f. |
| FE-2 | RESOLVED 2026-05-03 (X2.3 complete) | SQLite strategy-config store shipped per ADR-015. Plaintext config.db (strategies + strategy_audit tables) + 7 pm-cli strategy subcommands. strategy_audit FK на каждую mutation. INV-3 cross-check в main.rs. BOT_STRATEGY_LABEL semantic-Optional ⇒ legacy env-block path bit-identical. 27 pm-cli integration tests. Commit 33b0402. |
| FE-5 (base predicate) | RESOLVED 2026-05-03 (X2.3 complete) | Passive synchronous budget predicate shipped per ADR-015 §D6: budget_limit_usd ≤ wallet_balance + Σ(other enabled strategies' limits on same wallet_label). Runs at provisioning time only; NOT a runtime actor. WebUI form wires тот же predicate server-side (422 on failure). Reinvestment toggle — отдельная open запись в backlog. Commit 33b0402. |
| Headless MetricsTick ingest | RESOLVED 2026-05-03 (X6 cleanup batch) | tracing::info!(target: "metrics_tick", …) emit path always-on regardless of BOT_LOCAL_API_ENABLED. Headless monitoring (Prometheus log scraper / Loki / Datadog) consumes те же counters. Commit a611c35. |
| Phase 5.6.2 OrderClient struct migration | RESOLVED 2026-05-03 (X6 cleanup batch) | ADR-010 follow-up complete: Option<ClobExecutor> fields swapped to Arc<dyn OrderClient>; legacy struct branch removed. Commit a611c35. |
//! docs full coverage | RESOLVED 2026-05-03 (X6 cleanup batch + N5/N6 polish) | Module-level //! headers shipped на ~40 source files которым их не хватало. cargo doc --workspace --no-deps clean. Commit a611c35 + e53b73b. |
| Dry-run journaling parity | RESOLVED 2026-05-15 via OpenSpec fix-dry-run-journaling-parity | Dry-run path исторически писал только в fills table — positions_history и orders_history пустые потому что SimFillEngine и DryRunOrderClient эмитили только SideEffect::InsertFill. Consequences: directional-stop-loss blacklist seed всегда читал 0 rows on dry-run restart, dashboard "Закрытые (SELL P&L)" card стуктура $0 после 2888af4. Fix: Arc<HistoryWriter> через оба DryRun adapters, эмит PositionAccumulated / PositionClosed / OrderPlaced / OrderStatusChanged(EXPIRED) симметрично live path. close_reason через SimExitReason enum (gtc_99 / stop_loss / market_resolved / redeem / ttl_cancel) — никаких heuristic thresholds (memory feedback_no_dust_threshold_finance). 8 liveness integration tests в crates/pm-bot/tests/dry_run_journaling.rs. |
Archived (ADR-024 pivot — стратегии deferred/archived 2026-05-13)
Эти TDs относились исключительно к стратегиям, которые более не в активном scope после ADR-024: bucket-arb, maker, maker-rebate (включая paired), merge-arb, single-token-mm. Записи сохранены для traceability; при restoration соответствующей стратегии (см. docs/restoration-backlog/) — переоткрыть как новый TD.
| # | Original status | Notes (ARCHIVED-BY-024 2026-05-13) |
|---|---|---|
| TD-2 | RESOLVED 2026-05-03 | bucket-arb INV-20 retry pricing-mode persistence: process_bucket_arb_expiry_batch reads BUCKET_ARB_IMMEDIATE_FILL_ENABLED from live config; per-share ceiling, desired price, post_only flag, ManagedOrder.pricing_mode tag branch on the flag. Pure helper compute_repost_per_share_ceiling. Стратегия bucket-arb DEFERRED via ADR-024. |
| TD-3 | RESOLVED 2026-05-03 | bucket-arb R8-2 drift-cancel detector wired into BucketArbStrategy::evaluate_periodic; pricing-mode-aware live basket sums; BUCKET_ARB_DRIFT_CANCEL_MARGIN. 15 unit tests. Стратегия bucket-arb DEFERRED via ADR-024. |
| TD-4 | RESOLVED 2026-05-03 | TUI badge для bucket-arb immediate-fill orders: OrderPricingMode { PatientMaker, ImmediateFill } enum + pricing_mode: Option<OrderPricingMode> на ManagedOrder. 30 construction sites updated. TUI status column renders "PENDING IF" / "PARTIAL IF". Стратегия bucket-arb DEFERRED via ADR-024. |
| TD-6 | RESOLVED 2026-05-03 | BUCKET_ARB_DCA_* env vars документированы как DEPRECATED no-op. Стратегия bucket-arb DEFERRED via ADR-024. |
| TD-7 | RESOLVED 2026-05-03 (X5.1+X5.2+X5.3+X5.4 complete) | Two-sided maker-rebate placement (paired YES + NO) shipped end-to-end. X5.1 ADR-011 Accepted (537 LOC) — pure evaluator + RebatePairDecision enum, RebatePairState machine, three opt-in env knobs, on-chain CTF merge on BothFilled. X5.2 17 unit tests. X5.3 state machine wired в hooks + Decision::CallMergePositions + 16 integration-shape tests. X5.4 paired-maker-rebate-runbook-2026-05-03.md + sprints/td7-paired-maker-rebate.md. Phase 1 single-side parity bit-identical when MAKER_REBATE_PAIRED_ENABLED=false. Neg-risk paired emission explicitly out of scope. Стратегии maker-rebate / merge-arb ARCHIVED-BY-024. |
Superseded
| # | Superseded by | Notes |
|---|---|---|
FE-4 (Declarative Condition rule engine) | memory feedback_strategy_specific_typed_config + ADR-024 + openspec unify-orders-positions-signals-events design §D14 | REJECTED-BY-design 2026-05-21. Pre-existing implementation в archived pm-orchestrator (25+ leaf-condition enum) explicitly отвергнута per feedback_strategy_specific_typed_config («никакого universal condition engine»). Каждая стратегия декларирует свой typed Config struct (см. crates/pm-engine/src/strategies/directional/config.rs); SDK не предоставляет generic condition evaluator. Salvage path закрыт. |
Cross-references
- Living backlog:
docs/operations/tech-debt-backlog.md. - ADR-024 — пивот на directional-first, после которого strategy-specific TDs архивированы.
backlog-triage-2026-05-03.md— N7 triage artefact + post-user-decision addendum.production-readiness-2026-05-03.md— readiness snapshot до пивота ADR-024.sprints/— TD-серии (td3-b, td7-paired-maker-rebate и др.).