Tool text that lied to agents:
- gnubok_create_voucher pointed at gnubok_reverse_entry, which does not
exist; the tool is gnubok_reverse_journal_entry. A scan of server.ts,
skills/, prompts/ and structured-errors.ts found no other phantom names.
- gnubok_reverse_journal_entry said reversal_date defaults to today; the
executor passes undefined and reverseEntry() uses the original entry
date (same as the dashboard). Description now states that. No behaviour
change.
- gnubok_get_vacation_balance promised an estimated semesterloneskuld in
SEK but returned none. The tool now returns estimated_liability_sek
using the same BFNAR 2016:10 day valuation as the year-close and the v1
vacation-balance route (dayValueSek exported from semesterberedning),
floored at zero for overdrawn balances. Descriptions trimmed so the
tools/list payload stays under the 60.7K-token ceiling (60,696 after).
- gnubok_create_invoice said the invoice number is assigned at approval;
it is assigned on send or mark-as-sent (ensureInvoiceNumber).
- gnubok_convert_invoice: "har redan makuleras" -> "har redan makulerats".
- lib/entitlements/keys.ts comment claimed bank_sync has no MCP tool while
the map right below gates gnubok_connect_bank on it.
Version: MCP serverInfo.version, the extension version and /api/health all
hardcoded '1.0.0', so clients could not tell deploys apart. They now share
currentAppVersion() (commit SHA prefix inlined at build), resolved once at
module load so the definitions layer stays deterministic, with '1.0.0' as
the self-hosted fallback so Docker healthchecks keep a value. serverInfo is
not part of tools/list, so the catalog payload is unaffected by this part.
Co-authored-by: Jakob Wennberg <311770904+jakobwennberg-oss@users.noreply.github.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>