Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
20810dd
test(cr150): pin L6a sink wire format before implementation
luisleo526 Oct 18, 2026
998f83f
feat(cr150): add dependency-free streaming SHA-256 for L6a
luisleo526 Oct 18, 2026
5e3e8e5
feat(cr150): implement isolated P00 report sink writer
luisleo526 Oct 18, 2026
2a7ec1d
feat(cr150): add strict streaming report sink reference reader
luisleo526 Oct 18, 2026
44b48bd
test(cr150): isolate the L6a reader proof from host settings
luisleo526 Oct 18, 2026
f397d88
fix(cr150): wire L6a sink sources and format unit into CMake
luisleo526 Oct 18, 2026
d8f78e0
test(report-sink): add L6B1 real-module red contract
luisleo526 Oct 18, 2026
a26f1e2
feat(report-sink): wire L6B1 fill-time sink and receipt
luisleo526 Oct 18, 2026
f00151f
refactor(report-sink): keep policy probe with runtime capabilities
luisleo526 Oct 18, 2026
969ce19
fix(report-sink): complete failure-code artifacts and ownership
luisleo526 Oct 18, 2026
102db33
docs(report-sink): refresh run anchors and ABI inventories
luisleo526 Oct 18, 2026
f8a7a85
merge: bring L6B1 onto CR-150 L15a and L8a integration
luisleo526 Oct 18, 2026
075648f
fix(report-sink): exercise an actual selected carry-in refusal
luisleo526 Oct 18, 2026
52b414b
Merge refs/heads/pf/cr150-p00-contracts into core/cr150-l6b1
luisleo526 Oct 18, 2026
ffe8022
docs: restore API release sentence from 4c78f39
luisleo526 Oct 18, 2026
53caf1a
Merge refs/heads/pf/cr150-p00-contracts into core/cr150-l6b1
luisleo526 Oct 18, 2026
f8ecc06
test(report-sink): include the carry-in range-end row
luisleo526 Oct 18, 2026
d5ec96c
Merge refs/heads/pf/cr150-p00-contracts into core/cr150-l6b1 (CR150-C…
luisleo526 Oct 19, 2026
ff66be1
Merge refs/heads/pf/cr150-p00-contracts into core/cr150-l6b1 (m8)
luisleo526 Oct 19, 2026
b595ce5
build(cr150): relocate L6B1 registrations for m8
luisleo526 Oct 19, 2026
6d0540f
Merge refs/heads/pf/cr150-p00-contracts into core/cr150-l6b1 (m14)
luisleo526 Oct 19, 2026
da0d434
build(cr150): retain the stable L6B1 fence on CMKD2 (m14)
luisleo526 Oct 19, 2026
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
10 changes: 5 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ The separate PineForge compiler, [`pineforge-codegen`](https://github.com/pinefo
- **Open runtime.** The engine and native live runner are Apache-2.0. The separately distributed [PineForge compiler](https://github.com/pineforge-4pass/pineforge-codegen-oss/blob/main/LICENSE) is source-available under the PineForge Source License 1.2 from its release 1.3.0 (release 1.2.0 keeps the PineForge Source License 1.1, and releases up to 1.1.0 keep the PolyForm Noncommercial terms they shipped with); personal trading is free, and commercial use requires a separate license; the capital in an account a proprietary-trading firm or funded-trader program provides or allocates, including a challenge, evaluation or simulated account, is investment capital. Public reference strategies, benchmarks and validation tooling are available in their respective repositories; the community-script test set is not redistributed.
- **Fast.** In-process, no interpreter: median **36× faster than PyneCore** on the 200 strategies both engines time (100 corpus probes and 100 held-out private strategies), measured at engine `35db01c8` on 2026-09-29 on an AWS c7a.8xlarge with PyneCore timed as a subprocess, its interpreter start-up included (PineForge runs a median 807k bars/s per strategy over its 201 slots with the bar magnifier on; [method](benchmarks/results/speed.md)). Parameter sweeps re-run a loaded `.so` with new inputs — no recompile, no fork.
- **Deterministic to the bit.** Two runs with the same inputs produce identical trade lists. Same on Linux and macOS.
- **Yours to embed.** 145 `PF_API` declarations across five installed headers — `pineforge.h`'s 94 (74 of the 80 runtime exports, the other six being declared in `execution_observer.h` and `selected_window.h`, three each, and up to 20 per-strategy functions a generated module defines), `native_c_api.h`'s 43 native-host declarations and `selected_window_plan.h`'s two planner declarations — an ABI that is append-only within a major version from 1.0 on. Call it from C, Python, Rust, Go, Node, Julia — or let an AI agent drive it over MCP.
- **Yours to embed.** 148 `PF_API` declarations across six installed headers — `pineforge.h`'s 94 (74 of the 83 runtime exports, the other nine being declared in `execution_observer.h`, `selected_window.h` and `report_sink.h`, three each, and up to 20 per-strategy functions a generated module defines), `native_c_api.h`'s 43 native-host declarations and `selected_window_plan.h`'s two planner declarations — an ABI that is append-only within a major version from 1.0 on. Call it from C, Python, Rust, Go, Node, Julia — or let an AI agent drive it over MCP.

Recorded outputs and their additional API declarations described here are
part of **1.5.0**.
Expand Down Expand Up @@ -519,11 +519,11 @@ is in [CHANGELOG.md](CHANGELOG.md).

The counts below include recorded outputs and describe the released 1.5.0 API.

A newly generated strategy `.so` exposes 96 compiled-strategy `PF_API` declarations
(80 runtime implementations plus sixteen generated exports) plus 43 native-host
declarations: 139 `PF_API` exports in total; `use_bar_magnifier = true` adds
A newly generated strategy `.so` exposes 99 compiled-strategy `PF_API` declarations
(83 runtime implementations plus sixteen generated exports) plus 43 native-host
declarations: 142 `PF_API` exports in total; `use_bar_magnifier = true` adds
`strategy_declares_bar_magnifier` and a module that records [outputs](docs/outputs.md) its
three outputs exports, bringing the inventories to at most 100 and 143. Older modules lack the six opt-in
three outputs exports, bringing the inventories to at most 103 and 146. Older modules lack the six opt-in
[checked-settings exports](docs/checked-settings.md). Older modules can also lack
the two opt-in [execution-capability exports](docs/strategy-capabilities.md).
In an optimized build `nm -gU` also shows libc++'s
Expand Down
18 changes: 16 additions & 2 deletions docker/run_failure_codes.json
Original file line number Diff line number Diff line change
Expand Up @@ -931,6 +931,18 @@
"retryable": false,
"since": "1.5.0"
},
"report_sink_failed": {
"args": {},
"class": "resource",
"description": "The engine could not create or write the report sink. The run has no completed sink or valid trailer.",
"english": [
"report sink open failed",
"report sink write failed",
"report sink write made no progress"
],
"retryable": false,
"since": "1.7.0"
},
"request_symbol_invalid": {
"args": {},
"class": "strategy",
Expand Down Expand Up @@ -1057,7 +1069,8 @@
"stream_monthly_input",
"stream_fx_curve_input",
"fx_series_calc_on_order_fills",
"fx_series_bar_magnifier"
"fx_series_bar_magnifier",
"stream_report_sink"
]
}
},
Expand All @@ -1073,7 +1086,8 @@
"request.security symbol feeds and recorded request series support historical runs only",
"timestamped account-currency FX does not support calc_on_order_fills",
"timestamped account-currency FX is not supported by streaming",
"timestamped account-currency FX is not supported with bar magnifier"
"timestamped account-currency FX is not supported with bar magnifier",
"report sink does not support streaming"
],
"retryable": false,
"since": "1.4.0"
Expand Down
90 changes: 87 additions & 3 deletions docker/run_failure_codes_diff.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,15 +8,99 @@
"to": {
"version": null,
"unreleased": true,
"catalogSha256": "7d61bad51f1f624a83fe90abb64646758c89f6e23c099e52167f9f1c11994d26"
"catalogSha256": "5c3bf3c9e0cc53c9ef83e64b70488bb9d15c7e286bbf4bba0d1242f6bb416074"
},
"catalogSchema": {
"before": "pineforge-run-failure-catalog/v1",
"after": "pineforge-run-failure-catalog/v1"
},
"metadataChanges": [],
"added": [],
"changed": [],
"added": [
{
"code": "report_sink_failed",
"collection": "codes",
"entry": {
"args": {},
"class": "resource",
"description": "The engine could not create or write the report sink. The run has no completed sink or valid trailer.",
"english": [
"report sink open failed",
"report sink write failed",
"report sink write made no progress"
],
"retryable": false,
"since": "1.7.0"
}
}
],
"changed": [
{
"code": "run_mode_unsupported",
"collection": "codes",
"fields": [
{
"path": "args.feature.values",
"beforePresent": true,
"afterPresent": true,
"before": [
"stream_native_security_feed",
"stream_symbol_feeds",
"stream_calc_on_order_fills",
"stream_probe_overrides",
"stream_account_currency_fx",
"stream_instrument_feeds",
"stream_monthly_input",
"stream_fx_curve_input",
"fx_series_calc_on_order_fills",
"fx_series_bar_magnifier"
],
"after": [
"stream_native_security_feed",
"stream_symbol_feeds",
"stream_calc_on_order_fills",
"stream_probe_overrides",
"stream_account_currency_fx",
"stream_instrument_feeds",
"stream_monthly_input",
"stream_fx_curve_input",
"fx_series_calc_on_order_fills",
"fx_series_bar_magnifier",
"stream_report_sink"
]
},
{
"path": "english",
"beforePresent": true,
"afterPresent": true,
"before": [
"a declared native FX curve requires confirmed-bar stream input",
"native instrument feeds are not supported by streaming",
"native request.security feed supports historical runs only",
"native stream cannot use historical probe/tail overrides",
"native stream refuses monthly input",
"native stream requires close-only calculation; calc_on_order_fills is unsupported",
"request.security symbol feeds and recorded request series support historical runs only",
"timestamped account-currency FX does not support calc_on_order_fills",
"timestamped account-currency FX is not supported by streaming",
"timestamped account-currency FX is not supported with bar magnifier"
],
"after": [
"a declared native FX curve requires confirmed-bar stream input",
"native instrument feeds are not supported by streaming",
"native request.security feed supports historical runs only",
"native stream cannot use historical probe/tail overrides",
"native stream refuses monthly input",
"native stream requires close-only calculation; calc_on_order_fills is unsupported",
"request.security symbol feeds and recorded request series support historical runs only",
"timestamped account-currency FX does not support calc_on_order_fills",
"timestamped account-currency FX is not supported by streaming",
"timestamped account-currency FX is not supported with bar magnifier",
"report sink does not support streaming"
]
}
]
}
],
"removed": [],
"deprecated": []
}
2 changes: 1 addition & 1 deletion docs/adr/0001-kernel-adapter-boundary.md
Original file line number Diff line number Diff line change
Expand Up @@ -423,7 +423,7 @@ citations, 264 are in `src/source/` and its headers; 6 sit in kernel files
(`float_band_eq` `ta_compare_band.hpp:38`), the TV-named fields of the frozen
`pf_pending_order_v1_t` mirror, and the lot-flag pair above.
- **The C API trades.** Two disjoint runtime inventories, both pinned.
`src/c_abi.cpp` implements the **80** codegen-facing runtime `PF_API` symbols that
`src/c_abi.cpp` implements the **83** codegen-facing runtime `PF_API` symbols that
`scripts/check_c_abi_runtime.py` pins by name, and `src/native_c_host.cpp` implements the
**43** additive symbols of `<pineforge/native_c_api.h>`. A C host creates a host from a
callback table (`strategy_native_host_create_v1` `native_c_api.h:2682`), runs a batch
Expand Down
4 changes: 2 additions & 2 deletions docs/coverage.md
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@
## Public C ABI

