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
17 changes: 8 additions & 9 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,15 +20,14 @@ 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.5.0 — Unreleased

The planned number of the next release; it stays **Unreleased** until its tag
exists, and the package version is unchanged. This entry records the diagnostic
additions below and the report-contract documentation for the paired engine
fix, and nothing else: the engine pairing, the rest of the content and the date
of 1.5.0 are set when the release is prepared. The codegen change is
diagnostics only; the report documentation adds no Python, JSON, diagnostic or
emitted-C++ change of its own, and no analyzer or code-generation file differs.
## 1.5.0 — 2026-10-12

A minor release of the exact engine/codegen pair, paired with engine `v1.5.0`
and dated 2026-10-12. This entry records the diagnostic additions below and the
report-contract documentation for the paired engine fix, and nothing else: the
codegen change is diagnostics only; the report documentation adds no Python,
JSON, diagnostic or emitted-C++ change of its own, and no analyzer or
code-generation file differs.

### Compatibility and migration

Expand Down
30 changes: 15 additions & 15 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ for the changes in each release from 1.0.0 on and the release-note policy.
## Releases and this README

<!-- Release lane: before a release is tagged, add it to the Engine pairing
table and update every line that names `1.4.0` or `v1.4.0` as the current
table and update every line that names `1.5.0` or `v1.5.0` as the current
release or pair (this section's version and date, the baseline paragraph at
the top, the engine `src/source/` link, the `@pf-trace` note, the clone
command and its example output, "This section describes …", the timing note)
Expand All @@ -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 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
`@pineforge/codegen-pyodide`. It describes 1.5.0 (2026-10-12)
and what changed since 0.10.4. The 1.4.0 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 @@ -64,9 +64,8 @@ covers 1.0.0 on and links the notes of earlier releases. A source install
reports the version in `VERSION`, which the release workflow sets when it tags
a release.

Text that says "since 1.5.0" describes the source tree on `main`, not a
published package: 1.5.0 is the planned number of the next release, and the
statements about 1.4.0 keep their historical meaning.
Text that says "since 1.5.0" describes the 1.5.0 release and later versions;
the statements about 1.4.0 keep their historical meaning.

### Upgrading from 1.3.0

Expand Down Expand Up @@ -126,8 +125,8 @@ It does **not** own execution semantics. Order lifecycle, bracket legs,
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)
in engine `v1.4.0`), which maps them onto the engine's Pine-agnostic kernel.
([`src/source/`](https://github.com/pineforge-4pass/pineforge-engine/tree/v1.5.0/src/source)
in engine `v1.5.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 @@ -540,6 +539,7 @@ Generated C++ compiles only against the engine it was generated for:
| 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 (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. |
| 1.5.0 (PyPI, 2026-10-12) | `v1.5.0` | Adds the nonfatal `note` diagnostic severity and diagnostic `user_message` templates. 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 @@ -565,8 +565,8 @@ 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
# 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
# 1.5.0 pairs with engine v1.5.0. For 0.10.4 use v0.13.1.
git clone --branch v1.5.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
bash tutorial/run.sh # needs cmake, a C++17 compiler and python3
Expand Down Expand Up @@ -692,7 +692,7 @@ quote. The commercial-license store (coming soon) will take orders online.

## Explicit Pine execution attachment

This section describes the 1.4.0 and engine `v1.4.0` pair. The Pine execution adapter is
This section describes the 1.5.0 and engine `v1.5.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 All @@ -715,9 +715,9 @@ Regenerate old generated C++ before using a new engine for Pine execution. C++
generated before the source-layer cut
([#129](https://github.com/pineforge-4pass/pineforge-codegen-oss/pull/129)),
0.10.4's included, derives from `BacktestEngine` and does not compile against
engine `v1.4.0`; old cap-only C++ does not attach the priority rule, and
engine `v1.5.0`; old cap-only C++ does not attach the priority rule, and
metadata cannot silently restore it. Rebuild all modules against the
new matching C++ layout (`engine_script_run_v19` in engine `v1.4.0`). Retaining
new matching C++ layout (`engine_script_run_v19` in engine `v1.5.0`). Retaining
that epoch does not promise equal fingerprints, state hashes or trades across
releases. The extraction preserves Pine policy
under explicit attachment; it does not implement the generic native
Expand Down
15 changes: 4 additions & 11 deletions docs/PUBLIC_CONTRACT.md
Original file line number Diff line number Diff line change
@@ -1,17 +1,11 @@
# 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 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`. One section,
[A report belongs to the call that returned it](#a-report-belongs-to-the-call-that-returned-it),
describes a paired engine fix that is not yet released.
later additions. This revision includes the 1.5.0 pair (2026-10-12).

Text marked **since 1.5.0** describes diagnostic additions that 1.4.0 and
earlier releases do not have: the `note` severity, the `user_message` template
and the eleven codes that became notes. 1.5.0 is the planned number of the
release that carries them; until that tag exists, this text describes the
source tree, not a published package.
and the eleven codes that became notes.

## Optional compiled execution capabilities

Expand Down Expand Up @@ -176,9 +170,8 @@ three codes: exit 4 alone does not select a billing or refund decision.

## A report belongs to the call that returned it

Availability: **not yet released.** This is the contract of a report fix in the
paired engine that is in preparation. Engine `v1.4.0` and earlier do not carry
it; this section applies to the first engine release that does. The report fix
Availability: **since 1.5.0**, with engine `v1.5.0`. This is the contract of a
report fix in the paired engine. The report fix
itself changes neither the generated C++ nor the transpiler's Python and JSON
contract: the wrappers still run the strategy and then ask the engine for its
report.
Expand Down
Loading