Skip to content

Releases: pineforge-4pass/pineforge-engine

v0.8.0

04 Jun 13:48

Choose a tag to compare

v0.8.0

Changes since v0.7.1

  • chore(release): v0.8.0 (0457d99)
  • chore: revert premature VERSION bump; cut 0.8.0 via release workflow (4020153)
  • release: v0.8.0 — concurrency-safe entrypoint (PINEFORGE_IN_DIR + mktemp work dir) (7bc1a1a)
  • feat(entrypoint): PINEFORGE_IN_DIR + per-run mktemp work dir (concurrency-safe) (daf4c34)
  • fix(submodule): pin corpus at LEGAL-fix commit, not divergent local main (d1bcb8c)
  • chore(submodules): bump corpus + assets to public-posture LEGAL.md (2c5bcfe)
  • docs(legal): reconcile docs to public source-available posture post-OSS (0fccede)
  • chore: bump corpus submodule (refreshed 246-probe report); restore trade totals in README (1449e15)
  • fix(scripts): regen_validation_report uses parse_trades(tz=) API; fix corpus org URL (f805611)
  • docs(readme): refresh corpus parity to 245/246 (current verifier), drop stale trade totals (2625d2f)
  • docs(readme): remove dead Live Playground links (codegen.pineforge.dev) (ed6ad91)
  • docs(readme): retarget header to local-first (PyPI/MCP badges, Docker CTA), drop API-key/free-tier framing (b8025e0)

Container image

docker pull ghcr.io/pineforge-4pass/pineforge-engine:0.8.0

v0.7.1

03 Jun 17:32

Choose a tag to compare

v0.7.1

Changes since v0.7.0

  • chore(release): v0.7.1 (22bd45a)
  • feat(docker): bundle pineforge-codegen in image; from-source corpus reproduction (d92d11c)

Container image

docker pull ghcr.io/pineforge-4pass/pineforge-engine:0.7.1

v0.7.0

02 Jun 20:31

Choose a tag to compare

v0.7.0

