socaity.dev

Ledger

A public record of contributions. No token. Nothing to trade. This is a database.

This is an example chain, not the real record. The real record cannot be opened until the rule's parameter values are final, so every figure below is computed by the published rule over ledger/example/chain.jsonl — real arithmetic, example entries, and no number typed in by hand.

Who contributed what

Founder share of epoch 0, which is closed and audited: 100%. There is 1 contributor. That contributor is the founder, and this record is his own hours, itemised — 5 separate entries, never one lump.

Epoch 1 is open, so it has no final share. If epoch 1 closed on this record, the founder share would be 100% — an upper bound, and it can only fall, because the numerator is fixed at entry and the denominator only grows.

Every entry below is an individual observation with its own evidence digest, valued at the same flat rate that applies to anyone: one contributor-hour is one valuation unit, in every category, for every contributor. The rate the founder's hours are priced at is that rate, because it is the only rate the schedule has. Nothing here is a currency, a balance or a stake: an epoch share is a fraction of a closed epoch, and amounts exist only if money is ever declared against the record, which it has not been.

Is this a pre-mine?
  1. There is nothing to trade. No unit here is transferable, and no transfer operation exists in the rule code to be called. You cannot buy in, so there is nothing to buy in ahead of.
  2. Nothing was allocated. Every entry is hours worked, logged against a rate table published before the entry was recorded, with an evidence digest attached. A grant is handed out; this is a timesheet.
  3. The founder's entries are the easiest ones on the record to attack, not the hardest: the same challenge affordance sits on every row, the rate is attested in public before an epoch opens, and a correction to the founder's own entries has to run through the same public challenge machinery — there is no quiet amendment path, because nothing on the record is edited.
  4. Epochs are separate pools. Epoch 0's 100% cannot touch any epoch you contribute to: an epoch's denominator is the sum of that epoch's own entries and nothing else. Run the rule over epoch 2 and the founder share it returns is 0%.
  5. What this page cannot prove yet: that the mechanism works with more than one participant. That is an open problem, and it is the point of the last line on this page.
What is an example on this page, and what is real

Real: the arithmetic. Every figure is produced at build time by rule/distribute.py, rule/valuation.py and rule/params.py. Real too: the chain is replayed and every signature on it re-verified by the validator each time this page is built, and the rule version, parameter-set and attestation digests it names are the digests of the files in this repository.

Example: the entries. ledger/example/chain.jsonl holds 24 events, head a2f1681dbac2, signed by an example key whose secret is printed in ledger/example/seed.py. Its hours are example hours; its evidence digests are digests of the label strings in that script, not of merged work; its audit event is an example audit.

Why it exists: the rule refuses to open epoch 1 under a parameter set that still carries placeholders, and those values are not fixed yet. A page that hand-wrote its numbers in the meantime would be the one thing this page is for refusing. There is no external contributor on this chain because there is no external contributor. When the real chain opens, this page renders that one instead and nothing else about the page changes.

Epoch 0 — closed and audited

Denominator D0 = 50 vu, the sum of every included entry in this epoch — computed by rule/distribute.py. Epoch weight P0 = 1. Contributors: 1.

EntryContributorWhatHours × ratevuShare of epoch 0
24126144a8bb z6MkhUif…aNSL founder work logged · governance
week 2026-W33 · mode E · evidence 636a92162ad9
12 h × 1 vu/h 12 24%
confirmedchallenge window closed at the epoch 0 audit · 0 challenges
Recompute this entry
python3 tools/render/generators/ledger.py entry 24126144a8bb

12 h × 1 vu per hour (from the published rate table) = 12 vu; 12 ÷ 50 vu (D0, from the rule) = 24%. Full entry id 24126144a8bbb7aaf97b64c14a51de9a815c9018426c7f8b11137bdb2558fcf2; evidence digest 636a92162ad942262a8a4413d322d1cd989c2c265fb4b1d95f91231e636ed7ba, which resolves to a label string in the example chain's seed script and not to merged work.

Challenge this entry · permalink

5b7fcfed2f42 z6MkhUif…aNSL founder work logged · design
week 2026-W33 · mode E · evidence 4de96ed23b82
8 h × 1 vu/h 8 16%
confirmedchallenge window closed at the epoch 0 audit · 0 challenges
Recompute this entry
python3 tools/render/generators/ledger.py entry 5b7fcfed2f42

8 h × 1 vu per hour (from the published rate table) = 8 vu; 8 ÷ 50 vu (D0, from the rule) = 16%. Full entry id 5b7fcfed2f429dfedf2763a562feb963975a3ee34fb25aaa8336f2f70d5b3949; evidence digest 4de96ed23b8263a6f2fe215c85d5bd2fa268bdb3506439ac373a4d48d1bf1220, which resolves to a label string in the example chain's seed script and not to merged work.

