Repository navigation
Another symbol's bars reach a run as a feed: kernel instrument feeds + Pine foreign request sites (XSYM-D) - #292
Merged
Merged
Conversation
… interval, and the Pine adapter's request sites of other symbols Kernel (ADR-0001 rule 3, opt-in). NativeRunSpec::instrument_feeds holds other instruments' own bars, keyed by (instrument, timeframe), each bar with its own close (close_ms) and optional named columns; a NativeSeriesSource::InstrumentFeed series names one. On each accepted input the series is handed, in feed order, every bar not yet handed over that has closed by the input's NativeInterval::last_traded_close_ms (lookahead off) or opened by its open_ms (lookahead on); gaps is the subscription contract's; bars before the first input ride on it. No calendar is guessed for the instrument; the chart side reads the input's calendar interval (resolved from the label on a raw-label partition, whose inputs carry no duration). With no feed installed every digest, delivery and run is what it was. Streams refuse a spec that installs one. Nine named refusals (NativeRunSpecError/Field, with C twins so the translation stays exhaustive); C has no route (1.0 boundary row). Adapter. register_security_eval(sec_id, symbol, tf, input_tf, lookahead_on, gaps_on, ignore_invalid_symbol) registers a site of another symbol; the host projects its installed feeds as the spec's instrument feeds, declares one InstrumentFeed series per site after its same-symbol sites (which keep their route), and runs the payload on every bar handed over in the requested context (history and TA over the context's bars, bar_index, time_close and syminfo.* the context's). gaps_on clears at the bar open, before the COOF checkpoint. An invalid symbol reads na under ignore_invalid_symbol and fails closed without it; a missing feed fails closed naming symbol and timeframe; an aggregated chart is refused. Recorded request series: key -> chart-bar open -> value, na where the tape has no row. C ABI: strategy_set_symbol_feed / _feed_column / strategy_set_symbol_facts / strategy_set_recorded_series, each behind its own PINEFORGE_HAS_*_V1 probe, reached through BacktestEngine virtuals whose kernel base answers false; a source host refuses stream_begin while any holds data, and check_c_abi_runtime.py pins that each declaration says so. Tests on synthetic bars only: test_native_instrument_feed (kernel, the report's pinned cases), test_native_instrument_feed_twin (kernel/adapter twin), test_symbol_request_data (C ABI, recorded series, stream refusal). Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
…INEFORGE_REQUESTS_ROOT The environment contract of workflow docs/xsym-requests.md: when PINEFORGE_REQUESTS_ROOT is set and <root>/<basename of the strategy dir>/ requests.json exists, the harness holds the manifest to pineforge-probe-requests/v1 (the refusals of the workflow's validateProbeRequests) and to this probe, verifies every file it names under the probe's own files/ against its sha256 (a feed against its byte count), parses the feeds (an empty or NaN volume or extra value is NaN), the recorded tapes and the symbol facts, and installs them through strategy_set_symbol_facts / _feed / _feed_column / strategy_set_recorded_series before the run. It reads nothing else: never another slug's directory, never the case-wide PINEFORGE_PINE_LIBRARIES. The run provenance records each feed's (key, sha, bars), each tape's (key, sha, rows) and the manifest's sha, as it does for the aux and native security feeds. A malformed manifest stops the run by name before any engine call; a library without the setters and the docker runner are refused. Unset, or no manifest for the probe: the engine is handed exactly what it always was. The frozen verifier names the probe's build directory BUILD / slug (pineforge-lab 3bac0b7b scripts/verify-engine-local.py:1695) and runs this script on it (:1593-1596, :1614-1617) through _run_timed (:190-193), whose subprocess.run passes no env=, so the runner's environment reaches it. Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
…nstrument-feed contract native-engine.md: the field list, the Limits paragraph and the stream-limits bullet state the new contract; a new section "Instrument feeds: another symbol's bars" gives the struct, the delivery rule, the validation table, the stream refusal and the Pine adapter's use (the symbol-key overload, the payload in the requested context, ignore_invalid_symbol, the fail-closed refusals, recorded request series, the run_strategy.py environment contract); the 1.0 C boundary table has the "instrument feeds" row its checker pins. ADR-0001: the rule-2 ruling row "Wave XSYM-D" (mechanism: another venue is driven by changing data only; knob: none -- lookahead and gaps are already the subscription's delivery rules), calibrated by XSYM-DESIGN's 203/203 merge pins and this lane's two witness reproductions; the HTF paragraph, the run-spec paragraph and the adapter's section name the new surface. mtf.md, coverage.md and README: the other-symbol surface, the recorded fundamentals store, the four C setters; the runtime export counts move 58 -> 62 (66 -> 70 declared, 109 -> 113 in total). Sentences this commit removes, each superseded by the contract it states: - ADR-0001 (5691220, lane L14-C): "request.security-style series are reachable from a bare host, as declared series of the run's own symbol" -- another symbol's bars are reachable now too, and the paragraph says so. - coverage.md (cc4a56e): "Runtime owns the security state machine, ratio / calendar aggregation, lookahead / gaps semantics, lower-TF emulation, and per-security diagnostics", "The runtime owns same-symbol security computation" and "Why not done yet: Most strategy logic in our test corpus relies on the chart symbol's bars + indicators" -- the request.security row and its section state the other-symbol surface instead. - coverage.md (9507d8f): "Would need a parallel data-ingestion path so the user can supply a CSV / Parquet of fundamentals", "Future story: Fundamentals and economic indicators would land as a generic auxiliary timeline feature" and "Fundamentals- and macro-driven strategies are a meaningful but smaller user segment" -- the recorded request series store and the pinned requests manifest are that ingestion path. Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
…'s four rows The rebase onto 1e360bd (INT27 with its round-2 fix) shifted cited lines: reanchor_doc_citations.py --ref 1e360bd plus check_doc_anchors.py --fix and four hand fixes bring every anchor back (1725/1725; the diff changes digits only). Floors, counted with ctest -N on the lane's tree under each ci_verify profile's cache definitions: kernel 292 registered, 291 run (+2: test_native_instrument_feed, test_run_strategy_requests; the WebSocket row still skips) release 720 (+4: the two above, test_native_instrument_feed_twin, test_symbol_request_data) debug/sanitizers/native registration 701/701/710 (+4 each) KERNEL_MIN_TESTS 289 -> 291, RELEASE_MIN_TESTS 716 -> 720, EXCLUDED_REGISTERED_MIN 697/697/706 -> 701/701/710; docs/ci.md and the floor citations follow. Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
…d); setters refuse a run in progress; the literal input_tf trap deleted An independent review of 1e360bd..80236d5a found, and this commit fixes: - The workflow keeps a request that was na on every chart bar as a tape with a header only (campaign/tv/xsym/decode.mjs keeps non-na rows), and pins it. strategy_set_recorded_series(key, ..., 0) erased the key, so the first read failed the run as "no recorded series is installed". n == 0 now installs a series without rows: every read is na. strategy_set_symbol_feed(..., 0) likewise installs a feed without bars, whose sites read na, instead of leaving the symbol unfed. - The four setters answer -1 while a run is in progress (a stream's warmup or realtime leg included), naming it: the source host's mutation guard is inert, so a mid-stream install changed what the run read and its digest. - strategy_set_symbol_feed_column judges the column name the kernel's way at install (a name that is not UTF-8 was accepted, then refused at begin). - register_security_eval(id, "SYM", "tf", "literal", bool[, bool]) bound the same-symbol overload (const char* -> bool outranks std::string) and read the symbol as the timeframe. That spelling is deleted; generated code passes input_tf_ (a std::string) and is unaffected. - run_strategy.py refuses by name a manifest the schema cannot walk (JSON nested past the recursion limit, a mintick past a double, an unreadable file) and a stamp an int64 cannot hold, which ctypes would wrap silently. - abi-stability.md records the four BacktestEngine virtuals added inside v19 (as N5 did inside v18); mtf.md and native-engine.md state the empty installs, the in-run refusal and that the generated clear_security() also clears a gaps_on payload's own history (a codegen limit). Tests: test_symbol_request_data 77 -> 119 checks (empty tape, empty feed, column name, in-run refusal, the deleted spelling as static_asserts); test_native_instrument_feed 10543 -> 12375 (a raw label outside the session reads the calendar's zero-traded slot); test_run_strategy_requests 13 -> 15. Fail-before on 80236d5a's headers and library: the static_asserts fail to compile; 15 runtime failures; the harness raises OverflowError. Sentences of 4076d7d this commit rewrites: mtf.md's and native-engine.md's "gaps_on reads na on a chart bar that received no new bar" now also states that the generated clear_security() resets the payload's own history, and mtf.md's "Historical runs only: a stream refuses an installed symbol feed" now also states the in-run refusal. Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
…etached-comments census 8 -> 0) The preflight's detached-comments stage (measure_detached_comments.py --check-ceiling, ceiling 0) counted the eight-line group comment above the four PINEFORGE_HAS_…_V1 probes as detached: a second block in the gap above the first probe's own doc. Its text now opens that doc, so the census of the kernel compile closure is 0 again; the lines keep their numbers. Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
| import math | ||
| import sys | ||
| import tempfile | ||
| import unittest |
| from pathlib import Path | ||
| from unittest import mock | ||
|
|
||
| import run_strategy as rs |
luisleo526
added a commit
that referenced
this pull request
Sep 29, 2026
…GINE) (#300) Audit of every README and doc page of pineforge-engine against engine main 35db01c and the live measurement; each change names its source. What was wrong, and the source of the truth: - Parity numbers were the retired 4,190-probe round-39 era (badges, hero, scoreboard, lane table, contributing-llm.md, design/progress pages). Now the active baseline pineforge-parity-baseline-20260929-engine-35db01c8 (snapshot sha256 47cec517..., population cf857209...): 8,006 probes, 7,989 graded = 7,905 excellent + 84 strong, 17 TradingView-side anomalies excluded, 18 lanes, 2,759,431 TradingView trades (population tvTradeRows / 2). The "2.8M matched" count has no source in the snapshot and is gone. Public corpus: 311 excellent + 1 declared anomaly (scripts/check_corpus_parity.sh pinned headline; parity step of the XAU-CAL lane job on this tree), and anomaly-equity-mirror-strategy-equity-01 is that anomaly (it does not match trade-for-trade on the pinned corpus). - Versions: no 1.0.0, 0.14.0 or rc tag exists (git tag; gh release list). CHANGELOG's "## 1.0.0" becomes "## Unreleased" and lists #292-#298, which it lacked (squash messages 7f807b9..35db01c); "34 more" PF_API is 39. README Releases: v0.13.1 entry added, v0.13.0 line corrected, the merged live/abi-v4 "Unreleased" line and the 1.0.0 line replaced. Pages that framed 1.0 as shipped now say planned. - Front door 1 could not run: pineforge-codegen has no CLI (0.10.4 or main), PyPI 0.10.4 output does not compile against main (cc log), a plain -lpineforge link drops the runtime C ABI (run_strategy.py refuses it), and run_strategy.py needs --ohlcv/--no-trim-output without the corpus. The new block ran end to end from a clean clone (14 trades on the tutorial feed). - Prerequisites: floating-point std::to_chars (src/str_utils.cpp:55) needs GCC 11 / libc++ 14; ctest --test-dir needs CMake 3.20; examples need -DPINEFORGE_BUILD_EXAMPLES=ON; the install also ships libpineforge_kernel.a. - MCP section: the image, hosted server and npm package run engine 0.13.1 + codegen 0.10.4 (pineforge-release v0.1.25 notes); hosted server and npm package descriptions corrected from their live/ published sources. - Benchmarks: every number reproduces (check_provenance 163/163); framing fixed (commit and method named, PineTS has had strategy.* since 0.9.17), recipes state their prerequisites, two wrong failing-gate cells fixed, personal host name scrubbed from 14 Google Benchmark JSONs with the manifest sha256 values updated (origin_sha256 keeps the measured file). - Reference pages: native-engine.md, pine-to-native.md, coverage.md, pine_v6_coverage_detail.md, the contract pages, ci.md and the design notes described removed members and pre-#253/#254 behaviour, stale counts (src 48 -> 53 .cpp, 66 -> 70 indicator classes, 43/33/10 -> 46/35/11 NativeRunSpec fields, floors 786/298 -> 790/300), wrong anchors, drawings as absent, and transpiler status of an old codegen (now "on codegen main, not in a release yet" where it differs from v0.10.4). - Hygiene: internal host names, personal paths, private-repo references and campaign tool names marked or removed; the banner image's stale "V0.8.0 / 245/246 / 0 engine bugs" strip removed; a dead pineforge-workflow-live link replaced by the public pineforge-live repo. - Two orphan pages, docs/cheatsheet-runtime-and-execution.md and docs/tv-parity-probe-spec.md, were wrong in their load-bearing claims (17 removed engine members, pointvalue/FX/slippage claims) and nothing linked them: deleted. - Sample outputs were stale: every page and the tutorial README printed the tutorial MACD as 49 trades / -190.85; since 650b0cb (in v0.13.1) the report counts the range-end close, and every harness prints 50 / +569.97 (runs on a clean clone of this branch). examples-python-sweep.md's 10000 capital could not pay for its 1-BTC order (every combo 0 trades): 100000, output re-measured. examples-multi.md output format matches multi.py; the magnifier A/B page shows today's run. The report fields script_tf_ratio and needs_aggregation print their contract values again on this base (FIX-E1E2, #299; tutorial/run_mtf.py Table A: ratio 1/1/4/16, agg 0/0/1/1), so the pages state them as plain facts. - Doxygen: `file:line` in four pages autolinked to a dead "file:line" URL; spelled `path:line` now. Build: 0 warnings. Review fixes (REVIEW-DOCS-ENGINE-final.md, verdict MERGE-WITH-FIXES, of the first version of this change, 79bd84c1 + 6cb01aa0): its five P2 findings with the reviewer's fix text, and every P3 row but the last. P2 1. docs/pages/metrics.md: a timestamped FX curve no longer fails closed for a leveraged position across a rate change; that position takes the broker-open margin checkpoint at the step bar's open (tests/test_affordability_fx.cpp:152-154, :781). 2. docs/pages/report-schema.md: the #254 caveat sat inside the table, so the bar_magnifier_enabled row rendered as text; it now follows the table. 3. CONTRIBUTING.md, docs/pages/getting-started.md: compiler minimums are the ones README.md states (floating-point std::to_chars, src/str_utils.cpp:55: libstdc++ from GCC 11, libc++ 14, macOS 13.3; g++-9 and g++-10 fail). 4. docker/README.md: the sample is the published image's run (50 trades, 17/33, +569.97, trade 1 entering 1777488300000). 5. docs/pages/mtf.md: expected Table A says main prints 0 in ratio and agg? until the #254 regression is fixed. P3 - configuration.md, CHANGELOG.md, coverage.md: v5 scripts do not "keep" host defaults (both codegens refuse //@Version=5); code from an earlier codegen and a hand-built PineStrategyConfig do. - streaming.md: "Every strategy_stream_* call above" (create/free return no status). - examples-multi.md: a module also exports std::piecewise_construct. - integration-cmake.md: EXACT 0.13.1 also matches a git-checkout build of main; the ABI promise starts "From 1.0.0". - ffi-python.md, tutorial-macd.md: the mirror covers the report structs, not every struct (ffi-python.md:15-17). - configuration.md: tracing costs one branch per traced call when disabled (report-schema.md:180), not zero. - benchmarks/results/raw/README.md: "Two edits were made" (host_name was rewritten in every Google Benchmark file); benchmarks/README.md: the maintainer fetch runs with the campaign environment sourced. Wording only. - AGENTS.md: the configure line exports compile commands, which the receipt check needs; AGENTS.md and docs/ci.md: promote-baseline.yml is installed from the campaign copy, not unchanged (31 lines differ). - docs/ci.md: the debug profile also skips the twin-parity guard (TWIN_PARITY_PROFILES). - mtf.md, timeframes.md: "reported for an engine fix" dropped (no public issue). - native-feature-parity.md: the C API "landed on main", not "shipped". - tutorial/README.md: Table B's script_tf_ratio prints 0 on main until the #254 regression is fixed. Not changed here: benchmarks/results/summary.md and trade_comparison.md keep the first version's text (hand edits of generated output; fixing the generator, benchmarks/compare.py:361 and scripts/verify_corpus.py:1403, is an engine-lane follow-up). No benchmark number or results file changes beyond the raw/README.md and benchmarks/README.md wording above: BENCH-REFRESH is re-measuring the benchmark. Rebased onto 4dc496d (FIX-E1E2, #299), squashed to one commit. docs/ci.md states the new floors: PR registration 773 (debug, sanitizers) and 782 (native), full-run release 792 and kernel 300 (scripts/ci_verify.py:320, :594, :638). The one rebase conflict, a native-refactor-progress.md row, keeps main's re-anchored lines and this change's host-name removal. Sentences this commit deletes or rewrites past recognition, named by the commit that introduced them (scripts/check_doc_reverts.py): - a4ab775 (docs: source-verified runtime-overrides + order-execution cheatsheet): cheatsheet-runtime-and-execution.md (142) - 480fd19 (Production-readiness probes + engine state-reset / finite-fill fixes (): tv-parity-probe-spec.md (61) - 28ad088 (docs: add Part 3 (cross-cutting behaviors) to engine cheatsheet): cheatsheet-runtime-and-execution.md (60) - a8f84b9 (docs(api): OpenCV-style C ABI reference site + CF Pages deploy): abi-stability.md (21), tutorial-macd.md (3), examples-magnifier.md (2), examples-multi.md (2), getting-started.md (2), index.md (2), report-schema.md (2), examples-rust.md (1), ffi-python.md (1), install.md (1), lifecycle.md (1) - cc4a56e (docs: add Pine v6 runtime coverage report (docs/coverage.md)): coverage.md (37) - 24dcc53 (docs: reconcile Pine v6 audit + coverage docs with the 2026-06-10 audi): pine_v6_coverage_detail.md (29) - d093560 (INT26: wave H, the late picks and the corpus re-pin to b40aa8e (1.0.0-): native-refactor-progress.md (13), install.md (3), pine-to-native.md (2), CONTRIBUTING.md (1) - 73817c1 (Lower generated Pine execution onto the native kernel and retire the l): cheatsheet-runtime-and-execution.md (8), README.md (3), tv-parity-probe-spec.md (2), reservation-expansion-candidate.md (1) - b1fbf0b (docs: detailed Pine v6 coverage report (per-identifier audit)): pine_v6_coverage_detail.md (14) - 622d653 (docs(README): rewrite for the round-11 engine — brand-first, OSS-first): README.md (12) - 46b2ced (docs: ABI v4 live surface; cheatsheet corrections (trail_price is read): cheatsheet-runtime-and-execution.md (7), README.md (3), live-surface.md (2) - c45cf5a (refactor: move retained-parent priority into Pine compatibility): README.md (7), pine-order-priority-boundary.md (4) - c1084ff (docs: record round 39 fractional price admission parity): README.md (10) - f268342 (feat: add historical account FX lifecycle (#125)): cheatsheet-runtime-and-execution.md (10) - af4c688 (Document realtime streaming lifecycle): cheatsheet-runtime-and-execution.md (5), coverage.md (3), examples-python-sweep.md (1), tutorial-macd.md (1) - 9507d8f (refactor(corpus): pull equity-mirror into corpus/parity-anomalies/): coverage.md (10) - 76482e6 (fix(runtime): align TA coverage and corpus replay): coverage.md (9) - cc0b22d (Refactor reservation growth and Pine market instruction ownership): fill-model.md (7), frozen-market-instruction.md (2) - d5a5eaf (Align lifecycle and admission documentation with final v11 model): market-admission.md (9) - a6b0b70 (docs(audit): exhaustive Pine v6 coverage audit — 38 critical, ~62 mino): pine_v6_audit_master.md (7) - 1e360bd (INT27: wave I -- magnifier on TradingView's intrabars, recalculation f): cheatsheet-runtime-and-execution.md (5), magnifier.md (1) - 1dd5430 (Add the native feature-parity design: gaps, kernel-vs-adapter rulings,): design/native-feature-parity.md (6) - 74491fa (INT28: wave-J engine integration (TVDEF-DROPS, W3/W3B/W4/W5/W6/W6B/W8,): cheatsheet-runtime-and-execution.md (4), README.md (1) - 7ad5d38 (docs: refresh parity scoreboard through round 23): README.md (5) - 7f807b9 (Another symbol's bars reach a run as a feed: kernel instrument feeds +): coverage.md (4), mtf.md (1) - 3b13183 (Refactor order admission and trigger lifecycle into generic submodels): exit-leg-lifecycle-reflection.md (5) - e244d65 (docs(coverage): update pine_v6_coverage_detail.md for post-sprint stat): pine_v6_coverage_detail.md (5) - f864be5 (refactor: isolate Pine cap policy from native order state): cheatsheet-runtime-and-execution.md (2), pine-intraday-cap-boundary.md (2) - e7cdf05 (Add native execution terms: host-resolved sizing, exact reversal, prec): abi-stability.md (2), native-engine.md (2) - b4dd9a3 (docs(mtf): add multi-timeframe tutorial + Doxygen page): mtf.md (4) - 5c2be9d (docs: record round 38 whole-lot budget parity results): README.md (3) - 6bfe983 (docs: align round 39 lane table and diagnostic evidence): README.md (3) - 471a113 (Docs: the README carries the 200-strategy refresh -- tiers per engine ): README.md (3) - 8df08f2 (fix(engine): make dead strategy.close semantically inert (#143)): cheatsheet-runtime-and-execution.md (3) - d3cca9e (Docs: correct migration semantics and harden publication guards): cheatsheet-runtime-and-execution.md (2), pine-to-native.md (1) - 52f4dde (Preserve complete mirror context and earlier standalone ABI controls): fill-model.md (3) - 4fb9db3 (Docs: CONTRIBUTING.md rewritten for someone who has never seen this re): CONTRIBUTING.md (2) - 2ab2bfb (docs(README): round-11 closed-test results and a full factual refresh): README.md (2) - 0501468 (docs: task-13 fix round 1 — v4 report mirrors (schema, Rust), probe-su): README.md (1), cheatsheet-runtime-and-execution.md (1) - cfbe677 (Docs: the session flags end a session where TradingView ends it (R5 la): cheatsheet-runtime-and-execution.md (2) - 6aa1d13 (runtime: wire syminfo.pointvalue through all money paths; hold ScopedT): coverage.md (2) - 8b7965a (Docs: onboarding written for the contributor who is a language model (): contributing-llm.md (2) - 16f3652 (Docs: the two site front doors re-derived against HEAD (R5 lane L14-B,): index.md (2) - 04b0588 (Add native resolved execution settlement and preserve paid entry costs): metrics.md (2) - 149f77c (Replace seven pending-order flags with quantity and event facts): quantity-intent.md (2) - 962960b (Session flags match TradingView on multi-window and extended-hours cha): pine_v6_coverage_detail.md (2) - 5215291 (Merge branch 'round5/bar-indexed-extremes-ring' into round5/candidate): pine_v6_coverage_detail.md (2) - b1b27f0 (Initial commit: PineForge runtime v0.1.0): CONTRIBUTING.md (1) - bfdbe96 (docs: refresh parity scoreboard through round 24): README.md (1) - cda51d5 (Record the round 35 parity scoreboard and raw trade gains): README.md (1) - 0d76a09 (Wave G: no ordinary quantity request stops a run, cancelled exits stay): adr/0001-kernel-adapter-boundary.md (1) - 0983770 (Unify remaining fill paths under native settlement (#247)): ci.md (1) - 50339d0 (Docs: the §1 inventory carries its closure markers, and a gate keeps t): design/native-feature-parity.md (1) - 8b3b481 (docs+fix: org rename to pineforge-4pass; AI capability-gap note in REA): examples-multi.md (1) - c28c2db (Derive placement state from original admission observations): fill-model.md (1) - 208f00b (docs: refresh ctest count + run_strategy usage example): install.md (1) - 0c174d9 (Docs: the arm options, the adoption table and the grid re-lowering wai): native-engine.md (1) - 4b05b62 (Adapter re-lowering: the TradingView margin call runs through the kern): native-engine.md (1) - 8e558eb (Say what the per-bar broker hash is for, where its API is documented (): native-engine.md (1) - 5f3299d (Build the standalone native execution path (#243)): native-engine.md (1) - b18f75e (Native sizing bases and fractional reduces (R5 lane L3)): native-engine.md (1) - 0ef00da (The pages say a working row tells an absent arm from an arm at 0.0 (R5): native-engine.md (1) - 7328f4d (Docs: the migration page is a complete map, and a gate holds it comple): pine-to-native.md (1) - ce64f06 (docs(audit): update Pine v6 master audit — mark 20 resolved critical i): pine_v6_audit_master.md (1) - a19f5a8 (docs: repoint codegen references to pineforge-codegen-oss; purge old f): pine_v6_audit_master.md (1) - 2db58d9 (runtime: reconcile per-trade MFE/MAE with TV excursion semantics; gate): pine_v6_audit_master.md (1) Co-authored-by: Claude Opus 5.5 (1M context) <[email protected]>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Another symbol's bars reach a run as a feed (XSYM-D)
A strategy that reads
request.securityon a symbol other than its chart can now run against that symbol's own bars. Before this, only the run's own symbol was addressable, so these scripts were refused.Kernel
NativeRunSpec::instrument_feeds(NativeInstrumentFeed {instrument, tf, bars, close_ms, columns}) and a new series sourceInstrumentFeedkeyed by (instrument, timeframe).stream_beginrefuses a spec that has instrument feeds.Pine adapter
bar_index,time_closeandsyminfo.*belong to the other symbol.ignore_invalid_symbolturns an invalid symbol into na.C ABI and harness
PINEFORGE_HAS_…_V1probe:strategy_set_symbol_feed,strategy_set_symbol_feed_column,strategy_set_symbol_facts,strategy_set_recorded_series. They refuse while a run is in progress.run_strategy.pyinstalls a probe's pinned request data fromPINEFORGE_REQUESTS_ROOT, sha256-verified, and records it in the run provenance. With the variable unset, nothing changes.BacktestEnginevirtuals are added inside the current C++ ABI epoch;abi-stability.mdrecords that objects compiled against an earlier v19 header must be rebuilt.PF_ABI_VERSIONis unchanged.Verification
test_native_instrument_feed: 12,375 checks;test_native_instrument_feed_twin, the kernel/adapter twin: 353 checks;test_symbol_request_data: 119 checks.The population parity sweep of this exact tree is posted as
pineforge/parity.🤖 Generated with Claude Code
https://claude.ai/code/session_01LifAW9e5J6gFx7gatuxETE