Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 7 additions & 7 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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

Expand Down Expand Up @@ -244,7 +244,7 @@ These are recorded grading outcomes, not a statement that no internal attempt
ever failed. Baseline <!-- pf:releases[1.4.0].scoreboard.id|code -->`pineforge-parity-baseline-20261007-engine-b3192bfc`<!-- /pf -->
measures engine <!-- pf:releases[1.4.0].scoreboard.engineCommit|short-code -->`b3192bfc`<!-- /pf -->
and codegen <!-- pf:releases[1.4.0].scoreboard.codegenCommit|short-code -->`bfc4ddce`<!-- /pf -->;
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

Expand Down
28 changes: 14 additions & 14 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ graded excellent and <!-- pf:scoreboard.strong|int -->6<!-- /pf --> 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 <!-- pf:releases[1.4.0].scoreboard.excellent|int -->7,983<!-- /pf --> excellent / <!-- pf:releases[1.4.0].scoreboard.strong|int -->6<!-- /pf --> strong**, on <!-- pf:releases[1.4.0].scoreboard.graded|int -->7,989<!-- /pf --> probes (baseline <!-- pf:releases[1.4.0].scoreboard.id|code -->`pineforge-parity-baseline-20261007-engine-b3192bfc`<!-- /pf -->, <!-- pf:releases[1.4.0].scoreboard.date -->2026-10-07<!-- /pf -->). 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 <!-- pf:releases[1.4.0].scoreboard.excellent|int -->7,983<!-- /pf --> excellent / <!-- pf:releases[1.4.0].scoreboard.strong|int -->6<!-- /pf --> strong**, on <!-- pf:releases[1.4.0].scoreboard.graded|int -->7,989<!-- /pf --> probes (baseline <!-- pf:releases[1.4.0].scoreboard.id|code -->`pineforge-parity-baseline-20261007-engine-b3192bfc`<!-- /pf -->, <!-- pf:releases[1.4.0].scoreboard.date -->2026-10-07<!-- /pf -->). 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 <!-- pf:releases[1.3.0].scoreboard.excellent|int -->7,982<!-- /pf --> excellent / <!-- pf:releases[1.3.0].scoreboard.strong|int -->7<!-- /pf --> strong on <!-- pf:releases[1.3.0].scoreboard.graded|int -->7,989<!-- /pf --> probes; its historical result remains scoped to that pair.

Expand Down Expand Up @@ -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
Expand All @@ -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
Expand All @@ -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
Expand All @@ -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
Expand Down Expand Up @@ -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).

---
Expand Down Expand Up @@ -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 `<pineforge/pineforge.h>`; 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 `<pineforge/pineforge.h>`; 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 `<pineforge/pineforge.h>` 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
Expand All @@ -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
Expand All @@ -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
Expand Down Expand Up @@ -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
Expand Down
8 changes: 4 additions & 4 deletions docs/PUBLIC_CONTRACT.md
Original file line number Diff line number Diff line change
@@ -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

Expand Down Expand Up @@ -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.

Expand Down
12 changes: 6 additions & 6 deletions docs/pine-cap-activation.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand All @@ -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.

Expand Down
Loading