Releases: pineforge-4pass/pineforge-engine
Releases · pineforge-4pass/pineforge-engine
v0.9.0
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