From 67c63c0f7ff41a55176683b0f55bbd8fb0f4935e Mon Sep 17 00:00:00 2001 From: Mario Zechner Date: Thu, 29 Oct 2026 06:49:17 +0000 Subject: [PATCH] docs(chord): dependency model: the dependency check applies R18 after live, not a rule of its own --- packages/chord/docs/next/dependencies/book.md | 11 ++++++----- packages/chord/docs/next/dependencies/index.html | 11 ++++++----- packages/chord/docs/next/dependencies/model.md | 6 +++--- 3 files changed, 15 insertions(+), 13 deletions(-) diff --git a/packages/chord/docs/next/dependencies/book.md b/packages/chord/docs/next/dependencies/book.md index 19b550bdf..4d9a45678 100644 --- a/packages/chord/docs/next/dependencies/book.md +++ b/packages/chord/docs/next/dependencies/book.md @@ -352,8 +352,9 @@ bounded by its own `readyTimeout` deadline, as today. Then it goes live. The dependency check is the boundary between waiting and working (Astra's F3). Before it, the attempt holds no natives; after it, a dependency that leaves `live` is treated as after live (R18): the attempt goes on, and its calls through that reference meet the reference's state. So a parked attempt never holds a native, and an attempt that -opened a native is never parked. This is a deliberate rule, and Astra called it what it is: a weakening of "live -means every dependency is live". An object can finish opening after a dependency went away. Without that boundary a contributor unloading while the attempt opens its natives +opened a native is never parked. It is not a rule of its own: it is R18's rule for live objects (a dependency that +goes away leaves the object live; same-host calls in flight finish, remote ones fail, new calls meet the reference's +state), applied from the dependency check on. Without that boundary a contributor unloading while the attempt opens its natives would leave it half open and parked, or force a seal, a drain and a fresh attempt for a dependency the object may not even use at once. @@ -1399,9 +1400,9 @@ through, or recovers by its own backoff. 2. **The dependency check is the activation boundary:** once every dependency is `live`, the attempt runs its own steps (natives in order, follow attaches, member checks, derives), bounded by its own `readyTimeout` deadline, and - goes live. A dependency that leaves `live` after the check is treated as after live (R18): the attempt goes on. This - is a deliberate rule (Astra: a weakening of "live means every dependency is live"): an object can finish opening - after a dependency went away, and its calls through that reference meet its state. So a parked attempt holds no + goes live. A dependency that leaves `live` after the check is treated as after live (R18): the attempt goes on. This is + R18's rule for live objects applied from the check on, not a rule of its own (owner, 2026-10-29: a dependency can + go away at any point of an object's life; the object stays live, its calls through that reference meet its state). So a parked attempt holds no natives, and an attempt that opened natives is never parked. 3. **No timer while parked:** no dependency deadline, no backoff. The attempt's deadline is paused while parked (as eager migrations pause it) and resumes with the budget left. diff --git a/packages/chord/docs/next/dependencies/index.html b/packages/chord/docs/next/dependencies/index.html index 3bc8daa6f..3cbb8f533 100644 --- a/packages/chord/docs/next/dependencies/index.html +++ b/packages/chord/docs/next/dependencies/index.html @@ -538,8 +538,9 @@ bounded by its own readyTimeout deadline, as today. Then it goes li

The dependency check is the boundary between waiting and working (Astra's F3). Before it, the attempt holds no natives; after it, a dependency that leaves live is treated as after live (R18): the attempt goes on, and its calls through that reference meet the reference's state. So a parked attempt never holds a native, and an attempt that -opened a native is never parked. This is a deliberate rule, and Astra called it what it is: a weakening of "live -means every dependency is live". An object can finish opening after a dependency went away. Without that boundary a contributor unloading while the attempt opens its natives +opened a native is never parked. It is not a rule of its own: it is R18's rule for live objects (a dependency that +goes away leaves the object live; same-host calls in flight finish, remote ones fail, new calls meet the reference's +state), applied from the dependency check on. Without that boundary a contributor unloading while the attempt opens its natives would leave it half open and parked, or force a seal, a drain and a fresh attempt for a dependency the object may not even use at once.

CodeModehost-lifetime, localHarnesshost-lifetime, localHarnessModelsregistryself.get(Harness): loadingparked: shows loading, no timerself.registry(HarnessModels): usableown steps: open DurableHarness live: a state changedependency check passes; open the sandboxlive; contribute tools
Figure 3. Code mode on W parks on the harness and goes on the moment it is live.
@@ -2256,9 +2257,9 @@ across attempts); the requests are made. The attempt is parked
  • The dependency check is the activation boundary: once every dependency is live, the attempt runs its own steps (natives in order, follow attaches, member checks, derives), bounded by its own readyTimeout deadline, and -goes live. A dependency that leaves live after the check is treated as after live (R18): the attempt goes on. This -is a deliberate rule (Astra: a weakening of "live means every dependency is live"): an object can finish opening -after a dependency went away, and its calls through that reference meet its state. So a parked attempt holds no +goes live. A dependency that leaves live after the check is treated as after live (R18): the attempt goes on. This is +R18's rule for live objects applied from the check on, not a rule of its own (owner, 2026-10-29: a dependency can +go away at any point of an object's life; the object stays live, its calls through that reference meet its state). So a parked attempt holds no natives, and an attempt that opened natives is never parked.

  • No timer while parked: no dependency deadline, no backoff. The attempt's deadline is paused while parked (as diff --git a/packages/chord/docs/next/dependencies/model.md b/packages/chord/docs/next/dependencies/model.md index f29f430d0..172f2a688 100644 --- a/packages/chord/docs/next/dependencies/model.md +++ b/packages/chord/docs/next/dependencies/model.md @@ -145,9 +145,9 @@ through, or recovers by its own backoff. 2. **The dependency check is the activation boundary:** once every dependency is `live`, the attempt runs its own steps (natives in order, follow attaches, member checks, derives), bounded by its own `readyTimeout` deadline, and - goes live. A dependency that leaves `live` after the check is treated as after live (R18): the attempt goes on. This - is a deliberate rule (Astra: a weakening of "live means every dependency is live"): an object can finish opening - after a dependency went away, and its calls through that reference meet its state. So a parked attempt holds no + goes live. A dependency that leaves `live` after the check is treated as after live (R18): the attempt goes on. This is + R18's rule for live objects applied from the check on, not a rule of its own (owner, 2026-10-29: a dependency can + go away at any point of an object's life; the object stays live, its calls through that reference meet its state). So a parked attempt holds no natives, and an attempt that opened natives is never parked. 3. **No timer while parked:** no dependency deadline, no backoff. The attempt's deadline is paused while parked (as eager migrations pause it) and resumes with the budget left.