Skip to content

INT26: wave H, the late picks and the corpus re-pin to b40aa8e (1.0.0-rc.1 candidate) - #290

Merged
luisleo526 merged 83 commits into
mainfrom
r5/int26
Sep 26, 2026
Merged

luisleo526 merged 83 commits into
mainfrom
r5/int26

Conversation

@luisleo526

Copy link
Copy Markdown
Collaborator

Summary

INT26 integrates wave H with the late picks and the corpus re-pin: 82 commits on main 0d76a09. This is the 1.0.0-rc.1 candidate.

lane what it brings
H-MEASURE measured claims made executable (12 test rows)
H-DOCGATES doc gates and ADR rows
REL10 (engine) 1.0.0 release plumbing: VERSION 1.0.0-rc.1 configures, deprecated sharpe_tv refused
K-OCA-KEEP an OCA keep handle re-prices instead of being refused
PAR-ORDERS, PAR-ORDERS2 fills at a bar's extremes; pending-entry trails; reversing stops (TradingView tapes)
PAR-MARGIN, PAR-MARGIN2 intrabar margin calls and the post-fill path (824 tape checks, 0 failures)
CI-FLAKE, CI-RUNNER timing-leg flakes fixed; preflight within 45 min
PERF-KEDGE UTC session-day witness; kernel edge speed-ups
H-THIN E19 excursions and P10 pyramiding closes, as TradingView books them
PAR-CASHFEE percent-of-equity sizing under a cash-per-order commission
CORPUS4 corpus gitlink f989e36 → b40aa8e: every generated.cpp re-emitted by codegen a4259656, no trade list moves

Hash values (v19 epoch, unreleased)

  • One commit, "INT26 v19 hash re-pin", moves 2,671 pinned hash values. Each one is listed old → new with the pick that moved it, both in the commit message and in every pinned file.
  • The re-pin tool refuses any change that is not a hash (5 of 5 mutation runs stop it).
  • A fresh harvest reproduces every pin, 0 moved.
  • The Pine witness moves 14010942914806881059 → 8577114281377521372, from H-THIN's hash step alone.

Verification on the exact head (tree 16c0779b, clean, corpus b40aa8e)

  • ci_preflight: passed, 43 stages.
  • release: 702 of 702 rows (floor 702).
  • sanitizers: 683 of 683.
  • debug: 683 of 683.
  • kernel: 287 rows (floor 286), 0 kernel residual findings.
  • Doxygen warnings: 0.
  • corpus_trades_identity: 312 probes at b40aa8e, baseline match 312, moved 0.
  • TradingView parity: holds. Excellent 311, anomaly 1.
  • Subset: match 54, moved 0.
  • Re-derived baseline pins: --update changes 0 lines at b40aa8e. The merged tree's trades are byte-identical to what each lane measured:
    • H-THIN's E19 lines: 324 of 335 moved trades now equal TradingView, 11 are closer, 0 are further away;
    • probe 96: all 792 trades exact;
    • the cash-commission probe: 355 of 366 within TradingView's cell.
  • Identity battery: all 8 host variants × 132 configurations are byte-identical to main. The only field moves over 100 slots are E19 excursions (21 rows); every other move is a broker-state hash, attributed to H-THIN's hash step.
  • Performance: instructions over 100 slots with the magnifier on, final/main: median 0.901, whole set 0.929, no slot above +2 %. Runtime budget 3.58× (limit 15×).

The population sweep against the active baseline follows. It is posted as pineforge/parity.

Follow-ups (not in this PR)

  • Add -fbracket-depth=1024 to the compile recipes in pineforge-app, pineforge-release, pineforge-live and the corpus specials.
  • test_native_intrabar_lower_lookup measured 6.21 against its 6.0 bound on one cloud host.
  • Findings the lanes recorded stay open: the magnifier's 2-minute intrabars, margin calls at margin 100 under a cash commission, and the remaining findings on fills at a bar's extremes.

🤖 Generated with Claude Code

https://claude.ai/code/session_01LifAW9e5J6gFx7gatuxETE

luisleo526 and others added 30 commits September 26, 2026 08:33
…ngView

AUDIT4 X14 rows G2-09 (M7), G2-10 (M8), G2-12 (M10), G2-13 (M11) and the
E20 f1 probe-tail pin. tests/test_adapter_margin_schedule_differential.cpp
runs the same bars and orders through the Pine adapter and through a bare
kernel host whose margin hooks answer TradingView's money and slice (the
twin's), so only the kernel's own scheduling, check kinds and opening gate
differ; every section prints both sides and pins the measured difference:

- M7: the kernel's AfterApplied point after a leveraged opening or a
  mid-bar add, and its BarOpen point on a carried commissioned POOC short,
  are points margin_check_allowed refuses.
- M8: a gap-open breach is a market execution at the open, sized on the
  open's money; no kernel check kind books that row.
- M10: the pre-open slice's own x4 parts from the kernel's AfterApplied
  point (and from ab9714b) on the one-contract band, the +1e-6 restore
  floor and the frozen signal-time units.
- M11: AdmitWithHostMargin and initial_margin_fraction part both ways.
- E20 f1 (ruled 2026-09-22): the probe-suppressed tail books the kernel's
  path liquidation and the adapter's post-script margin call.

M7 is also measured against TradingView: four lab tv tapes
(tests/fixtures/margin_entry_bar, BINANCE:ETHUSDT.P 15m, rangeProof
covered) book the margin call of a leveraged opening ON ITS ENTRY BAR at
that bar's low, as the kernel's AfterApplied point does; the adapter books
it a bar late or not at all. That is a TradingView-visible divergence,
pinned as recorded (not fixed here: the lane measures).

Docs made true: ADR-0001 "Margin" (the pre-open slice does have a kernel
point beside it) and its initial_margin_fraction row, native-engine.md's
margin paragraph, pine-to-native.md and contributing-llm.md (M11),
live-surface.md §3.2 (the tail's two routes; the dispatch_bar paragraph
named helpers that no longer exist), design rows MG4 and MG15; two design
anchors into native-engine.md re-anchored for the moved lines.

No src/ or include/ change.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
(cherry picked from commit bafefba06cebfc6989313e91c4a97e1a815a7239)

INT26 pick note: the ADR and design pages conflicted on citation digits
only (int16_digit_merge: 5 blocks, no text refused). The resolution is
PAR-MARGIN's 6574de6d, the same pick onto the same tree (83d1ca7): its two
design citations of native-engine.md carried through the exact line map
(2941-3009 -> 2963-3031). hunkcheck: every hunk of bafefba0 carried; the
two pages differ from its diff in anchor digits only.
…try trails

AUDIT4 X14 rows G2-15 (M13), the M16 sibling stop (G2-18), E14's
anchored-leg seed (AUDIT3 H6 tapes) and E5's pending-entry arm, each
measured against the kernel on the same bars and against TradingView's own
trades (lab tv, NYSE:F 15m, ws-report-v1, rangeProof covered; each fixture
README names its tapes and sha256):

- tests/test_pyramiding_count_differential.cpp (M13): fifteen pyramiding=2
  scenarios through the adapter, a bare host with max_open_lots=2 and the
  tapes. TradingView checks an entry once, at its first eligible point,
  against the trades then open; max_open_lots books 14 of 15 as TradingView
  does, the adapter's per-cycle count 8 (it counts a resting entry, admits
  three market entries on a flat bar, keeps a slot another entry's exit
  drained). A default strategy.exit(from_entry) under FIFO closes the
  book in the adapter and one lot in TradingView (P10). All pinned as
  recorded divergences; the retention reason in ADR-0001 is refuted.
- tests/test_zero_trail_sibling_stop.cpp (M16): the bare host with both
  legs is the adapter bit for bit; the Trail alone rides past the open.
  TradingView books the touch at the open on 16 of 16 taped trades.
