Skip to content

Wave G: no ordinary quantity request stops a run, cancelled exits stay cancelled, script-bar indices for aggregated runs, kernel edges, the 1.0 C surface, and docs as executable truth - #289

Merged
luisleo526 merged 24 commits into
mainfrom
r5/int25
Sep 25, 2026
Merged

luisleo526 merged 24 commits into
mainfrom
r5/int25

Conversation

@luisleo526

Copy link
Copy Markdown
Collaborator

Wave G: the last correctness wave before the 1.0 release candidate. It integrates nine lanes on main (1a0e7ea1), plus three integration items. The shipped change is a squash of the commits listed at the end.

What changes

  • No ordinary quantity request stops a run (K-ULP4, K-ULP5):
    • a fill the request core cannot take off its units is a typed UnrepresentableQuantity refusal;
    • the quantity grid settles the book's own quantities;
    • an opt-in quantity tolerance;
    • an OCA-Reduce deduction below binary64's resolution is absorbed as a no-op.
      The one remaining stop, a pending total that overflows binary64, is documented.
  • A cancelled exit stays cancelled (V19-FIX). Cancelling and recording cost only what is live. The dead path_order_ member is gone.
  • Aggregated runs book in script-bar space (K-IDX). A bare host sees the documented script-bar index for lots, trades and callbacks, and the input interval stays available as a named coordinate.
  • Kernel edges (KERNEL-EDGE):
    • FX-roll points outside the predecessor marks;
    • session-day facts from the calendar's eligible slots;
    • the final pending script bar closed at batch end and at stream_end(true);
    • a public mark route for bare hosts.
  • C surface for 1.0 (C-SURFACE-1):
    • the published callback layouts are preserved, and an older caller's table size selects its tail;
    • reserved1 != 0 is refused;
    • static layout assertions;
    • last_error is cleared on C-layer refusals.
  • Docs are executable truth (DOC-TRUTH-4):
    • the complete-host example compiles and runs as a test row;
    • the trail_points C columns, excursion units, aborted-host reuse, per-bar rows for bare hosts and the partial-bar contract are corrected;
    • comment names checked by a dangling-name guard.
  • Timing rows hardened against runner noise (RATIO-HARDEN).
  • The validation corpus re-pinned to f989e36 (CORPUS3). The special-validation strategies build against the engine's build tree again.
  • CI:
    • slow rows re-measured and labelled;
    • a full sanitizers run gets an hour on pushes to main, while PR runs keep the fast set;
    • floors recounted per profile.
  • Baseline promotion admits a squash merge by tree equality.

Hash values move once, inside the unreleased v19 epoch, in the single commit "INT25 v19 hash re-pin". Every moved witness is listed there. No trade moved anywhere.

Evidence (all on this exact tree):

  • Remote x86-64 GCC 13 verification, 8 of 8 steps:
    • release 678/678, debug 659/659, sanitizers 659/659;
    • kernel 278 rows (floor 277), kernel residual gate 0 findings;
    • Doxygen 0 warnings;
    • TradingView parity 312/312 probes byte-identical at corpus f989e36 (311 excellent, 1 anomaly), subset 30/30.
  • An identity battery against main:
    • 132 configurations × 8 host variants and 100 public slots with the bar magnifier off and on;
    • trades are identical everywhere; only hash columns differ.
  • Runtime budget: 3.66× against a 15× limit. KERNEL-EDGE's per-bar session lookup adds about 12% instructions on the public slots; a memo follow-up recovers it.
  • Population sweep: all 4,190 probes graded on this tree with codegen main b0ed4967: 0 coverage lost, 0 tier changes, 0 hard regressions, 0 leavers (a neutral verdict under the no-regression merge rule).

🤖 Generated with Claude Code

https://claude.ai/code/session_01LifAW9e5J6gFx7gatuxETE

luisleo526 and others added 24 commits September 26, 2026 02:03
…wned_strategies.json re-derived (lane CORPUS3)

pineforge-corpus f989e36 (branch release/specials-owned, two commits on
eede4a2) closes the corpus's two release-checklist items. Neither touches
the 312 validation probes: validation/ and data/ are byte-identical to
eede4a2, so no generated.cpp, trade list, tape or tier moves.

- 1d3ed90: special-validation/build_specials.sh compiles against the
  engine's build tree. It lacked -I build/include, so every compile died on
  the generated <pineforge/version.h>; it now adds it, checks for the header
  as it checks for libpineforge.a, and takes Eigen from EIGEN3_INCLUDE_DIR,
  else the build's FetchContent copy (build/_deps/eigen-src), else Homebrew.
  The six special-validation generated.cpp, last emitted 2026-06-10 and
  deriving GeneratedStrategy from BacktestEngine (15-20 errors each against
  this engine), are re-derived from their strategy.pine with codegen f3285d7
  through the transpile call of scripts/regen_corpus_cpp.sh, whose
  corpus/*/*/ glob never reaches special-validation/<category>/<probe>/;
  all six now compile and link. The two whose feed the corpus ships run
  (mtf-htf-monthly-ema-cross-01, leverage-margin-call-perp-5x-01); the other
  four need licensed OHLCV and a TradingView export that are not in the
  corpus, and no probe has a TV tape to grade against.
- f989e36: owned_strategies.json is re-derived from the tree and this
  engine's verifier. generated_cpp_sha256 matches 60/60 (was 0/60); the
  other five artifact digests re-check 60/60; tier_distribution is
  {excellent 311, anomaly 1} (was {excellent 307, strong 4, anomaly 1});
  validation_run is this engine's full parity sweep at eede4a2 (91d65ad,
  2026-09-25); native_validation moves on five entries, all still
  excellent.

The pins that name the corpus commit move together:

- the corpus gitlink, eede4a2 -> f989e36;
- the `# corpus` header of scripts/corpus_parity_baseline.txt, re-recorded
  with `corpus_trades_identity.py --update` over this engine's 312 trade
  lists on disk (all 312 re-run at eede4a2 first: baseline match=312,
  moved=0), after the check at the new gitlink refused on that header, as
  it must. The baseline diff is that one line; all 312 sha256 rows are
  unchanged.

That header was the only citation of eede4a2 in the tree outside corpus/,
and it is a pin statement. The paired-codegen pin (CODEGEN_COMMIT
f3285d7 in scripts/regen_corpus_cpp.sh) does not move: `VERIFY=1` at
f3285d7 over this corpus still reports 314 verified, 0 drifted.

The Cloud Run case runner refuses a corpus bundle whose commit differs from
this gitlink (pineforge-workflow cloudrun/runner/preflight.mjs); the
companion pineforge-workflow branch r5/corpus3 (migration 0041) re-pins that
side. The corpus PR, this commit and that branch land together.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
(cherry picked from commit ff8bf5cf5ce9d36bf7b72e5f8ac27ecacc0c7bfb)
(cherry picked from commit aac30d6230eb0d51d1f351d366842a495b4044bb)
Rule 2 ruling: the C callback host mirrors the generic C++ kernel contract by published byte lengths and callback frames. It adds no Pine or TradingView knob and moves no durable state or hash value. Pin the INT23 caller, strict enum width, local refusals, and observed command legality; refresh exact documentation anchors.

(cherry picked from commit 7114139f15877b3da555f8c7cae5e763593bccaf)

INT25 merge: scripts/ci_verify.py keeps CI-LITE's EXCLUDED_REGISTERED_MIN beside this
lane's floors (673/272); five anchors into native_c_api.h, pineforge.h and
c_abi.cpp the lane's pages carried unmoved over its own insertions are carried
through the exact line map to the content they cited (int24_exact_reanchor).
Keep synchronous current-execution points out of the walked FX predecessor marks, and derive stream session-day neighbours from eligible calendar slots. Calculate a final pending script bucket at a complete batch end or stream_end(true) only when its contributing input reached the session close; warmup and stream_end(false) carry it. Expose KernelRecordedAtHostMarks through a C++ host call, document FeedTolerant warmup, and pin the four failures in a source-free test.

