I3236 — Independent derive nodes run in bounded parallel against one snapshot, and the bytes do not depend on the order
Run the graph's independent nodes concurrently up to a declared bound, honouring input, output and publication edges and exclusive resources (staging, local evidence). A clean full derive is the oracle.
BLOKOVÁNO wave 6 · p1 · deep-work profile · parallel safe
Blocked. This issue cannot start until I2525, I2527, I2521, milestone:a-derive-answers-within-a-second are done. The status is derived from that, not declared.
Cíl
Run the graph's independent nodes concurrently up to a declared bound, honouring input, output and publication edges and exclusive resources (staging, local evidence). A clean full derive is the oracle.
Proč
Owner 2026-10-17: derive 'in parallel'. Board p3: shared staging and evidence forbid naive A/B/C parallelism, so parallelism has to follow real edges. Proposed in ADR 0185 (A derivation is a typed graph of the generators the executable already plans, keyed by the content of what each node reads, and the full derive stays its oracle) (proposed; it carries no authority until the owner accepts it). Sources: chatgpt-majordomus:c265#8, chatgpt-majordomus:c292#2.
Aktuální stav
Verified on master 707a04c, 2026-10-18: scripts/derive runs four stages sequentially and no node graph exists. .ai/repo/benchmarks holds economics, observatory, pages and rust only, so no derive bench target, baseline or reference machine exists. I2349, which the 10-13 plan named for it, is in neither tree.
Cílový stav
Nodes the plan marks independent run concurrently; the derive reports its critical path.
Rozsah
- scripts/derive
- apps/majordomus-cli/src/bench
- test/cases/82_bench_check.sh
- docs/PERFORMANCE.md
- .ai/repo/project/intents
- .ai/repo/benchmarks/rust/policy.yaml
- .ai/repo/benchmarks/rust/baseline.macos-aarch64-debug.json
Mimo rozsah
- A scheduler outside the crate
- Cross-machine scheduling (offload, I2398)
Závislosti
- I2525BLOCKED An incremental derive runs only the nodes its plan marks, a no-op derive runs no generator, and the full derive stays as it is
- I2527BLOCKED An incremental derive equals a full derive byte for byte, and an omitted dependency turns a gate red
- I2521READY What a derive costs is measured per stage and per kind of change, and every file a stage reads is listed
- I2068HOTOVO Verdikt, který závisí na runneru, to říká, a jeden studený vzorek není regrese
Kritéria přijetí
- Output bytes are identical across randomized node order and worker counts 1..N on the differential fixtures
- A node holding an exclusive resource never overlaps another holder
- The bound is declared in policy and a failure cancels its dependents
- The derive scenarios no-op, one-input and batch are bench targets with a baseline committed under .ai/repo/benchmarks/, measured on a declared reference machine: the shared development machine where derives queue, not the macos-latest CI runner
- bench --check fails a derive regression beyond its noise-aware threshold and names the stage. Noise follows I2068: one cold sample over threshold warns, two agreeing samples fail, and the load is recorded
- The bench target, baseline and gate land before nodes run in parallel, so the parallel change is judged against them
- Criteria unchanged-tree-derive-is-sub-second and one-input-derive-is-sub-second of intent a-change-is-judged-in-minutes become evidence: test with refs to this issue's derive bench check case, and incremental-equals-full becomes evidence: test with a ref to I2527's incremental_equals_full_case, replacing the circular `majordomus intent explain` refs
- The intent lists milestone a-derive-does-only-the-work-its-inputs-changed beside its own
Validace
- cargo test --manifest-path apps/majordomus-cli/Cargo.toml --lib derivation
- scripts/derive-check
- bash test/run.sh 82_bench_check
Požadované důkazy
- randomized_order_equals_full_case
- derive_bench_check_names_the_stage_case
- derive_baseline_committed
Důkazy
Nic nezaznamenáno. Za každým tokenem výše musí stát příkaz nebo artefakt, než lze tento úkol dokončit; vyprávění se odmítá.
Časová osa
- zahájeno
- —
- ověřeno
- —
- dokončeno
- —
Tato tři pole, důkazy výše a stav závislostí jsou vše, z čeho se stav skládá. Neexistuje žádné pole stavu, které by s nimi mohlo být v rozporu.
Canonical record: .ai/repo/project/issues/I3236.yaml. Read it back with majordomus plan show I3236.