From b970738b12248d9f8188c55e046f55eb35481a87 Mon Sep 17 00:00:00 2001 From: luisleo526 Date: Thu, 8 Oct 2026 09:19:38 +0800 Subject: [PATCH] docs: date 1.4.0 after the e81072d2 release notes Intentionally supersede the planned, unreleased and before-tag sentences introduced by e81072d2891ae944b8c8b52176acf97518227cbc. Apply the same 22 dated-release wording substitutions and paired tag links. Preserve historical pre-tag versions and observations, facts, policy, adapter warnings, parser reasons and diagnostic limits. The reanchor and this message clarification do not change the reviewed documentation tree. Hold this change for the coordinated release notice window; a changed dispatch date requires a reviewed date and anchor update. Co-Authored-By: Codex --- CHANGELOG.md | 17 +++++++++-------- README.md | 17 +++++++++-------- docker/README.md | 13 ++++++------- docs/pages/public-contract.md | 12 ++++++------ docs/pages/release-1.4.0-sample.md | 16 ++++++++-------- docs/pages/tutorial-macd.md | 2 +- 6 files changed, 39 insertions(+), 38 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d50cdf8c..a730d4aa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,12 +5,13 @@ README's *Releases* section and on the GitHub releases page. From 1.0.0 the version number follows semantic versioning over the surfaces the [public contract](docs/pages/public-contract.md) lists. -## Unreleased +## 1.4.0 — 2026-10-08 -**Planned 1.4.0**, paired with pineforge-codegen 1.4.0. This release is not -tagged yet. The candidate pairs engine `b3192bfc` with codegen `bfc4ddce`; -their version files still name 1.3.0 until the release workflow stamps them. -The planned minor release adds run-failure codes, typed report provenance +**[1.4.0](https://github.com/pineforge-4pass/pineforge-engine/releases/tag/v1.4.0)**, +paired with [pineforge-codegen 1.4.0](https://github.com/pineforge-4pass/pineforge-codegen-oss/releases/tag/v1.4.0). +The pre-tag behavior candidate paired engine `b3192bfc` with codegen +`bfc4ddce`; its version files still named 1.3.0 when the samples were built. +This minor release adds run-failure codes, typed report provenance and the Pine adapter and live-runner corrections below. Regenerate strategy C++ with the matching codegen and relink against the matching engine headers and archive; replacing the archive alone does not update a statically linked @@ -25,7 +26,7 @@ epoch stays `engine_script_run_v19`; *State hashes* below describes the recipe additions. *Report keys and provenance* describes the JSON changes that consumers must handle. -The prepared 1.4.0 facts map to baseline +The 1.4.0 facts map to baseline `pineforge-parity-baseline-20261007-engine-b3192bfc`: its recorded grading outcomes are **7,983 excellent / 6 strong** @@ -227,7 +228,7 @@ results on that population, not cross-version trade or hash identity. Six synthetic requests were run through the installed entrypoint on the exact v1.3.0 pair and the pinned candidate pair, using the same 40-bar -feed. Planned 1.4.0 refuses three requests that 1.3.0 allowed to complete: +feed. 1.4.0 refuses three requests that 1.3.0 allowed to complete: setting a duplicated `Period` title to `"7"`, passing `"color.blue"` to `Color`, and setting `Choice` to `"15"` outside its `[10, 20, 30]` options. The old pair returns success reports for these requests; that wire echo @@ -388,7 +389,7 @@ path's null fingerprint and the legacy path's per-title records. ### Migration -Use engine 1.4.0 with codegen 1.4.0 when the pair is released; earlier paired +Use engine 1.4.0 with codegen 1.4.0; earlier paired releases remain historical examples. Regenerate and rebuild every generated strategy and every C++ host against the new headers and archive. C loaders can probe the two new getters before using them with older libraries. diff --git a/README.md b/README.md index b1ca1585..cc56f690 100644 --- a/README.md +++ b/README.md @@ -35,11 +35,12 @@ The separate PineForge compiler, [`pineforge-codegen`](https://github.com/pinefo - **Deterministic to the bit.** Two runs with the same inputs produce identical trade lists. Same on Linux and macOS. - **Yours to embed.** 124 `PF_API` declarations across two headers — `pineforge.h`'s 81 (64 runtime exports and up to 17 per-strategy functions a generated module defines) and `native_c_api.h`'s 43 native-host declarations — an ABI that is append-only within a major version from 1.0 on. Call it from C, Python, Rust, Go, Node, Julia — or let an AI agent drive it over MCP. -**Planned 1.4.0 is unreleased.** Engine `b3192bfc` pairs with codegen -`bfc4ddce` for the candidate; both still report version 1.3.0 until tagging. -The [release notes](CHANGELOG.md#unreleased) cover typed and unresolved +**[1.4.0](https://github.com/pineforge-4pass/pineforge-engine/releases/tag/v1.4.0) +was released on 2026-10-08**, paired with +[pineforge-codegen 1.4.0](https://github.com/pineforge-4pass/pineforge-codegen-oss/releases/tag/v1.4.0). +The [release notes](CHANGELOG.md#140--2026-10-08) cover typed and unresolved provenance, coded failures, checked settings, adapter fixes and chart-clock -live input. When the 1.4.0 pair is released, regenerate strategy C++ and +live input. For the 1.4.0 pair, regenerate strategy C++ and relink against that pair's headers and archive. Published 1.3.0 download and installation examples below remain pinned to that earlier pair. @@ -139,8 +140,8 @@ TradingView's execution semantics on top of the kernel; this is the path the validation scoreboard below measures. This command block is for the published engine/codegen **1.3.0 pair**. -For the unreleased candidate use the pinned pair above; agreement on the -current `VERSION` text alone does not establish a matching build. +For 1.4.0, use the matching release tags linked above and regenerate and +relink against that pair's headers and archive. ```bash pip install "pineforge-codegen==1.3.0" @@ -248,7 +249,7 @@ workaround for those versions. **Measured 2026-10-07** on main engine `b3192bfc` with codegen-oss `bfc4ddce` (baseline `pineforge-parity-baseline-20261007-engine-b3192bfc`, snapshot `28ba8dbd`): **7,989 graded probes, 7,983 excellent + 6 strong**, 0 below strong and 0 engine errors across 18 market/timeframe lanes. The historical release 1.0.1 inventory holds 4,776,328 trades. -Planned **1.4.0 (unreleased)** maps to **7,983 excellent / 6 strong** on 7,989 graded probes (baseline `pineforge-parity-baseline-20261007-engine-b3192bfc`, 2026-10-07), with 0 below strong and 0 engine errors. These are recorded grading outcomes for that pair and population. +Release **1.4.0 (2026-10-08)** maps to **7,983 excellent / 6 strong** on 7,989 graded probes (baseline `pineforge-parity-baseline-20261007-engine-b3192bfc`, promoted 2026-10-07 UTC), with 0 below strong and 0 engine errors. These are recorded grading outcomes for that pair and population. Release **1.3.0 grades 7,982 excellent / 7 strong until the next release**, on 7,989 probes (baseline `pineforge-parity-baseline-20261006-engine-7a1f01c0`, 2026-10-06). A main scoreboard advance does not change release results. @@ -668,7 +669,7 @@ Documentation: [C ABI reference](https://cdocs.pineforge.dev) · [Getting starte ## Releases -- **Planned v1.4.0 — unreleased.** Two additive C failure getters; typed input/override provenance with explicit unresolved reasons and duplicate-title counts; coded failure JSON and checked-setting refusals; Pine exit/fill-location corrections that can change trades, reports and hash values on the affected paths; chart-timeframe live input and final-delivery draining; feed ownership and verification improvements. The C layouts stay at ABI 4, while hash recipes and report content have the disclosed changes. Pair with codegen 1.4.0 when released, regenerate and relink. See [CHANGELOG.md](CHANGELOG.md#unreleased). +- **[v1.4.0](https://github.com/pineforge-4pass/pineforge-engine/releases/tag/v1.4.0)** (2026-10-08) — two additive C failure getters; typed input/override provenance with explicit unresolved reasons and duplicate-title counts; coded failure JSON and checked-setting refusals; Pine exit/fill-location corrections that can change trades, reports and hash values on the affected paths; chart-timeframe live input and final-delivery draining; feed ownership and verification improvements. The C layouts stay at ABI 4, while hash recipes and report content have the disclosed changes. Pair with codegen 1.4.0, regenerate and relink. See [CHANGELOG.md](CHANGELOG.md#140--2026-10-08). - **v1.3.0** (2026-10-06) — a minor release: `pineforge-live` admits the proven confirmed-bar request shapes and standalone close-only `varip` from the confirmed-bar receipt a strategy generated by pineforge-codegen 1.3.0 exports; Pine adapter parity changes (exit binding at the call, global exits on a held position beside an opposite entry or a same-side add, margin calls at the open after a `process_orders_on_close` close fill, the margin-call schedule, the exact reversal tie, the carried trail, the position view after a close fill, open-marketable exits first). `pineforge.h` is unchanged. No report key changes. The hub image `pineforge-release:1.3.0` carries the pair; regenerate and relink. See [CHANGELOG.md](CHANGELOG.md). - **v1.2.0** (2026-10-05) — a minor release: a strategy generated by pineforge-codegen 1.2.0 exports a compiled execution-capabilities receipt (`strategy_capabilities_receipt`), from which `pineforge-live` refuses what its close-only stream cannot honour; Pine adapter parity changes (exit children at one point, the trail tolerance, margin, sizing and admission rules, the explicit quantity floor, the script's equity mark, bar fills under `process_orders_on_close`, the session clock across daylight-saving switches), and native runner service operation, cumulative report export and live redelivery. No report key changes. The hub image `pineforge-release:1.2.0` carries the pair; regenerate and relink. See [CHANGELOG.md](CHANGELOG.md). - **v1.1.0** (2026-10-04) — a minor release: a strategy generated by pineforge-codegen 1.1.0 exports six checked-settings C functions and stops C++ exceptions at its C entry points, and codegen 1.1.0's `transpile_full()` lists the other symbols' feeds a script requests; confirmed-bar streams compute what the batch computes, which fixes the v1.0.0 and v1.0.1 stream `request.security` known issue; Pine adapter parity changes, exact tick-built bar volume, a report-only terminal quote, the Docker harness's lot grid from `syminfo.mincontract` and its multi-symbol `request.security` feeds, and native runner webhook routing, with `pineforge/live_parser.h` and the runner's parser plugins removed (the hub image `pineforge-release:1.1.0` carries the pair); regenerate and relink. See [CHANGELOG.md](CHANGELOG.md). diff --git a/docker/README.md b/docker/README.md index d93488ea..9a74c00b 100644 --- a/docker/README.md +++ b/docker/README.md @@ -14,11 +14,10 @@ never leaves the container**. A pre-transpiled `strategy.cpp` is still accepted for back-compat. JSON report on stdout, build/transpile noise on stderr. -This checkout documents the **planned 1.4.0 release (unreleased)**. Its -candidate pairs engine `b3192bfc` and codegen `bfc4ddce`; their version files -still say 1.3.0 until tagging. The release adds typed/unresolved provenance +This checkout documents the **1.4.0 release (2026-10-08)**, pairing engine +1.4.0 with codegen 1.4.0. The release adds typed/unresolved provenance and coded failures, and the harness uses checked settings when the strategy -exports that API. Use the same-version engine/codegen pair when released, +exports that API. Use the same-version engine/codegen pair, regenerate the C++ and relink; an older image keeps its own harness behavior. ## Pull (prebuilt) @@ -268,7 +267,7 @@ docker run --rm \ before this variable existed, apart from `elapsed_seconds`. The engine catches run errors (TF mismatch, unsupported emulation flags, -unknown-input-TF, etc.) into `strategy_get_last_error()` and, with the planned +unknown-input-TF, etc.) into `strategy_get_last_error()` and, with the 1.4.0 runtime, its code/args getters. The failure line below describes both the coded form and the earlier text-only form. The container exits `4` (the harness returns 1; the entrypoint maps any harness failure to 4). @@ -473,7 +472,7 @@ read-only mounts; the image performs no network I/O at run time. Every JSON report carries a `fingerprint` recording exactly what produced it — reversible, no key required: -This is a schematic of the planned 1.4.0 provenance shape, not a measured +This is a schematic of the 1.4.0 provenance shape, not a measured before/after result. Certified values are typed; unresolved rows use the resolution records described below. The top-level `applied_inputs` and `applied_overrides` remain wire-string echoes. @@ -528,7 +527,7 @@ match a JCS direct encoder for the types we accept: | Bools / null | `true` / `false` / `null` | The `{token,digest,provenance}` object shape and canonical encoder are -unchanged in planned 1.4.0. Typed provenance normalization changes the values +unchanged in 1.4.0. Typed provenance normalization changes the values fed to that encoder, including explicit uncertainty; those changes can change the token and digest. diff --git a/docs/pages/public-contract.md b/docs/pages/public-contract.md index 1081da5e..769b28b5 100644 --- a/docs/pages/public-contract.md +++ b/docs/pages/public-contract.md @@ -23,14 +23,14 @@ tree; where no checker holds part of a rule, the page says so. The codegen states its half in its own `docs/PUBLIC_CONTRACT.md` (pineforge-codegen); the two releases pair as the last section below says. -Planned 1.4.0 is unreleased. Its candidate (engine `b3192bfc`, codegen -`bfc4ddce`) adds two runtime failure getters and the feature probe +1.4.0 followed on 2026-10-08: engine v1.4.0 with pineforge-codegen 1.4.0. +It adds two runtime failure getters and the feature probe `PINEFORGE_HAS_RUN_FAILURE_CODES_V1`, without changing C layouts or `PF_ABI_VERSION` 4. It also changes report provenance types and adds -resolution/failure fields. The repository's `CHANGELOG.md`, under -*Unreleased*, inventories the state-hash additions and report migration; -the version files still say 1.3.0 until tagging. This candidate is intended -for the same-version 1.4.0 pair, with regeneration and relinking as below. +resolution/failure fields. The repository's +[CHANGELOG.md](../../CHANGELOG.md#140--2026-10-08), under +*1.4.0 — 2026-10-08*, inventories the state-hash additions and report migration. +Use the same-version 1.4.0 pair, with regeneration and relinking as below. ## Versions diff --git a/docs/pages/release-1.4.0-sample.md b/docs/pages/release-1.4.0-sample.md index a30c6fe9..52f2dd60 100644 --- a/docs/pages/release-1.4.0-sample.md +++ b/docs/pages/release-1.4.0-sample.md @@ -1,9 +1,9 @@ -# Planned 1.4.0 — public provenance sample {#release_140_sample} +# 1.4.0 — pre-tag public provenance sample {#release_140_sample} @tableofcontents -This synthetic sample compares the released **1.3.0 source pair** with the -**unreleased 1.4.0 candidate pair**. Both were built and installed on the same +This synthetic sample compared the released **1.3.0 source pair** with the +**pre-tag 1.4.0 candidate pair**. Both were built and installed on the same x86-64 Ubuntu 24.04 host with GCC 13.3.0, then run through their own installed `docker/entrypoint.sh` and `run_json.py`. It is a report-shape example: 40 constant bars, no trades, no performance measurement and no @@ -12,12 +12,12 @@ private source or feed. | Pair | Engine commit | Codegen commit | |---|---|---| | Released 1.3.0 sources | `ec5d8bf46210bac103870ecf6fc74865cad66c8d` | `0736180e4b1ae8068df222f72ccc6a8a64471d3f` | -| Planned 1.4.0 candidate | `b3192bfc2f5a24bf4efd6d1d01e01e8fe619dfed` | `bfc4ddce453db1ba810692af9b9ba3310d87f0ac` | +| Pre-tag 1.4.0 candidate | `b3192bfc2f5a24bf4efd6d1d01e01e8fe619dfed` | `bfc4ddce453db1ba810692af9b9ba3310d87f0ac` | -These are fresh builds from pinned source, not downloaded release binaries. -Both candidate VERSION files still say 1.3.0. With -`PINEFORGE_VERSION_SOURCE=FILE`, the installed candidate reports version -`1.3.0` and engine commit `b3192bf`; the old build reports `1.3.0` and +These were fresh builds from pinned source, not downloaded release binaries. +Both candidate VERSION files said 1.3.0 at sample-build time. With +`PINEFORGE_VERSION_SOURCE=FILE`, the installed candidate reported version +`1.3.0` and engine commit `b3192bf`; the old build reported `1.3.0` and `ec5d8bf`. The candidate output has not been relabeled as a tagged artifact. ## Shared inputs diff --git a/docs/pages/tutorial-macd.md b/docs/pages/tutorial-macd.md index ec922464..21d22d3b 100644 --- a/docs/pages/tutorial-macd.md +++ b/docs/pages/tutorial-macd.md @@ -83,7 +83,7 @@ bash tutorial/run.sh Configures CMake (first time only), builds `tutorial/macd/strategy.so`, then runs the harness. The output below is the recorded engine v1.0.0 / codegen 1.0.0 result on the frozen feed; it has not -been re-measured for planned 1.4.0: +been re-measured for 1.4.0: ``` MACD(12,26,9) on BTCUSDT 15m — 672 bars, 2026-04-29 18:15 → 2026-05-06 18:00 UTC