Unreleased v19 value move, once in this commit: re-pin tests/test_native_calendar_hash_witness.cpp ny_daily_over_hourly (digest 0x12d290fd048a6c7c -> 0xfa85a7f9a92aea39; calculated bars 12 -> 13; driver rows 48 -> 52; trades 1 -> 2) because the final calendar-closed daily bucket now calculates. Update the final-batch sequence witness in test_native_htf_subscriptions_stream; the stream_end(false) and warmup sequences stay pending. Full remote profiles and corpus identity judge the final tree.

(cherry picked from commit 6cded2c420b6e16ca13da16674d507871cccad34)

INT25 merge: the floors add this lane's row to C-SURFACE-1's (kernel 273, release
674; CI-LITE's EXCLUDED_REGISTERED_MIN kept). The six pages merge on
digit-normalised text (int16_digit_merge, a citation both sides moved mapped
from this lane's tree); 80 anchors the lane's pages kept unmoved over its own
native_execution_consumer.cpp / native_c_api.h / native_run_spec.hpp edits are
carried through the exact line map (int24_exact_reanchor). Every anchor cites
the text one parent cited (verify_carry: 1672 exact, 6 = the floor lines).
…sentableQuantity refusal, the book's own quantities on the grid, and an opt-in quantity tolerance (R5 lane K-ULP4)

Audit X1 (AUDIT4-opus kulp NF1-NF4): a bare C++ or C host lost its whole run
on an ordinary decimal close. Open 1.5, Reduce 1.3, open 2.9: the book is
{0.19999999999999996, 2.9}, and Reduce 0.2 needs 2^-54 of the 2.9 lot, below
half its ulp; next_close_split answered UnrepresentableQuantity and the
consumer turned every non-Applied inspection into a durable
SettlementFailure (lifecycle Failed, code 6, discriminator 5). A dust lot at
the head of the book did the same to the next Reduce (stuck rest) and to the
next opening on its side (absorbed aggregate). On a quantity grid,
Reduce{ScopeFraction{1}} was floored onto the grid (a step short, a dust lot,
or nothing to close) and a close of a lot's own off-grid size was OffGrid.

(a) Mandatory, generic -- a request the settlement cannot represent exactly
is a TERMINAL, TYPED refusal of that request:
- native_order.hpp: MatchRejectReason::UnrepresentableQuantity = 10 (appended);
  C PF_NATIVE_MATCH_REJECT_UNREPRESENTABLE_QUANTITY = 10 (appended, pinned in
  native_c_host.cpp, translated by c_word).
- native_execution_consumer.cpp consume_matched_request: an inspection of
  UnrepresentableQuantity -- next_close_split's refusals, order_action::plan's
  absorbed reduction/transaction, the opening a surviving book absorbs -- is
  terminal(MatchRejectReason::UnrepresentableQuantity); nothing moves, the
  run goes on. Every other non-Applied inspection still fails the run.
  execute_current answers the MatchRejectedEvent without throwing;
  inspect_current_execution already showed the readiness.
- The grid admits the book's own quantities: a ScopeFraction whose product is
  its scope (fraction == 1) resolves to the scope unfloored and the terms
  grid check admits it; a close (Reduce ExplicitUnits, or a Transact against
  the book's side) of exactly one lot's binary64 size is on the grid at
  submit (CommandContext::units_are_lot_quantity, appended) and as a
  host-sized close's answered units.

(b) Opt-in, default off, generic -- NativeRunSpec::quantity_tolerance
(appended; validated NotFinitePositive on NativeRunSpecField::
QuantityTolerance; folded into the spec digest only when present; C: the
sixth pf_native_run_spec_ext_v1 layout, PF_NATIVE_SPEC_EXT_QUANTITY_TOLERANCE
= 1u << 11, PF_NATIVE_RUN_SPEC_EXT_V1_RETENTION_SIZE for the fifth,
PF_NATIVE_SPEC_FIELD_QUANTITY_TOLERANCE = 65). engine_execution.cpp
tolerant_close_split: a close within t of a FIFO boundary ends there, charged
its request (the lot it ends in keeping at most t closes whole; a rest of at
most t is not taken from a lot larger than t; a trailing dust lot is taken;
the scope's end is a boundary, so an overshoot opens nothing), and a lot of
at most t that binary64 cannot take off the rest or the running sum closes
whole; a dust survivor book beside an opening stays. The engine reads the
value from a private BacktestEngine member the consumer projects at begin.
Absent, the exact walk runs, bit for bit; the Pine adapter declares no
tolerance and keeps its own 1e-10 policy.

ADR-0001 rule 2 (recorded as the mechanism row and the quantity_tolerance
ruling row, docs/adr/0001-kernel-adapter-boundary.md): (a) mechanism --
binary64 bookkeeping is venue-neutral; any host of any venue meets the same
absorbed quantities and gets the same typed outcome for the one request; the
grid admits the book's own sizes for every venue; the tolerance is data, a
spec value with no platform branch. (b) knob -- the refusal is none: it
replaces a whole-run failure no host could want, and an exact request settles
as before; the tolerance is a knob, but absent it is the exact walk and the
pre-field spec digest (pinned from 91d65ad), so no existing run faces a
hash-visible choice. Ruled adapter-policy in the feature table: the adapter's
prefix Flatten is charged the lots it holds and its sweep books no row, so
moving it onto the tolerance is a later lane's measurement.

What moves: only runs that stopped (they complete with the typed refusal)
and, on a quantity grid, whole-scope fractions and one-lot closes that were
floored or OffGrid. Within the unreleased v19 epoch; no witness re-pinned
(the K-ULP2/K-ULP3 witnesses' genuine-* cases now assert the typed refusal,
their other checks unchanged).

Tests (source-free, kernel profile too): test_native_unrepresentable_refusal
(333 checks; on 91d65ad it does not compile -- no enumerator -- and, spelled
10, fails 84 of 292), test_native_quantity_tolerance (368 checks; staged and
direct, fused and staged-only), check_unrepresentable_quantity in
test_native_c_api.c (C-language, the ext layout pinned at 320). Floors:
KERNEL_MIN_TESTS 271 -> 273, RELEASE_MIN_TESTS 672 -> 674.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
(cherry picked from commit f961f73b69dc1edd32f008112d5ab6fee88b4a4e)

INT25 merge: the floors add this lane's two rows to C-SURFACE-1's and KERNEL-EDGE's
(kernel 275, release 676); strategy_configure_native_ext_result_v1 keeps
C-SURFACE-1's c_refuse() on its refusals beside the sixth layout; ADR-0001 keeps
KERNEL-EDGE's walked-driver-point wording on the journal-window row and adds
this lane's row after it. The pages are re-anchored once, at the lane's last pick.
…'s own quantities, the quantity tolerance; the citations K-ULP4 moved re-anchored (R5 lane K-ULP4)

- docs/native-settlement.md: the "refused before settlement" sentence and the
  K-ULP2 paragraph's refusal list now say what a host gets -- the request's
  terminal MatchRejected(UnrepresentableQuantity), nothing moved, the run
  going on (it was code 6 / discriminator 5 and a stopped run) -- with the
  ordinary decimal example (Reduce 0.2 after 1.5 - 1.3 then 2.9) and the dust
  head that refuses the next close and opening; a "what a native host gets"
  paragraph (K-ULP1/2/3/4, the grid's own quantities); a new "Quantity
  tolerance" section with the rules and what stays refused; the Pine
  paragraph records why the adapter keeps its own 1e-10 rule.
- docs/pages/native-engine.md: quantity_tolerance in the optional spec list;
  the grid admission of a lot's own size; UnrepresentableQuantity among the
  MatchRejectedEvent reasons; a "What a host gets from a quantity" section
  beside K-ULP1's, linking native-settlement.md; ScopeFraction{1} not floored;
  the sixth pf_native_run_spec_ext_v1 length.
- README.md, docs/pages/pine-to-native.md, docs/design/native-feature-parity.md
  (SZ7): the six ext lengths, qty_percent=100 on a grid, the grid's own
  quantities.
- Every published citation carried from 91d65ad by an exact difflib line map
  (K-ULP4-scratch/tools/kulp4_exact_reanchor.py): 464 + 60 anchors moved, 0
  failed their re-judgement; the four spans that grew contain the lines this
  lane inserted and still name their symbol; the ci_verify floor lines (their
  numbers changed) set by hand. check_doc_anchors 1678/1678, check_doc_lint 0.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
(cherry picked from commit 87218e628163776435c6ce45d2407934da8bfad2)
… typed refusal; the grid admits a Reduce of a FIFO boundary of its scope; the tolerance's digest fold is tagged (R5 lane K-ULP4, review fixes)

A review pass of f961f73b (scratch harness, all four twins agreeing) found:

1. Under a quantity tolerance, a book of dust closed by a far larger request
   ({2^-55}, Reduce 1.0) settled Applied with closed 2^-55, and the request
   core then could not take 2^-55 off 1.0 (checked_sub_cap):
   PreparationError{NonrepresentableQuantity}, the run Failed with code 6,
   discriminator 2 -- where the exact walk refused the request, typed.
2. The same core failure already stopped exact runs on 91d65ad: a bound
   opening holding 2^-55 (Transact 0.1, 0.2, 5.0; Reduce 0.3) reduced by 1.0.
   Fix for both: consume_matched_request answers a
   CoreFailure::NonrepresentableQuantity from check_execution /
   prepare_execution -- which check and prepare without a mutation -- as
   terminal(MatchRejectReason::UnrepresentableQuantity), staged and direct
   alike. The two C8 point-budget rows (a one-unit PointBudget on a 2^60-unit
   Transact) pinned the old run failure; test_native_resting_acceptance and
   test_native_resting_replay_contract now pin the typed refusal, and the
   first also that the next request fills.
3. The grid exemption matched any lot's size, at submit, for Reduce and
   Transact: a Book-scope Reduce of a later lot's size was taken FIFO from
   the on-grid head lot and split it off the grid, and a resting Transact
   could later open off-grid. Now CommandContext::units_are_scope_boundary:
   only a Reduce{ExplicitUnits} whose units are a FIFO boundary of its scope
   (the binary64 sum, in book order, of the scope's lots through one of them:
   the head lot's own size, a prefix, the whole scope; the book for an
   Independent request, the bound openings' lots for BindOpening /
   BindOpenings) is admitted; a Transact is gridded as before. A host-sized
   close's answered units are admitted when they are its scope's held total.
4. The tolerance folded as a bare value, so {event_retention Full} and
   {Window, tolerance 2^-1074} shared a digest; it now folds a tag word
   first. The no-tolerance digest is unchanged (the pin from 91d65ad holds).
5. A request of at most t on a dust head ({2^-55, 2.9}, Reduce 1e-11) ends at
   the dust lot's boundary; that is the documented rule (a boundary within t,
   zero excluded), now pinned rather than changed.

ADR-0001 rule 2 as in f961f73b: (a) the core's quantity refusal is the same
venue-neutral typed outcome for the one request; (b) no knob. The ADR row
records the C8 move and the battery count: 48 of AUDIT4's 3,091 previously
clean scenarios move (40 boundary Reduces, 6 whole-scope fractions, 2 both),
each where a rule fired, no other.

Witnesses: test_native_unrepresentable_refusal 404 checks (scoped-dust, the
boundary cases; on 91d65ad, spelled 10, 100 of 350 fail),
test_native_quantity_tolerance 403 checks (dust-only book refused, dust head
with a small request). Docs: native-settlement.md, native-engine.md, the ADR
row and design SZ7 say the boundary rule and the core's refusal; citations
carried from 87218e62 by the same exact line map (136 moved, two widened
spans set to admit_placement_units' own lines).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
(cherry picked from commit ef180962989871e212b64c7ac3d9fdf768be0428)
…date too; the preview's reach stated (R5 lane K-ULP4, second review)

The second review of the lane (ef180962) confirmed findings 1-5 fixed and
found one more gap: the FIFO-boundary exemption was measured only at submit,
so a Reduce admitted as the head boundary could match after the book changed.
{A', 0.5} with A' = fl(1000.1 - 1000) on a 0.1 grid: a bound close of A' and
an Independent Reduce{A'} in one callback -- the second took A' FIFO from the
on-grid 0.5 lot and left {0.39999999999997726}.

- make_command_context sets CommandContext::units_are_scope_boundary only for
  a request of ImmediateRemaining capacity (one that settles in one fill); a
  point-budget Reduce of a boundary is gridded as before.
- consume_matched_request holds the candidate to the same test
  (grid_boundary_holds): an off-grid Reduce{ExplicitUnits} -- which only the
  exemption admits -- that is no longer a FIFO boundary of its scope ends
  with MatchRejectReason::UnrepresentableQuantity before its inspection;
  nothing moves. Runs without a quantity grid and on-grid requests are not
  touched (the check answers true first).
- The preview does not run the request core's check or this re-check: the
  docs (native_host.hpp's NativeCurrentExecutionPreview, native-settlement.md,
  native-engine.md) now say the settlement's refusal shows in
  inspect_current_execution and the other two are made at execution only.

ADR-0001 rule 2 unchanged from f961f73b (the ADR row now says the boundary is
held again at the candidate). Witness test_native_unrepresentable_refusal:
431 checks (grid-boundary-moved, grid-boundary-budget). Citations carried
from ef180962 by the exact line map (308 moved, none stuck or grown).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
(cherry picked from commit d2932403a52098a26472a41b93e4847406ee529b)
…ction is the gross scope settled in one fill (R5 lane K-ULP4, third review)

The third review of the lane (d2932403) proved three defects in the grid
rules, each with a probe (copied to the lane scratch, review3/):

1. The candidate re-check refused a whole-book close once the book had
   shrunk below it. A stop Reduce{fl(0.5 + A')}, A' = fl(1000.1 - 1000), is
   admitted on a 0.1 grid as the whole book; a partial close of 0.3 leaves
   {0.2, A'}; the stop fired and was refused (reason 10), where with no grid
   it closes the book. A quantity at least the scope's held total closes every
   lot whole, so the candidate now admits it.
2. The re-check tested the request's original units, not what the candidate
   settles. An OCA-Reduce opening's fill lowered a boundary Reduce's remaining
   to fl(U - 0.3), no boundary of {0.5, A', 0.3}, and the close split the
   on-grid 0.5 lot to 0.19999999999997725; a take-profit's fill lowered a
   stop's remaining to exactly the book it met, and the stop was refused.
   grid_boundary_holds now tests the remaining units, capped as
   inspect_candidate caps them: on the grid, a boundary of the scope as it
   stands, or at least its held total; anything else is the typed refusal.
3. A fraction of one resolved unfloored for any scope whose product it is:
   net of a live sibling's claim (it closed 0.30000000000002275 and left
   0.19999999999997725; with the sibling claiming 0.6 it booked a 2.3e-14
   close and left 0.49999999999997724), under a pending OCA-Reduce deduction,
   under a point budget. resolve_sized_units now resolves unfloored only the
   gross scope as it stands (scope == the scope's held total) for a request
   that settles it in one fill (ImmediateRemaining, no PendingDeferred), and
   own_quantity admits a closing size equal to the scope's held total under
   the same condition; everything else is floored exactly as before.

Nothing else moves: the kulp battery (C++, C, staged; seeds 11/22/33), the
decimal host at tolerance 0 / 1e-10 / 1e-9, the findings probes and the
clean-set census are byte-identical to d2932403's (48/3091 moved, 48 fired).
No run without a quantity grid is touched (the new conditions reduce to the
old return value there).

ADR-0001 rule 2 unchanged from f961f73b: (a) mechanism -- the grid admits the
book's own quantities for every venue, now measured on what settles; (b) no
knob. The ADR row states the refined reach.

Tests: test_native_unrepresentable_refusal gains seven scripted cases
(grid-stop-after-partial and its no-grid twin, grid-oca-lowered,
grid-oca-take-then-stop, grid-fraction-net, -net-dust, -oca-pending,
-budget): 547 checks. Fail-before: linked against d2932403's execution
consumer the TU fails 23 of 547 checks, every one in the new cases. No new
ctest row, floors unchanged. Citations carried from d2932403 by the exact
line map (112 moved, none stuck; two spans lost the deleted line).

Still open, pre-existing and not the grid's (91d65ad fails identically):
an OCA-Reduce member's fill smaller than half an ulp of a sibling's remaining
cannot be deducted from it, and the run stops with code 6, discriminator 7
(UnrepresentableReservation) after the fill is booked -- the post-commit
group-effect contract the G5 rows pin.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
(cherry picked from commit 66dd8742c01035d0cdc6397058ff5866a52f86c8)
…ibling's reservation -- stated where the pages promise none (R5 lane K-ULP4)

native-settlement.md ("What a native host gets") and native-engine.md ("What
a host gets from a quantity") said no run stops for a quantity. The third
review's p5b probe shows one that does, before and after this lane alike:
in an OCA group with GroupEffect::Reduce, a member's fill smaller than half
an ulp of a sibling's remaining units cannot be deducted from them, and after
the fill is booked the run fails with code 6, discriminator 7
(CoreFailure::UnrepresentableReservation). Probe output (91d65ad and
66dd8742 identical): the fraction's 2.2759572004815709e-14 fill is applied,
then "lifecycle=FAILED code=6 disc=7 err=native working-request preparation
failed". Both pages now carry the exception; native-settlement.md also says
that a sibling's fill lowers a member's remaining units without regard to the
grid (the reviewer's c_probe: an on-grid Reduce 0.4 lowered by a bound
Flatten sibling's off-grid fill settles 0.29999999999997728 on 91d65ad and
on 66dd8742 alike), so the grid's re-check holds only the Reduce it admitted
as a boundary. Docs only; anchors 1678/1678, doc lint clean.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
(cherry picked from commit f1af50dca5ad19438c90ed127faebad0fd20c499)

INT25 merge: the six K-ULP4 picks merge their pages on digit-normalised text
(int16_digit_merge, a citation both sides moved mapped from the picked
commit's tree); here the pages are re-anchored once for the lane: 25 citations
carried through the exact line map from 409ebad or f1af50dc, and the six
CONTRIBUTING / contributing-llm citations of the floors set to ci_verify.py:236
and :344. Every anchor cites the text one parent cited (verify_carry: 1672
exact, 6 = the floor lines).
…rough a refused anchored level

C-SURFACE-1's check_csurface_failure_discriminator provoked its settlement
failure with a Transact whose point budget cannot be booked (intent 2^60,
capacity 1.0). R5 lane K-ULP4 rules exactly that request a typed
MatchRejected(UnrepresentableQuantity) refusal: the run completes, and the
row's four checks failed on the merged tree ("nonrepresentable request did
not fail settlement (got 0, want -11)").

The row's purpose is the C state's copy of the kernel's nonzero failure
discriminator, so it keeps every assertion (PF_NATIVE_E_RUN_FAILED, failure
code SETTLEMENT_FAILURE, operation SETTLEMENT, discriminator != 0) and takes
the failure from a path K-ULP4 keeps: the host answers an anchored leg's arm
(on_anchored_level) with a negative level, which the kernel's
representability check refuses at the arm, as test_native_anchored_legs'
l7b-hook-broken row pins in C++. K-ULP4's own C row
(check_unrepresentable_quantity) pins the typed refusal of the old request.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ncelling and recording cost what is live, the dead path_order_ goes

Audit X2 and X9 (AUDIT4-opus section 7), inside the unreleased v19 epoch;
the source extension stays pineforge-source-adapter/v4.

- strategy.cancel / strategy.cancel_all retire every leg of each exit row
  they name (retire_cancelled_exits): the live ones they take off the book,
  caused at the Cancelled event (a pair hold earlier in the same callback no
  longer turns the withdrawal into a refused conflicting replay), the
  dormant ones and the ones the adapter took off the book itself, each
  caused past the lifecycle's last step; and they drop a gapped stop a
  declined reversal parked for the next margin-call slice
  (pending_margin_revivals_). A margin call no longer revives an exit the
  script cancelled while it was live or parked. TradingView decides it, on
  NYSE:F 15, 2025-04-15..05-20, range proof covered: v19fix-cancel-before-
  pair, v19fix-cancel-at-1000, v19fix-gapped-stop-cancel and
  v19fix-gapped-stop-cancel-after-pair all book the badapter-v19dp1-cancel
  file (tv_trades sha256 662ce8c8...: margin calls 12 @10.39 and 92 @10.57,
  836 open), and v19fix-gapped-stop-control (bdf3d470...) the parked stop's
  close without a cancel (X 928 @10.39). All six AUDIT4 v19dp1 variants now
  print the ab9714b log byte for byte, and the gapped-stop variants book
  what ab9714b books.
- K1 (erase_retired_rows) no longer holds a withdrawn leg for the revival;
  it keeps one only while its origin is live or opened, the one question
  (origin_leg_consumed) that still reads it. An exit cancelled and
  re-placed every bar at one level keeps 3 rows, not one per bar: x1.9 to
  x2.1 per doubling up to 64,000 bars (x4.7 to x4.9 before, 57 s at 64,000
  for the cancel/re-place leg), strategy.cancel_all + exit at
  position_avg_price * 0.95 likewise.
- release_closed_cohort_origins: at a bar open after a receipt read that
  saw a command event, an origin whose request chain no longer works and
  that holds no open lot leaves its kernel roster (cohort_remove); a
  replace successor's open lot keeps every older member of its roster. A
  flip recorded per bar costs x2.0 per doubling from 4,000 to 32,000 bars
  (x2.45, x2.80, x3.06 before). Cost: one removal per closed opening; the
  100 public slots (spark, magnifier on) run +0.54 % instructions at the
  median, +1.57 % at most (slots 007 and 030).
- PineExecutionAdapter::path_order_ (written, folded, never read) and
  set_path_order are removed.

Named hash move: every Pine host-extension, broker-state and recorded
per-bar value, and the kernel continuation wherever an origin leaves a
roster. Trades move only on the revival shape the two tapes prove.
Re-pinned (each TU's harvest switch; the base 91d65ad harvest reproduces
every old pin; no non-hash declaration or field moved; the host-extension
fold, recorded rows and final hash taken out of test_adapter_quiet_bar and
test_publication_witness, both print identical tables on base and lane):
  tests/test_adapter_report_relower.cpp
  tests/test_adapter_recording_hash_witness.cpp
  tests/test_adapter_continuation_view.cpp
  tests/test_adapter_receipts_in_place.cpp
  tests/test_adapter_lookup_index_witness_data.hpp
  tests/test_adapter_quiet_bar_pinned.inc
  tests/test_adapter_command_allocations.cpp
  tests/test_adapter_host_view_memo_data.hpp
  tests/test_publication_witness_pinned.inc
Pine witness (ReissueReplay x64 on btcusdt_15m_7d): 10045334278681590956
-> 9305091844641472748.

Tests: test_adapter_margin_revival_cancel gains the five tapes, the other
cancel spellings and rows on a chart with no quantity grid (base: 89 of
291 checks fail); test_adapter_live_state_scaling gains the constant-level
re-cancel (recording off and on), the cancel_all shape and the flip, each
with a small leg calibrated to at least 0.1 s CPU, rows and roster members
bounded, the churn's ratio gated, and --row; test_adapter_live_state_
equivalence --margin-revival: the erasing run's retention in variants 2
and 3 (expectation corrected, no trade moves).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
(cherry picked from commit 336c9acde83321c87851e6d0b35e9d37e9fbd1b3)

INT25 merge: test_adapter_live_state_scaling keeps RATIO-HARDEN's calibration (every
gated leg doubles until its best sample takes kMinLegSeconds, both legs
checked against it), which sizes this lane's constant / cancel_all / flip rows
too, so the lane's own pre-sizing loop goes; the ratio gate keeps this lane's
churn gating (CHECK(ratio < kShapeBound) for every workload).
…cost what is live; OL14 says what is tested (R5 lane V19-FIX)

- design OL14: the revival rule as the seven lab tv tapes and
  test_adapter_margin_revival_cancel hold it -- live, dormant and parked
  (gapped-stop) cancels, the untaped spellings, the no-grid rows -- citing
  retire_cancelled_exits.
- design section 3.8 (F9): row A completed by V19-FIX for the constant-level
  cancel/re-place, new row D (the kernel's cohort rosters on a Pine host),
  and the measured before/after, the scaling rows and their mutants.
- native-engine.md (the continuation fold): a roster costs what its host
  keeps on it; the Pine adapter takes an unbindable origin off.
- abi-stability.md: the V19-FIX hash step, what moved and why, trades only
  on the taped revival shapes.
- design P4: the hash-state content pin re-taken (path_order_ left the fold).
- Every citation of the four changed sources carried from 91d65ad through
  an exact line map (INT24's int24_exact_reanchor.py): 266 moved, anchors
  1681/1681, doc lint clean.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
(cherry picked from commit b40509ae3a6142496c1a9627c5725dc49979c474)
ADR-0001 rule 2 ruling: generic kernel coordinates use script-bar interval_index, with input_interval_index retained beside it for hosts that need input cadence. Remove Pine index restamping and repin the v19 coordinate witnesses once.

(cherry picked from commit e362bc4b89964a8fc7ced24f5fea0465b93120c3)

INT25 merge: test_native_calendar_hash_witness takes this lane's re-pinned rows,
except ny_daily_over_hourly, which keeps KERNEL-EDGE's row (13 calculated bars, 52
driver rows, 2 trades: the final calendar-closed daily bucket) until the INT25
v19 hash re-pin harvests its digest over both lanes. The pages merge on
digit-normalised text; the pine-to-native decision row merges word by word
(C-SURFACE-1's POLICY_SIZE clause, KERNEL-EDGE's eligible-slot clause and this
lane's script-bar index sentence all kept).
ADR-0001 rule 2, Option A: NativeCoordinate::interval_index, lots, trade rows and bar metrics stay in script-bar space. NativeCoordinate::input_interval_index remains the named input coordinate for hosts that need input cadence. Pine source projection state reads that explicit input coordinate; the kernel report and lot coordinates are never re-stamped.

Behavior fix: test_adapter_brackets_relower keeps Pine's pending-order created_bar and scheduler source chart policy on the input coordinate under aggregation and magnifier. The adapter no longer uses the kernel script coordinate for those source-only comparisons.

One v19 hash/witness re-pin, caused only by the coordinate fold; trade/event counts, driver points and behavior remain unchanged: test_native_continuation_view; test_adapter_continuation_view; test_adapter_host_view_memo; test_native_match_hash_witness; test_native_intrabar_lower_lookup; test_native_batch_log_presize; test_native_event_retention; test_native_match_band_witness.

No PF_API export or frozen C layout changed.

(cherry picked from commit 6df7850af41b7f63f49a28915d3c53f7356fa234)

INT25 merge: test_adapter_continuation_view and test_adapter_host_view_memo_data keep
V19-FIX's pins in their conflict blocks (this lane's header notes kept); both
lanes moved the same values, so the INT25 v19 hash re-pin harvests them once
over both. The pages merge on digit-normalised text and are re-anchored once
for the lane: 64 citations carried through the exact line map from 07fc918
or 6df7850a; the five citations on the word-merged pine-to-native decision
row checked by hand.
(cherry picked from commit 66f95745cc243fe3b56fced95c4798368337c5b2)
(cherry picked from commit 21bdc2e8f68b081322f0517bccd0c81176a6b3c7)

INT25 merge, DOC-TRUTH-4 over wave G's code lanes (both picks):
- strategy_configure_native_v1 (pineforge.h, native-engine.md) keeps C-SURFACE-1's
  refusal contract (a Running handle is refused at the C boundary without
  mutation, a Completed or aborted handle may be reused) and adds this lane's
  facts: an aborted handle is reused with the same session key and a higher
  run number, and a handle whose configure call failed remains Failed.
- The run-spec extension has six published layouts since K-ULP4: README keeps
  K-ULP4's six-layout sentence, and this lane's "five" in the RISK_SIZE /
  POLICY_SIZE comments (native_c_api.h) and in native-engine.md's POLICY_SIZE
  paragraph ("the other four") read six / "the other five".
- The design page's row 8 keeps C-SURFACE-1's text; its c_abi.cpp:289-929
  content pin is re-hashed over both lanes' edits (the window moved only by
  this lane's one-line comment fix at :313).
- The floors add the extracted Complete host (kernel 276, release 677). The
  pages are re-anchored once for the lane (9 citations through the exact line
  map from 3ed0276 or 21bdc2e8, the floors' citations set by hand).
…r through the last path point consumed (audit N3)

AUDIT4's N3: the partial-bar sentences promised "close at the cursor", and
the acid check F8e refuted it. The kernel folds a discrete point (the open
of the bar or of a sub-bar, a DistributionSamples sample, an observed
print) before its callbacks run, but a segment's destination only after the
segment has been matched (note_partial_point after match_segment,
src/native_execution_consumer.cpp emit_segment and the intrabar sampler).
So a fill inside a segment -- its on_native_applied and its OrderFill
recalculation -- reads a bar that still ends at the segment's origin and
does not hold the fill price: TP-E1 at 4990 on the High -> Low segment of
O 4992 H 4992.5 L 4987 reads O 4992 H 4992.5 L 4992 C 4992.5; the
liquidation at 5088.53 on the Low -> High segment of the 10:00 spike reads
O 5062 H 5062 L 5061 C 5061.

Comment-only and doc-only; no behaviour moves:
- native_host.hpp current_partial_bar() and on_native_recalculate's note;
- native_c_api.h strategy_native_partial_bar_v1;
- native-engine.md: the open-bar warning (at the bar open, the open alone),
  "The bar so far, and the open-bar view", the host-reads table row and the
  C read-back paragraph; the design page's CT4 row; README's C read row.
Citations the longer comments moved are carried through the exact line map.

F8e, copied from $EV/exec/AUDIT4-opus-acid-test.cpp into
INT25-scratch/acid/acid_int25.cpp and rewritten to the corrected sentence
(the original is untouched), prints PASS in all four runs (bk, bp, sk, sp).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
… and reads the merge gate on the PR head

The owner squash-merges PRs, so the PR head is never an ancestor of main and
the "Verify exact-head" step skipped every such merge. The step now takes the
merge commit from github.event.pull_request.merge_commit_sha (dispatch:
inputs.merge_commit, plus a new required pr_head input for the verified head)
and promotes only when
- the merge commit is on origin/<base>,
- the PR head (fetched by sha when it is on no branch) exists,
- tree(merge commit) == tree(PR head), and
- tree(origin/<base>) == tree(merge commit) (the base has not moved on).
Every other outcome writes ok=false and exits 0 before any promotion step.
pineforge/verify + pineforge/parity are still read on the PR head, newest
status per context. baseline-promote.mjs receives the merge commit as
--merge-commit and the verified head as --head-sha / --ci-head; its exit-2
notice now names the squash case.

AGENTS.md and docs/ci.md say the same: the exact-tree guard and the statuses
on the PR head, and that a squash still defers while the campaign tool
requires the merge commit to be the gated head itself. The design page's
content pin on that AGENTS.md section is re-hashed over its new extent
(AGENTS.md:132-148).

scripts/ci_preflight.py pins the new guard (merge_commit_sha, the pr_head
input, ancestry of the merge commit only, both tree comparisons, four skips
that exit, the three mjs arguments); scripts/test_ci_preflight.py adds ten
mutations, each of which the contract refuses.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…d, an hour for a full sanitizers run, floors recounted

Slow rows. The rows wave G enlarged or added were re-measured in a full
sanitizers and Debug run of this tree on the maintainers' x86-64 build host
(lab remote rj-20260925t192212-92d7b5, NTU2, 12 parallel CTest jobs):
RATIO-HARDEN's legs (test_native_state_continuation 34.7 s sanitizers / 18.9 s
Debug, test_adapter_lookup_index_scaling 24.3 / 3.0, test_native_match_rescan_
scaling 14.7 / 8.4, the continuation-tail, intrabar-lookup, journal-window and
bare-host rows under 4.1 / 3.4), V19-FIX's scaling rows (inside the labelled
test_adapter_live_state_scaling, 52.6 / 8.1) and the new rows of KERNEL-EDGE,
K-ULP4, C-SURFACE-1 and DOC-TRUTH-4 (each under 1 s). No row outside the 27
crosses >60 s under sanitizers or >30 s in Debug, so the label list and its
pinned digest stand; docs/ci.md records the measurement.

Bound. ci_verify.py's ctest stage keeps 30 minutes for every run but a full
sanitizers run (no --exclude-label: push to main, manual dispatch, the
maintainers' verification), which gets an hour (ctest_timeout(),
SANITIZERS_FULL_CTEST_TIMEOUT); main's own full set ran out of 30 minutes
twice. The PR set keeps 1800 s. ci.yml's sanitizers job allows 120 minutes so
the hour after a ~30-minute build is the binding limit. test_ci_verify pins
the bound per profile and exclusion; three mutants (the exclusion ignored, the
hour back to 1800, the stage hard-coded) each fail it.

Floors, recounted with ctest -N per profile (ci_verify's own configure argv):
release 672 -> 677, debug 653 -> 658, sanitizers 653 -> 658, native 662 -> 667,
kernel 272 -> 277 registered (276 run with the WebSocket row skipping on a
system libcurl). The five rows, in every profile: C-SURFACE-1
test_native_c_api_int23_header, KERNEL-EDGE test_native_kernel_edge, K-ULP4
test_native_unrepresentable_refusal and test_native_quantity_tolerance,
DOC-TRUTH-4 test_native_engine_complete_host. RELEASE_MIN_TESTS 677 and
KERNEL_MIN_TESTS 276 (set by the picks) get one measured comment naming those
lanes; EXCLUDED_REGISTERED_MIN becomes {debug 658, sanitizers 658, native 667}.
The floor citations in CONTRIBUTING.md and contributing-llm.md follow the
constants to ci_verify.py:241 and :349.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…t is absorbed, and the run goes on (R5 lane K-ULP5)

Ruling (supervisor, owner-level, on K-ULP4's finding 2): a sibling
reservation deduction that is unrepresentable -- at most half an ulp of the
sibling's remaining units, so fl(units - d) is the units again -- is ABSORBED
as a no-op. The sibling's units stay as they are, the exact binary64 result of
the subtraction; the member's fill stands; the absorption is an observable
event; generic, no knob. Recorded as the ADR-0001 rule-2 row "an OCA-Reduce
sibling's deduction binary64 cannot take".

A member's fill in a GroupEffect::Reduce group is deducted in four places of
the request core (src/native_order.cpp), each of which answered
CoreFailure::UnrepresentableReservation and failed the run (code 6,
discriminator 7) after the fill was booked; each now absorbs, on the staged
and the direct path alike:
- prepare_group_effect / apply_group_effect, a sibling with remaining units:
  a ReservationReducedEvent with actual_deduction 0 and after == before; the
  row is not touched (C: RESERVATION_REDUCED, closed_units 0).
- the same, a sibling whose units are deferred: a fill the pending total
  cannot move is a DeferredGroupAdjustmentEvent with deferred_delta 0 whose
  pending_after is its pending_before; it joins no chain (C: DEFERRED_GROUP,
  closed_units 0). A total below half an ulp of a later fill rounds into it
  (pending_sum), which stopped the run too; collect_pending_chain re-sums the
  same way. Only a pending total that overflows binary64 still fails the run
  with discriminator 7.
- prepare_terms / apply_terms through effective_host_units, and
  prepare_owner_applied / apply_owner_applied: a pending total the resolved
  (or the owner's opened) units absorb leaves those units standing, recorded
  as effective_deduction 0 beside a positive pending_total.
A deduction binary64 can take is taken exactly as before, bit for bit: no
completed run changes. inspect_current_execution no longer throws
"native host-sized deduction is not representable" for such a request.

Tests: test_native_group_absorption (new, kernel-only): p5b, each site,
pending-rounds, the overflow control and a seeded battery of 3 x 1,000
OCA-Reduce runs at ulp scale, staged and direct (bit-equal, hashes
included) -- 0 stopped; on f1af50dc 914 stopped (all code 6 / disc 7) and
970 of 177,824 checks fail. check_reservation_absorbed in
test_native_c_api.c (8 failures on f1af50dc). Rows that pinned the old
contract move to the new rule, each with its reason: G5 in
test_native_resting_acceptance and test_native_resting_replay_contract (the
overflow row stays a failure), checked_reservation_arithmetic in
test_native_order_resting_core, A-T4d in test_native_execution_terms,
numeric_absorption_and_chain_authentication in test_native_order_terms_core.
Floors: kernel 274 (275 registered), release 675. Header docs for the four
events, CoreFailure::UnrepresentableReservation and effective_host_units;
native-settlement.md and native-engine.md drop K-ULP4's "one case still
stops the run" and say what a host gets; every citation the lane moved is
re-anchored from f1af50dc (anchors 1678/1678).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
(cherry picked from commit 1d7639c80de4250babe30935cb1fd4904a57c657)

INT25 merge: picked after the integration items (the lane was accepted at 03:55,
after picks 6-8 and items (i)-(iii) had landed; it sits on K-ULP4, which it
follows). The floors add its row to the wave-G comment (kernel 277 run / 278
registered, release 678, PR registration floors 659/659/668) and its new row
test_native_group_absorption is labelled slow: 70.35 s under sanitizers (17.37 s
Debug) in the lane's own lab remote run on NTU2 (rj-20260925t190356-3de52e /
rj-20260925t190357-b83ced), over CI-LITE's 60 s rule -- 28 labelled rows, the
preflight digest re-pinned. The pages merge on digit-normalised text and are
re-anchored once at the lane's second pick.
… its own, and the checks that could pass for the wrong reason tightened (R5 lane K-ULP5, review)

An independent review of 1d7639c8 found no defect in the kernel change and
these tightenings, each applied here:
- native-engine.md said "a C row's closed_units is 0" after listing all four
  markers; C's TERMS_RESOLVED and QUANTITY_BOUND rows carry no deduction. The
  page now says a C host reads the first two as RESERVATION_REDUCED /
  DEFERRED_GROUP rows with closed_units 0, and the terms/bind absorption as
  the units that stand beside the DEFERRED_GROUP rows it received.
- "effective_deduction 0 beside a positive pending_total" also describes a
  host that answers 0 units; the marker now requires units above zero
  (page and TermsResolvedEvent doc).
- Each deduction is taken on its own: a hundred fills of 1 against 2^60 are a
  hundred absorbed deductions and leave it 2^60, where one deduction of 100
  leaves fl(2^60 - 100) = 2^60 - 128. Stated in native-settlement.md and
  pinned by the new units-repeated row (the hundred share one cohort, so
  they reduce the recipient and not each other).
- CoreFailure::UnrepresentableReservation's doc names the defensive
  non-finite guards beside the overflow.
- test_native_c_api.c: the lot count could not fail for "the fraction's fill
  did not stand" (two lots either way); it now checks the fraction's one
  APPLIED row of the dust and the head lot's units. The -current rows now
  assert what execute_current answered: the host-sized fill
  (test_native_group_absorption) and the typed UnrepresentableQuantity
  refusal (A-T4d in test_native_execution_terms).
- native-feature-parity.md OL7 cited ReservationReducedEvent's lines for the
  deferred form too (carried from the base); it now cites
  DeferredGroupAdjustmentEvent. Citations re-anchored from 1d7639c8
  (anchors 1678/1678).

Fail-before on f1af50dc: test_native_group_absorption fails 975 of 177,837
checks (914 of 3,000 battery runs stop, all code 6 / disc 7); the C rows
fail 8. On this commit: 206,377 checks, 0 failures; C ok.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
(cherry picked from commit 2a03c6580c74906c585618b050c3c32cff999827)

INT25 merge: the pages merge on digit-normalised text; the lane is re-anchored
once here (4 citations into native_c_api.h carried through the exact line map
from c3a45b50). Every anchor cites the text one parent cited (verify_carry:
1675 exact, 6 = the floor lines).
… c_abi.cpp insertions

docs/design/native-feature-parity.md row 8 cites c_abi.cpp:848 (the end of
strategy_set_native_security_feed, "? 0 : -1;") and c_abi.cpp:902
("cpp.identity.run_number = spec->run_number;"). C-SURFACE-1 inserted lines
above both in src/c_abi.cpp and moved the row's hashed ranges, but left these
two symbol-less single-line citations at their base digits, so on this tree
they cited `});` and `if (!host) return -1;`. The anchor gate only checks that
a symbol-less line is code, and the pick's exact carry accepted the lane's own
copy of the file unjudged. They now cite the same text: c_abi.cpp:862 and
c_abi.cpp:929. A scan of every page for anchors that kept base digits while
the base text moved (stale_scan.py, against 1a0e7ea) finds no other.

Found by the independent review of the integration.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
V19-FIX, K-IDX and KERNEL-EDGE each moved v19 hash values in their own named
commits, each against a tree without the others, and their pins met in three
witnesses; the picks kept one side in each conflict. This commit re-harvests
every witness pin once, on the integrated tree (after the K-ULP5 picks, which
moved none: all ten harvests are byte-identical before and after them), inside
the unreleased v19 epoch; no epoch token moves.

How: each pinned TU compiled with its own harvest switch against this tree's
library, with its ctest target's exact compile and link lines (harvest_int25:
V19-FIX's harvest3 plus PINEFORGE_K1_HARVEST for the calendar witness), then
repin_int25 (V19-FIX's repin_int21 plus the calendar rows), which STOPs on any
non-hash change: a moved trade, trade digest, net profit, error, count, bar,
driver row or other non-hash field aborts the run (both refusals checked by
mutating a harvested trade count and a calendar trade count). Seven of the ten
harvested witnesses reproduce their pins exactly (report_relower,
recording_hash_witness, receipts_in_place, quiet_bar, command_allocations,
lookup_index_witness, publication_witness); every other witness row passes
unchanged in the full suite. A second harvest after writing reproduces every
pin: 0 moved.

Moved (hash values only; the notes above each table list them again):
  test_adapter_continuation_view k_chart (7 of 7):
    14621553252499744072 -> 5575980828577033360
    1560069015253079270 -> 17778912298194596574
    8181232920474966978 -> 16463834114134690168
    8150352125352055815 -> 8941018855024971093
    4370795498617211977 -> 2898399952537902865
    10361542891827113526 -> 8964175343669296125
    4370795498617211977 -> 2898399952537902865
  test_adapter_continuation_view k_magnifier (7 of 7):
    1310098789583311035 -> 4430826578646987126
    9252967425603149690 -> 14738067743722080804
    9717019523752667192 -> 2077753189921542836
    14284557384012157011 -> 2917741806179085516
    15984354419168920510 -> 13581436790443683042
    16607038826027722339 -> 14737345821341801219
    15984354419168920510 -> 13581436790443683042
  test_adapter_continuation_view k_aggregated (5 of 5):
    7408940017323371281 -> 16542564830293500828
    11387000028137044299 -> 13031512803108236715
    4995545673543620333 -> 6906214955679447270
    9893483468656556008 -> 10543459672655655434
    4995545673543620333 -> 6906214955679447270
  test_adapter_continuation_view k_aggregated_magnifier (5 of 5):
    2376229218543853263 -> 14031106247497767919
    301774797075971540 -> 10607093485200722581
    6106527879897255797 -> 22607172627576334
    14842205570428090150 -> 12265832737220737843
    6106527879897255797 -> 22607172627576334
  test_adapter_continuation_view k_coof (10 of 10):
    10706142720152936082 -> 16820608513549156800
    14042469651802437968 -> 9462991605602344175
    1992762524201176782 -> 12220673217690837314
    9972018108613272455 -> 1856715264914641232
    9011525226083087013 -> 12811765853164186626
    7755254022538140640 -> 9115044940243703863
    16056359684121154720 -> 9198850018143016781
    10916717879615654635 -> 784137025905909089
    17916071608255404005 -> 11981249830754474578
    10916717879615654635 -> 784137025905909089
  test_adapter_continuation_view k_recording (71 of 72):
    14621553252499744072 -> 5575980828577033360
    16947653718640119089 -> 16309388099732889217
    8181232920474966978 -> 16463834114134690168
    384032772146433484 -> 14697449118452563264
    4370795498617211977 -> 2898399952537902865
    10361542891827113526 -> 8964175343669296125
    4370795498617211977 -> 2898399952537902865
    11635388043626139808 -> 11912929120179152844
    5137642655964282706 -> 7111499071038382551
    1067158101705749258 -> 14395892391241930212
    17589216349291364682 -> 9034635987304089269
    13103826456263923669 -> 7745035282290493167
    14125475791418217750 -> 9653978480792136139
    5496734832958426517 -> 6575784925310671623
    3300864403891436803 -> 16756306850270906652
    14334667028075329258 -> 6791844355462743637
    19027534220486873 -> 9752175874850418240
    17400684420983527587 -> 5581794927458177019
    16843748232757858737 -> 16367531041072987671
    5910420545552211065 -> 5499206076623092635
    4037494890945270795 -> 16891823664600062531
    13685270228904493022 -> 15306266440153708710
    12610051923577992823 -> 8382791724770590634
    13419685112760992640 -> 4926336483410460532
    6561776234336247499 -> 12823090459845782834
    11286535916465691925 -> 10217177223946990874
    9286401377316929631 -> 12680312482263936655
    11941619648187175172 -> 15032085204869760060
    2781110012097249044 -> 7696336452231268012
    5152088055254729287 -> 6819477884530924764
    14925422330047382771 -> 13932522791731114426
    18068979986855895194 -> 15842817164955438950
    3293728938989802792 -> 4250764768037495411
    3040154494312885091 -> 1760469320874157114
    3914527074597397115 -> 7565330933885892856
    6028800054409062637 -> 3348650657119335616
    17539544361470737737 -> 16026642042438818681
    17497902664474484401 -> 15336121108426360137
    16821147754446235025 -> 12610087835245307199
    3501965129295230921 -> 3169655936610324835
    17136543747664596622 -> 18005345939863936504
    6796102544471338071 -> 10374887129263366256
    10258488113034267824 -> 3316605285128650350
    15437545425183691961 -> 10411230090089985874
    10208872586329130020 -> 2321647345879300563
    14368668855499836453 -> 9282855342318040804
    628171839165946395 -> 8782939554936041465
    10702221356985455012 -> 9270809468617755726
    2314157047087909764 -> 9705564861311910669
    12920471494293590838 -> 1984027035687621850
    8752737450779041921 -> 5309816640440296119
    7994102271719463356 -> 61906512444861614
    4741946402210887143 -> 18408253739502061131
    739366574823717504 -> 2900636347809437670
    3655914840365203865 -> 8590510826456084479
    7448010022416009296 -> 16739036358771975930
    11266041923012349372 -> 3846505090147632664
    16061447354858643806 -> 13346518438036570112
    6641998937765131086 -> 3939181335635768762
    15745847663605277053 -> 1996675722330704212
    2232785799096296677 -> 271113896427528122
    12057790076704791676 -> 1511893874670543988
    14126847163984952264 -> 15973548105797383183
    6703125855558665936 -> 4392899708297163730
    750370809058189391 -> 11467883812317724901
    727242285392145435 -> 11051413718335140252
    9029503590661437192 -> 903533060614176790
    6205861443650071106 -> 14466209299323094098
    5548300568428407565 -> 4010960734010157804
    4191735526950747220 -> 5172512134487820157
    4370795498617211977 -> 2898399952537902865
  test_adapter_continuation_view k_stream (54 of 54):
    16510252855932086823 -> 16458853630937199693
    14048324983519873828 -> 10534014544629119321
    17804079663198632649 -> 15852567477617018112
    7665081442761407167 -> 8395254103899656747
    1510562666313522433 -> 9137153746257222586
    16253369998080909938 -> 4321243615010347791
    15976513930905472129 -> 2464381025353933752
    3846751227738950664 -> 4335032133758631355
    15450124388103584652 -> 3418642895666580588
    2225665425051551577 -> 12043850726481513634
    15615312821753524918 -> 15778603109418817912
    11958084298410326056 -> 7422979898823356625
    7978187604899367877 -> 8082887755714141501
    876738446875159256 -> 18272796975887582060
    3498362567022607364 -> 4620349392656757831
    7053403205296459880 -> 11062470475981718812
    11858356529053237 -> 11681022048666484124
    5137924053122990913 -> 1110410394930231379
    1455779883697863925 -> 8353289200898942510
    1450972605221627516 -> 5464661787014092283
    6748150359618158603 -> 18042314908697358845
    17100694157255179539 -> 17913569146247237990
    16383805058165184155 -> 14252084119842247317
    14458762612387161134 -> 13951402111806527659
    7578874640041129857 -> 14984524306684102418
    1091721997205765161 -> 4929388494852177725
    4972829120680344696 -> 8427843384471180011
    11905106519757767589 -> 12312569890916686665
    14990642672847258155 -> 7806471840435792838
    18051484560037243770 -> 10841176947711978698
    7846354589731725875 -> 14141658027994245481
    1584652476433904101 -> 15796138674937755121
    12788838416146221578 -> 4930499034900633496
    859043901073302035 -> 11894749826123257324
    5668633829937549152 -> 331885767850924737
    7252967951263295973 -> 6209022505833017115
    13226339972060618816 -> 13004202639896233962
    1981332788226950674 -> 1029059189446661931
    17570152268719247518 -> 9179914352160302837
    808203791867106338 -> 9236479431486641300
    8732491230892848194 -> 5209128789544115679
    960688443443831230 -> 5582126543454279956
    8967860587877234272 -> 14370442711223214011
    12765059320032069741 -> 16435999169585034112
    3138802922902822053 -> 2858404675926398753
    6653748162035956560 -> 2863207613356019619
    12107272552955766436 -> 4197841241754323017
    11629978161529728893 -> 1651019462700250297
    12532033173457401429 -> 9342015881796079139
    8444087394523764362 -> 971242319250035563
    13899343461558324542 -> 6367780246848246992
    8444087394523764362 -> 971242319250035563
    14079671624423886806 -> 6931684686417541656
    8444087394523764362 -> 971242319250035563
  test_adapter_continuation_view k_stream_aborted (35 of 35):
    16510252855932086823 -> 16458853630937199693
    14048324983519873828 -> 10534014544629119321
    17804079663198632649 -> 15852567477617018112
    7665081442761407167 -> 8395254103899656747
    1510562666313522433 -> 9137153746257222586
    16253369998080909938 -> 4321243615010347791
    15976513930905472129 -> 2464381025353933752
    3846751227738950664 -> 4335032133758631355
    15450124388103584652 -> 3418642895666580588
    2225665425051551577 -> 12043850726481513634
    15615312821753524918 -> 15778603109418817912
    11958084298410326056 -> 7422979898823356625
    7978187604899367877 -> 8082887755714141501
    876738446875159256 -> 18272796975887582060
    3498362567022607364 -> 4620349392656757831
    7053403205296459880 -> 11062470475981718812
    11858356529053237 -> 11681022048666484124
    5137924053122990913 -> 1110410394930231379
    1455779883697863925 -> 8353289200898942510
    1450972605221627516 -> 5464661787014092283
    6748150359618158603 -> 18042314908697358845
    17100694157255179539 -> 17913569146247237990
    16383805058165184155 -> 14252084119842247317
    14458762612387161134 -> 13951402111806527659
    7578874640041129857 -> 14984524306684102418
    1091721997205765161 -> 4929388494852177725
    4972829120680344696 -> 8427843384471180011
    11905106519757767589 -> 12312569890916686665
    14990642672847258155 -> 7806471840435792838
    18051484560037243770 -> 10841176947711978698
    7846354589731725875 -> 14141658027994245481
    1584652476433904101 -> 15796138674937755121
    12788838416146221578 -> 4930499034900633496
    6600350751158217016 -> 6596242839819495123
    12788838416146221578 -> 4930499034900633496
  test_adapter_continuation_view k_aborted (6 of 6):
    14621553252499744072 -> 5575980828577033360
    1560069015253079270 -> 17778912298194596574
    8181232920474966978 -> 16463834114134690168
    12415576349368044635 -> 12754404695042992156
    14564863596030526264 -> 8825354032181240290
    12415576349368044635 -> 12754404695042992156
  test_adapter_continuation_view k_reused (15 of 15):
    14621553252499744072 -> 5575980828577033360
    1560069015253079270 -> 17778912298194596574
    8181232920474966978 -> 16463834114134690168
    8150352125352055815 -> 8941018855024971093
    14621553252499744072 -> 5575980828577033360
    1560069015253079270 -> 17778912298194596574
    8181232920474966978 -> 16463834114134690168
    8150352125352055815 -> 8941018855024971093
    4370795498617211977 -> 2898399952537902865
    10361542891827113526 -> 8964175343669296125
    4370795498617211977 -> 2898399952537902865
    1258618990550900905 -> 4063572268643314481
    3498362567022607364 -> 4620349392656757831
    9810780513184341561 -> 7040750059417794475
    3498362567022607364 -> 4620349392656757831
  test_adapter_continuation_view k_refused (11 of 11):
    10361542891827113526 -> 8964175343669296125
    4370795498617211977 -> 2898399952537902865
    10361542891827113526 -> 8964175343669296125
    4370795498617211977 -> 2898399952537902865
    14621553252499744072 -> 5575980828577033360
    1560069015253079270 -> 17778912298194596574
    8181232920474966978 -> 16463834114134690168
    8150352125352055815 -> 8941018855024971093
    4370795498617211977 -> 2898399952537902865
    10361542891827113526 -> 8964175343669296125
    4370795498617211977 -> 2898399952537902865
  test_adapter_host_view_memo (13 of 13 runs, broker-state hash):
    batch/A: 13831511007419341774 -> 496593797863776142
    batch/B: 16942810041893704776 -> 5316201723780989919
    stream/A: 3001610611355826173 -> 4351362905685696693
    stream/B: 8241673901617223988 -> 1033336853289890500
    interleaved/A: 3001610611355826173 -> 4351362905685696693
    interleaved/B: 8241673901617223988 -> 1033336853289890500
    round_robin/A1: 3001610611355826173 -> 4351362905685696693
    round_robin/B: 8241673901617223988 -> 1033336853289890500
    round_robin/A2: 3001610611355826173 -> 4351362905685696693
    rebuilt/0: 13831511007419341774 -> 496593797863776142
    rebuilt/1: 16942810041893704776 -> 5316201723780989919
    rebuilt/2: 13831511007419341774 -> 496593797863776142
    rebuilt/3: 16942810041893704776 -> 5316201723780989919
  test_native_calendar_hash_witness ny_daily_over_hourly digest: 0xfa85a7f9a92aea39 -> 0xe4365dfe9a898fbd

Non-hash fields: none moved -- host_view_memo keeps every run's trades, trade
FNV, net profit and error; the calendar row keeps KERNEL-EDGE's 13 calculated
bars, 13 opens, 300 inputs, 52 driver rows, 14 other rows and 2 trades; the
continuation-view tables are continuation values only.

Pine witness (ReissueReplay x64 on btcusdt_15m_7d, spark GCC 13.3, normal and
stress builds): main 1a0e7ea 10045334278681590956 -> INT25 14010942914806881059
(43008 callbacks, 43008 bars, position 1 on both); V19-FIX alone gave
9305091844641472748 and K-IDX alone 10808029678210119875.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@luisleo526
luisleo526 merged commit 0d76a09 into main Sep 25, 2026
14 of 17 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant