Why Ekwo OS is shaped the way it is: one record per decision, each with its context, the rule it sets and what follows from it, so that a contributor can argue with the reason rather than guess at it.
Each record is written as the rule it establishes and states what holds today.
A decision that changes is rewritten in place, and its record says what the
rule now is; the history of the change is in the git log and in
CHANGELOG.md.
A record has five parts: Status, Context, Decision, Consequences and See also (the files, migrations, tests and other records it relies on). New records take the next free number.
The instance and who may act
- 0001 — One installation belongs to one customer
- 0002 — The surface is closed, not merely empty
- 0003 — The schema grants its own rights
- 0004 — A permission is a capability; a role is a preset
- 0005 — A guard answers true or false, and reads as the schema
- 0006 — A machine key is a caller narrower than a person
- 0007 — An invitation names an address, not a user id
The ledger
- 0008 — Documents and entries are two joined layers
- 0009 — Accounts have types and are resolved by role
- 0010 — Amounts are positive; totals are derived
- 0011 — An amount is rounded at the decimals of its currency
- 0012 — A number is drawn at posting, from the country's pattern
- 0013 — Locks live in the database, and everything raises
- 0014 — A posted entry is immutable, in an open period too
- 0015 — A posted document is frozen
- 0016 — A correction is one gesture
- 0017 — An append-only audit trail surrounds the ledger
- 0018 — Reports read the ledger and know no country
Taxes
- 0019 — A tax posting carries the account and the box
- 0020 — One tax engine, several kinds of tax
- 0021 — Cash-basis VAT waits; exchange differences are realised
- 0022 — A price that holds its tax is converted per group
- 0023 — Declaration boxes are data, with no expression language
- 0024 — A tax follows the territory of the parties
Country packs
- 0025 — A country is a pack of data, compiled into SQL
- 0026 — Ekwo maintains a pack; only an accountant reviews one
- 0027 — The sources of a pack are a register, not a bibliography
- 0028 — A pack upgrade is never silent
- 0029 — A golden year is the contract of a pack
- 0030 — A country has charts, and a financial statement is data
- 0031 — Opening and closing are parameters, not code
- 0032 — The audit file carries opening balances, never posted
- 0033 — What a country requires on a document is data
- 0034 — A label is data, and a declared language is a promise
- 0035 — The chart stays whole; the working list is derived
Declarations
- 0036 — Filing cadence is data, counted in months
- 0037 — A filed declaration is frozen and superseded, not edited
- 0038 — A deadline is a rule of the country; null is an answer
- 0039 — A deposit is an event, written from the frozen figures
- 0040 — A portfolio is what the caller may read
Companies, documents and the bank
- 0041 — A company has a profile; its first year is a parameter
- 0042 — A document is shared by a link that is the whole secret
- 0043 — A company leaves with its books
- 0044 — A product is a catalogue entry in the core, not stock
- 0045 — A counterparty is recognised from learned patterns
- 0046 — Settling applies identification, offers resemblance
- 0047 — A bank statement is imported once
Formats and modules
- 0048 — Format libraries are MIT, one package per format
- 0049 — A statement reader reports and never corrects
- 0050 — An invoice file is written from the books
- 0051 — A module has its own schema and posts through a function
Installer, command line and MCP server
- 0052 — The installer needs only Node and the customer's project
- 0053 — The MCP server acts as the user
- 0054 — The command line answers one document and an exit code
- 0055 — The command line acts as a signed-in person
- 0056 — The command line computes no amount
- 0057 — Two install paths make one installation
- 0058 —
ekwo doctorcompares against a generated inventory - 0059 — A release has a tag, a schema version and a schema floor