Files
wanderbooks/docs/spec/sources/file-names.md
T
swaitsandClaude Opus 5.5 3f20df9700
check / check (push) Canceled after 0s
config, mcp, gui: specs from sources, spec-blind suites, and the bugs they found
ledger-config: parse gets a sourced spec. A fiscal year starts on the
first of a month (IRS Pub. 538); tax_classification is read by whole
words (Treas. Reg. 301.7701-3, Schedule C instructions; "business corp"
no longer reads as an S corp, "corporation or S corporation" is refused);
duplicate or blank members and shared capital accounts are refused; a
negative or non-grammatical receipt threshold is refused; codes trimmed.
tests/spec_config.rs (65 spec-blind tests, 14 properties), fuzz target
fuzz_config_parse (weekly). Mutation: 55 of 55 viable caught (from 25/38).

The receipt policy moves to ledger-config, with one loader
(effective_receipt_policy) and one decimal grammar, so the server and
the viewer enforce and show the same rule (the viewer had its own: only
expense-like debits, a silent $25 default, and no config.json).

ledger-mcp: a module spec (MCP 2025-06-18 tools, JSON-RPC 2.0, the
operating contract). Amounts in are exactly -?digits[.digits]; a number
that is one account's code and another's id (vendors, classes alike) is
refused, not guessed; the threshold is validated at startup. Fixed:
add_line with a bad class journaled the line before refusing;
profit_and_loss_by_class ignored `class`; aging buckets said "0". A wire
in front of rmcp answers malformed JSON with -32700 and invalid requests
with -32600 and their id (rmcp dropped the first, omitted the id).
tests/spec_mcp.rs (26 spec-blind tests: every tool's result against its
own outputSchema, a random-call state machine checking the journal is
untouched by every refusal, amount grammar, previews, the receipt policy).

ledger-gui: money, accounting, and dollars never round (they rounded to
cents, banker's style); export file names avoid Windows device names,
trailing dots and spaces, empty names, and 255-byte overflow; specs on
attention, history, fuzzy search, and axis ticks.

ledger-core: the lifetime profit_and_loss is renamed unclosed_earnings
(docs/testing.md #3).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GWVo7x3UHw5kwCUaWxiejX
2026-10-14 10:13:05 -06:00

35 lines
1.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# File names the viewer writes
Governs `ledger_gui::export::file_name`. Fetched 2026-10-14.
## Microsoft, "Naming Files, Paths, and Namespaces" (learn.microsoft.com/en-us/windows/win32/fileio/naming-a-file)
> Use any character in the current code page for a name, including
> Unicode characters and characters in the extended character set
> (128–255), except for the following: The following reserved characters:
> < (less than) > (greater than) : (colon) " (double quote) / (forward
> slash) \ (backslash) | (vertical bar or pipe) ? (question mark) *
> (asterisk) Integer value zero, sometimes referred to as the ASCII NUL
> character. Characters whose integer representations are in the range
> from 1 through 31, except for alternate data streams where these
> characters are allowed.
> Do not use the following reserved names for the name of a file: CON,
> PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9,
> COM¹, COM², COM³, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, LPT9,
> LPT¹, LPT², and LPT³. Also avoid these names followed immediately by an
> extension; for example, NUL.txt and NUL.tar.gz are both equivalent to
> NUL.
> Do not end a file or directory name with a space or a period. Although
> the underlying file system may support such names, the Windows shell and
> user interface does not. However, it is acceptable to specify a period
> as the first character of a name.
## POSIX (IEEE Std 1003.1-2017, `<limits.h>`)
`{NAME_MAX}`: "Maximum number of bytes in a filename (not including the
terminating null of a filename string)"; Linux's common file systems set
it to 255, and NTFS limits a name to 255 UTF-16 units. wanderbooks keeps a
name within 255 bytes of UTF-8, which fits both.