Challenge this entry · permalink

d9b972ece67f z6MkhUif…aNSL founder work logged · docs
week 2026-W33 · mode E · evidence e58a24ed150b
6 h × 1 vu/h 6 12%
confirmedchallenge window closed at the epoch 0 audit · 0 challenges
Recompute this entry
python3 tools/render/generators/ledger.py entry d9b972ece67f

6 h × 1 vu per hour (from the published rate table) = 6 vu; 6 ÷ 50 vu (D0, from the rule) = 12%. Full entry id d9b972ece67ff40aabafbaf9ba7c8debabbc6b40b91367e24fa65c73c63511fa; evidence digest e58a24ed150b92a02db3d974ac507ce397fd405f737b7f171abb7d8053c3ba88, which resolves to a label string in the example chain's seed script and not to merged work.

Challenge this entry · permalink

418dd007020a z6MkhUif…aNSL founder work logged · code
week 2026-W33 · mode E · evidence f07b0ca94cb6
20 h × 1 vu/h 20 40%
confirmedchallenge window closed at the epoch 0 audit · 0 challenges
Recompute this entry
python3 tools/render/generators/ledger.py entry 418dd007020a

20 h × 1 vu per hour (from the published rate table) = 20 vu; 20 ÷ 50 vu (D0, from the rule) = 40%. Full entry id 418dd007020a9139962b79a7030b988e80d89b9bb884c37a41d2c61bea00ebca; evidence digest f07b0ca94cb6280769e1647612d1dec74a1b4c50a5a6396eab254544d8be84e8, which resolves to a label string in the example chain's seed script and not to merged work.

Challenge this entry · permalink

96e7d1afb951 z6MkhUif…aNSL founder work logged · review
week 2026-W33 · mode E · evidence 3541b0bf81cc
4 h × 1 vu/h 4 8%
confirmedchallenge window closed at the epoch 0 audit · 0 challenges
Recompute this entry
python3 tools/render/generators/ledger.py entry 96e7d1afb951

4 h × 1 vu per hour (from the published rate table) = 4 vu; 4 ÷ 50 vu (D0, from the rule) = 8%. Full entry id 96e7d1afb951e93462a83a4ca44bd03b32debe79d1e4e040efcd7b52aee10844; evidence digest 3541b0bf81ccad039a3d09e6a4dac0dab7449ada4be9f1772dde03a7233570bf, which resolves to a label string in the example chain's seed script and not to merged work.

Challenge this entry · permalink

Epoch 1 — open

Denominator D1 = 12 vu, the sum of every included entry in this epoch — computed by rule/distribute.py. Epoch weight P1 = 1. Contributors: 1.

EntryContributorWhatHours × ratevuStatus
c976fa2da12b z6MkhUif…aNSL founder work logged · code
week 2026-W33 · mode E · evidence cbe0a3d102d0
9 h × 1 vu/h 9 confirmed
challenge window open until epoch 1 closes and its audit completes · 0 challenges If epoch 1 closed on this record: 75% of it — an upper bound, it can only fall.
Recompute this entry
python3 tools/render/generators/ledger.py entry c976fa2da12b

9 h × 1 vu per hour (from the published rate table) = 9 vu; 9 ÷ 12 vu (D1, from the rule) = 75% if the epoch closed here. Full entry id c976fa2da12ba7d76630b302ef507618262b557010ec00ab93785b4e508a6dc7; evidence digest cbe0a3d102d071462e49a11fcfd4bd873b8d127735d7c1e1c142fa2b4419df14, which resolves to a label string in the example chain's seed script and not to merged work.

Challenge this entry · permalink

1c788040a71e z6MkhUif…aNSL founder work logged · docs
week 2026-W33 · mode E · evidence 1e2bfe46696e
3 h × 1 vu/h 3 confirmed
challenge window open until epoch 1 closes and its audit completes · 0 challenges If epoch 1 closed on this record: 25% of it — an upper bound, it can only fall.
Recompute this entry
python3 tools/render/generators/ledger.py entry 1c788040a71e

3 h × 1 vu per hour (from the published rate table) = 3 vu; 3 ÷ 12 vu (D1, from the rule) = 25% if the epoch closed here. Full entry id 1c788040a71e8dd70615936bf7d30ba12a65209cff6246049a5332e583a1b5c6; evidence digest 1e2bfe46696e04d9b2501b817dcade734484967eaa3a6602419e1251d87718e8, which resolves to a label string in the example chain's seed script and not to merged work.