- tests/test_pending_entry_trail_tapes.cpp (E5, E14): a trailing exit
  written while its entry is pending. The quantized arm holds, 28 of 28
  (E5's claim, taped); TradingView's running best starts at the activation
  13 of 13 while the adopted anchored child names no best_seed and exits 1
  to 24 bars later -- recorded divergences, the adoption compare leaving
  best_seed out.

Docs: ADR-0001's max_open_lots row, design MG3 and the rulings summary, the
sibling-stop and anchored-leg paragraphs (the latter no longer "an open
measurement"), native-engine.md and pine-to-native.md on adoption and the
sibling stop, contributing-llm.md's pyramiding row; two design anchors
into native-engine.md re-anchored.

No src/ or include/ change.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
(cherry picked from commit 99d3b9506af49a3c9bdfc5bfd947c12fd9988839)

INT26 pick note: the ADR, design and pine-to-native pages conflicted on
citation digits only (int16_digit_merge: 5 blocks, no text refused). The two
design citations of native-engine.md both sides moved are carried through
the exact line map from the pre-pick tree (2963-3031 -> 2970-3038,
1642-1643 -> 1647-1648). hunkcheck: every hunk of 99d3b950 carried; the
three pages differ from its diff in anchor digits only.
…rket

AUDIT4 X14 rows E19 (the excursion model, G2-22), G2-21 (short-seed
report swaps), G2-32 (the 1e-10 dust sweep) and G2-36 (session.ismarket,
the CME weekend and 0000-2400 classes), each measured against the kernel
on the same fills and against TradingView's own trades (lab tv,
ws-report-v1, rangeProof covered; each fixture README names its tapes):

- tests/test_e19_excursion_tape.cpp (E19): a corpus probe's own script
  re-exported (1580 trades, its excursion cells equal to the corpus
  tape's) and a calc_on_order_fills scratch tape. Where the host-owned
  model (RULING A48) and the kernel sampler differ, the kernel's number is
  TradingView's: entry-bar over-mask, exit-bar over-fold after an at-open
  exit, the COOF scratch TradingView reports as 0/0. One trade per class
  pinned; corpus-wide the kernel is TradingView's on 315 of the 326
  identified disagreements and the host on none. Recorded divergences.
- tests/test_short_seed_report_swap.cpp (G2-21): the swap relabels two
  rows' entry_incarnation into ab9714b's numbering, read against the
  kernel's own lot identities in the same run; TradingView exports no
  incarnation, and the Pine host books the collision tape's 13 rows.
- tests/test_pine_dust_sweep_paired.cpp (G2-32): the sweep erases a dust
  lot inside a live book, unlike ab9714b's whole-book reset; TradingView's
  decimal quantities leave no remnant row, which the Pine host books and a
  bare host does not (four 2.8e-17-unit rows).
- tests/test_session_ismarket_tape.cpp (G2-36): six tapes (ES1!, EURUSD,
  XAUUSD, ETH; both 2025 DST switches, Thanksgiving) flag every bar in
  market; the kernel's in_session matches every spelling, the generated
  predicate misses every Sunday open under a :23456 mask and every bar of
  0000-2400. Routing session.ismarket is a codegen change, not made here.

Docs: ADR-0001 (the excursion seam, the dust sweep as a quirk, the
session.ismarket selection, the excursion columns being report-only),
design RP1, RP5 (its "measured in §3.7 part 2" named no short-seed row)
and the excursion-mode alternative, native-settlement.md's sweep
paragraph ("restates" the legacy rule, it does not), pine-to-native.md
and pine_v6_coverage_detail.md on session.ismarket.

No src/ or include/ change.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
(cherry picked from commit fd3c72e2d6cc22a77b86a73d2efc36aeed7c968f)

INT26 pick note: docs/native-settlement.md conflicted in text. INT25
(K-ULP4) had appended the sentences on the adapter not declaring the kernel's
quantity tolerance to the paragraph this commit rewrites; the merged
paragraph is this commit's measured text followed by those INT25 sentences
unchanged. The ADR, design and pine-to-native pages conflicted on citation
digits only (int16_digit_merge, digits carried from the pre-pick tree).
hunkcheck: every hunk of fd3c72e2 carried; design and pine-to-native differ
from its diff in anchor digits only.
…routes

AUDIT4 X14's aggregation rows, measured on the K-IDX tree (the kernel now
books lots, rows and interval_index in script-bar space):

- F1(e), tests/test_aggregated_entry_bar_index_tape.cpp: TradingView's own
  tape of a process_orders_on_close script whose every exit reads
  strategy.opentrades.entry_bar_index / closedtrades.exit_bar_index (lab
  tv hm-f1e-ebi-pooc-eth and its magnifier-on twin, BINANCE:ETHUSDT.P 15m),
  replayed on the chart, the plain aggregated (corpus 1m -> 15m) and the
  magnified path: 26 checks, 0 failures. With the four booking sites of
  e362bc4b reverted in a scratch build (the kernel books input slots again,
  and nothing re-stamps them) it fails 10 of 24 checks: no held exit
  fires, A/B/C close at their timeouts, D never enters. No corpus probe
  runs an aggregated process_orders_on_close script that reads a bar
  index; this engine row is the parity witness until the supervisor adds
  one.
- F1's magnified residual, tests/test_magnified_aggregated_tape.cpp:
  instrumented, the three entry-bar tests of a magnified aggregated run now
  compare script bars with script bars (0 of 5170 out of space, 4996 on
  91d65ad); sixteen lab tv tapes of lane F1's differential script book
  its 12 rows as this engine does on every path (ab9714b's 9 were its own
  error). The variants the magnified run books exactly are asserted at
  chart-bar granularity; TradingView dates a magnified fill at its chart
  bar's open (218 of 218), a recorded presentation divergence.
- M20 / G2-23, tests/test_adapter_security_route_conditions.cpp: every
  condition that keeps request.security on the source evaluator, each
  reachable one tripped alone against a control site, and where a kernel
  subscription spells the same site, the evaluator's value against a bare
  kernel host's on every chart bar. ADR-0001's row named four classes; the
  predicate has sixteen conditions, now listed and measured.

Docs: design §3.8 (the gate that can now see F1's regression, AG1's
TradingView proof, AG2's magnified dating, the magnified residual closed),
ADR-0001's subscriptions row and native-engine.md's route paragraph; one
design anchor into native-engine.md re-anchored.

No src/ or include/ change.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
(cherry picked from commit 206a739d2d9a997ae0516064e668ea48979a89ca)

INT26 pick note: the ADR conflicted on citation digits only
(int16_digit_merge, digits carried from the pre-pick tree). hunkcheck: every
hunk of 206a739d carried; the ADR differs from its diff in anchor digits
only.
AUDIT4-codex A4-ACID-COVERAGE. tests/test_native_acid_composite.cpp is one
source-free strategy on NativeStrategyHost (kernel headers only) that
exercises every feature of the G1 acid test and prints PASS per feature:
F01 fee-reserved Sized entry, F02 anchored bracket legs on a price grid,
F03 a keep_binding re-issue, F04 a trail in ticks, F05 a maintenance-only
margin model and its liquidation seen through the open lots, F06 an FX
step, F07 a risk limit and an opening refused with RiskLimit, F08
calc-on-fills, F09 an hourly subscription plus an auxiliary 5m->30m series
that is actually delivered (44 buckets; the audit's copy wiped its own
series with an empty begin-time declare and so read aux=0), F10
session-day flags, F11 a FIFO partial close across lots and an exact-sum
close that leaves no dust lot (K-ULP3), F12 typed refusals, F13 magnifier
counters, F14 the kernel-recorded report with per-bar hashes.

The C half (tests/test_native_acid_composite_c.c, native_c_api.h only)
configures through strategy_configure_native_ext_result_v1 on a handle it
first refuses (GRID_REQUIRES_PRICE_TICK, stays UNCONFIGURED, then Ready,
then WRONG_PHASE), runs the same commands in batch and stream, and prints
the same FIELD lines: the C++ half compares the two sets in process, 915
of 915 identical, every C++-only family named by an EXCLUDED line (the
four C-SURFACE-2 items ruled to 1.1.0, closes_session_day_open_ended, the
protected broker fold, quote_origin_ordinal and driver_statistics).

The batch/stream comparison is explicit: trades, fills, curve, series
deliveries, check points and the broker half agree; the per-bar hash rows,
the final hashes and the forming bar's closes_session_day are
driving-mode keyed, each rule printed with its documented source.
Findings printed, not asserted: under IntrabarPath::lower_tf the margin
model is checked at the bar's first sample and after fills only, never
per sample, contrary to native-engine.md's "re-evaluates at each
delivered sample".

Source-free: registered like test_native_c_api, so it runs in the kernel
profile and in release. native-engine.md records the C port's measured
exclusions beside the COVERAGE block.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
(cherry picked from commit 58e0f16275ea57148f3385d564df88ae7cc2e70c)
… sweep catches

AUDIT3-opus2 H12 (carried by AUDIT4 X14): measure the 30-probe
pull-request subset against mutations. 44 single-line mutations (22
kernel: matching, fees, sizing, path order, sessions, timeframe
aggregation; 10 adapter; 12 ta) plus 17 designed afterwards as a holdout,
each built on spark and run over all 312 corpus probes, the unmutated tree
312/312 moved=0 before, between and after: the full sweep caught 39, the
30-probe subset 19. Escaped: ten ta.* arithmetic mutations, the AUTO
path-order tie, an HTF aggregation low, strategy.risk.max_position_size's
equality gate and the stop-limit entry (the last two with one corpus
witness each, outside the 40-item scan the subset was built from).

- scripts/corpus_parity_subset.txt: 24 probes appended (the original 30
  untouched): the greedy cover of the escapes, one witness per ta class a
  generated strategy constructs, and the two holdout witnesses. The 54
  catch all 39; subset-only reruns of the escaped mutations detect them.
  Its header no longer claims every one-witness mechanism by construction.
- scripts/corpus_parity_mutation_battery.tsv: the 39 caught mutations with
  the probes that caught them.
- scripts/test_corpus_parity_subset_cover.py, a new ci_preflight stage:
  fails when the subset stops witnessing a recorded mutation (it reports 20
  escapes against the original 30).
- docs/ci.md records the battery and the full-sweep timing it measured
  (19-24 s ten-wide, 113 s serial, after a 99 s build); the "30 probes"
  counts in docs/ci.md, CONTRIBUTING.md, README.md, check_corpus_parity.sh
  and the two workflows' comments now read 54, the historical timings are
  labelled as the first 30's.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
(cherry picked from commit 9c0579d2b332eaebe579a9b5baa7aa8dcedb8be6)

INT26 pick note: the two workflow comments this commit re-counts were
rewritten on main (57c89ff, the advisory PR subset and the maintainers'
parity status). The merged comments are main's text with this commit's
count: corpus-parity.yml's "PR EARLY SIGNAL" and "advisory PR subset"
sentences name the 54 probes; ci.yml's rewritten comment names no count.
No other hunk differs from 9c0579d2 (hunkcheck).
AUDIT4 X14 row "N12's corpus half" (DONE-CLAIMED-ONLY: design §3.6.1
cited an uncommitted, env-gated experiment). Ruled, with its pin and a
committed reproduction:

- It cannot be a CTest row. Pine's strategy.risk statements reach the
  adapter on script bar 0, after project() built the run spec and
  configure_native digested it; prepare_native_begin is final and a second
  configure_native while Ready is refused, so no in-process test can seed
  the kernel's NativeRunSpec::risk for a Pine run without a source change.
  The pins stay the five probes' baseline rows and test_adapter_risk_relower's
  SW check.
- scripts/check_seeded_risk_experiment.sh applies
  tests/fixtures/seeded_risk/n12-experiment.patch (N12's own experiment,
  recovered from its session record and ported; inert without
  PF_N12_ROUTE) to a throwaway copy, builds the runtime and the five risk
  probes, checks the unseeded runs still hash to the parity baseline, runs
  them with the kernel's rule seeded in the adapter's place and compares
  expected.tsv. On this tree (spark, 29 s) it reproduces every count the
  design states: 1502/1502 and 1464/1464 identical, 3840 of 3916, 312 of
  604, 2370 of 2386 (two extra rows) on the ten TradingView-recorded
  columns. Exit 1 when the measurement moves, 2 when the patch no longer
  applies.

Docs: design §3.6.1's acceptance evidence and ADR-0001's risk row cite the
script; one contributing-llm.md anchor into the design re-anchored.

No src/ or include/ change.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
(cherry picked from commit bf5a11fbb4248d3f3bfbf5fcce1c610705c12f41)

INT26 pick note: the ADR conflicted on citation digits only
(int16_digit_merge, digits carried from the pre-pick tree). hunkcheck: every
hunk of bf5a11fb carried; the ADR differs from its diff in anchor digits
only.
…84, kernel 271 -> 272

Counted with ctest -N on this tree, configured as ci_verify's release and
kernel profiles: release registers 684 rows (the twelve H-MEASURE rows on
top of 672, no row skips), kernel 273 (test_native_acid_composite is the
lane's one source-free row; the WebSocket row still skips on a system
libcurl, so 272 run). Each row is named beside the floor it raises.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
(cherry picked from commit 2b494497c8707c3365218cac4ae8d9548dc3c67b)

INT26 pick note: scripts/ci_verify.py's two floors conflicted with INT25's
(wave G: KERNEL 277, RELEASE 678). The merged floors add this lane's rows to
INT25's -- KERNEL 277 + 1 = 278, RELEASE 678 + 12 = 690 -- with both
comments kept; INT26 item (iv) recounts every floor with ctest -N per
profile on the integrated tree. The four floor citations in CONTRIBUTING.md
and contributing-llm.md name the merged lines (ci_verify.py:247 and :371).
…ne's dotted namespaces (R5 lane H-DOCGATES, X12)

AUDIT4-opus X12 (kres K4, K5, K11) found check_kernel_residuals blind in
three ways. Its own probe battery, copied and re-run on this tree's macOS
kernel archive, flagged 16 of 51 probes at 21bdc2e8; it flags every Pine
probe now, on all four surfaces (strings, nm, header literals, kernel
literals).

- A ruled name never covers a text. The bare words `Pine` (the PineMap
  row) and `syminfo` passed "match Pine semantics exactly" and
  "syminfo.tickerid must be set", and any ruled name passed any text
  around it. A text is now ruled by its exact words; a name by its name.
- The vocabulary reads Pine's other dotted namespaces (timeframe., input.,
  str., math., matrix., map., line., xloc., syminfo., format., currency.,
  dayofweek., ...; the namespace must open the run, so a compiler's
  l_switch.table.<symbol> label stays silent), the camel-case Tv/TV
  spelling, bare islastbar/isfirstbar, heikinashi, renko, tradingday and
  the word Pine in a text.
- A row whose second column says "no archive symbol" is held to it:
  PineMap or a matrix text in the archive or a kernel literal fails.
- The key line counts the rulings the vocabulary reads (174 identifiers,
  45 texts), not every first-column token (202/25 counted 27 + 22
  mechanism-table names), and ci_verify.py floors both counts
  (ADR_RULED_IDENTIFIERS_MIN / ADR_RULED_TEXTS_MIN), passed as
  --min-ruled-identifiers / --min-ruled-texts.

The 57 installed-header literals are ruled, not reworded (rewording a
generated strategy's runtime diagnostic is the GAP-15 codegen decision):
one new ADR row holds the 32 distinct dotted argument-check texts of
generic_matrix.hpp, map.hpp and drawing.hpp; the PineMap row holds
map.hpp's four static_assert texts in place of `Pine`; the
deprecated-alias row holds its six alias texts. No source, header or
object changes: scripts, tests and docs only.

Mac kernel archive: 21bdc2e8's checker "146 archive hits ... against 202
ruled identifiers and 25 ruled texts: 0 findings"; this commit "146
archive hits ... 326 installed-header hits ... against 174 ruled
identifiers and 45 ruled texts (floors 174/45): 0 findings ... OK".
test_check_kernel_residuals: 39 -> 46 cases (ReachTests), all pass.
A symbol a compiler split or cloned (GCC's `.cold` / `.part.N` /
`.isra.N` / `.constprop.N`, clang's `.cold.N` / `.llvm.N`) is still one
name: x86-64 GCC 13's archive prints `strategy_set_syminfo_type.cold`
and six more ruled exports that way (first NTU run of this change:
7 findings, all of that shape).

Doc deletions this commit names (rewritten, not dropped):
- ADR residual intro, "a text by a phrase it contains" (lane F6's rule)
  -> "a text by its exact words";
- ADR PineMap row, "where the bare word `Pine` is read" (lane F6);
- native-engine.md "What the kernel-only archive still names": the
  vocabulary list and "requires every match to be listed, by name"
  (gap lane P2's wording, pre-F6).

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
(cherry picked from commit d5b6583119d321e3c6d41a2dc4e1d2ccb5c86fe1)

INT26 pick note: scripts/ci_verify.py conflicted where INT25 and H-MEASURE
rewrote the floors this commit sits beside; its ADR ruled-count floors are
inserted after the merged RELEASE_MIN_TESTS, every floor and comment of
both kept. hunkcheck: every hunk of d5b65831 carried unchanged.
…he doc-revert stage (R5 lane H-DOCGATES, X13)

AUDIT4-opus docs-a (f)/N7: no silent doc revert reached main between
fd78592 and 91d65ad, but nothing would have caught one. Lane
B-C-SURFACE's rebase kept its own base's pages, dropping V19-D's
keep_handle / keep_binding row and putting D2-C's runtime-block wording
back; the integration caught it by reading.

scripts/check_doc_reverts.py compares each commit with its parent,
sentence by sentence (paragraphs, list items, table cells of README.md,
CONTRIBUTING.md and docs/**/*.md; anchor digits and content pins
normalised). A deleted sentence, or older wording restored over newer
(a sentence the page held before its parent), must be named by the
commit's message: the lane label or hash of the commit that introduced
it, six consecutive words of it, or its table row's key. Fresh rewrites
and re-anchors need no name. Range: non-merge commits since the merge
base with main; with no main ref (the lab's remote hosts) it walks back
from HEAD; a commit whose tree predates the gate is never judged.
--base/--head/--message-file judge one replayed change.

Acceptance (both run on this tree):
- 597a4367's nine pages replayed onto db98990 with 597a4367's message:
  "17 unnamed sentence deletions or reverts ... FAIL" -- V19-D's
  keep_handle rows (introduced by c619f5f) and D2-C's ambient-block
  wording reverted to "thread-local";
- e3e20cb with its own message: "0 unnamed ... OK"; the same change with
  the message "docs: tidy" fails on the 11 PERF-P1 sentences it deleted
  (introduced by 36a6a7e, cherry-picked from 3bd72fb).

Preflight stages doc-reverts and doc-reverts-tests (binding); CTest row
test_doc_reverts (10 cases over throwaway git repositories), so the
floors rise: KERNEL_MIN_TESTS 272 -> 273, RELEASE_MIN_TESTS 673 -> 674.
docs/ci.md, README.md, CONTRIBUTING.md and contributing-llm.md name the
gate; the floor citations re-anchored (ci_verify.py:229 -> :231,
:332 -> :336). No sentence is deleted by this commit.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
(cherry picked from commit 34ae339e3488c2ec22e6724643d65d2ecea73a48)

INT26 pick note: the floors conflicted with INT25's and H-MEASURE's; each
floor adds this commit's one row to the merged value (KERNEL 278 -> 279,
RELEASE 690 -> 691), both comments kept, and the four floor citations name
the merged lines (ci_verify.py:249 and :375). hunkcheck: every other hunk
of 34ae339e carried unchanged.
…borrowed citation claims nothing (R5 lane H-DOCGATES, X13)

AUDIT4-opus docs-a N1/N2 (GAP-1, GAP-5): a backticked sha256 pin before
an anchor dropped the symbol claim and was compared alone, so whatever
the cited line held passed -- a wrong line (P09), a blank line (P10), a
garbage hash before a real one (P11), a ruling row pinned over unrelated
code (P16) -- and 44 of the tree's 92 pins held something other than
what their sentence claimed. In a citation list, a citation that prose
introduced after a comma ("FX curve c_abi.cpp:882, probe c_abi.cpp:882")
borrowed the list's first symbol.

check_doc_anchors.py:
- the nearest non-pin span before a pin is still the claim and is still
  checked; a ruling row needs its symbol or fragment, pinned or not;
- PINLINE (a pin on a single line), PINEMPTY (a pin over blank lines),
  PINDOUBLE (two pins before one anchor); a pinned comment-only window is
  COMMENTONLY unless the sentence says it cites a comment;
- a citation that prose words introduce after an earlier citation's
  comma is NOCLAIM until it carries its own backticked symbol.
Self-tests 45 -> 53: PinMustFail (P09, P10, P11, P16, the comment window,
a pinned range with its claim) and BorrowedClaim. Against 21bdc2e8's
checker the six must-fail cases fail and the two controls pass
(anchor_selftests.before.txt in the lane scratch).

The pages: on HEAD the new rules raised 64 findings (23 PINLINE, 2
PINDOUBLE, 8 COMMENTONLY, 1 SYMMISS, 30 NOCLAIM). Every pin was
re-derived on this tree (claim, window, verdict, true location) and
re-cited as a symbol claim at its declaration, or as a pinned range
whose sentence names the comment it cites; every comma-borrowed citation
now names its own symbol at its true line (e.g. design OT5: FX curve
`strategy_configure_native_fx_curve_v1` c_abi.cpp:940, probe
`strategy_execution_contract` c_abi.cpp:873; FP1's fill_through
enforcement `protect_limit` :6103-6113 and InvalidTerms :4958-4976).
The anchor gate reads 1657 anchors, 0 bad. docs/ci.md and the checker's
docstring state the new rules.

Doc sentences this commit deletes or rewrites as history (named for the
doc-revert stage). Most of the pins it removes are B-DOCS' (d3cca9e,
cherry-picked from 5c3c9ae), so the unpinned wording that returns in
pine-to-native.md's `open_profit` rows and `strategy_create` row, and in
design E2's margin sentence, is that commit's pins undone on purpose:
- design §2.vi claim rows 2, 3, 6, 8 and 9: their plan-era anchor lists
  (B-DOCS' pins, 91d65ad's re-cites) become "at 73817c1 (overtaken ...)";
  row 1 is re-cited to today's Trigger/OrderIntent/Owner/Group/PointBudget;
- design §2.i "Today: one static library always compiles the source
  layer" -> "Before L1" plus the tree's current CMake lines (the
  sentence 1dd5430 wrote, "sits in the *main* list", now "sat");
- design "Its callers were the adapter only (pine_adapter.cpp:2605, ...)"
  for the deleted admission_retention -> its history (73817c1);
- design "The dead helpers engine.hpp:1255, engine.hpp:1265, ... are the
  reference arithmetic" -> they are deleted; the kernel's own step is
  native_matching::apply_slippage;
- design P6 "(`sha256` `sha256` native-engine.md:421-435)" -> the page
  section "Stream limitations (current)";
- design "degenerate equity metrics (engine_metrics.cpp:3)" drops its
  anchor (pre-L2 behaviour).

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
(cherry picked from commit 85910410f08abac32922125b4c3b0e2a01db598e)

INT26 pick note: the four pages conflicted where INT25 and H-MEASURE had
moved or rewritten the rows this commit re-cites. Each merged row keeps both
intents:
- ADR "Margin": this commit's three claimed citations, then H-MEASURE's
  measured paragraph unchanged.
- design rows 1-3, 5, 6, 9 and P4: this commit's re-citations (symbol claims,
  or "at `73817c1` (overtaken ...)"); INT25 had only moved their digits or
  re-hashed their pins. Rows 7 and 8 keep INT25's text (row 8 is
  C-SURFACE-1's current C-surface statement with its pins); this commit left
  row 7 alone and marked row 8's old statement overtaken.
- design (a) NEUTRALITY: this commit's `PASS` claim; main rewrote the
  AGENTS.md section it cited (116c461), so the pin now covers main's
  "A campaign PASS verdict still binds the exact engine and codegen HEADs"
  (AGENTS.md:139-140).
- OL14 and pine-to-native's `pyramiding` row: word-level merges, INT25's and
  H-MEASURE's words with this commit's claims.
Every other hunk of 85910410 is carried (hunkcheck); citation digits are
re-anchored once on the integrated tree (INT26 item vii).
… src/include paths (R5 lane H-DOCGATES, X13)

AUDIT4-opus docs-a GAP-6 (probes P19, P20, P29-P32): the lint was blind
to a dead `src/` or `include/` path, to a stale `native-consumer/v8` or
`native-driver/v4` domain, to "`PF_ABI_VERSION` is 3" and to "PineForge
0.13.1, the current release".

- rule 3's live hash domains also read every "native-<name>/v<n>"
  literal the tree declares (market_driver.hpp: native-driver/v5,
  native-consumer/v9, native-calendar/v1); rule 7 judges a marker on one;
- rule 5 reads `src/` and `include/` paths to a C/C++ file or directory;
  a `git show <ref>:path` object path and a file its clause calls
  generated are not dead;
- rule 8 (new): a stated PF_ABI_VERSION / PF_NATIVE_API_VERSION must be
  the header's #define; a higher number is a forward reference unless
  stated as current, a lower one needs the marker and a history framing;
- rule 9 (new): a PineForge release stated as the current one must be
  VERSION's.
Self-tests 55 -> 67 (MustFailH: P19, P20, P29, P30, P31, P32, a marker on
a native domain stated as now, a forward ABI number stated as current;
MustNotFireH: live values, forward/historical numbers, git object paths,
a generated header, a foreign crate's src/main.rs, a native domain as
history). Against 21bdc2e8's lint the eight must-fail cases fail and the
four controls pass (lint_selftests.before.txt in the lane scratch).

The tree had three offenders under the new rules, all in the design
record: row o (§2.ii) now says the admission journal "was"
include/pineforge/market_admission.hpp + src/market_admission.cpp until
N14 moved both under source/ (marked history), and §2.iii's O proposal is
spelled `c_native_host.cpp` like S's, not as a tree path. The lint reads
0 offenders; docs/ci.md lists the new families.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
(cherry picked from commit 845b07a5a345312bfa85a71fbfd9b5aeab514724)
…r ordered, and a lint that keeps the class out (R5 lane H-DOCGATES, X17)

AUDIT4-opus perf N-2: XPLAT1's bug class (e8bc323) came back. C++ leaves
a call's argument order unspecified and a binary operator's operands
unsequenced; GCC on x86-64 draws right to left, AppleClang left to right,
so ten call sites in five test files (P7's and L2's fixtures, TA1's tests)
built a different random battery on each compiler. The lint finds five
more, in unsequenced `*` operands (test_adapter_live_state_equivalence,
test_native_direct_mutation x2, test_native_handle_stable_replace x2).

Each of the fifteen sites now takes one draw per statement into a named
local, in the order the arguments are written (AppleClang's), so no Mac
output moves:
- the 15 affected test executables, Release, AppleClang 17 (arm64):
  stdout before vs after identical in every non-timing byte (15/15);
- the same 15 in Docker xplat1-gcc13:amd64 (GCC 13, x86-64): before, the
  printed batteries differed from the Mac's in 7 tests
  (test_adapter_purge_index "14844 commands" vs 14575,
  test_native_settlement_carry, _fused_settlement, _in_place_reads,
  _precommit_hook, _quiet_point, _direct_mutation); after, x86-64 prints
  the Mac's bytes in all 15. Every test passes on both, before and after.
So the only output that moves is x86-64's random battery, onto the one the
Mac already runs; no pinned value, hash or fixture moves (nothing in these
tests pins a draw-dependent count, or x86 CI would have failed before).

scripts/check_rng_draw_order.py (binding preflight stages rng-draw-order
and rng-draw-order-tests): a draw is a call that advances a std:: engine
or a class whose members apply a PRNG step, found transitively through
drawing helpers and lambdas; it reports ARG (two draw-bearing arguments of
one call), OPERAND (two draw-bearing operands of an unsequenced operator)
and BYVALUE (a generator parameter copied while other arguments are
evaluated), and leaves the sequenced forms alone (one per statement or
declarator, braced-init lists, && || ?: and the comma, C++17's << >> []
= orders, lambda bodies). 21bdc2e8's tests: 15 findings; this tree: 0;
self-test 5 cases (a must-fail fixture of XPLAT1's three shapes and each
kind, a must-pass fixture of every sequenced form). CONTRIBUTING.md
lists the gate.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
(cherry picked from commit 7536bf01e0a4cbfdb32141b9065891048f4366a6)
…-day memo a witness that reads it (R5 lane H-DOCGATES, X17)

AUDIT4-opus perf N-7 and D-17: two INT23 witnesses proved nothing.

1. uninstall_runtime_ambient's debug-build LIFO check (09ced53, INT23)
   had no row: a mutant deleting it survived every profile.
   tests/test_native_runtime_ambient_lifo.cpp holds the legal order in
   process (each block's writes copied back down to the thread's own) and,
   in a forked child, the outer block leaving first: a library built with
   its debug checks (PINEFORGE_LIBRARY_DEBUG_CHECKS=$<CONFIG:Debug>, from
   tests/CMakeLists.txt; the TU strips NDEBUG like every test) must die of
   SIGABRT inside the call; any other library must return, leaving the
   thread's own block in force with the inner block's write lost -- the
   silent state loss the check exists to stop. Measured on a scratch copy
   of this tree: Debug "ok (16 checks)", Release "ok (19 checks)", Debug
   with UBSan ok; with the check deleted, Debug fails 2 of 16 (the child
   returned). This tree's Release kernel build: "ok (19 checks)".
   Source-free, so it runs in the kernel profile too: KERNEL_MIN_TESTS
   273 -> 274, RELEASE_MIN_TESTS 674 -> 675 (recorded below both floor
   lines so the pages' citations of them do not move).

2. test_chart_day_memo's `CHECK(pair.kept.holds_cache())` became vacuous
   with D2-C: the consumer holds the adapter's lookup index on every chart,
   so INT23's mutant cd5 (a memo never kept or read) passed. The new
   memo_witness reads the memo in place and plants keys in it (test-only:
   the index's day_lo / day_hi / day_key offsets come from a layout mirror
   of AdapterLookupIndex, held to the whole days UTC reads keep before
   anything is planted, so a drifting layout fails instead of writing over
   another member): on each UTC spelling a read keeps its whole floor day
   and key and a planted key answers exactly that day; on each chart
   timezone nothing is kept and a planted key is never answered.
   Mutants on a scratch copy: cd1-cd4 still fail; cd5 (never read), cd6
   (kept, never read) and cd7 (a zoned chart consults the memo) now fail
   where the old check passed all three. No source change: tests only.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
(cherry picked from commit d5ead4d5893e175f431bbd9b8d25f138fe6d5706)

INT26 pick note: the floors conflicted with the merged ones; each adds this
commit's LIFO death row to the merged value (KERNEL 279 -> 280, RELEASE
691 -> 692), with this commit's comment kept below RELEASE_MIN_TESTS so the
cited floor lines stay put. Every other hunk of d5ead4d5 carried.
…ext script-ABI epoch's schedule are written down; three comments say what the code does (R5 lane H-DOCGATES, X17)

AUDIT4-opus X17 (perf N-1, N-4, N-5, N-6, N-9, N-10; K1-9; L4-10), the
documentation half. Comment-only for the three C++ files: their code and
literals are token-identical to HEAD's (scripts/cxxlex.py), and the
Release objects of src/native_calendar.cpp (which includes
native_calendar.hpp) and src/source/pine_strategy_host.cpp (which
includes pine_adapter.hpp) are byte-identical before and after
(sha256 ccd2c0b06f48..., c9ce59093717...).

- TLS wording: pine_strategy_host.cpp said D2-C left "no thread-local
  access per bar"; it left no thread-local WRITE. The comment now names
  the readers that still reach the block through the thread's pointer
  once per call (the extremum rings behind ta.highest / lowest /
  highestbars / lowestbars / stoch / wpr / range; the day partition behind
  the default ta.vwap, crosses_boundary(DAY) and the session-period
  helpers), measured 1.000 access a bar per call by AUDIT4.
- K1: native_calendar.hpp claimed every instant a held session day
  holds() keys to its ordinal; America/Sitka and America/Juneau in
  October 1867 under "2330-2300" hold 30 and 45 instants (all out of
  session) whose own session_day_at carries another ordinal. The comment
  states the guarantee where the cycles tile and names the exception.
- L4: the two retired receipt-reader slots and their waivers are
  scheduled for the next engine_script_run epoch (slot comment, both
  waiver rows, and the progress page).
- docs/native-refactor-progress.md "Deferred performance work": D2-B, the
  PERF-D3 S1a / S1b / S1c / S2 / S2e rows and the quiet-run loop, PGO,
  L3's compact records, checked-values handoff and chunked trades_ store,
  the zoned chart-day memo, and the thread-local readers that remain --
  each with its measured size (lane, host, tool), the ledger ruling that
  deferred it, where its prototype lives (perf-d2/proto-throwaway
  92e85571, perf-d3/proto-throwaway a820b7df, r5/l3 b33ea659) and what
  reopens it; "audit-off mode", "LTO" and "data-oriented layout" are
  struck until a design note defines them.
- "Recorded witness drift": K24's pre-size is dormant under Window
  retention; PERF-L4 reads the receipts 3.09 times a bar, not once
  (test_adapter_quiet_bar_probe on this tree: ReceiptRead asked 40996,
  81.8 % stopped at the gate, against 13248 for a once-per-bar gate);
  D2-C's carry counts moved 479/397 -> 489/412 at dbcca85 (bisected on
  macOS), and x86-64 now prints the Mac's numbers after this lane's
  one-draw-per-statement fix.
- The page joins check_doc_anchors.py's published set, so its 28 new
  citations are held; the pages' anchors that the comment lines shifted
  are re-anchored (native-engine.md, the ADR, the design record).

No sentence is deleted: the pages gain sections, and the re-anchors
change digits only.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
(cherry picked from commit 2201c1ac15ef463a8f75867651ee96c45e993f04)

INT26 pick note: the ADR, design and native-engine pages conflicted on
citation digits only (int16_digit_merge per line, digits carried from the
pre-pick tree; one ADR citation of pine_strategy_host.cpp both sides moved
taken additively, 1925 -> 1931, re-judged at INT26 item vii). hunkcheck:
every hunk of 2201c1ac carried; two pages differ in anchor digits only.
…r writes gets an ADR-0001 row, the account of TradingView-justified comments is complete, and a gate holds the inventory (R5 lane H-DOCGATES, X10)

AUDIT4-opus X10 found the ADR contradicting itself and the tree. Each
sentence was re-derived on this tree:

- The examples sentence claimed every C++ host includes only
  native_host.hpp. Three include native_toolkit.hpp or native_module.hpp
  (both include native_host.hpp) and the two C hosts include pineforge.h;
  "each including only `<pineforge/native_host.hpp>` (or `native_c_api.h`)"
  is rewritten to say so.
- The build_close_trade_with_costs row still said "One question stays
  open, recorded at the site: the net basis is applied to a host-owned
  excursion's magnitudes too (RULING A48's hook)". R5 lane F3 closed it in
  684800b; the row now says so and scopes the net basis to the kernel's
  own sampled excursions.
- The neutral-spellings row said map.hpp and drawing.hpp are neutral names
  with deprecated pine_* aliases, "already ruled: "Neutral spellings" above"
  -- a section that does not exist, contradicting the residual table's
  PineMap row (primaries with no neutral alias). The row now names both
  cases and cites the two residual rows.
- "They do not yet account for the whole population" (the paragraph ending
  "until each gets a row or moves") and the Consequences bullet "Not yet
  fully accounted for" contradicted rule 2's "no site left unruled". Four
  Section B rows close the eighteen unruled lines the audit's closure grep
  found (the chart-day partition, the bar-time accessors, the offset sign,
  the grid and lot helpers); the paragraph now records the re-taken census
  (369 comment lines in 44 of 92 files, none unruled) and the bullet says
  the count is held by reading, not by a gate. Rule 2 pointed at "the
  section below"; the section is above.
- Rule 1 now names the generated-code language runtime and its admission
  test, which the three category rows apply.
- The subscriptions row listed four exclusions ("the sites the predicate
  leaves out (lower timeframe, lookahead, auxiliary, streams) keep the
  source evaluator"); declare_security_sites_to_kernel has fifteen and
  declares every site or none. The row lists them.
- Fourteen new rows in "Kernel state the adapter sets" cover every seam
  and member the new gate finds, including the two whole-struct
  current_bar_ writes (E21 check e), broker_fill_event_seq_, the dead
  source_stream_entry_comment (scheduled for the next script-ABI epoch in
  docs/native-refactor-progress.md), fold_exit_trail_peak_, NativeHostCache
  and the rows AG1/AG2 re-date. The dust sweep is recorded OPEN for lane
  H-THIN (A4-DUST); the position_entry_count_ overwrite is recorded OPEN.
- Design row RP5 said the short-seed swaps are "measured in §3.7 part 2";
  no row there measures them, and it now says so. The second "### 3.8"
  (lane F9) is §3.9, and RP9's "§3.8 records the old quadratic adapter fold"
  now points at it.
- Two engine.hpp comments were false: "Generated code reads them for Pine's
  bare ``hour``" (the transpiler emits pine_hour(..., syminfo_.timezone);
  no corpus strategy names a _bar_* accessor) and script_tf_'s writers
  "(both sites live in engine_run.cpp)" (the one writer is the Pine host).
  Comment-only, line-count preserving: all 86 library objects are
  byte-identical with and without the edit.

scripts/check_kernel_seam_rows.py (a binding ci_preflight stage, with its
must-fail suite as ci_preflight stage and CTest row test_kernel_seam_rows)
fails when a kernel `virtual source_*` seam, a BacktestEngine member the
source layer writes, or a Trade / PyramidEntry field written through the
kernel's rows has no ADR-0001 row naming it in its first cell. Over this
commit's parent it reports 43 without a row; here 0. It reads class bodies
itself: check_broker_state_hash_coverage.py loses a member declared right
after an inline function body (current_bar_, bar_magnifier_enabled_,
trace_buffer_). KERNEL_MIN_TESTS 274 -> 275, RELEASE_MIN_TESTS 675 -> 676.

Sentences deleted or rewritten, by the commit that wrote them: ca0aac5
(INT16's examples sentence), 2757095 (P2's lead-in of the mechanism
table), 5691220 (L14-C's neutral-spellings row), 2dd9834 (F2's "The rows
above account" paragraph and its "Not yet fully accounted for" bullet) and
d3cca9e (the gates paragraph's closing sentence, now naming the seam-row
gate beside the review record).

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
(cherry picked from commit 4cbc6ab6c1d8925d2d9353fc030ab511665252f9)

INT26 pick note: the merged pages keep both sides.
- ADR-0001 inventory: INT25's K-ULP4 and K-ULP5 rows stay after the journal
  window row (its V19-FIX wording kept), then this commit's fourteen rows.
- ADR `subscriptions` row: this commit's all-or-nothing predicate list, plus
  the one clause it left out (`declare_security_sites_to_kernel` also
  refuses a registry whose `sec_id`s are not dense from 0), then H-MEASURE's
  measured sentence on what each reachable clause changes (c77ee9f9).
- ADR close-trade row: this commit's closed A48 question and H-MEASURE's
  report-only excursion columns (word merge).
- ADR rule-2 paragraph: this commit's gate list, then INT25's C-SURFACE-1.0
  transport ruling section unchanged.
- design RP5: H-MEASURE's measured short-seed sentence stays; this commit's
  "unmeasured: §3.7 has no row for them" was true only before H-MEASURE's
  `tests/test_short_seed_report_swap.cpp` (37090e1).
- floors: this commit's seam-row self-test adds one row to the merged
  values (KERNEL 280 -> 281, RELEASE 692 -> 693).
check_kernel_seam_rows on the merged tree: 3 seams, 44 written members,
0 without a row.
…does not expose, its reason and the checker row that fails when the gap closes; no page claims C/C++ parity beyond it (R5 lane H-DOCGATES, C-surface 1.0)

Supervisor ruling 2026-09-26: C-SURFACE-2 moves to 1.1.0, so the 1.0
docs list every C++ capability the C surface does not expose, each with
its reason and checker row, and nothing claims C/C++ parity beyond that
list.

docs/pages/native-engine.md "The 1.0 C boundary" replaces "What is not
exposed, and why", which named the five excluded host members and said
of the preview that "`strategy_native_execute_current_v1` answers the
same verdicts" -- it applies the command, so it is no preview. The table
has 27 rows: the five COVERAGE `[--]` members, the deprecated
hash_source_extension seam, the KernelRecordedAtHostMarks exclusion
(reworded: the kernel's mark is reached only by the Pine source host; a
C++ host records its own points), and 21 C_V1_EXCLUSIONS rows -- the
replace options, the applied event's tail, a closed row's entry comment,
closed rows in place, the working request's whole definition, the
open-ended session-day fact and the rest of the callback contexts,
host-sized openings, the terms hook's units answer, the excursion facts'
rate, the hash sink, the entry-bar mask outside on_applied,
timeframe_undetected, the inherited statistics, the hook views, the
command events' payloads, the command results, native_state()'s spec and
failure context, trace rows and hook re-declaration, the C++ library
around the host, and native_toolkit.hpp. The four C-SURFACE-2 items say
1.1.0; the rest say they have no lane.

scripts/check_native_c_api_surface.py: each C_V1_EXCLUSIONS row pins its
C++ declaration (a whole-word match) and one or more (C record, pattern)
pairs whose pattern must stay absent; every pattern tolerates a prefix
and a suffix (`\w*`), because the old draft's pins caught only the plain
spelling and let strategy_closed_trade_entry_comment_v1, a
keep_handle-carrying replace call, strategy_native_submit_bracket_v1 and
a request_origin / request_label applied tail through. The page must
cite every row exactly once and no row the checker lacks. Ten new
self-tests: those four spellings, a pf_native_applied_ext_v1 beside v1,
an input interval on the decision, a C++ declaration that goes, and a row
missing, doubled or made up on the page. Against this commit's parent
checker all ten fail (7 failures, 3 errors); here 29/29 pass.

Parity claims narrowed where they went past the boundary: native-engine
"`<pineforge/native_c_api.h>` is the C spelling of all of it", the
reading table's state / working / events / current-point rows (partial),
native_sized_units's C cell (it has one), the preview's C cell, the
report mark "the host calls the kernel's report mark", the spec
extension's "The one field of `NativeRunSpec` it deliberately does not
carry is `identity`" (also timeframe_undetected), on_close_units "the only
half this header exposes"; pine-to-native "needs no C++", the host-sized
answer "A C host answers the same question through `on_close_units`",
"Three rules make the C door behave like the C++ one" and the "Five
members have no direct C spelling" paragraph; README's three front doors
("so they match trigger, price fills, book lots and settle identically")
and "to its C++ **and** C spelling" (also index.md and contributing-llm);
the ADR's C API bullet, its route-or-ruling sentence and the
KernelRecordedAtHostMarks row; design §2.iii marked as the L13 plan.

Header comments (comment-only, line-count preserving; all 86 library
objects byte-identical with and without them): native_c_api.h's opening
("It is the C spelling of ... NativeStrategyHost"), the
inspect_current_execution COVERAGE row, the spec extension's omission,
on_close_units; native_host.hpp's C spellings of native_state, events,
current_execution_point, resolve_execution_terms, inspect_current_execution
and the two configure calls; native_order.hpp's HostSized note ("the C
surface refuses HostSized under any owner but BindCohort" -- a Book-scoped
WaitForApplied close is admitted too).

Sentences deleted or rewritten, by the commit that wrote them: f22a34e
(N8's "What is not exposed, and why" lead), d3cca9e (its five-member
list and the market-only note), 69228e6 (L14-C's native_sized_units and
preview C cells), 074f648 (F4's KernelRecordedAtHostMarks row reason),
2fcbb52 (F2's "Not every member of the C++ host has a C spelling"),
ca0aac5 (INT16's five-member sentence on the migration page) and 4fb9db3
(L14-B's CONTRIBUTING row for a C kernel-driving export).

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
(cherry picked from commit 77a3eacb6e24fec8d98c1d074bfaf8943cdfdb9a)

INT26 pick note: this commit was written before INT25's KERNEL-EDGE
(409ebad), which made the kernel's report mark installed C++ API
(`NativeStrategyHost::mark_native_report_point`, a COVERAGE `[--]` row of
native_c_api.h). Its sentences "The kernel's mark is reached only by the Pine
source host (it is not installed API); a C++ host records its own points
instead" are false on the merged tree, so:
- the ADR's KernelRecordedAtHostMarks row keeps INT25's text (a C++ host
  reaches the kernel producer through mark_native_report_point);
- native-engine.md's report-mark paragraph keeps INT25's text and adds this
  commit's C half: "A C host has no call that marks one (the 1.0 C boundary
  table).";
- the boundary table's KernelRecordedAtHostMarks row states the C++ mark
  route and cites COVERAGE `[--] mark_native_report_point` beside its
  ENUM_TWINS exclusion (the sixth excluded NativeStrategyHost member).
The C configure paragraph keeps INT25's "a second extended configure of a
Ready handle is refused without changing it" and takes this commit's two
omitted fields (`identity`, `timeframe_undetected`). The ADR paragraph on
report ownership keeps INT25's digits and takes this commit's boundary
pointer. check_native_c_api_surface: 64 members, 58 with a C spelling,
6 excluded; 21 C++ capabilities outside the 1.0 C surface, each pinned and
in the boundary table.
…d Eigen's assert text a debug archive carries has its own row (R5 lane H-DOCGATES, X12)

The sanitizers profile's run of the X12 vocabulary (lab remote job
rj-20260925t190344-64918a, NTU2, x86-64 GCC) failed test_kernel_residuals
on two strings a release archive does not carry:

- `'struct SymInfo'`: UBSan's type descriptor quotes a type's name. The
  line IS the name `SymInfo`, which is ruled, but X12 judged it as a text
  naming a ruled identifier. check_kernel_residuals.py now reads a quoted
  type name (GCC's `'struct X'`, clang's `'pineforge::X'`) as its names.
- `matrix.cols() == matrix.rows()`: the eigen_assert text of Eigen's
  eigenvalue solvers, which src/matrix.cpp instantiates, compiled in only
  when NDEBUG is off. X12's dotted-namespace vocabulary reads `matrix.`.
  It gets an ADR-0001 row by its exact words ("not residue": Eigen's
  parameter, not Pine's namespace), and a row whose second column says
  "absent under NDEBUG" is no longer called stale when no surface carries
  it, so the same row holds in release, debug and sanitizers.

ADR_RULED_TEXTS_MIN 45 -> 46. Five self-tests: both quoted spellings
pass as the ruled name and an unruled quoted type still fails, a quoted
Pine text is still a text, the debug-only text is not stale when absent
and covered when present, only a marked row may be absent, and an
unruled assert-shaped text still fails. Dropping the type-name rule fails
the first; dropping the debug-only rule fails the release table.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
(cherry picked from commit 68b974f2d2921fbe79c72d1b9642ad393cc67d66)

INT26 pick note: scripts/ci_verify.py conflicted beside INT25's PR-only
floors and ctest bound; ADR_RULED_TEXTS_MIN takes this commit's 46 and every
INT25 line stays. The residual gate on the merged tree: 174 ruled identifiers,
46 ruled texts, 0 findings.
…ane REL10, item 1)

ADR-0001 "Deprecated public spellings" scheduled pf_equity_stats_t::sharpe_tv /
sortino_tv for removal at the next PF_ABI_VERSION and
exit_legs::Domain::Coof / MagnifierCoof at the namespace after lifecycle_v1.
They are removed for 1.0 without either epoch: an alias shares its storage or
its value with the primary spelling, so no offset, size, value, hash fold or
mangled name moves. PF_ABI_VERSION stays 4 and lifecycle_v1 stays
lifecycle_v1; the PF_DEPRECATED and PF_ANONYMOUS_UNION helpers leave
pineforge.h with them.

ADR-0001 rule 2: the kept spellings are the generic ones, named for the
resampling period and the fill-recalculation pass, not for a Pine or
TradingView setting.

- test_removed_public_spellings (F6's deprecation row, renamed; still one
  row): the 1.0 spellings compile clean under -Werror in strict C99 and in
  C++17, and each removed spelling alone fails with the unknown-member
  diagnostic that names it.
- Tests and the Python mirrors name the 1.0 spellings; the twin-parity guard
  matches the renamed CHECKs by literal signature, counts unchanged.
- The JSON report keys stay sharpe_tv / sortino_tv: docker/run_json.py writes
  the two C fields under them (EQUITY_REPORT_KEYS), pinned by
  scripts/test_report_schema_keys.py, a new ci_preflight stage.
- Every page that named an old spelling says what is true now; the ADR
  section keeps its heading and records the removal. Anchor digits follow in
  the lane's re-anchor commit.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
(cherry picked from commit 38e8ad1e0f6a022e03d91e82f31d43ea66bef652)

INT26 pick note: dropping the four spellings drops their ADR residual row,
which H-DOCGATES (33aaf0b9) had widened to rule each alias's six texts by
their exact words; the row leaves whole, as this commit removes it, and the
residual gate's ruled-count floors in scripts/ci_verify.py fall with it
(ADR_RULED_IDENTIFIERS_MIN 174 -> 170, ADR_RULED_TEXTS_MIN 46 -> 40; the
gate on the merged kernel archive counts 170 / 40, 0 findings).
ci_preflight.py keeps H-MEASURE's subset-cover stage and adds this commit's
report-schema-key stage. pine-to-native.md takes this commit's text (line
141 on its tree), digits carried.


The sentences the removal retires, by the commits that wrote them: lane
P2c's deprecation ruling and its page notes (329e021), lane F4's strict-C99
anonymous-union note (0a46b45), the int12 guard pass's migration sentences
(9b50973) and INT16's wave-F reconciliation of the same pages (ca0aac5).
…nd every surface names it (lane REL10, item 3)

VERSION may be X.Y.Z-rc.N (N >= 1). CMake's project(VERSION), the package's
PineForge_VERSION, PINEFORGE_VERSION_MAJOR / _MINOR / _PATCH / _STRING and
pf_version_get() stay the numeric X.Y.Z; PINEFORGE_VERSION_FULL,
pf_version_string() and the package's new PineForge_VERSION_FULL carry the
full version, -rc.N included. AUTO keeps git describe first (it already
resolved a vX.Y.Z-rc.N tag); FILE and AUTO's no-describe fallback now keep the
file's -rc.N instead of dropping it, and any other suffix fails configure.
version.h.in keeps its six placeholders: codegen's test harness renders
exactly those.

The installed-package smoke consumer prints pf_version_string() and exits 1
unless the package, the installed header and the linked library name one
version. scripts/ci_verify.py compares its print with VERSION, so the numeric
print it replaced would have failed every profile on an -rc.N VERSION.
test_cmake_version_source adds the candidate's archive, tag and
past-the-tag cases, the final release after its candidate, and the refused
prerelease spellings. No pkg-config file is added: integration-cmake.md says
the CMake package is the one that ships. That page now pins 1.x: the package
is SameMajorVersion, so a 0.x minimum does not find a 1.x install.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
(cherry picked from commit dd6e9d843e24156e49be35ac4883f11ea2668116)


INT26 pick note: clean pick. Two sentences are rewritten rather than kept:
lane F2's statement of what the generated <pineforge/version.h> exposes for
0.14.0 (2fcbb52) now states the full and numeric versions, and lane FPC's
smoke-consumer sentence (4c9404c) keeps its -ffp-contract=off check inside
the rewritten smoke paragraph.
…andidates; its version arithmetic is a tested script (lane REL10, item 4)

scripts/release_version.py `next` computes current / next / tag / prerelease
/ previous from VERSION and the tags, and refuses anything but X.Y.Z or
X.Y.Z-rc.N, a version that does not sort above VERSION, an existing tag, and
a bump from a release candidate (its successor is always an exact override).
`previous`, the release-notes base, orders tags by semver precedence: the
YAML's `git tag --sort=-v:refname` put vX.Y.Z-rc.N above vX.Y.Z, so v1.0.1's
notes would have started at a candidate. `check-install` verifies a staged
install's version.h and package files before a tarball is packed.
scripts/test_release_version.py holds all of it as a ci_preflight stage.

release.yml:
- `override` (exact version) and `dry_run` inputs beside `bump`; `override`
  reaches only the script, through env.
- A release candidate is a GitHub prerelease, and the hub dispatch carries
  client_payload {version: vX.Y.Z[-rc.N], prerelease: true|false, run_id}.
- The prebuilt job configures with PINEFORGE_VERSION_SOURCE=FILE and verifies
  the staged version; the tarball keeps its pineforge-vX.Y.Z[-rc.N]-<triple>
  name.
- A dry run computes the version, builds, installs, verifies and packs every
  tarball (kept as workflow artifacts), and commits, tags, releases, uploads
  and dispatches nothing.
- The App-token commit / tag / push step is unchanged; a dry run skips it.
- The workflow publishes no container image, and its header no longer says it
  does: the GHCR image is the hub's.

ci_preflight's workflow-lint stage now lints release.yml too (the prebuilt
configure's intentional word split carries its shellcheck annotation).

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
(cherry picked from commit 2bd8e2f3fb9307571b57167d20f892a25f53cd42)

INT26 pick note: ci_preflight.py conflicted beside H-MEASURE's subset-cover
stage; both stages stay and this commit's comment covers its two stages.
docs/pages/public-contract.md states what the version number covers from
1.0.0, mirroring codegen's docs/PUBLIC_CONTRACT.md: versions and where the
full X.Y.Z-rc.N appears; the C ABI (PF_ABI_VERSION 4 for 1.x, frozen layouts,
append-only functions and enumerators); the native C++ API (source-compatible
within 1.x, not binary-compatible); the script ABI epoch engine_script_run_v19
and the stability of its state-hash values; the 1.0 C-surface boundary (the
exclusions listed in the native-engine page's "Driving the kernel from C",
where lane H-DOCGATES's 1.0 table lands; C-SURFACE-2
planned for 1.1.0); and the pairing rule -- engine and codegen share one version
number, the same X.Y.Z prerelease included, and the hub enforces it. Each rule
names the checker or CTest row that holds it on this tree, and the parts no
checker holds (a C signature kept by name, a C enumerator value against the
previous release, pf_report_t against a 1.0.0 baseline, C++ source
compatibility against a 1.0.0 baseline, the stream fingerprint's value) are
named as such.

Linked from README, docs/README, the site index, the CMake integration page
and CONTRIBUTING's new release step. pineforge.h's two hash comments no
longer say a fingerprint may change between builds: its recipe is the
epoch's.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
(cherry picked from commit 5f423b54fa8954c705fafde171f98ec0adf577f6)
What 1.0 means -- the kernel runs without any Pine adapter, and Pine is an
adapter over it -- and what a 0.x user must act on since v0.13.1, the last
tag (VERSION read 0.14.0 from 439bd52 on, never tagged): C ABI 4 and the
grown pf_report_t, the renamed equity fields (JSON keys unchanged), the
regenerate-and-relink rule of the v19 script ABI epoch and the codegen
pairing, the new state hashes, the event-retention window default,
-ffp-contract=off reaching consumers, the moved pine_float_compare.hpp, the
0.x find_package pins a SameMajorVersion package no longer satisfies, and
prerelease versions; then the behaviour that moves results. Read from the
tags, the merged PRs #232-#288 and the public headers' diff between v0.13.1
and 1a0e7ea, with each commit and PR cited checked against the history.
README points to it.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
(cherry picked from commit bda36e1fe578221727afff65883823f92d0b83c5)
…ice that keeps its handle inside a group no longer stops the run (R5 lane K-OCA-KEEP)

Ruling (ADR-0001 rule-2 row "the order of one cause's group-effect
receipts"): a drain applies a group's effect in queue order, whatever the
handles' numbers, and the receipts record that order. Generic, no knob.

Root cause (K-ULP5's finding 1, HIGH, pre-existing). A member's fill reaches
its live siblings through WorkingRequestCore::group_recipients, which walks
the book in queue order -- ascending LiveRequest::priority. A re-price with
ReplaceOptions::keep_handle (R5 lane V19-D) keeps the request's incarnation
and takes a fresh priority, so it moves behind younger siblings: queue order
and incarnation order part. The receipt store was bisected by (cause,
recipient incarnation, effect), and prepare_group_effect / apply_group_effect
refused any receipt that sorted before receipts_.back(). So the second
recipient of one cause -- the re-priced request, drained behind a younger
sibling -- was refused CoreFailure::InvalidCause and the consumer failed the
run (Contract, discriminator 1) after the member's fill was booked, staged
and direct, under Cancel and Reduce. K-ULP5's probe on 2a03c658: book
[inc 2 prio 2][inc 1 prio 3], recipients 2 then 1, receipt (21,2) committed,
(21,1) refused.

Which order is right: V19-D's contract is that a keep_handle run records the
plain replace's run -- every journal event, ordinal for ordinal. The plain
successor is the newest request and is drained last, i.e. in queue order.
Sorting the recipients by incarnation instead would drain the re-priced
request first and swap the group events' ordinals against the plain run.
So the walk's order stands and the receipt store follows it:
- receipts_ stays append-only in commit order (the consumer folds each once,
  by index, at its commit), ordered by cause alone;
- receipt_lookup bisects the cause and walks that cause's receipts (a drain
  of k recipients makes about k*k/2 comparisons);
- the order check refuses only a cause older than the newest receipt's.
A completed run's receipts were already in incarnation order within each
cause, and the lookup answers such a store as before, so no completed run
changes and no hash value moves. receipt_cmp is gone. The other walks
(waiting_children, bound_close_handles, the parent-terminal and owner-applied
drains) read no receipt order; the cohort rosters and the opening rows sort
by handle, which a keep_handle re-price does not change.

Tests: test_native_group_keep_handle (new, kernel-only): K-ULP5's probe
under Cancel and Reduce, a retained trail, a carried binding -- each under
the four option sets against the plain replace's journal; the order core's
receipts in queue order and in reverse with replays, an older cause replayed
after a newer cause's receipts, and the retained older-cause refusal; a
seeded battery (3 seeds x 30 scripts x 4 option sets, staged and direct)
re-pricing group members in random subsets and orders, whose misordered
drains are required under Cancel, under Reduce and with deferred recipients.
Fail-before on 2a03c658: 464 of 3,356 checks; the battery stops all 180 of
its keep_handle runs (of 360), code 2, discriminator 1. After: 3,404 checks,
0 failures; 0 stops; about 1,000 drains per seed out of incarnation order
each record the plain replace's run. The same battery at 200 scripts per seed
(scratch): 0 of 2,400 runs stop; on 2a03c658 all 1,200 keep_handle runs do.
No C row: the C replace takes no options.
Floors: kernel 275 (276 registered), release 676.
Docs: native_order.hpp (group_recipients, the receipts' order), the ADR row,
native-engine.md's keep_handle paragraph; citations re-anchored from
2a03c658 (anchors 1678/1678).

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
(cherry picked from commit ad7a10f599810a594a61a1d05e1cfb3157c1d317)

INT26 pick note: the kernel and header hunks applied without conflict. The
floors add this commit's row to the merged values (KERNEL 281 -> 282,
RELEASE 693 -> 694; the four floor citations name the merged lines). The ADR
row sits after INT25's K-ULP5 absorption row, where this commit put it, and
before H-DOCGATES' inventory rows (8deed8c9); the design pages merged on
citation digits only.
… writes (R5 lane K-OCA-KEEP, K-ULP5 finding 3)

native_c_api.h said the field "reads 0" because the kernel records no
discriminator on this surface. strategy_native_state_v1 (src/native_c_host.cpp)
copies NativeFailure::discriminator, which the consumer sets to the request
core's CoreFailure for a refused preparation (code CONTRACT or
SETTLEMENT_FAILURE; p5b's stopped run on the C host read 7,
UnrepresentableReservation), to the InstallError of a refused install
(CONTRACT), to the settlement's execution::Status for a failed inspection or
commit (SETTLEMENT_FAILURE) and to a staged FX curve's NativeFxCurveError
(INVALID_SPECIFICATION); it is 0 otherwise, as on every completed run
(test_native_c_api.c checks that).

Comment-only: every object whose dependencies name native_c_api.h
(libpineforge.a, libpineforge_kernel.a, test_native_c_api and 76 kernel test
TUs, 121 objects) is byte-identical compiled with the header before and
after, and so are direct compiler runs of c_abi.cpp, native_c_host.cpp and
native_execution_consumer.cpp (full and kernel) and test_native_c_api.c. No
page repeated the claim: the pages that name a discriminator (native-engine.md,
native-settlement.md) already give the runtime's values. The header's ten new
lines move the citations of later lines, re-anchored from ad7a10f5 (89
anchors, digits only; 1678/1678).

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
(cherry picked from commit a25a3ce4caa8096cf4e33a7fb327addc6373d315)

INT26 pick note: INT25's C-SURFACE-1 had already replaced the "reads 0"
comment this commit corrects, with a shorter one ("The kernel's opaque
durable failure discriminator; 0 when no more specific reason was
recorded"). The merged comment is this commit's, which names what the
runtime writes for each failure kind; both say the same of a completed run.
The four pages' hunks are this lane's re-anchor and merged on digits only;
they are re-anchored again once on the integrated tree (INT26 item vii).
…equest settles them in one fill and a whole-scope close on a grid closes whole (R5 lane K-OCA-KEEP, K-ULP5 finding 2)

Ruling (ADR-0001 rule-2 row "a request on a quantity grid whose pending group
deduction its units absorb"): one definition of settling in one fill.
Generic, no knob.

K-ULP4's grid rule admits the book's own quantity -- a whole-scope
ScopeFraction's held total, a host-sized close answered with its scope's
total -- for a request that settles it in one fill: no point budget and no
group deduction pending against it. settles_in_one_fill
(src/native_execution_consumer.cpp) read any PendingDeferred as pending, but
since K-ULP5 a pending total below half an ulp of the units is absorbed at
the terms and takes nothing. Now settles_in_one_fill asks
WorkingRequestCore::effective_host_units whether the pending total takes
any; an absorbed one takes none. The three call sites (the fraction's
resolution, the matcher's terms check, the current-execution preview) pass
the units they test.

What moved, reproduced on 2a03c658 (grid 0.1: a dust lot of one ulp closed
by an OCA-Reduce sibling defers 5.55e-17 into F, which closes a
1.1000000000000227 lot):
- F a whole-scope fraction: floored to 1.1000000000000001, it left a
  2.2648549702353193e-14 dust lot (on f1af50dc, before K-ULP5, the run
  stopped: code 6, discriminator 7); now it closes the lot whole.
- F a host-sized close answered with its scope's total: refused InvalidTerms
  and the lot left open, on f1af50dc as on 2a03c658 -- a run that completed
  before K-ULP5 too, found by the lane's review; now it closes the lot whole,
  matched at its stop or as the current execution, whose preview no longer
  answers InvalidTerms.
The Pine adapter does not reach the rule (it emits no ScopeFraction, and it
answers a close of its scope's whole total with ExplicitUnits, whose grid
check never asks whether the request settles in one fill), and runs without
a grid cannot move.
Gate (the brief's): K-ULP4's battery (kulp_random_k4.cpp, unmodified)
answers all 12,000 per-scenario hashes and every decimal-host run as on
2a03c658; K-ULP5's absorption and C-host batteries are unchanged (no grid);
grid-fraction-oca-pending (a pending total that takes 0.3) is still floored.
No pinned hash moved. The rows' own records move, 2a03c658 -> this commit
(continuation / broker hash, staged = direct):
  grid-absorbed-fraction      2536ca6f7cf7d871 (same) / 7e5b9f14781aab5d -> 6c0d1f47982b48e9
  grid-absorbed-host          973f81ffee75000a -> cd2c35e6c5ea9ece / 6da44867ad27aa55 -> 5f8c73fdb35d9258
  grid-absorbed-host-current  b549772a04b93de4 -> 6d442bf4aac15221 / 61aa04ffcfa15269 -> 3d3affc848c26292

Tests: grid-absorbed-fraction, -host and -host-current in
test_native_group_keep_handle, staged and direct (hashes compared); the
current row checks the preview and the execution itself (its result is the
applied close of the residue, and F is gone). On 2a03c658 the three fail 26
checks: floored with dust, refused InvalidTerms, the preview answering
InvalidTerms and the execution refused.
Docs: native-engine.md and native-settlement.md define settling in one fill
with the absorbed total; the ADR row. Citations re-anchored from a25a3ce4
(104 anchors, digits only; 1678/1678).

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
(cherry picked from commit 399601b9af0a28a5eabb1f458affde48c0cd1824)

INT26 pick note (supervisor ruling: item 5 accepted, including the
host-sized close the commit discloses). The kernel and test hunks applied
without conflict. The ADR row sits after this lane's receipt-order row
(0a046423) and before H-DOCGATES' inventory rows; the other three pages
merged on citation digits only.
…he activation, as TradingView's does (R5 lane PAR-ORDERS, E14 / H-MEASURE Finding 3)

A strategy.exit(trail_points, trail_offset) written while its entry is
still pending exited 1 to 24 bars after TradingView on all 13 trades of
H-MEASURE's two running-best tapes (hm-orders-h3-f-{long,short}-pending-seed).

Root cause. anchor_relative_exits placed the leg as the kernel's anchored
child, relative_leg_shapes' Trail{0, 0, TrailTicks{k}} under a FromOwnerFill
anchor. At the parent's fill resolve_anchored_level installs only its arm
level, and the fill point's exit() re-run builds the leg TradingView rides:
the same arm, plus Trail::best_seed = the activation (E14). The adoption
compare in submit_or_replace (the same_trigger lambda) matches arm_price,
ticks and offset and leaves best_seed out, so the fill point adopted the
unseeded child. Its best started at the raw arm print, half a tick or less
short of the activation, and its stop stayed out of reach.

Fix, adapter only. anchorable_relative_exit refuses a definition with a
trailing offset of a tick or more -- the one relative leg exit() seeds, and
one the anchored child cannot carry -- so the parent is not anchored and
its fill point submits the seeded leg, the rule every other shape the arm
cannot spell already follows (explicit qty, the ANY rule, streams). No
kernel line changes (ADR-0001 rule 2: the seed is TradingView's start, Pine
policy, already expressed by the generic Trail::best_seed).

The alternative (compare best_seed too, i.e. H-MEASURE's scratch "never
adopt a seeded leg") books the same 41 tape trades but still anchors,
arms and withdraws every such child; on the three regression batteries
below neither variant moves a trade's times, prices, quantity, P&L or
excursions.

Rows flipped to TradingView's expectation in this commit:
- test_pending_entry_trail_tapes: the 13 recorded divergences of §2 now
  assert TradingView's bar and price (before 0/8 + 0/5, after 8/8 + 5/5;
  the arm, §1, stays 28/28); the shape pins read {0,0,0} with no anchored
  Trail and a best_seed equal to the activation. The flipped row against
  the base library: FAIL 715 checks, 148 failures.
- test_adapter_brackets_relower: rel-trail-offset, rel-short-trail,
  mag-rel-trail-offset and coof-rel-trail-offset re-pinned {1,1,0} ->
  {0,0,0}; every closed row, equity figure and book digest there unchanged.

Three regression witnesses move and are re-pinned in the lane's named hash
commit: test_adapter_quiet_bar (16 scenarios), test_publication_witness
(17 runs) and test_adapter_live_state_equivalence (22 digests). What moves
is hash input only -- the source-layer fold, the kernel's command events
and recorded broker-state hash rows, and Trade::entry_incarnation (no
anchored child consumes a request number now): every trade's times, prices,
quantity, P&L, excursions and bar indices are identical across the 272
quiet-bar runs and the 10,122 live-state trades, and the publication
witness without its three hash inputs prints the base table byte for byte.

Docs: native-engine.md's adoption paragraph, its off-kernel table (a new
row) and the 49-scenario split {220,123,93} -> {216,119,93}; pine-to-native
and the design's anchored-relative-legs paragraph; digits re-anchored.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
(cherry picked from commit d474d7286df8a13643bace526b99c6f530b76987)

INT26 pick note: the adapter and test hunks applied without conflict; the
ADR and design pages merged on citation digits only (int16_digit_merge per
line). hunkcheck: every hunk of d474d728 carried.

The sentences it retires recorded this divergence as open: H-MEASURE's
pending-entry trail tapes (99d3b95, picked here as e1d0fa3) on the
native-engine and pine-to-native pages.
… when the pending opposite entry is not in the close pass (R5 lane PAR-ORDERS, H-MEASURE Finding 6c)

Under the magnifier with process_orders_on_close and calc_on_order_fills,
H-MEASURE's differential script (variant v3, pyramiding=1) opened 86 lots
on one bar: every fill's recalculation re-issued strategy.entry("ML") as a
same-side market add and each one filled. TradingView's tape of that run
(hm-mag-diff-v3) books 12 rows and ends flat.

Root cause. entry()'s pyramiding check (pine_adapter.cpp, the
accepted_in_cycle block) is skipped under process_orders_on_close whenever
any opposite opening is pending (opposite_opening_pending): the cap is
deferred to the close pass, where ab9714b judged a market add at its fill
(add_to_pyramid_market: position_entry_count_ >= pyramiding) and
TradingView against the trades then open. That pass fills an opposite
opening first only if it processes it; here the pending opposite entry
was a PS limit short resting from the previous bar, so nothing moved the
book, and no fill-time check exists for a fixed-size add
(validate_precommit's lot test covers the variable default sizes only).
Each exempted add filled, the fill recalculated, and the next add came.

Fix, adapter only (ADR-0001 rule 2: Pine's pyramiding is adapter command
policy; no kernel line changes). The exemption still applies when the
opposite opening is in the close pass -- a market entry, or one this
script bar's own calculation placed -- where the add may be a reversal by
the time it fills. With only a priced opposite entry resting from an
earlier bar, the add is held to the lots open now: the count ab9714b and
TradingView apply at the fill.

The row: test_magnified_aggregated_tape gains "the pyramiding cap": no
path of any of the eight variants holds more lots than its pyramiding at
any script call, and the v3 magnified run books TradingView's 12 rows and
ends flat (tape hm-mag-diff-v3 committed from H-MEASURE's evidence, README
row added). Against the base library the row fails: "v3 ..., magnifier: 86
lots open at once, pyramiding 1", 8500 units open at the end. After: 176
checks, 0 failures.

Every command the change drops, traced on the tapes and the regression
batteries, is a same-side add with the lots then open already at the cap
(v3 magnified: ML at bars 33 and 59, 1 lot at pyramiding 1; quiet-bar
Random10 bar 42: 3 lots at pyramiding 2; Random14 bar 41: 2 at 2; Random21
bar 9: 1 at 1). Those three random runs are the only quiet-bar runs whose
trades move; test_publication_witness (4 runs) and
test_adapter_live_state_equivalence (9 digests) move with them. All are
re-pinned in the lane's named hash commit.

Docs: the design's magnified-residual paragraph records the bypass as
closed; digits re-anchored.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
(cherry picked from commit 8d312d81fed3802d98f495f93791a3663285f21e)

INT26 pick note: the adapter, test and fixture hunks applied without
conflict; the ADR and design pages merged on citation digits only.
…dy reached fills at that close, on every path (R5 lane PAR-ORDERS, H-MEASURE Finding 6b)

H-MEASURE's differential script places a buy stop entry (PL, stop = high -
0.02) at a process_orders_on_close close. On its five signal bars whose
close's tick reaches that stop, TradingView fills it at that close (the
close's tick, slipped like any stop fill); the engine left it resting and
filled it a bar late at the next open -- on the chart, the plain
aggregated and the magnified path, with or without calc_on_order_fills.
On the bars whose close stays short of the stop (k = 17, 45, 59) both
rest.

Root cause, two parts:
1. flush_pooc_marketable_limit_entry_fills (the post-calculation close
   pass, ab9714b pine_fills.cpp:7604-7646) took pure LIMIT entries only,
   and none under calc_on_order_fills.
2. on_bar_close's quiet-bar gate for that pass (and for
   flush_pooc_marketable_exit_fills) tested
   row.projection_created_bar == context.coordinate.interval_index, while
   both passes test projection_bar_index(context) -- the named input slot
   (K-IDX, 3ed0276). Since K-IDX the two differ on an aggregated or
   magnified run, so the gate declared every such bar quiet and neither
   pass ever ran there (PERF-L4 wrote the gate, 770f7b2, when they were
   equal).

Fix, adapter only (ADR-0001 rule 2: TradingView's close-time fill of a
crossed stop is Pine policy; no kernel line changes):
- the close pass also takes a pure stop entry of this bar whose stop the
  close's tick is at or through, under calc_on_order_fills too (limits
  keep their non-COOF scope), booking nearest_tick(close) plus the slip;
  only as the bar's lone entry marketable at the close -- two such
  entries keep the next open's both-marketable arbitration (lane L9b's
  P0-B shapes, ab9714b literals no tape orders at a close);
- the gate tests projection_bar_index(context), the passes' own index.

Rows flipped to TradingView in this commit:
- test_magnified_aggregated_tape now replays v1 and v5 on all three
  paths, v3 on all three and v7 on the chart and aggregated paths
  (tapes hm-{mag,chart}-diff-v1/-v5, hm-mag-diff-v3 already added,
  hm-chart-diff-v3/-v7 committed from H-MEASURE's evidence). Every POOC
  stop entry books TradingView's bar and price. The rows (b) does not
  touch are RECORDED divergences asserted to differ: v3/v7 row 5 (a fill
  recalculation's market entry after a fill at bar 19's high, H-MEASURE
  Finding 6d, next commit), v7 rows 8-9 and v3's magnified row 2
  (pre-existing, outside this lane). Against the previous commit's
  library the row fails 50 of 373 checks; after, 0.
- test_l10am_entry_bar_priced_exit, the XAUUSD probe: its buy stop
  3327.38 is placed at a close of exactly 3327.38. The pin was the
  owner's (ab9714b) entry at the next bar, 2025-04-16 17:00 UTC;
  TradingView's own trade 18 of that population probe enters at 16:45
  UTC, the signal bar (Duration 6 bars; R4-D's data-probes tape). The
  row now asserts TradingView's bar.

Corpus: one probe moves, toward its TradingView tape --
validation/order-deferred-flip-pooc-cross-bar-01 (process_orders_on_close,
"open-guaranteed" stop entries). Its entry placed from the flat book after
each weekly reset now fills at the signal bar's close. Of the 82 rows that
move, the old output matched TradingView's bar on 25 and price on 58, the
new one on 82 and 82; the 57 moved entries go 0 -> 57 of TradingView's bar
and price, the whole file 791 -> 848 of 1584 rows. (Flips placed while in
position still fill at the next open here, as before; TradingView fills
those at the signal bar's close too -- not measured by this lane's rule,
left unchanged.) scripts/corpus_parity_baseline.txt re-pins that one line
(60df427d.. -> 602febda.., the sha lab remote's x86 run produced and a
local run reproduces); every other probe is byte-identical.

Regression batteries: test_adapter_quiet_bar and test_publication_witness
move nothing; test_adapter_live_state_equivalence moves 3 configurations
(reversals seeds 1152019, 1675664, 2722954, all process_orders_on_close),
each exactly a lone stop entry its close crossed now filling at that
close (L2 stop 118.5 / close 119, L 104.75 / 105.5, S2 82.75 / 80.5).
Re-pinned in the lane's named hash commit.

Docs: the design's magnified-residual paragraph records the stop entry
as closed, with the gate's history; digits re-anchored.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
(cherry picked from commit 767bb2b1c5bed8d14de768973e8c8e32b7c89278)

INT26 pick note: the adapter, test, fixture and baseline hunks applied
without conflict (the accepted re-pin of
validation/order-deferred-flip-pooc-cross-bar-01, 60df427d -> 602febda,
toward TradingView); the ADR and design pages merged on citation digits
only.
… open, as TradingView does (R5 lane PAR-ORDERS, H-MEASURE Finding 6a)

TradingView dates every fill of a chart bar at the bar's open, a magnified
one too: 218 of 218 fills on H-MEASURE's sixteen lab tv tapes
(hm-{mag,chart}-diff-v0..v7). The engine dated a fill of an aggregated
magnified run (1m input, 15m chart, use_bar_magnifier) at its sub-bar's
instant -- 71 of the 152 instants the magnified replays of the tape row
book sat inside their chart bar (15:01, 15:25, 18:16, ...).

Root cause. PineStrategyHost::on_native_applied (the AG2 re-dating, lane
F1 / E27) re-dates a lot's time and a row's exit time to
context.script_bar_open_ms for every modeled point of a plain aggregated
chart, but under the magnifier for the close points alone ("its sub-bar
fills keep their sub-bar's instant, as ab9714b dated them"). A sub-bar's
open, path and ModeledOHLCClose point were left at the kernel's instant.

Fix, host presentation only (the kernel's own instant, which its FX
lookup, decision floor and ordering read, is untouched; ADR-0001 rule 2:
TradingView's dating is presentation policy on the Pine host): on an
aggregated run every modeled point -- ModeledOHLCClose included, which
only a magnified run presents -- is dated at the chart bar's open,
magnifier or not. A chart-timeframe run (magnified or not) already dates
every point at its bar's label (0 of 1,386 magnified quiet-bar instants
off a bar boundary) and does not change; a realtime print and a stream's
quiet carried interval keep their own instant as before.

Rows flipped in this commit:
- test_magnified_aggregated_tape asserts every row's instants exactly on
  every path (it compared the bar each instant opens). Against the
  previous commit's library: FAIL 373 checks, 53 failures; after, 0.
- Three rows pinned ab9714b's sub-bar instants on aggregated magnified
  runs; only instants move, every price, quantity, P&L and book digest
  stays:
  - test_adapter_brackets_relower: the nine Mag* shapes re-harvested
    with the file's own -DPINEFORGE_R4D_HARVEST build on this tree; 20
    instants of 16 rows move onto their 2-minute bar's open.
  - test_adapter_coof_relower: the refill's l5 lot 960000 -> 900000 (its
    b0cec54 cadence text notes it); the waypoint-deferral check now
    proves the deferral by the lots' prices (100, 100, 99, 101, 100.25,
    100.1 against the birth rule's 100.0 .. 100.5), since every lot is
    dated at the bar's open.
  - test_native_calc_timing_twin: the adapter's sixth lot 960000 ->
    900000 (the native route keeps the kernel's instants).

The corpus runs no aggregated magnified probe, so nothing there can move.
One v19 hash witness moves with the dating --
test_adapter_continuation_view's aggregated_magnifier reads -- re-pinned
in the lane's named hash commit; the quiet-bar, publication and
live-state batteries run no aggregated magnified configuration and do
not move.

Docs: the design's AG2 row; digits re-anchored.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
(cherry picked from commit 1fc67988cb7df98c9b4978379cfdc5bcfb881177)

INT26 pick note: the host and test hunks applied without conflict; the ADR
and design pages merged on citation digits only.
luisleo526 and others added 21 commits September 26, 2026 12:56
… spelling

The runner test trusted every event but pull_request, so a trigger a fork
can raise -- pull_request_target, a review, a comment, a workflow_run --
added to CI or to a workflow that calls native-live.yml or corpus-parity.yml
would have run on the larger runner. It now names what it trusts: a push,
the schedule, a dispatch, or a pull request event whose head is this
repository. Every other event, merge_group included, gets the standard
runner.

A second review also reproduced spellings the contract read as absent:
quoted or spaced keys ("runs-on":, runs-on :), an on: key or event it
exempted by mistake ("pull_request":, a multi-line flow sequence), --job and
--jo (argparse accepts both for --jobs), a ci_verify.py call run from
scripts/, and a verify command moved into a variable. The contract now
reads quoted and spaced keys, treats an unreadable on: block or runs-on as
a finding, counts every --jobs abbreviation, requires each heavy job's own
verification to carry the core count, and refuses a job that calls a
workflow outside .github/workflows/. Harmless edits it flagged no longer
are: a comment or blank line in the build strategy, a trailing comment, a
backslash-continued command, the parity command inside a run block, and a
quoted standard label.

test_ci_preflight.py adds each reproduced spelling and each harmless edit,
and checks a missing job is reported once. docs/ci.md states the test, the
larger runners' billing precondition, the verifier's own bounds that bind
first, and the estimates behind the full-set limits.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
(cherry picked from commit bd8db19f4449141413aad133fd8beb6102ea615f)

INT26 pick note: scripts/ci_preflight.py conflicted on the line beside INT26
item (iv)'s PR_SLOW_ROWS_SHA256; the digest stays item (iv)'s, every other line
is this commit's.

INT26 pick note: the docs/ci.md sentence this commit rewrites was this
lane's own time-limit commit's (6419c7f).
A third review found the head test trusted any event whose payload names a
pull request: a review or review comment on a pull request from a branch of
this repository -- which anyone can post on a public repository -- would
have run on the larger runner in a workflow that listened for it. The head
test now counts only for a pull_request event; every review, comment and
pull_request_target run gets the standard runner.

It also reproduced readers that still failed open or flagged harmless text:
an on: block scalar (on: >-) or a decoy on: line inside a multi-line string
exempted a workflow, and a ci_verify module run (python3 -m ci_verify) or a
command text in a step name satisfied the core-count rule. The on: key is
now read once and only as a plain event list; the core-count rules read the
shell lines a job's run steps execute (a folded block as one command), count
the --jobs= spelling, and leave cache keys and step names alone; trailing
comments in the build strategy no longer count.

The docs name the trees behind the 1.93-1.95 ratio (91d65ad, 1a0e7ea),
the pull-request run behind the sanitizers compile time, and the case a fork
editing the workflows itself: preflight reports it, and the repository's
approval rule for outside contributors' workflow runs is what bounds it.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
(cherry picked from commit a95aa4a2af9c8a2e94e0db2dbcb562c603800723)
A fourth review found the core-count rule still read commands line by line
or step by step, so a second, unsized ci_verify call escaped when it shared
a line with the sized one (&& or ;), sat after a blank line in a folded
block, or rode in an action input (with: command:); a parity command with a
second JOBS=4 part escaped the same way. The rule is now one ordered count
over the whole job's code (comments, step names and hashFiles() arguments
aside): every ci_verify call, as a script or a module, carries exactly one
core-count --jobs before the next call, no other --jobs spelling appears,
and every JOBS and parity-script mention is part of the one parity command.
Chaining, blocks and action inputs no longer matter, and the command parser
it replaces is gone.

The same review showed on: spellings a text reader cannot see (a decoy line
inside a string, an escaped key) could still exempt a new workflow. The
exemption is now by name: release.yml, while its on: block names only
events no fork can raise (a dispatch alone today). Any other workflow file
is checked whatever starts it.

test_ci_preflight.py adds each escape (a ; chain, an interpreter flag and a
$pythonLocation call each on their own), a sized call inside an action input,
a step name mentioning --jobs 4 and a wrapped run value as no-finding cases
(each applied alone and composed), and refuses a new dispatch-only workflow
on a larger runner.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
(cherry picked from commit f313049f596ba86945c4f91eadee8b02769190bc)
…quidation_price() (R5 lane H-THIN, X15 a)

The Pine host kept a second closed-form solve of the liquidation level
(compute_liquidation_price) beside the kernel's own
NativeStrategyHost::native_liquidation_price(), which project() already
configures for it: the adapter declares the maintenance-only margin model
with NativeLiquidationLevelBase::RealizedOnly so that the kernel's level is
solved from closed money alone, exactly as the Pine formula was. The host
now reads the kernel's level and keeps only TradingView's spelling (design
row MG8): the level rounded onto the tick grid, down for a long, up for a
short. compute_liquidation_price is deleted.

Measured (probe_liq_sweep, $EV/exec/H-THIN-scratch/probes: 1,200 seeded
configurations -- long/short, margins 1..150 %, percent / cash-per-order /
cash-per-contract fees, ticks 0 / 1e-5 / 0.01 / 0.25 / 0.5 / 1, account FX,
one to three lots with a partial close -- 12,000 printed values at %.17g,
the base's library against this one): every value of a run that has a
margin model is bit-identical (10,506 lines). The 1,494 lines that differ
all belong to runs whose margin calls the host switched off
(set_margin_call_enabled(false), a PineForge switch TradingView has no
counterpart for): the kernel then has no margin model and the value is na,
where the deleted solve answered the level of a liquidation the run never
performs. No corpus probe, public benchmark slot or witness reads it.

Nothing hashed moves: the value is a query.

tests/test_margin_call_l4a.cpp's switched-off row now expects na (its
expectation corrected), and the twin's pinned rewrite evidence for
test_margin_call (tests/twin_parity_inventory.json, whose sha256
scripts/check_twin_parity.py pins) records the change and its reason.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
(cherry picked from commit abd7978cd1560a6638ff39197297bcae8ee7fcad)
… native_civil_days (R5 lane H-THIN, X15 e)

Howard Hinnant's civil_from_days / days_from_civil were restated six times:
the calendar's pair (src/native_calendar.cpp), the time-of-day fields and
their inverse (src/session_time.cpp civil_fields / days_from_civil), the
timeframe helpers' inverse (src/timeframe.cpp), the report's two UTC month
keys (src/engine_metrics.cpp month_key_utc / keep_utc_month) and the Pine
adapter's chart-day key (src/source/pine_adapter.cpp civil_chart_day_key,
audit AUDIT4 section 6 row G2-38). The arithmetic now lives once, as two
constexpr functions of the installed calendar header,
pineforge::native_calendar::native_civil_date(days) and
native_civil_days(year, month, day), and every one of those sites reads
them: the calendar's two keep their own types as one-line forwards, the
month keys read the civil month and the first day of the next, the
time-of-day fields take the day of year as days minus the year's January 1,
and the adapter's chart-day key reads day and month.

ADR-0001 rule 2 ruling: (a) mechanism -- proleptic-Gregorian civil
arithmetic, the same for every host and venue, with no platform word;
(b) knob -- none, a pure function of its arguments.

Byte-identical by construction: integer arithmetic over the same ranges
(|days| below 2^40 / 86400 on every caller), each result equal to the one
it replaces; test_chart_day_key_arithmetic and test_utc_month_key_arithmetic
sweep the adapter's key and the month key against gmtime_r and pass, as do
the calendar, session, timeframe and time-of-day rows (31 of 31 on macOS).
The kernel residual gate reads 0 findings.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
(cherry picked from commit 5e5a3ddb25d3b650afff04086b6eb8cd8a54391c)
…o the kernel (E19), and a FIFO exit reserves its entry's own quantity (P10)

The lane's one hash-moving commit, inside the unreleased v19 epoch (the
source extension stays pineforge-source-adapter/v4). Every witness it moves
is re-pinned here, once.

E19 (AUDIT4 section 6, G2-22; measured by R5 lane H-MEASURE). PineStrategyHost
overrode owns_lot_excursions() / closed_lot_excursion() with ab9714b's
per-lot MFE/MAE model (RULING A48). Where that model and the kernel's
sampler differed, the kernel's number was TradingView's (H-MEASURE's tapes,
tests/test_e19_excursion_tape.cpp). The host now keeps the kernel's default:
the owner model, its entry-bar mask declarations, its excursion caches and
level fills (pine_strategy_host, pine_adapter, pine_scheduler_native) and
their folds in pine_state_hash.cpp are deleted, and the broker-hash waivers
follow. The corpus moves on 19 probes and only in their excursion cells: of
the 335 trades whose cells moved, 324 now equal TradingView's, 11 moved
closer and none farther (315 of the 320 trades a TradingView export
identifies toward, 5 closer; the 15 TradingView lists one bar earlier,
graded by their exit identity: 9 toward, 6 closer). The new tape
tests/fixtures/e19_allin_trim (lab tv hthin-e19-allin-trim, c229f8fd) pins
the all-in residual's own entry-bar call: TradingView books it with the fill
alone, as the sampler does. The unit rows that pinned the host model's
numbers carry "expectation corrected (R5 lane H-THIN, E19 ...)" notes.

P10 (H-MEASURE's pyramiding tape). A default strategy.exit(from_entry)
under FIFO reserved the whole book (200 in the adapter, 100 on TradingView's
tape); it now reserves min(book, the entry's own cohort exposure), and the
kernel closes the oldest lots first. The corpus does not move. The lane's
tape hthin-x15b-fifo-fee-basis (f170f906) books the same reservation in its
scenario B.

Re-pinned, each value marked "expectation corrected (H-THIN, ...)" with its
cause, harvested with each TU's own switch on this tree and on the same tree
without P10 (so every value names E19 or P10); the same harvest on the base
0d76a09 reproduces every old pin, and X15 d/f move none:
  test_adapter_report_relower, test_adapter_recording_hash_witness,
  test_adapter_continuation_view, test_adapter_receipts_in_place,
  test_adapter_command_allocations, test_adapter_host_view_memo (E19 only);
  test_adapter_lookup_index_witness (E19; P10 also moves kFlip and one
  kFlip_trades row); test_adapter_quiet_bar (E19 moves 100 trade digests,
  which fold max_runup / max_drawdown; P10 moves trades and counts);
  test_publication_witness (156 digests; P10 moves 12 runs' closed trades
  and two runs' folds); test_adapter_live_state_equivalence (96 of 108
  transcript digests: 40 with E19, 90 with P10). test_native_calendar_hash_
  witness does not move. scripts/corpus_parity_baseline.txt: the 19 E19
  probes, their engine_trades.csv byte-identical to the E19-only run.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
(cherry picked from commit ab297364217954d6128e51a767a5920cc50400e9)

INT26 pick note (late pick, accepted 2026-09-26 11:30): every source, header
and test-code hunk applied unchanged. Its hash values fold into the single
INT26 v19 hash re-pin (the late-picks list), so the eleven pinned witness
files keep this branch's hash values here; the behaviour this commit moves is
pinned here instead, harvested on this tree with each TU's own switch:
- quiet_bar: 140 of 272 runs' trade digests (E19's excursions fold into the
  digest) and, where P10 moves them, their counts. Random10/0/* books 23
  trades where the lane's tree keeps 24 and the tree before this pick 22: the
  FIFO exit Y now reserves its entry's own unit and the reversal B closes the
  rest (A->Y 2 becomes A->Y 1 + A->B 1 at the same price), on the book
  PAR-ORDERS' and PAR-ORDERS-2's rules leave at that bar.
- publication: P10's trades in 12 runs and the folds of Storm17/Storm17M,
  every value equal to the lane's.
- live_state: 96 of 108 digests (the transcript holds no hash value). 55 take
  the lane's own value; 39 had been moved by an earlier pick too, and 29 of
  those move their trade count by the lane's own amount; chains seeds 104731
  and 523647 take a third value, bisected by pick: H-THIN's source on
  K-OCA-KEEP's tip gives the lane's value, on PAR-ORDERS' E14 commit
  (a6e6a00) the merged one -- P10's path meets E14's pending-entry trail.
- lookup_index kFlip_trades: one trade, equal to the lane's.
Every other pinned behaviour harvests as pinned. The corpus baseline takes
the lane's line for order-deferred-flip-guaranteed-gap-stops-01;
order-deferred-flip-pooc-cross-bar-01, which PAR-ORDERS-2 moves too, keeps
its line until the one re-derivation after every pick (late-picks list,
CORPUS4).
…R5 lane H-THIN, X15 d)

schedule_preopen_margin_slice kept its own copy of TradingView's slice (the
restore floored to the lot, taken four times, floored again) without the
one-contract band, the +1e-6 floor or the dust gates the shared
source_margin_units applies at every other margin checkpoint (AUDIT4 section
6, G2-12). It now hands the same money to source_margin_units. H-MEASURE's
M10 differential recorded where the copy parted: its band and fudge cases
now book the shared rule's 1 and 1, which are the kernel's and ab9714b's,
and only the frozen-units case still parts (4 lots on the frozen 19 against
the kernel's 1 on the book of 18), with the row's expectation corrected.
The corpus, the identity battery, the public slots and every hash witness
print the same bytes.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
(cherry picked from commit acec6d9647075f7ec0bf64f146d5aaf33ec4151b)

INT26 pick note: X15 d meets PAR-MARGIN's M10 freeze in
tests/test_adapter_margin_schedule_differential.cpp; both intents are kept
(the late-picks list). PAR-MARGIN froze a default-percent stop above 100 % at
its snapped level (18 lots), where the pre-open slice's own x4 sized nothing
-- its own comment calls that case "the band row above"; X15 d sizes the
slice through source_margin_units, whose one-contract band books that
contract. On the merged tree the M10 frozen case therefore books the kernel's
1 @90 on the 18 lots (17 left), and its checks say so; band and fudge take
the lane's 1 and 1; the header and the M10 comments keep both lanes'
sentences, rewritten to be true of the merged tree. PAR-MARGIN's eight pm-m10
TradingView tapes re-run on it: every fill equals the tape (824 checks, 0
failures). No pinned witness behaviour moves (quiet-bar, publication,
live-state and lookup-index trades harvested with their own switches).
…ates and NativeStrategyHost::native_aggregates_input_bars() (R5 lane H-THIN, X15 f)

The Pine host decided whether its chart aggregates the input feed from the
spec's two timeframe literals (source::detail::aggregates_input_bars: equal
literals without a parse, tf_ratio for every other pair; AUDIT4 section 6,
G2-39), beside the pairing the kernel itself resolves and aggregates on. The
kernel now answers it: native_calendar::pairing_aggregates(pairing) is true
for the pairings whose script bars are buckets gathered from the input
(SameUnitMultiple, FixedDivisible, FixedToCalendar, CalendarToCalendar),
NativeExecutionConsumer::aggregates_input() reads the run's resolved
pairing, and NativeStrategyHost::native_aggregates_input_bars() is the host
query (false with no configured spec). The host's one reader, the aggregated
re-dating in on_native_applied, and the lookup index's cached fact read it;
the literal copy is deleted. The C COVERAGE block lists the query as
C++-only: its one reader is the Pine host.

ADR-0001 rule 2 ruling: (a) mechanism -- a query of the pairing the run
already resolved, with no platform word; (b) knob -- none, it reads the spec
and decides nothing.

tests/test_aggregates_input_bars_literals.cpp judges the kernel's answer
against the deleted copy over every admitted pair of a literal population:
they agree but on two counted classes (byte-identical monthly literals, and
one-bucket pairings such as 1D on D), where the kernel's answer is the one a
chart-timeframe run and TradingView date rows by. The corpus and every
witness print the same bytes. The kernel residual gate reads 0 findings.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
(cherry picked from commit 3baaf78e283a6c6078aeaa85481a4f45dbba5f7a)
…red kQtyEpsilon / kFullPercentEps (R5 lane H-THIN, A4-DUST)

compute_exit_reservation and reconcile_deferred_exit_reservations each kept a local copy of internal::kQtyEpsilon (1e-10) and internal::kFullPercentEps (1e-9), and enqueue_pooc_fifo_close a third (epsilon = 1e-10). The values are equal, so the fold is byte-identical by construction; the three seeded A4-DUST witness families (5,500 runs) print the same bytes before and after.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
(cherry picked from commit ee02d451a96477e19d98c20992c35ac1ce111ab2)
…-THIN

Design §3.9 records the lane: X15 item by item (a, d, e, f gone; b and c kept as measured rows), AUDIT4 §6 re-derived, the quantity-epsilon census of the Pine host and adapter, the size against the owner's ruling, and two findings. Rows MG3, MG7, MG8, RP1, AG1/AG2 and the excursion projection gate say what moved; the ADR's seam, margin and dust bullets, its max_open_lots and quantity_tolerance rulings and a Wave H rule-2 table (the civil-date helper and the aggregation predicate) follow; native-settlement, abi-stability (the H-THIN hash step), native-engine (the new host query), pine-to-native and contributing-llm (the pyramiding lowering trial) likewise. Every anchor re-anchored onto this tree (1678/1678); the hash-pinned citations that named code E19 deleted, or that were pinned to the wrong window on the base tree, now name their symbol.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
(cherry picked from commit 465fe607e7bb66717ac274f8bc0edd0593f6bbfb)

INT26 pick note: the lane wrote these pages on main 0d76a09; here they merge
with the wave-H pages picked before them. Anchor digits merged by carrying
this branch's numbers through the lane's line moves. Where H-DOCGATES had
already turned a content pin into a symbol citation, the citation stays and
the lane's text beside it lands (the pyramiding row, the design page's E1-E9,
P8 and j rows, the ADR's pre-open admission paragraph); where the lane cites
a symbol for a pin this branch had re-anchored by line (the P6 decision's
`set_pine_risk_*` setters), the lane's symbol stands. Two sentences both
sides rewrote are merged to be true of the merged tree:
- design E2: its excursion sample "differed by chronology (the Pine host's
  own excursion model, retired by R5 lane H-THIN ...)": the citation this
  branch had given it, `margin_call_sample_bar`, left with that model.
- ADR-0001, the pre-open slice: it parted from the kernel's point on the
  one-contract band and the +1e-6 floor until H-THIN's shared rule, and on
  the frozen units until PAR-MARGIN's freeze (whose tape evidence stays);
  with both it books the kernel's units -- the M10 frozen case of
  tests/test_adapter_margin_schedule_differential.cpp, as merged at the X15 d
  pick. The lane's "parts on the frozen units alone (4 lots on the frozen 19
  ...)" was true of its own tree, not this one.

The sentences it retires or rewrites, and who wrote them: ADR-0001's two on
the Pine host's own per-lot MFE/MAE and its ab9714b retention (H-MEASURE's
excursion measurements, 37090e1, picked from fd3c72e) and its sentence on
the pre-open admission slice, now extended (H-MEASURE's margin measurements,
bc866e5, picked from bafefba); the design page's RE1 sentence on the
adapter's owner hook and its row's "retained: it is the host's excursion
contract" (the range-end ruling, b16e11f, lane Q6 02ed0fe); and
contributing-llm.md's "The adapter keeps its count pending a re-lowering
ruling." (H-MEASURE's pyramiding tapes, e1d0fa3, picked from 99d3b95).
…H-MEASURE rows R5 lane H-THIN carries

The eight source-bound rows of lane H-MEASURE's three measurement commits (picked onto INT25) register in release, debug, sanitizers and native; counted with ctest -N on the lane's tree against its base 0d76a09 (release 659 -> 667 in the lane's own configuration, debug 659 -> 667, native +8). No kernel-profile row is added (270 on both trees), so KERNEL_MIN_TESTS stays 277. The two pages that cite RELEASE_MIN_TESTS by line follow it, and test_ci_verify's pin of the excluded floors is corrected with them.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
(cherry picked from commit 09f0bbdad145bf23a83732ebdcdbb0ef535051af)

INT26 pick note: empty here. The eight rows this commit counts are
H-MEASURE's, which H-THIN had cherry-picked (a27c6a2c, 6a89ddfc, cf908f75,
skipped here) and which the floors already count since pick 1; H-THIN adds no
CTest row of its own. ctest -N on this tree under ci_verify's own argv per
profile (INT26-scratch/ctestN/hthin-*.txt) gives release 701, kernel 287
registered / 286 run, debug and sanitizers 682, native 691 -- the floors as
they stand -- so this branch's floors, their citations and test_ci_verify's
pin are unchanged. The commit is kept, empty, so the pick history lists
every commit the late-picks list names.
… table; the host writes no excursion

H-THIN was written on main 0d76a09, before H-DOCGATES' "1.0 C boundary"
table and its kernel-member inventory; the late-picks list asks for its
kernel additions to be recorded there.
- docs/pages/native-engine.md, the 1.0 C boundary table: a row for
  `NativeStrategyHost::native_aggregates_input_bars()` (C++ only; its reason
  is the one the header's COVERAGE `[--]` row gives, which is its checker
  row), and the library row names the civil-date pair `native_civil_date` /
  `native_civil_days` and `pairing_aggregates` among `native_calendar.hpp`'s
  utilities.
- scripts/check_native_c_api_surface.py: `C_V1_EXCLUSIONS["library_facilities"]`
  also refuses a C declaration spelled after those three, so the row fails
  when a C spelling appears, as the table says every such row does.
- docs/adr/0001-kernel-adapter-boundary.md, the row "fields of the kernel's
  rows the Pine host amends": since H-THIN's E19 the Pine host writes no
  excursion (`sample_open_trade_extremes` and `replace_masked_entry_bar_extremes`
  are gone and the kernel's sampler books every Pine lot's), so
  `PyramidEntry::max_runup` / `max_drawdown` leave its list and the sentence
  that said the host samples them is replaced by what the code does. That
  sentence was H-DOCGATES' (c5c611a, picked from its seam-row commit).

check_native_c_api_surface.py passes (21 boundary rows, each pinned and in
the table) and its self-test 29/29; check_kernel_seam_rows.py 42 members, 0
without a row.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
…er a cash commission sizes from strategy.equity and leaves out its own order's fee

Root cause. PineExecutionAdapter::default_sizing_cash took the percentage of
percent_commission_live_equity(), which adds the adapter's open_entry_fees_
ledger (the open entries' cash-per-order / cash-per-contract fees) back onto
the kernel's marked equity; the only fee the kernel reserves out of the money
is a PERCENT commission (native_order::Sized::reserve_percent_fee). So under
a cash commission every default percent-of-equity quantity was sized from an
equity with the open cash fees restored and with no fee kept for its own
order.

TradingView's rule, on thirteen `lab tv` tapes (tests/fixtures/cash_fee_sizing,
ws-report-v1, rangeProof covered; twelve new -- 50, 100 and 200 %, long and
short, flat, pyramided, after a partial close, reversing, limit, stop and
strategy.order, BINANCE:ETHUSDT.P and CME_MINI:ES1! at point value 50, margin
25 and 100 -- plus lane H-THIN's FIFO fee-basis tape):
  cash per order     units = floor((pct * E - fee) / (price * pointvalue))
  cash per contract  units = floor(pct * E / (price * pointvalue + fee))
with E = strategy.equity at the sizing mark (every open entry's pro-rata fee
charged) and price = the signal close (market entry, strategy.order) or the
level (limit, stop); a reversal keeps one fee for its one order. The rule
fits 60 of 60 sized entries per order, 54 of 54 per contract, and all 366
trades of corpus order-percent-equity-cash-commission-01; the restored basis
fits only the flat entries, no reserve none.

The change (adapter policy): PineSizingSnapshot::strategy_equity records
strategy.equity at the mark (mark_sizing_equity, only when
default_sizing_reserves_cash_fee(): a percent-of-equity default quantity, a
cash-per-order or cash-per-contract commission, a positive value), and
default_sizing_cash hands the kernel's CashValue the percentage of it less
the per-order fee, or scaled by unit / (unit + fee) per contract. The money
gates and the margin money keep the restored equity; a per-call qty_type
(PineForge-only, TradingView refuses it) keeps its conversion. The new field
folds into pineforge-source-adapter/v4 only where it is recorded.

Tests. New row test_cash_fee_sizing_tapes replays every tape's script
through the Pine adapter on its bars: fail-before on base 09f0bbda (its
headers and library) 0 of 111 trades booked as TradingView books them, 134
of 174 checks failing, first "pcf-order-p50-m25 #1 A1 26.5953 vs the tape's
26.0634"; after, 111 of 111 (ids, sides, times, prices, quantities exact,
commission to 1e-9, net profit to 1e-7 of |profit| + |commission|). The two
margin-100 tapes are a recorded divergence: TradingView margin-calls a
default 100 % entry on its entry bar once the order's cash fee takes the
equity under the position, the adapter's margin equity restores that fee;
the quantities sized agree, the adapter's rows are pinned.
test_l4b_policy_regressions pinned the old rule: expectation corrected 20.0
-> 19.79 (9.9 + 9.89), row renamed.

Hash step -- every value that moves, harvested with each TU's own switch on
this tree; the same harvest on base 09f0bbda reproduces every old value:
  tests/test_adapter_quiet_bar_pinned.inc: 80 values over 24 rows (boundary
    24, rows 12, trades 22, final_hash 22; no count), the battery's six
    random scenarios with a percent-of-equity default quantity and a
    cash-per-order fee (Random05, 06, 20, 35, 38, 46).
  tests/test_publication_witness_pinned.inc: 34 of 156 digests -- exactly
    the Config runs whose configuration sweep passes through a
    percent-of-equity default quantity with a positive cash fee (census by
    an instrumented copy of the TU) -- six of them closing a different
    number of trades (Config03 50 -> 48, Config03M 48 -> 44, ConfigFlags103
    65 -> 63, ConfigFlags103M 66 -> 65, ConfigFlags104 and ConfigFlags104M
    12 -> 13); folds and recorded rows unchanged.
  scripts/corpus_parity_baseline.txt: order-percent-equity-cash-commission-01
    7c8f19ad -> 44ad17ec, toward TradingView (quantities inside its 0.0001
    cell 0 -> 355 of 366, the rest 1e-7 to 3e-6 under it through the corpus
    harness's gridless equity; largest |dqty| 0.00106 -> 0.0000985; 90th
    percentile |d net profit| 0.029 -> 0.0023; 366 of 366 quantities and net
    profits closer). It is the corpus's only probe with a percent-of-equity
    default quantity and a cash commission.
The other witness tables (report_relower, recording_hash_witness,
continuation_view, receipts_in_place, command_allocations,
lookup_index_witness, host_view_memo, live_state_equivalence) pass unchanged
on this tree.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
(cherry picked from commit 214c082c8d6ceaf36e26f5377b0061ed3842d45f)

INT26 pick note (late pick, accepted 2026-09-26 14:10, after H-THIN as the list
says): every source, header and test-code hunk applied unchanged. Its hash
values fold into the single INT26 v19 hash re-pin, so the quiet-bar and
publication tables keep this branch's hash values here; the behaviour it moves
is pinned here, harvested on this tree with each TU's own switch: the trade
digests of quiet-bar Random05/0/*, Random06, Random20, Random35, Random38 and
Random46 (the scenarios with a percent-of-equity quantity under a cash fee;
Random05/0/* had been moved by an earlier pick too, so it takes this tree's
own value) and the closed trades of five publication runs (ConfigFlags103 65
-> 63, Config03M 48 -> 44, ConfigFlags103M 66 -> 65, ConfigFlags104 and
ConfigFlags104M 12 -> 13), each equal to the lane's; the lane's Config03 50 ->
48 was already pinned with PAR-MARGIN-2. No other pinned behaviour moves. The
publication test's provenance keeps both lanes' paragraphs. The corpus line
for order-percent-equity-cash-commission-01 is the lane's, re-derived once
after every pick (CORPUS4, applied after this pick, stays last).
…ane PAR-CASHFEE

docs/design/native-feature-parity.md gets §3.10: TradingView's rule (per
order and per contract, strategy.equity with the open entries' cash fees
charged, the order's own fee left out, the level for a priced entry), the
thirteen tapes with the entries the rule fits, the adapter change, the
replay, the corpus probe's move toward its tape, the hash step, and two
findings recorded and not changed: TradingView margin-calls a default 100 %
entry on its entry bar at margin 100 once its cash fee takes the equity under
the position (the adapter's margin equity restores that fee), and the FX case
is unmeasured. The SZ5 row names the cash-fee reserve as adapter policy, the
X15 b row says who still reads the restored equity, and H-THIN's finding 1
points at the fix. docs/pine-adapter-kernel-notes.md §5.2 keeps the retired
kernel block verbatim and marks its "cash commissions reserve nothing" claim
corrected.

Anchors: the lane's source edits moved lines in pine_adapter.cpp,
pine_adapter.hpp and pine_state_hash.cpp; every anchor citing them is carried
through an exact difflib line map from 09f0bbda (182 moved, digits only, in
the design doc, ADR-0001 and native-engine.md), and the two on the SZ5 row the
lane rewrote are mapped the same way by hand. check_doc_anchors: every anchor
resolves to its symbol; check_doc_lint: clean.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
(cherry picked from commit 6bae784e66e6e6426fc461e4bc1a86911d2e3000)

INT26 pick note: the docs merged on anchor digits only (they re-anchor once, in
INT26 (vii)).
…ane PAR-CASHFEE's row

test_cash_fee_sizing_tapes is source-bound: it registers in release, debug,
sanitizers and native and not in the kernel profile. Counted with ctest -N
on the lane's tree against its base 09f0bbda in the same configuration: 667
-> 668, and 251 -> 251 with PINEFORGE_BUILD_SOURCE_LAYER=OFF, so
KERNEL_MIN_TESTS stays 277. RELEASE_MIN_TESTS 686 -> 687,
EXCLUDED_REGISTERED_MIN debug/sanitizers 667 -> 668 and native 676 -> 677;
test_ci_verify's pin of the excluded floors follows with an expectation
correction, and the two pages that cite RELEASE_MIN_TESTS by line
(CONTRIBUTING.md, docs/pages/contributing-llm.md) follow it to
ci_verify.py:365.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
(cherry picked from commit b44b10b4c634a29f89eceb459bc749bb8f669df7)

INT26 pick note: the floors take this lane's one source-bound row on top of the
integrated counts -- RELEASE 701 -> 702, EXCLUDED_REGISTERED_MIN 682/682/691 ->
683/683/692, KERNEL 286 unchanged -- recounted with ctest -N under ci_verify's
own argv per profile on this tree (INT26-scratch/ctestN/pcf-*.txt: release
702, kernel 287 registered, debug 683, sanitizers 683, native 692; the one new
name is test_cash_fee_sizing_tapes). Each floor comment lists it with wave H's
other rows; test_ci_verify's pin, docs/ci.md's floor sentence and the four
floor citations follow.
…d2e2 (lane CORPUS4)

pineforge-corpus a7ad2e2 re-derives every generated.cpp in the corpus with
pineforge-codegen-oss a4259656, the codegen 1.0 line: #140 (b0ed4967), #141
(696fa25f) and #142 (a4259656) on f3285d79. It is branch
regen/codegen-a425965, one commit on bcfb0d6, which is corpus main, f989e36
plus #16.
- The 314 validation/ and draft-probes/ TUs go through
  scripts/regen_corpus_cpp.sh.
- The 11 nested special-validation/ and validation/symbol-specified/ TUs,
  which its corpus/*/*/ glob does not reach, go through the same image,
  checkout and transpile call.
Engine and codegen ship 1.0.0 together, so the corpus this engine pins is
now emitted by the codegen that ships.

92 of the 325 TUs change, +920/-373 lines, and no other corpus file moves:
- 83 of the 312 validation probes;
- both draft-probes;
- 2 of the 6 special-validation probes;
- all 5 symbol-specified probes. They were stale since 2026-06-10, in the
  old BacktestEngine-based shape that no longer compiled.

Every change is attributed by re-transpiling all 325 sources at each codegen
commit that touches pineforge_codegen/:
- #140's 4a31a3b6, 66 TUs: na truthiness at boolean boundaries, and
  na-preserving int conversions at call arguments.
- #140's 79584d99, 39 TUs: na-preserving history offsets, and history
  references typed by their series.
- #140's 51bbdcda, 2 TUs: the Keltner EMA warmup.
- #140's e19ce6db, 2 TUs: a user type named Box is emitted as pf_safe_Box.
- #142's session.ismarket calendar lowering, 5 TUs.
- #141 changes none.

The pins that name that (corpus, codegen) pair move together:

- The corpus gitlink moves f989e36 -> a7ad2e2.
- The `# corpus` header of scripts/corpus_parity_baseline.txt is
  re-recorded with `corpus_trades_identity.py --update`. That ran over this
  engine's 312 trade lists, re-run from the new TUs with the gate's
  per-probe run_strategy.py command on macOS arm64. The checker refused on
  that header first, as it must.
  - The baseline diff is that one line. All 312 sha256 rows are unchanged,
    so every engine trade list is byte-identical under the re-emitted TUs,
    including the 83 whose TU changed.
  - The verifier grades exactly those lists against unchanged TradingView
    tapes, so every probe keeps its tier.
- The paired-codegen pin moves f3285d7 -> a4259656: CODEGEN_COMMIT in
  scripts/regen_corpus_cpp.sh and its source check
  scripts/test_regen_corpus_cpp_pin.py.
  - `VERIFY=1 scripts/regen_corpus_cpp.sh` at a4259656 over this corpus:
    314 verified, 0 drifted.
  - At f3285d7 over f989e36: 314 verified, 0 drifted.

These four lines were every citation of f989e36 or f3285d7 in the tree.
Each is a pin statement; no historical record cites either.

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/corpus4 (migration 0048) re-pins that
side. The corpus PR, this commit and that branch land together.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
(cherry picked from commit 3d59fad496b27cc4dfb8659f521a768fa2ff1dcd)
…ived for the a4259656 TUs (lane CORPUS4)

pineforge-corpus b40aa8e is a7ad2e2 plus one commit. That commit re-derives
owned_strategies.json, whose generated_cpp_sha256 the regeneration had left
matching 32 of its 60 owned probes. The re-derivation uses the generator
and method of corpus f989e36.
- 28 digests are rewritten, so all 60 match their TUs again.
- validation_run names this branch's previous commit, 3d59fad4: its full
  parity sweep at a7ad2e2 with codegen a4259656. That commit stays in the
  history because the manifest cites it.
- native_validation, tier_distribution and every other digest re-derive
  unchanged.
b40aa8e keeps a7ad2e2's validation/, data/, draft-probes/ and
special-validation/ trees byte-for-byte.

Two pins move:

- The corpus gitlink moves a7ad2e2 -> b40aa8e.
- The `# corpus` header of scripts/corpus_parity_baseline.txt is
  re-recorded with `corpus_trades_identity.py --update`. That ran over the
  312 trade lists this engine re-derives at b40aa8e, after the checker
  refused on that header. The baseline diff is that one line: all 312
  sha256 rows are unchanged.

CODEGEN_COMMIT in scripts/regen_corpus_cpp.sh and its source check stay at
a4259656: that codegen still reproduces every TU of b40aa8e.

The companion pineforge-workflow branch r5/corpus4 (migration 0048) registers
b40aa8e's bundle. The corpus PR, this branch and that migration land
together.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
(cherry picked from commit cb1bbf3c0323fd492a157a2dfe335ba6d28203e2)
The late picks change behaviour a user can see; the entry says so, one
sentence a user can act on per change, naming no lane.
- What a native host must handle: a current execution refuses a request
  bound to a host roster (`UnsupportedRequest`, C 5) where it used to fail the
  run; the post-fill margin check measures the fill's own segment; two C++
  calendar queries (`native_aggregates_input_bars()`,
  `native_civil_date` / `native_civil_days`), C++ only.
- Behaviour: the margin bullet now covers the post-fill waypoint, adds and
  `process_orders_on_close` / `calc_on_order_fills` openings, the gap-open
  slice's shared sizing, the magnifier's long and short cases and a margin
  call's nearest-tick fill; a recalculation's market order or strategy.close
  at a bar's second extreme; a `process_orders_on_close` stop entry placed
  while the position still holds the other side; the kernel sampler's
  excursions for Pine strategies (19 corpus probes, 335 trades: 324 now equal
  TradingView's, 11 closer -- the corpus re-derived once at b40aa8e on the
  final tree moves no baseline line, so the probes' trades are byte for byte
  the ones those counts were taken on); a FIFO strategy.exit's own-entry
  reservation; `strategy.margin_liquidation_price` reading na with margin
  calls off; a percent-of-equity quantity under a cash commission sized as
  TradingView sizes it (order-percent-equity-cash-commission-01: 355 of 366
  quantities within TradingView's 0.0001 cell, none before).
The sentences it rewrites (the margin bullet, the process_orders_on_close
bullet's last clause and its corpus-probe sentence) were INT26 (ii)'s own
(8986620).

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
The one commit of INT26 that moves pinned hash values. Every late pick's own
hash re-pin (PAR-ORDERS-2 9f7a025c, PAR-MARGIN-2 8876c108, H-THIN's hash step
ab297364, PAR-CASHFEE's hash step 214c082c) folds into it, as the late-picks list rules; the behaviour those
re-pins carried (trades, counts, transcript digests) landed with the picks
that move it, so this commit moves hash values alone. Nothing here is an
epoch change: v19 is unreleased.

How: on the integrated tree each pinned TU is compiled with its own harvest
switch (PINEFORGE_R1_HARVEST, PINEFORGE_F9_HARVEST, PINEFORGE_P1_HARVEST,
PINEFORGE_P4_HARVEST, PINEFORGE_QUIET_BAR_HARVEST, PINEFORGE_L5_HARVEST,
PINEFORGE_P7_HARVEST, PF_HOST_VIEW_MEMO_DUMP, PINEFORGE_D2D_PUBLICATION_HARVEST,
PINEFORGE_K1_HARVEST, PINEFORGE_V19E_HARVEST) and the re-pin tool
(INT26-scratch/tools/repin_int26.py: INT25's repin_int25.py, which is V19-FIX's,
plus the publication witness and the live-state transcripts) rewrites each
moved hash value under an appended note. The tool refuses any non-hash
change: a moved trade, count, trade digest, fingerprint field, publication
fold/trade/row count or live-state transcript is a STOP (mutation runs: a
quiet-bar trade count, a quiet-bar trade digest, a publication trade count, a
host-view fingerprint's trades and a live-state transcript each stop it).
After the write the same harvest reproduces every pin (0 moved) and every
witness row passes.

Which pick moved each value: the eleven witnesses were harvested at every
pick boundary (B0 = PAR-ORDERS' re-pin 1518fa8f, whose pins every later pick
kept; then PAR-ORDERS-2, PAR-MARGIN, PAR-MARGIN-2, the CI/INT26/PERF-KEDGE/
CI-RUNNER stretch, H-THIN X15 a+e, H-THIN's hash step, X15 d, X15 f, A4-DUST,
H-THIN's docs and floors, PAR-CASHFEE's hash step, and the final tree), and each moved value is marked with the transitions where
it changed. B0's harvest reproduces B0's pins; every non-hash value at the final
tree equals its pin.

| witness | hash values moved | by pick |
|---|---:|---|
| test_adapter_report_relower | 72 of 72 | H-THIN 72 |
| test_adapter_recording_hash_witness | 267 of 267 | H-THIN 267 |
| test_adapter_continuation_view | 169 of 227 | H-THIN 168; PAR-ORDERS-2 + H-THIN 1 |
| test_adapter_receipts_in_place | 334 of 334 | H-THIN 334 |
| test_adapter_quiet_bar | 680 of 816 | H-THIN 553; PAR-ORDERS-2 + H-THIN 69; H-THIN + PAR-CASHFEE 50; PAR-ORDERS-2 + H-THIN + PAR-CASHFEE 8 |
| test_adapter_command_allocations | 32 of 32 | H-THIN 32 |
| test_adapter_lookup_index_witness | 948 of 948 | H-THIN 948 |
| test_adapter_host_view_memo | 13 of 13 | H-THIN 13 |
| test_publication_witness | 156 of 156 | H-THIN 98; H-THIN + PAR-CASHFEE 29; PAR-ORDERS-2 + H-THIN 24; PAR-ORDERS-2 + H-THIN + PAR-CASHFEE 4; PAR-MARGIN-2 + H-THIN + PAR-CASHFEE 1 |
| test_native_calendar_hash_witness | 0 of 12 | -- |
| test_adapter_live_state_equivalence | 0 of 0 | -- |

2671 values in all. Why they move:
- H-THIN's hash step (E19, P10): the Pine host keeps the kernel's
  owns_lot_excursions() default, so the retired host excursion model's state
  leaves the source-layer fold (pineforge-source-adapter/v4) and every
  source-layer hash value moves; P10 moves the placement of FIFO exits.
- PAR-ORDERS-2: the adapter's transient coof_fill_forced_ is folded while a
  recalculation runs.
- PAR-MARGIN-2: the kernel's post-fill margin point measures from the fill's
  own waypoint, which moves publication Config03's recorded path (its trades
  moved with that pick: 50 -> 48).
- PAR-CASHFEE: the fold folds the sizing snapshot's strategy.equity wherever a
  percent-of-equity quantity under a cash fee is recorded (quiet-bar's six
  cash-fee scenarios, 34 publication runs; their trades moved with that pick).
No other pick moves a hash value (PAR-MARGIN, CI-FLAKE, the INT26 items,
PERF-KEDGE, CI-RUNNER, H-THIN X15 a/e/d/f and A4-DUST, CORPUS4: 0 each).

The Pine witness (PERF0-K's wah replay, spark GCC 13.3 aarch64, release and
stress builds): main 0d76a099 14010942914806881059 -> this tree
8577114281377521372, release and stress agreeing -- H-THIN's hash step alone
moves it (the lane measured the same pair); PAR-ORDERS-2's fold does not run
in it and PAR-CASHFEE leaves it unchanged (8577114281377521372 before and after
its picks).

Moved (old -> new [pick]; each pinned file carries the same list):
test_adapter_report_relower: 72 lines
    kOrdinary_hashes[0]: 10420073189004151623ull -> 243601838968427296ull [H-THIN]
    kOrdinary_hashes[1]: 13145042526267837939ull -> 14082045497352522076ull [H-THIN]
    kOrdinary_hashes[2]: 2622782777793463991ull -> 16788444728701273278ull [H-THIN]
    kOrdinary_hashes[3]: 17996446729054892726ull -> 4735244315032400709ull [H-THIN]
    kOrdinary_hashes[4]: 3969181056128787992ull -> 9274703563551556229ull [H-THIN]
    kOrdinary_hashes[5]: 16947117433974038ull -> 4437548837203718331ull [H-THIN]
    kOrdinary_hashes[6]: 423735939073054907ull -> 9447280110204500336ull [H-THIN]
    kOrdinary_hashes[7]: 18056612604689961163ull -> 644150700710845644ull [H-THIN]
    kOrdinary_hashes[8]: 12445011709498043361ull -> 12856503234686701952ull [H-THIN]
    kOrdinary_hashes[9]: 16382730376298748267ull -> 8228843622305023308ull [H-THIN]
    kOrdinary_hashes[10]: 12718112296054108390ull -> 11723584407685805665ull [H-THIN]
    kOrdinary_hashes[11]: 913929622865489206ull -> 12427688725613086017ull [H-THIN]
    kOrdinary_hashes[12]: 13218761675008378229ull -> 5717024028566739016ull [H-THIN]
    kOrdinary_hashes[13]: 10388057217060506235ull -> 9136288938210272546ull [H-THIN]
    kOrdinary_hashes[14]: 4373273430774112306ull -> 14265105010801500849ull [H-THIN]
    kOrdinary_hashes[15]: 11946915320520331422ull -> 5913118032193444201ull [H-THIN]
    kOrdinary_hashes[16]: 2472677882334572745ull -> 2601700310587933770ull [H-THIN]
    kOrdinary_hashes[17]: 4709222664471492344ull -> 16710877784426826175ull [H-THIN]
    kOrdinary_hashes[18]: 5785035152764109816ull -> 12222101465241554407ull [H-THIN]
    kOrdinary_hashes[19]: 15834701310167426825ull -> 1466897115669479138ull [H-THIN]
    kOrdinary_hashes[20]: 18416054639860847807ull -> 8818039625616895170ull [H-THIN]
    kOrdinary_hashes[21]: 9654818568811123148ull -> 17382764399684682567ull [H-THIN]
    kOrdinary_hashes[22]: 7514399512975361670ull -> 5569220102658162789ull [H-THIN]
    kOrdinary_hashes[23]: 375912627396258150ull -> 5858716210019128261ull [H-THIN]
    kCalcOnOrderFills_hashes[0]: 13492117694829868536ull -> 8076983691197291309ull [H-THIN]
    kCalcOnOrderFills_hashes[1]: 12939649384498536620ull -> 2440556825337174781ull [H-THIN]
    kCalcOnOrderFills_hashes[2]: 18283200234405460746ull -> 17660598049729719549ull [H-THIN]
    kCalcOnOrderFills_hashes[3]: 17715026773738590286ull -> 584654546328644269ull [H-THIN]
    kCalcOnOrderFills_hashes[4]: 16652393141204816958ull -> 10522330026569309375ull [H-THIN]
    kCalcOnOrderFills_hashes[5]: 10681558687161056850ull -> 2930399316675077519ull [H-THIN]
    kCalcOnOrderFills_hashes[6]: 12828138156283959725ull -> 17808710347154107934ull [H-THIN]
    kCalcOnOrderFills_hashes[7]: 13337213902076129151ull -> 6715617711192628536ull [H-THIN]
    kCalcOnOrderFills_hashes[8]: 2897666538282385134ull -> 6587502700890907205ull [H-THIN]
    kCalcOnOrderFills_hashes[9]: 4846519892874967202ull -> 2192689119498288561ull [H-THIN]
    kCalcOnOrderFills_hashes[10]: 4182996206551988888ull -> 8664008431780515081ull [H-THIN]
    kCalcOnOrderFills_hashes[11]: 3828630408241748525ull -> 7930584285132978374ull [H-THIN]
    kCalcOnOrderFills_hashes[12]: 6013095397646776827ull -> 17064940335416518660ull [H-THIN]
    kCalcOnOrderFills_hashes[13]: 1201561623500117444ull -> 9016627554631535731ull [H-THIN]
    kCalcOnOrderFills_hashes[14]: 16339691134963647305ull -> 16088314143365594964ull [H-THIN]
    kCalcOnOrderFills_hashes[15]: 1360168785605943262ull -> 13783309705914047335ull [H-THIN]
    kCalcOnOrderFills_hashes[16]: 10446097969456318121ull -> 9827199985728418388ull [H-THIN]
    kCalcOnOrderFills_hashes[17]: 2226082304527453549ull -> 16177976828038662588ull [H-THIN]
    kCalcOnOrderFills_hashes[18]: 5506525745160110349ull -> 12444021166412526756ull [H-THIN]
    kCalcOnOrderFills_hashes[19]: 16314828352609565244ull -> 12728919766761920669ull [H-THIN]
    kCalcOnOrderFills_hashes[20]: 14800719633294876469ull -> 17328862593452428978ull [H-THIN]
    kCalcOnOrderFills_hashes[21]: 1572183010617309931ull -> 565050300121405896ull [H-THIN]
    kCalcOnOrderFills_hashes[22]: 6980933373957006777ull -> 12671085486866481742ull [H-THIN]
    kCalcOnOrderFills_hashes[23]: 3071340150260882121ull -> 9604569239120914630ull [H-THIN]
    kSuppressedTail_hashes[0]: 10420073189004151623ull -> 243601838968427296ull [H-THIN]
    kSuppressedTail_hashes[1]: 13145042526267837939ull -> 14082045497352522076ull [H-THIN]
    kSuppressedTail_hashes[2]: 2622782777793463991ull -> 16788444728701273278ull [H-THIN]
    kSuppressedTail_hashes[3]: 17996446729054892726ull -> 4735244315032400709ull [H-THIN]
    kSuppressedTail_hashes[4]: 3969181056128787992ull -> 9274703563551556229ull [H-THIN]
    kSuppressedTail_hashes[5]: 16947117433974038ull -> 4437548837203718331ull [H-THIN]
    kSuppressedTail_hashes[6]: 423735939073054907ull -> 9447280110204500336ull [H-THIN]
    kSuppressedTail_hashes[7]: 18056612604689961163ull -> 644150700710845644ull [H-THIN]
    kSuppressedTail_hashes[8]: 12445011709498043361ull -> 12856503234686701952ull [H-THIN]
    kSuppressedTail_hashes[9]: 16382730376298748267ull -> 8228843622305023308ull [H-THIN]
    kSuppressedTail_hashes[10]: 12718112296054108390ull -> 11723584407685805665ull [H-THIN]
    kSuppressedTail_hashes[11]: 913929622865489206ull -> 12427688725613086017ull [H-THIN]
    kSuppressedTail_hashes[12]: 13218761675008378229ull -> 5717024028566739016ull [H-THIN]
    kSuppressedTail_hashes[13]: 10388057217060506235ull -> 9136288938210272546ull [H-THIN]
    kSuppressedTail_hashes[14]: 4373273430774112306ull -> 14265105010801500849ull [H-THIN]
    kSuppressedTail_hashes[15]: 11946915320520331422ull -> 5913118032193444201ull [H-THIN]
    kSuppressedTail_hashes[16]: 2472677882334572745ull -> 2601700310587933770ull [H-THIN]
    kSuppressedTail_hashes[17]: 4709222664471492344ull -> 16710877784426826175ull [H-THIN]
    kSuppressedTail_hashes[18]: 5785035152764109816ull -> 12222101465241554407ull [H-THIN]
    kSuppressedTail_hashes[19]: 15834701310167426825ull -> 1466897115669479138ull [H-THIN]
    kSuppressedTail_hashes[20]: 18416054639860847807ull -> 8818039625616895170ull [H-THIN]
    kSuppressedTail_hashes[21]: 9654818568811123148ull -> 17382764399684682567ull [H-THIN]
    kSuppressedTail_hashes[22]: 7514399512975361670ull -> 5569220102658162789ull [H-THIN]
    kSuppressedTail_hashes[23]: 7096719386424781198ull -> 8558103254181104877ull [H-THIN]
test_adapter_recording_hash_witness: 267 lines
    kSubmit_rows[0]: 8933562200260968840ull -> 8019365971493599225ull [H-THIN]
    kSubmit_rows[1]: 16496088491414191334ull -> 12084928604454138979ull [H-THIN]
    kSubmit_rows[2]: 17745030456223078154ull -> 7685642069387429171ull [H-THIN]
    kSubmit_rows[3]: 15976454321452418827ull -> 3048458165749351592ull [H-THIN]
    kSubmit_rows[4]: 13867778238676275167ull -> 1016691552216785494ull [H-THIN]
    kSubmit_rows[5]: 10620212436062486555ull -> 13664491885780078814ull [H-THIN]
    kSubmit_rows[6]: 16387014991078439144ull -> 9587023827432894395ull [H-THIN]
    kSubmit_rows[7]: 5372310558802353946ull -> 14524900109868328621ull [H-THIN]
    kSubmit_rows[8]: 8117928017652874474ull -> 9306730010360799799ull [H-THIN]
    kSubmit_rows[9]: 12227480580368604280ull -> 10975560481515534245ull [H-THIN]
    kSubmit_rows[10]: 11671431865371234655ull -> 6175700847996002068ull [H-THIN]
    kSubmit_rows[11]: 15852753888607827401ull -> 17944617882018938484ull [H-THIN]
    kSubmit_rows[12]: 4564599765874863441ull -> 89066156438191170ull [H-THIN]
    kSubmit_rows[13]: 12753515022268993432ull -> 7853223159133263199ull [H-THIN]
    kSubmit_rows[14]: 16693007526387479527ull -> 16829337964629633742ull [H-THIN]
    kSubmit_rows[15]: 9553609781489681132ull -> 14048972284943154657ull [H-THIN]
    kSubmit_rows[16]: 9723295982254899748ull -> 10772403295793355383ull [H-THIN]
    kSubmit_rows[17]: 9596448656160987273ull -> 12849842554292919416ull [H-THIN]
    kSubmit_rows[18]: 14172117111020274407ull -> 11523841829240280476ull [H-THIN]
    kSubmit_rows[19]: 1811404642983946404ull -> 14633701048963800807ull [H-THIN]
    kSubmit_rows[20]: 6600438489637577460ull -> 13106625599621486697ull [H-THIN]
    kSubmit_rows[21]: 1823325663201613856ull -> 11578248645351712284ull [H-THIN]
    kSubmit_rows[22]: 671600216917334430ull -> 12923518206466935124ull [H-THIN]
    kSubmit_rows[23]: 14450998569007950837ull -> 11664001542269768811ull [H-THIN]
    kSubmit_rows[24]: 18123601071981623076ull -> 4353270054101958588ull [H-THIN]
    kSubmit_rows[25]: 5788029478896071429ull -> 12509431446261158271ull [H-THIN]
    kSubmit_rows[26]: 5791781074908951980ull -> 6827814975693211880ull [H-THIN]
    kSubmit_rows[27]: 8180458203668078357ull -> 13768158546548443068ull [H-THIN]
    kSubmit_rows[28]: 10842259428116090863ull -> 6634357882333049268ull [H-THIN]
    kSubmit_rows[29]: 7789401651194802796ull -> 8521102792149394239ull [H-THIN]
    kSubmit_rows[30]: 16644199069697802031ull -> 15674750399051881772ull [H-THIN]
    kSubmit_rows[31]: 13033963886965614456ull -> 7695240294002266835ull [H-THIN]
    kSubmit_reads[0]: 5783964658104710927ull -> 18234150623076098218ull [H-THIN]
    kSubmit_reads[1]: 9790324176931117308ull -> 7528636846310271579ull [H-THIN]
    kSubmit_reads[2]: 8640216615515382983ull -> 6832312803948695488ull [H-THIN]
    kSubmit_reads[3]: 18016456059351763749ull -> 11582188679677093386ull [H-THIN]
    kSubmit_reads[4]: 6161691521401770042ull -> 13475769493769981375ull [H-THIN]
    kSubmit_reads[5]: 11652988695302303084ull -> 10681991124354674742ull [H-THIN]
    kSubmit_final[0]: 13033963886965614456ull -> 7695240294002266835ull [H-THIN]
    kReplace_rows[0]: 8933562200260968840ull -> 8019365971493599225ull [H-THIN]
    kReplace_rows[1]: 3907924323473264241ull -> 10913970432357026228ull [H-THIN]
    kReplace_rows[2]: 14461884941578386867ull -> 16718022224308212524ull [H-THIN]
    kReplace_rows[3]: 16511157315480471622ull -> 11959962526167016269ull [H-THIN]
    kReplace_rows[4]: 3959552939271361991ull -> 13682103540524835918ull [H-THIN]
    kReplace_rows[5]: 2555551956738490898ull -> 14243367393985337845ull [H-THIN]
    kReplace_rows[6]: 10502649610878884111ull -> 8014600618664019672ull [H-THIN]
    kReplace_rows[7]: 18306494604560422814ull -> 12889133748772252011ull [H-THIN]
    kReplace_rows[8]: 17185448195161859406ull -> 360570764097142565ull [H-THIN]
    kReplace_rows[9]: 15450494133515205524ull -> 11876071708761659347ull [H-THIN]
    kReplace_rows[10]: 6827766899990563012ull -> 3851347914344196379ull [H-THIN]
    kReplace_rows[11]: 181096906100466027ull -> 269582453071901974ull [H-THIN]
    kReplace_rows[12]: 3679474327996900584ull -> 7374511927462938135ull [H-THIN]
    kReplace_rows[13]: 5841986886798320038ull -> 14141590806976750289ull [H-THIN]
    kReplace_rows[14]: 1819868140276584460ull -> 10009811972588039873ull [H-THIN]
    kReplace_rows[15]: 4420902119403666462ull -> 6680845581363570511ull [H-THIN]
    kReplace_rows[16]: 13480284355483224649ull -> 14019640910801526228ull [H-THIN]
    kReplace_rows[17]: 7175317954498263753ull -> 8435723009555847478ull [H-THIN]
    kReplace_rows[18]: 17073623445577360118ull -> 11806787700855741945ull [H-THIN]
    kReplace_rows[19]: 17009991270755579471ull -> 4186867479979939080ull [H-THIN]
    kReplace_rows[20]: 12090343301005594287ull -> 4211449273197151184ull [H-THIN]
    kReplace_rows[21]: 13041638478193314581ull -> 2665513011878476638ull [H-THIN]
    kReplace_rows[22]: 1923525511758336863ull -> 6197194006704225848ull [H-THIN]
    kReplace_rows[23]: 1774789224381390235ull -> 9112509013863788708ull [H-THIN]
    kReplace_rows[24]: 15509873019280549637ull -> 8040469185102305882ull [H-THIN]
    kReplace_rows[25]: 18049355505317406500ull -> 2771278037748002351ull [H-THIN]
    kReplace_rows[26]: 9113574443316558064ull -> 11922167282207411627ull [H-THIN]
    kReplace_rows[27]: 52835018303832477ull -> 11390247996551829374ull [H-THIN]
    kReplace_rows[28]: 17600220618483225632ull -> 5206095883568772047ull [H-THIN]
    kReplace_rows[29]: 4090055281926467129ull -> 2965585984607700150ull [H-THIN]
    kReplace_rows[30]: 10973342611545588080ull -> 14433906025888897687ull [H-THIN]
    kReplace_rows[31]: 17124982032285163865ull -> 8339014417427264918ull [H-THIN]
    kReplace_reads[0]: 2326526227949002076ull -> 18240752413274260441ull [H-THIN]
    kReplace_reads[1]: 13390056939270062271ull -> 2691016625363928396ull [H-THIN]
    kReplace_reads[2]: 10021657182331917789ull -> 6810061420294520706ull [H-THIN]
    kReplace_reads[3]: 14242637685443801194ull -> 9524522377897439163ull [H-THIN]
    kReplace_reads[4]: 711594472462182014ull -> 7296154269922229361ull [H-THIN]
    kReplace_reads[5]: 4857350833193818325ull -> 17144192060924016500ull [H-THIN]
    kReplace_reads[6]: 4317633836685601759ull -> 15841551483731080184ull [H-THIN]
    kReplace_reads[7]: 1066029825997878730ull -> 3093248295129869043ull [H-THIN]
    kReplace_final[0]: 17124982032285163865ull -> 8339014417427264918ull [H-THIN]
    kCancel_rows[0]: 8933562200260968840ull -> 8019365971493599225ull [H-THIN]
    kCancel_rows[1]: 12907991694751175761ull -> 9755581588236959176ull [H-THIN]
    kCancel_rows[2]: 15492238351520247563ull -> 8371403224338711542ull [H-THIN]
    kCancel_rows[3]: 4949954141317803287ull -> 16042211801967482956ull [H-THIN]
    kCancel_rows[4]: 6869043455093337913ull -> 16802932054993035276ull [H-THIN]
    kCancel_rows[5]: 16700973384839330835ull -> 13204266665875046502ull [H-THIN]
    kCancel_rows[6]: 13907977122257783994ull -> 16358615663034135167ull [H-THIN]
    kCancel_rows[7]: 13690802804532944832ull -> 6541217908632789433ull [H-THIN]
    kCancel_rows[8]: 6641415404822534272ull -> 16241388624320518101ull [H-THIN]
    kCancel_rows[9]: 17617700982422257653ull -> 3812797098998110562ull [H-THIN]
    kCancel_rows[10]: 8957395621418722884ull -> 18060365737908723675ull [H-THIN]
    kCancel_rows[11]: 15533748013016881700ull -> 1812188758081721615ull [H-THIN]
    kCancel_rows[12]: 10113927666003718936ull -> 5200369397060719481ull [H-THIN]
    kCancel_rows[13]: 10748025209891027257ull -> 14528435239011413150ull [H-THIN]
    kCancel_rows[14]: 7405357053482683011ull -> 16366047349482157266ull [H-THIN]
    kCancel_rows[15]: 14210999101428183707ull -> 14462275783608418760ull [H-THIN]
    kCancel_rows[16]: 5089886391592128332ull -> 15465277701067203145ull [H-THIN]
    kCancel_rows[17]: 1890214210532379459ull -> 10822246540794760664ull [H-THIN]
    kCancel_rows[18]: 15715071324930605218ull -> 5153708099721087119ull [H-THIN]
    kCancel_rows[19]: 12760333961958415553ull -> 10351223234449594086ull [H-THIN]
    kCancel_rows[20]: 1349906610605744215ull -> 17418701808057553558ull [H-THIN]
    kCancel_rows[21]: 11872699637369758186ull -> 8964634856941185769ull [H-THIN]
    kCancel_rows[22]: 6278706775858866003ull -> 8066351423005290858ull [H-THIN]
    kCancel_rows[23]: 8489616688255836383ull -> 17339397096778631582ull [H-THIN]
    kCancel_rows[24]: 8131243489711240877ull -> 10167217103912949158ull [H-THIN]
    kCancel_rows[25]: 73524659065323965ull -> 7835551358700961936ull [H-THIN]
    kCancel_rows[26]: 13120948974577109893ull -> 3057432646794745428ull [H-THIN]
    kCancel_rows[27]: 13036340438400450584ull -> 3633706464540692363ull [H-THIN]
    kCancel_rows[28]: 17320509982992261848ull -> 17115428998086447629ull [H-THIN]
    kCancel_rows[29]: 16001552197493914473ull -> 6180321870109069012ull [H-THIN]
    kCancel_rows[30]: 12375923388653592921ull -> 13623488446145227464ull [H-THIN]
    kCancel_rows[31]: 17283281126178883990ull -> 7433824449803764975ull [H-THIN]
    kCancel_reads[0]: 5066383747043332732ull -> 16017138806894645973ull [H-THIN]
    kCancel_reads[1]: 14642164039413495816ull -> 14395189169447138845ull [H-THIN]
    kCancel_reads[2]: 1826995519720684135ull -> 15433550368465758174ull [H-THIN]
    kCancel_reads[3]: 10600767793424807315ull -> 15319181961208510706ull [H-THIN]
    kCancel_reads[4]: 18413531801076714261ull -> 7116101502612005176ull [H-THIN]
    kCancel_reads[5]: 7162595064832704878ull -> 5624598517067648741ull [H-THIN]
    kCancel_reads[6]: 8771487694918498925ull -> 15626337877376063418ull [H-THIN]
    kCancel_reads[7]: 3727599241559000403ull -> 12303175751506120794ull [H-THIN]
    kCancel_reads[8]: 2036989596869214901ull -> 16768996190976851778ull [H-THIN]
    kCancel_reads[9]: 15857207205534857561ull -> 9166644978234881348ull [H-THIN]
    kCancel_reads[10]: 5509984618602967315ull -> 18107466278445992216ull [H-THIN]
    kCancel_reads[11]: 227260307711721321ull -> 512994913100055200ull [H-THIN]
    kCancel_reads[12]: 14543777879962894095ull -> 9443988914314833904ull [H-THIN]
    kCancel_reads[13]: 2123158589903514105ull -> 15301609864008799700ull [H-THIN]
    kCancel_reads[14]: 11488931589024505587ull -> 18376839094291697164ull [H-THIN]
    kCancel_reads[15]: 6035902334985171665ull -> 3352239734550209384ull [H-THIN]
    kCancel_reads[16]: 6330997617635358220ull -> 9556582455608271345ull [H-THIN]
    kCancel_reads[17]: 7622013860668800144ull -> 4597279093679219283ull [H-THIN]
    kCancel_reads[18]: 7135414897549443327ull -> 12371316346718768834ull [H-THIN]
    kCancel_final[0]: 17283281126178883990ull -> 7433824449803764975ull [H-THIN]
    kOca_rows[0]: 8933562200260968840ull -> 8019365971493599225ull [H-THIN]
    kOca_rows[1]: 16488569157039504391ull -> 3232936220238691146ull [H-THIN]
    kOca_rows[2]: 15308668032647221442ull -> 8093402965097552867ull [H-THIN]
    kOca_rows[3]: 11025020666800289870ull -> 16342776694917511399ull [H-THIN]
    kOca_rows[4]: 17376859899643293076ull -> 1176409931075103109ull [H-THIN]
    kOca_rows[5]: 18031995174781967338ull -> 14796994139400300899ull [H-THIN]
    kOca_rows[6]: 9135991105341529701ull -> 4041329064345231230ull [H-THIN]
    kOca_rows[7]: 12521501026388244289ull -> 18203940660042607242ull [H-THIN]
    kOca_rows[8]: 17387999442892602416ull -> 11789920335390250025ull [H-THIN]
    kOca_rows[9]: 17523447275006301316ull -> 12162719525992402073ull [H-THIN]
    kOca_rows[10]: 700544763663270973ull -> 10376658214325705912ull [H-THIN]
    kOca_rows[11]: 6419555011776275829ull -> 985387310022141304ull [H-THIN]
    kOca_rows[12]: 9501522493702417732ull -> 11563487340980545165ull [H-THIN]
    kOca_rows[13]: 2198037920276336707ull -> 17750573796976151050ull [H-THIN]
    kOca_rows[14]: 3899965171878021222ull -> 8782861391928203675ull [H-THIN]
    kOca_rows[15]: 17400108061693215989ull -> 148042859240194154ull [H-THIN]
    kOca_rows[16]: 6268695127500094535ull -> 2639689295090791304ull [H-THIN]
    kOca_rows[17]: 15386469441856039635ull -> 10798952018967388820ull [H-THIN]
    kOca_rows[18]: 1827308857775093108ull -> 13015585966305206737ull [H-THIN]
    kOca_rows[19]: 9002315039531479122ull -> 619093614529828615ull [H-THIN]
    kOca_rows[20]: 4336820592134659556ull -> 16432223468538835037ull [H-THIN]
    kOca_rows[21]: 1568941454279137340ull -> 5709266478406133937ull [H-THIN]
    kOca_rows[22]: 3586528324041147724ull -> 11031153128114419525ull [H-THIN]
    kOca_rows[23]: 9921466732535290906ull -> 17759043185727148801ull [H-THIN]
    kOca_rows[24]: 2210251816763789972ull -> 778153452226410841ull [H-THIN]
    kOca_rows[25]: 12540125623729258183ull -> 6929057138192640130ull [H-THIN]
    kOca_rows[26]: 4922139678029842511ull -> 1014477579839442850ull [H-THIN]
    kOca_rows[27]: 14880777043208119420ull -> 14398065235087572465ull [H-THIN]
    kOca_rows[28]: 766085567512147215ull -> 10116121127485637382ull [H-THIN]
    kOca_rows[29]: 12667708910662510744ull -> 9104659107751229673ull [H-THIN]
    kOca_rows[30]: 17116188563837257134ull -> 12444616329691358185ull [H-THIN]
    kOca_rows[31]: 18394579596403092954ull -> 14761567357674824267ull [H-THIN]
    kOca_reads[0]: 3105752370505168555ull -> 15189525287878030606ull [H-THIN]
    kOca_reads[1]: 13318576850138903270ull -> 12039483643790541963ull [H-THIN]
    kOca_reads[2]: 4943429593008048082ull -> 16889317257125145965ull [H-THIN]
    kOca_reads[3]: 7900987300136689534ull -> 14061180146549677313ull [H-THIN]
    kOca_reads[4]: 16889527581053605563ull -> 3457726981161275090ull [H-THIN]
    kOca_reads[5]: 8561664608116353912ull -> 15838028967223682041ull [H-THIN]
    kOca_reads[6]: 10377670066927504148ull -> 11019583341156392335ull [H-THIN]
    kOca_reads[7]: 14341448323725690491ull -> 15037407705806185768ull [H-THIN]
    kOca_reads[8]: 9080486838152177794ull -> 17212813844302948315ull [H-THIN]
    kOca_reads[9]: 3016108360062111013ull -> 8321492686618048122ull [H-THIN]
    kOca_reads[10]: 14134368882450491401ull -> 12537836709650543420ull [H-THIN]
    kOca_reads[11]: 12755516166577050941ull -> 5737128231549608782ull [H-THIN]
    kOca_final[0]: 18394579596403092954ull -> 14761567357674824267ull [H-THIN]
    kReissue_rows[0]: 11371589716169913082ull -> 5794085833535179433ull [H-THIN]
    kReissue_rows[1]: 11912421295804525448ull -> 10206102349587901947ull [H-THIN]
    kReissue_rows[2]: 16162904808422149189ull -> 16740711338258568218ull [H-THIN]
    kReissue_rows[3]: 1884050390405525809ull -> 157145938453825824ull [H-THIN]
    kReissue_rows[4]: 1630941943368694258ull -> 11549520461694658189ull [H-THIN]
    kReissue_rows[5]: 1646315788396378413ull -> 375980444520009614ull [H-THIN]
    kReissue_rows[6]: 3202536020749475123ull -> 1364356711154384662ull [H-THIN]
    kReissue_rows[7]: 16739146824408715591ull -> 9267951354912006062ull [H-THIN]
    kReissue_rows[8]: 12465965272475823462ull -> 18013247113906258621ull [H-THIN]
    kReissue_rows[9]: 12416019024705234276ull -> 15135278226663906553ull [H-THIN]
    kReissue_rows[10]: 8019931705879186711ull -> 6395419845332150882ull [H-THIN]
    kReissue_rows[11]: 10511748891040354060ull -> 2608642583221907887ull [H-THIN]
    kReissue_rows[12]: 7873647981647748428ull -> 1439014296977039245ull [H-THIN]
    kReissue_rows[13]: 13583506357494126788ull -> 4897379921696966153ull [H-THIN]
    kReissue_rows[14]: 6827456748487052757ull -> 13502194017489163244ull [H-THIN]
    kReissue_rows[15]: 4860432548138722281ull -> 8254807225619272358ull [H-THIN]
    kReissue_rows[16]: 10318257384229209728ull -> 4041173354564745731ull [H-THIN]
    kReissue_rows[17]: 13270746490627165070ull -> 5823046275575919511ull [H-THIN]
    kReissue_rows[18]: 15647754736958033867ull -> 11150667084723241358ull [H-THIN]
    kReissue_rows[19]: 15257413490644512113ull -> 7066649565605271382ull [H-THIN]
    kReissue_rows[20]: 3422115173668721064ull -> 9147117666804548605ull [H-THIN]
    kReissue_rows[21]: 11954333827210587376ull -> 2943969262508479583ull [H-THIN]
    kReissue_rows[22]: 16717809947662223375ull -> 2242050686395926078ull [H-THIN]
    kReissue_rows[23]: 16431286081784348505ull -> 18297932585058907168ull [H-THIN]
    kReissue_rows[24]: 14674774925924029409ull -> 7328278135585233712ull [H-THIN]
    kReissue_rows[25]: 8888789072620710620ull -> 4496911868369281609ull [H-THIN]
    kReissue_rows[26]: 7677274857978420999ull -> 4092312770444862044ull [H-THIN]
    kReissue_rows[27]: 8389711543599766598ull -> 3103138085614071329ull [H-THIN]
    kReissue_rows[28]: 11866583660361571056ull -> 1640897772442143723ull [H-THIN]
    kReissue_rows[29]: 8782474388336378853ull -> 11067585398331222410ull [H-THIN]
    kReissue_rows[30]: 12830062157342008889ull -> 358041756474409844ull [H-THIN]
    kReissue_rows[31]: 11660101618206053704ull -> 8735900797794446825ull [H-THIN]
    kReissue_reads[0]: 9397758857253294369ull -> 15035498073180564574ull [H-THIN]
    kReissue_reads[1]: 14952922796737447431ull -> 6351174026430191720ull [H-THIN]
    kReissue_reads[2]: 350142526787915315ull -> 17029808830897663162ull [H-THIN]
    kReissue_reads[3]: 9287618455889763760ull -> 1960056261526077029ull [H-THIN]
    kReissue_reads[4]: 8049051401679342672ull -> 9359327854260104443ull [H-THIN]
    kReissue_reads[5]: 7334056035772970331ull -> 9193727488393939674ull [H-THIN]
    kReissue_reads[6]: 16777030856659722344ull -> 2562235961360585845ull [H-THIN]
    kReissue_reads[7]: 12861194332908904879ull -> 15091373470769183170ull [H-THIN]
    kReissue_reads[8]: 7839065249474270945ull -> 9066532592892510086ull [H-THIN]
    kReissue_reads[9]: 2385401613699651006ull -> 15993610558080257077ull [H-THIN]
    kReissue_reads[10]: 3151001040546167918ull -> 14590383768983463647ull [H-THIN]
    kReissue_reads[11]: 6768266663339224688ull -> 14847391113272722757ull [H-THIN]
    kReissue_reads[12]: 211423388548179255ull -> 9991682699480081944ull [H-THIN]
    kReissue_reads[13]: 10932414881536382884ull -> 7606589495236393781ull [H-THIN]
    kReissue_reads[14]: 15509429580401113050ull -> 16170401377191376471ull [H-THIN]
    kReissue_reads[15]: 272542696402235168ull -> 8660956339548506257ull [H-THIN]
    kReissue_reads[16]: 12650608718358639686ull -> 17474680937306256469ull [H-THIN]
    kReissue_reads[17]: 16954864996066484000ull -> 14583099152188767967ull [H-THIN]
    kReissue_reads[18]: 2072712234614561342ull -> 1043496941119894989ull [H-THIN]
    kReissue_reads[19]: 15829080338314944658ull -> 13855326176576914141ull [H-THIN]
    kReissue_reads[20]: 2272828286921366934ull -> 10342641769074306343ull [H-THIN]
    kReissue_reads[21]: 16041091954465179468ull -> 11480238464600989237ull [H-THIN]
    kReissue_final[0]: 11660101618206053704ull -> 8735900797794446825ull [H-THIN]
    kTrail_rows[0]: 11371589716169913082ull -> 5794085833535179433ull [H-THIN]
    kTrail_rows[1]: 15827480248058921916ull -> 2370845579388248975ull [H-THIN]
    kTrail_rows[2]: 9179483745920742590ull -> 14433248242147310045ull [H-THIN]
    kTrail_rows[3]: 6778316597629456467ull -> 6746208057179709300ull [H-THIN]
    kTrail_rows[4]: 5172328729500611739ull -> 5141474228715449514ull [H-THIN]
    kTrail_rows[5]: 538732652451172654ull -> 11607255782218151389ull [H-THIN]
    kTrail_rows[6]: 6878958150024727018ull -> 15859825369433213587ull [H-THIN]
    kTrail_rows[7]: 8673040670875734808ull -> 14000636333325119541ull [H-THIN]
    kTrail_rows[8]: 1224102971077480171ull -> 8235513201704559620ull [H-THIN]
    kTrail_rows[9]: 4557268190807619538ull -> 896476467432039189ull [H-THIN]
    kTrail_rows[10]: 9136468491734931429ull -> 8318862700865263670ull [H-THIN]
    kTrail_rows[11]: 6184955078515723301ull -> 7174198796690634212ull [H-THIN]
    kTrail_rows[12]: 12362884735948053375ull -> 14047279371931353558ull [H-THIN]
    kTrail_rows[13]: 15431697961609933942ull -> 10303898847732478779ull [H-THIN]
    kTrail_rows[14]: 1411625524442821644ull -> 10919087129373839423ull [H-THIN]
    kTrail_rows[15]: 12832334111417447482ull -> 2392471918185386717ull [H-THIN]
    kTrail_rows[16]: 5598316292658291609ull -> 13975657224456405630ull [H-THIN]
    kTrail_rows[17]: 1094550630882239090ull -> 5371073164686480833ull [H-THIN]
    kTrail_rows[18]: 9032605003773573902ull -> 5788193476615953481ull [H-THIN]
    kTrail_rows[19]: 655750707938363819ull -> 742735857153964210ull [H-THIN]
    kTrail_rows[20]: 11787846682663979157ull -> 9511387276849347064ull [H-THIN]
    kTrail_rows[21]: 4271553443345200153ull -> 8387023980895655564ull [H-THIN]
    kTrail_rows[22]: 13505617900634614461ull -> 12129447825700318114ull [H-THIN]
    kTrail_rows[23]: 14516777496449283573ull -> 6819473365388645714ull [H-THIN]
    kTrail_rows[24]: 8741802295233492767ull -> 177891932096105070ull [H-THIN]
    kTrail_rows[25]: 7191771264792402823ull -> 12347931419050467504ull [H-THIN]
    kTrail_rows[26]: 407930561309081398ull -> 11096564370558447981ull [H-THIN]
    kTrail_rows[27]: 10139811205313313301ull -> 5083341745670325276ull [H-THIN]
    kTrail_rows[28]: 9692372728761498854ull -> 15979402051208842361ull [H-THIN]
    kTrail_rows[29]: 17629340520421506187ull -> 10031744998823385352ull [H-THIN]
    kTrail_rows[30]: 12781001967037913295ull -> 2405952843925529234ull [H-THIN]
    kTrail_rows[31]: 4953750954703410960ull -> 15933138127006431029ull [H-THIN]
    kTrail_reads[0]: 9397758857253294369ull -> 15035498073180564574ull [H-THIN]
    kTrail_reads[1]: 8570208265068282686ull -> 2064235671204825645ull [H-THIN]
    kTrail_final[0]: 4953750954703410960ull -> 15933138127006431029ull [H-THIN]
test_adapter_continuation_view: 169 lines
    k_chart[1]: 17778912298194596574ull -> 2540222023230692795ull [H-THIN]
    k_chart[3]: 8941018855024971093ull -> 7277266162097189602ull [H-THIN]
    k_chart[4]: 2898399952537902865ull -> 13929697350787785222ull [H-THIN]
    k_chart[6]: 2898399952537902865ull -> 13929697350787785222ull [H-THIN]
    k_magnifier[1]: 14738067743722080804ull -> 10187142414804555211ull [H-THIN]
    k_magnifier[3]: 2917741806179085516ull -> 13316113226488762715ull [H-THIN]
    k_magnifier[4]: 13581436790443683042ull -> 489358674406674971ull [H-THIN]
    k_magnifier[6]: 13581436790443683042ull -> 489358674406674971ull [H-THIN]
    k_aggregated[1]: 13031512803108236715ull -> 12703961494282243636ull [H-THIN]
    k_aggregated[2]: 6906214955679447270ull -> 4636245846172056503ull [H-THIN]
    k_aggregated[4]: 6906214955679447270ull -> 4636245846172056503ull [H-THIN]
    k_aggregated_magnifier[1]: 7363580706773703120ull -> 6822321611223800121ull [H-THIN]
    k_aggregated_magnifier[2]: 5380311451522306220ull -> 1968062868302397607ull [H-THIN]
    k_aggregated_magnifier[4]: 5380311451522306220ull -> 1968062868302397607ull [H-THIN]
    k_coof[3]: 1856715264914641232ull -> 17725898018428294595ull [H-THIN]
    k_coof[5]: 9115044940243703863ull -> 8234685298969568092ull [PAR-ORDERS-2, H-THIN]
    k_coof[6]: 9198850018143016781ull -> 13907186164657073030ull [H-THIN]
    k_coof[7]: 784137025905909089ull -> 5915100548425272856ull [H-THIN]
    k_coof[9]: 784137025905909089ull -> 5915100548425272856ull [H-THIN]
    k_recording[1]: 16309388099732889217ull -> 13909724611150684752ull [H-THIN]
    k_recording[3]: 14697449118452563264ull -> 6058006111773907271ull [H-THIN]
    k_recording[4]: 2898399952537902865ull -> 13929697350787785222ull [H-THIN]
    k_recording[6]: 2898399952537902865ull -> 13929697350787785222ull [H-THIN]
    k_recording[7]: 11912929120179152844ull -> 14971695095207148331ull [H-THIN]
    k_recording[8]: 7111499071038382551ull -> 10535748930949530126ull [H-THIN]
    k_recording[9]: 14395892391241930212ull -> 12991008539092747157ull [H-THIN]
    k_recording[10]: 9034635987304089269ull -> 15956762843095239782ull [H-THIN]
    k_recording[11]: 7745035282290493167ull -> 2607245150229644476ull [H-THIN]
    k_recording[12]: 9653978480792136139ull -> 2184445209065093070ull [H-THIN]
    k_recording[13]: 6575784925310671623ull -> 2897664079743275822ull [H-THIN]
    k_recording[14]: 16756306850270906652ull -> 4157996150621490761ull [H-THIN]
    k_recording[15]: 6791844355462743637ull -> 10537503143714109070ull [H-THIN]
    k_recording[16]: 9752175874850418240ull -> 13754546407945448507ull [H-THIN]
    k_recording[17]: 5581794927458177019ull -> 16440431375654315850ull [H-THIN]
    k_recording[18]: 16367531041072987671ull -> 7003661191077414576ull [H-THIN]
    k_recording[19]: 5499206076623092635ull -> 11353048097065184288ull [H-THIN]
    k_recording[20]: 16891823664600062531ull -> 12848736740973846400ull [H-THIN]
    k_recording[21]: 15306266440153708710ull -> 3161842879106046797ull [H-THIN]
    k_recording[22]: 8382791724770590634ull -> 10847056918133263985ull [H-THIN]
    k_recording[23]: 4926336483410460532ull -> 8350647617751486789ull [H-THIN]
    k_recording[24]: 12823090459845782834ull -> 1856794670313281419ull [H-THIN]
    k_recording[25]: 10217177223946990874ull -> 3189033237966511301ull [H-THIN]
    k_recording[26]: 12680312482263936655ull -> 9556919139953515754ull [H-THIN]
    k_recording[27]: 15032085204869760060ull -> 5681429441061062241ull [H-THIN]
    k_recording[28]: 7696336452231268012ull -> 10425853480784439841ull [H-THIN]
    k_recording[29]: 6819477884530924764ull -> 12097190747565164239ull [H-THIN]
    k_recording[30]: 13932522791731114426ull -> 12637836836690018377ull [H-THIN]
    k_recording[31]: 15842817164955438950ull -> 14424918618138801803ull [H-THIN]
    k_recording[32]: 4250764768037495411ull -> 17903030095845904958ull [H-THIN]
    k_recording[33]: 1760469320874157114ull -> 15510962773836543503ull [H-THIN]
    k_recording[34]: 7565330933885892856ull -> 16031650111081263649ull [H-THIN]
    k_recording[35]: 3348650657119335616ull -> 15453192344610479715ull [H-THIN]
    k_recording[36]: 16026642042438818681ull -> 12604736624722151438ull [H-THIN]
    k_recording[37]: 15336121108426360137ull -> 17308957480242505390ull [H-THIN]
    k_recording[38]: 12610087835245307199ull -> 452142121530738962ull [H-THIN]
    k_recording[39]: 3169655936610324835ull -> 6150193546982553982ull [H-THIN]
    k_recording[40]: 18005345939863936504ull -> 12917335185226580263ull [H-THIN]
    k_recording[41]: 10374887129263366256ull -> 3249697982624166735ull [H-THIN]
    k_recording[42]: 3316605285128650350ull -> 3343978410969230181ull [H-THIN]
    k_recording[43]: 10411230090089985874ull -> 16247831777829745607ull [H-THIN]
    k_recording[44]: 2321647345879300563ull -> 7514289197254818298ull [H-THIN]
    k_recording[45]: 9282855342318040804ull -> 17972948283988009341ull [H-THIN]
    k_recording[46]: 8782939554936041465ull -> 4872902272073809254ull [H-THIN]
    k_recording[47]: 9270809468617755726ull -> 16118270799549857939ull [H-THIN]
    k_recording[48]: 9705564861311910669ull -> 14672005653726242528ull [H-THIN]
    k_recording[49]: 1984027035687621850ull -> 2133921838620278979ull [H-THIN]
    k_recording[50]: 5309816640440296119ull -> 13677532362142245502ull [H-THIN]
    k_recording[51]: 61906512444861614ull -> 7883065542401673469ull [H-THIN]
    k_recording[52]: 18408253739502061131ull -> 7126839422434123000ull [H-THIN]
    k_recording[53]: 2900636347809437670ull -> 3907128035298066349ull [H-THIN]
    k_recording[54]: 8590510826456084479ull -> 4948527793100784708ull [H-THIN]
    k_recording[55]: 16739036358771975930ull -> 142644456983149613ull [H-THIN]
    k_recording[56]: 3846505090147632664ull -> 14555917326272639085ull [H-THIN]
    k_recording[57]: 13346518438036570112ull -> 5212018862612370299ull [H-THIN]
    k_recording[58]: 3939181335635768762ull -> 865072719653853777ull [H-THIN]
    k_recording[59]: 1996675722330704212ull -> 14621783374817857573ull [H-THIN]
    k_recording[60]: 271113896427528122ull -> 12663926541947072239ull [H-THIN]
    k_recording[61]: 1511893874670543988ull -> 7631475035369278017ull [H-THIN]
    k_recording[62]: 15973548105797383183ull -> 951171557373679674ull [H-THIN]
    k_recording[63]: 4392899708297163730ull -> 9891512222295021637ull [H-THIN]
    k_recording[64]: 11467883812317724901ull -> 14067535954397498792ull [H-THIN]
    k_recording[65]: 11051413718335140252ull -> 14311549026741467081ull [H-THIN]
    k_recording[66]: 903533060614176790ull -> 775415503723595045ull [H-THIN]
    k_recording[67]: 14466209299323094098ull -> 2025287021890762573ull [H-THIN]
    k_recording[68]: 4010960734010157804ull -> 5576052922734185379ull [H-THIN]
    k_recording[69]: 5172512134487820157ull -> 1575805364117614574ull [H-THIN]
    k_recording[70]: 2898399952537902865ull -> 13929697350787785222ull [H-THIN]
    k_stream[0]: 16458853630937199693ull -> 6675987432147888000ull [H-THIN]
    k_stream[2]: 15852567477617018112ull -> 15316836834528354089ull [H-THIN]
    k_stream[3]: 8395254103899656747ull -> 122347678355491576ull [H-THIN]
    k_stream[4]: 9137153746257222586ull -> 17060189170921966279ull [H-THIN]
    k_stream[5]: 4321243615010347791ull -> 12998233506120003610ull [H-THIN]
    k_stream[7]: 4335032133758631355ull -> 5790160451626852554ull [H-THIN]
    k_stream[8]: 3418642895666580588ull -> 8747488118396803171ull [H-THIN]
    k_stream[10]: 15778603109418817912ull -> 11301555486053984887ull [H-THIN]
    k_stream[12]: 8082887755714141501ull -> 16019190197976852534ull [H-THIN]
    k_stream[13]: 18272796975887582060ull -> 14554266247005678391ull [H-THIN]
    k_stream[14]: 4620349392656757831ull -> 9863308761378043570ull [H-THIN]
    k_stream[16]: 11681022048666484124ull -> 3981212442403576087ull [H-THIN]
    k_stream[17]: 1110410394930231379ull -> 16893712934576968012ull [H-THIN]
    k_stream[18]: 8353289200898942510ull -> 17103134812120181635ull [H-THIN]
    k_stream[19]: 5464661787014092283ull -> 2716679541586828074ull [H-THIN]
    k_stream[21]: 17913569146247237990ull -> 2142815117417671925ull [H-THIN]
    k_stream[22]: 14252084119842247317ull -> 1297101144475427900ull [H-THIN]
    k_stream[24]: 14984524306684102418ull -> 17860190683404402179ull [H-THIN]
    k_stream[26]: 8427843384471180011ull -> 12743930332679229528ull [H-THIN]
    k_stream[27]: 12312569890916686665ull -> 13672064593010625780ull [H-THIN]
    k_stream[28]: 7806471840435792838ull -> 15322331001617686957ull [H-THIN]
    k_stream[29]: 10841176947711978698ull -> 2540452936526860029ull [H-THIN]
    k_stream[31]: 15796138674937755121ull -> 5707160760001918266ull [H-THIN]
    k_stream[32]: 4930499034900633496ull -> 17256519628932910437ull [H-THIN]
    k_stream[33]: 11894749826123257324ull -> 1265742856577179629ull [H-THIN]
    k_stream[35]: 6209022505833017115ull -> 8935675646451046114ull [H-THIN]
    k_stream[36]: 13004202639896233962ull -> 1995113508368758049ull [H-THIN]
    k_stream[37]: 1029059189446661931ull -> 12126669220334860080ull [H-THIN]
    k_stream[39]: 9236479431486641300ull -> 13100650686759242355ull [H-THIN]
    k_stream[40]: 5209128789544115679ull -> 1320523439935521014ull [H-THIN]
    k_stream[41]: 5582126543454279956ull -> 10835572324283436971ull [H-THIN]
    k_stream[43]: 16435999169585034112ull -> 411402308123821837ull [H-THIN]
    k_stream[44]: 2858404675926398753ull -> 18325644631502656152ull [H-THIN]
    k_stream[45]: 2863207613356019619ull -> 6533533400826708814ull [H-THIN]
    k_stream[47]: 1651019462700250297ull -> 11035145778810736216ull [H-THIN]
    k_stream[48]: 9342015881796079139ull -> 4664106270365911266ull [H-THIN]
    k_stream[49]: 971242319250035563ull -> 6512545530849110454ull [H-THIN]
    k_stream[51]: 971242319250035563ull -> 6512545530849110454ull [H-THIN]
    k_stream[53]: 971242319250035563ull -> 6512545530849110454ull [H-THIN]
    k_stream_aborted[0]: 16458853630937199693ull -> 6675987432147888000ull [H-THIN]
    k_stream_aborted[2]: 15852567477617018112ull -> 15316836834528354089ull [H-THIN]
    k_stream_aborted[3]: 8395254103899656747ull -> 122347678355491576ull [H-THIN]
    k_stream_aborted[4]: 9137153746257222586ull -> 17060189170921966279ull [H-THIN]
    k_stream_aborted[5]: 4321243615010347791ull -> 12998233506120003610ull [H-THIN]
    k_stream_aborted[7]: 4335032133758631355ull -> 5790160451626852554ull [H-THIN]
    k_stream_aborted[8]: 3418642895666580588ull -> 8747488118396803171ull [H-THIN]
    k_stream_aborted[10]: 15778603109418817912ull -> 11301555486053984887ull [H-THIN]
    k_stream_aborted[12]: 8082887755714141501ull -> 16019190197976852534ull [H-THIN]
    k_stream_aborted[13]: 18272796975887582060ull -> 14554266247005678391ull [H-THIN]
    k_stream_aborted[14]: 4620349392656757831ull -> 9863308761378043570ull [H-THIN]
    k_stream_aborted[16]: 11681022048666484124ull -> 3981212442403576087ull [H-THIN]
    k_stream_aborted[17]: 1110410394930231379ull -> 16893712934576968012ull [H-THIN]
    k_stream_aborted[18]: 8353289200898942510ull -> 17103134812120181635ull [H-THIN]
    k_stream_aborted[19]: 5464661787014092283ull -> 2716679541586828074ull [H-THIN]
    k_stream_aborted[21]: 17913569146247237990ull -> 2142815117417671925ull [H-THIN]
    k_stream_aborted[22]: 14252084119842247317ull -> 1297101144475427900ull [H-THIN]
    k_stream_aborted[24]: 14984524306684102418ull -> 17860190683404402179ull [H-THIN]
    k_stream_aborted[26]: 8427843384471180011ull -> 12743930332679229528ull [H-THIN]
    k_stream_aborted[27]: 12312569890916686665ull -> 13672064593010625780ull [H-THIN]
    k_stream_aborted[28]: 7806471840435792838ull -> 15322331001617686957ull [H-THIN]
    k_stream_aborted[29]: 10841176947711978698ull -> 2540452936526860029ull [H-THIN]
    k_stream_aborted[31]: 15796138674937755121ull -> 5707160760001918266ull [H-THIN]
    k_stream_aborted[32]: 4930499034900633496ull -> 17256519628932910437ull [H-THIN]
    k_stream_aborted[34]: 4930499034900633496ull -> 17256519628932910437ull [H-THIN]
    k_aborted[1]: 17778912298194596574ull -> 2540222023230692795ull [H-THIN]
    k_aborted[3]: 12754404695042992156ull -> 8965275888317139301ull [H-THIN]
    k_aborted[5]: 12754404695042992156ull -> 8965275888317139301ull [H-THIN]
    k_reused[1]: 17778912298194596574ull -> 2540222023230692795ull [H-THIN]
    k_reused[3]: 8941018855024971093ull -> 7277266162097189602ull [H-THIN]
    k_reused[5]: 17778912298194596574ull -> 2540222023230692795ull [H-THIN]
    k_reused[7]: 8941018855024971093ull -> 7277266162097189602ull [H-THIN]
    k_reused[8]: 2898399952537902865ull -> 13929697350787785222ull [H-THIN]
    k_reused[10]: 2898399952537902865ull -> 13929697350787785222ull [H-THIN]
    k_reused[11]: 4063572268643314481ull -> 3045160088509885646ull [H-THIN]
    k_reused[12]: 4620349392656757831ull -> 9863308761378043570ull [H-THIN]
    k_reused[14]: 4620349392656757831ull -> 9863308761378043570ull [H-THIN]
    k_refused[1]: 2898399952537902865ull -> 13929697350787785222ull [H-THIN]
    k_refused[3]: 2898399952537902865ull -> 13929697350787785222ull [H-THIN]
    k_refused[5]: 17778912298194596574ull -> 2540222023230692795ull [H-THIN]
    k_refused[7]: 8941018855024971093ull -> 7277266162097189602ull [H-THIN]
    k_refused[8]: 2898399952537902865ull -> 13929697350787785222ull [H-THIN]
    k_refused[10]: 2898399952537902865ull -> 13929697350787785222ull [H-THIN]
test_adapter_receipts_in_place: 334 lines
    kDeclined_rows[0]: 16367413721785097631ull -> 10078075251929413260ull [H-THIN]
    kDeclined_rows[1]: 8673411908040166317ull -> 9021013497480718974ull [H-THIN]
    kDeclined_rows[2]: 711509299982175852ull -> 5211498519342463915ull [H-THIN]
    kDeclined_rows[3]: 7197939734931235205ull -> 8693678377712780894ull [H-THIN]
    kDeclined_rows[4]: 7029670217763137463ull -> 3263497715304832018ull [H-THIN]
    kDeclined_rows[5]: 3635687300847380421ull -> 4887532512140189270ull [H-THIN]
    kDeclined_rows[6]: 16534761561291369739ull -> 3474228148466484630ull [H-THIN]
    kDeclined_rows[7]: 10876124900683281275ull -> 8939974732258322358ull [H-THIN]
    kDeclined_rows[8]: 10020927749345911019ull -> 2229197510643109192ull [H-THIN]
    kDeclined_rows[9]: 8691527508212156618ull -> 5373392566564228697ull [H-THIN]
    kDeclined_final[0]: 8691527508212156618ull -> 5373392566564228697ull [H-THIN]
    kDeclinedMag_rows[0]: 17043975752116642733ull -> 16782433437025871990ull [H-THIN]
    kDeclinedMag_rows[1]: 10606185829452660874ull -> 1222497984017113931ull [H-THIN]
    kDeclinedMag_rows[2]: 15448675564357825832ull -> 13459087267571170739ull [H-THIN]
    kDeclinedMag_rows[3]: 15175044830743125885ull -> 9516889388168741832ull [H-THIN]
    kDeclinedMag_rows[4]: 6450443484594143151ull -> 7518654345809068380ull [H-THIN]
    kDeclinedMag_rows[5]: 2398923910778006973ull -> 11893247087917015032ull [H-THIN]
    kDeclinedMag_rows[6]: 8459031541244945398ull -> 12055886405220663097ull [H-THIN]
    kDeclinedMag_rows[7]: 1773947867498079483ull -> 10055241910018728642ull [H-THIN]
    kDeclinedMag_rows[8]: 15294623478765439011ull -> 12275394792888174860ull [H-THIN]
    kDeclinedMag_rows[9]: 483092226467101870ull -> 9368999989622318001ull [H-THIN]
    kDeclinedMag_final[0]: 483092226467101870ull -> 9368999989622318001ull [H-THIN]
    kRevive_rows[0]: 13340112391979823686ull -> 13853830474015623389ull [H-THIN]
    kRevive_rows[1]: 3080039388426713206ull -> 4728749920725358539ull [H-THIN]
    kRevive_rows[2]: 7902869859755540775ull -> 4849688479110990770ull [H-THIN]
    kRevive_rows[3]: 18430037521897822255ull -> 16929648573929730497ull [H-THIN]
    kRevive_rows[4]: 8604888200074309324ull -> 1041650372773372953ull [H-THIN]
    kRevive_rows[5]: 10980118139031631968ull -> 5462196043591698097ull [H-THIN]
    kRevive_rows[6]: 17030525150602589392ull -> 2747991239711285631ull [H-THIN]
    kRevive_final[0]: 17030525150602589392ull -> 2747991239711285631ull [H-THIN]
    kReviveMag_rows[0]: 9323387230543354105ull -> 832728159842300632ull [H-THIN]
    kReviveMag_rows[1]: 17230544106411439877ull -> 10054388176425177056ull [H-THIN]
    kReviveMag_rows[2]: 8558481171000670347ull -> 18222497838575167482ull [H-THIN]
    kReviveMag_rows[3]: 11778096795536835427ull -> 7009173660391284590ull [H-THIN]
    kReviveMag_rows[4]: 6288134072033682736ull -> 13277765918702967861ull [H-THIN]
    kReviveMag_rows[5]: 5799450267550970898ull -> 6034130187223021955ull [H-THIN]
    kReviveMag_rows[6]: 16015312550992593014ull -> 9402276759429607197ull [H-THIN]
    kReviveMag_final[0]: 16015312550992593014ull -> 9402276759429607197ull [H-THIN]
    kCascade_rows[0]: 551096499902803590ull -> 11665685740161685773ull [H-THIN]
    kCascade_rows[1]: 6515737401085179265ull -> 6762973723098471536ull [H-THIN]
    kCascade_rows[2]: 13117702113570278612ull -> 13194180830256499995ull [H-THIN]
    kCascade_rows[3]: 1257083709566184300ull -> 5915515851064168701ull [H-THIN]
    kCascade_rows[4]: 1236032771344307983ull -> 14468652264495611008ull [H-THIN]
    kCascade_rows[5]: 17545089905645669552ull -> 4582123328933630207ull [H-THIN]
    kCascade_rows[6]: 11022588141404321180ull -> 16894420136553841491ull [H-THIN]
    kCascade_final[0]: 11022588141404321180ull -> 16894420136553841491ull [H-THIN]
    kCascadeMag_rows[0]: 15338041165786710953ull -> 10293226467739870528ull [H-THIN]
    kCascadeMag_rows[1]: 9326370104822563476ull -> 15440279261765505431ull [H-THIN]
    kCascadeMag_rows[2]: 2546778736934085057ull -> 3033096808895778346ull [H-THIN]
    kCascadeMag_rows[3]: 15492970885942622778ull -> 8603410363956848503ull [H-THIN]
    kCascadeMag_rows[4]: 16758361987609330968ull -> 3716382050228218553ull [H-THIN]
    kCascadeMag_rows[5]: 4624738216223074340ull -> 15049237438778114557ull [H-THIN]
    kCascadeMag_rows[6]: 2074679355477699332ull -> 3591493413416270605ull [H-THIN]
    kCascadeMag_final[0]: 2074679355477699332ull -> 3591493413416270605ull [H-THIN]
    kBrackets_rows[0]: 16217277159719941353ull -> 7500883169712558290ull [H-THIN]
    kBrackets_rows[1]: 8338318974496761540ull -> 11727648583129089083ull [H-THIN]
    kBrackets_rows[2]: 4387288109901666172ull -> 6413647876750793739ull [H-THIN]
    kBrackets_rows[3]: 17194843007024741926ull -> 16308656194518151033ull [H-THIN]
    kBrackets_rows[4]: 13764914223976981334ull -> 16727135511009534069ull [H-THIN]
    kBrackets_rows[5]: 5165427215729956474ull -> 6044943424043481425ull [H-THIN]
    kBrackets_rows[6]: 4634967915219578727ull -> 14841136291072554584ull [H-THIN]
    kBrackets_rows[7]: 16692219291368299752ull -> 1773096913540911661ull [H-THIN]
    kBrackets_rows[8]: 14748223541663733754ull -> 17033478288745263781ull [H-THIN]
    kBrackets_rows[9]: 3456524395963272453ull -> 17415237666140008114ull [H-THIN]
    kBrackets_rows[10]: 12434621022045497961ull -> 14903371499312557794ull [H-THIN]
    kBrackets_rows[11]: 16335369385158554819ull -> 1559388622250313888ull [H-THIN]
    kBrackets_rows[12]: 12991044494042544886ull -> 11339295434477982165ull [H-THIN]
    kBrackets_rows[13]: 4973527342518025567ull -> 5188816558658073040ull [H-THIN]
    kBrackets_rows[14]: 17883762509965744260ull -> 10562336006974642565ull [H-THIN]
    kBrackets_rows[15]: 2061839802394366722ull -> 9944319438386404069ull [H-THIN]
    kBrackets_rows[16]: 9666386366910181655ull -> 18087204908683637838ull [H-THIN]
    kBrackets_rows[17]: 4436881865564527894ull -> 6643491299232430087ull [H-THIN]
    kBrackets_rows[18]: 16715420632714991716ull -> 6148826652091198175ull [H-THIN]
    kBrackets_rows[19]: 1529353304450412038ull -> 4758323598983849211ull [H-THIN]
    kBrackets_rows[20]: 1035717575522872886ull -> 2642662310786859897ull [H-THIN]
    kBrackets_rows[21]: 16225013858806894718ull -> 595312524362424357ull [H-THIN]
    kBrackets_rows[22]: 8409169559076599494ull -> 14890548070825444249ull [H-THIN]
    kBrackets_rows[23]: 9707763992756481156ull -> 3533069104010016939ull [H-THIN]
    kBrackets_rows[24]: 2831826005880704344ull -> 1617991145468681997ull [H-THIN]
    kBrackets_rows[25]: 17431835404196442687ull -> 10622401576246976900ull [H-THIN]
    kBrackets_rows[26]: 9788230484951507538ull -> 8817393790173822955ull [H-THIN]
    kBrackets_rows[27]: 13167836072962096695ull -> 16364625047298717046ull [H-THIN]
    kBrackets_rows[28]: 9063096009681232646ull -> 14563367105470732551ull [H-THIN]
    kBrackets_rows[29]: 5410108115990088215ull -> 4971637099003501106ull [H-THIN]
    kBrackets_rows[30]: 13040426354353828713ull -> 7489452283312605238ull [H-THIN]
    kBrackets_rows[31]: 14801076939233187415ull -> 12683946654012290214ull [H-THIN]
    kBrackets_rows[32]: 16815914518686289691ull -> 17971398269388980488ull [H-THIN]
    kBrackets_rows[33]: 2747558237080166725ull -> 16748341084474510752ull [H-THIN]
    kBrackets_rows[34]: 8660899489027983548ull -> 824168580839598771ull [H-THIN]
    kBrackets_rows[35]: 17102303971583026849ull -> 17966172105988324718ull [H-THIN]
    kBrackets_rows[36]: 15533897202822525630ull -> 12921910347520578453ull [H-THIN]
    kBrackets_rows[37]: 3654409746117594394ull -> 10997125561879301907ull [H-THIN]
    kBrackets_rows[38]: 13081935113382965168ull -> 6586432521644155739ull [H-THIN]
    kBrackets_rows[39]: 10127071882762265462ull -> 5868434502871598073ull [H-THIN]
    kBrackets_final[0]: 10127071882762265462ull -> 5868434502871598073ull [H-THIN]
    kBracketsMag_rows[0]: 16815971932027180960ull -> 7509436481287183131ull [H-THIN]
    kBracketsMag_rows[1]: 8203166635201027950ull -> 9787443206195299241ull [H-THIN]
    kBracketsMag_rows[2]: 17138741981140426534ull -> 9468051353845057081ull [H-THIN]
    kBracketsMag_rows[3]: 1925655849137931056ull -> 11617996857175938359ull [H-THIN]
    kBracketsMag_rows[4]: 14052428529967425108ull -> 17297388508275178983ull [H-THIN]
    kBracketsMag_rows[5]: 9832333236513193860ull -> 8305808312144255951ull [H-THIN]
    kBracketsMag_rows[6]: 16191684320998506441ull -> 6113367866531691422ull [H-THIN]
    kBracketsMag_rows[7]: 8371860663058915477ull -> 9106991683344179872ull [H-THIN]
    kBracketsMag_rows[8]: 8552593071486288536ull -> 14803910782973314363ull [H-THIN]
    kBracketsMag_rows[9]: 1454522877014641667ull -> 8372038073428945080ull [H-THIN]
    kBracketsMag_rows[10]: 2707471427108666620ull -> 7616171107040094915ull [H-THIN]
    kBracketsMag_rows[11]: 16372300294283464170ull -> 10072793551676710573ull [H-THIN]
    kBracketsMag_rows[12]: 13159511447411425168ull -> 202129580709274867ull [H-THIN]
    kBracketsMag_rows[13]: 7564232112284716309ull -> 4132398015409106530ull [H-THIN]
    kBracketsMag_rows[14]: 1543613811599180298ull -> 4510478381903057991ull [H-THIN]
    kBracketsMag_rows[15]: 15537720168749660922ull -> 8742602620032897417ull [H-THIN]
    kBracketsMag_rows[16]: 1622379678095332862ull -> 9123990550757961143ull [H-THIN]
    kBracketsMag_rows[17]: 12005994129115025487ull -> 11712877018079407950ull [H-THIN]
    kBracketsMag_rows[18]: 5070356265405608919ull -> 2366334284611481108ull [H-THIN]
    kBracketsMag_rows[19]: 13665825986379254999ull -> 13240125918553875754ull [H-THIN]
    kBracketsMag_rows[20]: 5146373771364769642ull -> 9789183794260015895ull [H-THIN]
    kBracketsMag_rows[21]: 6239145605357339126ull -> 14154778537780493947ull [H-THIN]
    kBracketsMag_rows[22]: 3824110391792374830ull -> 17674589416348533163ull [H-THIN]
    kBracketsMag_rows[23]: 6558902854431182828ull -> 12580566125972638241ull [H-THIN]
    kBracketsMag_rows[24]: 8689860431737549825ull -> 12408515542794035006ull [H-THIN]
    kBracketsMag_rows[25]: 7395806610126361265ull -> 12236372317329550998ull [H-THIN]
    kBracketsMag_rows[26]: 4003508704365535789ull -> 18175585318787098632ull [H-THIN]
    kBracketsMag_rows[27]: 15338849660478731120ull -> 10989358971982145541ull [H-THIN]
    kBracketsMag_rows[28]: 12122897657346658873ull -> 12151142627304375048ull [H-THIN]
    kBracketsMag_rows[29]: 14082864916763771424ull -> 7079152462663640793ull [H-THIN]
    kBracketsMag_rows[30]: 4695176159045771576ull -> 9430854713541920393ull [H-THIN]
    kBracketsMag_rows[31]: 11640860124898684186ull -> 10120897727742141847ull [H-THIN]
    kBracketsMag_rows[32]: 7934415857533705714ull -> 6015137363156052521ull [H-THIN]
    kBracketsMag_rows[33]: 2180712887517991172ull -> 9143335679527440329ull [H-THIN]
    kBracketsMag_rows[34]: 13696242844024611290ull -> 1965209665081157387ull [H-THIN]
    kBracketsMag_rows[35]: 4388532892304967463ull -> 16559717930979642786ull [H-THIN]
    kBracketsMag_rows[36]: 886913764131836035ull -> 6332179897502099272ull [H-THIN]
    kBracketsMag_rows[37]: 6026087689782884746ull -> 1448475308516474107ull [H-THIN]
    kBracketsMag_rows[38]: 7992738227861920074ull -> 7560963980189861213ull [H-THIN]
    kBracketsMag_rows[39]: 2507370523932097816ull -> 16163234093112718807ull [H-THIN]
    kBracketsMag_final[0]: 2507370523932097816ull -> 16163234093112718807ull [H-THIN]
    kGroups_rows[0]: 428451890117060597ull -> 16343339797501156050ull [H-THIN]
    kGroups_rows[1]: 16045090594768170214ull -> 4412441122235541001ull [H-THIN]
    kGroups_rows[2]: 18166866907386903819ull -> 8796315700613324416ull [H-THIN]
    kGroups_rows[3]: 6958941312543333314ull -> 7395320384889894535ull [H-THIN]
    kGroups_rows[4]: 12357763379855329333ull -> 14779897915981054858ull [H-THIN]
    kGroups_rows[5]: 10319108494843725228ull -> 12902321761157770999ull [H-THIN]
    kGroups_rows[6]: 8057235825342986589ull -> 13233007585699491660ull [H-THIN]
    kGroups_rows[7]: 775027953877311050ull -> 4759091960862828143ull [H-THIN]
    kGroups_rows[8]: 14610483346660466821ull -> 9823824249826547972ull [H-THIN]
    kGroups_rows[9]: 1198104509264338521ull -> 10222432195471458288ull [H-THIN]
    kGroups_rows[10]: 15842771393076564009ull -> 12268080935222816256ull [H-THIN]
    kGroups_rows[11]: 5342656873780671151ull -> 1820590039511046510ull [H-THIN]
    kGroups_rows[12]: 2165268433984104ull -> 13378031530146436277ull [H-THIN]
    kGroups_rows[13]: 16270682949794220379ull -> 12953190010614641206ull [H-THIN]
    kGroups_rows[14]: 14994318600896901474ull -> 1053166407871468103ull [H-THIN]
    kGroups_rows[15]: 3023615581009694835ull -> 9272374160641534696ull [H-THIN]
    kGroups_rows[16]: 13496533941019930808ull -> 10364329263136600283ull [H-THIN]
    kGroups_rows[17]: 6174715221277441970ull -> 4225956051004008949ull [H-THIN]
    kGroups_rows[18]: 5113739070112146000ull -> 7108588782921604133ull [H-THIN]
    kGroups_rows[19]: 1772495940269705534ull -> 5489213286228074399ull [H-THIN]
    kGroups_rows[20]: 10686035606077590379ull -> 10616002336161510798ull [H-THIN]
    kGroups_rows[21]: 17379645375024748460ull -> 9622546459129830553ull [H-THIN]
    kGroups_rows[22]: 3810215059026298411ull -> 944039958041978562ull [H-THIN]
    kGroups_rows[23]: 6980015280280300871ull -> 15116276931277952764ull [H-THIN]
    kGroups_rows[24]: 17653590613423189804ull -> 10604949906509802561ull [H-THIN]
    kGroups_rows[25]: 5097055414090822762ull -> 2073356378818895203ull [H-THIN]
    kGroups_rows[26]: 16040617079938685278ull -> 2582840377395668879ull [H-THIN]
    kGroups_rows[27]: 7474835689400851509ull -> 2562757827364035110ull [H-THIN]
    kGroups_rows[28]: 3588654748202396640ull -> 12699965404948142476ull [H-THIN]
    kGroups_rows[29]: 482256096822295700ull -> 1195332705294901458ull [H-THIN]
    kGroups_rows[30]: 491618572355040023ull -> 16972648823711764497ull [H-THIN]
    kGroups_rows[31]: 15447520409861182807ull -> 4481092489104066192ull [H-THIN]
    kGroups_rows[32]: 13546661642780035054ull -> 7005130885374206459ull [H-THIN]
    kGroups_rows[33]: 586417508450537570ull -> 6610411880574253007ull [H-THIN]
    kGroups_rows[34]: 16805284807511709227ull -> 3204572366595249610ull [H-THIN]
    kGroups_rows[35]: 14582173341406959084ull -> 2120665229545761995ull [H-THIN]
    kGroups_rows[36]: 4670485499468050406ull -> 6282585683572106081ull [H-THIN]
    kGroups_rows[37]: 8464039108905730677ull -> 12064630322548111510ull [H-THIN]
    kGroups_rows[38]: 16757005045255032303ull -> 1478230385172911488ull [H-THIN]
    kGroups_rows[39]: 14459029476982242904ull -> 11603812731166869657ull [H-THIN]
    kGroups_final[0]: 14459029476982242904ull -> 11603812731166869657ull [H-THIN]
    kGroupsMag_rows[0]: 18395077400277767983ull -> 2680312739779497464ull [H-THIN]
    kGroupsMag_rows[1]: 12064304672483746293ull -> 822058034361535600ull [H-THIN]
    kGroupsMag_rows[2]: 14523426078186844972ull -> 3962469670734696157ull [H-THIN]
    kGroupsMag_rows[3]: 8862832225214863179ull -> 17411473840245726690ull [H-THIN]
    kGroupsMag_rows[4]: 14588621505662414032ull -> 5739216726257722739ull [H-THIN]
    kGroupsMag_rows[5]: 4447156622707225162ull -> 4823834691276900811ull [H-THIN]
    kGroupsMag_rows[6]: 4361493804042466119ull -> 14557402943266793758ull [H-THIN]
    kGroupsMag_rows[7]: 1804450653994911768ull -> 17153420186503897123ull [H-THIN]
    kGroupsMag_rows[8]: 14783451729418173724ull -> 11456037253658883689ull [H-THIN]
    kGroupsMag_rows[9]: 8082972508033422197ull -> 2071497720185716146ull [H-THIN]
    kGroupsMag_rows[10]: 8979544420957768909ull -> 10228359593541992710ull [H-THIN]
    kGroupsMag_rows[11]: 7493375864971444891ull -> 8164374031973170202ull [H-THIN]
    kGroupsMag_rows[12]: 2222992351194986144ull -> 14741153401126253421ull [H-THIN]
    kGroupsMag_rows[13]: 11771896598749089907ull -> 5321723665543660526ull [H-THIN]
    kGroupsMag_rows[14]: 12560649180545194470ull -> 13847739486469904387ull [H-THIN]
    kGroupsMag_rows[15]: 14421558832844187772ull -> 5160912244748048563ull [H-THIN]
    kGroupsMag_rows[16]: 4296761660805133425ull -> 9669498150986227540ull [H-THIN]
    kGroupsMag_rows[17]: 742061714794648722ull -> 8947635553433824973ull [H-THIN]
    kGroupsMag_rows[18]: 14109205439874640145ull -> 12178890551572236268ull [H-THIN]
    kGroupsMag_rows[19]: 6057192239224243194ull -> 5673400076925890495ull [H-THIN]
    kGroupsMag_rows[20]: 18247263908222071868ull -> 15315129035357191511ull [H-THIN]
    kGroupsMag_rows[21]: 17174776223039553865ull -> 13281596230891049428ull [H-THIN]
    kGroupsMag_rows[22]: 13727420337195600730ull -> 4615956555268131813ull [H-THIN]
    kGroupsMag_rows[23]: 2818312375125287588ull -> 5864244316711809037ull [H-THIN]
    kGroupsMag_rows[24]: 9915087812300743522ull -> 1805681795225876151ull [H-THIN]
    kGroupsMag_rows[25]: 7161399393808283031ull -> 3885225909948070556ull [H-THIN]
    kGroupsMag_rows[26]: 2862680592861432951ull -> 16301392942591338516ull [H-THIN]
    kGroupsMag_rows[27]: 1307007383947855281ull -> 16771933549340211026ull [H-THIN]
    kGroupsMag_rows[28]: 18356049985413183826ull -> 1873451560715463970ull [H-THIN]
    kGroupsMag_rows[29]: 15935937615335005856ull -> 8712225159834374858ull [H-THIN]
    kGroupsMag_rows[30]: 16415296467281494110ull -> 3729496159990057708ull [H-THIN]
    kGroupsMag_rows[31]: 16803171265864625638ull -> 1612160720622215895ull [H-THIN]
    kGroupsMag_rows[32]: 10957401283361829601ull -> 5717348211442227590ull [H-THIN]
    kGroupsMag_rows[33]: 11252967136817419064ull -> 2472676727577223345ull [H-THIN]
    kGroupsMag_rows[34]: 4760661672048575327ull -> 8470082562618443630ull [H-THIN]
    kGroupsMag_rows[35]: 14915144339907298167ull -> 1840587632070777498ull [H-THIN]
    kGroupsMag_rows[36]: 575503570718308907ull -> 15629226293335228938ull [H-THIN]
    kGroupsMag_rows[37]: 5741952581690045810ull -> 2022458278016162571ull [H-THIN]
    kGroupsMag_rows[38]: 1055864288829102030ull -> 13820365368293950247ull [H-THIN]
    kGroupsMag_rows[39]: 16431710829567235323ull -> 7247005295497143736ull [H-THIN]
    kGroupsMag_final[0]: 16431710829567235323ull -> 7247005295497143736ull [H-THIN]
    kStopLimit_rows[0]: 4402211772532359251ull -> 10950004051556324382ull [H-THIN]
    kStopLimit_rows[1]: 5449557300220864793ull -> 14490347146816688448ull [H-THIN]
    kStopLimit_rows[2]: 2575787073227669374ull -> 17137431077388642227ull [H-THIN]
    kStopLimit_rows[3]: 9938418473191636202ull -> 2067378368474728109ull [H-THIN]
    kStopLimit_rows[4]: 10058127381824367565ull -> 11488424314019716432ull [H-THIN]
    kStopLimit_rows[5]: 1315470856055524560ull -> 8954327035592863039ull [H-THIN]
    kStopLimit_rows[6]: 15263698702667167777ull -> 7512665423720105326ull [H-THIN]
    kStopLimit_rows[7]: 13220310601440668918ull -> 4187947268963235259ull [H-THIN]
    kStopLimit_rows[8]: 15409637845860903908ull -> 2913839783495075163ull [H-THIN]
    kStopLimit_rows[9]: 6446798858981198964ull -> 17362053743420220567ull [H-THIN]
    kStopLimit_rows[10]: 10451839227886399841ull -> 18277069102810285906ull [H-THIN]
    kStopLimit_rows[11]: 11816001997725235374ull -> 6966128010082440393ull [H-THIN]
    kStopLimit_rows[12]: 1932657111780796664ull -> 343766021385529931ull [H-THIN]
    kStopLimit_rows[13]: 5608877402063171472ull -> 14896797560397420035ull [H-THIN]
    kStopLimit_rows[14]: 4816751693073396948ull -> 17434159485109243471ull [H-THIN]
    kStopLimit_rows[15]: 406036428804793947ull -> 6133926189978579814ull [H-THIN]
    kStopLimit_rows[16]: 8411172447822998997ull -> 13535889090349139748ull [H-THIN]
    kStopLimit_rows[17]: 9566812430047964551ull -> 7154291922301271050ull [H-THIN]
    kStopLimit_rows[18]: 7047212701932505101ull -> 12262784895722576372ull [H-THIN]
    kStopLimit_rows[19]: 12944086715960255318ull -> 127621…
One pass over every page check_doc_anchors.py scans, after the last pick, the
behaviour pins and the hash re-pin, so the digits are the final tree's.
Digits only: no sentence changes.

How, in order:
1. The multi-origin exact map (INT24's int24_exact_reanchor.py, INT19's
   method with --exclusive-first): main 0d76a09 first, then each lane's tip
   in pick order (H-MEASURE 2b494497, H-DOCGATES 68b974f2, REL10 bda36e1f and
   5582fff2, K-OCA-KEEP 399601b9, PAR-ORDERS 6945fc19, PAR-ORDERS-2 9f7a025c,
   PAR-MARGIN 38442cec, PAR-MARGIN-2 3ea143e5, PERF-KEDGE f1f3febd, CI-RUNNER
   f313049f, H-THIN 09f0bbda, PAR-CASHFEE b44b10b4): each anchor carried through an exact difflib
   line map from the tree its digits were written against. 1721 anchors: 533
   moved, 1047 kept, 141 stuck (digits a pick's digit merge wrote, which no
   single origin carries).
2. The gate's own --fix (the unambiguous symbol misses), then
   anchor_origin_fix.py for the rest: walk every INT26 commit and lane tip,
   newest first, to the commit where the anchor was last TRUE by the gate's
   own judge(), carry its lines through the exact map to this tree, and
   re-judge here -- 22 by the same digits, 26 by the same line and position
   (the lane tip's own digits: H-THIN 09f0bbda, H-DOCGATES 68b974f2,
   PERF-KEDGE f1f3febd).
3. By hand, each checked against the code it names: `max_open_lots`
   pineforge.h:505; `exit_from_bracket` pine_strategy_host.cpp:870 (in
   adapter_label_bracket_trades); `declare_security_sites_to_kernel`
   pine_strategy_host.cpp:1158; `leg_activation` pine_adapter.cpp:869-874
   (the bind the base cited); `submit_margin_call_slice` pine_adapter.cpp:13979
   and `schedule_margin_call_path` pine_adapter.cpp:14519; MG4's
   `AdmitWithHostMargin` pine_adapter.cpp:13079-13145 and 13078-13080 (main's
   13280-13345 and 13279-13281, carried by content, which INT25's stale_scan
   found kept at main's digits); design row 135's
   native_execution_consumer.cpp:1438-1454 (main's 1429-1445, the same).

Results on this tree:
- check_doc_anchors.py: 1721 anchors, 1721 OK, 0 bad.
- stale_scan.py against 0d76a09: 2 reports, both false: main cited
  `max_open_lots` native_run_spec.hpp:596 while its field sat on 595; the field
  is on 596 here.
- verify_carry.py over the same origins: 1668 EXACT (an origin cites the same
  text), 27 EDITED (a pick rewrote the cited lines; each still passes the
  gate's claim), 26 NEW (prose the picks and INT26 wrote).
- check_doc_lint.py: no offenders. docs/build.sh: Doxygen warnings 0.
- The floor citations name the assignment lines (ci_verify.py:260 and :390).

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
…blings its leg had (R5 lane INT26, round 2: the gate sweep's leaver)

INT26's gate sweep (exp-r5-int26-20260926 against rebaseline e69aa1f7)
refused the merge on one leaver,
scrapper:data-BINANCE-BTCUSDT/standard/vasudevshenoy-manoj-betrayed-me
(BTCUSDT 15m, process_orders_on_close, pyramiding 0; stop entries
'Buy'/'Sell' with strategy.exit stop/limit brackets, a pending entry
cancelled when the next bar does not trigger it): 821 of TradingView's 821
trades on main 0d76a09, 820 on ebe6748 (canonical 100 -> 99.9).

Bisect (the probe's own feed, spark, one build per pick boundary): a6e6a00
and 2922ade book 821, e1d7a98 -- R5 lane PAR-ORDERS, H-MEASURE Finding 6b,
a process_orders_on_close stop entry its placing close already reached
fills at that close -- books 820, and so does every later pick.

Mechanism, on 2025-08-03 10:00 UTC. The 09:45 close cancels its pending
'Buy', places it again (stop 113689.29) and re-issues 'Buy Exit' (limit
113771.41); the re-issued legs keep their older book slot, so on the 10:00
bar the pre-script drain settles the limit on its parent's touch bar --
after that bar's receipt read. The 10:00 bar closes at its high 113771.47;
its body cancels 'Buy' again and places it at that high with a fresh 'Buy
Exit' (limit 114004.53), and since e1d7a98 the close pass fills that
re-entry at the close, as TradingView does (#274), so the fresh legs are
working when 10:15 opens. The first limit's terminal receipt is read only
then, and observe_terminal_receipts' sibling cancel withdrew every working
leg of the same exit id, from_entry and origin -- the fresh bracket's
included, both legs at origin 0. The re-entry ran on to the 15:15 session
close and swallowed TradingView's #275 (11:45). Before e1d7a98 the
re-entry rested to 10:15, its legs still staged, so the late read found no
sibling to take. The pick is right; the sibling cancel was not.

Fix, adapter only: cancel_bracket_siblings takes the ordinal the terminal
receipt executed at when the observer reads it, and skips a matching leg of
a later strategy.exit call (another command_sequence) that the kernel
accepted after that ordinal (its Birth::acceptance_ordinal, read through
native_working_requests() only when such a leg is among the matches): that
leg is the same id's later order. A leg of the filled leg's own call is its
sibling however late it was accepted -- the drain submits a bracket's legs
one at a time, executing each, so a stop can be accepted after its limit
filled -- and goes as before (a review of the first form, which skipped
every leg accepted after the fill, found that case). The close passes that
call it synchronously pass nothing and are unchanged. No state is added.

The probe (spark, generated.cpp of codegen a4259656, the lane feed
6b54c44a): 821 trades, canonical rubric excellent, countAbsDelta 0 (820 /
strong before). TradingView's #273-#275 exact: 10:00 113689.29 -> 10:00
113771.41; 10:00 113771.47 -> 11:00 114004.53; 11:45 114005.84 -> 15:15
113844.70. 819 of 821 trades exact to the minute and cent on both legs
(main: 771; the two others, #1 and #3, differ on main too).

Witness: tests/test_pooc_stop_reentry_bracket_tapes.cpp replays three `lab
tv --no-note` tapes of synthetic scripts of the same shape on NYSE:F 15m
(tests/fixtures/pooc_stop_reentry_bracket; tv_trades e0447b53 / b7e89ce1 /
efbd25e3): three flat signal closes that each cancel and place again a stop
entry with its bracket, 10c beyond the close, then 1c (the next bar fills
the entry and then the limit and closes flat), then at that close (filled
there), long on bars 39-41 and short on bars 44-46; TradingView books the
same four rows on the chart and under the magnifier. Every row is compared
field by field, with the end book and its working bracket legs.
- int26-reentry-bracket-chart: all four rows, flat; the short is the
  leaver's shape.
- int26-reentry-bracket-mag records a divergence the fix does not touch
  (the same before and after): there the drain leaves the short's retained
  limit to the flush below the body, whose book still holds the short, so
  the re-entry is never placed -- rows 1-3 exact, both books flat.
- int26-reentry-noexit-chart, the control: the short's re-entry places no
  strategy.exit (TradingView's row 4 still open at the end); the short
  bracket's stop, accepted after its limit filled, must still be withdrawn.
Fail-before: against ebe6748 2 of 27 checks fail (the chart tape: 3 rows
against 4, short 100 against flat); against the first form of the rule 1 of
28 (the control's stop left working); after, 28 of 28.

Floors: one source-bound row. RELEASE_MIN_TESTS 702 -> 703,
EXCLUDED_REGISTERED_MIN 683/683/692 -> 684/684/693 (and
test_ci_verify's expectation, docs/ci.md). KERNEL_MIN_TESTS unchanged.
docs/ci.md's sentence "The PR registration floors at INT26 are 683 for
Debug and sanitizers and 692 for native" is rewritten with the new counts.

Docs: the design page's PAR-ORDERS paragraph records the rule and the
magnified divergence; the CHANGELOG 1.0.0 entry's process_orders_on_close
item adds it for a user. Every doc anchor carried onto this tree by the
exact line map from ebe6748 (135 moved); the three citations of
ci_verify.py's RELEASE_MIN_TESTS line (CONTRIBUTING.md, contributing-llm.md
twice) set by hand, 390 -> 393.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
@luisleo526
luisleo526 merged commit d093560 into main Sep 26, 2026
7 of 17 checks passed
luisleo526 added a commit that referenced this pull request Sep 27, 2026
…fills at extremes, O(bars) drawing checkpoints, dynamic TA lengths, finer-than-feed security, zoned session speed (#291)

* Read a request.security finer than every supplied feed as na instead of stopping the run

TradingView reads a lower timeframe from that timeframe's own bars and keeps
the last 2,000,000 of them. On BINANCE:ETHUSDT.P 15m and 1D over
2025-04-01..2026-05-01, request.security(tickerid, "5S", close) is na up to
2026-01-04 22:45 UTC and "15S" up to 2025-05-18 03:15 UTC; the 1m series
(568,783 bars) is whole. A gaps_on read is na on the 27 chart bars that hold
no 5S bar. A chart bar holding no loaded bar of the requested timeframe reads
na (lab tv pf-krunerr-ltf-horizon, -ltf-values, -ltf-count2, 2026-09-26).

The campaign lanes' finest bars are 1m, so a "5S" or "15S" site has no loaded
bar anywhere, yet validate_security_timeframes refused it: "request.security:
requested timeframe '5S' is finer than input '1'". That stopped all 14 rows of
karmasantosh773-growwithcare-final-5s-master-strategy (baseline e69aa1f7).

Where the host already supplied bars finer than the chart -- the auxiliary
slice, or an input finer than the script timeframe -- such a site is now
marked no_loaded_bars and never fed, so it and its TA read na throughout. A
chart fed without intrabar bars (input_tf == script_tf) keeps the refusal,
unchanged: it asks the host for finer bars, and the verifier's split-feed
retry keys on it. This is Pine request.security semantics, so it lives in
the source adapter (ADR-0001 rule 1); the kernel is untouched.

The flag is folded into the source security hash only when set, so every
site that loads bars keeps the digest it had: no witness moves.

tests/test_security_finer_than_feed.cpp (release-only, floor 678 -> 679):
15m chart + 1m slice with "5S"/"15S"/"30S" beside a served "1" site, a 1D
chart, a 1m input aggregated to 15m, and the unchanged refusal of "5S" and
"5" on a chart fed alone. At 0d76a099 the first three stop with the
population's own error (9/22 checks). test_pine_security_state_hash carries
the new field's mutation row. Doc anchors into the header and ci_verify.py
move with the inserted lines.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
(cherry picked from commit d82fb6f04b07e6922fd406abc4968d7dd1fb5788)

INT27 pick note: every source, header and test hunk applied unchanged. The
docs conflicts were citation digits only (the lane's header and ci_verify.py
insertions against INT26's re-anchored pages), merged token by token; INT27's
single re-anchor pass sets every digit on the integrated tree. The release
floor is INT26's 703 plus this row, 704.

* Keep an after-close Muhurat session's own slice on the calendar split feed

The nifty-1d lane's chart feed -- TradingView's own NSE:NIFTY 1D bars --
holds Muhurat sessions held after the regular close: Monday 2022-10-24
18:15 IST and Sunday 2023-11-12 18:15 IST. prepare_aux_security_chart_ranges
keys a calendar bar by the session it covers (11febbc7, for OANDA's
break-stamped dailies), and such a bar covers the NEXT regular session, the
key of the native bar after it. The strictly-increasing key guard then
stopped every split-feed run on the lane: "native chart feed trading-period
identities must be unique and strictly increasing with an auxiliary security
feed". karmasantosh773-growwithcare-final-5s-master-strategy on nifty-1d
reached it once its "5S" sites stopped refusing.

The calendar route partitions the auxiliary bars by the native timestamps,
[chart_ts[i], chart_ts[i + 1]), which are strictly increasing (checked just
above), so the Muhurat bar and the next regular bar keep their own slices.
The guard now refuses only a calendar key that runs backwards; intraday keys
are the routing labels themselves and stay strictly increasing. Only runs
that stopped here change.

tests/test_security_finer_than_feed.cpp gains the scenario: Friday, the
Sunday Muhurat and Monday as three native bars with two 1m bars each read
12 / 22 / 32 from a "1" site, and a "5S" site stays na. Before this commit
it stops with the duplicate-identity error (27/30 checks). Doc anchors into
pine_aux_security.cpp move with the inserted lines.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
(cherry picked from commit 281186653c29b74a55137449c41685e17e2aad44)

INT27 pick note: the source and test hunks applied unchanged; the one docs
conflict was citation digits only, merged token by token (INT27's single
re-anchor pass sets every digit on the integrated tree).

* Kernel: session-day facts on a certified cycle of an exchange zone resolve no calendar interval per bar (R5 lane PERF-ZONED)

PERF-KEDGE recovered KERNEL-EDGE's per-bar cost on UTC calendars only. On
every other zone present_session_day still resolved the bar's script interval
through the calendar memo at every bar, and read the label and both neighbours
through it: a New York 5-minute FeedTolerant run cost 1.73x the instructions of
1a0e7ea1 (+2,443 Ir a bar), a Tokyo 1-minute run 1.22x (+3,439).

native_calendar::cycle_certificate certifies the session day holding an
instant when the zone makes its cycle read from that day alone: UTC or a fixed
offset, or, under glibc or macOS, a TZif v2+ zone whose 64-bit table covers the
reach (22 days around the cycle, widened by the spacing) and whose transitions
there move the offset by at most 3 hours, between offsets within 14 hours of
UT, never backwards while keeping the daylight-saving flag, and at least 8 days
apart, each read back from libc (localtime on both sides, chained). Then every
civil time in reach resolves to the first instant the wall clock reaches it,
whatever was resolved before: one reading is found from any start; the two
readings of a fold that flips the flag are both found (glibc's mktime probes a
week at a time for the flag asked, and the spacing puts that probe on the
fold's own side; macOS's mktime keeps no state) and resolve_stamp keeps the
earlier; a gap resolves to the move itself inside the 14-hour search. So the
cycles tile, each instant's local date is within a day of its cycle's open
date, the memo's candidate lookup finds exactly that day, and no other day
holds its instants. The zone is asked first, around the instant, and a day is
resolved only where it holds: a refused certificate asks the calendar nothing.

On a certified cycle present_session_day reads an instant in one of the day's
spans in session on the day's ordinal, and an instant whose fixed bucket
(fixed_bucket_ms, the calendar's own unit) meets no span out of session,
resolving nothing. A bucket that reaches a span from outside one, every
instant a certificate refuses, the walk and the scheduled close make the calls
they always made. Measured on spark (instructions:u, A725 core 12):

- zoned configs, 3000 bars idle, main 1a0e7ea1 / f1f3febd / this commit:
  NY 5m tolerant 1.7294x -> 1.0000x, NY 1m tolerant 1.7648x -> 0.9993x,
  Tokyo 1m tolerant 1.2201x -> 1.0003x; every canonical and tolerant config
  of NY, Tokyo, Chicago, London, Kolkata and UTC at most 1.0008x main;
- the 100 public slots against f1f3febd: median 0.9952 (magnifier on),
  0.9942 (off), no slot above 1.0; against main 1.0013 / 1.0001;
- the budget workload: +0.41% over main at f1f3febd, +0.32% here.

Identity (spark, f1f3febd against this commit, byte for byte): 100 slots x
magnifier off/on with trade digests, equity and broker_state_hash; the
132-configuration battery on 8 host variants with every hash column; the
KERNEL-EDGE probes and the AUDIT4 acid tests; PERF-KEDGE's facts battery (9,216
rows); a new 60-window zoned facts battery (45,600 rows: 2024 changes of New
York, Chicago, Denver, Los Angeles, St John's, Havana, Santiago, London,
Berlin, Dublin, Sydney, Lord Howe, Auckland, Chatham, Casablanca, Troll; Sao
Paulo 2018/19, Tehran 2021, Apia and Tongatapu at +14, Caracas, Pyongyang;
constant zones; and the refused folds and jumps of Tokyo 1887, Sitka and
Juneau 1867, Apia 2011, Kwajalein 1969, Moscow 2011/2014, Recife 2000, New
York 1883 and 2040, Amsterdam 1937, Manila 1844); the Pine witness replay.

- native_calendar.cpp / native_calendar_memo.hpp: cycle_certificate,
  fixed_bucket_ms, SessionDayMemo::libc_local_reads() (a derived cost
  reading), the TZif v2+ table reader, and tz_read_resource shared with the
  identity digest.
- native_execution_consumer: the certified-cycle cache (four entries, the
  last hit first), certified_point, certified_interval_meets_span; the
  PERF-KEDGE UTC member calendar_is_utc() is gone (a UTC calendar certifies
  every cycle).

ADR-0001 rule 2: a generic capability of the run's own calendar -- its zone
is data, the same for every venue -- with no spec field, switch or Pine
vocabulary, and no answer moves. The only platform condition picks the libcs
whose mktime the proof reads; elsewhere TZif zones take the exact path.
Nothing is hashed: the facts fold into no digest and the new members are
derived memos.

Witness, tests/test_native_session_day_zoned.cpp (kernel-only):
certificates at real transitions (New York, Chicago, London, Sydney, Lord
Howe 2024 certified where the host's table lists them; Tokyo, Kolkata, a
fixed offset, Apia at +14, Sitka's +14:58:47 and Moscow 2015 certified; Tokyo
1887, Sitka 1867, Apia 2011, Kwajalein 1969, Moscow 2014, Recife 2000, New
York 2040 and POSIX zones refused, a refused certificate reading nothing),
each certified cycle checked against the memo-free session_day_at; the same
tapes under each TZif zone and its POSIX twin (never certified) present
identical facts at every decision point over 8 windows, 7 sessions and 12
runs each, plus the magnifier, seconds and undetected paths (700 runs, 0
mismatches); and New York and Tokyo FeedTolerant batches resolve no interval
for their facts where their twins resolve one a bar. Fail-before at f1f3febd:
"no member named 'libc_local_reads' in
'pineforge::native_calendar::SessionDayMemo'". 17 of 19 mutants fail it; the
two that survive loosen guards no zone in the host's database reaches (the
14-hour offset bound, the libc chain check). The PERF-KEDGE witness's probe
reads the memo's UTC decision directly and its header records the change.

Floors: kernel 278 -> 279, release 679 -> 680, PR registration 660/660/669
-> 661/661/670 (ci_verify.py, its self-test pin and docs/ci.md). 24 doc
anchors carried through the exact line map from f1f3febd; the 6 that cite the
two rewritten floor lines set by hand (ci_verify.py:253, :365).

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
(cherry picked from commit 27e1f384f1063c13efe3961ff58b8a0c6410c425)

INT27 pick note: the lane's base f1f3febd is PERF-KEDGE's tip, which INT26
carries as a3b4b971/debbd7f1. Every source, header and test hunk applied
unchanged against INT26's text (each file's patch is byte-identical to the
lane's), and no other caller of PERF-KEDGE's calendar_is_utc() is left on
the merged tree. The floors are INT26's plus K-RUNERR's plus this lane's row:
kernel 287 run (288 registered), release 705, PR registration 686/686/695
(ci_verify.py, its self-test pin and docs/ci.md). The docs conflicts were
citation digits, merged token by token (INT27's single re-anchor pass sets
every digit on the integrated tree), and the one floors paragraph, rewritten
with the merged counts.

* Pine v6 strategy() defaults: TradingView's tapes, replayed under the configuration the generated constructor declares

TradingView changed three Pine v6 strategy() defaults around
2026-09-24T20:45Z. For a v6 script that omits them it now uses
initial_capital = 100000, default_qty_type = strategy.percent_of_equity and
default_qty_value = 100 (100 whatever the type: 100 contracts under
strategy.fixed, 100 of the account currency under strategy.cash), where it
used 1000000 / strategy.fixed / 1. Pine v5 keeps the old three, and none of
the other strategy() defaults moved: lane TV-DEFAULTS exported 244 controlled
lab-tv tapes of synthetic probes (Pine v5 and v6; BINANCE:BTCUSDT, NYSE:F,
BINANCE:ETHUSDT.P and CME_MINI:ES1! 15; each parameter omitted, at its old
default and at a value that moves the tape).

The defaults are Pine policy -- what an omitted strategy() argument means, by
language version -- so the kernel does not learn them (ADR-0001 boundary
rules 1 and 2: a default capital or order size means nothing to a venue that
states its own account, and a kernel knob would be hash-visible surface for a
value every host already declares in its NativeRunSpec; engine.hpp's
initial_capital_ member default is overwritten from the spec at every run
begin). PineStrategyConfig's member defaults stay 1000000 / fixed / 1 -- Pine
v5's, and what every hand-built source host relies on -- and pineforge-codegen
(cg/tvdefaults d7e095f) declares the v6 values in the generated constructor
for a script that omits them.

test_tv_strategy_defaults replays seven of those tapes (BINANCE:ETHUSDT.P 15,
2025-04-01..05-01, byte-for-byte in tests/fixtures/tv_strategy_defaults)
through the Pine adapter over 521 corpus 15m bars (bars.inc), under the
configuration the generated constructor declares for each probe, and requires
every trade the tape closes inside them -- 6 of 42 or 8 of 58, two v6 margin
refusals among the six -- to be the engine's on TradingView's 0.01 tick and
0.0001 lot: an omitted capital (100% of 100000), an omitted type (1% of
equity), an omitted value (100 contracts; 100 USDT), all three omitted, and
two probes that declare every one, which run the same configuration either
way. Under the configuration the pre-lane constructor declared, the host's
defaults for the omitted arguments, each of the five omitted-argument probes
misses its tape. The row pins the engine side; codegen's
test_e2e_strategy_defaults pins the emission end to end on the same tapes and
fails on codegen a4259656.

Floors: the row is source-bound, so RELEASE_MIN_TESTS 678 -> 679 and the PR
registration floors debug/sanitizers/native 659/659/668 -> 660/660/669 (the
kernel floor stays 277); the floor notes are folded into the comment lines
already there, so no line the documentation anchors moves. No hash witness
moves and no engine source changes; the cheatsheet and configuration page
state the v6 defaults.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
(cherry picked from commit 4b457291ab1100c812384923e8de7eb442a6a3f8)

INT27 pick note: the engine half of lane TV-DEFAULTS only -- the row, its
seven tapes, the docs and the floors. The lane's second commit, 1320b01d
(the corpus gitlink f989e36 -> b73f8d6 and its baseline line), is not
picked: its six initial_capital pins wait for the next corpus regeneration,
and the corpus stays at b40aa8e. The test, fixture and docs hunks applied
unchanged; the floors are INT26's plus K-RUNERR's and PERF-ZONED's plus this
row: release 706, PR registration 687/687/696 (ci_verify.py, its self-test
pin and docs/ci.md); the kernel floor does not move.

* Kernel: a retained lower bar walks its own four turning points, and a bar that traded nothing at one price is one point (R5 lane MAG-INTRABAR)

- NativeExecutionConsumer::deliver_intrabar_script: a lower bar the direct
  four-sample path declines (a leg of zero length, an open at its own low) is
  walked through its four corners, the repeated one included, instead of the
  general ENDPOINTS sampler's uniform fill -- every sample is a margin check
  point since PAR-MARGIN, so the fill measured a price the bar never printed
  there; a bar with volume 0 and open = high = low = close is one discrete
  sample, walked once.
- ADR-0001: the rule-2 row (a mechanism correction, no knob).
- tests/test_native_intrabar_turning_points.cpp (kernel-only, new row): the
  open-at-its-low sub-bar's marks are 60 60 90 85 and the call armed at that
  open is booked at 60; a volume-0 one-price sub-bar gives one mark. Against
  3ea143e5's library 4 of its 21 checks fail (the uniform 77.5, no call, 12
  marks on bar 3); against the v18 closure the TU does not compile ("no member
  named 'IntrabarSample'").
- tests/test_magnifier_ordered_sampler.cpp: a lower sub-bar with a
  zero-length leg is expected at its corners.
- Floors: kernel 279 -> 280, release 681 -> 682 (the new row registers in
  both); docs/ci.md and the floor citations follow; published anchors
  re-anchored to the moved kernel lines.

No witness value moves; the 65 ctest rows that run a lower path or the
magnifier pass unchanged on this commit.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
(cherry picked from commit 4a89056ce2faba4605db1b79e97d7178640aecb4)

INT27 pick note: the lane's base 3ea143e5 is PAR-MARGIN-2's tip, which
INT26 carries under other shas. The kernel, test and CMake hunks applied
unchanged (each file's patch is byte-identical to the lane's). The ADR-0001
rule-2 row sits after PAR-MARGIN-2's margin_segment_origin row, above
H-DOCGATES' inventory rows, where INT26 put the other mechanism rows. The
floors are INT26's plus the earlier INT27 picks plus this row: kernel 288
run (289 registered), release 707, PR registration 688/688/697 (the lane
counted no PR registration floor; its kernel row registers in all three
excluded profiles). The other docs conflicts were citation digits, merged
token by token (INT27's single re-anchor pass sets every digit on the
integrated tree).

* Adapter: the bar magnifier walks TradingView's own intrabars -- its table's timeframe, each owned by the chart bar of its last minute (R5 lane MAG-INTRABAR)

TradingView's magnifier does not walk the host's 1-minute feed: its help-centre
table picks the intrabar per chart timeframe (1 -> 10S, 5 -> 30S, 10 -> 1,
15 -> 2, 30 -> 5, 60 -> 10, 240 -> 30, 1D -> 60, 3D -> 240, 1W -> 1D), each
intrabar is the symbol's regular bar anchored at the session day's open and
cut at its close, and it belongs to the chart bar that holds its LAST minute.

- source::tradingview_intrabar_timeframe / tradingview_magnifier_bars
  (include/pineforge/source/magnifier_intrabars.hpp, src/source/
  magnifier_intrabars.cpp): build that path from the input feed on its own
  grid -- the chart bar's open as a volume-0 print when its first intrabar
  straddles into it, each owned intrabar aggregated and stamped at its first
  input (a straddler one millisecond after the print), the chart bar's close
  as a print when its last minute belongs to the next bar's intrabar. The
  input comes back unchanged when the intrabar cannot be built from it (a 1-
  or 5-minute chart needs 10S / 30S bars) or a calendar interval is
  unresolved.
- PineExecutionAdapter::project hands that path to IntrabarPath::lower_tf.
- calc_on_order_fills on that path (72 of 72 TradingView cascades): the open
  point is the walked intrabar's own Open, re-admitted at every intrabar
  (PineStrategyHost::on_native_sub_bar -> PineScheduler::sub_bar_complete);
  next_input_waypoint looks the bar up on the lower path and returns the
  intrabar's open, first and second extreme, then the next intrabar's open
  (never its close; a print goes straight to the next open), with the
  adapter's own same-point rule (coof_fill_at_path_point) for a booked tick;
  a market entry or close whose next point is the next intrabar's open stays
  a plain market order (coof_waits_for_next_sub_bar), which the kernel fills
  there even at the price the recalculation stands at. broker_bar reads the
  walked intrabar.
- Tests: test_magnifier_tradingview_intrabars (the table, grids, sessions,
  ownership; 168 checks) and test_adapter_magnifier_intrabar_tapes
  (TradingView's request.security_lower_tf intrabars for 1m..1D on ETH,
  NSE:NIFTY and NYSE:F; three bracket tapes; the two refill tapes; 1160
  checks), new rows, fail-before "magnifier_intrabars.hpp file not found".
  The differential's intrabar rows now assert TradingView's rows on all 20
  magnified tapes (0130 no longer recorded). Re-pinned to TradingView's
  cascade: the calc_on_order_fills twin's adapter lots and
  test_adapter_coof_relower's refill trace -- 100 @900000, then the straddler
  100, 100, 99, 101 @900001, then 100.1 @960000 (were 100, 100, 99, 101,
  100.25 @900000, 100.1 @960000).
- Fixtures: tests/fixtures/magnifier_intrabars (13 lab tv exports of the
  lane's own scripts, bars_1m.inc, README); intrabar_margin README updated.
- Docs: magnifier page (the intrabars a Pine strategy walks), pine-to-native
  use_bar_magnifier row, native-engine margin passages, ADR-0001 (the
  adapter's path and refill points; the kernel row's writer), design rows
  CT9 and E4; anchors re-anchored.
- Floors: release 682 -> 684 (two source-bound rows).

No witness value moves (the release ctest's witness rows pass unchanged).

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
(cherry picked from commit 9df16c24b6186b9adadaedfd2d467e76ecffe9e3)

INT27 pick note: the lane's base 3ea143e5 predates INT26's PAR-ORDERS and
PAR-ORDERS-2 picks, which rewrote the same recalculation code. Composed,
each lane's intent kept:
- PineExecutionAdapter::close keeps PAR-ORDERS-2's second-extreme rule on
  the chart path (coof_close_at_second_extreme) and gains this lane's
  next-intrabar rule on a lower path (coof_close_next_sub_bar); entry()
  merged cleanly the same way.
- test_adapter_coof_relower's refill lots and test_native_calc_timing_twin's
  adapter lots take this lane's prices (TradingView's cascade on the
  2-minute intrabars: 100, then 100, 100, 99, 101, then 100.1) at
  PAR-ORDERS' instants (every magnified fill dated at its chart bar's open,
  900000); both rows pass on the merged tree, and both lanes' sentences are
  kept.
- tests/CMakeLists.txt: git's clean merge closed H-MEASURE's fixture list
  twice and repeated its margin row; the list is closed once, with this
  lane's tape row inside it.
- Floors: release 709, PR registration 690/690/699 (the lane counted no PR
  registration floor; its three rows register in all three excluded
  profiles).
- Docs: the design rows CT9 and E4 keep INT26's re-anchored text and gain
  this lane's sentences; the ADR row of the kernel's lower-bar samples takes
  this lane's text above H-DOCGATES' rows; the rest were citation digits,
  merged token by token.
On this commit H-MEASURE's test_magnified_aggregated_tape, a row the lane's
base did not carry, fails: its v3 row 2 now books TradingView's fill (a move
toward the tape), and v2/v3 row 5 moves away from it -- the next commit
(INT27 merge) settles both.

* INT27 merge: a magnified recalculation's market order after the matcher's fill at an intrabar's second extreme fills there

R5 lane MAG-INTRABAR's base (PAR-MARGIN-2's tip) did not carry INT26's
PAR-ORDERS-2 picks or H-MEASURE's test_magnified_aggregated_tape, so the two
lanes' rules met first on this tree.

- PAR-ORDERS-2 (H-MEASURE Finding 6d): the matcher's fill of a resting
  request at its own level AT a bar's second extreme ends the leg there, and
  the recalculation's market order fills at that extreme; a fill the adapter
  forced there advances. It is written for the chart path
  (PineExecutionAdapter::coof_fill_at_second_extreme); on a lower path the
  magnified run met it only by accident: the old next_input_waypoint took an
  off-grid extreme's booked tick for a fill short of it and returned the
  extreme.
- MAG-INTRABAR: a magnified run walks TradingView's 2-minute intrabars, and
  after an intrabar's second extreme the next fill point is the next
  intrabar's open (mi-coof-refill*, 72 of 72 cascades, every one a market
  order's -- forced -- fill), with the same-point rule that no longer
  mistakes a booked tick for a fill short of its print.

Together, on hm-mag-diff-v2 and -v3 bar 19 (NYSE:F, 14:15 ET) PX's limit
fills at its own level on the high of the 14:26 intrabar (11.715, booked
11.72), its second extreme, and the ML entry its recalculation places went
to the 14:28 intrabar's open, 11.71; TradingView books 11.72 on both tapes.
PineScheduler::next_input_waypoint now returns the second extreme itself
for the matcher's own (unforced) fill there, so the market order fills at
it, and keeps the next intrabar's open for a forced fill: row 5 of both
magnified replays is TradingView's again, and every cascade, bracket and
margin tape of MAG-INTRABAR still passes (test_adapter_magnifier_intrabar_
tapes, test_adapter_coof_relower, test_native_calc_timing_twin, and the 95
magnifier / intrabar / lower-path / margin / calc_on_order_fills / POOC /
extreme-order rows all pass). No hash witness moves (the eleven witness
rows pass unchanged).

The same test's v3 row 2 (magnified), a recorded divergence (11.58 where
TradingView books 11.54), flipped to TradingView's with MAG-INTRABAR's
kernel commit alone: PX's limit fills on the leg to the high of a sub-bar
that opens at its own low (bar 6, the 11:01 ET minute), and the kernel now
walks such a bar through its four turning points instead of the sampler's
uniform fill, so the entry books that high, 11.54. It stays exact on the
2-minute intrabars. The row is no longer recorded, and the file's header
says why.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>

* Adapter: an exit a recalculation places on a fill at a bar's extreme reads that fill -- a level fill leaves no leg in flight, a forced one is read from the extreme itself (R5 lane PAR-ORDERS-3, findings 1 and 2)

exit()'s calc_on_order_fills classification took the recalculating fill's
remaining leg from next_source_path_waypoint(point) alone:

- a fill AT the bar's first extreme -- the matcher's fill of a resting
  request at its own level there -- read the whole next leg as the in-flight
  remainder of its own (9f7a025c pine_adapter.cpp:9026-9048), so a priced
  exit born there was forced onto the second extreme (Limit{endpoint});
  TradingView books it at its own level on the leg to that extreme (lab tv
  pa2-i2-level-w1-{long,short}{,-pooc});
- a fill forced onto an OFF-grid first extreme books its tick (11.425 ->
  11.43, 11.645 -> 11.65), which next_source_path_waypoint read as a fill
  short of the low, so the exit was a plain limit and the next entry filled
  at the second extreme; TradingView starts the next leg at the extreme
  (lab tv pa2-i2-point-w2-long{,-pooc}).

The classification now reads the fill as 4985dcaa does for entries and
strategy.close: at_own_extreme (coof_fill_at_path_point on the phase's own
extreme) and coof_fill_forced_ tell a level fill, which ends its leg and
leaves no remainder in flight (fill_ends_leg), from a forced one, whose next
waypoint is read from the extreme itself.

Rows (tests/test_second_extreme_order_tapes.cpp; 25 of its 132 checks fail
on the base): every RECORDED boundary row flips to exact --
pa2-i2-level-w1-long rows 1-6 (both variants), -short rows 1, 2, 5, 6,
-short-pooc rows 1, 2 (still compared on its first cycle: finding 3), and
pa2-i2-point-w2-long rows 2, 3, 5, 6 (2, 3, 5 under
process_orders_on_close). The exit tapes' rows 5 and 7 / 1 stay RECORDED
(finding 4).

Hash: publication witness ConfigFlags103 moves (its X limit, placed by the
recalculation on a limit entry's level fill at bar 24's low 99.75, fills at
its level 100.75, not at the high 103.00); re-pinned once in the lane's hash
commit.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
(cherry picked from commit fe50e34118c7bb20a342198e3137a2193a968da6)

INT27 pick note: the adapter and test hunks applied unchanged (each file's
patch is byte-identical to the lane's); the docs conflicts were citation
digits, merged token by token (INT27's single re-anchor pass sets every digit
on the integrated tree). The lane's hash values (publication ConfigFlags103)
fold into the single INT27 v19 hash re-pin, not this commit.

* Adapter: after the matcher's fill at its own level on a bar's first extreme, the recalculation's orders act from that extreme (R5 lane PAR-ORDERS-3, finding 4)

coof_next_waypoint advanced every order a non-first-open recalculation
placed to the waypoint AFTER its fill's point (fe50e341
pine_adapter.cpp:5834), so after a fill AT a bar's first extreme a market
entry, strategy.close, close_all or a market strategy.order waited for the
second extreme or the next open, and an exit stop already through was held
to the leg's end or deferred to the next open. H-MEASURE Finding 6d and
4985dcaa had settled the second extreme; the first was predicted, not
taped. The lane exported the tapes that decide it (lab tv, NYSE:F 15m,
2025-07-01..08, 20 tapes, tests/fixtures/second_extreme_orders/pa3-f4-*):

- after the matcher's fill of a resting request at its own level ON the
  first extreme (a limit entry A there), TradingView fills a market entry B,
  strategy.close("A"), close_all and a market strategy.order AT that extreme
  (pa3-f4-level-w1-{mkt,close,closeall,order}-*), fills A's exit stop,
  already through, AT it (-xstop-*), and fills a stop entry B between the
  extremes at its own level on the leg to the second extreme (-bstop-*);
- the two shapes ab9714be's rows pinned hold the same: a STOP entry exactly
  on the extreme then the market add (pa3-f4-stop-w1-mkt-*), an EXIT limit
  exactly on it then the market re-entry, whose own exit limit, already
  through, fills where the path next re-crosses its level
  (pa3-f4-xlimit-w1-reentry{,-tp}-*);
- a fill forced onto the first extreme still starts the next leg: the
  control pa3-f4-point-w1-mkt-* fills B at the second extreme.

coof_next_waypoint returns the point itself for a matcher's (not forced)
fill at an extreme (pine_adapter.cpp:5841); exit() fills a stop already
through at the point the fill ended its leg on (pine_adapter.cpp:9118-9127),
never staged behind the recalculation or deferred as a wrong-side stop
(:9379, :9391). That leg is a stop AT the point, not a market leg: the
recalculation executes market newborns in place, which a cohort-bound leg
(close_entries_rule "any": Owner BindCohort, refused by current execution
since af7618d0) cannot take, and a market leg would then book the point's
price on a later bar (the xstop tapes replayed under "any": bar 5 @11.46
for TradingView's bar 4 @11.46; with the stop, exact).

The same reading moves the second-extreme exit tapes: a stop B's
recalculation places on the second extreme, reached on the leg to the close,
fills at its own level there instead of the close's tick.

Rows: tests/test_second_extreme_order_tapes.cpp 285 checks (54 fail on
fe50e341, 79 on the base): pa2-i2-exit-w2-long{,-pooc} rows 5, 7 and
-short{,-pooc} row 1 flip RECORDED -> exact; the 20 pa3-f4 tapes, 93 rows,
exact (48 of them fail on fe50e341).
Frozen rows moved with their notes, toward the tapes:
- test_calc_on_order_fills EndpointMarketAddProbe chart row, and its frozen
  twin test_calc_on_order_fills_l4c: the add's lot 90 (second extreme) ->
  105 (the first extreme the stop entry's fill ended its leg on;
  pa3-f4-stop-w1-mkt-*); tests/twin_parity_inventory.json pins it as an
  observable rewrite, INVENTORY_SHA256 264aef4a -> cb035ede;
- the L0 oracle tests/oracle/test_oracle_coof.cpp (twin
  test_native_oracle_coof_l2) and its copy test_coof_cascade_eligibility,
  row R1: the cascade re-entry 90 (W2) -> 101 (W1) and its tp exit bar 2 ->
  1 (pa3-f4-xlimit-w1-reentry{,-tp}-*); tests/oracle.sha256
  test_oracle_coof.cpp 647f8a24 -> e006f064, tree f39b54fe -> f25b1dd2.
CHECK counts unchanged (census 791).

Hash: quiet-bar CalcOnFills, Random10, Random20 (chart, both runs each),
publication ConfigFlags103 (X's stop, 99.75 at the point its entry's level
fill ended the leg on, fills there) and seven live-state digests move;
re-pinned once in the lane's hash commit.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
(cherry picked from commit bc5f7a212050f2dd97f03e6da201f7d8def9bc0e)

INT27 pick note: every adapter, test, oracle and fixture hunk applied
unchanged (each file's patch is byte-identical to the lane's). The twin
inventory merged cleanly with INT26's; its pin in check_twin_parity.py is the
merged file's own sha256 (b0066ba1, the lane's cb035ede being its own
inventory's), and check_twin_parity.py and check_oracle_sha256.py pass. The
docs conflicts were citation digits, merged token by token (INT27's single
re-anchor pass sets every digit on the integrated tree). The lane's hash and
behaviour pins (quiet-bar, publication, live-state) are harvested on the
integrated tree: its behaviour half lands after this lane's picks, its hash
values in the single INT27 v19 hash re-pin.

* Adapter: a process_orders_on_close limit entry fills at the close that placed it when the close's tick reaches it, with or without calc_on_order_fills (R5 lane PAR-ORDERS-3, finding 3)

The post-calculation close pass (fill_pooc_close_entries) tested a pure
limit entry placed by the bar's close calculation against the RAW close,
and skipped every limit under calc_on_order_fills (bc5f7a21
pine_adapter.cpp:16649-16671). TradingView reads the close's TICK, as the
pass already did for a stop, with or without calc_on_order_fills (lab tv
pa3-f3-pooc-limit-{long,short}{,-coof}, NYSE:F 15m, 2025-07-01..08,
tests/fixtures/pooc_limit_close): a sell limit at 11.76 over a raw 11.755
close (tick 11.76) and at 11.86 over 11.855 fill at that close; a buy limit
at 11.65 over a raw 11.655 close (tick 11.66) and at 11.74 over 11.745
rest, and so does every limit only the bar's range reached -- each fills on
the next bar's touch. PAR-ORDERS-2 recorded the short case on
pa2-i2-level-w1-short-pooc, cycle 2 (bar 31: TradingView fills A's sell
limit at the close its high already reached, the engine on bar 32).

pure_limit no longer excludes calc_on_order_fills, and at_close compares
the close's tick for a limit as for a stop (pine_adapter.cpp:16654-16675).

Rows: tests/test_pooc_limit_close_tapes.cpp (new, 28 checks; 4 fail on
bc5f7a21 and on the base: both short tapes' j = 22 and j = 31 entries a bar
late); tests/test_second_extreme_order_tapes.cpp compares
pa2-i2-level-w1-short-pooc whole again, rows 1-5 (was its first cycle, rows
1-2): 288 checks, 3 fail on bc5f7a21, 82 on the base.
Release floor 682 -> 683 (+1 test_pooc_limit_close_tapes, source-bound;
the ci_verify.py:359 citations in CONTRIBUTING.md and
docs/pages/contributing-llm.md follow the line).
No hash witness moves beyond the lane's earlier commits.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
(cherry picked from commit 1550a694e859e7606bee7fad6081fe54594a4307)

INT27 pick note: the adapter and test hunks applied unchanged (each file's
patch is byte-identical to the lane's). tests/CMakeLists.txt: git's clean
merge closed H-MEASURE's fixture list after MAG-INTRABAR's row and left this
lane's row outside it; the list is closed once, with both rows inside. The
floors are the earlier picks' plus this row: release 710, PR registration
691/691/700 (ci_verify.py, its self-test pin and docs/ci.md). The design
page's close-pass paragraph keeps both insertions -- this lane's limit
sentence, then INT26 round 2's re-entry bracket sentences; the other docs
conflicts were citation digits, merged token by token. The lane's b65cee22
(its hash re-pin) is not picked: its behaviour half follows, and its hash
values fold into the single INT27 v19 hash re-pin.

* PAR-ORDERS-3: the trades and transcripts its fixes move, pinned (INT27: the behaviour half of b65cee22)

R5 lane PAR-ORDERS-3's own re-pin, b65cee22 ("PAR-ORDERS-3 v19 hash
re-pin"), moves hash values and behaviour together. INT27 folds its hash
values into the single INT27 v19 hash re-pin, whose tool refuses any
non-hash change, so the behaviour it pins lands here, with the fixes that
move it.

Harvested on this tree with each TU's own switch (PINEFORGE_QUIET_BAR_HARVEST,
PINEFORGE_D2D_PUBLICATION_HARVEST, PINEFORGE_V19E_HARVEST and the other
eight), at the pick boundary before the lane (0631e045, which reproduces
every pinned value) and after each of its three commits, and compared field
by field with the pins before the picks, the lane's b65cee22 and its base
1550a694:
- fe50e341 (findings 1 and 2) moves publication ConfigFlags103's digest only;
  bc5f7a21 (finding 4) moves it again, and the quiet-bar and live-state rows
  below; 1550a694 (finding 3) moves nothing -- the lane's own attribution.
- test_adapter_quiet_bar: the trade digests of CalcOnFills/0/*, Random10/0/*
  and Random20/0/* (CalcOnFills keeps every trade and renumbers
  Trade::entry_incarnation), and the boundary counts Random10/0/* 69 -> 67
  and Random20/0/* 70 -> 69, equal to the lane's. The same runs the lane
  moved; INT26's picks had moved their trade digests too, so the digests are
  this tree's. The list sits in the pinned file.
- test_adapter_live_state_equivalence: 6 of 108 transcript digests (the
  transcript holds no hash value) -- reversals seeds 314187, 1780393 and
  3246599, brackets 314188 and 1780394, chains 314189, the lane's seeds;
  INT26's picks had moved each of them before, so the digests and counts are
  this tree's (reversals 314187: 168 -> 196 trades, 3246599: 147 -> 149;
  brackets 314188: 144 -> 134, 1780394: 95 -> 96; chains 314189: 62 -> 75).
  The lane's seventh, chains 1780395, a digest-only move on its tree, does
  not move here. The list sits in the data file.
- test_publication_witness: ConfigFlags103's digest only, a hash value;
  nothing lands here.
Until the INT27 v19 hash re-pin, test_adapter_quiet_bar and
test_publication_witness fail on those hash values only (15 values over the
6 quiet-bar runs, ConfigFlags103's digest); every other witness row passes.

(behaviour half of commit b65cee223f1839df0989da9fba24501788417c01)

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>

* Drawing arenas: share records between checkpoint copies so a COOF run costs O(bars)

calc_on_order_fills checkpoints the generated script state at every script
bar (pine_scheduler_native.cpp: snapshot at the bar open, restore before the
close execution, commit after it, two restores per fill recalculation), and
the generated hooks copy each DrawingArena by value. A record is never
forgotten -- delete and max_*_count eviction only tombstone it -- so every
copy cost O(every drawing ever created) and a drawing COOF run was quadratic
in bars (job-2892: ~239 s CPU on NYSE:F 15, ~12,950 s on ETH 15).

DrawingArena's records now live in a store that is a vector until the arena
is copied, exactly as before, and nothing in a vector is ever shared. A copy
is built as blocks of 32 under a 32-way radix trie plus a tail block, and a
copy of a block store -- or a store assigned from one -- shares every block;
a write clones only the blocks and nodes on its path that another copy still
shares. Under the scheduler's sequence the first snapshot copies the vector
(O(records), once, at the first bar) and the restore assigns the copy back,
so from then on a checkpoint copy or restore is O(1) for records plus O(live)
for the order_ deque (at most max_*_count ids), and a script execution pays
for the blocks it writes. The generated by-value checkpoint needs no codegen
change. An arena that is never copied keeps the vector and inlines only the
vector paths; every block path is out of line.

Every observable -- ids, liveness, every field of live and dead records,
order() (the *.all and eviction order), every pf_* result and exception --
is unchanged. Getters read through a const path that never unshares.
Eviction tombstones a record before it leaves order_, so a refused
allocation in that write leaves the arena consistent; a moved-from arena is
empty and a self-move keeps the arena.

Rows:
- test_drawing_checkpoint: differential against the pre-lane vector arena
  (verbatim) over random create/delete/eviction/set_* and every pf_*
  getter/setter/copy, interleaved with snapshot/restore/commit and arbitrary
  copy graphs, past three trie levels, every checkpoint compared whole before
  it is dropped; the scheduler's sequence across a run reset; refused
  allocations, including partway through copying a block of labels; the cost
  pins (after the first bar an unchanged checkpoint copies no record and
  allocates the same for 10,000 and 40,000 records; synth-label-coof's churn
  copies <= 64 records per execution and the checkpoint steps' bytes stay
  per-step bounded, N -> 2N ratio <= 2.25). Under AddressSanitizer the random
  and cost rows run fewer steps (its fake stack made the row take 575 s).
- test_coof_drawing_checkpoint_cost: synth-label-coof through the Pine host
  with calc_on_order_fills and fills, 4,000 vs 8,000 bars, the same bounds on
  record copies and on what the checkpoint hooks allocate.
- test_coof_drawing_rollback_tape: TradingView's coof-drawing-rollback tape
  (CG-POPFIX, 41 trades) replayed through the Pine host: all 41 trades
  identical in times, prices, quantities and both comments (x2 == n).

Fail-before (the three rows against the old drawing.hpp): every cost pin
fails (30,000,000 record copies for an unchanged 10,000-record arena;
ratio 4.000), every exactness row passes.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
(cherry picked from commit 52f0395087ac6b8d9e83475ab1e664c71df058aa)

INT27 pick note (late pick, accepted 2026-09-26 22:47, placed after the last
scheduled pick and its behaviour half; the list names no place): drawing.hpp, the three rows
and the fixture applied unchanged. git's clean merge put this lane's
fixture-dir block inside TV-DEFAULTS' `if(TARGET test_tv_strategy_defaults)`
block, before its endif(); each block stands on its own. The lane's floors
and doc anchors (0d651058) are not picked: INT27's floors item recounts the
floors (this lane: kernel +1, release +3, each PR registration floor +3) and
INT27's single re-anchor pass sets the digits.

* Compute ta.* calls with a simple or series length as TradingView does

TradingView accepts a length that is neither a constant nor an input.
PineForge refused every such call at transpile time. This adds the Pine
runtime those calls lower onto, in the source layer
(include/pineforge/source/pine_ta_length.hpp, src/source/pine_ta_length.cpp):

- A simple length (fixed for the run: a syminfo preset, an input-string
  ternary) is answered exactly as the constant. FirstCallBound builds the
  fixed-length class from the call's first execution; simple_ta_length
  stops the run on 0, a negative length or na, with TradingView's text.
- A series length for ta.highest / ta.lowest / ta.highestbars /
  ta.lowestbars re-windows every call over the site's own bar history
  (skipped bars hold the last executed source), through a cached extremum
  whose growth, poison and late-first-execution rules fit 5,647 recorded
  TradingView calls of 35 synthetic call sites with no mismatch
  (SeriesHighest, SeriesLowest, SeriesHighestBars, SeriesLowestBars).
- ta.supertrend compiles a series factor but reads it once: PineSupertrend
  is the Pine reference with the first execution's factor, warm-up
  included (1,200/1,200 recorded bars).

TradingView refuses a series length for ta.rma / ema / rsi / atr / dmi /
macd / kc / hma / tsi / rci and supertrend's atrPeriod at compile time, so
those only ever see a simple length.

Three rows replay the lab tv tapes (test_ta_series_length_extremes,
test_ta_series_length_supertrend, test_ta_simple_length); the release floor
moves 678 -> 681. No kernel translation unit changes.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
(cherry picked from commit ea7021ac08529bbecc54f41364af2b23ebd142cd)

INT27 pick note (late pick, accepted 2026-09-26 23:20, placed after the late
pick K-DRAWSNAP): the source-layer runtime, the library's source list and
the three rows applied unchanged (each file's patch is byte-identical to the
lane's). Its floor hunk (release 678 -> 681 on its base) is not applied:
INT27's floors item recounts the floors with its three rows (release and the
three PR registration floors +3; the kernel floor does not move, its TUs
reach the source layer). The paired codegen commits land in the codegen
integration.

* INT27 (iii): the lower-lookup shape witness times user CPU, so the allocator's page faults no longer decide it

test_native_intrabar_lower_lookup bounds the cost of 16,000 script bars
(and a four times longer lower feed) by 6x that of 4,000 bars; a scan of the
whole feed per script bar reads 16-18. It timed process CPU (std::clock),
and on the lab's x86 cloud hosts it read 6.19-6.28 where NTU and spark read
about 5.9 -- and on this tree it fails on spark too.

The excess is not the code the row times. Split on spark (gcc 13, one
pinned X925 core, 4,000 / 16,000 bars x64, best of three):
- process time: 0.15 s / 0.98 s, ratio 6.12-6.61 (main d0935605: 0.10 s x32
  / 0.59-0.61 s, 5.71-5.88);
- of the large leg's 0.98 s, 0.38-0.41 s is SYSTEM time; the small leg's is
  0.00-0.004 s. The allocator maps the large leg's buffers afresh on every
  run -- a first-touch page fault per page -- where the small leg reuses
  its heap;
- user time: 3.88-4.00 on this tree, 3.91-3.95 on main.
R5 lane PERF-ZONED exposed it: its certified fixed-offset cycles (this spec
runs at UTC+5) took the per-bar calendar cost out of both legs, so the fixed
fault cost weighs more (6b601ef0, right after that pick: 6.50-6.63).

tests/ratio_timing.hpp gains ratio_timing::user_cpu_seconds() (getrusage
RUSAGE_SELF's ru_utime; std::clock where getrusage does not exist), the
lane CI-FLAKE helper file every ratio row shares, and this row samples it.
The legs, the calibration (100 ms of the same clock, the doubling of
tests/ratio_timing.hpp) and the x6 bound are unchanged.

The guarded property still fails on a real quadratic regression: with
deliver_intrabar_script's lower_bound replaced by the pre-K24 scan of the
whole feed (scratch copies only, never committed), the row reads
- 18.11 on spark under user time (18.19 under the old process time),
- 17.04 on the M4 Max,
and fails "ratio < kShapeBound" on both; unmutated it reads 3.88-4.00 on
spark and 3.88-4.36 on the M4 Max. The value half and every pin are
untouched.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>

* INT27 (iv): the effective-strategy report reads the configuration the generated constructor declares

The provenance's "strategy" block (scripts/run_strategy.py's
--fingerprint-json and docker/run_json.py's "fingerprint") is the seed of
strategy() defaults, then what the TU's constructor declares, then the
run's strategy_overrides. Its parser read only pre-R4-C member writes
(`initial_capital_ = ...;`), and pineforge-codegen has since filled a
source::PineStrategyConfig (`cfg.initial_capital = 100000.0;`,
`cfg.default_qty_type = static_cast<int>(QtyType::PERCENT_OF_EQUITY);`)
and handed it to configure_pine_strategy, so every report showed the seed
whatever the script declared (R5 lane TV-DEFAULTS, follow-up 3) -- and with
TradingView's new Pine v6 defaults declared in the constructor, a v6
script's report named capital and sizing it did not run with.

parse_strategy_params now reads the constructor's PineStrategyConfig
assignments (the variable its declaration names; enum members stored as
int, `static_cast<int>(...)` unwrapped, an integer index mapped too) and,
for older TUs, the member writes as before. The seed is
PineStrategyConfig's member defaults (the values it already held; its
comment named engine.hpp's pre-R4-C members). The block's keys are
unchanged, so the margins and calc_on_order_fills the constructor also
declares stay out of it. Both copies are the one helper block, byte for
byte.

- scripts/fingerprint_self_test.py: two fixtures in the constructor's
  current form -- every field declared, including a decoy
  StrategyOverrides line outside the constructor, and a sparse one whose
  undeclared fields are the struct's defaults. 284 checks pass; against the
  previous helpers 6 of them fail (every cfg-form field read, the declared
  values, the sparse defaults).
- Over the corpus's 312 TUs at b40aa8e (pure parsing, both copies agree):
  before, 311 reports equal the seed exactly (the other only by its
  inputs.json overrides); after, 88 change -- pyramiding 81, default size 63,
  capital 62, commission 61, slippage 59, sizing type 25,
  process_orders_on_close 4, commission type 3 -- and every numeric literal
  a constructor declares equals its report's value unless an override
  replaces it. analyzer-anvil-percent-costs-01, for one: fixed / 1 /
  1000000 / 0 / 0 -> percent_of_equity / 7.5 / 100000 / 0.08 / 2.

Provenance only: nothing the run executes reads the block, so no trade
moves (the corpus parity step runs this harness).

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>

* INT27 (i): the 1.0.0 entry says what INT27's picks change for a user

Added to "Behaviour that moves results against 0.13.1", each a sentence a
user can act on:
- Pine v6's current strategy() defaults for an omitted initial_capital,
  default_qty_type or default_qty_value (100000, percent_of_equity, 100),
  which pineforge-codegen 1.0.0 declares; v5 and a hand-built
  PineStrategyConfig keep 1000000 / fixed / 1; declare the three to keep the
  old sizing.
- calc_on_order_fills after a resting order's own-level fill on a bar's high
  or low: the recalculation's market orders, closes and passed exit stops
  fill at that point, an exit limit placed on the first extreme's fill is
  live at its level on the leg to the second, a forced fill still moves on,
  an off-grid extreme's booked tick is that extreme, and under the bar
  magnifier a market order after such a fill at an intrabar's second extreme
  fills there (the existing second-extreme sentence, widened).
- process_orders_on_close: a limit entry at the placing bar's close fills
  there when the close's tick reaches it, with or without
  calc_on_order_fills.
- The bar magnifier walks TradingView's own intrabars, built from the finer
  feed, and what a 1/5-minute chart and an exchange-listed daily chart still
  walk; a zero-length-leg lower bar walks its four turning points and a
  volume-0 one-price bar is one point.
- A request.security finer than every supplied feed reads na instead of
  stopping the run; a daily run with an auxiliary feed no longer stops on an
  after-close session (NSE Muhurat).
- A ta.* call with a simple or series length (the late pick's runtime,
  which pineforge-codegen 1.0.0 lowers onto) and what is still refused.
A new "Performance" section: a calc_on_order_fills strategy that draws no
longer slows with every drawing it made -- the late pick's shared checkpoint
copies; codegen has checkpointed the script state, drawings included, on
every fill recalculation since codegen v0.9.0, which 0.13.1 paired with.
A new "Reports and tools" section: the provenance's strategy block records
what the generated constructor declares, so such fingerprints change and the
trades do not (INT27 item iv).

The session-day speedup on exchange-zone charts has no line: it removes a
cost introduced after 0.13.1, and no answer moves. The lower-lookup timing
witness is a test change. No lane name is cited.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>

* INT27 (ii): the ctest floors are the integrated tree's own counts

Counted with `ctest -N` per profile, each build dir configured with
ci_verify.py's own configure argv (no compiler launcher, as CI has none), on
this tree and on main d0935605:

  profile     main d0935605      INT27             floor
  release     703                716               RELEASE_MIN_TESTS 716
  kernel      287 reg / 286 run  290 reg / 289 run KERNEL_MIN_TESTS 289
  debug       684                697               EXCLUDED 697
  sanitizers  684                697               EXCLUDED 697
  native      693                706               EXCLUDED 706

The thirteen rows, and the lanes that moved each floor (no row left):
- K-RUNERR: test_security_finer_than_feed (release and the three PR
  registration floors);
- PERF-ZONED: test_native_session_day_zoned (source-free: kernel, release,
  PR registration);
- TV-DEFAULTS: test_tv_strategy_defaults (release, PR registration);
- MAG-INTRABAR: test_native_intrabar_turning_points (source-free: kernel,
  release, PR registration), test_magnifier_tradingview_intrabars and
  test_adapter_magnifier_intrabar_tapes (release, PR registration);
- PAR-ORDERS-3: test_pooc_limit_close_tapes (release, PR registration);
- K-DRAWSNAP (late pick): test_drawing_checkpoint (source-free: kernel,
  release, PR registration), test_coof_drawing_checkpoint_cost and
  test_coof_drawing_rollback_tape (release, PR registration) -- the deltas
  the late-picks list names (kernel +1, release +3, each PR floor +3), its
  own floors commit 0d651058 not picked;
- K-TA-DYNLEN (late pick): test_ta_series_length_extremes,
  test_ta_series_length_supertrend and test_ta_simple_length (release, PR
  registration; their TUs reach the source layer, so the kernel floor does
  not move) -- the lane's own floor hunk (release 678 -> 681 on its base)
  not applied.
K-RUNERR and MAG-INTRABAR had counted no PR registration floor on their
branches; the picks added them, and this commit folds the per-pick floor
notes into one INT27 block per floor. The self-test's EXCLUDED pin and
docs/ci.md's floors paragraph say the same numbers.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>

* INT27 v19 hash re-pin

Inside the unreleased v19 epoch; no epoch token moves. Every witness pin
harvested once on the integrated tree, each pinned TU compiled with its own
harvest switch against the tree's library (INT26's harvest set: the eleven
witnesses PINEFORGE_R1/F9/P1/P4/QUIET_BAR/L5/P7/D2D_PUBLICATION/K1/V19E
_HARVEST and PF_HOST_VIEW_MEMO_DUMP), and at every pick boundary that could
move one, so each moved value names its pick:
- 0631e045 (after K-RUNERR, PERF-ZONED, TV-DEFAULTS, MAG-INTRABAR and the
  INT27 merge) reproduces every pinned value: those picks move none;
- c54f939e (PAR-ORDERS-3 findings 1-2), e5efd189 (finding 4), 9dc3fc08
  (finding 3, which moves none);
- 4160b3e3 and 6fa516ec, the late picks K-DRAWSNAP (after the lane's
  behaviour half) and K-TA-DYNLEN: their eleven harvests are byte-identical
  to 9dc3fc08's;
- this tree (INT27's items (iii), (iv), (i), (ii)): identical again.

16 hash values over 7 rows move, all by R5 lane PAR-ORDERS-3; the trade
digests, counts and live-state transcripts its fixes move were pinned with
them (5c6988c2, the behaviour half of the lane's own re-pin b65cee22, which is
not picked):
- test_adapter_quiet_bar: 15 of 816 values, CalcOnFills/0/*, Random10/0/*,
  Random20/0/* (the chart-path runs; finding 4, the first-extreme rule);
- test_publication_witness: 1 of 156, ConfigFlags103's digest (findings 1-2,
  then 4: its X limit placed on a limit entry's level fill at bar 24's low
  fills at its level, and X's stop, already through at the point that fill
  ended the leg on, fills there);
- 0 moved: report_relower 72, recording_hash_witness 267,
  continuation_view 227, receipts_in_place 334, command_allocations 32,
  lookup_index_witness 948, host_view_memo 13, calendar_hash_witness 12;
  live_state holds no hash value.

Old -> new (each pinned file carries the same list):
  test_adapter_quiet_bar CalcOnFills/0/1: boundary 0xbd9feba11a355c84ull -> 0x109b8bbd2db3c39cull, rows 0xbd62a54cd2c27075ull -> 0x4990637dd008c142ull, final_hash 0x8e716ca55979f5e4ull -> 0x23caae4465e49b8dull [PAR-ORDERS-3 f4]
  test_adapter_quiet_bar CalcOnFills/0/0: boundary 0xbd9feba11a355c84ull -> 0x109b8bbd2db3c39cull, final_hash 0x8e716ca55979f5e4ull -> 0x23caae4465e49b8dull [PAR-ORDERS-3 f4]
  test_adapter_quiet_bar Random10/0/1: boundary 0x82933908492fe6aeull -> 0x53a92b8342582407ull, rows 0x839a10fa6478c692ull -> 0x337fd61947e125a0ull, final_hash 0x6907e89e2f502bd7ull -> 0xfb592dc1ad328c0bull [PAR-ORDERS-3 f4]
  test_adapter_quiet_bar Random10/0/0: boundary 0x82933908492fe6aeull -> 0x53a92b8342582407ull, final_hash 0x6907e89e2f502bd7ull -> 0xfb592dc1ad328c0bull [PAR-ORDERS-3 f4]
  test_adapter_quiet_bar Random20/0/1: boundary 0xad83f25bfdab1b50ull -> 0x6d39d123fcb64c3cull, rows 0x103b25042e1313deull -> 0x4350e4a911697ba6ull, final_hash 0xb27d00f43fad75a1ull -> 0x2fff8a1132834fe4ull [PAR-ORDERS-3 f4]
  test_adapter_quiet_bar Random20/0/0: boundary 0xad83f25bfdab1b50ull -> 0x6d39d123fcb64c3cull, final_hash 0xb27d00f43fad75a1ull -> 0x2fff8a1132834fe4ull [PAR-ORDERS-3 f4]
  test_publication_witness ConfigFlags103: digest 0x9e412b4fb357ae55ull -> 0x275174bdfd481a1bull [PAR-ORDERS-3 f1-2, PAR-ORDERS-3 f4]

The tool (INT26's repin_int26.py with this epoch's notes) refuses any
non-hash change: 7 of 7 mutated harvests stop it (a quiet-bar trade digest
and boundary count, a publication trade count, a live-state transcript, a
host-view-memo fingerprint field, a calendar witness row field, a
report_relower curve statistic). After the write the same harvest
reproduces every pin (0 moved) and the eleven witness rows pass.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>

* INT27: the doc-revert gate starts after main's newest merged pull request when a checkout has no main ref

INT27's lab remote preflight failed doc-reverts on a tree whose own commits
pass it: "21 commits since this gate landed: 5 unnamed sentence deletions or
reverts". The lab's remote hosts check out a bundle with no branch refs, so
default_base() found no origin/main or main and the walk ran back from HEAD
to the gate's first commit -- which, on main's squashed history, is the
squash merge of INT26 itself, d0935605 (#290). It carries the whole branch's
deletions under the pull request's title: H-THIN's `owns_lot_excursions()`
sentence (introduced by e7350f7), PAR-ORDERS' two F7 E14 sentences (39cc605)
and two E20 probe-tail sentences (b80a082). Each was named by its own commit
on r5/int26, whose remote preflight passed; the squash cannot name them again.
`check_doc_reverts.py --base 0d76a099 --head d0935605` reproduces the 5; CI,
which has origin/main, never judges the squash (its merge base with a branch
is the squash itself). Every lane based on main after INT26 hits the same
failure on a lab remote host.

With no branch ref, default_base() now takes the newest first-parent ancestor
of HEAD whose subject ends in a pull request number (` (#N)`, the subject
GitHub writes for a merged pull request on main), HEAD included: the merge
base CI would find. Every commit after it is judged as before; with none,
the walk still starts at HEAD and stops before the gate's first commit.
--base, PINEFORGE_DOC_REVERT_BASE and the origin/main / main merge base keep
their precedence, and the replay mode is unchanged.

- scripts/test_check_doc_reverts.py: a squash-titled commit that deletes an
  unnamed sentence is the base without a main ref (the walk judges the one
  commit after it, and the squash judged alone still fails), and an unnamed
  deletion after a merged pull request still fails. 12 tests pass.
- docs/ci.md states the rule.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>

* INT27 (v): every doc anchor re-anchored once, on the integrated tree

One pass over every page check_doc_anchors.py scans, after the last pick,
the behaviour pins and the hash re-pin, so the digits are the final tree's.
Digits only: with every citation's digits blanked, each of the 8 pages is
byte-identical to its parent (181 lines change).

How, in order:
1. The multi-origin exact map (INT24's int24_exact_reanchor.py with
   --exclusive-first): main d0935605 first, then each lane's tip in pick
   order (K-RUNERR 28118665, PERF-ZONED 27e1f384, TV-DEFAULTS 4b457291,
   MAG-INTRABAR 9df16c24, PAR-ORDERS-3 1550a694; the late picks K-DRAWSNAP
   and K-TA-DYNLEN touch no page): each anchor carried through an exact difflib line map from the
   tree its digits were written against. 1725 anchors: 293 moved, 1394 kept,
   38 stuck (digits a pick's digit merge composed, which no origin carries).
2. INT26's anchor_origin_fix.py --relaxed over every INT27 commit and the
   lane tips: 15 anchors by the same line and position on main's page,
   carried through the exact map and re-judged by the gate here -- e.g. the
   design page's OL10 `exit()` pine_adapter.cpp:8527 (main 8485; the merge
   had composed 13134).
3. By hand, each checked against the code it names: the floor citations
   `KERNEL_MIN_TESTS` ci_verify.py:274 and `RELEASE_MIN_TESTS`
   ci_verify.py:429 (the assignment lines; CONTRIBUTING.md and
   contributing-llm.md); design row E4's `PineScheduler::recalculate`
   pine_scheduler_native.cpp:636 and `coof_next_waypoint`
   pine_adapter.cpp:5742 (the row this lane merged by hand kept main's
   digits); design row CT9's `volume_weighted_cap` pine_adapter.cpp:2282-2338
   (MAG-INTRABAR's own span, the retained lower-timeframe branch through the
   spec's validation, carried exactly from 9df16c24; main's 2281-2337 had
   drifted into cohort_for) and `deliver_confirmed_script`
   native_execution_consumer.cpp:7549-7815 (main's span carried exactly).

Results on this tree:
- check_doc_anchors.py: 1725 anchors, 1725 OK, 0 bad.
- stale_scan.py against d0935605: 0 stale-carried anchors.
- verify_carry.py over the same origins: 1707 EXACT, 9 EDITED (the six floor
  citations, whose cited assignment lines the floors item rewrote, and three
  design spans whose code a pick rewrote -- each passes the gate's claim), 9
  NEW (prose the picks wrote).
- check_doc_lint.py: no offenders. docs/build.sh: Doxygen warnings 0.
- check_doc_reverts.py over d0935605..HEAD (20 commits), and in a
  checkout with no branch refs as on a lab remote host: 0 unnamed deletions
  or reverts.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>

* INT27 (vi): the engine's merge-gate hook entry runs for MCP tool calls too, and blocks when it cannot start

pineforge-workflow's docs/VERIFY.md ("Open decisions") records two gaps in
the product repos' .claude/settings.json: the entry ran pr-gate.mjs for Bash
only, so an MCP merge tool in an engine session met no hook, and without
`|| exit 2` a hook that could not start (the file missing, a syntax error,
node's own exit 1) let the call through, since Claude Code blocks only on
exit 2. campaign/README.md's wiring closes both.

The entry's matcher `Bash` becomes `Bash|mcp__.*`, and its pr-gate command
gets `"timeout": 120` and a trailing `|| exit 2`, as the workflow repo's own
entry has them. pr-gate.mjs reads only `tool_input.command`, so an MCP
payload reaches it as an empty command and it answers "no opinion"; the
same entry therefore also runs campaign/hooks/merge-gate.mjs (the file
campaign/README.md wires for `mcp__.*`, with the same timeout and
`|| exit 2`), which reads `tool_name` and `tool_input` and judges an MCP
merge of an engine PR. On a Bash call it repeats the merge gate pr-gate.mjs
runs first; both are deny-only.

Checked through `sh -c` with the payload on stdin, as Claude Code runs a
command hook: a benign Bash call and a benign MCP call exit 0 for both
commands; with the hook file missing each exits 2.

This is the last commit before the final lab remote: a session loads its
project hooks at start, so the session that wrote this commit keeps running
the previous entry.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>

* Adapter: an exit limit the open's refill recalculation armed at the first extreme gap-fills there as a forced fill (R5 integration INT27, round 2: the gate sweep's regressed probe)

INT27's gate sweep (exp-r5-int27-20260927, engine d3b753c1 + codegen
a4259656, against rebaseline exp-rebaseline2b-20260926 on engine d0935605)
refused the merge on one script,
officialjackofalltrades-aureate-market-architecture-strategy-joat, on four
lanes: OANDA:XAUUSD 15m (count +1), OANDA:EURUSD 15m (+3), BINANCE:BTCUSDT
15m (+7) and the scraped BINANCE:ETHUSDT.P lane (+4), every one excellent on
the baseline. On XAUUSD the entry price moves from trade #60 on (3266.82 ->
3261.29).

Bisect (the probe's own feeds and the pinned Lab verifier on spark, one
library per pick boundary): 0631e045 (the INT27 merge fix) and c54f939e
(PAR-ORDERS-3 findings 1-2) book the baseline trades (e8107dece428);
e5efd189 -- PAR-ORDERS-3 finding 4, bc5f7a21: after the matcher's fill at a
resting request's own level on a bar's first extreme, the recalculation's
orders act from that extreme -- books 477b4cca24af, as every later commit.

Mechanism, on the XAUUSD bar 2025-04-16 00:30 UTC (O 3261.715, H 3266.82,
L 3261.29, C 3263.885, low first), traced in a scratch copy of the adapter:
the strategy.exit limit leg carried from the previous bar (below the
price) fills at the open; its recalculation re-enters, filled at the open
too (the refill); that entry's recalculation re-places the exit, whose limit
3260.5585 is already through, so exit() arms it at the first extreme
(later_same_open: StopLimit{W1 3261.29, 3260.5585}), where the path
gap-fills it at 3261.29 -- TradingView's trade #59 exit. Its placement
carries no forced_execution_price, so begin_coof_recalc left
coof_fill_forced_ false, and finding 4's rule in coof_next_waypoint read the
fill as the matcher's at the limit's own level ON the extreme: the market
re-entry filled at W1, 3261.29. TradingView books it at the second extreme,
3266.82 (#60), as it books a market order after the control's forced fill
(pa3-f4-point-w1-mkt-…
luisleo526 added a commit that referenced this pull request Sep 30, 2026
…309)

v1.0.0 (tag 5718c5d, built from main 133f571) and pineforge-codegen 1.0.0
shipped on 2026-09-30, and the hub image pineforge-release:1.0.0 carries the
pair. The pages still said "Unreleased", "main is ahead of v0.13.1",
"codegen main (not in a release yet)" and "1.0.0-rc.1". What is now true:

- CHANGELOG.md: "Unreleased" is "1.0.0 — 2026-09-30", opened by a summary:
  the first stable release under semantic versioning, engine and codegen
  on one version (engine v1.0.0 + codegen 1.0.0, hub image 1.0.0), the
  three prebuilt tarballs, v1.0.0-rc.1 (bb9ec14) and the one commit after
  it (133f571, #308: the test_adapter_lookup_index_scaling CI flake fix,
  the docs-only CI skip, the benchmark refresh; no src/, include/, cmake/,
  examples/ or CMake file changed), and that the notes below are the
  notable changes since v0.13.1. The planned-1.0 hedges are present
  tense; codegen "main branch" is 1.0.0.
- README.md: a "Prebuilt library" subsection names the v1.0.0 release and
  its three tarballs; front door 1 installs pineforge-codegen==1.0.0; the
  MCP image bundles engine v1.0.0 with codegen 1.0.0; the Releases list
  opens with v1.0.0; the scoreboard and the benchmark refresh line name
  the release (neither was re-measured on it; the releases changed no
  grade).
- docs/pages/install.md: a "Prebuilt tarballs" section (asset names,
  checksum, layout, Eigen) and the hub's engine1.0.0-codegen1.0.0 tag.
- docs/pages/integration-cmake.md: find_package pins are 1.0, and the page
  states the rule the package installs (write_basic_package_version_file,
  SameMajorVersion over MAJOR.MINOR.PATCH; FILE and git-describe versions).
- docs/pages/abi-stability.md: version.h as v1.0.0 ships it (FULL "1.0.0",
  sha 5718c5d; rc.1 reads "1.0.0-rc.1"); ABI v4 and the v19 epoch ship in
  v1.0.0.
- public-contract, live-surface, native-engine (prose), pine-to-native
  (table text), report-schema, ffi-python, examples-multi, configuration,
  mtf, tutorial-macd, tutorial/README.md, docker/README.md, docs/coverage.md,
  docs/pine_v6_audit_master.md, docs/pine_v6_coverage_detail.md: "main" /
  "not in a release yet" / "the last tagged release" become v1.0.0 or
  codegen 1.0.0; the four recorded request.* rows of the coverage detail
  are "✅ Runtime" (the legend's bucket for strategy_set_recorded_series)
  and request.footprint is "❌ Unsupported" like the footprint.* rows; the
  "Fundamentals and external data" list says 0.10.4 rejects the four and
  1.0.0 reads recorded answers.
- CHANGELOG.md: time()/time_close() with bars_back/timeframe_bars_back:
  0.10.4 accepted both arguments but ignored them and read the current
  bar's time (checked with PyPI 0.10.4: it emits
  pine_time(current_bar_.timestamp, ...)), so the note no longer says they
  were refused.
- abi-stability.md: the v18 -> v19 step (both epochs are development
  builds after v0.13.1, PF_ABI_VERSION 4 at ab9714b and fc7aad6) is the
  internal epoch transition; native-engine.md: the Coof / MagnifierCoof
  enumerators existed only in development builds (no tag has them).

Checked against the tagged trees and artifacts, not memory: VERSION at
v1.0.0 is 1.0.0; PF_ABI_VERSION 4 at v1.0.0, 3 at v0.13.1; v0.13.1 has no
native_c_api.h; codegen v1.0.0 (5bf595b) differs from 70c2b4af only in
docstrings and metadata, attaches the Pine adapter, lowers varip, imports,
foreign request.security and the recorded requests, and has no CLI; the
three tarballs pass their .sha256 and hold lib/, include/pineforge/ and
lib/cmake/PineForge/; codegen 1.0.0 from PyPI plus the macOS tarball runs
front door 1 (50 trades, net 569.97) and 0.10.4's output fails to compile
against v1.0.0; find_package 1.0 / 1 / 1.0.0 EXACT find the tarball and
0.13 / 0.14 / 1.1 / 2.0 do not; the hub 1.0.0 image prints the documented
tutorial report and provenance (engine 1.0.0, codegen 1.0.0).

Replaces or deletes text introduced by (scripts/check_doc_reverts.py's
History.introducer for judged pages; git blame / git log -S at origin/main
for CHANGELOG.md, docker/README.md, tutorial/README.md and code blocks):
- b2a578c (DOCS-ENGINE, #300): CHANGELOG.md, README.md, docker/README.md,
  tutorial/README.md, docs/coverage.md, docs/pine_v6_audit_master.md,
  docs/pine_v6_coverage_detail.md, docs/pages/abi-stability.md,
  configuration.md, examples-multi.md, ffi-python.md, install.md,
  integration-cmake.md, live-surface.md, mtf.md, native-engine.md,
  pine-to-native.md, public-contract.md, report-schema.md, tutorial-macd.md
- 133f571 (#308): README.md (the benchmark "Last refresh" sentence)
- 0d76a09 (Wave G, #289): docs/pages/abi-stability.md (the V19-FIX
  sentence)
- d093560 (INT26, #290): docs/pages/abi-stability.md (the H-THIN sentence,
  the version-macros text), docs/pages/native-engine.md (a line of the 1.0
  C boundary paragraph)
- 2fcbb52 (R5 lane F2): code-block lines in docs/pages/abi-stability.md
  (PINEFORGE_GIT_SHA) and docs/pages/integration-cmake.md (pkg-config
  Version)
- 112c134 (#302): README.md (the scoreboard paragraph, extended only)
- b1fbf0b (detailed Pine v6 coverage report): docs/pine_v6_coverage_detail.md
  (the "(hard reject)" heading and the request.financial bullet)
- e7cdf05 (native execution terms): docs/pages/abi-stability.md (the
  "PF_ABI_VERSION remains 4" clause)
Three rewrites bring back d093560's wording, which b2a578c made "planned
1.0" and which is true again now: README.md's "the 1.0 C surface does not
spell", and docs/pages/native-engine.md's "does not spell in 1.0" and
"Deprecated public spellings, removed for 1.0".

docs/pages/native-engine.md and docs/pages/pine-to-native.md are
ci_docs_only.py PROOF_READS, so this change runs CI's full lanes; no code
block of either page changed.

Co-authored-by: Claude Opus 5.5 (1M context) <[email protected]>
luisleo526 added a commit that referenced this pull request Oct 4, 2026
… rule

#325 (confirmed-bar streams compute what the batch computes) and #327
(docker/run_json.py --symbol-feeds) merged before the release notes, so
their Unreleased bullets join the 1.1.0 section, rewritten and linked; no
Unreleased heading stays.

- CHANGELOG.md: the lead names the stream fix and, in the pairing
  sentence, codegen 1.1.0's request discovery (transpile_full()["requests"],
  codegen #164). #325's bullet says what a stream user sees; #327's bullet
  and its Report keys entry (applied_runtime.symbol_feeds, the
  --symbol-feeds: failure messages). A new State hashes section lists the
  four recipe additions since v1.0.1 (#315, #316, #319, #325; none removed,
  renamed or re-encoded; domain tags unchanged). #315's range-end
  equity-extreme change moves to the Pine adapter parity bullet as a
  behaviour fix. The #319 bullet named the broker-state hash; the change is
  in the native continuation hash, which the broker-state hash folds. The
  known-issue bullet now says it is fixed in 1.1.0 (#325). Migration gains
  a line on stream results and hashes.
- README.md: the known issue is fixed in 1.1.0 (#325); the v1.1.0 Releases
  line gains the stream fix, request discovery and the harness's
  multi-symbol request.security feeds. Fact markers rendered from the facts
  export that maps releases[1.1.0] to
  pineforge-parity-baseline-20261004-engine-7b596622 (7,951 excellent / 38
  strong of 7,989); the active scoreboard moves to the same baseline, here
  and in docs/pages/contributing-llm.md.
- docs/pages/streaming.md: the known issue affected v1.0.0 and v1.0.1 and
  is fixed in 1.1.0.
- docs/pages/public-contract.md: the state-hash rule, amended by the
  owner's ruling for 1.1.0. It covers the recipe only: a minor release may
  add a hashed field (domain tags unchanged, the added field changing no
  trade or report, disclosed under State hashes); removing, renaming or
  re-encoding a hashed field is a new epoch and a major release; behaviour
  changes follow the normal release and parity rules. The first uses are
  #315 and #316. The semver rule is unchanged.

Replaces text introduced by 7b59662 (#325): CHANGELOG.md's
"Confirmed-bar streams compute what the batch computes:" bullet, and the
"Fixed on main (#325); included in the next release." lines of README.md
and streaming.md; by 4f2a475 (#327): CHANGELOG.md's "Harness symbol
feeds:" bullet; by d093560 (#290): public-contract.md's "State-hash
values are stable within the epoch." and "a new recipe is a new epoch and
a major release"; by a80485c (this branch's first commit): the "Known
issue, as in v1.0.0 and v1.0.1" bullet, streaming.md's "(v1.0.0, v1.0.1,
v1.1.0)", the #319 bullet's "A tick stream's broker-state hash folds the
new accumulator state only where it adds information, so the existing
tick, bar and batch hash pins hold.", the Report keys failure-output
bullet and the v1.1.0 Releases line; by 66be240 and 83d64dc: the lead's
state-hash sentences ("Three changes also change what the hashes fold");
and, as git attributes them through this branch's merge of main, by
e59c09f: README.md's v1.1.0 Releases line and streaming.md's
"(v1.0.0, v1.0.1, v1.1.0)".

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
luisleo526 added a commit that referenced this pull request Oct 4, 2026
* docs: release notes and version scoping for v1.1.0

v1.1.0 is a minor release: <pineforge/pineforge.h> declares six more
functions, the checked settings calls that a strategy generated by
pineforge-codegen 1.1.0 exports (#317). It pairs with pineforge-codegen
1.1.0. PF_ABI_VERSION stays 4 (pineforge.h only gains declarations;
native_c_api.h and the native C++ host headers are unchanged) and the
script ABI epoch stays engine_script_run_v19.

- CHANGELOG.md: "## Unreleased" becomes "## 1.1.0 — 2026-10-04": a lead
  paragraph, one bullet per change a user can observe since v1.0.1
  (#312-#324), each linking its PR, a Report keys subsection
  (docker/run_json.py v1.0.1 -> v1.1.0) and a Migration subsection. The
  three Unreleased bullets stay; the lot-grid bullet now gives both
  failure messages.
- README.md: pineforge-codegen==1.1.0, the v1.1.0 tarballs, the pairing
  sentence, the stream known issue's scope, the benchmark refresh line,
  the release scoreboard sentence (releases[1.1.0] markers) and a v1.1.0
  line in Releases. The public corpus sweep's "311 excellent + 1 declared
  anomaly" is scoped to the v1.0.1 library it was measured on. Facts
  rendered from the facts file that adds releases[1.1.0]; the active
  scoreboard markers move to baseline
  pineforge-parity-baseline-20261003-engine-dbd17b38.
- docs/pages/install.md: the v1.1.0 tarballs and the hub tag
  engine1.1.0-codegen1.1.0.
- docs/pages/public-contract.md: 1.1.0's release line, engine v1.1.0 with
  codegen 1.1.0 among the supported pairs, and the four C-boundary rows
  that were planned for 1.1.0 are not in it.
- docs/pages/streaming.md: the known issue's scope includes v1.1.0.

Lines that state what an earlier version shipped or did stay.

Replaces text introduced by dc74e63 (#318): README.md's "Release 1.0.1
still grades ... until the next release" sentence, now 1.1.0's; by
d093560 (#290): public-contract.md's "Four of its rows are planned for
1.1.0"; by 783bb39 (#322): CHANGELOG.md's "The engine library is
unchanged."; by dbd17b3 (#320): CHANGELOG.md's "The engine is
unchanged."; by b2a578c (#300): README.md's "this repository's sweep:
311 excellent + 1 declared anomaly"; by 271d687 (#311): README.md's
"its releases 1.0.0 and 1.0.1 do".

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>

* docs: state the 1.1.0 hash folds and scope two runner sentences

The 1.1.0 lead now says how state-hash values change while the epoch and
the domain tags stay: a run whose fills an adapter change alters hashes
to new values, and three changes fold more state, so a run can hash
differently from 1.0.1 with byte-identical trades: #315 (an unbatched
same-bar entry request and placement; the stream report's terminal
re-mark leaves the hashed extremes; witness row Stream/0/1 re-pinned),
#316 (an opening stop's next waypoint; Random44/0/0 and /1 re-pinned)
and #319 (tick-volume state, every existing pin kept).

In the runner tooling bullet, "No versioned engine PF_API export ...
changes" and "Plugin-free ledger identity bytes remain unchanged" read
as release-wide; they now speak for #320 itself and for a strategy
without the checked settings calls. The Report keys intro points at the
report schema page. The terminal-quote bullet names the chart feed that
PINEFORGE_RUN_REPORT_CHART_QUOTE points at, and two runner bullet
headings are re-wrapped.

Replaces text introduced by a80485c (this branch's first commit): the
lead's "A run whose fills one of the Pine adapter changes below alters
hashes to new values, and [#316] adds one placement field to the
adapter's hashed state, for which two witnesses with byte-identical
trades were re-pinned.", the Report keys intro and the terminal-quote
harness clause; and text introduced by dbd17b3 (#320): "No versioned
engine PF_API export, native C++ surface, script ABI epoch or engine
behavior changes." and "Plugin-free ledger identity bytes remain
unchanged".

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>

* docs: #315's range-end change folds less, not more

The 1.1.0 lead said three changes "fold more state"; #315's range-end
change instead stops folding a stream report's terminal re-mark into the
hashed extremes. The sentence now says the three changes change what the
hashes fold, and names Stream/0/1 as a re-pinned witness row without
claiming it is #315's only one.

Replaces text introduced by 66be240 (this branch's second commit): "Three
changes also fold more state" and "re-pinning one witness row
(`Stream/0/1`, whose recorded-row digest alone moves)".

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>

* docs: fold #325 and #327 into 1.1.0, add State hashes, amend the hash rule

#325 (confirmed-bar streams compute what the batch computes) and #327
(docker/run_json.py --symbol-feeds) merged before the release notes, so
their Unreleased bullets join the 1.1.0 section, rewritten and linked; no
Unreleased heading stays.

- CHANGELOG.md: the lead names the stream fix and, in the pairing
  sentence, codegen 1.1.0's request discovery (transpile_full()["requests"],
  codegen #164). #325's bullet says what a stream user sees; #327's bullet
  and its Report keys entry (applied_runtime.symbol_feeds, the
  --symbol-feeds: failure messages). A new State hashes section lists the
  four recipe additions since v1.0.1 (#315, #316, #319, #325; none removed,
  renamed or re-encoded; domain tags unchanged). #315's range-end
  equity-extreme change moves to the Pine adapter parity bullet as a
  behaviour fix. The #319 bullet named the broker-state hash; the change is
  in the native continuation hash, which the broker-state hash folds. The
  known-issue bullet now says it is fixed in 1.1.0 (#325). Migration gains
  a line on stream results and hashes.
- README.md: the known issue is fixed in 1.1.0 (#325); the v1.1.0 Releases
  line gains the stream fix, request discovery and the harness's
  multi-symbol request.security feeds. Fact markers rendered from the facts
  export that maps releases[1.1.0] to
  pineforge-parity-baseline-20261004-engine-7b596622 (7,951 excellent / 38
  strong of 7,989); the active scoreboard moves to the same baseline, here
  and in docs/pages/contributing-llm.md.
- docs/pages/streaming.md: the known issue affected v1.0.0 and v1.0.1 and
  is fixed in 1.1.0.
- docs/pages/public-contract.md: the state-hash rule, amended by the
  owner's ruling for 1.1.0. It covers the recipe only: a minor release may
  add a hashed field (domain tags unchanged, the added field changing no
  trade or report, disclosed under State hashes); removing, renaming or
  re-encoding a hashed field is a new epoch and a major release; behaviour
  changes follow the normal release and parity rules. The first uses are
  #315 and #316. The semver rule is unchanged.

Replaces text introduced by 7b59662 (#325): CHANGELOG.md's
"Confirmed-bar streams compute what the batch computes:" bullet, and the
"Fixed on main (#325); included in the next release." lines of README.md
and streaming.md; by 4f2a475 (#327): CHANGELOG.md's "Harness symbol
feeds:" bullet; by d093560 (#290): public-contract.md's "State-hash
values are stable within the epoch." and "a new recipe is a new epoch and
a major release"; by a80485c (this branch's first commit): the "Known
issue, as in v1.0.0 and v1.0.1" bullet, streaming.md's "(v1.0.0, v1.0.1,
v1.1.0)", the #319 bullet's "A tick stream's broker-state hash folds the
new accumulator state only where it adds information, so the existing
tick, bar and batch hash pins hold.", the Report keys failure-output
bullet and the v1.1.0 Releases line; by 66be240 and 83d64dc: the lead's
state-hash sentences ("Three changes also change what the hashes fold");
and, as git attributes them through this branch's merge of main, by
e59c09f: README.md's v1.1.0 Releases line and streaming.md's
"(v1.0.0, v1.0.1, v1.1.0)".

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>

---------

Co-authored-by: Claude Opus 5.5 (1M context) <[email protected]>
@luisleo526
luisleo526 deleted the r5/int26 branch October 5, 2026 02:43
luisleo526 added a commit that referenced this pull request Oct 7, 2026
* Split native CI profiles and retain bounded cold-run diagnostics

* Document independent native proofs and preserve source anchors

docs/ci.md replaces two superseded descriptions of the old shared
native-live job:

- dbd17b3 (#320): the sentence "native-live.yml runs both profiles
  alongside native, reusing the same checksum-pinned WebSocket-enabled
  curl" is replaced by the three independent matrix cells description.
- INT26 (d093560): the old `native-live` timeout-table row (the larger
  runner's full set "about 25 min", "The verification hosts' release
  profile, the nearest they run, took 11.2-18.4 min" and "A fork's pull
  request runs the set without that row: 3.4 min on the standard
  runner") is replaced by the per-cell native, live-sanitizers and
  live-tsan rows measured on main runs 37398893123, 37461653250 and
  37478400505.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>

* Bound native rows by the slowest measured host and keep failed-row counts

A cold full-row native profile of d5ffd30 on a c5.4xlarge Spot host ran
941/941 rows: 940 passed and test_ci_verify was cut off by the 2100 s
default deadline (Timeout 2100.07 s). The same script then completed in
2177.7 s (162 tests OK) in that host's preflight. GitHub measured
984-1695 s. Raise the native default per-test deadline to 2700 s (24%
over the slowest measured host) inside a 2820 s CTest stage. The measured
cold pre-CTest time was 12.3 min, so a worst-case stage still fits the
unchanged 65-min verification step and 75-min job. Live profiles keep
900/1200 s.

That failed run's ci-summary recorded no executed/skipped counts. CTest
prints a listed row's labels after its status ("2 - test_ci_verify
(Timeout)   slow"), and CTEST_LISTED_ROW required the line to end at the
status, so the row list was unreadable. Accept trailing labels. A new
real-CTest test pins labelled failed, skipped and not-run rows.

docs/ci.md rewords the `native-live (native)` timeout-table row written
by the docs commit "Document independent native proofs and preserve
source anchors". Its sentence "The longest measured test_ci_verify row
was 1695 s; its new 2100-s default deadline gives 24% margin within a
2400-s CTest stage" now carries the Spot measurement and the new bounds.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>

* Keep real CTest deadline test compatible with optional JUnit

Use the existing CTest capability detector and condition only XML presence; retain the real timeout, witness, row-count, elapsed and log checks.

Rewrite the driver-default and blanket two-times timeout sentences introduced by d093560 (INT26, #290). Document the workflow's 47-minute native and 20-minute live overrides and the table's measured-margin policy without changing historical timings.

* Accept older CTest failed-list rendering without losing label coverage

Allow the real labelled fixture to render an undecorated failed-list row. Verify slow/live labels for every fixture row through genuine CTest JSON inventory, retain the synthetic label-suffixed parser witness and all row accounting, and require the real failure exit code. Leave JUnit capability handling and production code unchanged.

---------

Co-authored-by: Claude Opus 5.5 (1M context) <[email protected]>
luisleo526 added a commit that referenced this pull request Oct 18, 2026
…415)

* ci: keep every verification job on standard runners

Apply the owner cost stop of 2026-10-18 to pushes, schedules, dispatches and every pull request until the ci-spot pool is live. Replace the paid-runner routing introduced by d093560 and carried into native-live by 065ef1d; retain the standard image matrix and all existing timeouts.

No tests, builds or workflows run locally per the executor brief.

* ci: enforce the standard runner contract in preflight

Replace the event-based runner contract and mutation cases introduced by d093560 with ubuntu-24.04 and matrix.os. Refuse pf-linux-x64-16, every *-xlarge or *-large label and every larger_runner key, including in the release matrix, while retaining the remaining workflow checks.

Add rejection cases for paid labels, obsolete keys and conditional paid routing. Preserve comment tolerance and core-count checks. Tests intentionally not run under the executor no-run rule.

* docs: record the standard runner cost stop and ci-spot handoff

Reword the runner-selection and timing assumptions introduced by d093560 (#290) and the documentation-only runner sentences introduced by 133f571 (#308). Keep the platform job limits recorded by 2394ba2 (#373).

Record the owner decision of 2026-10-18 after larger-runner costs exceeded US$3,000: every event uses free standard runners until the ci-spot pool is live. Describe the unconditional runner contract and remove obsolete larger-runner timing estimates while retaining measured standard-runner durations.

No local verification run, as required by the executor brief.

* test(ci): pin the standard-runner mutations precisely

Target the full runs-on line in both build-runner rejection cases. The bare matrix.os expression matched the earlier leg name, leaving runs-on unchanged and producing the wrong finding in PR #415 CI run 39119916194.

Preserve the build leg name and the expected runner-finding assertion. Leave scripts/ci_preflight.py unchanged. No tests or verification run locally under the executor no-run rule.
luisleo526 added a commit that referenced this pull request Oct 18, 2026
* ci: route CI Linux x64 jobs through the live ci-spot pool

* ci: route corpus parity through the ci-spot build class

* ci: route native live profiles through the ci-spot pool

* ci: route documentation through the public ci-spot class

* ci: route manual baseline promotion through ci-spot

* ci: route release Linux x64 jobs through ci-spot

* ci: require exact ci-spot routing and job labels in preflight

Replace the CR-170 standard-only runner contract with the public and engine-x64-16 fragments, including fork and untrusted-event fallback. Require one matching PF_CI_LABELS string at job scope; pin the Linux-only build and release matrix routing and the unchanged hosted legs. Retain larger-runner, timeout, core-count and reusable-workflow guards.

Update mutation and stage tests for missing, duplicate and incorrect PF_CI_LABELS, wrong label lists, unsafe fragment changes, paid labels and hosted exceptions. No tests, builds, linters or verification scripts run locally under the executor no-run rule.

* docs: record the live ci-spot pool and hosted fallbacks

Supersede the stopgap sentences from 3484a7c, squash-merged as 693fd9e (#415, CR-170). Reword the runner-selection and timing assumptions from d093560 (#290) and the documentation-only runner sentence from 133f571 (#308); preserve the platform limits from 2394ba2 (#373).

Record the 2026-10-18 live-pool bulletin, exact fragment and environment labels, class allocation, actor allowlist, hosted matrix legs and event fallbacks. Keep historical timings separate from unmeasured pool performance. No local verification run under the executor no-run rule.

* ci: restore release and deployment jobs to their original hosted runners

Apply the L6 production-credential ruling to Cloudflare docs deployment, baseline promotion and every release job. Restore all three workflow files byte-for-byte from origin/main, including their original hosted labels, and remove pool environment labels. No steps, permissions, timeouts or matrix populations change.

No tests, builds, linters, preflight, corpus verification or workflows run locally under the executor no-run rule. Nothing pushed.

* ci: adopt the b240f6d7 hosted fallback for pool jobs

Match the current pf-ci-spot public and engine-x64-16 fragments from bulletin #635. Change the hosted fallback to ubuntu-24.04 for all ten pool job definitions and preserve their matching PF_CI_LABELS, actor checks, fork protection and macOS routing.

No tests, builds, linters, preflight, corpus verification or workflows run locally under the executor no-run rule. Nothing pushed.

* ci: require hosted runners for credential-bearing jobs

Pin the b240f6d7 expressions and original hosted release/deployment routes. Detect non-GITHUB_TOKEN secrets, inherited workflow environment secrets, job or workflow OIDC write permissions and deployment environments. Require hosted routing without PF_CI_LABELS for credentials and current fragments with matching labels for other Linux x64 jobs. Preserve the larger-runner, timeout and core-count guards. Add must-fail credential and old-fallback cases and a must-pass case for the current hosted release workflow.

No tests, builds, linters, preflight, corpus verification or workflows run locally under the executor no-run rule. Nothing pushed.

* docs: record the L6 hosted credential rule and current pool fallback

Reword the pool-allocation, release/deploy routing and fallback sentences introduced by 28fe3466a and carried into f9bee22. Cite pf-ci-spot b240f6d7 and bulletin #635, retain the Dependabot and historical policy references, and explain the exact original hosted labels and updated preflight contract.

No tests, builds, linters, preflight, corpus verification or workflows run locally under the executor no-run rule. Nothing pushed.

* test(ci): anchor pool label mutations to job-level env

An unanchored four-space env search matched the tail of step-level env in promotion and release jobs, so the negative fixture never put PF_CI_LABELS in the job environment. Anchor the env and steps keys to complete job-level lines in both label fixture builders.

Assert the injected label at job scope and require the exact hosted-job diagnostic. Keep the existing hosted release baseline and the production guard unchanged. No tests, builds, linters or verification scripts run locally under the executor no-run rule. Nothing pushed.
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