* fix(assistant): the salary fact follows the ledger, never the column default
The in-app assistant told a payroll-running aktiebolag in every answer that
it "betalar inte löner" (support case 2026-09-04). company_settings.
pays_salaries is NOT NULL DEFAULT false and only the Skatt settings form
writes it, so for every company that never opened that form the flag reads
false whatever the ledger says, and lib/agent/ask/snapshot.ts asserted that
default as a fact.
- Trigger salary_runs_booked_marks_employer (20260904191000): a booked
salary run sets pays_salaries = true and fills a never-attested
employer_registered, at the one place every writer (dashboard, MCP, v1,
seeders) passes through. Backfill for the 12 companies on prod already
booking payroll with the flag at its default (8 of them also lacked the
employer flag, and with it their AGI deadline reminders). An explicit
employer_registered = false stays the user's answer.
- The assistant snapshot applies the composer's employee-facts doctrine:
positive evidence (active employees, the flag, an attested employer
registration) yields the fact, only an attested negative yields the
negative, the default yields nothing. It also names Inställningar >
Skatt / > Bokföring so the model can point at the page.
- The composer's KÄNDA FAKTA no longer prints "Betalar ut lön: nej" from
the same default.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01S62AGZwsMoBc8x8obBDVqE
* fix(migration): NOT EXISTS instead of NOT IN for the reset-source exclusion
A NULL source_company_id in the subquery would make NOT IN never true and
silently skip the whole backfill.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01S62AGZwsMoBc8x8obBDVqE
---------
Co-authored-by: Jakob Wennberg <311770904+jakobwennberg-oss@users.noreply.github.com>
Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>