Challenge this entry · permalink

This epoch is open. Its share figures are not final and are never shown beside a closed epoch's: the entries above carry their status, and the "if it closed here" figure sits on its own line under each row.

Concentration

Figures below are the published rule run over the example chain, not the real record, which has not opened.

Contributors on this record: 1.

50 of 50 vu

= 100% founder share of epoch 0

because the denominator D0 = 50 vu is made of 5 entries and all of them are his. Every one of them is listed above with its hours, its rate and its evidence digest.

Tripwire

State: escalated. The tripwire adopted in socaity-19p escalates entries once the founder share of an epoch rises above a published threshold. No threshold value is published in the parameter set yet — and the founder share is 50 of the 50 vu in epoch 0, or 100% of it, which is above any threshold a value could be set to. So the state is escalated by construction, and it stays escalated until the number falls, which requires somebody else's entry.

Your epoch

0 of 1 vu

= 0% founder share of epoch 2

Computed by the published rule over the example chain; the real record has not opened. The denominator is one hypothetical hour, priced at the published rate — nothing is recorded in epoch 2.

Epoch 2 has not opened. Founder hours recorded in it: 0 vu. Epochs are separate pools — an epoch's denominator sums that epoch's entries and no others — so a hypothetical entry run through the published rule in epoch 2 returns a founder share of 0%. Epoch 0's concentration is arithmetically incapable of reaching it. The founder's share of the epoch you contribute to starts at 0% and rises only if he logs work in that epoch too, on the same rate table, with the same evidence bar.

Computed the same way as the calculator below: one hypothetical entry, the published rule, nothing recorded. Recompute: python3 tools/render/generators/ledger.py your-epoch

This entry is unwritten.

The first external entry does not exist yet, and the concentration figure above stays where it is until someone else does priced, evidenced work. Same rate table, same evidence bar, same challenge exposure as every founder row above.

Claim the first external entry

The rule that converts a contribution into a share

One screen, whole. The conversion schedule V is a table keyed by category and native unit; a contributor does not declare a rate and cannot propose one.

CategoryNative unitRate
codehours1 vu per hour
designhours1 vu per hour
docshours1 vu per hour
governancehours1 vu per hour
opshours1 vu per hour
reviewhours1 vu per hour

Then, for an epoch that has closed and been audited: the weight of an entry is its quantity times its rate; the denominator De is the sum of the weights of every included entry of that epoch, counted the same way whichever mode was elected; the epoch share of an entry is its weight over De, as an exact fraction. That is the whole conversion. It is rule/distribute.py, rule/valuation.py and rule/params.py, published as code, pinned by hash on the record at the event marked "the rule is published": rule version 308296bd81fc, parameter set 5633b6fcaebb, both resolvable in rule/RULE_VERSION.json.

An epoch weight is not money and confers no right to any. There is no transfer operation in the code, in either mode, and there is no per-unit price. Whether an amount is ever declared against this record is discretionary and remains so.

The parameter values above are the development placeholder set. That is why the real record has not opened: the rule refuses to open epoch 1 under a parameter set that still carries placeholders.

Recompute the whole page

git clone https://github.com/socaity/socaity.dev
cd socaity.dev
python3 tools/render/generators/ledger.py

That command prints every figure on this page. It is the same file that renders the page, calling the same functions: there is one implementation, not a page and a copy of the page's arithmetic.

The attestation statement

The record carries a signed attestation before an epoch may open. It is reproduced whole; its digest 9b38fdeb8762 is the statement_hash on the "the attestation statement is signed" event.

ATTESTATION ACCOMPANYING THE OPENING OF AN EPOCH
socaity.dev — example artifact (ledger/example/seed.py)

This statement is the artifact behind the statement_hash carried by the
rule.attested event that precedes epoch.opened(1) in the example chain. It is
an example instance of the attestation gate adopted in socaity-19p: an epoch
may not open until the person signing the record has said, in public and in
their own name, the four things below.

I attest, as the person who signs the events in this record:

1. The conversion schedule V that this epoch opens under was published before
   any observation it prices was recorded. Its exact bytes are committed, and
   the hash of the parameter set is on the record ahead of every entry it
   values.

2. The same table applies to my hours and to everyone else's. It prices one
   contributor-hour as one valuation unit, in every category, for every
   contributor, including me. There is no founder column, no multiplier, and
   no discretionary adjustment available to me at entry time. My own rate is
   therefore at or below the referent this schedule is pinned to, because it
   is the only rate the schedule has.

3. I have no interest that a change to V would advance and no one else's does
   not. I am not a beneficiary of the rate I set beyond being one of the
   people it prices, and I gain nothing from this schedule that a later
   contributor recording the same hours does not gain identically.

4. When I find an error in my own entries — and I will — I will correct it
   through the public challenge machinery on the record, not by quietly
   amending anything. Nothing on this record is edited; corrections are new
   events with their own signatures.

An epoch weight is not money and confers no right to any. Whether anything is
ever distributed against this record is discretionary and remains so; this
statement binds how the record is kept, not what anyone receives.

Source: ledger/example/attestation.txt.

What would a contribution of mine be worth?

Two inputs, because the rule takes two: a category and a number of hours. There is no rate field — the rate is published, not declared. There is no mode field — accepted contributions are recorded in the epoch-share mode as a published constant. There is no epoch field — an entry's epoch is its position on the record, not a choice.

8 vu
If epoch 1 closed on this record: 40% of it
8 h × 1 vu per hour; denominator D1 would be 20 vu

The vu figure is final at entry: it is fixed by the hours and the published rate, and nothing later changes it. The percentage is an upper bound, quoted only as "if epoch 1 closed on this record" — the numerator is fixed and the denominator only grows, so the only direction it can move is down. That is the honest version of the answer, and it is the reason the next line of this record is worth writing: entry two does not exist yet.

How this works, exactly: the page is static, so there is no rule engine running in your browser and this page does not contain a second implementation of the rule. All 48 combinations below were computed when the page was built, by calling rule/distribute.py and rule/valuation.py — once per combination, over the chain, with one hypothetical entry appended and the epoch flipped to closed. The script on the page does a table lookup and no arithmetic. Recompute any cell yourself: python3 tools/render/generators/ledger.py hypothetical code 8

Every precomputed combination (48)
CategoryHoursRatevuD1 would beIf epoch 1 closed on this record
code0.51 vu/h0.512.5 vu4%
code11 vu/h113 vu7.69%
code21 vu/h214 vu14.29%
code41 vu/h416 vu25%
code81 vu/h820 vu40%
code201 vu/h2032 vu62.5%
code401 vu/h4052 vu76.92%
code801 vu/h8092 vu86.96%
design0.51 vu/h0.512.5 vu4%
design11 vu/h113 vu7.69%
design21 vu/h214 vu14.29%
design41 vu/h416 vu25%
design81 vu/h820 vu40%
design201 vu/h2032 vu62.5%
design401 vu/h4052 vu76.92%
design801 vu/h8092 vu86.96%
docs0.51 vu/h0.512.5 vu4%
docs11 vu/h113 vu7.69%
docs21 vu/h214 vu14.29%
docs41 vu/h416 vu25%
docs81 vu/h820 vu40%
docs201 vu/h2032 vu62.5%
docs401 vu/h4052 vu76.92%
docs801 vu/h8092 vu86.96%
governance0.51 vu/h0.512.5 vu4%
governance11 vu/h113 vu7.69%
governance21 vu/h214 vu14.29%
governance41 vu/h416 vu25%
governance81 vu/h820 vu40%
governance201 vu/h2032 vu62.5%
governance401 vu/h4052 vu76.92%
governance801 vu/h8092 vu86.96%
ops0.51 vu/h0.512.5 vu4%
ops11 vu/h113 vu7.69%
ops21 vu/h214 vu14.29%
ops41 vu/h416 vu25%
ops81 vu/h820 vu40%
ops201 vu/h2032 vu62.5%
ops401 vu/h4052 vu76.92%
ops801 vu/h8092 vu86.96%
review0.51 vu/h0.512.5 vu4%
review11 vu/h113 vu7.69%
review21 vu/h214 vu14.29%
review41 vu/h416 vu25%
review81 vu/h820 vu40%
review201 vu/h2032 vu62.5%
review401 vu/h4052 vu76.92%
review801 vu/h8092 vu86.96%

How the record was opened

The validator refuses an external entry before this sequence is complete, in this order. That is not a courtesy; it is the reason the founder went first — the rule and the rate table had to be published, and the founder's own position itemised and closed, before anybody else's entry could be admitted at all.

  1. the record begins 76677d5ee397
  2. the rule is published, as code, by its hash — rule version 308296bd81fc 1f48599b26b5
  3. the amendment rule is published 76ef3836596b
  4. the conversion schedule V is published — V 5633b6fcaebb db486c73859a
  5. epoch opened — epoch 0 189cc6e1350b
  6. epoch closed — epoch 0 98f5bdf5eb70
  7. the attestation statement is signed — statement 9b38fdeb8762 83e9eee2f604
  8. epoch opened — epoch 1 9c6ff6b94444

The next event on this record is the first entry that is not the founder's.