diff --git a/CHANGELOG.md b/CHANGELOG.md index cb0d1af..a6bee3d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,10 +20,11 @@ supported as exact pairs; on the 0.x line they are independent. See the the release commit. A prerelease note describes changes since the preceding prerelease or stable tag; the final stable note consolidates the series. -## 1.4.0 — Unreleased +## 1.4.0 — 2026-10-08 -A minor release of the exact engine/codegen pair, prepared from codegen -`bfc4ddce` and engine `b3192bfc`. It consolidates the seven requests landed +A minor release of the exact engine/codegen pair. Its behavior was validated +before tagging on codegen `bfc4ddce` and engine `b3192bfc`. +It consolidates the seven requests landed since `v1.3.0`: [#183](https://github.com/pineforge-4pass/pineforge-codegen-oss/pull/183) (emission ordering), [#184](https://github.com/pineforge-4pass/pineforge-codegen-oss/pull/184) (coded run stops), [#185](https://github.com/pineforge-4pass/pineforge-codegen-oss/pull/185) @@ -32,9 +33,8 @@ since `v1.3.0`: [#183](https://github.com/pineforge-4pass/pineforge-codegen-oss/ (CI history), [#189](https://github.com/pineforge-4pass/pineforge-codegen-oss/pull/189) (reference tests), and [#190](https://github.com/pineforge-4pass/pineforge-codegen-oss/pull/190) (emitted-string regressions and edge cases). Recorded-output support from -engine request #356 is excluded. This planned release has not been tagged; -its candidate `VERSION` files still read `1.3.0` until the release workflows -set them. +engine request #356 is excluded. The pre-tag validation used these commits +with `VERSION` equal to `1.3.0`; those results are not post-tag measurements. ### Compatibility and migration @@ -244,7 +244,7 @@ These are recorded grading outcomes, not a statement that no internal attempt ever failed. Baseline `pineforge-parity-baseline-20261007-engine-b3192bfc` measures engine `b3192bfc` and codegen `bfc4ddce`; -these quantities render from the prepared release facts, not numeric overrides. +these quantities render from the public release facts, not numeric overrides. ## 1.3.0 — 2026-10-06 diff --git a/README.md b/README.md index e43ab3b..a7ed912 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ graded excellent and 6 strong, with A probe is a strategy exported from TradingView with its trade list and replayed trade for trade on the same bars. -Planned release **1.4.0 grades 7,983 excellent / 6 strong**, on 7,989 probes (baseline `pineforge-parity-baseline-20261007-engine-b3192bfc`, 2026-10-07). These are the prepared pair's recorded grading outcomes, not a published tag or a promise about arbitrary scripts. A main scoreboard advance does not change release results. +Release **1.4.0 grades 7,983 excellent / 6 strong**, on 7,989 probes (baseline `pineforge-parity-baseline-20261007-engine-b3192bfc`, 2026-10-07). These are the pair's recorded grading outcomes, not a promise about arbitrary scripts. A main scoreboard advance does not change release results. Release 1.3.0 recorded 7,982 excellent / 7 strong on 7,989 probes; its historical result remains scoped to that pair. @@ -52,10 +52,10 @@ hosted-server line name no version. --> This README ships with each release as its package description on PyPI (`pineforge-codegen`); releases from 0.7.0 on are also on npm as -`@pineforge/codegen-pyodide`. It describes the planned 1.4.0 pair (**Unreleased**) -and what changed since 0.10.4. The candidate is codegen `bfc4ddce` with engine -`b3192bfc`, excluding engine request #356; both candidate `VERSION` files still -read `1.3.0` until the release workflows set them. Historical measurements +`@pineforge/codegen-pyodide`. It describes 1.4.0 (2026-10-08) +and what changed since 0.10.4. The release's behavior was validated before +tagging on codegen `bfc4ddce` with engine `b3192bfc`, excluding engine +request #356. Those validation builds reported `1.3.0`; historical measurements below retain the versions on which they were run. The [PyPI release history](https://pypi.org/project/pineforge-codegen/#history) lists every release; the @@ -66,7 +66,7 @@ a release. ### Upgrading from 1.3.0 -After the 1.4.0 pair is published, regenerate C++ and relink against engine +For the 1.4.0 pair, regenerate C++ and relink against engine `v1.4.0`'s generated headers and runtime, even though C ABI version 4 and the script ABI epoch are retained. Emission and input manifests change; neither generated C++ nor Python/Pyodide envelopes are promised byte-identical. Every @@ -79,7 +79,7 @@ corrected source/enum choices, string values, signed bounds and plain-input type Give each input a unique title; different `group=` labels do not separate override keys. The paired checked path refuses a shared key and returns a null fingerprint for a completed run of such a script even without an override. -The [1.4.0 migration notes](CHANGELOG.md#140--unreleased) cover this change, +The [1.4.0 migration notes](CHANGELOG.md#140--2026-10-08) cover this change, new refusals of some previously accepted settings, and color's string manifest versus packed-integer native value. Check stored presets before submitting them. Users of `pineforge-hpo` 0.11.0 must preserve the manifest's number type for @@ -88,7 +88,7 @@ each option at its input boundary; see the [known issue](CHANGELOG.md#known-issu The paired engine adds coded run failures and typed fingerprint provenance. Its run harness returns failure `code` and typed `args` beside `error`; an empty message still means failure. Transpile-time diagnostics remain a separate -Python/JSON surface. Read the [1.4.0 changelog](CHANGELOG.md#140--unreleased) +Python/JSON surface. Read the [1.4.0 changelog](CHANGELOG.md#140--2026-10-08) for migration details and inherited collection/metadata limitations. ### Upgrading from 0.10.4 @@ -123,8 +123,8 @@ fill-price and slippage rules, `process_orders_on_close` / `calc_on_order_fills` margin revival and trail/stop behaviour — everything TradingView parity depends on at run time — live in the engine's source-adapter runtime ([`src/source/`](https://github.com/pineforge-4pass/pineforge-engine/tree/v1.4.0/src/source) -for the planned engine `v1.4.0` pair), which maps them onto the engine's Pine-agnostic kernel. The tag link becomes available when that release is -published. See +in engine `v1.4.0`), which maps them onto the engine's Pine-agnostic kernel. +See the engine's [architecture notes](https://github.com/pineforge-4pass/pineforge-engine#architecture-kernel-vs-parity). --- @@ -516,7 +516,7 @@ Generated C++ compiles only against the engine it was generated for: | 1.1.0 (PyPI, 2026-10-04) | `v1.1.0` | The pair the `pineforge-release` image `1.1.0` ships. Its C++ defines the checked settings functions that engine `v1.1.0` adds to ``; regenerate and relink. | | 1.2.0 (PyPI, 2026-10-05) | `v1.2.0` | The pair the `pineforge-release` image `1.2.0` ships. Its C++ defines the compiled execution capability functions that engine `v1.2.0` adds to ``; regenerate and relink. | | 1.3.0 (PyPI, 2026-10-06) | `v1.3.0` | The pair the `pineforge-release` image `1.3.0` ships. Its C++ adds the confirmed-bar receipt, which engine `v1.3.0`'s live runner reads, and the order-shapes receipt; engine `v1.3.0`'s `` is `v1.2.0`'s. Regenerate and relink. | -| 1.4.0 (planned, Unreleased) | `v1.4.0` | Prepared from codegen `bfc4ddce` and engine `b3192bfc`. Adds paired coded failures, corrected input manifests and collection lowering. C ABI 4 does not authorize a mixed pair. Regenerate and relink after publication. | +| 1.4.0 (PyPI, 2026-10-08) | `v1.4.0` | Adds paired coded failures, corrected input manifests and collection lowering. C ABI 4 does not authorize a mixed pair. Regenerate and relink. | | Later `X.Y.Z` releases | `vX.Y.Z` of the same version | See below. | On the 0.x line the engine and codegen versions are independent, and the @@ -542,7 +542,7 @@ Pine as `strategy.pine`, write `strategy.generated.cpp` with the [file example](#transpile-a-file-to-a-cpp) above, then from the same directory: ```bash -# After publication: 1.4.0 pairs with engine v1.4.0. For 0.10.4 use v0.13.1. +# 1.4.0 pairs with engine v1.4.0. For 0.10.4 use v0.13.1. git clone --branch v1.4.0 https://github.com/pineforge-4pass/pineforge-engine.git cd pineforge-engine cp ../strategy.generated.cpp tutorial/macd/generated.cpp # the tutorial's strategy slot @@ -553,7 +553,7 @@ bash tutorial/run.sh # needs cmake, a C++17 compiler and python3 `tutorial/macd/strategy.so`, and runs `tutorial/run.py`, which loads the `.so`, feeds it the bars and reads back the closed trades. For the quick-start SMA cross, the following output was measured on 1.3.0 with engine `v1.3.0`; it -has not been re-measured for this 1.4.0 documentation change: +was not re-measured for the 1.4.0 release notes: ``` MACD(12,26,9) on BTCUSDT 15m — 672 bars, 2026-04-29 18:15 → 2026-05-06 18:00 UTC @@ -657,7 +657,7 @@ quote. The commercial-license store (coming soon) will take orders online. ## Explicit Pine execution attachment -This section describes the planned 1.4.0 and engine `v1.4.0` pair. The Pine execution adapter is +This section describes the 1.4.0 and engine `v1.4.0` pair. The Pine execution adapter is the engine's full Pine execution runtime (`PineExecutionAdapter` and `PineStrategyHost` in the engine's `src/source/`): order lifecycle, bracket legs, fill-price and slippage rules, POOC / `calc_on_order_fills`, margin diff --git a/docs/PUBLIC_CONTRACT.md b/docs/PUBLIC_CONTRACT.md index be1aacc..41a4606 100644 --- a/docs/PUBLIC_CONTRACT.md +++ b/docs/PUBLIC_CONTRACT.md @@ -1,9 +1,9 @@ # Public contract for 1.0 The supported Python/JSON contract began in 1.0.0; the sections below identify -later additions. This revision includes the planned 1.4.0 pair (codegen -`bfc4ddce`, engine `b3192bfc`, **Unreleased**), not an already published tag. -The candidate version files still read `1.3.0` until release dispatch. +later additions. This revision includes the 1.4.0 pair (2026-10-08). +Pre-tag validation used codegen `bfc4ddce` and engine `b3192bfc`, whose +version files at that point read `1.3.0`. ## Optional compiled execution capabilities @@ -122,7 +122,7 @@ changes nothing); never map a feed key back to `"D"`. ## Optional coded run failures -Availability: **planned 1.4.0**, with engine `v1.4.0`'s +Availability: **since 1.4.0**, with engine `v1.4.0`'s `PINEFORGE_HAS_RUN_FAILURE_CODES_V1` feature. The feature is optional in emitted source; that fallback is not an exception to exact release pairing. diff --git a/docs/pine-cap-activation.md b/docs/pine-cap-activation.md index a151f32..f6bb4f2 100644 --- a/docs/pine-cap-activation.md +++ b/docs/pine-cap-activation.md @@ -4,9 +4,9 @@ This note came with the explicit cap attachment ([#127](https://github.com/pineforge-4pass/pineforge-codegen-oss/pull/127)). It now also covers the execution-adapter attachment that followed ([#128](https://github.com/pineforge-4pass/pineforge-codegen-oss/pull/128)) and -describes the planned codegen 1.4.0 / engine `v1.4.0` pair. The release -is **Unreleased**: candidate codegen `bfc4ddce` and engine `b3192bfc` still -have `VERSION` equal to `1.3.0`; they are not tagged 1.4.0 artifacts. +describes the codegen 1.4.0 / engine `v1.4.0` pair (2026-10-08). +Pre-tag validation used codegen `bfc4ddce` and engine `b3192bfc`, whose +version files then read `1.3.0`. Generated strategies explicitly select Pine intraday-cap compatibility in their constructor. When the engine defines @@ -22,7 +22,7 @@ The expression is evaluated only where the source executes it, and limit updates preserve the existing quota and pending obligations. Selection does not evaluate a limit or move a conditional statement into the constructor. -The 1.4.0 engine candidate, like released engine `v1.3.0`, defines both macros +Engine `v1.4.0`, like `v1.3.0`, defines both macros in `pineforge/source/pine_strategy_host.hpp`, the header the generated C++ includes; every engine commit with that header does, since the header and the macros arrived there together (engine #253). So @@ -33,10 +33,10 @@ capability, bare native construction leaves the Pine cap unselected. Matching runtime headers and library are required; this source bridge does not make stale compiled C++ objects compatible across internal ABI versions. -The 1.4.0 engine candidate, like released `v1.3.0`, `v1.0.0`, `v1.0.1`, +Engine `v1.4.0`, like `v1.3.0`, `v1.0.0`, `v1.0.1`, `v1.1.0` and `v1.2.0`, no longer has the `script_has_strategy_close_` member that the C++ of codegen 0.10.4 and earlier assigns, so that C++ does not -compile there. For the planned release, regenerate with codegen 1.4.0 and +compile there. Regenerate with codegen 1.4.0 and relink with the exact paired engine release; unchanged interface numbers do not authorize mixing releases.