homestead-ledger
Homestead · Affairs — module two. The homesteader keeping their own books.
A self-contained desktop module: it ships to a household who double-clicks
it, so its store is embedded SQLite — a linked library, not a server (the
face's 2026-08-04 "no listening socket" decision holds; SQLite binds no port).
The record layer is the engine's: store.py is a thin binding —
homestead.keep.store's adapter contract on a SQLite backing, in the ledger
database. It pins the engine from PyPI — homestead-affairs>=0.1.0,<1.0 (the
distribution name; import homestead is unchanged) — and shares the
~/.homestead root with homestead-law, because a household's affairs are one
thing.
Mirror, not judge
The ledger reflects the household's money; it never authors a financial judgment and never edits a transaction. Concretely, that is the engine's record model applied to money:
- Canonical = the household's own books — imported transactions, statements — read-only by type (I-6). The app has no write path to them.
- Sidecar = the household's overlay — categorization, notes, budget envelopes, a confirmed merchant name. This is where the app writes.
- Money amounts tied to an account are L4; account numbers / SSNs are L5; due-dates and schedules are L1/L2 (see the engine's rung model). The engine enforces this at the storage boundary; a corrupt or unclassified row reads L5 on the way out.
The shared Postgres engine on the fleet side is a sync target reached
through the egress gate — never a runtime dependency of the shipped app. Sync is
an S4 egress: an L5 record never crosses, and what lands in the shared store
is only what the household chose to expose.
Status: bite 0 — the seat is bound. The store binding (
homestead.keep.storeon a SQLite ledger db), a no-egress AST guard over this package (I-17 — a money ledger must never dial out), CI (cold checkout, engine from PyPI, three OSes), and the build plan (docs/build-plan.md). The books, the "what's due" queue, CSV import, and the app land in the bites that follow.
The method
Test-first, as in homestead: every claim is a check somebody can run. From a
cold checkout — the engine (homestead.keep) resolves from PyPI as
homestead-affairs, no sibling checkout needed:
pip install -e . # pulls homestead-affairs (homestead.keep) from PyPI
pytest -q
The full build plan — the reuse map, the bite order, the invariants that carry
from the engine and the ones new to money — is in
docs/build-plan.md.
Apache-2.0.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file homestead_ledger-0.1.1.tar.gz.
File metadata
- Download URL: homestead_ledger-0.1.1.tar.gz
- Upload date:
- Size: 101.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
50e37508b8674f74a67f51fee38e2d8e75e6fe3985a2f3e36658db0332bf8ef2
|
|
| MD5 |
970810436608b1aeaa4134d25ecf40a8
|
|
| BLAKE2b-256 |
3b3cf20fb00d876aad3d8da1b57da7bb2184095e45332a8d1ca65c5e9d7685b8
|
Provenance
The following attestation bundles were made for homestead_ledger-0.1.1.tar.gz:
Publisher:
release.yml on homestead-affairs/homestead-ledger
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
homestead_ledger-0.1.1.tar.gz -
Subject digest:
50e37508b8674f74a67f51fee38e2d8e75e6fe3985a2f3e36658db0332bf8ef2 - Sigstore transparency entry: 2581955835
- Sigstore integration time:
-
Permalink:
homestead-affairs/homestead-ledger@630c5b502cf161a4ba93b5d4c90de83eccef9e2b -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/homestead-affairs
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@630c5b502cf161a4ba93b5d4c90de83eccef9e2b -
Trigger Event:
push
-
Statement type:
File details
Details for the file homestead_ledger-0.1.1-py3-none-any.whl.
File metadata
- Download URL: homestead_ledger-0.1.1-py3-none-any.whl
- Upload date:
- Size: 54.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
dcf3ff1c792be4649e8a8b024e77580f76438a8fdf3524a6719f6d26297c1921
|
|
| MD5 |
c493f7706db7c39969d6df1f75331e81
|
|
| BLAKE2b-256 |
dd5b4f193ca90abcef95fcf36c9879fcad3efad2e442b29c8cee46b4ff4d8cf7
|
Provenance
The following attestation bundles were made for homestead_ledger-0.1.1-py3-none-any.whl:
Publisher:
release.yml on homestead-affairs/homestead-ledger
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
homestead_ledger-0.1.1-py3-none-any.whl -
Subject digest:
dcf3ff1c792be4649e8a8b024e77580f76438a8fdf3524a6719f6d26297c1921 - Sigstore transparency entry: 2581955848
- Sigstore integration time:
-
Permalink:
homestead-affairs/homestead-ledger@630c5b502cf161a4ba93b5d4c90de83eccef9e2b -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/homestead-affairs
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@630c5b502cf161a4ba93b5d4c90de83eccef9e2b -
Trigger Event:
push
-
Statement type: