Commit graph

331 commits

Author SHA1 Message Date
badlogic
c4289b20eb fix(chord): keep tracked paths correct across structural mutation
A wrapper baked its path at creation, so a reference held across a
structural mutation kept addressing its old index: unshift then a write
through a held element edited its neighbour, and a write after a splice
could produce a path the replica cannot resolve. The baseline diff this
tracker replaced was immune, because its dirty paths were only hints and
the ops came from comparing values.

A wrapper now holds a cell (parent link plus segment) and the path is
walked at use time, so renumbering an element corrects every descendant.
pop/shift/unshift/splice and length truncation shift live children by the
delta and mark removed ones dead; sort/reverse/fill/copyWithin relocate
them by identity. Renumbering iterates a set of live cells rather than the
lookup cache, which is keyed by index and can evict a child that is still
held. Writes through an element that left the document mutate it and
record nothing, as plain JS and the baseline diff both do.

One object can occupy several positions in the tree. A wrapper is now
shared per target and holds a cell per position, and a write emits an op
for each, which is what the baseline diff produced for the same shape.
Positions are registered when a path is read, when a tracked value is
assigned elsewhere, and when one is inserted by an array mutator (only the
inserted range is examined; scanning the array made every structural
mutation O(n)). A blocked view of an object gets its own wrapper so the
reserved-key guard cannot be bypassed through a safe alias.

Paths are cached per cell against a counter that only structural mutation
bumps, and the per-write cell walk is skipped until a document actually
aliases something.
2026-09-18 00:32:50 +00:00
Mario Zechner
2c995acf44 feat(chord): replace delta tracker with operation log 2026-09-17 16:36:37 +02:00
Mario Zechner
729d5cb74d docs(agent): finalize Pico5 specification set 2026-09-17 14:57:03 +02:00
Armin Ronacher
4a6ed01945
fix(coding-agent): update runtime dependencies (#9341) 2026-09-08 16:04:35 +02:00
Armin Ronacher
d981de1229 Release v0.85.1 2026-09-05 13:54:46 +02:00
Armin Ronacher
107d79f110 Release v0.85.0 2026-09-04 11:57:38 +02:00
Armin Ronacher
5dd8c01320 fix(chord): make post-cutover reload failures terminal 2026-09-01 16:16:12 +02:00
Armin Ronacher
c4b0e35abe feat(chord): keep services available during facet reloads 2026-09-01 10:47:08 +02:00
Armin Ronacher
fa5036836d feat: consolidate remote service adapters 2026-09-01 10:09:01 +02:00
Armin Ronacher
1a7bc80e7c feat: move service wire semantics into Chord
Keep protocol payloads transport-opaque and validate service calls, state snapshots, updates, and errors at Chord boundaries. Ensure successful OpenAI Responses messages remain strict JSON so terminal Transcript updates reach clients.
2026-09-01 00:53:40 +02:00
Armin Ronacher
86bac52f94 feat: add delta-backed replicated state
Track mutable provider state and publish immutable operation batches. Keep path codecs isolated per client subscription and state member.
2026-08-31 14:04:42 +02:00
Armin Ronacher
ae2cc5116f feat(coding-agent): replace lane RPC with Chord service 2026-08-31 12:52:25 +02:00
David Brailovsky
ba74f038c6 delta updates, on behalf on mario 2026-08-31 10:21:43 +00:00
Mario Zechner
2865393cec docs(chord): clarify delta ownership and array costs 2026-08-31 04:30:01 +02:00
Mario Zechner
8a738e2b76 docs(chord): explain delta stream encoding 2026-08-31 04:00:18 +02:00
Mario Zechner
3de0030abc docs(chord): keep delta guide user-focused 2026-08-31 03:55:29 +02:00
Mario Zechner
b99964b246 docs(chord): introduce delta operations upfront 2026-08-31 03:55:12 +02:00
Mario Zechner
9af45be821 feat(chord): generate deltas at flush 2026-08-31 03:53:50 +02:00
Mario Zechner
f7079d5628 feat(chord): add JSON delta tracking 2026-08-31 02:04:46 +02:00
Armin Ronacher
65f77ecd6f feat: make Chord facet generations collectible 2026-08-31 00:13:44 +02:00
Armin Ronacher
429f4e756c feat: add package-based facet plugins
Bundle declarative plugin packages with Chord and load fresh generations. Scope client selections to persisted Session and TUI branches, and replace stale local server generations after protocol changes.
2026-08-30 22:05:12 +02:00
Armin Ronacher
0252dff886 feat: add bundled facet distribution and reload
Bundle content-addressed Chord facet entries, distribute server-selected presentation artifacts during the handshake, and reload Session and TUI generations through /reload.
2026-08-30 12:52:58 +02:00
Armin Ronacher
45d0174eed fix: harden Chord service lifecycle semantics 2026-08-30 01:00:26 +02:00
Armin Ronacher
024439d151 feat: clarify Chord remote service APIs 2026-08-29 21:43:01 +02:00
Armin Ronacher
b1e9b9ea8f feat: simplify Chord service slots 2026-08-29 21:08:04 +02:00
Armin Ronacher
1bf0de2144 feat: simplify Chord service APIs 2026-08-29 20:31:33 +02:00
Armin Ronacher
e6dc574d1b feat: isolate Chord context API 2026-08-29 20:01:32 +02:00
Armin Ronacher
6ec57e6e5f feat: consolidate Chord public API 2026-08-29 18:56:26 +02:00
Armin Ronacher
4151e5754c feat: simplify Chord service instance API
Deliver observed services as ordinary typed proxies, expose optional instance-key lookup, and rename the deferred multi-instance capability to ServiceSpawner.
2026-08-29 18:24:18 +02:00
Armin Ronacher
34dc9d055a feat: move facet services into Chord
Move service, replicated-state, facet host, and loader ownership into the standalone Chord package. Migrate consumers and leave runtime JSON enforcement to serializers.
2026-08-29 14:55:51 +02:00
Armin Ronacher
28b49a6b3b feat: add Chord runtime foundation 2026-08-29 14:54:19 +02:00