Releases: pineforge-4pass/pineforge-engine
Releases · pineforge-4pass/pineforge-engine
v0.8.0
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
v0.7.0
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
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
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
v0.6.1
Performance & Optimizations
- Zero-Allocation Core: Integrated
DynamicRingBuffertemplate and refactoredSeriesto 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
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)
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 newpine_session_is*helpers insession_time.hpp+ per-bar state tracking - VWAP bands 3-tuple (Sprint B):
ta.vwap(src, anchor, stdev_mult)returning[vwap, upper, lower]via newVWAPBandsResultstruct + 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 (
trueforchart.is_standard,falsefor 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
tickeridvia newhelpers_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 emitting0(fields are NOT inSymInfostruct, contrary to prior audit); now correctlyna<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_timezoneoverride key ininputs.jsonschema; skipcorpus/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_orderscap-day boundary useschart_timezoneinstead of exchangesyminfo.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
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