sdc-sdapp-pdf-reports — closing log
PDF Report Generation — closing log
Section titled “PDF Report Generation — closing log”What shipped
Section titled “What shipped”WeasyPrint chosen over ReportLab for sd-api’s PDF reports (HTML+CSS template, native SVG chart embed, same-stack fit). All 3 strategies (interest_only, term_loan, RRSP Catch-Up) × projection/historical × EN/FR, gated on domain facts (pdfplumber text-extraction vs. golden fixtures, plus visual PNG render-and-inspect — this is how a real non-deterministic WeasyPrint font bug was caught and fixed). Carved out into standalone packages/pdf-reports/ (round 1, prior session) so other SDC apps can reuse it without depending on all of sd-api. 110 sd-api + 5 pdf-reports tests, all green.
Round 1 (2026-09-01) verified and closed this as done — everything above had already shipped in prior sessions (commits 7fb3be1→aadfa9a, ceac96b).
Rounds 2–7: process/workflow fixes, not PDF work
Section titled “Rounds 2–7: process/workflow fixes, not PDF work”Talbot’s review of round 1’s close surfaced a chain of real gaps in the /task-continue//task-complete skills themselves — each fixed at the skill source (~/ai-config/claude/commands/task-continue.md), not just patched in this file:
- Project SSOT must never point at a task file — task files get deleted on close (
/task-completedisposition B); round 1’s SSOT link died same-day when its target task closed. - Windows paths in a KB task file need plain WSL+Windows paths, not a guessed link protocol (
wslfile://,vscode://file/) — neither has a confirmed handler. First fix attempt swapped one guess for another; caught and corrected to the format that needs no handler at all. - Bare Windows paths in markdown silently mangle — backslash-escape parsing eats characters after every
\. Fixed: wrap every path in a backtick code span. Goal met:/Docs updated:fields added to the Path to Completion schema, required whenever a round proposes/task-complete— a round can name the right next command and still never state whether the task’s own Goal was satisfied or whether any new tool/artifact choice got documented anywhere durable.- Two real doc gaps found and fixed:
packages/pdf-reports/had no README (WeasyPrint’s rationale lived only in a code docstring);apps/sd-app/had no README either (itsCLAUDE.mdpredated this monorepo’s STATUS.md-based sub-project convention, never actually scaffolded). Both added, matching thesites/mbrsub-project precedent. pnpm test:pywas silently skippingpdf-reports’ whole test suite — found while fixing the README gap, not something anyone had flagged. Fixed (test:py:pdfadded, wired intotest:py).- A “Related open tasks: None found” claim was wrong — asserted from memory instead of actually running the derivation. Root-caused and the actual related task (
sdc-sdapp-deploy-miniapp) surfaced. - An unanswered Next Steps checkbox got silently treated as resolved by a different, similarly-themed item in Talbot’s next reply — a real ask (research Obsidian/computer-use access + testing-cycle friction) went missing for a full round. Fixed in the skill: an unanswered checkbox must carry forward unless it gets its own indented reply or an unambiguous top-level sentence naming it.
Where the spun-off threads live now
Section titled “Where the spun-off threads live now”- Obsidian↔WSL link mechanism —
Core/Processes/Projects/KB-OS/Tasks/frictionless-docs-links.md(already existed,status: ready, found only via a lateqmd search). Cross-linked with the plugin-evaluation evidence from round 4–5 (External File Embed and Link = OS-default-app only; Markdown Anywhere = needs a companion.exe+ vault symlinks, not adopted). - Broader testing-cycle/agent-verification friction —
Core/IT/Tasks/web-testing-system.md(already existed, paused). Round 4’s ask (Obsidian access, computer-use for local web/Electron apps) appended there as a “Related follow-up” section. sdc-sdapp-deploy-miniapp(Rock #2) — the natural next SDC/IT work, blocked on Talbot’s own CF Pages + Stripe account creation.
Lessons promoted (AGENTS.md, commit 47a57fa)
Section titled “Lessons promoted (AGENTS.md, commit 47a57fa)”- Windows paths in markdown need backtick code spans — bare backslashes get silently eaten.
qmd searchbefore evaluating/installing a new tool for a friction point, not only at a task’s mandatory close-time dup-check.
Continuation
Section titled “Continuation”Terminal — nothing follows from this task specifically. Its own scope (PDF generation) shipped round 1; every later round’s output already has its own home (listed above).