46 Commits
Author SHA1 Message Date
teahubxyzandClaude Opus 5.5 5a7f11e49d 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
2026-10-15 16:10:18 -07:00
teahubxyzandClaude Opus 5.5 c8c18b073e Orgchain v1.14: soulbound belts ride their seats' sats
A belt is soulbound: the reducer already bound it to the seat it names,
and now the lab inscribes it on that seat's own sat, so by ordinal theory
it goes wherever the seat goes and never sells apart from it. One reveal
carries an award, three coins in: the seat's, which the pointer puts the
belt in and the seat's own key signs, accepting it; the issuer's, the
parent; and the commit, which pays the fee. Both coins come back unchanged,
so an award needs no postage and costs two fees (1,000 sats). ord marks it
a reinscription and vindicated, since a pointer and an envelope past the
first input would have cursed it before the jubilee. The engine takes that
three-input reveal and nothing looser: the parent spent from the
inscriber's key, both coins returned unchanged, the pointer on an inscribed
sat of the first.

A belt is never a lot, and an award can't land in a tree that is listed or
sold. Trees count and split by inscribed sat, so a seat's belts stay on it
through every sale. Inspect shows a node's belts and ord's charms, and the
award form says whose sat the belt will ride. Belts from before v1.14 stay
with their issuers and count the same.

Rehearsed on Bitcoin Core regtest from height 161: sixteen beats and 131
transactions; ord charms the three belts as the lab does, and after two
whole-tree sales each belt shares its seat's satpoint. The compare now
checks satpoints and charms.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H4upF5LVwmPDDqrhdUfnXh
2026-10-15 15:48:31 -07:00
teahubxyzandClaude Opus 5.5 74ed801176 Orgchain v1.13: whole trees change hands
An org now changes hands with its tree, the derived orgs and agents below
it and the items they hold, and a holding changes hands whole, sold by its
owner, whom the lab wallet plays (the price goes there). Sales stay
cash-free: the money in the tree, every gas tank included, goes to the
seller first, and the items go with the tree.

