Skip to content

LevPro sd-app Full Port — closing log

Closes sdc-sdapp-full-levpro-port (opened 2026-08-29, closed 2026-09-01, 18 rounds). Full history: git log -p on the task file; pre-round-14 detail archived in monorepo b1f8b1f and earlier commits.

Ported Talbot’s VB6 LevPro desktop app to sd-app (SvelteKit PWA), full parity + upgrades, across 3 strategies (interest-only, term-loan, RRSP Catch-Up):

  • Full UI port — complete input sets, historical/monthly toggles, Investor-Info Loan-Amount⇄Annual-Investment/Payment toggles, 7 investment-type presets (6 + Custom Mix), auto-recompute (no Calculate buttons).
  • Math engine — sd-math, VB6-derived golden fixtures, M5-audited, 260 tests.
  • On-screen chartsComparisonBarChart, MultiLineChart, upgraded past LevPro’s primitive dual-axis originals.
  • Bilingual EN/FR — 231/231 keys, LevPro’s own French recovered from an encoded cipher and verified against the BMO-translated source.
  • Licensing — Stripe Checkout subscription (Talbot’s delegated pick), entitlement gate, all 3 screens.
  • W1 Setup + taxation — curated per-province profiles + Advanced override; 20/26 frmProgramSetup.frm controls mapped, 6 unmapped with recorded reasons.
  • W2 Provincial coverage — all 13 provinces/territories, QC’s limited-deductibility flags; a regression test asserts no tax-rate field ever ships in the payload (never invent financial data).
  • W3 PDF parity + Print Options — diffed against Sample Printout.pdf; found and fixed 4 real defects (missing Assumptions block, suppressed 0 values, missing Notes lines, no signature block) that 18 self-referential tests had missed. Print Options panel ships all 4 LevPro checkboxes + the “Prepared for” field. packages/pdf-reports carved out post-parity.
  • W4 Welcome/About/Account — 54 controls inventoried; company-name persistence wired through to PDFs.

Final green bar: 260 sd-math + 110 sd-api + 5 pdf-reports + 41 sd-app vitest, pnpm check 0 errors, pnpm build clean, lint clean.

WhatWhere
App plan, archive map, workstream gatesapps/sd-app/ROADMAP.md
ADRs 0001–0005apps/sd-app/docs/adr/
Review guideapps/sd-app/docs/Review-LevPro.md
Port audit + LevPro reference screenshotsapps/sd-app/docs/audit/, docs/reference/
Key commitsmonorepo c79c1ff, 6dc9549, aadfa9a, 2ed33fe, ceac92b

Process fixes this task drove (now in AGENTS.md / SMTM)

Section titled “Process fixes this task drove (now in AGENTS.md / SMTM)”
  • SMTM v5.7 Continuation Gate (/task-complete Step 4c) — no task closes without a named/verified successor or an explicit terminal reason. Direct fix for this task’s own round-7/8 breakage (successor thread dropped twice).
  • /task-continue Path to Completion block (Step 6b) — every round ends with an exact next command, not just a list of decisions.
  • Review-guide check/task-complete now verifies a review guide exists and is current before closing; caught Review-LevPro.md genuinely stale mid-task (listed shipped features as “not built”).
  • /task-compact skill — built and tested on this file (105,899 → 18,475 bytes, −82.6%), now a 4th option on the creep gate.
  • GlobalDevRules.md §3.10 — dev artifact placement (KB = context + pointers, repo = the artifacts).
  • GlobalDevRules.md §3.12 (new, this close) — archive-as-spec beats screenshot-elicitation for legacy-app ports; concurrent-subagent handoff-file protocol.
  • AGENTS.md (this close) — self-referential test suites can’t catch spec-fidelity defects; Word 97 .doc extraction via latin-1 regex scrape.
  • Encoded language files trapLatest Release\english.txt/french.txt are EncodeLanguageFiles.exe output, not readable strings. Real plain-text sources: Translation for LevPro 4.0.txt, Languages\french-before BMO Translator.txt (both CR-only line endings, tr '\r' '\n').
  • Word 97 .doc layout specs fail markitdown — latin-1 printable-run regex scrape instead (see AGENTS.md).
  • Don’t rebuild a _WorkingOn/Projects/SD-App/ scaffold — archived 2026-08-27; the repo (apps/sd-app/ROADMAP.md/STATUS.md) is the SSOT.
  • Don’t ship a per-province marginal-tax-rate table — no authoritative source; LevPro itself made the advisor enter it. ADR-0002.
  • Computer-use / driving the live LevPro app was evaluated and rejected — the .frm VB6 source is strictly more precise than reading pixels.
  • The ~$110 Console API credits are a separate pool from Claude Code’s Pro-subscription billing — never consumed by this work regardless of session length.

SDC/IT/Tasks/sdc-sdapp-deploy-miniapp.md now carries: Cloudflare Pages + Stripe account creation (Talbot-only), SDC/Risks review of W1’s Advanced tax override (gates production), ADR-0005 confirmation, ADR-0002’s D2 reading confirmation, and the frmPrintOptions.frm radio-group question.