Repository navigation
docs: release notes and version scoping for v1.2.0 - #340
Merged
Merged
Conversation
CHANGELOG: the Unreleased section becomes 1.2.0 (2026-10-05), a minor release that adds the compiled execution-capabilities extension to the C ABI (PF_CAPABILITIES_API_VERSION, strategy_capabilities_api_version, strategy_capabilities_receipt). One bullet per change since v1.1.0 with its PR (#328, #330, #331, #332, #333, #334, #335, #336, #337, #338 and the session-clock change, written #VCP until its PR number exists), the recipe additions under State hashes (#328, #330, #335; domain tags and epoch unchanged), Report keys (docker/run_json.py is byte-identical to v1.1.0's, so no key changes) and Migration. Version scoping: README, install and public-contract pages name v1.2.0 and codegen 1.2.0; "since the next release" and "fixed on main" in the capabilities guide and the runner guide become 1.2.0 and 1.1.0 (#325). Lines that state what an earlier release shipped stay. Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
- CHANGELOG: the session-clock change is #339 (merged as 52292db), in place of the #VCP token of 3082fbd; the "What a script author sees" bullet of 3082fbd now states release 1.2.0's grades (registry baseline pineforge-parity-baseline-20261005-engine-52292db9: 7,970 excellent / 19 strong of 7,989, none below strong) instead of the main scoreboard at 6b77f06. - README: the release sentence names 1.2.0 and renders releases[1.2.0], and the main scoreboard renders the same baseline, from pineforge-release facts/facts.json at 0c2f6838 (the facts export for the 1.2.0 release). - README, LEGAL.md, docs/pages/index.md: pineforge-codegen is under the PineForge Source License 1.1 from its release 1.2.0; releases up to 1.1.0 keep the PolyForm Noncommercial terms they shipped with. Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
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.
What and why
The release workflow writes only
VERSION; this docs-only change gives v1.2.0 its CHANGELOG section and scopes theversion-bearing pages to the 1.2.0 pair (engine v1.2.0 with pineforge-codegen 1.2.0, hub image
ghcr.io/pineforge-4pass/pineforge-release:1.2.0).1.2.0 is a minor release:
<pineforge/pineforge.h>gains the compiled execution-capabilities extension(
PF_CAPABILITIES_API_VERSION1,strategy_capabilities_api_version,strategy_capabilities_receipt; #332), which astrategy generated by codegen 1.2.0 defines.
PF_ABI_VERSIONstays 4, the script ABI epoch staysengine_script_run_v19, the domain tagspineforge-broker-state/v19andpineforge-source-adapter/v4are unchanged,and
native_c_api.h, the native C++ host headers and the frozen ABI fixtures are unchanged since v1.1.0.CHANGELOG.md:## Unreleasedbecomes## 1.2.0 — 2026-10-05: the lead paragraph, one bullet per change sincev1.1.0 with its PR (Pine adapter: TradingView's exit-child order at one point and the callback lifecycle (trail tolerance, revived exits, tick-built limit reach) #328, Pine adapter: TradingView's margin, sizing and admission rules for one-position books #330, Live runner: service operation, cumulative report export and live redelivery #331, Live runner: refuse compiled strategies a close-only stream cannot honour (capability receipt v1) #332, Make the native-live routing E2E deterministic (no wall-clock races) #333, Pine adapter: explicit entry quantity floor, script equity mark, process-orders-on-close bar fills and the session clock #334, Pine adapter: admission fill half, close-first entries, point order, exit tombstones and pyramiding records #335, Pine adapter: recover the per-bar cost of the margin, sizing and admission rules #336, docs: render the active scoreboard from the facts tokens at pineforge-release 03b8dcc #337, Native stream: fewer temporary strings and lookups on the confirmed-bar path #338, and the session-clock change,
Session clock: read each day's occurrences once per bar; time() arguments resolved without copies #339), State hashes, Report keys and Migration. The two Unreleased runner
sections (Live runner: refuse compiled strategies a close-only stream cannot honour (capability receipt v1) #332, Live runner: service operation, cumulative report export and live redelivery #331) are kept, shortened and given PR links; the runner's graceful signal exit (130 → 0), the
report replay for older ledgers and the legacy-library warning are kept as stated in runner/README.md.
sentence, "its releases 1.0.0, 1.0.1, 1.1.0 and 1.2.0", the benchmark refresh line, the "This is the runtime"
paragraph, a v1.2.0 line in Releases),
docs/pages/install.md(the v1.2.0 tarballs, hub tagengine1.2.0-codegen1.2.0),docs/pages/public-contract.md(the 1.2.0 release line, enginev1.2.0with codegen1.2.0among the supported pairs, the four C-SURFACE-2 rows not in 1.2.0 either), and Live runner: refuse compiled strategies a close-only stream cannot honour (capability receipt v1) #332's "since the nextrelease" / "fixed on main" in
docs/strategy-capabilities.mdandrunner/README.md(now 1.2.0, and 1.1.0 (Confirmed-bar streams compute what the batch computes #325)for the stream fix). Lines that state what an earlier release shipped stay.
releases[1.2.0](registry baselinepineforge-parity-baseline-20261005-engine-52292db9, Session clock: read each day's occurrences once per bar; time() arguments resolved without copies #339's merge, which v1.2.0 equals in behaviour: 7,970 excellent/ 19 strong of 7,989, none below strong), and the main scoreboard renders the same baseline, from pineforge-release
facts/facts.jsonat 0c2f6838 (pineforge-release Production-readiness probes + engine state-reset / finite-fill fixes #28).lab facts checkagainst that pinned file passes, with--github-render.LEGAL.mdanddocs/pages/index.mdsaid pineforge-codegen is PolyForm Noncommercial; from itsrelease 1.2.0 it is under the PineForge Source License 1.1 (pineforge-codegen ci: add a
buildgate check the branch ruleset can match #168, fix: key calendar aux routing by the covered session #171), and releases up to 1.1.0keep the terms they shipped with. The three lines now say so and point to its
LICENSE.Report keys
No report key changes.
docker/run_json.pyis byte-identical between v1.1.0 and the release's code(
git diff --quiet v1.1.0 52292db9 -- docker/run_json.py), so no key is added, removed or renamed andEQUITY_REPORT_KEYS(metrics.equity.sharpe_tv,sortino_tv) stays;pineforge.h's diff since v1.1.0 is thetrail-rounding comment plus the capability declarations, with
pf_report_tandpf_trade_tunchanged. The runner'snew outputs (#331:
pineforge-live reportdocuments,pineforge-native-report-delta/v1ledger rows, thepineforge-live-status/v1status file,pineforge-redelivery-request/v1requests) are versioned runner formats, notrun_json keys.
State hashes
Every recipe change since v1.1.0 is an addition, all in the Pine adapter's part of the broker-state hash
(
src/source/pine_state_hash.cpp, +64/-0;src/engine_state_hash.cppandsrc/engine_stream.cppunchanged):passed 13 keys.
the engine's net profit.
WordSink::s(const char*)overload with the same encoding as thestd::stringone (no recipe change).Nothing is removed, renamed or re-encoded; domain tags and epoch unchanged.
scripts/check_aggregate_cpp_versions.py("aggregate v19 ownership verified") and
scripts/check_broker_state_hash_coverage.py(OK) pass at v1.1.0, 44eab7band #339's tree (52292db).
Verified
bash tutorial/run.shprints 50 trades (17W / 33L), +569.97, best/worst +1149.00 / -1111.97, max dd -4045.15;
run_advanced.pyprints thedocumented rows; regenerating
tutorial/macd/strategy.pinewith pineforge-codegen main (48e7a13b) gives the samenumbers, and the README's front-door commands (install, transpile, compile,
scripts/run_strategy.py) print 50trades, net 569.97. The documented numbers stand; the session-clock change is value-identical by its own evidence,
so 44eab7b holds for 1.2.0.
scripts/check_doc_anchors.py,scripts/check_doc_lint.py,scripts/check_doc_reverts.py --base origin/mainandgit diff --check origin/mainpass on the final head. The merge gate's docs basis (preflight + docs) passed on thischange before its rebase onto Session clock: read each day's occurrences once per bar; time() arguments resolved without copies #339 (it is re-run on this exact head for the statuses):
ci_preflight: passed (exit 0, 44 stages, 0 advisory reported)andDoxygen warnings: 0.the decimal sizing floor and of the long residual call, runner-only "unchanged" statements, the re-issue after a
declined reversal) are in.
🤖 Generated with Claude Code