diff --git a/docs/LIFTX_HINT.md b/docs/LIFTX_HINT.md index 844ba10..089805e 100644 --- a/docs/LIFTX_HINT.md +++ b/docs/LIFTX_HINT.md @@ -72,7 +72,7 @@ matters because **the interesting arm enables both.** correctness condition** — an unhinted key falls back to the sqrt. 2. For each, compute `y = sqrt(x^3+7)` host-side (cheap natively) and emit `(x, y)` pairs. 3. Ship them in the chunk payload as a `PackedHashes`-shaped field — ~32 B per key, **~256 KB - against a 7.2 MB witness**. The packed encoder on `feat/aggregate-witness-read-v2` already + against a 7.2 MB witness**. The packed encoder on `archive/feat-aggregate-witness-read-v2` already handles fields of this shape. 4. Guest calls `liftx_hint::install(pairs)` before script verification. 5. **Print `liftx_hint::stats()`.** A silently-empty table reinstates the sqrt while every gate still diff --git a/docs/history/EXPERIMENT_139_BIGINT2.md b/docs/history/EXPERIMENT_139_BIGINT2.md index e97dc4f..46421bf 100644 --- a/docs/history/EXPERIMENT_139_BIGINT2.md +++ b/docs/history/EXPERIMENT_139_BIGINT2.md @@ -1,6 +1,6 @@ # hazync#139, middle path — trial harness -> ⛔ **DEVELOPMENT RECORD — landed from an experiment branch `exp/139-bigint2-middle-path`, 2026-08-28.** +> ⛔ **DEVELOPMENT RECORD — landed from an experiment branch `archive/exp-139-bigint2-middle-path`, 2026-08-28.** > Kept because the reasoning is worth having; **read the corrections below before quoting any number.** > > - **"wholesale is 15% faster" was NEVER PRODUCED BY A RUN.** `hazync_ecdsa_verify_full` existed diff --git a/docs/history/GHOST_GAINS.md b/docs/history/GHOST_GAINS.md index 8b0cef0..818c1f5 100644 --- a/docs/history/GHOST_GAINS.md +++ b/docs/history/GHOST_GAINS.md @@ -1,6 +1,6 @@ # Every remaining gain for Ghost — enumerated, priced, and ranked -> ⛔ **DEVELOPMENT RECORD — landed from an experiment branch `feat/stack-integration`, 2026-08-29.** +> ⛔ **DEVELOPMENT RECORD — landed from an experiment branch `archive/feat-stack-integration`, 2026-08-29.** > Kept because the reasoning is worth having; **read the corrections below before quoting any number.** > > - **the aggregate is not 1,575 s** — measured **405.6 s** on two workers (2026-09-02). diff --git a/docs/history/HELIX_DUAL_BACKEND.md b/docs/history/HELIX_DUAL_BACKEND.md index 08f5f00..2b346b7 100644 --- a/docs/history/HELIX_DUAL_BACKEND.md +++ b/docs/history/HELIX_DUAL_BACKEND.md @@ -1,6 +1,6 @@ # Helix — one guest, two verification backends, gated by height -> ⛔ **DEVELOPMENT RECORD — landed from an experiment branch `hazync_helix_experiment`, 2026-08-28.** +> ⛔ **DEVELOPMENT RECORD — landed from an experiment branch `archive/hazync_helix_experiment`, 2026-08-28.** > Kept because the reasoning is worth having; **read the corrections below before quoting any number.** > > - **9.10x wholesale was never measured** — see `9b767b5`; nothing called the wholesale entry point. diff --git a/docs/history/README.md b/docs/history/README.md index e8f4c65..db9e4db 100644 --- a/docs/history/README.md +++ b/docs/history/README.md @@ -27,7 +27,7 @@ For what is true now, see [`../README.md`](../README.md). | `MODELS.md` | the original Core/Ghost framing | superseded by `../CORE_VS_GHOST.md` | | `STACK_INTEGRATION_PLAN.md` | the four-lever stack plan | executed; results in `../CORE_VS_GHOST.md` | | `BIGINT2_MIDDLE_PATH.md` | #139 middle vs wholesale | decided: middle path | -| `EXPERIMENT_139_BIGINT2.md` | the #139 trial harness | landed from `exp/139-bigint2-middle-path` | +| `EXPERIMENT_139_BIGINT2.md` | the #139 trial harness | landed from `archive/exp-139-bigint2-middle-path` | | `HELIX_DUAL_BACKEND.md` | one guest, both backends, height-gated | verdict: probably not needed | | `GHOST_GAINS.md` | every remaining Ghost gain, priced | superseded in part by `GHOST_NEXT_BUILD.md` | | `MSM_BATCH_VERIFY.md` | Pippenger batch verification | **rejected on measurement** — 4.3x at chunk scale, worth one card | @@ -36,3 +36,22 @@ For what is true now, see [`../README.md`](../README.md). | `WITNESS_WIRE_PROFILE_2026-08-28.md` | witness deserialisation profile | dated; `read_slice` shipped | | `TIP_BLOCK_BIGINT2_2026-08-28.md` | bigint2 on the tip block | dated; **contains its own retraction** (7.53x → 4.48x) | | `SEGDIST_STEP2.md`, `SEGDIST_TASKS.md` | segment distribution steps | folded into `../SEGMENT_DISTRIBUTION.md` | + +## Where the experiment branches went + +The arms these records cite are **git tags**, not branches: `archive/`. + +An experiment branch is a fixed point, not work in progress, and leaving ten of them in the branch +list makes the two that ARE work in progress hard to see. A tag says the same thing and says it more +honestly. Nothing was lost — each tag is the exact tip the branch had: + +```sh +git fetch origin 'refs/tags/archive/*:refs/tags/archive/*' +git show archive/feat-stack-integration # the arm GHOST_GAINS.md cites +git diff main...archive/exp-139-bigint2-middle-path +``` + +⚠ **Retire the branch and its citation together.** These records name their arm so a number can be +traced back to the code that produced it; a citation pointing at a deleted branch is worse than no +citation, because it looks resolvable. If you archive a branch, rewrite the references in the same +commit. diff --git a/docs/history/STACK_INTEGRATION_PLAN.md b/docs/history/STACK_INTEGRATION_PLAN.md index 56a236f..802cc36 100644 --- a/docs/history/STACK_INTEGRATION_PLAN.md +++ b/docs/history/STACK_INTEGRATION_PLAN.md @@ -59,15 +59,15 @@ beside any figure taken from it.** | # | branch | lever | worth | side | moves `METHOD_ID`? | |---|---|---|---|---|---| -| 1 | `feat/bigint2-middle` | #139 middle path | 32 -> 8 cards | guest | **yes** | +| 1 | `archive/feat-bigint2-middle` | #139 middle path | 32 -> 8 cards | guest | **yes** | | 2 | `feat/aggregate-witness-read` | aggregate witness deserialisation | see 2.2 | guest + host | **yes** | | 3 | `feat/join-tree-pipelining` | remove the level barrier | ~1.4x at 32 cards; 7-8% margin at 6 | **host** | **no** | -| 4 | `feat/tier0-codegen` | guest codegen flags | ~2% | guest build | **yes** | +| 4 | `archive/feat-tier0-codegen` | guest codegen flags | ~2% | guest build | **yes** | Three of four move `METHOD_ID`, so they ship as **one re-baseline batch**. Lever 3 is host-side and can merge to `main` alone, at any time, with no board reset. -### 2.1 `feat/bigint2-middle` — DONE, pushed +### 2.1 `archive/feat-bigint2-middle` — DONE, pushed Routes only the ECDSA group arithmetic through the bigint2 accelerator: one line, `ecdsa_impl.h:212`, the `secp256k1_ecmult` computing `u1*G + u2*Q`. libsecp keeps DER parsing, low-S @@ -140,7 +140,7 @@ so they do not commute). **Only the schedule changes.** The narrow tail is structural and stays — but it is **free under bounded lag**, since block *h*'s tail overlaps block *h+1*'s wide segment phase. -### 2.4 `feat/tier0-codegen` — flags only +### 2.4 `archive/feat-tier0-codegen` — flags only `-O3`, rust LTO, CGU=1, `ECMULT_WINDOW_SIZE=21`. Measured in `TIER0_RESULTS_2026-08-26.md`; window 21 alone is **-1.245%** at 212 inputs. Whole batch is ~2%. @@ -160,11 +160,11 @@ roughly halves the win. It is open with checks pending. Treat it as a gate on th ## 4. Integration and benchmarking -`feat/stack-integration` carries all four merged, for one build and one benchmark run. Sequence: +`archive/feat-stack-integration` carries all four merged, for one build and one benchmark run. Sequence: 1. Land lever 3 (`join-tree-pipelining`) to `main` on its own — it needs nothing from the others. 2. Land #190. -3. Merge levers 1, 2, 4 into `feat/stack-integration` as **one re-baseline**; record the new +3. Merge levers 1, 2, 4 into `archive/feat-stack-integration` as **one re-baseline**; record the new `METHOD_ID` once. 4. Benchmark on block 962,000 at 6 cards. Target: <= 8.3 min, >= 17% margin. @@ -173,17 +173,17 @@ roughly halves the win. It is open with checks pending. Treat it as a gate on th ## 4.1 STATUS as of 2026-08-28 22:25 -All four levers are implemented, committed, pushed, and merged into `feat/stack-integration` +All four levers are implemented, committed, pushed, and merged into `archive/feat-stack-integration` with **no conflicts**. The merged tree type-checks: `REAL_EXIT=0`, zero errors, warning count unchanged at 8 (all pre-existing and elsewhere in the file). | branch | commit | state | |---|---|---| -| `feat/bigint2-middle` | `bae4394` | measured 8.00x at proving time | -| `feat/join-tree-pipelining-v2` | `27163ba` | compiles; **unbenchmarked** — needs a 3rd box | -| `feat/tier0-codegen` | `3d8f1fd` | compiles; window-21 table regenerated (see below) | -| `feat/aggregate-witness-read-v2` | `15a1190` | profiled, encoder written, compiles | -| `feat/stack-integration` | `077b2ee` | all four merged | +| `archive/feat-bigint2-middle` | `bae4394` | measured 8.00x at proving time | +| `archive/feat-join-tree-pipelining-v2` | `27163ba` | compiles; **unbenchmarked** — needs a 3rd box | +| `archive/feat-tier0-codegen` | `3d8f1fd` | compiles; window-21 table regenerated (see below) | +| `archive/feat-aggregate-witness-read-v2` | `15a1190` | profiled, encoder written, compiles | +| `archive/feat-stack-integration` | `077b2ee` | all four merged | ✅ **Tier 0 is provably active, not silently ignored.** The build regenerated `$HAZYNC_BASE/secp256k1/src/precomputed_ecmult.c` from `#if ECMULT_WINDOW_SIZE > 19` to @@ -200,7 +200,7 @@ mutable files were backed up to `~/hazync-base-backup-2026-08-28/` before buildi Block 962,000, 8,006 inputs, `HAZYNC_CHUNKS=16`, `HAZYNC_PROFILE_EXEC=1`, both partitions (`count-packed (old)` and `cost-packed (new)`) = 32 chunk executes per arm. -| | control (`main`) | stack (`feat/stack-integration`) | +| | control (`main`) | stack (`archive/feat-stack-integration`) | |---|---|---| | `METHOD_ID` | `916cde9ed4ff3d0bb469b20a33a0a5e2a52e4161a118acd001b284764a288895` | `70fc6484be0a5e2538dd64fae5b0dfcfc82c4a4ae46ea999601d939e053f084d` | | journal digests | 32 | 32 | @@ -235,7 +235,7 @@ width computation into a real function and point the test at it**, so it exercis ### ⛔⛔ MERGING THE BRANCH DOES NOT ENABLE bigint2 **Discovered 2026-08-28 by checking, not by reading.** After a full build of -`feat/stack-integration`, `$HAZYNC_BASE/secp256k1/src/ecdsa_impl.h` was still at the CLEAN md5 +`archive/feat-stack-integration`, `$HAZYNC_BASE/secp256k1/src/ecdsa_impl.h` was still at the CLEAN md5 `308fc36774999286dcc77bf7c7df87b9`. The stack had built without its largest lever and nothing said so. Two separate things must BOTH happen, and merging the branch does neither: @@ -250,7 +250,7 @@ Two separate things must BOTH happen, and merging the branch does neither: does nothing** (macro undefined). Either one on its own builds stock libsecp and looks like a successful build of the stack. -⚠ **Anyone benchmarking `feat/stack-integration` without both steps will measure a stack missing the +⚠ **Anyone benchmarking `archive/feat-stack-integration` without both steps will measure a stack missing the 32 -> 8 card lever, and conclude the stack does not work.** Verify with the md5 above: if `ecdsa_impl.h` is still `308fc367...`, bigint2 is NOT in the build.