Changes since v0.6.4

  • chore(release): v0.7.0 (bf2e4eb)
  • Instrument + HTF parity: engine fixes, runtime syminfo ABI, and TV-graded probes (#29) (de12718)
  • Production-readiness probes + engine state-reset / finite-fill fixes (#28) (480fd19)
  • fix(fills): remove double-slippage on close-then-enter path (#27) (a0535f0)
  • docs: add Part 3 (cross-cutting behaviors) to engine cheatsheet (28ad088)
  • docs: source-verified runtime-overrides + order-execution cheatsheet (a4ab775)

Container image

docker pull ghcr.io/pineforge-4pass/pineforge-engine:0.7.0

v0.6.4

31 May 19:06

Choose a tag to compare

v0.6.4

Changes since v0.6.3

  • chore(release): v0.6.4 (cd08969)
  • feat: input.source series helper + syminfo tz/session/metadata injection (#23, #19) (#25) (5de5f96)
  • docs(aggregation): explain first-present script-bar timestamp under feed gaps (6cbc672)
  • docs(audit): mark input.time + drawing-field fixes resolved (f19e25a)
  • chore(corpus): bump submodule — regenerated validation_report (232 probes) (8567fc7)
  • bench(speed): refresh 3-way comparison after hot-path alloc-churn reduction (0d38cce)
  • bench(throughput): refresh numbers after hot-path alloc-churn reduction (f0af6f5)
  • test(risk): cover drawdown / consecutive-loss / direction-lock gates (3fc567e)
  • perf(ta): WMA uses ring buffer storage (math unchanged) (492296b)
  • build(cmake): add PINEFORGE_STRICT_WARNINGS opt-in (-Wconversion) (d806b6d)
  • build(cmake): add PINEFORGE_ENABLE_SANITIZERS opt-in (ASan+UBSan) (3f4aae1)
  • build(cmake): gate -O2 to non-Debug configs so Debug builds are debuggable (33222b2)
  • refactor(orders): extract fifo_drain helper for partial-exit dedup (47b21cb)
  • refactor(engine): extract dispatch_bar helper for process_orders_on_close branch (f540df4)
  • refactor(orders): named constants for quantity epsilons (kQtyEpsilon/kOcaQtyEpsilon) (c8033a6)
  • perf(engine): reduce per-bar heap-allocation churn in fill/run/security hot paths (af7c288)
  • feat(engine): add get_input_int64 helper for int64 input keys (02dc175)
  • docs(audit): mark Phase B/C/D resolutions in pine_v6_audit_master (f068aa6)

Container image

docker pull ghcr.io/pineforge-4pass/pineforge-engine:0.6.4

v0.6.3

28 May 16:50

Choose a tag to compare

v0.6.3

Changes since v0.6.2

  • chore(release): v0.6.3 (10abd48)
  • docs(readme): refresh parity numbers after varip-probe removal (f6fcf55)
  • chore(corpus): bump submodule — remove varip probes (codegen rejects varip) (f95ea8d)
  • refactor(matrix): extract storage-agnostic helpers to detail:: namespace (df5bda6)
  • docs(plan): Phase A engine parity plan (ee81d98)
  • fix(engine): supports_lower_tf_emulation accepts seconds-suffix TFs (1a547e2)

Container image

docker pull ghcr.io/fullpass-4pass/pineforge-engine:0.6.3

v0.6.2

26 May 21:12

Choose a tag to compare

v0.6.2

Changes since v0.6.1

  • chore(release): v0.6.2 (3b52566)
  • chore(deps): update corpus and benchmarks/assets submodules to latest (b37ee55)

Container image

docker pull ghcr.io/fullpass-4pass/pineforge-engine:0.6.2

v0.6.1

26 May 20:32

Choose a tag to compare

Performance & Optimizations

  • Zero-Allocation Core: Integrated DynamicRingBuffer template and refactored Series to use zero-allocation ring buffers.
  • O(1) Rolling Sum SMA: Optimized SMA implementation to O(1) complexity using rolling sum with power-of-two bitwise self-correction.
  • Benchmarks Relocation: Relocated performance benchmarks to benchmarks/throughput.

Features & Bug Fixes

  • Timeframe Parity: Resolved critical timeframe self-adaptive parity bug and aligned performance statistics.
  • Vectorbt Benchmarks: Integrated vectorbt benchmark comparisons and added long-short order simulation support.
  • CI Documentation: Fixed Doxygen download source by fetching directly from GitHub Releases instead of doxygen.nl.

v0.6.0

25 May 00:57

Choose a tag to compare

v0.6.0

Changes since v0.5.0

  • chore(release): v0.6.0 (18b2146)
  • docs(release): prep v0.6.0 release notes in README (1b56bcd)
  • chore(release): v0.5.0-opt — synchronize 124x speedups and release documentation (20aee3c)
  • refactor(benchmarks): remove optimized wunder-bots highlight from throughput plot (32b1f96)
  • chore(release): synchronize regenerated strategies and submodule pointers (3cf0859)
  • feat(benchmarks): add end-to-end performance reproduction package (ce25fb7)
  • perf(benchmarks): update assets submodule with optimized wunder-bots strategy (e710b10)
  • perf(engine): implement lazy process-global timezone caching (7b65a6c)
  • docs(readme): update TV parity stats, ctest count, document timezone override, and add magnifier benchmarks (73f10e7)
  • docs(audit): update Pine v6 master audit — mark 20 resolved critical issues (ce64f06)
  • docs(engine): add CLAUDE.md verification guide, spec, and plan for core fixes (c4bf3f2)
  • feat(engine): implement position_entry_name, max_drawdown_percent, time_close accessors (2e23617)
  • feat(engine): track last_bar_time_ and last_bar_index_ in run loops (0ad22ea)
  • docs(audit): exhaustive Pine v6 coverage audit — 38 critical, ~62 minor (a6b0b70)
  • feat(scripts): GitHub blob URLs + table CSS for validation report (9276a05)
  • feat(scripts): regen_validation_artifacts.sh — md → html → pdf pipeline (c3fb12c)
  • docs: drop pine_v6 sprint one-offs + add .claude/ to gitignore (b660f38)

Container image

docker pull ghcr.io/fullpass-4pass/pineforge-engine:0.6.0

v0.5.0 — Pine v6 HIGH+MEDIUM sprint (44% identifier coverage)

17 May 13:54

Choose a tag to compare

Pine v6 HIGH+MEDIUM Coverage Sprint

Headline: Pine v6 supported identifier surface grows from 40% to 44% fully-runs (380 → 418 of 941). Corpus parity 233/234 excellent (99.6%), zero regressions.

What's new

✅ Runtime additions (17 identifiers)

  • Session predicates (Sprint A): session.ismarket, session.ispremarket, session.ispostmarket, session.isfirstbar(_regular), session.islastbar(_regular) — backed by new pine_session_is* helpers in session_time.hpp + per-bar state tracking
  • VWAP bands 3-tuple (Sprint B): ta.vwap(src, anchor, stdev_mult) returning [vwap, upper, lower] via new VWAPBandsResult struct + running variance accumulator
  • timeframe.main_period (Sprint E)
  • strategy.max_contracts_held_all/_long/_short + strategy.eventrades (Sprint F)
  • time_tradingday (Sprint G1) with DST-edge fallback for America/Havana, Australia/Lord_Howe

🔧 Transpiler additions (21 identifiers)

  • chart.is_* (7): emit constants (true for chart.is_standard, false for others)
  • timeframe.isticks: constant false
  • backadjustment.* (3), settlement_as_close.* (3), adjustment.dividends/splits (2): integer passthrough to request.security
  • syminfo.main_tickerid + syminfo.country (2 derived from tickerid via new helpers_syminfo.py)
  • varip (1): treated as var (semantically equivalent in batch); transpile warning emitted (was previously hard-rejected)
  • ticker.inherit + ticker.standard (2): same-symbol passthrough (was previously blanket-rejected)

⏭️ Parse-and-skip + na-accept (12 identifiers)

  • Critical fix: syminfo.prefix, syminfo.root, syminfo.pricescale, syminfo.minmove — were silently emitting 0 (fields are NOT in SymInfo struct, contrary to prior audit); now correctly na<T>()
  • 6 syminfo external-data fields (mincontract, current_contract, expiration_date, isin, sector, industry) accept-na with conditional-use warnings
  • ~14 LOW-tier syminfo fields reclassified ❌→⏭️ (behavior unchanged)

❌ Hard-reject (7 identifiers; previously ❓ blanket-reject)

  • ticker.heikinashi/renko/kagi/linebreak/pointfigure — chart-type modifiers (engine doesn't synthesize alt bars)
  • ticker.new/modify — cross-symbol construction (engine only same-symbol MTF)

Tooling improvements

  • pineforge-utils validator: Eigen auto-detect at homebrew/macports/apt paths (recovered 6 matrix probes); new engine_chart_timezone override key in inputs.json schema; skip corpus/validation/symbol-specified/ from default sweep
  • pineforge-corpus: 6 new TV-parity probes (5 excellent + 1 excellent via 15m OHLCV override); 5 stock-symbol probes relocated to validation/symbol-specified/<SYMBOL>/ (blocked on pineforge-data); 5 maintainer-only smoke/expected-reject probes removed (coverage retained in codegen pytest)

Known issues filed

  • #16 max_intraday_filled_orders cap-day boundary uses chart_timezone instead of exchange syminfo.timezone (blocked on pineforge-data; validator workaround in place)
  • #17 Codegen: UDT with drawing-typed fields — read/write of omitted fields compile-fails (mixed UDT struct definition correctly filters drawing fields; field access not handled)

Sprint metadata

  • 7 implementation agents merged (A/B/C/E/F/G1/G2) — each in isolated git worktree, parallel execution
  • 6 PR-equivalent merges across 3 repos (engine + codegen + corpus)
  • Total commits: 30 engine, 14 codegen, 22 corpus, 3 utils
  • Zero engine regressions across full corpus sweep at each merge step
  • Sprint regression report: docs/pine_v6_sprint_regression_report.md
  • Coverage audit refresh: docs/pine_v6_coverage_detail.md

Compatibility

  • ABI: no breaking changes; new helpers added (pine_session_is*, pine_time_tradingday, _decompose_bar_time_chart_tz)
  • C ABI: no changes
  • Codegen output: backward-compatible — existing probes recompile and pass without modification

v0.4.0

12 May 20:56

Choose a tag to compare

v0.4.0

Changes since v0.2.0

  • chore(release): v0.4.0 (1cea344)
  • docs: refresh ctest count + run_strategy usage example (208f00b)
  • chore(corpus): bump submodule to 04fa445 (docs audit) (a7e12ae)
  • chore(corpus): bump submodule to 04b5d92 (regen generated.cpp) (bab96aa)
  • chore(corpus): bump submodule to 9162718 (refresh validation_report.md/.html) (aff729a)
  • chore(corpus): bump submodule to ff5695f (drop 3 expected_reject probes) (38c7f15)
  • chore(corpus): bump submodule to ff61c95 (1d426a7)
  • chore(corpus + tests): bump corpus submodule + add matrix-bool dispatch test (aa35a03)
  • fix(magnifier): fire wrong-side exits at entry + directional mintick rounding (abb4c5a)
  • fix(ta): RMA uses Pine reference formula and disable FP contraction (4d0a8e1)
  • test(orders): same-id stop replace ordering matrix (6261d20)
  • fix(orders): allow pre-window placements to fire on first compare bar (a0b00d5)
  • fix(engine): decouple set_chart_timezone from syminfo.timezone (#12) (1fdaeed)
  • fix(ci): add strategy_set_chart_timezone to PF_API expected set (1d0a13c)
  • fix(fills): OCA cancel sweep predicate gates on oca_name match (e5770ee)
  • fix(orders): per-leg avg_entry snap before next leg processes (FIFO PnL) (c139132)
  • chore(corpus): bump for lower-tf-03 message alignment (06d5ea0)
  • test(security): LTF script_tf upper bound matrix (0621534)
  • fix(security): reject LTF when req >= script_tf or script not divisible by req (21ce10e)
  • chore(corpus): bump for probe rewrites + new TV exports (0515e75)
  • feat(engine): strategy_set_chart_timezone() ABI for hour(time) etc. (f0717bf)
  • fix(fills): OCA cancel sweep gated on same name + full fill (53f4477)
  • fix(orders): deferred-flip carry consumed only when sibling fires from flat (f43dbae)
  • chore(corpus): bump for validation_overrides flags on reject + magnifier probes (d14f220)
  • test(magnifier): real-bar fill verification (0d3653f)
  • feat(magnifier): use real input bars as waypoints when input < script TF (b19a17d)
  • chore(corpus): bump for session-dst probe fix (f84c280)
  • test(oca): REDUCE proportional qty matrix (4327da5)
  • fix(oca): REDUCE reduces sibling qty by filled amount (was: full cancel) (12011cc)
  • chore(corpus): bump for typed-matrix-01 fix (9f996bb)
  • test(security): coverage matrix for LTF input-passthrough (7064af1)
  • feat(security): LTF use input bars when req >= input AND req < script_tf (f6cb431)
  • chore(corpus): bump submodule to 5b51f12 (1m OHLCV + warmup6m) (24e4bf6)
  • chore(corpus): bump submodule to f79ab18 (30 new probes + magnifier inputs.json) (def54ea)
  • test(security): TF validation matrix across HTF/LTF/same/invalid (d34a9a2)
  • fix(security): tighten TF validation for request.security[_lower_tf] (f35c424)
  • style(matrix): use numeric_limits over INT32_MAX (n4) (3ed7f8f)
  • docs(matrix): document bool spec duplication tech debt (n3) (f8a9f3d)
  • refactor(matrix): split new_ into init/no-init overloads (n1) (2347578)
  • test(matrix): Series ring-buffer + value semantics (m8) (66e6e53)
  • style(matrix): consistent static_assert message naming (m5) (adecaa3)
  • test(matrix): self-concat aliasing safety (m3) (1750517)
  • fix(matrix): bool sort compile-time reject for parity (m2) (53bb8e2)
  • fix(matrix): reject add_col on empty matrix (M5) (0ed8971)
  • fix(matrix): strong exception guarantee for column-mutating ops (M4) (ef33771)
  • fix(matrix): elements_count overflow guard (M2) (8ffc56c)
  • fix(matrix): reject negative dims in new_ (M1) (6daa133)
  • fix(matrix): validate insert/slice indices (B2) (f65c851)
  • fix(matrix): bounds-check every index op (B1) (f1bb924)
  • fix(matrix): static_assert default-constructible T in transpose/reshape (b7635e3)
  • fix(matrix): validate shape in PineGenericMatrix::concat (2179f8c)
  • chore(release): v0.3.0 — typed matrix support (6790e75)
  • docs(coverage): typed matrix support — promote from gap to supported (9297800)
  • feat(na): generic na() fallback for default-constructible T (60df0b6)
  • test(matrix): Series<PineGenericMatrix> history support (f1bf14d)
  • feat(matrix): bool specialization with vector<vector> storage (cb255b4)
  • test(matrix): UDT element coverage for PineGenericMatrix (3db0da3)
  • fix(matrix): add_row/add_col size validation + register test in TEST_SOURCES (faf68ca)
  • feat(matrix): elements_count + empty matrix edge cases (ee799a9)
  • feat(matrix): PineGenericMatrix sort with static_assert gating (925fb75)
  • feat(matrix): PineGenericMatrix reshape (with overflow check) + reverse (7adc330)
  • feat(matrix): PineGenericMatrix copy/submatrix/transpose/concat (eccde01)
  • feat(matrix): PineGenericMatrix remove_row/remove_col/swap_rows/swap_columns (6485e66)
  • feat(matrix): PineGenericMatrix add_row/add_col (5b95dad)
  • feat(matrix): PineGenericMatrix row/col/row_ref (SFINAE-disable row_ref for bool) (9921f47)
  • feat(matrix): PineGenericMatrix new_/get/set/fill/rows/columns (a256772)
  • feat(matrix): add PineGenericMatrix header skeleton (97c13d8)
  • docs(readme): split nav links into two rows (3e71a89)
  • docs(readme): use
    to force badge row line breaks (c11fb60)
  • docs(readme): split badge row into three logical lines (ce43e53)
  • docs(readme): add codegen playground link (1cd760d)
  • docs(readme): add MCP server section and free-tier CTA (c545586)
  • fix(ci): add strategy_get_last_error to expected PF_API runtime set (b2f747d)

Container image

docker pull ghcr.io/fullpass-4pass/pineforge-engine:0.4.0