Pass PINEFORGE_SYMBOL_FEEDS to the harness as --symbol-feeds - #23
Merged
Merged
Conversation
The entrypoint forwards PINEFORGE_SYMBOL_FEEDS, the JSON index of other symbols' bars for request.security on another symbol, to run_json.py's --symbol-feeds (pineforge-engine harness, from engine 1.1.0). This file is not synced from the engine, so without the line an image would ignore the variable. The README documents it: a knobs-table row and an "Other symbols' bars" section (exact-string keys, one feed per requested timeframe in the engine's spelling, nothing aggregated, the missing-feed and refusal errors, limits, the applied_runtime record). Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
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.
What
The entrypoint passes
PINEFORGE_SYMBOL_FEEDSto the harness as--symbol-feeds, one line indocker/entrypoint.sh, and the README documents the variable (a row in the knobs table and an Other symbols' bars section).PINEFORGE_SYMBOL_FEEDSnames a JSON index of other symbols' bars, for scripts that callrequest.securityon another symbol:{"symbols": {"BINANCE:ETHUSDT": {"syminfo": {...catalog object...}, "feeds": {"240": "ethusdt-240.csv", "1D": "ethusdt-1D.csv"}}}}Without those bars such a run stops with exit 4 (
request.security(...) at line N: no data is pinned for this request, and its value was read). Every image up to 1.0.1 has that limit.Why here
docker/run_json.pyis vendored from the engine tag (scripts/sync-harness.sh), butdocker/entrypoint.shis this repo's own file and is not synced. The harness flag lands in pineforge-4pass/pineforge-engine#327. Without this line, an image built from engine 1.1.0 would still ignore the variable.Merge order: the engine PR first, then cut engine 1.1.0. This line then reaches the 1.1.0 image when the release syncs
run_json.pyfrom that tag. With the variable unset nothing changes. With it set on an image whoserun_json.pypredates the flag, argparse rejects--symbol-feedsand the run exits 4. That's why the README says "from 1.1.0".The change keeps clear of #21's hunks. That PR adds a
PINEFORGE_SYMINFOblock to the entrypoint header, rewrites thePINEFORGE_SYMINFOcomment line and appends a README section at the end. A trialgit merge-treeof #21's head with this branch is clean in both orders.E2E: PASSED on this head 3475b0c with engine #327 head 6cc82475
AWS spot box (c6a.2xlarge, ap-southeast-1). The image was built from this branch's
docker/Dockerfile(engine 1.0.1 static library + codegen 1.0.1, the latest releases) withdocker/run_json.pytaken from the engine PR head, the waysync-harness.shtakes it from a tag. A second image was built frommainwith engine main'srun_json.py:sf-pr(this branch + engine #327'srun_json.py)b4082f47…(this branch), run_json.pyafaa6952…(#327)feeds(PINEFORGE_SYMBOL_FEEDS=symbols.json)check_case.pyCASE PASSED (recorded rows, independent reference model, feed hashes)no_feeds/bare_key/no_daily/sol_input"4h"--symbol-feeds: a timeframe is whole minutes ...linesf-main(main + engine main'srun_json.py) with the variable setsf-prmincontract, 27 without /null/ no syminfo: PASSED ×4sf-prvssf-mainelapsed_secondszeroed) for the four qty-step runs, digestsb9e00cb9…/e4315ec2…, theno_feedserror line, and a qty-step run with{"symbols": {}}set🤖 Generated with Claude Code