{"skill":"office-hours","type":"architecture","key":"own-ledger-month-entity","insight":"Each month is a self-contained entity that clones from previous. No live connections between months. Edits are month-scoped. This is the core architectural decision for the entire data model.","confidence":10,"source":"user-stated","files":["docs/Bill plan workbook summary.md"],"ts":"2026-04-02T07:25:31.237Z"}
{"skill":"office-hours","type":"preference","key":"own-ledger-dark-muted-checkboxes","insight":"User strongly prefers dark/muted styling for unchecked checkboxes. Bright white browser defaults are distracting on dark themes.","confidence":10,"source":"user-stated","files":[],"ts":"2026-04-02T07:25:31.876Z"}
{"skill":"office-hours","type":"pattern","key":"own-ledger-cc-payment-solver","insight":"User applies modular priority rules to credit card payments: higher priority gets min+fixed addon, lower priority gets min+capped, remainder after buffer goes to priority card. This is a constraint solver that should be a pure function.","confidence":9,"source":"user-stated","files":["docs/Bill plan workbook summary.md"],"ts":"2026-04-02T07:25:32.514Z"}
{"skill":"plan-eng-review","type":"architecture","key":"own-ledger-opening-balance-zero","insight":"Opening balance defaults to $0 on new months, NOT carried from previous month remaining. User says untracked charges between months make carry-forward inaccurate. This simplifies month cloning and makes months truly independent.","confidence":10,"source":"user-stated","files":["docs/Bill plan workbook summary.md"],"ts":"2026-04-02T09:30:28.491Z"}
{"skill":"plan-eng-review","type":"architecture","key":"own-ledger-bill-is-paid","insight":"BillDefinition needs is_paid:bool field. Was missing from original design doc. Cloned bills must have is_paid=false in new month. MISC SPEND items stay active when cloned.","confidence":10,"source":"user-stated","files":[],"ts":"2026-04-02T09:30:29.133Z"}
{"skill":"plan-eng-review","type":"pattern","key":"own-ledger-freeform-editable","insight":"Freeform CC bill amounts are NOT read-only. User can click-to-edit to override computed amount. Clearing the field reverts to CC solver computed value. Uses existing amount_override mechanism.","confidence":10,"source":"user-stated","files":[],"ts":"2026-04-02T09:30:29.775Z"}
{"skill":"plan-eng-review","type":"architecture","key":"own-ledger-cc-remainder-split","insight":"CC payment remainder should split evenly among ALL receives_remainder=true cards, not break after first. Leftover cent from integer division goes to highest priority card.","confidence":10,"source":"user-stated","files":[],"ts":"2026-04-02T09:30:30.433Z"}
{"skill":"plan-eng-review","type":"operational","key":"own-ledger-spike-first","insight":"Implementation order for this project: spike inline editing on Flutter desktop Windows FIRST before building data model. Flutter desktop text editing at 34px rows has known issues. If it fails, need to explore alternatives before investing in full scaffold.","confidence":9,"source":"inferred","files":[],"ts":"2026-04-02T09:30:31.083Z"}
{"skill":"plan-design-review","type":"preference","key":"own-ledger-priority-shapes","insight":"Bill priority indicators use shapes not just colors: green circle (normal), yellow diamond (late/pending), red square (urgent). User specified this for accessibility without making dots larger.","confidence":10,"source":"user-stated","files":[],"ts":"2026-04-02T10:20:18.325Z"}
{"skill":"plan-design-review","type":"architecture","key":"own-ledger-first-time-wizard","insight":"First-time experience is a 4-step guided wizard: month+opening balance, paycheck setup, add bills, then dashboard. Only runs when no months exist in DB. User chose wizard over empty-state hints.","confidence":10,"source":"user-stated","files":[],"ts":"2026-04-02T10:20:18.976Z"}
{"skill":"plan-design-review","type":"preference","key":"own-ledger-gear-replaces-ellipsis","insight":"Settings nav is a gear icon in the top bar. Replaces the ellipsis menu from the original wireframe. User explicitly said no reason for both to coexist.","confidence":10,"source":"user-stated","files":[],"ts":"2026-04-02T10:20:19.620Z"}
{"skill":"plan-eng-review","type":"operational","key":"spike-scope-boundary","insight":"Spike scope should be explicitly communicated upfront and enforced. When user feedback shifts from validating the spike question to designing the real UI, stop and redirect. The spike is throwaway code - polishing it is building twice.","confidence":9,"source":"observed","files":[],"ts":"2026-04-02T11:26:53.988Z"}
