2026-10-04 23:03:47 +00:00
|
|
|
# AGENTS.md
|
|
|
|
|
|
2026-10-14 17:28:33 -07:00
|
|
|
Orgchain is lineage's app for creating and operating lineage holdings on Super Testnet's toy chain.
|
|
|
|
|
|
|
|
|
|
- Test-only, always: no mainnet funds, no hidden signing, no custody, and nothing presented as a real key.
|
|
|
|
|
- Lineage semantics live in one place, `src/orgchain/lineage.js`. The UI never interprets events itself, and every act
|
|
|
|
|
is vetted by that reducer before it is signed. A new op means a reducer change, its tests and the README's table.
|
|
|
|
|
- The engine (`src/adapters`, `src/upstream`, `src/storage.js`, `src/miner.js`) is Super Testnet's. Compose with it
|
2026-10-14 23:16:03 -07:00
|
|
|
rather than rewriting it, and keep its tests passing. Preserve upstream licenses and provenance. Its local
|
2026-10-15 00:32:29 -07:00
|
|
|
changes are P2WPKH payments, a coinbase split across up to 64 outputs, and ordinary spends of up to eight inputs
|
|
|
|
|
and outputs whose key-path signatures may carry 0x83, all in `src/adapters/chain.js` (PROVENANCE.md); keep them
|
|
|
|
|
small and tested.
|
|
|
|
|
- Money lives in `src/orgchain/money.js`: beats pay the holdings (split by hashrate, or all to the last act; under
|
|
|
|
|
Mainnet none mine, and the lab wallet funds them), sends spend SegWit coins only, so an inscription can never leave
|
|
|
|
|
as change, and balances are read off the chain, never stored. Gas (`src/orgchain/actions.js`): every act is paid by
|
|
|
|
|
the actor's own keys and checked before anything is signed; the lab wallet pays only for foundings and for holdings
|
|
|
|
|
that predate lab keys.
|
|
|
|
|
- Deals live in `src/orgchain/offers.js`: the buyer pre-signs the whole transaction and the holder countersigns.
|
|
|
|
|
An offer is signatures kept in the lab, never chain state, and who holds an item is read off the chain, never
|
|
|
|
|
from metadata. Inscription metadata is public and permanent, so never put a secret in it (item notes included).
|
2026-10-14 18:22:22 -07:00
|
|
|
- Keys follow the tree (`src/orgchain/keys.js`): store roots only (one per holding, one per graduated org) and derive
|
|
|
|
|
every other key from its position. Every act is signed by whichever key holds the authorizing inscription.
|
2026-10-14 19:49:05 -07:00
|
|
|
- A node's chain key is its account's BIP-86 Taproot key (`m/86'/1'/account'/0/0`); SegWit is BIP-84 at the same
|
2026-10-14 22:25:38 -07:00
|
|
|
account and holds its money. Leaves are HKDF-SHA256 (salt `lineage/v0`) and must stay byte for byte with lineage's key tree page;
|
2026-10-14 19:49:05 -07:00
|
|
|
`tests/keys.test.js` holds values read off that page.
|
2026-10-14 20:14:11 -07:00
|
|
|
- Secrets show only behind Reveal, reset on every selection, and match the key tree page byte for byte (the tests pin
|
|
|
|
|
hashes of the page's own output).
|
2026-10-14 17:28:33 -07:00
|
|
|
- The page makes no network requests; keep it that way (the deployed CSP sets `connect-src 'none'`).
|
|
|
|
|
- Before shipping: `npm test`, `npm run build`, `npm run test:e2e`.
|