Skip to content

docs: changelog and version scoping for 1.2.0 - #172

Merged
luisleo526 merged 2 commits into
mainfrom
rel/1.2.0-notes
Oct 5, 2026
Merged

luisleo526 merged 2 commits into
mainfrom
rel/1.2.0-notes

Conversation

@luisleo526

Copy link
Copy Markdown
Contributor

What and why

1.2.0 pairs with engine v1.2.0. The engine's pineforge.h defines
PF_CAPABILITIES_API_VERSION (1) and declares strategy_capabilities_api_version
and strategy_capabilities_receipt (pineforge-engine#332). The C++ of codegen
1.2.0 defines both functions (#167). The pair keeps PF_ABI_VERSION 4 and the
script ABI epoch engine_script_run_v19. This README becomes PyPI's long
description for 1.2.0, so the version scoping has to be right at the tag.

Compatibility statements

  • Report keys: the engine's docker/run_json.py, which the hub image runs, is
    byte for byte the same file in engine v1.1.0 and engine main 52292db9 (#339). No
    report key is added, removed or renamed. metrics.equity.sharpe_tv and
    sortino_tv (EQUITY_REPORT_KEYS) are unchanged, and the engine's ADR-0001
    keeps serialized report keys unchanged.

  • The Python and JSON contract is additive. git diff v1.1.0..48e7a13 touches
    three contract files, and each change is an addition:

    • gate/glue.py adds code and args to each JSON diagnostic;
    • pineforge_codegen/errors.py adds the code and args properties;
    • pineforge_codegen/__init__.py adds the diagnostics_catalog /
      render_diagnostic import.

    No argument, result key or envelope is removed or renamed. One result
    changes: which error is raised first for a script with several errors (Stable diagnostic codes, an ICU message catalog, and first error in source order #166).

  • License: 1.2.0 is the first release under the PineForge Source License 1.1
    (licensor pineforge, LLC). All 20 earlier release tags ship "PineForge Codegen
    — License", which is the PolyForm Noncommercial License 1.0.0 with PineForge's
    supplemental sections. Those releases keep that license. The changelog
    summarizes LICENSE and LEGAL.md and names LICENSE as the controlling text.

Verified

  • Transpile identity, run on the Mac with CPython 3.14.6 on an Apple M4 Max.
    Each source ran in its own process, once with the v1.1.0 tree and once with
    48e7a13. The sources were the engine's 325 public corpus sources (corpus pin
    b40aa8ec) and the 277 gate fixtures. Of these, 589 transpile. For each of
    them, 1.2.0's C++ with the capability block removed equals 1.1.0's byte for
    byte, and each carries exactly one capability block. The other 13 are refused
    with the same message by both versions.
  • Timing: run sequentially, each source took at most 0.054 s, so the README
    says "under 0.1 seconds".
  • Tutorial, on an AWS spot box (Linux x86_64, GCC 13.3). The instance has been
    terminated.
    • Engine main 44eab7b1 with 1.2.0's quick-start C++ prints 9 trades,
      +738.20, best/worst +679.22 / -335.02, max dd -788.79 and elapsed 1.0 ms.
      With the old sizing declared it books 13 trades.
    • Engine v1.1.0 with 1.1.0's C++ prints the same, which matches the
      README.
    • The .so built against engine main's headers exports both capability
      functions.
    • 1.2.0's C++ built against v1.1.0's headers compiles without them, as the
      #ifdef guard intends.
  • git diff --check origin/main is clean. Only Markdown files changed. Every
    pf: marker value comes from the facts render above.

Gate

pr-gate for (engine main 52292db9, this head 95a5314): PASS (no-improve-no-regression), experiment
exp-rel120-cgnotes-gate-20261005 (134/134 cases), candidate d8af0284 vs baseline 7161ebdc (the active
…-20261005-engine-52292db9) over population 40c482c2; eventKey
verdict-52292db9df56-95a5314bf0cf-36475251a30c, gated 2026-10-05 04:24Z.

🤖 Generated with Claude Code

luisleo526 and others added 2 commits October 5, 2026 11:42
1.2.0 pairs with engine v1.2.0, whose pineforge.h defines
PF_CAPABILITIES_API_VERSION and declares the two capability functions
(engine #332) that the C++ of codegen 1.2.0 defines (#167). The changelog
section takes in the Unreleased notes and covers #166, #167, #168 and
#171: the capability receipt and what the live runner does with it, the
diagnostic codes and catalog, the first error in source order, the
linear-time classification as a security fix, the PineForge Source
License 1.1 and the pairing and migration steps. The Python and JSON
contract is additive; the engine's report harness is unchanged since
v1.1.0, so no report key changes.

The README, AGENTS.md / CLAUDE.md, CONTRIBUTING.md,
docs/PUBLIC_CONTRACT.md and docs/pine-cap-activation.md name 1.2.0 where
they named 1.1.0 as the current release or pair, the pairing table gets
a 1.2.0 row, the license badge reads 1.1, and the npm README lists the
catalog and LICENSE the package now carries. The release scoreboard
sentence and the pf markers are left to the release lane.

Measured for 1.2.0: the engine's 325 corpus sources and the 277 gate
fixtures transpile, with the capability block removed, to 1.1.0's C++
byte for byte, each in a fresh process (13 refusals, same messages), and
each in under 0.1 s on CPython 3.14.6 on an Apple M4 Max. The tutorial
run of the quick-start C++ against engine main 44eab7b1 (Linux x86_64,
GCC 13) prints 9 trades and +738.20, and 13 trades with the old sizing
declared, as 1.1.0 with engine v1.1.0 does.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
README: the release sentence names 1.2.0 and renders releases[1.2.0]
(baseline pineforge-parity-baseline-20261005-engine-52292db9, 7,970
excellent / 19 strong of 7,989), and the scoreboard of main renders the
same baseline, from pineforge-release facts/facts.json as exported for the
1.2.0 release (sha256 c2f438f0). CHANGELOG: the 1.2.0 documentation entry
states the release's grades, as 1.1.0's does.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@luisleo526
luisleo526 merged commit 51016f7 into main Oct 5, 2026
9 checks passed
@luisleo526
luisleo526 deleted the rel/1.2.0-notes branch October 5, 2026 05:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant