Orgchain v1.14.1: a belt counts only on its seat's own sat

Placement is now a rule of lineage/v0, not just how Orgchain inscribes:
an award counts only if it is inscribed on its recipient's own sat, so any
indexer can check that a belt is soulbound. The reducer compares sats
(satOf): the lab's sat numbers, ord's, or, without ord's sat index, its
satpoints, which two inscriptions share exactly when they share a sat. ord
events now carry the sat number when ord has one. Belts inscribed anywhere
else, as before v1.14, are rejected.

A promotion is another reinscription on the same sat, over the belt before
it: each badge keeps its skill's earlier belts, and Inspect shows the
ladder ("re-inscribed over white (beat 5)"). The sample's sol now goes
white, then green. An award and its recipient's own close no longer
conflict within a block, since both spend the recipient's inscription.

Rehearsed again on Bitcoin Core regtest from height 178: sixteen beats and
133 transactions; ord shows sol's sat carrying sol, its white belt and its
green belt, in order, each belt charmed reinscription and vindicated, and
the compare matches. The fixture is re-recorded.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H4upF5LVwmPDDqrhdUfnXh
This commit is contained in:
teahubxyzandClaude Opus 5.5 committed 2026-10-15 16:10:18 -07:00
1 parent c8c18b073e
commit 5a7f11e49d
17 files changed
+122 -67

No files matched your search

+6 -5
View File
@@ -40,11 +40,12 @@ transactions and mines one regtest block. `--compare` checks that every event la
metadata and parent, that every inscription sits on the same sat (ord's satpoint) with the charms the lab expects (a
belt's are ♻️ reinscription and ❤️‍🔥 vindicated), and that both fold into the same trees. Within a block the miner may
order independent events differently from the lab, a join and its adoption included; that changes nothing (`SPEC.md`,
sections 2 and 5). Beats 5 and 9 award three belts, each by a three-input reveal that puts it on its seat's own sat. The
last four beats sell whole trees: time with its six below it, on an offer whose inputs are the seven coins their nine
inscriptions sit in, and acme whole, on an ask that signs one output holding fourteen inscriptions on eleven sats; each
tree then splits back at its buyer's keys, one inscribed sat to an output, and ord puts every inscription where the lab
does, each belt still on its seat's sat (`SPEC.md`, section 7).
sections 2 and 5). Beats 4, 5 and 9 award four belts, each by a three-input reveal that puts it on its seat's own sat:
sol's launch belt goes white, then green, two reinscriptions on sol's sat. The last four beats sell whole trees: time
with its six below it, on an offer whose inputs are the seven coins their ten inscriptions sit in, and acme whole, on an
ask that signs one output holding fifteen inscriptions on eleven sats; each tree then splits back at its buyer's keys,
one inscribed sat to an output, and ord puts every inscription where the lab does, each belt still on its seat's sat
(`SPEC.md`, section 7).
`out/` holds the lab backup, test keys included, and is not committed.
+2 -1
View File
@@ -81,7 +81,8 @@ act(lab, 'birth', time, { name: 'astra', kind: 'agent' });
await beat('two sends and five births');
send(lab, wk, lineage, 2 * SAT);
const [docscope] = ['docscope', 'dollhouse', 'doodleloop', 'hearthframe'].map(name => act(lab, 'birth', time, { name, kind: 'org' }));
await beat("time's ventures");
act(lab, 'award', time, { to: sol, skill: 'launch', belt: 'white' }); // green next beat, re-inscribed over it on sol's sat
await beat("time's ventures, and sol's white belt");
send(lab, time, sol, SAT);
send(lab, time, luna, 0.5 * SAT);
act(lab, 'award', time, { to: sol, skill: 'launch', belt: 'green' });