Commit graph

191 commits

Author SHA1 Message Date
Mario Zechner
0c3675e647 docs(chord): slice 7b spec: reload in the kernel 2026-10-29 13:05:53 +00:00
Mario Zechner
ec7852988e docs(chord): slice 7b decisions as recommended 2026-10-29 13:02:46 +00:00
Mario Zechner
ba7bdb9afc docs(chord): slice order: 7b, 7c, 10, 11, telemetry last 2026-10-29 12:44:38 +00:00
Mario Zechner
b857fbd8a9 docs(chord): slice 7b brief: plugin dependencies 2026-10-29 12:32:09 +00:00
Mario Zechner
601461e205 docs(chord): decision: plugin dependencies bundled, external by opt-in 2026-10-29 12:31:40 +00:00
Mario Zechner
adfa8f3827 docs(chord): slice 7b brief: plugin layout, building and loading, assets, HTTP, the app kit, measurements 2026-10-29 12:15:57 +00:00
Mario Zechner
972d7017af docs(chord): slice 7b brief: reload, decided and open points 2026-10-29 11:54:38 +00:00
Mario Zechner
339847eb14 feat(chord): Chord v2 slice 7a, the dependency model
A reference is a request that outlives its provider: a missing provider or a version that does not fit leaves
it unbound, waiting for the name (failed { waiting }, a new FailureCause kind), local and remote alike. An
attempt parks until its dependencies are live, with no timer and no backoff, woken on every state change of a
dependency; its readyTimeout runs only for its own steps. Requests wait only for the host's publication (the
startup deadlock is gone); load resolves at the first outcomes of its host-lifetime objects. Getters wait through
waiting until their readyTimeout. Registry readers are waiting dependencies, woken at every usable value; a last
good value is dropped when a contribution it was built from leaves. Unbound holds count for keep-alive and are
revoked; retry passes on to failed blockers once per operation (operation id and visited list on the wire); the
dependency deadline is gone and parked_long reports a long wait on a remote attempt.
2026-10-29 11:40:57 +00:00
Mario Zechner
babe30a7e6 docs(chord): slice 7a spec: the dependency model; slice 7 split into 7a and 7b 2026-10-29 08:32:56 +00:00
Mario Zechner
39b16b2281 docs(chord): the dependency model is decided 2026-10-29 08:31:59 +00:00
Mario Zechner
a5609aae81 docs(chord): decision: no cycle probe; parked_long diagnostic and authoring rules 2026-10-29 08:31:15 +00:00
Mario Zechner
249f24bfc5 docs(chord): getters decision: reviewer votes 2026-10-29 08:03:10 +00:00
Mario Zechner
a54f250fb4 docs(chord): decision: getters wait through waiting until their readyTimeout 2026-10-29 08:00:54 +00:00
Mario Zechner
aee933269b docs(chord): dependency model: hostAddress wording 2026-10-29 07:44:21 +00:00
Mario Zechner
373fbcc706 docs(chord): dependency model: hostAddress 2026-10-29 07:37:56 +00:00
Mario Zechner
5ec2418820 feat(chord): hostAddress instead of placement, required on remote types; only hosts with an address serve remote types
The contract field placement is hostAddress, required on every remote() (type and declaration error); the
fallback for remote types without one is gone. invalid/placement is invalid/host_address. host/placement.ts
(Placement) is host/destination.ts (Destination); here is decided by address alone, and a host without an
address refuses to serve a remote type. A hold always carries its address on the wire (the binary codec's
ADDRESS flag is gone, the text codec requires it). Tests and examples declare their host addresses.
2026-10-29 07:37:37 +00:00
Mario Zechner
d0687bce85 docs(chord): only hosts with an address serve remote types; holds always carry their address 2026-10-29 07:29:25 +00:00
Mario Zechner
943f30c909 docs(chord): design: hostAddress instead of placement 2026-10-29 07:25:19 +00:00
Mario Zechner
599127ea36 docs(chord): decision: hostAddress instead of placement 2026-10-29 07:24:20 +00:00
Mario Zechner
0ddc953102 docs(chord): dependency model: placement required on remote types 2026-10-29 07:17:49 +00:00
Mario Zechner
13dee75529 docs(chord): every remote type declares its placement 2026-10-29 07:17:22 +00:00
Mario Zechner
1b760044ec docs(chord): note: every object may contribute (for later) 2026-10-29 07:06:37 +00:00
Mario Zechner
67c63c0f7f docs(chord): dependency model: the dependency check applies R18 after live, not a rule of its own 2026-10-29 06:49:17 +00:00
Mario Zechner
e65b3b88c0 docs(chord): dependency model proposal for slice 7 and its explainer (Parked Until Resolved) 2026-10-29 00:51:57 +00:00
Mario Zechner
556860a386 docs(chord): no client providers for now 2026-10-28 23:16:28 +00:00
Mario Zechner
6eb99ad65b feat(chord): Chord v2 slice 8, registries and host.root
Registries: shared tokens (defineRegistry), one provider per host (host.serve(R, { compose, accepts })),
contributions from facets and host-lifetime objects, plain values or followed Chord watchables, a table
sorted by plugin, lazy compose in the batch that changed the table, failures left out and reported with
the last good value kept; self.registry as a declared dependency, host.registry outside objects, older
readers mapped by accepts[old].value; keyedEntries and orderedEntries. Native sources: self.writable,
registry values and ref.state. self.retryOn wakes failed objects on registry values. host.root gives code
outside objects a call scope sealed at settle, abort and host.close.