`<pineforge/pineforge.h>` is the **single canonical consumer header**. It has
exactly 94 public `PF_API` declarations: 74 of the 80 runtime implementations (the other six are declared in `execution_observer.h` and `selected_window.h`) and twenty
exactly 94 public `PF_API` declarations: 74 of the 83 runtime implementations (the other nine are declared in `execution_observer.h`, `selected_window.h` and `report_sink.h`) and twenty
per-strategy generated exports. Every compiled PineForge strategy `.so` exports
that public set, except that `strategy_declares_bar_magnifier` is exported only
by a script that declares `use_bar_magnifier = true` and the three [outputs](outputs.md) exports only by a module that records outputs; older modules lack the six
Expand Down Expand Up @@ -132,7 +132,7 @@ single `.hpp`):

| Module | Header | Source | Pine-facing role |
| ------------------ | ------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Public C ABI | `pineforge.h` | `c_abi.cpp` (+ layout `static_assert`s) | 94 public `PF_API` declarations: 74 of the 80 runtime implementations plus twenty per-strategy generated exports. `strategy_configure_native_fx_curve_v1` stages the additive native FX curve. |
| Public C ABI | `pineforge.h` | `c_abi.cpp` (+ layout `static_assert`s) | 94 public `PF_API` declarations: 74 of the 83 runtime implementations plus twenty per-strategy generated exports. `strategy_configure_native_fx_curve_v1` stages the additive native FX curve. |
| Engine | `engine.hpp` | `engine_run.cpp`, `engine_stream.cpp`, `engine_execution.cpp`, `engine_orders.cpp`, `engine_path_resolve.cpp`, `engine_trade_accessors.cpp`, `engine_security.cpp`, `engine_lower_tf.cpp`, `engine_report.cpp`, `native_execution_consumer.cpp` | One-shot and continuous lifecycle, native request matching/settlement, orders, reports, inputs / syminfo, magnifier, TF aggregation, and `request.security` plumbing. |
| Engine internals | `engine_internal.hpp` | (private cross-TU header) | `pineforge::internal::*` types and helpers shared between engine `.cpp` partitions; not part of the public ABI. |
| Technical analysis | `ta.hpp` | `ta_moving_averages.cpp`, `ta_oscillators.cpp`, `ta_volatility_trend.cpp`, `ta_extremes_volume.cpp`, `ta_misc.cpp` | Official `ta.*` functions and series variables backed by stateful runtime classes with `compute` / `recompute`, plus `pivot_point_levels(...)` free function. |
Expand Down
Loading
Loading