Repository navigation
docs: make every README and doc page true before the release - #300
Merged
Merged
Conversation
…GINE) Audit of every README and doc page of pineforge-engine against engine main 35db01c and the live measurement; each change names its source. What was wrong, and the source of the truth: - Parity numbers were the retired 4,190-probe round-39 era (badges, hero, scoreboard, lane table, contributing-llm.md, design/progress pages). Now the active baseline pineforge-parity-baseline-20260929-engine-35db01c8 (snapshot sha256 47cec517..., population cf857209...): 8,006 probes, 7,989 graded = 7,905 excellent + 84 strong, 17 TradingView-side anomalies excluded, 18 lanes, 2,759,431 TradingView trades (population tvTradeRows / 2). The "2.8M matched" count has no source in the snapshot and is gone. Public corpus: 311 excellent + 1 declared anomaly (scripts/check_corpus_parity.sh pinned headline; parity step of the XAU-CAL lane job on this tree), and anomaly-equity-mirror-strategy-equity-01 is that anomaly (it does not match trade-for-trade on the pinned corpus). - Versions: no 1.0.0, 0.14.0 or rc tag exists (git tag; gh release list). CHANGELOG's "## 1.0.0" becomes "## Unreleased" and lists #292-#298, which it lacked (squash messages 7f807b9..35db01c); "34 more" PF_API is 39. README Releases: v0.13.1 entry added, v0.13.0 line corrected, the merged live/abi-v4 "Unreleased" line and the 1.0.0 line replaced. Pages that framed 1.0 as shipped now say planned. - Front door 1 could not run: pineforge-codegen has no CLI (0.10.4 or main), PyPI 0.10.4 output does not compile against main (cc log), a plain -lpineforge link drops the runtime C ABI (run_strategy.py refuses it), and run_strategy.py needs --ohlcv/--no-trim-output without the corpus. The new block ran end to end from a clean clone (14 trades on the tutorial feed). - Prerequisites: floating-point std::to_chars (src/str_utils.cpp:55) needs GCC 11 / libc++ 14; ctest --test-dir needs CMake 3.20; examples need -DPINEFORGE_BUILD_EXAMPLES=ON; the install also ships libpineforge_kernel.a. - MCP section: the image, hosted server and npm package run engine 0.13.1 + codegen 0.10.4 (pineforge-release v0.1.25 notes); hosted server and npm package descriptions corrected from their live/ published sources. - Benchmarks: every number reproduces (check_provenance 163/163); framing fixed (commit and method named, PineTS has had strategy.* since 0.9.17), recipes state their prerequisites, two wrong failing-gate cells fixed, personal host name scrubbed from 14 Google Benchmark JSONs with the manifest sha256 values updated (origin_sha256 keeps the measured file). - Reference pages: native-engine.md, pine-to-native.md, coverage.md, pine_v6_coverage_detail.md, the contract pages, ci.md and the design notes described removed members and pre-#253/#254 behaviour, stale counts (src 48 -> 53 .cpp, 66 -> 70 indicator classes, 43/33/10 -> 46/35/11 NativeRunSpec fields, floors 786/298 -> 790/300), wrong anchors, drawings as absent, and transpiler status of an old codegen (now "on codegen main, not in a release yet" where it differs from v0.10.4). - Hygiene: internal host names, personal paths, private-repo references and campaign tool names marked or removed; the banner image's stale "V0.8.0 / 245/246 / 0 engine bugs" strip removed; a dead pineforge-workflow-live link replaced by the public pineforge-live repo. - Two orphan pages, docs/cheatsheet-runtime-and-execution.md and docs/tv-parity-probe-spec.md, were wrong in their load-bearing claims (17 removed engine members, pointvalue/FX/slippage claims) and nothing linked them: deleted. - Sample outputs were stale: every page and the tutorial README printed the tutorial MACD as 49 trades / -190.85; since 650b0cb (in v0.13.1) the report counts the range-end close, and every harness prints 50 / +569.97 (runs on a clean clone of this branch). examples-python-sweep.md's 10000 capital could not pay for its 1-BTC order (every combo 0 trades): 100000, output re-measured. examples-multi.md output format matches multi.py; the magnifier A/B page shows today's run. The report fields script_tf_ratio and needs_aggregation print their contract values again on this base (FIX-E1E2, #299; tutorial/run_mtf.py Table A: ratio 1/1/4/16, agg 0/0/1/1), so the pages state them as plain facts. - Doxygen: `file:line` in four pages autolinked to a dead "file:line" URL; spelled `path:line` now. Build: 0 warnings. Review fixes (REVIEW-DOCS-ENGINE-final.md, verdict MERGE-WITH-FIXES, of the first version of this change, 79bd84c1 + 6cb01aa0): its five P2 findings with the reviewer's fix text, and every P3 row but the last. P2 1. docs/pages/metrics.md: a timestamped FX curve no longer fails closed for a leveraged position across a rate change; that position takes the broker-open margin checkpoint at the step bar's open (tests/test_affordability_fx.cpp:152-154, :781). 2. docs/pages/report-schema.md: the #254 caveat sat inside the table, so the bar_magnifier_enabled row rendered as text; it now follows the table. 3. CONTRIBUTING.md, docs/pages/getting-started.md: compiler minimums are the ones README.md states (floating-point std::to_chars, src/str_utils.cpp:55: libstdc++ from GCC 11, libc++ 14, macOS 13.3; g++-9 and g++-10 fail). 4. docker/README.md: the sample is the published image's run (50 trades, 17/33, +569.97, trade 1 entering 1777488300000). 5. docs/pages/mtf.md: expected Table A says main prints 0 in ratio and agg? until the #254 regression is fixed. P3 - configuration.md, CHANGELOG.md, coverage.md: v5 scripts do not "keep" host defaults (both codegens refuse //@Version=5); code from an earlier codegen and a hand-built PineStrategyConfig do. - streaming.md: "Every strategy_stream_* call above" (create/free return no status). - examples-multi.md: a module also exports std::piecewise_construct. - integration-cmake.md: EXACT 0.13.1 also matches a git-checkout build of main; the ABI promise starts "From 1.0.0". - ffi-python.md, tutorial-macd.md: the mirror covers the report structs, not every struct (ffi-python.md:15-17). - configuration.md: tracing costs one branch per traced call when disabled (report-schema.md:180), not zero. - benchmarks/results/raw/README.md: "Two edits were made" (host_name was rewritten in every Google Benchmark file); benchmarks/README.md: the maintainer fetch runs with the campaign environment sourced. Wording only. - AGENTS.md: the configure line exports compile commands, which the receipt check needs; AGENTS.md and docs/ci.md: promote-baseline.yml is installed from the campaign copy, not unchanged (31 lines differ). - docs/ci.md: the debug profile also skips the twin-parity guard (TWIN_PARITY_PROFILES). - mtf.md, timeframes.md: "reported for an engine fix" dropped (no public issue). - native-feature-parity.md: the C API "landed on main", not "shipped". - tutorial/README.md: Table B's script_tf_ratio prints 0 on main until the #254 regression is fixed. Not changed here: benchmarks/results/summary.md and trade_comparison.md keep the first version's text (hand edits of generated output; fixing the generator, benchmarks/compare.py:361 and scripts/verify_corpus.py:1403, is an engine-lane follow-up). No benchmark number or results file changes beyond the raw/README.md and benchmarks/README.md wording above: BENCH-REFRESH is re-measuring the benchmark. Rebased onto 4dc496d (FIX-E1E2, #299), squashed to one commit. docs/ci.md states the new floors: PR registration 773 (debug, sanitizers) and 782 (native), full-run release 792 and kernel 300 (scripts/ci_verify.py:320, :594, :638). The one rebase conflict, a native-refactor-progress.md row, keeps main's re-anchored lines and this change's host-name removal. Sentences this commit deletes or rewrites past recognition, named by the commit that introduced them (scripts/check_doc_reverts.py): - a4ab775 (docs: source-verified runtime-overrides + order-execution cheatsheet): cheatsheet-runtime-and-execution.md (142) - 480fd19 (Production-readiness probes + engine state-reset / finite-fill fixes (): tv-parity-probe-spec.md (61) - 28ad088 (docs: add Part 3 (cross-cutting behaviors) to engine cheatsheet): cheatsheet-runtime-and-execution.md (60) - a8f84b9 (docs(api): OpenCV-style C ABI reference site + CF Pages deploy): abi-stability.md (21), tutorial-macd.md (3), examples-magnifier.md (2), examples-multi.md (2), getting-started.md (2), index.md (2), report-schema.md (2), examples-rust.md (1), ffi-python.md (1), install.md (1), lifecycle.md (1) - cc4a56e (docs: add Pine v6 runtime coverage report (docs/coverage.md)): coverage.md (37) - 24dcc53 (docs: reconcile Pine v6 audit + coverage docs with the 2026-06-10 audi): pine_v6_coverage_detail.md (29) - d093560 (INT26: wave H, the late picks and the corpus re-pin to b40aa8e (1.0.0-): native-refactor-progress.md (13), install.md (3), pine-to-native.md (2), CONTRIBUTING.md (1) - 73817c1 (Lower generated Pine execution onto the native kernel and retire the l): cheatsheet-runtime-and-execution.md (8), README.md (3), tv-parity-probe-spec.md (2), reservation-expansion-candidate.md (1) - b1fbf0b (docs: detailed Pine v6 coverage report (per-identifier audit)): pine_v6_coverage_detail.md (14) - 622d653 (docs(README): rewrite for the round-11 engine — brand-first, OSS-first): README.md (12) - 46b2ced (docs: ABI v4 live surface; cheatsheet corrections (trail_price is read): cheatsheet-runtime-and-execution.md (7), README.md (3), live-surface.md (2) - c45cf5a (refactor: move retained-parent priority into Pine compatibility): README.md (7), pine-order-priority-boundary.md (4) - c1084ff (docs: record round 39 fractional price admission parity): README.md (10) - f268342 (feat: add historical account FX lifecycle (#125)): cheatsheet-runtime-and-execution.md (10) - af4c688 (Document realtime streaming lifecycle): cheatsheet-runtime-and-execution.md (5), coverage.md (3), examples-python-sweep.md (1), tutorial-macd.md (1) - 9507d8f (refactor(corpus): pull equity-mirror into corpus/parity-anomalies/): coverage.md (10) - 76482e6 (fix(runtime): align TA coverage and corpus replay): coverage.md (9) - cc0b22d (Refactor reservation growth and Pine market instruction ownership): fill-model.md (7), frozen-market-instruction.md (2) - d5a5eaf (Align lifecycle and admission documentation with final v11 model): market-admission.md (9) - a6b0b70 (docs(audit): exhaustive Pine v6 coverage audit — 38 critical, ~62 mino): pine_v6_audit_master.md (7) - 1e360bd (INT27: wave I -- magnifier on TradingView's intrabars, recalculation f): cheatsheet-runtime-and-execution.md (5), magnifier.md (1) - 1dd5430 (Add the native feature-parity design: gaps, kernel-vs-adapter rulings,): design/native-feature-parity.md (6) - 74491fa (INT28: wave-J engine integration (TVDEF-DROPS, W3/W3B/W4/W5/W6/W6B/W8,): cheatsheet-runtime-and-execution.md (4), README.md (1) - 7ad5d38 (docs: refresh parity scoreboard through round 23): README.md (5) - 7f807b9 (Another symbol's bars reach a run as a feed: kernel instrument feeds +): coverage.md (4), mtf.md (1) - 3b13183 (Refactor order admission and trigger lifecycle into generic submodels): exit-leg-lifecycle-reflection.md (5) - e244d65 (docs(coverage): update pine_v6_coverage_detail.md for post-sprint stat): pine_v6_coverage_detail.md (5) - f864be5 (refactor: isolate Pine cap policy from native order state): cheatsheet-runtime-and-execution.md (2), pine-intraday-cap-boundary.md (2) - e7cdf05 (Add native execution terms: host-resolved sizing, exact reversal, prec): abi-stability.md (2), native-engine.md (2) - b4dd9a3 (docs(mtf): add multi-timeframe tutorial + Doxygen page): mtf.md (4) - 5c2be9d (docs: record round 38 whole-lot budget parity results): README.md (3) - 6bfe983 (docs: align round 39 lane table and diagnostic evidence): README.md (3) - 471a113 (Docs: the README carries the 200-strategy refresh -- tiers per engine ): README.md (3) - 8df08f2 (fix(engine): make dead strategy.close semantically inert (#143)): cheatsheet-runtime-and-execution.md (3) - d3cca9e (Docs: correct migration semantics and harden publication guards): cheatsheet-runtime-and-execution.md (2), pine-to-native.md (1) - 52f4dde (Preserve complete mirror context and earlier standalone ABI controls): fill-model.md (3) - 4fb9db3 (Docs: CONTRIBUTING.md rewritten for someone who has never seen this re): CONTRIBUTING.md (2) - 2ab2bfb (docs(README): round-11 closed-test results and a full factual refresh): README.md (2) - 0501468 (docs: task-13 fix round 1 — v4 report mirrors (schema, Rust), probe-su): README.md (1), cheatsheet-runtime-and-execution.md (1) - cfbe677 (Docs: the session flags end a session where TradingView ends it (R5 la): cheatsheet-runtime-and-execution.md (2) - 6aa1d13 (runtime: wire syminfo.pointvalue through all money paths; hold ScopedT): coverage.md (2) - 8b7965a (Docs: onboarding written for the contributor who is a language model (): contributing-llm.md (2) - 16f3652 (Docs: the two site front doors re-derived against HEAD (R5 lane L14-B,): index.md (2) - 04b0588 (Add native resolved execution settlement and preserve paid entry costs): metrics.md (2) - 149f77c (Replace seven pending-order flags with quantity and event facts): quantity-intent.md (2) - 962960b (Session flags match TradingView on multi-window and extended-hours cha): pine_v6_coverage_detail.md (2) - 5215291 (Merge branch 'round5/bar-indexed-extremes-ring' into round5/candidate): pine_v6_coverage_detail.md (2) - b1b27f0 (Initial commit: PineForge runtime v0.1.0): CONTRIBUTING.md (1) - bfdbe96 (docs: refresh parity scoreboard through round 24): README.md (1) - cda51d5 (Record the round 35 parity scoreboard and raw trade gains): README.md (1) - 0d76a09 (Wave G: no ordinary quantity request stops a run, cancelled exits stay): adr/0001-kernel-adapter-boundary.md (1) - 0983770 (Unify remaining fill paths under native settlement (#247)): ci.md (1) - 50339d0 (Docs: the §1 inventory carries its closure markers, and a gate keeps t): design/native-feature-parity.md (1) - 8b3b481 (docs+fix: org rename to pineforge-4pass; AI capability-gap note in REA): examples-multi.md (1) - c28c2db (Derive placement state from original admission observations): fill-model.md (1) - 208f00b (docs: refresh ctest count + run_strategy usage example): install.md (1) - 0c174d9 (Docs: the arm options, the adoption table and the grid re-lowering wai): native-engine.md (1) - 4b05b62 (Adapter re-lowering: the TradingView margin call runs through the kern): native-engine.md (1) - 8e558eb (Say what the per-bar broker hash is for, where its API is documented (): native-engine.md (1) - 5f3299d (Build the standalone native execution path (#243)): native-engine.md (1) - b18f75e (Native sizing bases and fractional reduces (R5 lane L3)): native-engine.md (1) - 0ef00da (The pages say a working row tells an absent arm from an arm at 0.0 (R5): native-engine.md (1) - 7328f4d (Docs: the migration page is a complete map, and a gate holds it comple): pine-to-native.md (1) - ce64f06 (docs(audit): update Pine v6 master audit — mark 20 resolved critical i): pine_v6_audit_master.md (1) - a19f5a8 (docs: repoint codegen references to pineforge-codegen-oss; purge old f): pine_v6_audit_master.md (1) - 2db58d9 (runtime: reconcile per-trade MFE/MAE with TV excursion semantics; gate): pine_v6_audit_master.md (1) Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
luisleo526
marked this pull request as ready for review
September 29, 2026 21:18
luisleo526
added a commit
that referenced
this pull request
Sep 30, 2026
…gate column is the rubric's
A closed slot's directory, NNN-<author>-<title>, carries the TradingView
author's handle, and fourteen committed files repeated it: the six result
files under results/ (five reports and the compile log), seven raw timing
files and the throughput package's JSON. Every harness step that writes a committed file now prints
the slot as NNN-closed:
- paths.public_name() is the one rule; compare.py (summary.md,
trade_comparison.md) and speed/time_pynecore.py (its JSON keys) use it,
and speed/pineforge_bench.cpp registers a closed-root slot as NNN-closed.
- select_population.py writes the public view of the manifest to
results/selection.{json,md} (closed slots lose their probe id and
replacement queue) and the full manifest beside the closed root, in
assets-closed/_selection/; --render-public re-renders the public view
without a new draw. The committed selection is re-rendered that way from
its own full manifest (the draw is unchanged).
- The seven raw timing files and results/pynesys-compile-log.md are
rewritten in place (closed names only); manifest.json keeps each
measured file's sha256 as origin_sha256 and names the edit.
results/raw/README.md's Edits paragraph, b2a578c's (#300) "Two edits
were made", now counts three and describes the third.
- tests/test_public_names.py fails when any committed result spells a
closed slot otherwise. speed.md and throughput/benchmark_results.json
still do until the refresh regenerates them.
compare.py also printed a probe's declared inputs.json "notes" in the
failing-gates column of every engine's row: analyze_strategy returns the
declared note as its notes. Slots 023 and 168 showed PineForge's own
history in PyneCore's gate cell (DOCS-ENGINE fixed the two cells by hand
in b2a578c, #300; regeneration would put them back). failing_gates() prints the
rubric's gate booleans instead. A slot without strategy_pyne.py reads its
PyneSys compile error from the committed compile log when the maintainer's
request ledger is absent, so a fresh checkout reports slot 192 as the
compile rejection it is, not as a runner error carrying a local path.
compare_indicators.py links canonical.pine in the assets repository at the
last assets commit that changed it: GitHub does not resolve a relative link
into a submodule path (DOCS-ENGINE fixed that cell by hand as well).
Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
luisleo526
added a commit
that referenced
this pull request
Sep 30, 2026
…e -- 36x over PyneCore 6.10.3 on that host; 35db01c takes 0.35x the time of 063e446 there The timing window (2026-09-29, 20:36-23:27 UTC) ran on a dedicated AWS c7a.8xlarge (AMD EPYC 9R14, 32 cores, SMT off, Ubuntu 24.04), nothing else on it: the Mac the 2026-06-11 and 2026-09-22 tables were timed on (Apple M4 Max) never got quiet (load 28-40 from Spotlight reindexing, a VM and other projects), and a shared NVIDIA GB10 was given up once another supervisor's suites started there (its partial timings are a cross-check only, not published). Times from different hosts are not compared; every comparison the READMEs print was measured in this window. Measured (results/raw/2026-09-29-35db01c8, manifest.json): - PineForge 35db01c with generated.cpp from codegen 121b3e6a, magnifier on, pinned to one core: median 66.8 ms per strategy, 807k bars/s (505k-1133k). Build g++ 13.3 Release; its 201 trade lists on this host are byte-identical to the graded (Mac) ones. - PyneCore 6.10.3, 8 concurrent on eight pinned cores: median 2,629 ms, 200 slots (192 has no strategy_pyne.py; 143 ran all 20 runs). Median speedup 36x (p5 15x, p95 131x); vectorbt 13 ports 209.3 ms (4.2x); PineTS 1416.2 ms. - Same-window A/B, all 201 slots, each engine on its own generated.cpp, new/old/old/new: 35db01c takes 0.35x the time of 063e446 at the median (p10 0.28, p90 0.50), faster on all 201. A perf profile of two slots shows 063e446's per-bar continuation-hash fold, event-journal scans, dynamic_cast and out-of-line accessors, none of which 35db01c keeps. - The 2026-06-11 engine, rebuilt there: 4-8x faster than 35db01c on its three probes. PyneCore 6.10.3 vs 6.10.2 on 26 public slots: 1.01x. - Throughput package: five runs 0.782/0.786/0.778/0.779/0.777 M bars/s; run 4 published (0.78). A first run 1 was stopped: reproduce.sh's configure found the fetched Eigen as a system package, changed every compile command and began rebuilding the tree on the pinned core. After an all-core rebuild (then a no-op), identical trade lists, and a recheck of the 26 A/B slots (1.00x), the five runs built nothing. - Every batch passed the quiet gate (load < 6, no build/test process, the pinned cores idle); gate.tsv and a load trace per batch are committed. Harness: aggregate.py takes the timing host's facts (--host host.json) and prints the busiest pinned core per batch; check_provenance.py derives the new headline from the window (the host line, the host change, the 201-slot A/B, the PyneCore release A/B, the 2026-09-22 table read from 35db01c, the tier changes against its summary.md, the June engine on this host) and drops the cross-host comparisons; test_check_provenance.py reads its targets from the README. Docs: benchmarks/README.md headline, non-excellent rows (PineForge none; PyneCore 63, the window explanation re-measured, the multi-timeframe rows after 6.10.3), methodology (pins in the timed run, pinning, same-host comparisons), Fairness (the 2026-09-24 strategy() defaults the tapes predate); the engine README's speed badge, the Fast bullet and the cross-engine section; throughput/README.md and results/raw/README.md for the new window. Rebased onto main 112c134 (DOCS-ENGINE b2a578c #300, 7d33942 #301, 112c134 #302). The engine README keeps main's text outside the speed badge, the Fast bullet and the cross-engine section, #302's counts and badges included. The Fast bullet keeps b2a578c's framing (engine, date, PyneCore timed as a subprocess with its interpreter start-up) with this window's numbers, and names both populations: the speedup's 200 strategies and the bars/s median's 201 slots. The section keeps b2a578c's PyneCore-sources paragraph and its "main has moved on since" clause (4dc496d, #299, changed src/ after 35db01c, and nothing was re-measured on it). Its PineForge paragraph names the engine and codegen the tiers were graded at, and its vectorbt bullet keeps b2a578c's form with this window's numbers: a 4.2x median per-strategy speedup, and vectorbt is still faster on 2 of the 13 (021, 064). results/raw/README.md's Edits section replaces the paragraph b2a578c wrote (and the previous commit extended) with one paragraph per window. Sentences this commit deletes or rewrites past recognition in README.md, named by the commit that introduced them (scripts/check_doc_reverts.py): - 471a113 (the README carries the 200-strategy refresh, lane BENCH2): 7 -- the strong row 181 and its extra trade, "to the tick", the compile rejection, the three runtime errors, 143 "could not be timed", and "the ratio fell because the engine is slower per bar". - a02160f (PineForge re-timed at engine 063e446, lane BENCH3): 3 -- the speed paragraph's host, engine and window. - f867096 (the multi-timeframe PyneCore rows reproduce 0-85.5 %, lane F10): 1 -- the nine multi-timeframe scripts, rewritten for 6.10.3. - b2a578c (make every README and doc page true before the release, DOCS-ENGINE, #300): 1 -- the 2026-06-11 engine "still runs close to its June timings", measured on the Apple M4 Max; this window's same-host timing of that engine replaces it. Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
luisleo526
added a commit
that referenced
this pull request
Sep 30, 2026
…des #303, #304, #307) (#308) * Tests: the lookup-index scaling row times its two tapes in turn, in user CPU (lane pf-perf-scale) Engine CI failed test_adapter_lookup_index_scaling's applied-reversals ratio on main at 35db01c (run 36554781580 attempt 1: 5.50, 6,000 bars 0.1179 s, 24,000 bars 0.6488 s) and 4dc496d (run 36621162191: 5.31, 0.2432 s, 1.2927 s). Not a regression: the same trees passed on the same runner class -- 35db01c's re-run 3.97 (0.1178 s, 0.4672 s), XAU-CAL's PR head 27c2d8e (same tree) 4.01, FIX-E1E2's PR head b045b96 (same tree as 4dc496d) 3.64 (0.2375 s, 0.8642 s). The small block matched; the large block ran 39 and 50 % dearer. 32 earlier main/PR Release runs read 2.81-4.38 (ci-diagnostics LastTest.log). On idle spark cores (pinned, base/XAU-CAL/head in turn, 12 runs each): 0411892 / 35db01c / 4dc496d read 3.85-3.94 / 3.89-3.93 / 3.91-3.97 (Cortex-A725, CI's 6,000 / 24,000 bars) and 4.03-4.07 / 4.03-4.05 / 4.04-4.07 (Cortex-X925, 24,000 / 96,000); the reversal leg costs 104,512 -> 104,322 user instructions a bar from 6,000 to 96,000 bars at all three (perf stat instructions:u), the bracket leg ~66,300 flat. XAU-CAL adds no per-bar lookup on this path: day_label_origin returns at once with no day labels, and prepare_day_labels returns before any work for a non-"D" script. The row timed its legs in blocks (five small runs, then five large), so a load that rises after the first small run and before the first large one ends slows the large block alone. It now times the tapes in turn, the large tape first and last (six rounds, the order alternating): no single rise or fall of the load gives the small tape a quiet sample the large one lacks. Migrated from a Cortex-X925 to a Cortex-A725 core (2.3x the CPU a bar) 1.25-7 s into the row, the unchanged row failed for a move 1.75-3 s in (5.93-9.26, 6 of 24) and this one for none (at most 4.04). The legs are timed in user CPU (ratio_timing::user_cpu_seconds, as INT27 did for the lower-lookup row) because the in-turn order moves the allocator's page faults between the tapes: process CPU read in-turn at 4.13 against the blocks' 4.00, user CPU 4.04 against 4.01 (A725, 12,000 / 48,000 bars). After (same spark cores, 12 runs each, unchanged/fixed in turn): reversals 3.90-3.97 -> 4.02-4.08 (A725), 4.02-4.06 -> 3.94-4.01 (X925); brackets 3.94-4.02 -> 3.99-4.04. Mutant sensitivity kept: with every adapter lookup walking (kIndexedFrom unbounded) the fixed row reads 6.37-6.43 and fails, the unchanged row 6.19-6.27. The bound stays 5. No src/ or include/ change. Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]> * CI: skip heavy jobs on docs-only changes (lane pf-ci-docs) A new first job, changes, runs scripts/ci_docs_only.py on the standard runner and answers docs_only. A changed path is documentation when it is a Markdown file or lies under docs/, unless it lies under .github/, benchmarks/, scripts/ or tests/, is a CMake file, or is one of the four files a proof job reads (docs/pages/pine-to-native.md and docs/pages/native-engine.md, whose code blocks CTest rows compile and run; ADR-0001, which test_kernel_residuals, test_native_feature_rulings and the kernel profile's kernel-residuals stage read; docs/build.sh, whose retry self-test is a CTest row). A pull request is its tested merge against the base it merged into, a push is before..after; every doubt (a dispatch, a created or forced push, a merge of another head, an unreadable commit, an empty change, a failed classification) answers no. Each proof job (the four build legs, sanitizers, kernel-only, native-live, corpus-parity-subset) now needs changes alone and skips only a docs-only answer; preflight, which holds the documentation guards, and docs.yml run as before. The build aggregate passes a proof lane that succeeded or was skipped after changes succeeded and answered docs-only, and fails any other skip or result; preflight must always succeed. Pushes to main follow the same rule: release.yml is dispatch-only and builds its own tarballs, promote-baseline.yml reads the maintainers' pineforge/verify and pineforge/parity statuses on the PR head, no workflow starts on workflow_run, and the ruleset requires only those two statuses. The ci-workflow-contract stage pins the new wiring; test_ci_preflight.py runs the aggregate's shell over every lane outcome; the new docs-only-tests stage holds the rule against real git histories and fails when a CMake file reads a path the rule would call documentation. Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]> * CI docs-only skip: review fixes on 4b6a21e (8a280b9 before the cherry-pick) (lane pf-ci-docs) - The changes job runs the base's copy of scripts/ci_docs_only.py (the pull request's base, or the pushed commit's parent) with --root, so a change to the rule is judged by the rule it changes; a base without the script runs every job. The classification step is pinned verbatim, and test_ci_preflight.py runs its shell in throwaway repositories. - A push must carry one commit whose parent is before; anything else is a doubt, so the shallow fetch of an older before is gone. git calls time out as a doubt. Git control files (.gitattributes) are not documentation. - Proof jobs skip only when changes succeeded and answered docs-only, the exact skip the build aggregate accepts. - No job of ci.yml, native-live.yml or corpus-parity.yml, nor any step, may continue on error. - docs/ci.md: the base copy, the one-commit push, the aligned condition, the badge after a documentation merge, and what the CMake scan checks; the start-order sentences no longer contradict the wait on changes: 116c461's "The compilation lanes start alongside preflight" and "Preflight and all proof jobs start in parallel" now say that the proof jobs start once the few-second changes job has answered. AGENTS.md: a documentation-only change runs preflight alone, written inside the existing lines so the pinned AGENTS.md:144-145 stays put. Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]> * Bench: no committed result names a closed slot by its directory; the gate column is the rubric's A closed slot's directory, NNN-<author>-<title>, carries the TradingView author's handle, and fourteen committed files repeated it: the six result files under results/ (five reports and the compile log), seven raw timing files and the throughput package's JSON. Every harness step that writes a committed file now prints the slot as NNN-closed: - paths.public_name() is the one rule; compare.py (summary.md, trade_comparison.md) and speed/time_pynecore.py (its JSON keys) use it, and speed/pineforge_bench.cpp registers a closed-root slot as NNN-closed. - select_population.py writes the public view of the manifest to results/selection.{json,md} (closed slots lose their probe id and replacement queue) and the full manifest beside the closed root, in assets-closed/_selection/; --render-public re-renders the public view without a new draw. The committed selection is re-rendered that way from its own full manifest (the draw is unchanged). - The seven raw timing files and results/pynesys-compile-log.md are rewritten in place (closed names only); manifest.json keeps each measured file's sha256 as origin_sha256 and names the edit. results/raw/README.md's Edits paragraph, b2a578c's (#300) "Two edits were made", now counts three and describes the third. - tests/test_public_names.py fails when any committed result spells a closed slot otherwise. speed.md and throughput/benchmark_results.json still do until the refresh regenerates them. compare.py also printed a probe's declared inputs.json "notes" in the failing-gates column of every engine's row: analyze_strategy returns the declared note as its notes. Slots 023 and 168 showed PineForge's own history in PyneCore's gate cell (DOCS-ENGINE fixed the two cells by hand in b2a578c, #300; regeneration would put them back). failing_gates() prints the rubric's gate booleans instead. A slot without strategy_pyne.py reads its PyneSys compile error from the committed compile log when the maintainer's request ledger is absent, so a fresh checkout reports slot 192 as the compile rejection it is, not as a runner error carrying a local path. compare_indicators.py links canonical.pine in the assets repository at the last assets commit that changed it: GitHub does not resolve a relative link into a submodule path (DOCS-ENGINE fixed that cell by hand as well). Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]> * Bench: PyneCore 6.10.3, the latest release; the harness pinned 6.10.2 uv.lock pinned pynesys-pynecore 6.10.2 (2026-09-20). 6.10.3 (2026-09-28) is the latest release, so the refresh measures it: `uv lock --upgrade-package pynesys-pynecore`, nothing else moves. Its fixes are in the code the bench exercises: `pyne data convert-from` wrote schedules on the wrong weekdays (Monday fell outside the session, so an unlagged daily request.security showed Monday bars that day's own close) and request.security aggregation resolves timezones like the runner. It also ships compiled wheels (a native math module). With 6.10.3 every compiled slot runs: 140, 166 and 197 raised a RuntimeError in request.security on 6.10.2, and 143 did intermittently. Only 192 has no trade list (PyneSys rejects its source). The committed strategy_pyne.py files are unchanged: no PyneSys request was made. Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]> * Bench: regrade 201 slots at engine 35db01c with generated.cpp from codegen 121b3e6a -- PineForge 201/201 excellent, PyneCore 6.10.3 137 The release pair: engine main 35db01c running every slot's generated.cpp re-emitted by codegen main 121b3e6a (transpile(strategy.pine, filename="strategy.pine"), the call that reproduces all 201 files of the previous codegen 89645d6 byte for byte; 159 of 201 files change). The benchmarks/assets gitlink moves to e564cb9 (branch bench/refresh-2026-09-30 of pineforge-benchmarks-assets); the closed half is in a new evidence tarball. TradingView changed three Pine v6 strategy() defaults on 2026-09-24 (initial_capital 1000000 -> 100000, default_qty_type fixed -> percent_of_equity, default_qty_value 1 -> 100); codegen 121b3e6a declares the new values when a script omits them (codegen #147). Every bench tape predates the change (closed tapes 2026-06-28..08-12), so a slot whose script omits one runs with the tape's value, pinned in inputs.json strategy_overrides as the corpus does: 64 slots (2 public, 62 closed). Without the pins the regenerated closed half graded 45 excellent and 42 weak (PnL p90 ~90 % on capital, extra trades on percent-of-equity sizing). PyneCore's own defaults are the pre-change values, so both engines run the tape's settings. Tiers (results/summary.md), against 2026-09-22 (engine 063e446): - PineForge: 201/201 excellent (was 200 + 1 strong). Slot 181's extra opening long is gone with the regeneration. - PyneCore 6.10.3: 137 excellent, 46 strong, 12 moderate, 4 weak, 1 minimal, 1 n/a (was 6.10.2: 133 / 42 / 8 / 12 / 2 / 4). 140, 166 and 197 now run; 192 stays a PyneSys compile rejection. - vectorbt: unchanged (13 ports, 4 / 6 / 2 / 1). Trade lists against the 2026-09-22 run (the old engine rebuilt and run through its own run_strategy.py reproduces those lists byte for byte): 173 of 201 are byte-identical. 27 move with the engine and its runner, not the regeneration (the same lists from the old generated.cpp on the new engine): 22 only in the favorable/adverse excursion columns, 2 only in the engine's incarnation column, and three in fills: 010 (six trades exit one bar earlier), closed 103 (90 grid-bot trade quantities) and closed 191 (one trade exits a bar earlier). One moves with the regeneration: closed 181 loses the extra opening trade. Every slot grades excellent. Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]> * Bench: time_pynecore.py --first submits the longest slots first, so the pool stays full A PyneCore slot that runs for a minute per backtest (178, then 162) takes 20 runs x its time in one worker. Submitted in slot order it started late and ran on alone after the queue drained, so the 2026-09-22 window re-timed 162 and 178 across tool calls, 178 partly beside other chunks. --first submits the named slots first; the other workers work through the rest, and the sweep keeps --workers processes running until its last minutes. Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]> * Bench: pineforge_bench times the graded strategy -- the slot's inputs.json pins apply, and each benchmark reports its trade count TradingView changed three Pine v6 strategy() defaults on 2026-09-24, after every bench tape was recorded; codegen 121b3e6a declares the new values for a script that omits them, and 64 slots pin the tape's values in inputs.json strategy_overrides. run_strategy.py applies those pins to the graded run, but the Google Benchmark harness ran strategy_create with defaults only, so on those slots it timed a configuration no tape has: slot 108 books 4,078 trades over the feed unpinned and 3,553 pinned. The harness now reads each slot's flat strategy_overrides object and applies it through the library's strategy_set_override after every strategy_create, as run_strategy.py does (values as the JSON writes them); a slot that pins settings its library cannot take is skipped with that error. It prints how many slots pin settings (64 of 201). The three benchmark kinds share one symbol table per dlopen, and each reports the last iteration's closed-trade count as a "trades" counter: the workload its time was measured on. Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]> * Bench: every engine re-timed at 35db01c on a dedicated AWS c7a.8xlarge -- 36x over PyneCore 6.10.3 on that host; 35db01c takes 0.35x the time of 063e446 there The timing window (2026-09-29, 20:36-23:27 UTC) ran on a dedicated AWS c7a.8xlarge (AMD EPYC 9R14, 32 cores, SMT off, Ubuntu 24.04), nothing else on it: the Mac the 2026-06-11 and 2026-09-22 tables were timed on (Apple M4 Max) never got quiet (load 28-40 from Spotlight reindexing, a VM and other projects), and a shared NVIDIA GB10 was given up once another supervisor's suites started there (its partial timings are a cross-check only, not published). Times from different hosts are not compared; every comparison the READMEs print was measured in this window. Measured (results/raw/2026-09-29-35db01c8, manifest.json): - PineForge 35db01c with generated.cpp from codegen 121b3e6a, magnifier on, pinned to one core: median 66.8 ms per strategy, 807k bars/s (505k-1133k). Build g++ 13.3 Release; its 201 trade lists on this host are byte-identical to the graded (Mac) ones. - PyneCore 6.10.3, 8 concurrent on eight pinned cores: median 2,629 ms, 200 slots (192 has no strategy_pyne.py; 143 ran all 20 runs). Median speedup 36x (p5 15x, p95 131x); vectorbt 13 ports 209.3 ms (4.2x); PineTS 1416.2 ms. - Same-window A/B, all 201 slots, each engine on its own generated.cpp, new/old/old/new: 35db01c takes 0.35x the time of 063e446 at the median (p10 0.28, p90 0.50), faster on all 201. A perf profile of two slots shows 063e446's per-bar continuation-hash fold, event-journal scans, dynamic_cast and out-of-line accessors, none of which 35db01c keeps. - The 2026-06-11 engine, rebuilt there: 4-8x faster than 35db01c on its three probes. PyneCore 6.10.3 vs 6.10.2 on 26 public slots: 1.01x. - Throughput package: five runs 0.782/0.786/0.778/0.779/0.777 M bars/s; run 4 published (0.78). A first run 1 was stopped: reproduce.sh's configure found the fetched Eigen as a system package, changed every compile command and began rebuilding the tree on the pinned core. After an all-core rebuild (then a no-op), identical trade lists, and a recheck of the 26 A/B slots (1.00x), the five runs built nothing. - Every batch passed the quiet gate (load < 6, no build/test process, the pinned cores idle); gate.tsv and a load trace per batch are committed. Harness: aggregate.py takes the timing host's facts (--host host.json) and prints the busiest pinned core per batch; check_provenance.py derives the new headline from the window (the host line, the host change, the 201-slot A/B, the PyneCore release A/B, the 2026-09-22 table read from 35db01c, the tier changes against its summary.md, the June engine on this host) and drops the cross-host comparisons; test_check_provenance.py reads its targets from the README. Docs: benchmarks/README.md headline, non-excellent rows (PineForge none; PyneCore 63, the window explanation re-measured, the multi-timeframe rows after 6.10.3), methodology (pins in the timed run, pinning, same-host comparisons), Fairness (the 2026-09-24 strategy() defaults the tapes predate); the engine README's speed badge, the Fast bullet and the cross-engine section; throughput/README.md and results/raw/README.md for the new window. Rebased onto main 112c134 (DOCS-ENGINE b2a578c #300, 7d33942 #301, 112c134 #302). The engine README keeps main's text outside the speed badge, the Fast bullet and the cross-engine section, #302's counts and badges included. The Fast bullet keeps b2a578c's framing (engine, date, PyneCore timed as a subprocess with its interpreter start-up) with this window's numbers, and names both populations: the speedup's 200 strategies and the bars/s median's 201 slots. The section keeps b2a578c's PyneCore-sources paragraph and its "main has moved on since" clause (4dc496d, #299, changed src/ after 35db01c, and nothing was re-measured on it). Its PineForge paragraph names the engine and codegen the tiers were graded at, and its vectorbt bullet keeps b2a578c's form with this window's numbers: a 4.2x median per-strategy speedup, and vectorbt is still faster on 2 of the 13 (021, 064). results/raw/README.md's Edits section replaces the paragraph b2a578c wrote (and the previous commit extended) with one paragraph per window. Sentences this commit deletes or rewrites past recognition in README.md, named by the commit that introduced them (scripts/check_doc_reverts.py): - 471a113 (the README carries the 200-strategy refresh, lane BENCH2): 7 -- the strong row 181 and its extra trade, "to the tick", the compile rejection, the three runtime errors, 143 "could not be timed", and "the ratio fell because the engine is slower per bar". - a02160f (PineForge re-timed at engine 063e446, lane BENCH3): 3 -- the speed paragraph's host, engine and window. - f867096 (the multi-timeframe PyneCore rows reproduce 0-85.5 %, lane F10): 1 -- the nine multi-timeframe scripts, rewritten for 6.10.3. - b2a578c (make every README and doc page true before the release, DOCS-ENGINE, #300): 1 -- the 2026-06-11 engine "still runs close to its June timings", measured on the Apple M4 Max; this window's same-host timing of that engine replaces it. Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]> * Docs: the window rows count exactly (review of the AWS window commit) - benchmarks/README.md: of the 16 count-only PyneCore rows, 11 carry a position opened before TradingView's range: 7 hold it past the bar TradingView's first trade opens and 4 close it on that bar. - results/raw/manifest.json: the 2026-09-22 throughput run 2 was the published benchmark_results.json until the 2026-09-29 window replaced it (sha256 unchanged). The review's third note, README.md's Fast bullet pairing "200 timed strategies" (the speedup's population) with the bars/s median (over PineForge's 201 slots), is resolved in the previous commit: the rebase onto 112c134 rewrote that bullet there, in DOCS-ENGINE's framing, naming both populations. Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]> * Bench: pin benchmarks/assets at its main (5759bf2), the same tree as e564cb9 The assets commit landed on the assets repository's main by a rebase merge (pineforge-benchmarks-assets#2), which gave it a new id with the same tree (2ee1fefd). Pin the id main carries; e564cb9 stays reachable under the tag engine-pin-e564cb9. Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]> Claude-Session: https://claude.ai/code/session_01QFVRQ4gcJCLbjfYqGtmy4k --------- Co-authored-by: Claude Opus 5.5 (1M context) <[email protected]>
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
* 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
added a commit
that referenced
this pull request
Oct 19, 2026
…8 (test_ci_preflight, doc-anchors, doc-reverts) and L6's rule for the deferred rows
Fixes the three failing preflight stages of the D1 policy change:
- scripts/test_ci_preflight.py: the must-fail test for the full-population
rule injected a `steps:` line into the job `corpus-parity-subset`, which is
a reusable-workflow call (`uses:` + `with:`) and has no `steps:`; the
mutation now goes into its `with:` block. The rule it exercises
(corpus-parity-subset keeps its full population) is unchanged.
- doc anchors: four citations of `PRIVATE_FIXTURE_PROFILE_FLOORS` moved from
ci_verify.py:789 to ci_verify.py:802, because the EXCLUDED_REGISTERED_MIN
comment above it grew (CONTRIBUTING.md:162, docs/pages/contributing-llm.md:136
and :284, docs/pages/native-engine.md:4616).
- doc-reverts: docs/ci.md intentionally replaces the old statement of the PR
registration floors ("The PR registration floors after lane FIX-E1E2 are 773
for Debug and sanitizers and 782 for native ...", introduced by b2a578c
"docs: make every README and doc page true before the release (DOCS-ENGINE)
(#300)"): those numbers were already stale against scripts/ci_verify.py
(876/867/963) and are now the keys of EXCLUDED_REGISTERED_MIN. This commit
names that deletion on purpose: b2a578c.
- docs/ci.md also gains L6's rule for the deferred rows: a red on main in an
excluded row or class blocks the next release cut and is fixed or reverted
within the hour.
The registration floors for Release and kernel-only (895 and 309) are still
derived, not measured; a lab run of the release and kernel steps confirms or
corrects them.
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
luisleo526
added a commit
that referenced
this pull request
Oct 20, 2026
…egistration floors, and defers the slow verifier self-test classes (D1, CR-195) (#449) On pull_request the Release matrix leg and the kernel-only job now pass --exclude-label slow, like Debug and sanitizers already did. Push to main, workflow_dispatch and release keep every row and every class, so coverage is unchanged and only its timing moves. - ci_preflight.py: the two policy checks that forbade this (only PR Debug matrix jobs may exclude slow rows; kernel-only must keep its full population) become one exact rule with must-fail forms; docs/ci.md says the same. This REVERSES the previous policy. The must-fail test for the full-population rule edits the `with:` block of the reusable-workflow job corpus-parity-subset (it has no `steps:`). - ci_verify.py: EXCLUDED_REGISTERED_MIN gains release 895 and kernel 337 (KERNEL_MIN_TESTS), derived on one registered-count basis from the PR-world job data, to be confirmed by a lab ctest -N. 337 keeps today's 34-row slack and stays below the 371 registered in all 16 sampled pull-request and push runs; 'release' stays 895. - test_ci_verify.py classes are partitioned into FAST (13) and SLOW (9) in scripts/ci_verifier_classes.py; the preflight verifier-tests stage runs the FAST classes on every pull request and the SLOW ones only when scripts/ci_verifier_paths.py finds a path the verifier reads; any unknown path or class runs. Non-PR events run everything. HistoricalProviderPins is skipped without the private overlay and is FAST by decision. - preflight has `needs: changes` and `if: ${{ !cancelled() }}` (pinned in ci_preflight.py); the docs say so. - doc anchors: PRIVATE_FIXTURE_PROFILE_FLOORS moved from ci_verify.py:789 to ci_verify.py:802 (CONTRIBUTING.md, docs/pages/contributing-llm.md, docs/pages/native-engine.md, docs/ci.md). - docs/ci.md gains L6's rule for the deferred rows: a red on main in an excluded row or class blocks the next release cut and is fixed or reverted within the hour. AGENTS.md lists Release and kernel-only among the jobs that exclude the slow rows. - New tests assert that push, dispatch and release carry no exclusion and no class filter. Doc sentences this change removes or rewrites ON PURPOSE (doc-reverts check): - "The PR registration floors after lane FIX-E1E2 are 773 for Debug and sanitizers and 782 for native ..." (docs/ci.md), introduced by b2a578c ("docs: make every README and doc page true before the release (DOCS-ENGINE) (#300)"). Those numbers were already stale against scripts/ci_verify.py (876/867/963) and are now the keys of EXCLUDED_REGISTERED_MIN. - "`preflight` waits for nothing." (docs/ci.md), introduced by 133f571 ("1.0 prep: CI flake fix, docs-only CI skip, benchmark refresh (supersedes #303, #304, #307)"): preflight now waits for `changes`. - "Preflight starts at once, and the proof jobs start alongside it" and "`changes` and `preflight` wait for nothing and run on every event" (docs/ci.md), same reason as 133f571 above. - "than documentation runs preflight, both Release jobs, kernel-only and the parity subset with their full sets" and "both Debug jobs, sanitizers and native-live run the registered set excluding the 29 CTest rows labelled `slow`" (docs/ci.md): now stated for Release and kernel-only too. - "A Release leg runs its full population on every event" and "Every event runs the whole kernel set" (the `build` and `kernel-only` rows of the timeout table in docs/ci.md): a pull request now excludes the slow rows. - "The two new keys are derived, not measured: each is the registered count in the sampled public pull-request runs" (docs/ci.md): the kernel key differs from the Release one. Note: scripts/release.yml runs no CTest and no ci_verify, so "release keeps every row" means only that no --exclude-label is present in any release path; the release workflow itself is unchanged. The registration floors for Release and kernel-only (895 and 337) are derived, not measured; a lab run of the release and kernel steps confirms or corrects them. This is the squash of 11cd290, 1b01244 and ef8fc5d (doc-reverts judges every commit with its own message; the three were folded so that one message names every sentence). Co-authored-by: Claude Sonnet 5.5 <[email protected]>
luisleo526
added a commit
that referenced
this pull request
Oct 20, 2026
* CI: PR tier excludes the slow rows on Release and kernel-only, with registration floors, and defers the slow verifier self-test classes (D1, CR-195)
On pull_request the Release matrix leg and the kernel-only job now pass
--exclude-label slow, like Debug and sanitizers already did. Push to main,
workflow_dispatch and release keep every row and every class, so coverage is
unchanged and only its timing moves.
- ci_preflight.py: the two policy checks that forbade this (only PR Debug
matrix jobs may exclude slow rows; kernel-only must keep its full
population) become one exact rule with must-fail forms; docs/ci.md says the
same. This REVERSES the previous policy. The must-fail test for the
full-population rule edits the `with:` block of the reusable-workflow job
corpus-parity-subset (it has no `steps:`).
- ci_verify.py: EXCLUDED_REGISTERED_MIN gains release 895 and kernel 337
(KERNEL_MIN_TESTS), derived on one registered-count basis from the PR-world
job data, to be confirmed by a lab ctest -N. 337 keeps today's 34-row slack
and stays below the 371 registered in all 16 sampled pull-request and push
runs; 'release' stays 895.
- test_ci_verify.py classes are partitioned into FAST (13) and SLOW (9) in
scripts/ci_verifier_classes.py; the preflight verifier-tests stage runs the
FAST classes on every pull request and the SLOW ones only when
scripts/ci_verifier_paths.py finds a path the verifier reads; any unknown
path or class runs. Non-PR events run everything. HistoricalProviderPins is
skipped without the private overlay and is FAST by decision.
- preflight has `needs: changes` and `if: ${{ !cancelled() }}` (pinned in
ci_preflight.py); the docs say so.
- doc anchors: PRIVATE_FIXTURE_PROFILE_FLOORS moved from ci_verify.py:789 to
ci_verify.py:802 (CONTRIBUTING.md, docs/pages/contributing-llm.md,
docs/pages/native-engine.md, docs/ci.md).
- docs/ci.md gains L6's rule for the deferred rows: a red on main in an
excluded row or class blocks the next release cut and is fixed or reverted
within the hour. AGENTS.md lists Release and kernel-only among the jobs that
exclude the slow rows.
- New tests assert that push, dispatch and release carry no exclusion and no
class filter.
Doc sentences this change removes or rewrites ON PURPOSE (doc-reverts check):
- "The PR registration floors after lane FIX-E1E2 are 773 for Debug and
sanitizers and 782 for native ..." (docs/ci.md), introduced by b2a578c
("docs: make every README and doc page true before the release
(DOCS-ENGINE) (#300)"). Those numbers were already stale against
scripts/ci_verify.py (876/867/963) and are now the keys of
EXCLUDED_REGISTERED_MIN.
- "`preflight` waits for nothing." (docs/ci.md), introduced by 133f571 ("1.0
prep: CI flake fix, docs-only CI skip, benchmark refresh (supersedes #303,
#304, #307)"): preflight now waits for `changes`.
- "Preflight starts at once, and the proof jobs start alongside it" and
"`changes` and `preflight` wait for nothing and run on every event"
(docs/ci.md), same reason as 133f571 above.
- "than documentation runs preflight, both Release jobs, kernel-only and the
parity subset with their full sets" and "both Debug jobs, sanitizers and
native-live run the registered set excluding the 29 CTest rows labelled
`slow`" (docs/ci.md): now stated for Release and kernel-only too.
- "A Release leg runs its full population on every event" and "Every event
runs the whole kernel set" (the `build` and `kernel-only` rows of the
timeout table in docs/ci.md): a pull request now excludes the slow rows.
- "The two new keys are derived, not measured: each is the registered count in
the sampled public pull-request runs" (docs/ci.md): the kernel key differs
from the Release one.
Note: scripts/release.yml runs no CTest and no ci_verify, so "release keeps
every row" means only that no --exclude-label is present in any release path;
the release workflow itself is unchanged.
The registration floors for Release and kernel-only (895 and 337) are derived,
not measured; a lab run of the release and kernel steps confirms or corrects
them.
This is the squash of 11cd290, 1b01244 and ef8fc5d (doc-reverts judges
every commit with its own message; the three were folded so that one message
names every sentence).
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
* CI: defer macOS Debug from pull requests (D3)
This change stacks on 14c3365
(14c3365).
Use an expression-driven matrix exclude to remove exactly macos-26 + Debug
on pull_request. Ubuntu Release/Debug and macOS Release keep their existing
build names. Every non-PR event retains the complete matrix, including push,
workflow_dispatch, schedule and release contexts; existing triggers and the
separate release workflow stay unchanged.
The aggregate continues to require the selected matrix's result, with no
missing-leg exception. Pin its whole result step as well as the exact build
strategy, and add must-fail mutations for lost PR or full-event coverage and
for accepting absent or skipped matrix results. Preserve the classified
documentation-only skip.
Update the event table, PR policy, docs-only counts, runner description and
historical timing context. Keep the PR's own macOS Release proof and Release
registration floor. Preserve the existing pinned AGENTS.md citation in place.
The following parent documentation sentences are intentionally rewritten.
Each quotation reproduces the old sentence in full, including its consecutive
words, so this commit's own message names the changes for doc-reverts:
docs/ci.md:
- "A PR that changes more than documentation runs preflight and the parity subset with its full set; both Release jobs, both Debug jobs, kernel-only, sanitizers and the native cell of native-live run the registered set excluding the 29 CTest rows labelled `slow` in `tests/CMakeLists.txt` ([PR tier versus MAIN/RELEASE](#pr-tier-versus-mainrelease-what-is-excluded-where))."
- "A pull request or a push to `main` whose change is documentation only runs `preflight` and the documentation build and skips every proof job: the four `build` legs, both macOS legs among them, `sanitizers`, `kernel-only`, `native-live` and `corpus-parity-subset`."
- "A skipped matrix is never expanded, so a documentation-only run shows one skipped `build` check under its unexpanded name instead of the four legs."
- "The `build` matrix retains its four legs and their `build (<image>, <type>)` names."
- "The two hosted macOS legs stay on `macos-26` (M1, 3 cores, 7 GB)."
- "A Release leg runs its full population on push and dispatch events; a pull request's Release legs, a fork's included, exclude the `slow` rows like its Debug legs, and that pull-request time is to be measured on real PR runs."
AGENTS.md:
- "GitHub Actions is advisory: PR Release, Debug, kernel-only, sanitizers and native jobs exclude the measured `slow` CTest rows; push-to-main and manual CI dispatch run every row, and a documentation-only change runs preflight alone."
CONTRIBUTING.md:
- "The GitHub Actions jobs (build on Ubuntu + macOS in Release and Debug, sanitizers, ctest, the source guards, the install/`find_package` smoke test and the parity subset) are advisory."
Verification: NOT RUN. This lane is restricted to file edits and permitted
read-only inspection; no repository code, parser, linter, test, build or corpus
verification was run. Lab preflight tests, doc-anchors and doc-reverts, the
PR's own GitHub CI and the required Claude Opus read remain pending.
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
---------
Co-authored-by: Claude Sonnet 5.5 <[email protected]>
luisleo526
added a commit
that referenced
this pull request
Oct 21, 2026
…1ba62b) on core/cr150-o1-integ b4d2011 One commit carrying the tree of o1w/merge0 0a41361 (the full-history record of the merge-7 line), as a child of core/cr150-o1-integ b4d2011, so the doc-reverts gate judges the whole change against its real parent with this message (CORE-TOP ruling 10-21 18:04: no rewrite of pushed history, no checker exception). Merged lane heads (all carried in the tree): o1w-contract b19d8ae, o1w-pyjson cbc68d2, o1w-tail 27fcad9, o1w-selected 91fbd0e, o1w-seq 4b84f9d, o1w-tradeout bf024f1, o1w-ledger a87e546, o1w-metrics 3e1e70d, o1w-slabfold d41311c, batch-B 583c221, L8d proof 07c6363, L9b proof b01fe68, batch-C e6f8fcb, Q7 abort d220bd7, Q9 converter 3478350. Merge 7 is engine main 21ba62b. Rulings applied: CORE-TOP A (the four unbacked contract declarations withdrawn until the ledger and metrics lanes define them), B (the two _JSONRecordArray factory forms in the selected-window ownership scanner), E and F (closed-row accessor by copy; indexed report-array read), R13 (main's typed finite failures and proportional sub-day annualization win), the Option A failure-class split. DOC-REVERTS NAMES: every sentence deletion or revert listed by the doc-reverts gate on preflight 6f8e97 is a deliberate replacement made by an accepted ruling, a regeneration, or a later rewrite of the same page, and is named here by the commit that introduced it: - 03b2406 (ci: release jobs run on pf-ci-release, #461): the docs/ci.md paragraphs "Push this prepared migration only after both CORE-TOP gates", "Until then a job on that label with no runners only waits, and nothing is pushed.", the PF_CI_LABELS / pre-job hook / release.yml / promote-baseline.yml sentences: rewritten by main's own later edit of that page (21ba62b, #464), taken whole by merge 7. - a8f84b9 (docs(api): C ABI reference site): docs/pages/report-schema.md "pf_report_t is the single output of every backtest.", "This page maps each field to its meaning and units.", "Heap array, ordered by exit time ascending." rewritten by the O(1) report contract pages. - efb8c7e (o1w-contract round 2): docs/pages/report-schema.md "C/ctypes clients require an explicitly negotiated provider bridge; there is no new runtime C export in this slice." superseded by the selected-window named-sink contract text of b19d8ae. - 39a718b (cr150 L6b-1): docs/pages/run-failure-codes.md "The engine could not create or write the report sink." and "The run has no completed sink or valid trailer." replaced by the regenerated report_sink_failed description. - d220bd7 (cr150-q7): run-failure-codes.md "The existing engine_fault/retryable policy is retained pending a ruling:", "PROPOSED cancelled, retryable false;" and "RETURN TO CORE-TOP for the class ruling." removed by the class ruling (run_aborted only, no cancelled class, no retry field). - d91c96d (CR-150 route (ii) foundation): run-failure-codes.md "The engine could not create, resize, read or write scratch-table storage." replaced by the split wording (auxiliary tables raise scratch_io_failed; report-sink scratch raises report_sink_failed reason scratch_io). - e6f8fcb (CR-150 batch-C): docs/design/arena-bound.md "`sequence_index_` `include/pineforge/source/pine_adapter.hpp:N`" and the "`include/pineforge/detail/id_pair_store.hpp:N`;" citation: re-pointed or dropped after the merged source moved. - 5dbe91c (merge batch-B 583c221): docs/design/native-feature-parity.md "**yes** — `fill_report` engine_report.cpp:N, `get_trade` engine.hpp:N, `compute_trade_stats`" and "**no** — `compute_equity_stats` exits early on an empty curve": single-line pins replaced by the backticked symbol, as the anchor checker instructs. - 4d6cd2b (CR-150 WL-PTAILFIX): docs/design/consumed-partial-exit-fold.md "The previous-header fail-before compilation of the new unit remains required; its expected first diagnostic is the additional `IdPairStore` template a..." rewritten by o1w-slabfold d41311c. - d093560 (INT26 wave H): docs/pages/native-engine.md "A C++ host reads a closed row whole, at any time, every `Trade` field included." replaced by the closed-row-access-by-copy row (CORE-TOP ruling E: closed rows are paged, the C++ accessor returns a copy). DOC-REVERTS NAMES, second set: against this commit's real parent b4d2011 the gate reports 21 unnamed sentence deletions or reverts, all introduced by the seven commits below (preflight rj-20261021t100903-91b0cc, stage doc-reverts). Each is a deliberate rewrite on top of the introducing commit, and each introducer is named here: - 133f571 ("1.0 prep: CI flake fix, docs-only CI skip, benchmark refresh (supersedes #303, #304, #307)"), eleven docs/ci.md sentences: "The compilation lanes start alongside preflight, as soon as the few-second `changes` job has classified the change", "A pull request or a push to `main` whose change is documentation only runs `preflight` and the documentation build", "Each proof job waits for `changes` alone, a few seconds once a standard runner takes it", "`preflight` waits for nothing.", "`changes` and `preflight` wait for nothing and run on every event", "A documentation-only change starts preflight alone there.", "So does the `changes` job, a two-commit checkout and one `git diff`.", "The same stage pins the documentation-only skip", "The advisory `build` aggregate passes a proof job that succeeded", "A proof job skipped for any other reason fails it", "success": rewritten by main's later CI redesign and carried whole by merge 7 of 21ba62b. - b2a578c ("docs: make every README and doc page true before the release (DOCS-ENGINE) (#300)"), one docs/ci.md sentence on the PR registration floors after lane FIX-E1E2 (773 Debug and sanitizers, 782 native): superseded by the later floor rows. - 2394ba2 ("ci: remove every time limit that can fail a run for being slow (#373)"), two docs/ci.md sentences: "The table below reports each job's measured duration and the platform maximum that replaced its old limit" and "The numbers are measured durations, not a two-times multiplier.": replaced by the current duration table. - 7da487a ("ci/tests: remove the CI time limits; a platform-maximum stop is a HANG to re-run (EN-116)"), two docs/ci.md sentences: "Under the owner rule, no required-check stage, row, step, profile or matrix entry may carry a time limit" and "The native workflow retains only its 360-minute job envelopes, with no verification-step deadline.": superseded by the same redesign. - b148979 ("selected window: declare 1.3-parity, not 1.3, until a completeness proof exists (1.6.1)"), three sentences, README.md and docs/pages/report-schema.md: "`capabilities.selected_window_contract_revisions` is `[\"1.3-parity\"]` when the runtime supports selected windows", "The `--capabilities-json` probe's `capabilities.selected_window_contract_revisions` is `[\"1.3-parity\"]`", "From 1.6.1 (unreleased), the image declares `1.3-parity` instead": reverted to the 1.3 pin by the later capability ruling (AMD6 1.3-parity only), an accepted reversal. - 1bd075c ("Trading metrics + equity curve in backtest report (ABI v2) (#31)"), one docs/pages/report-schema.md sentence: "See the per-field doxygen in `<pineforge/pineforge.h>` for the exact rule on every field.": replaced by the O(1) report contract's per-field pages. - d3cca9e ("Docs: correct migration semantics and harden publication guards"), one docs/design/native-feature-parity.md pin line (`sha256:H` c_abi.cpp:N, `sha256:H` check_c_abi_runtime.py:N, ...): replaced by the symbol-only rows, as the anchor checker instructs. Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
luisleo526
added a commit
that referenced
this pull request
Oct 27, 2026
Engine 1.8.0 is built, tested and published for Linux only (x86_64 and arm64); no macOS archive is published and CI runs no macOS jobs. Documentation only. - README.md: state the supported platforms once, drop the macOS deployment target and the macOS CI claim, drop "Same on Linux and macOS", make the Linux compile line the primary one and keep the macOS/Clang flags as a note. - CONTRIBUTING.md, docs/pages/getting-started.md, docs/pages/install.md: the same wording; install.md says releases up to 1.7.0 also carry a macOS archive. - CHANGELOG.md: a "Supported platforms" bullet in the 1.8.0 compatibility section, one clause in the section introduction and the 1.8.0 CI leg wording. Two sentences leave on purpose, both introduced by b2a578c ("docs: make every README and doc page true before the release (DOCS-ENGINE) (#300)"): the README sentence that began "The compile line is macOS/Clang's: on Linux link -Wl,--whole-archive /usr/local/lib/libpineforge.a -Wl,--no-whole-archive, and drop -fbracket-depth" (the Linux line is now the main example and the macOS flags a note), and the getting-started requirement "libstdc++ from GCC 11, or libc++ 14; on macOS a deployment target of 13.3" (macOS is no longer a supported target). History of earlier releases and neutral build notes are unchanged. Supersedes #530, which carried the same tree.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Makes every README and doc page in this repository true before the 1.0 release.
ctest --test-dir.docs/pages/*(the Doxygen site): ~1,600 claims were checked against the code and the 86 documented code samples were run. Stale values are fixed, including the report-schema table, MTF expected output, the Docker sample and FX wording.The only non-documentation hunks are benchmark harness comments and
host_namerewrites in committed benchmark JSON. No source, header, test or build behaviour changes.Reviewed (Fable) and review fixes applied. Both verify bundles pass on this head.
🤖 Generated with Claude Code
https://claude.ai/code/session_01NTa58SoJnqkV5xBwAYQBiJ