An ask signs one input, so listing a tree bundles every inscription in it
into one output at the lot's key; an offer spends every output the tree sits
in and merges them. After the join and the adopt, which now move a holding
too (it becomes its buyer's next org), the buyer splits the output back, one
inscription to an output at its new key, each item with the node that held
it, by the layout the deal recorded. A listed or sold tree is frozen whole:
nothing in it acts, sends, is funded or sells alone, nothing above it
graduates or closes it, and a listed holding mines nothing. Graduation roots
are kept by graduation event, since a node can graduate, move and graduate
again. Transactions take up to 64 inputs and outputs.

Rehearsed on Bitcoin Core regtest from height 144: sixteen beats and 131
transactions, time with its six below it bought on an offer, and acme sold
whole on an ask, eleven inscriptions in one output, then split again; ord
puts every inscription in the same output as the lab.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H4upF5LVwmPDDqrhdUfnXh
2026-10-15 14:51:52 -07:00
HyperboxandClaude Opus 5.5 adca2709f0 Orgchain v1.12: both sides of a deal, and orgs change hands
Deals go both ways now, OpenOrdex's partially signed transaction from either
side, on a lot: an item, or an org inside a holding, which its parent sells.
Buy makes an offer, the buy order: the buyer signs the whole deal and the
holder countersigns. Sell makes an ask, the sell order: the lot's key signs
its input alone with SIGHASH_SINGLE|ANYONECANPAY, committing to that input
and to the price to the seller and to nothing else, and any node can take
it, leading with a 600-sat coin of its own so the lot lands in its output.

An org sells cash-free: before its parent lists it or accepts an offer on
it, the org's money, gas tank and items go home, so the price is for the org
alone, and a listed org is frozen until its ask is taken or withdrawn. Its
buyer adopts it with two new lineage/v0 ops, in either order: join, signed
by whoever holds the org's inscription, and adopt, signed by the new parent.
The org takes the buyer's next index and derives its keys there, and its
inscription moves to its new key. Taking an ask adopts at once; after an
accepted offer the buyer adopts when it's ready. The seller's tree keeps a
row at the old index.

Rehearsed on Bitcoin Core regtest: an org sold on an ask, another on an
offer and an item on an ask, twelve beats and 104 transactions, and ord tells
the same story. The rehearsal caught that a miner can put a join and its
adoption in either order within a block, so a move records both halves and
each half belongs to both holdings. The sample ends with both sides
standing: lineage's offer for the launch kit, and well-known's ask for mailr.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H4upF5LVwmPDDqrhdUfnXh
2026-10-15 13:32:29 -07:00
teahubxyzandClaude Opus 5.5 4ad75f0970 Orgchain v1.11: charters, a ladder of legal forms; agents graduate
A new lineage/v0 op, charter, records a node's legal form: sole proprietor,
LLC, series LLC, series or corporation, with a jurisdiction (ISO 3166), a
legal name, who formed it and a SHA-256 of the filings. Legal form is an
attribute, so a node keeps its inscription, keys and history whatever form it
takes, and the newest charter counts. A node charters itself; a series is
chartered by its master, an ancestor chartered as a series LLC. Whether a
charter stands is derived from the tree, never stored: a series lapses if it
graduates or its master closes or stops holding series, so charters commute
with graduations and closes in any block order.

Agents can graduate: a seat goes independent as a holding of its own, with
its own root and keys and its money along, and can then birth, award and
incorporate. Charter is the tenth verb, and the tree tags each node with its
form. Charter hashes a filing from a file in the tab. The sample charters
yolopreneur as a Wyoming series LLC with its ventures as series, and lineage
graduates into Lineage LLC.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H4upF5LVwmPDDqrhdUfnXh
2026-10-15 12:15:48 -07:00
teahubxyzandClaude Opus 5.5 6998ae47aa Orgchain v1.10: keyrings, each key signing in its own chain's standard
A new lineage/v0 op binds a node's keys in one inscription whose parent is the
node itself: its Taproot and SegWit addresses, its npub and its Ethereum
address. Every key signs the same statement the way its own wallets sign a
message: BIP-322 simple signatures for the Bitcoin addresses, a NIP-01 note
(kind 1, created_at 0) for the npub, EIP-191 for Ethereum. The reducer checks
every proof, binds a standing keyring's keys to its node, lets the newest
keyring replace the older, and retires keyrings at a graduation (the keys
change with the new root) and at a close.

Every account gets an Ethereum key at m/44'/60'/account'/0/0; an org's, at
account 0, is the key tree page's legal-control key and matches its published
vector. Keyring is the ninth verb; Inspect shows each node's keyring and the
statement its keys signed, and Reveal its Ethereum private key. The sample
publishes three keyrings, and lineage's retires when it graduates.

Tests pin BIP-322's published vectors and values cross-checked with
bip322-js, ethers and nostr-tools. The regtest rehearsal, rerun with five
keyrings, confirmed 89 transactions on Bitcoin Core; ord's 26 events fold to
the same trees and keyrings, every proof checked from ord's copy, and the
fixture is re-recorded.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H4upF5LVwmPDDqrhdUfnXh
2026-10-15 10:48:28 -07:00
teahubxyzandClaude Opus 5.5 7c9306402d Orgchain v1.9: lineage/v0 as an ordinals metaprotocol, rehearsed on regtest
SPEC.md writes lineage/v0 down as an ordinals metaprotocol: the envelope
fields, chain order, authority by verified parents, every rule, ownership by
sat. bin/lineage-index.mjs reads lineage events from a real ord server and
folds them with the same reducer the lab uses.

tools/regtest rehearses the sample on Bitcoin Core regtest with standardness
on: the lab's own action code signs on a chain funded only by coins imported
from regtest (LocalChain.importCoin), each beat's transactions are broadcast
byte for byte and mined, ord indexes them, and --compare checks the same
events in the same beats, the same metadata and parents, every inscription
in the same output and the same trees. tests/indexer.test.js replays a
recorded run.

The first rehearsal found that reveals committed to tapscript's re-encoded
tapleaf, which real Bitcoin rejects. They now commit to the exact script
bytes, and the local chain checks script paths per BIP-341/342, still
loading reveals made before.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H4upF5LVwmPDDqrhdUfnXh
2026-10-15 02:04:35 -07:00
teahubxyzandClaude Opus 5.5 7d981341ff Orgchain v1.8: belts cross holdings, and a graduate becomes its own holding
From the operator's notes on trying v1.6.1. An award's recipient may sit in
any holding, so a registry like well-known can certify an agent it doesn't
hold (say, after the agent pays it). A graduated org already held its own
root; now it is a holding of its own too: it and its subtree re-root under
it, it joins the Holdings list with its own tree and timeline, mines its
share and can be funded, and its parent's tree keeps a row for it that opens
it. Events that touch two holdings (a belt across them, a graduation) show in
both timelines, and the holding that acted gets the last-act credit.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H4upF5LVwmPDDqrhdUfnXh
2026-10-15 00:44:59 -07:00
teahubxyzandClaude Opus 5.5 69a97544da Orgchain v1.7: items, standing offers and the first deal; a Mainnet setting
The chain takes ordinary spends of up to eight inputs and outputs, whose
key-path signatures may carry SIGHASH_SINGLE|ANYONECANPAY (0x83); reveals
keep their two-in, two-out shape. A new make op records an item, an
inscription its maker holds. Any node can offer test BTC for an item another
node holds, in any holding: the buyer's SegWit key signs the whole deal, the
offer stands in the lab, and the holder accepts by countersigning the item's
input, so the item and the payment swap in one transaction. Offers go stale
when a promised coin moves or a side re-keys or closes, and payments spend
unpromised coins first. Sends take up to eight coins. Mainnet is a third
mining setting: no holding mines, beats pay the lab wallet, and holdings are
funded from it. The sample ends on lineage's open offer for sol's launch-kit.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H4upF5LVwmPDDqrhdUfnXh
2026-10-15 00:32:29 -07:00
teahubxyzandClaude Opus 5.5 32e8131500 Orgchain v1.6.1: under Last act, a timed beat goes to whoever acted last
A timed or manual beat used to pay the holding being worked in. Now it pays
the holding behind the newest cued act or send; with nothing cued, Beat now
still pays the one being worked in. At a timed tempo, holdings race for it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H4upF5LVwmPDDqrhdUfnXh
2026-10-14 23:21:33 -07:00
teahubxyzandClaude Opus 5.5 2354947d16 Orgchain v1.6: holdings share the mining, every act pays its gas, money crosses holdings
Mining is a lab setting. Split (the default) pays every active holding a
share of each beat, pro rata by a hashrate dial on each holding (0 to 9,
1 unless set), one coinbase output per holding. Last act gives the whole
beat to the holding that acts. Every act is paid by the acting node's own
keys: fees and postage come out of its gas tank (the plain coins at its
Taproot key), which tops up from its own money 0.0001 test BTC at a time.
Each act is checked before anything is signed, so an unfunded node can't
act. A graduating org pays for its own claim, and the lab wallet pays only
for foundings and for holdings that predate lab keys. Sends cross
holdings, the ledger shows gas top-ups, and chain keys are derived once
per page.

The engine's second local change: a coinbase may split its reward across
up to 64 outputs (mineTo), in src/adapters/chain.js.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H4upF5LVwmPDDqrhdUfnXh
2026-10-14 23:16:03 -07:00
teahubxyzandClaude Opus 5.5 6d5806d45b Orgchain v1.5: beats pay the holding, and test BTC moves down the tree
Each beat pays its 50 test BTC block reward to the holding being worked in, at
its SegWit (BIP-84) address. Send moves test BTC between active nodes of a
holding, signed by the sender's BIP-84 key, with the toy chain's 500-sat fee:
at most two coins in and one block reward out. Sends land like acts, and Beat
now mines a beat even when nothing is cued. A graduation moves each re-keyed
node's money to its new address with its inscription. Balances follow the
slider, the timeline lists every reward and send, and Inspect shows exact
amounts and the raw transaction. The sample passes some of yolopreneur's
rewards down its tree.

The engine's one local change: the toy chain also takes P2WPKH outputs and
SIGHASH_ALL P2WPKH spends (BIP-143), in src/adapters/chain.js. Super
Testnet's tests pass unchanged; tests/money.test.js covers the rest.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H4upF5LVwmPDDqrhdUfnXh
2026-10-14 22:25:38 -07:00
teahubxyzandClaude Opus 5.5 aeb11d334f Orgchain: three columns, so a long Inspect no longer opens a gap
The side column (act and inspect) grew with keys, leaves and secrets,
and because it spanned both grid rows it stretched the first one, which
pushed the timeline far below the tree. The layout is now three columns
that run on their own (holdings; tree with its timeline; act and
inspect) over a flexible last row, and the medium layout keeps the
timeline under the tree as well. The footer links the scure licenses.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H4upF5LVwmPDDqrhdUfnXh
2026-10-14 20:31:25 -07:00
teahubxyzandClaude Opus 5.5 17b8692174 Orgchain v1.4: the tapkey returns, and every node's secrets behind Reveal
Each node lists its Tapkey again beside Taproot and SegWit: the npub as
a Taproot address (its nostr key with the BIP-86 tweak), so the npub
alone finds it. Its inscription stays at the standard BIP-86 key, since
nostr secrets get pasted into clients.

Inspect gains a Reveal panel, as on lineage's key tree page: the seed
(holdings and orgs), the nsec, Taproot, SegWit and Tapkey descriptors
with test-network WIF and BIP-380 checksums, and the leaves' private
keys (OpenSSH, DKIM, WireGuard, PKCS#8, Headscale), each with Copy.
Tests pin hashes of the key tree page's own output for the NIP-06
vector, BIP-84's WIF and BIP-380's checksum; ssh-keygen reads the keys.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H4upF5LVwmPDDqrhdUfnXh
2026-10-14 20:14:11 -07:00
teahubxyzandClaude Opus 5.5 0af51dc9cd Orgchain v1.3: Taproot and SegWit addresses for every node
Every account now lists standard Bitcoin addresses, so no one has to
derive them: Taproot (BIP-86, m/86'/1'/account'/0/0), which holds the
node's inscription, signs its acts and receives inscriptions, and
SegWit (BIP-84, m/84'/1'/account'/0/0) for payments, beside its npub
(NIP-06). An org is account 0 of its seed and its agents are accounts
1..n, so a wallet that opens an account finds the same addresses. The
lineage key tree page derives the same branches on mainnet paths and
lists the addresses in each agent's keyring.

The v1.2 tapkey (the npub's key, tweaked) is replaced by the standard
BIP-86 key; labs keyed by v1.1 or v1.2 keep their chain keys until
they are reset. Tests pin BIP-86 and BIP-84's own vectors.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H4upF5LVwmPDDqrhdUfnXh
2026-10-14 19:49:05 -07:00
teahubxyzandClaude Opus 5.5 00a35613c5 Orgchain v1.2: tapkeys and lineage's leaves
A node's chain key is now its tapkey: its NIP-06 npub with the BIP-86
tweak, so one secret signs its nostr events and its chain spends, and
its address follows from its npub. Its leaves hang off the same tree,
byte for byte as on lineage's key tree page: an agent's ssh, git, dkim
and wg keys from its nostr secret, an org's ssh-ca, mtls and noise keys
from its seed. Inspect shows the tapkey, npub, derivation and leaves,
with the public lines to paste. Labs keyed by v1.1 keep their separate
m/86' chain keys until they are reset.

PROVENANCE.md and public/licenses now carry @scure/base, bip32 and
bip39, which came in with v1.1.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H4upF5LVwmPDDqrhdUfnXh
2026-10-14 19:11:08 -07:00
teahubxyzandClaude Opus 5.5 744c5946aa Orgchain v1.1: lineage's keys, from the tree branch
Folds in the tree branch's key layer (2ea7884): lineage-keys.js and
handoff.js come over as written, with their spec vectors; the off-chain
keyring and the old UI stay behind, because v1's tree comes from the chain.

- Each holding gets its own 24-word lab root. Every node has lineage's
  keys at its place in the tree: BIP-85 org seeds, agents as accounts
  1..n of their org's seed, BIP-86 wallets and NIP-06 npubs.
- Every act is signed by whichever key holds the authorizing inscription;
  a birth hands the child its own; the lab wallet is the faucet.
- Graduation is a claim by the org's fresh root, countersigned by its
  derived key, and the derived subtree re-keys under the new root, so the
  parent's line can no longer sign for it. Adopted descendants keep theirs.
- Inspect shows each node's key path, npub, address and current holder,
  and which key signed each event; the act panel names the signing key.
- Labs saved before keys still load; their holdings sign with the lab
  wallet.
- 49 unit tests (6 new), Playwright 6/6 with key checks.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H4upF5LVwmPDDqrhdUfnXh
2026-10-14 18:22:22 -07:00
teahubxyzandClaude Opus 5.5 6acc319ee7 Orgchain v1: create and operate lineage holdings across time
Super Testnet's kitchen sink becomes lineage's app. Lineage gives the
structure; the chain adds time.

- Holdings home, a tree drawn like docs/lineage.md, act and inspect panels,
  and a timeline grouped by beat.
- Verbs: found, birth, award, decide, graduate, close. Each is a lineage/v0
  inscription whose parent is the node that authorizes it.
- One reducer (src/orgchain/lineage.js) folds the events into trees and vets
  every act before it is signed. Closing cascades through derived children;
  graduated (adopted) ones stay open.
- Time: tempo each act / 10s / 30s / 60s / manual, Beat now, and a view
  slider with replay. A beat is a block; cued acts wait in the mempool.
- Its own lab (orgchain:lab:v1) with save, load and reset; a yolopreneur
  sample of six beats.
- Removed: the recursive preview, explorer UI, server, Docker and Fly files.
  The engine (src/adapters, src/upstream, storage, miner) is unchanged.
- Tests: reducer and lab (node --test), plus a Playwright spec for desktop
  and mobile that also runs against a deployed copy.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H4upF5LVwmPDDqrhdUfnXh
2026-10-14 17:28:33 -07:00
teahubxyzandClaude Opus 5.5 6d48c5c8ff orgchain: Super Testnet restyled for lineage (lineage.yolopreneur.lol/orgchain/)
Skin and copy only: src/lineage.css over style.css with lineage's tokens, a rehearsal guide and lineage branding,
relative paths (base './'), the theme follows the system under its own key, and Inscriboor downloads link to
supertestnet.lol (the extension only connects there). Unit tests 32/32; checked in Chrome at 1280 and 390 wide,
light and dark, through a full root → birth → recursive inscription run with no CSP or script errors.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H4upF5LVwmPDDqrhdUfnXh
2026-10-14 16:06:04 -07:00
teahubxyz 96876db762 README: one paragraph 2026-10-14 15:30:07 -07:00
teahubxyz d5b7c3a8b8 README: prod is Teahub pages (pages branch) 2026-10-14 15:29:59 -07:00
matcha 00e93f5ab3 x 2026-10-05 06:10:47 +00:00
matcha 5e32bd3e60 Publish Inscriboor 0.2.3 bridge fix 2026-10-05 05:53:03 +00:00
matcha 3445d66e1e Publish Inscriboor 0.2.2 and update detection 2026-10-05 05:43:15 +00:00
matcha c9c18e85f6 Fix Inscriboor detection flow 2026-10-05 05:29:30 +00:00
matcha 84f684ad0d Publish Inscriboor extension build 2026-10-05 05:14:58 +00:00
matcha a6323f7a6c Add Inscriboor download and install flow 2026-10-05 05:14:48 +00:00
matcha 2333dad0dc Use Inscriboor for page signing 2026-10-05 04:54:54 +00:00
matcha f12e8023c7 Add Inscriboor signer choice 2026-10-05 04:51:27 +00:00
matcha 9200346ad9 Add Inscriboor commit reveal signer 2026-10-05 04:48:48 +00:00
matcha b623b27939 Persist extension wallet descriptors 2026-10-05 04:43:41 +00:00
matcha 276a945f83 Add Inscriboor extension wallet adapter 2026-10-05 04:43:31 +00:00
recovery bcc9f0f1cd Add native metaprotocol field 2026-10-05 04:03:16 +00:00
recovery 5d1a1ae866 Add delegate recursion and reinscription UI 2026-10-05 03:57:01 +00:00
recovery 9f27897967 Index delegates and sat locations 2026-10-05 03:56:58 +00:00
recovery 4190cedca9 Add synthetic sat tracking and inscription pointers 2026-10-05 03:56:52 +00:00
Codex aa39db3879 Add CBOR metadata indexes, local API and coordinated auto mining 2026-10-05 02:33:54 +00:00
Codex 0405452ab2 Refine branding and default to dark theme 2026-10-05 01:29:49 +00:00
Codex acd2652046 Extend local inscription lab with MIME bodies and parent provenance 2026-10-05 01:23:21 +00:00
matcha 83a19b51ff Cover theme persistence and live chain explorer flow 2026-10-05 00:57:00 +00:00
matcha c6d3af5dfd Add live mempool and block explorer interactions 2026-10-05 00:56:42 +00:00
matcha 54c2108a98 Switch to Bitcoin orange and theme-aware explorer styling 2026-10-05 00:56:08 +00:00
matcha 4aa2d1c7ef Add chain explorer layout and theme toggle 2026-10-05 00:55:41 +00:00
Codex 4fa4130150 Build browser-native Super Testnet v0 inscription loop 2026-10-04 23:24:48 +00:00
matcha d3272032c8 Initialize repo agent guidance 2026-10-04 23:03:47 +00:00
matcha 4270713328 Initial commit 2026-10-04 23:03:42 +00:00