Durable: registryReader(value, context); a Session close ends synchronous observers failed
("session closed"), watches still end ended.
2026-10-28 21:34:56 +00:00
Mario Zechner
edab3efa83 docs(chord): slice 8: only Chord watchables are followed as contributions 2026-10-28 21:07:42 +00:00
Mario Zechner
790a98b9ab docs(chord): design §17 compose failure and helper names as built 2026-10-28 21:07:05 +00:00
Mario Zechner
1ce44bedeb docs(chord): slice 8 S2 and S3 wording as refined 2026-10-28 21:05:01 +00:00
Mario Zechner
391e83fb17 fix(chord): Chord v2 follows its design where the audit of slices 1-6a found it did not
A failed activation releases its references after its natives closed; a dependency going live while
the dependent activates retries it at once; a call on a local object runs with the host's principal
and incarnation; retiring an unloaded document checks its stored version and fingerprint, and a cut
retirement no longer fails its successor; ref.retry() re-runs a refused hold's start on the same id
(the provider keeps refused holds), and ends released/closed on a closed host; a relayed hold waits
while the parent link is down; a link drop while a dependency is still loading is no failure.
2026-10-28 19:50:41 +00:00
Mario Zechner
6975eb18a6 docs(chord): design §3 route context, §7 retry of a refused hold 2026-10-28 19:44:10 +00:00
Mario Zechner
e613c7487b docs(chord): design §3 placement: a parent link that is down waits 2026-10-28 19:41:25 +00:00
Mario Zechner
9017ce0813 docs(chord): slice 6b built 2026-10-28 19:27:58 +00:00
Mario Zechner
14b4c56e57 feat(chord,durable): Chord v2 slice 6b, Durable and jobs on the store
StoreStorage (Durable's storage on Chord v2's store, @earendil-works/pi-durable/storage/store) passes
Durable's storage conformance suite and runs Durable's harness tests (npm run test:store). The store
gets owner names and claims, one id allocator, Durable's Storage semantics for refused steps, history
none/latest/rewindable with reads at a point, archive revisions and applyBatch. self.follow follows
Durable's synchronous observers as Chord sources. Persisted jobs: records and state in the owner's
store, restarts as Durable's tasks, abort stored, deferred state. Chord's ./next export returns for
the adapter surface.
2026-10-28 19:18:30 +00:00
Mario Zechner
4e5cd1a973 docs(chord): slice 6b resume watch cost accepted 2026-10-28 19:03:49 +00:00
Mario Zechner
33385f9572 docs(chord): attribution of the StoreStorage.close rule 2026-10-28 18:53:50 +00:00
Mario Zechner
ec2c8ed311 docs(chord): slice 6b reopen and commit numbers accepted 2026-10-28 18:51:30 +00:00
Mario Zechner
97553d10f2 docs(chord): design text after the audit of slices 1-6a 2026-10-28 18:10:32 +00:00
Mario Zechner
cc41246b9d docs(chord): design audit of slices 1-6a, decisions 6a and 7a 2026-10-28 18:10:01 +00:00
Mario Zechner
9ae3d8814c docs(chord): design §6 seal fence: staged job changes adopted 2026-10-28 17:58:27 +00:00
Mario Zechner
dc35ae2d92 docs(chord): slice 8: ref.state is a native source too 2026-10-28 17:56:37 +00:00
Mario Zechner
568f6c47eb docs(chord): slice 8 ready to build 2026-10-28 17:53:56 +00:00
Mario Zechner
82a0d646e5 docs(chord): slice 8 review 2 leftovers; design §24 harness example 2026-10-28 17:52:54 +00:00
Mario Zechner
eb9d443462 docs(chord): slice 8 review 2 fixes; design §17 and slices folded 2026-10-28 17:51:28 +00:00
Mario Zechner
02a2b2532d docs(chord): slice 8 accepts adapters guarded; example shape 2026-10-28 17:49:48 +00:00
Mario Zechner
5f75cd77f8 docs(chord): slice 8 S3, self.registry is a dependency 2026-10-28 17:48:15 +00:00
Mario Zechner
376ccf6e89 docs(chord): slice 8 revised: self.registry is a dependency; S1-S3; review gaps 2026-10-28 17:48:03 +00:00
Mario Zechner
677e8067b3 docs(chord): slice 6b revision part and examples as built 2026-10-28 17:46:55 +00:00
Mario Zechner
b0eb8ace19 docs(chord): slice 6b entry_heads table 2026-10-28 17:43:57 +00:00
Mario Zechner
df9275d434 docs(chord): slice 8 S2, registry readers of an older version 2026-10-28 17:39:33 +00:00