a-derive-answers-within-a-second — An ordinary derive answers in under a second, runs independent nodes in parallel, and a budget gate holds it
Derive scenarios (no-op, one input, batch, plus the ten of c255#7) are bench targets under the existing benchmark policy. bench --check refuses a regression. Independent nodes run in bounded parallel against one immutable snapshot, with output identical under any order, and a derive's whole output set is published atomically.
BLOKOVÁNO 0 ze 2 úkolů hotovo
- připraveno
- 0
- blokováno
- 2
- aktivní
- 0
- verify
- 0
- hotovo
- 0
- zrušeno
- 0
Problém
The 10-13 graph plan makes a derive do less, but it sets no time budget, runs nodes one at a time and publishes file by file. The owner's 10-17 order asks for 'sub second, in parallel' with every algorithm, cache and architectural choice reviewed. ChatGPT's own reply (c292#1) called sub-second without benchmarks 'marketing'. 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:c292#0, chatgpt-majordomus:c292#2.
Výsledek
Derive scenarios (no-op, one input, batch, plus the ten of c255#7) are bench targets under the existing benchmark policy. bench --check refuses a regression. Independent nodes run in bounded parallel against one immutable snapshot, with output identical under any order, and a derive's whole output set is published atomically.
Aktuální stav
Verified on master: the benchmark harness (I0823-I0827, rule rust-benchmark-coverage, test/cases/82_bench_check.sh) has no derive target, and .ai/repo/benchmarks/ holds economics, observatory, pages and rust only. MJ_TIMING phase timers exist in lib/common.sh. generate::write is atomic per file, not per set. Off master: I2349 (rescue ref) plans the derive and CI budgets.
Cílový stav
I2349 revived and amended; I3236 parallel nodes; I3237 transactional publication. Order follows c292#2: baseline, then no-op and invalidation, then graph and cache, then parallelism, then transactional publish, so each regression can be attributed.
Rozsah
- apps/majordomus-cli/src
- apps/majordomus-cli/src/bench
- .ai/repo/benchmarks
- scripts/derive
- docs/PERFORMANCE.md
Mimo rozsah
- Cold rebuild budgets (separate contract)
- Removing or narrowing the machine derive lock (rule project.one-derive-at-a-time; see open question)
- Mesh-shared derive cache
Kritéria přijetí
- Derive scenarios are bench targets with a committed baseline and a declared reference machine
- bench --check fails a derive regression beyond its noise-aware threshold and names the stage
- Output bytes are identical across randomized node order and worker counts
- A derive killed mid-run leaves the previous consistent set on disk
Validace
- majordomus plan validate
Rizika
- Parallel nodes raise peak load on the shared machine that the lock exists to bound (2026-10-09: nine sessions at load 57)
- Budgets measured at load 20-68 (I2880, 10-18) are noise; I2068 already says one cold sample is not a regression
Úkoly
Každý z nich je prováděcí kontrakt s vlastními kritérii přijetí, validačním příkazem a požadovanými důkazy. Sloupec wave je vrstva grafu závislostí, v níž úkol leží.
| issue | status | vlna | závisí na | název |
|---|---|---|---|---|
| I3236 | BLOKOVÁNO | 6 | I2525, I2527, I2521, I2068 | Independent derive nodes run in bounded parallel against one snapshot, and the bytes do not depend on the order |
| I3237 | BLOKOVÁNO | 2 | I2522, I2521 | A derive publishes its whole output set at once after validating it, and a killed derive leaves the previous set |
Graf
flowchart LR
I3236["I3236<br/>Independent derive nodes run in bounded parallel against one snapshot, and the bytes do not depend on the order"]:::blocked
I3237["I3237<br/>A derive publishes its whole output set at once after validating it, and a killed derive leaves the previous set"]:::blocked
classDef done stroke:#16a34a,fill:#dcfce7,color:#14532d,stroke-width:2px
classDef active stroke:#2563eb,fill:#eff6ff,color:#1e3a8a,stroke-width:2px
classDef verify stroke:#7c3aed,fill:#f5f3ff,color:#4c1d95,stroke-width:2px
classDef ready stroke:#0891b2,fill:#ecfeff,color:#164e63,stroke-width:2px
classDef planned stroke:#0891b2,fill:#ecfeff,color:#164e63,stroke-width:2px
classDef blocked stroke:#b45309,fill:#fffbeb,color:#78350f,stroke-width:2px
classDef cancelled stroke:#6b7280,fill:#f9fafb,color:#374151,stroke-width:2px
classDef superseded stroke:#6b7280,fill:#f9fafb,color:#374151,stroke-width:2pxCanonical record: .ai/repo/project/milestones/a-derive-answers-within-a-second.yaml. Read it back with majordomus plan show a-derive-answers-within-a-second.