P3: odd cents split the same running way everywhere (defect 17, D-38)
check / check (push) Canceled after 0s

Members' shares of earnings are split cumulatively by largest remainder in
the closes, the members' equity statement, the K-1 worksheet and the
viewer, so a member's capital on a given day never moves by a cent when its
month is later closed. Old closes replay as they were; the first P3 close
carries any true-up. Feature members_cumulative. Kani and Lean proofs of
the bounded drift; bookspec examples.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01T3gXMVt7XJPi6ens1or9Dj
This commit is contained in:
swaitsandClaude Opus 5.5 committed 2026-10-20 21:35:00 -06:00
1 parent 2390dc6553
commit a7f3cc09a9
44 files changed
+6636 -195

No files matched your search

+34 -9
View File
@@ -1134,7 +1134,10 @@ posting.
financing_accounts?, investing_accounts? }` → `{ content, content_encoding? }`.
- Reports: `profit_and_loss`, `balance_sheet`, `cash_flow` (needs
`cash_accounts`), `trial_balance`, `members_equity` (statement of
changes in members' equity; members from `wanderbooks.toml`),
changes in members' equity; members from `wanderbooks.toml`; earnings
not yet closed are split the way the next members close will split
them, so a member's capital on a day never changes when its month is
closed: rules.md B-13, D-38),
`general_ledger` (by account: beginning balance, postings with running
balance and split, ending balance), `general_journal` (alias
`journal`: every entry, line by line, in date order).
@@ -1258,15 +1261,37 @@ R-FUTURE-3 and rides the engine roadmap, not the MCP layer.
- `books.create_period { name, start, end }` → `{ period_id }`.
Dates are YYYY-MM-DD, inclusive.
- `books.close_period { period_id, confirmed? }` → without confirmation:
`{ status: "preview", lines: [...] }`: the exact closing entry (the close
run on a copy of the ledger), posting nothing; with `confirmed: true`:
posts it and marks the period closed. The entry zeroes revenue and
expense balances as of the period end; the net goes to `3999` Retained
Earnings, or, with `[[company.members]]` in `wanderbooks.toml`, to each
member's capital account by share. Periods close in order. Closed periods
reject new entries.
`{ status: "preview", period_id, closing_entry: null, lines: [...],
members }`: the exact closing entry (the close run on a copy of the
ledger), posting nothing; with `confirmed: true`: `{ status: "closed",
period_id, closing_entry, lines, members }`, posting it and marking the
period closed. The entry zeroes revenue and expense balances as of the
period end; the net goes to `3999` Retained Earnings, or, with
`[[company.members]]` in the settings, to each member's capital account
by share, cumulatively (rules.md B-13; D-10): each close gives a member
their share of everything closed to these members and shares so far, to
the currency's minor unit (odd units by largest remainder, ties to the
member listed first when the count began), less what earlier closes gave
them, so no member is ever a minor unit from their exact share. A close
may carry a one-time true-up of rounding by closes made under an earlier
rule, which can run against the period's result by a cent. `members`
(null for a close not to the members) is `{ since_close, members: [{
name, capital_account, share, this_close, running, exact }] }`: the
close the count starts at (the first members close with these members
and shares; 1 is the books' first close of all), and per member, in the
settings' order, their capital account's code, share ("0.50"), what this
close credits them (negative: debits), what the count's closes have
credited them in all, and their exact share of everything the count
closed (unrounded, e.g. "0.005"). The preview's `members` is exactly what
confirming posts. Periods close in order. Closed periods reject new
entries.
- `books.list_periods {}` → `{ periods: [{ id, name, start, end, status,
closing_entry }] }`.
closing_entry, close_rule }] }`. `close_rule` says which rounding rule a
period closed to the members was closed under:
`"members_cumulative_since:N"` (the rule since P3, counted from close N),
`"members_run"` (2026-10-13 to P3), `"members_per_close"` (2026-10-13) or
`"members_last_absorbs"` (before 2026-10-13); null for an open period or
one closed to anything else.
## Tools — bank reconciliation