v2026.7.21: SPEC-236 Phase D v0.1 — Local Pipeline Graph
v2026.7.21: SPEC-236 Phase D v0.1 — Local Pipeline Graph
Section titled “v2026.7.21: SPEC-236 Phase D v0.1 — Local Pipeline Graph”Phase D starts where CapTP gets interesting: an unresolved result is a reference you can name in later work. Full multi-hop wire envelopes are not here yet. What is here is the local substrate those envelopes will sit on: dependency edges, failure cascade, and honest sequential downgrade.
What’s new
Section titled “What’s new”pipeline_link
Section titled “pipeline_link”let root: Promise[u64] = promise.new[u64]()let seg: Promise[u64] = promise.new[u64]()_ = promise.pipeline_link[u64, u64](root, seg)// pipeline_dependent_count(root) == 1The child is a pipeline segment of the parent ([PROM:5.1]). It does not auto-resolve when the parent succeeds — the next producer still owns that resolve. It does fail if the parent breaks.
UpstreamFailed cascade ([PROM:5.3])
Section titled “UpstreamFailed cascade ([PROM:5.3])”If the root fails, is cancelled, or is destroyed while still pending, every
pending dependent (and their dependents) transitions to
Failed(ERR_UPSTREAM_FAILED).
_ = promise.pipeline_link[u64, u64](p0, p1)_ = promise.pipeline_link[u64, u64](p1, p2)_ = promise.signal_fail[u64](promise.resolver[u64](p0), promise.ERR_SCHEMA_MISMATCH)// p1 and p2 → STATE_FAILED, failure_kind == ERR_UPSTREAM_FAILEDTombstone / replay token ([PROM:5.3.3])
Section titled “Tombstone / replay token ([PROM:5.3.3])”_ = promise.set_tombstone_token[u64](p0, 0xC0FFEE01 as u64)// after cascade, dependents carry the same token via tombstone_token()Sequential vs envelope mode ([PROM:5.2.3])
Section titled “Sequential vs envelope mode ([PROM:5.2.3])”| Mode | Meaning |
|---|---|
PIPELINE_MODE_SEQUENTIAL (default) | Segments recorded; driver awaits then issues next call |
PIPELINE_MODE_ENVELOPE (reserved) | True multi-segment wire not live yet |
If you set ENVELOPE today, pipeline_link still records the segment and
increments pipeline_downgrade_count() so nothing is silently dropped.
That counter is the runtime evidence behind P236-W001.
API surface
Section titled “API surface”| API | Role |
|---|---|
pipeline_link[T,U](parent, child) | Record segment |
pipeline_dependent_count[T](parent) | Direct child count |
set_tombstone_token / tombstone_token | Failure record token |
pipeline_mode / pipeline_set_mode | Capability mode |
pipeline_downgrade_count | Sequential fallback observations |
Verification
Section titled “Verification”./scripts/zb test-cluster-promise-pipeline-cascade./scripts/zb test-cluster-promise-pipeline-downgradeScope and what’s next
Section titled “Scope and what’s next”| SPEC-236 phase | Status |
|---|---|
| A — local Promise slots | ✅ |
B — .call() sugar | ✅ |
| C — SBI PromiseId | ✅ |
| D v0.1 — local pipeline graph | ✅ (this release) |
D.1 — wire envelopes + Promise.call | Next |
Reference
Section titled “Reference”- std.cluster reference
- Phase C
- Monastery: Pipeline Cascades (
08-promise-pipeline-cascade.md)