Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
83 commits
Select commit Hold shift + click to select a range
bc866e5
H-MEASURE: measure the margin retentions against the kernel and Tradi…
luisleo526 Sep 25, 2026
e1d0fa3
H-MEASURE: tape the pyramiding count, the sibling stop and pending-en…
luisleo526 Sep 25, 2026
37090e1
H-MEASURE: measure excursions, short-seed swaps, the dust sweep, isma…
luisleo526 Sep 25, 2026
8312ea2
H-MEASURE: F1(e) tape row, F1's magnified residual, request.security …
luisleo526 Sep 25, 2026
e051053
H-MEASURE: the G1 acid composite as a C++/C witness row
luisleo526 Sep 25, 2026
6c5f746
H-MEASURE: H12 mutation battery; the PR parity subset covers what the…
luisleo526 Sep 25, 2026
3262e77
H-MEASURE: put N12's seeded corpus experiment on the tree
luisleo526 Sep 25, 2026
f6a8608
H-MEASURE: the ctest floors count the lane's rows -- release 672 -> 6…
luisleo526 Sep 25, 2026
c36d63d
Gates: the residual gate rules a text by its exact words and reads Pi…
luisleo526 Sep 25, 2026
e8c3394
Gates: a published sentence leaves only when its commit names it -- t…
luisleo526 Sep 25, 2026
cca5c1d
Gates: a content pin accompanies a claim, never replaces it; a comma-…
luisleo526 Sep 25, 2026
33de340
Gates: the doc lint reads native-*/v<n>, the ABI numbers, VERSION and…
luisleo526 Sep 25, 2026
e7dfe7c
Tests: one random draw per statement at the fifteen sites the compile…
luisleo526 Sep 25, 2026
e7907d6
Tests: the runtime blocks' LIFO check gets a death row, and the chart…
luisleo526 Sep 25, 2026
daae552
Docs: the deferred-performance inventory, the witness drift and the n…
luisleo526 Sep 25, 2026
c5c611a
Docs+Gates: every kernel seam and every kernel member the source laye…
luisleo526 Sep 25, 2026
a8e6184
Docs+Gates: the 1.0 C boundary -- every C++ capability the C surface …
luisleo526 Sep 25, 2026
15dcae3
Gates: a sanitizer build's quoted type name is judged as the name, an…
luisleo526 Sep 25, 2026
f767380
Kernel+C: the four deprecated public spellings are removed for 1.0 (l…
luisleo526 Sep 25, 2026
4af4a9a
Build: a release-candidate VERSION configures, builds and installs, a…
luisleo526 Sep 25, 2026
2b826f9
Release: release.yml takes an exact override, a dry run and release c…
luisleo526 Sep 25, 2026
ed57b3b
Docs: the public contract for 1.0 (lane REL10, item 2)
luisleo526 Sep 25, 2026
81782d1
CHANGELOG.md: the 1.0.0 entry (lane REL10, item 5)
luisleo526 Sep 25, 2026
87928a9
Kernel: a group's receipts follow its drain's queue order, so a re-pr…
luisleo526 Sep 25, 2026
55d3a61
Docs: pf_native_state_v1::failure_discriminator says what the runtime…
luisleo526 Sep 25, 2026
b364b85
Kernel: a pending total a request's units absorb takes none, so the r…
luisleo526 Sep 25, 2026
a6e6a00
Adapter: a pending entry's trailing exit starts its running best at t…
luisleo526 Sep 25, 2026
2922ade
Adapter: a process_orders_on_close add stays under the pyramiding cap…
luisleo526 Sep 25, 2026
e1d7a98
Adapter: a process_orders_on_close stop entry its placing close alrea…
luisleo526 Sep 25, 2026
16938b5
Host: an aggregated magnified run dates every fill at its chart bar's…
luisleo526 Sep 25, 2026
1518fa8
PAR-ORDERS v19 hash re-pin
luisleo526 Sep 25, 2026
7c47d88
Kernel: a current execution refuses a request bound to a host roster …
luisleo526 Sep 26, 2026
d826405
Tests: TradingView's trades for an exit a calc_on_order_fills recalcu…
luisleo526 Sep 26, 2026
d8c69f3
Adapter: a recalculation's market order at the matcher's fill on a ba…
luisleo526 Sep 26, 2026
0766a97
Adapter: a strategy.close a recalculation calls at the matcher's fill…
luisleo526 Sep 26, 2026
e4d3cd8
Adapter: a process_orders_on_close stop entry placed while the book h…
luisleo526 Sep 26, 2026
48832b6
PAR-ORDERS-2: the trades and transcripts its fixes move, pinned (INT2…
luisleo526 Sep 26, 2026
03d250f
Adapter: a leveraged opening is margin-checked on its own entry bar (…
luisleo526 Sep 26, 2026
7b94176
Adapter: a default-percent stop entry above 100 % keeps its frozen un…
luisleo526 Sep 25, 2026
ed2abe4
Kernel + adapter: the margin model is checked at each sample of a con…
luisleo526 Sep 25, 2026
23e5a17
PAR-MARGIN: the ctest floors count the lane's rows -- release 678 -> …
luisleo526 Sep 26, 2026
3fd07f7
Kernel: a post-fill margin check faces the waypoint its fill was reac…
luisleo526 Sep 26, 2026
4d25e69
Adapter: a leveraged fill is margin-checked on its own bar under POOC…
luisleo526 Sep 26, 2026
ce71fcc
Adapter: the intrabar margin check under POOC and COOF and on a full-…
luisleo526 Sep 26, 2026
449ed4f
Adapter: a margin call books the nearest tick of the print it fired a…
luisleo526 Sep 26, 2026
fd68f43
tests: a timing leg under the minimum grows instead of failing the ro…
luisleo526 Sep 26, 2026
44e01cd
tests: time every live-state scaling workload's two sizes in turn (R5…
luisleo526 Sep 26, 2026
95888a7
INT26 merge: three sentences the merged tree made stale
luisleo526 Sep 26, 2026
9c7bfc0
INT26 (i): promote-baseline is the campaign's own workflow, installed…
luisleo526 Sep 26, 2026
f2756d6
INT26 (iii): the public contract's C boundary is H-DOCGATES' table
luisleo526 Sep 26, 2026
cb1f4ff
INT26 (v): the install pages name the image that is published
luisleo526 Sep 26, 2026
5a209ac
INT26 (vi): the C ABI guard is named by its stage, source-guard-c-abi
luisleo526 Sep 26, 2026
1c43698
INT26 (viii): clang-compiled consumer TUs get -fbracket-depth=1024
luisleo526 Sep 26, 2026
d1e4b5a
INT26 (iv): the ctest floors are the integrated tree's own counts
luisleo526 Sep 26, 2026
a3b4b97
Kernel: session-day facts on a UTC calendar resolve no calendar inter…
luisleo526 Sep 26, 2026
debbd7f
Tests: the UTC session-day witness fits the PR set's thresholds and r…
luisleo526 Sep 26, 2026
8986620
INT26 (ii): the 1.0.0 entry says what waves G and H change for a user
luisleo526 Sep 26, 2026
e3fa009
INT26 merge: the acid composite's C port records every magnified marg…
luisleo526 Sep 26, 2026
326d3d5
Run the heavy CI jobs on larger runners; fork pull requests stay on s…
luisleo526 Sep 25, 2026
9061e98
Size CI time limits to the runners each job can land on
luisleo526 Sep 25, 2026
a81dfff
Close the runner contract's gaps a fork's pull request could slip thr…
luisleo526 Sep 25, 2026
eb594e8
Size preflight from verifier-tests' measured standard-runner time
luisleo526 Sep 25, 2026
1797a35
Trust only named events for the larger runners, and read every runner…
luisleo526 Sep 26, 2026
219e5e1
Trust a pull request's head only for a pull_request event
luisleo526 Sep 26, 2026
45dd63b
Count core-count flags per job, and exempt only release.yml by name
luisleo526 Sep 26, 2026
86dd067
Source: strategy.margin_liquidation_price asks the kernel's native_li…
luisleo526 Sep 25, 2026
0afaa48
Kernel: one civil-date helper -- native_calendar::native_civil_date /…
luisleo526 Sep 25, 2026
7ed4aea
v19 hash step (R5 lane H-THIN): the Pine host leaves lot excursions t…
luisleo526 Sep 25, 2026
6ccbfe4
Source: the pre-open margin slice sizes through source_margin_units (…
luisleo526 Sep 25, 2026
900f8ed
Kernel: a public aggregation query -- native_calendar::pairing_aggreg…
luisleo526 Sep 26, 2026
67758f4
Source: the exit-reservation and POOC FIFO close epsilons are the sha…
luisleo526 Sep 26, 2026
ffeff2c
Docs: the adapter's duplicates of kernel capabilities after R5 lane H…
luisleo526 Sep 26, 2026
9f169bd
Floors: release 678 -> 686 and the excluded registrations +8 for the …
luisleo526 Sep 26, 2026
cb04792
INT26 merge: H-THIN's C++-only kernel additions in the 1.0 C boundary…
luisleo526 Sep 26, 2026
42e8975
v19 hash step (PAR-CASHFEE): a percent-of-equity default quantity und…
luisleo526 Sep 26, 2026
d23f20f
Docs: a percent-of-equity quantity under a cash commission after R5 l…
luisleo526 Sep 26, 2026
85cf79b
Floors: release 686 -> 687 and the excluded registrations +1 for R5 l…
luisleo526 Sep 26, 2026
5881528
Re-pin the validation corpus to the codegen a4259656 regeneration a7a…
luisleo526 Sep 26, 2026
82445f2
Re-pin the validation corpus to b40aa8e: owned_strategies.json re-der…
luisleo526 Sep 26, 2026
af177bc
INT26 (ii): the 1.0.0 entry adds what the late picks change for a user
luisleo526 Sep 26, 2026
7549d4d
INT26 v19 hash re-pin
luisleo526 Sep 26, 2026
ebe6748
INT26 (vii): every doc anchor re-anchored once, on the integrated tree
luisleo526 Sep 26, 2026
10f386f
Adapter: a terminal receipt read at the next open cancels only the si…
luisleo526 Sep 26, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
52 changes: 41 additions & 11 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,22 @@ env:
CCACHE_COMPRESS: "1"
CCACHE_MAXSIZE: 500M

# The heavy jobs run on the organization's 16-core larger runner, and the macOS
# legs on GitHub's M2 runner for the macos-26 image, for a push, the schedule, a
# dispatch and a pull request from a branch of this repository. A larger runner
# bills the organization even for a public repository, so every other event --
# a fork's pull request above all -- runs on the free standard runner.
# Each verification sizes its parallelism to the runner that took it.
# scripts/ci_preflight.py pins every runner, time limit and job count, and
# docs/ci.md gives each limit's measured basis.
jobs:
preflight:
runs-on: ubuntu-24.04
timeout-minutes: 10
runs-on: ${{ (github.event_name == 'push' || github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' || (github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name == github.repository)) && 'pf-linux-x64-16' || 'ubuntu-24.04' }}
# Its verifier-tests stage is one serial process: 475 s at 0d76a099's tree
# on the maintainers' verification hosts, which ran it 1.93-1.95 times as
# fast as the standard runner on the same trees, so about 15 min here. Ten
# minutes cancelled main's run at 0d76a099 593 s into it.
timeout-minutes: 45
steps:
- uses: actions/checkout@v4
with:
Expand Down Expand Up @@ -67,14 +79,27 @@ jobs:
if-no-files-found: warn

build:
timeout-minutes: 45
# Each leg keeps its name, build (<image>, <type>), whatever the matrix carries.
name: build (${{ matrix.os }}, ${{ matrix.build_type }})
# A full-set leg waits on the test_ci_verify CTest row, 976-1288 s on the
# standard runners at 0d76a099, which more cores do not shorten. There the
# Release legs, which a fork's pull request runs in full, took 30.3 and
# 32.0 min, and the macOS Debug leg 37.0 min.
timeout-minutes: 75
strategy:
fail-fast: false
matrix:
os: [ubuntu-24.04, macos-26]
build_type: [Release, Debug]
include:
- os: ubuntu-24.04
larger_runner: pf-linux-x64-16
- os: macos-26
larger_runner: macos-26-xlarge

runs-on: ${{ matrix.os }}
# matrix.os is the standard runner a fork's pull request gets; its
# larger_runner runs the same image with more cores.
runs-on: ${{ (github.event_name == 'push' || github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' || (github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name == github.repository)) && matrix.larger_runner || matrix.os }}

steps:
- uses: actions/checkout@v4
Expand Down Expand Up @@ -121,7 +146,7 @@ jobs:
# ratio -- for a runner whose CPU accounting is unusable; record the
# measured reason here and in docs/ci.md before setting it.
PINEFORGE_RUNTIME_BUDGET_CANDIDATE_ONLY: '0'
run: python3 scripts/ci_verify.py ${{ matrix.build_type == 'Release' && 'release' || 'debug' }} --build-dir build --jobs 4 --ccache ${{ github.event_name == 'pull_request' && matrix.build_type == 'Debug' && '--exclude-label slow' || '' }}
run: python3 scripts/ci_verify.py ${{ matrix.build_type == 'Release' && 'release' || 'debug' }} --build-dir build --jobs "$(getconf _NPROCESSORS_ONLN)" --ccache ${{ github.event_name == 'pull_request' && matrix.build_type == 'Debug' && '--exclude-label slow' || '' }}

- name: Stage and summarize diagnostics
if: always()
Expand All @@ -142,9 +167,11 @@ jobs:
# instrumentation propagates into every test binary (CMakeLists.txt option
# PINEFORGE_ENABLE_SANITIZERS).
sanitizers:
runs-on: ubuntu-24.04
runs-on: ${{ (github.event_name == 'push' || github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' || (github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name == github.repository)) && 'pf-linux-x64-16' || 'ubuntu-24.04' }}
# A full run (push to main, manual dispatch) gives its CTest stage an hour
# after a build of about 30 minutes; the PR set keeps its 30-minute stage.
# after the build; the PR set keeps its 30-minute stage, after about 30
# minutes of build and ABI providers on the standard runner a fork's pull
# request gets.
timeout-minutes: 120
env:
ASAN_OPTIONS: detect_leaks=1:halt_on_error=1:abort_on_error=1
Expand Down Expand Up @@ -173,7 +200,7 @@ jobs:
ccache-${{ runner.os }}-${{ runner.arch }}-sanitizers-

- name: Verify (sanitizers)
run: python3 scripts/ci_verify.py sanitizers --build-dir build-asan --jobs 4 --ccache ${{ github.event_name == 'pull_request' && '--exclude-label slow' || '' }}
run: python3 scripts/ci_verify.py sanitizers --build-dir build-asan --jobs "$(getconf _NPROCESSORS_ONLN)" --ccache ${{ github.event_name == 'pull_request' && '--exclude-label slow' || '' }}

- name: Stage and summarize diagnostics
if: always()
Expand All @@ -194,8 +221,10 @@ jobs:
# modules are built from the kernel alone, and every examples/native host
# runs as an example_* row asserting both its exit code and its summary line.
kernel-only:
runs-on: ubuntu-24.04
timeout-minutes: 45
runs-on: ${{ (github.event_name == 'push' || github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' || (github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name == github.repository)) && 'pf-linux-x64-16' || 'ubuntu-24.04' }}
# 22.3 min on the standard runner at 0d76a099, where a fork's pull request
# still runs the whole kernel set.
timeout-minutes: 60
steps:
- uses: actions/checkout@v4
with:
Expand All @@ -220,7 +249,7 @@ jobs:
ccache-${{ runner.os }}-${{ runner.arch }}-kernel-

- name: Verify (kernel)
run: python3 scripts/ci_verify.py kernel --build-dir build-kernel --jobs 4 --ccache
run: python3 scripts/ci_verify.py kernel --build-dir build-kernel --jobs "$(getconf _NPROCESSORS_ONLN)" --ccache

- name: Stage and summarize diagnostics
if: always()
Expand Down Expand Up @@ -255,6 +284,7 @@ jobs:
name: build
needs: [preflight, build, sanitizers, native-live, kernel-only, corpus-parity-subset]
if: always()
# A few seconds of shell: the standard runner, for every event.
runs-on: ubuntu-24.04
timeout-minutes: 5
steps:
Expand Down
36 changes: 21 additions & 15 deletions .github/workflows/corpus-parity.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,17 +17,17 @@ name: Corpus parity
# the runtime and all 312 corpus strategies build in ~105 s at JOBS=8, and then
# the run phase -- which run_corpus.sh executes serially, one ctypes process per
# probe over a 221861-bar feed -- took 1792 s, with 94 s more to judge the
# result. The dominant term is single-core serial work, which a 4-vCPU hosted
# runner runs slower rather than faster, so the whole population cannot be held
# to the ~25 min a required pull-request check is budgeted for. It therefore
# runs nightly and on demand, plus on any pull request that touches the pin or
# the parity tooling itself.
# result. The dominant term is single-core serial work, which a runner's extra
# cores do not shorten, so the whole population cannot be held to the ~25 min
# a required pull-request check is budgeted for. It therefore runs nightly and
# on demand, plus on any pull request that touches the pin or the parity
# tooling itself.
#
# PR EARLY SIGNAL. The `corpus-parity-subset` job below
# re-runs the 30 probes scripts/corpus_parity_subset.txt names -- in parallel,
# re-runs the 54 probes scripts/corpus_parity_subset.txt names -- in parallel,
# they write into disjoint directories -- and judges them against the same
# pinned sha256 rows the nightly uses. Measured on the same laptop at JOBS=8,
# under sibling load: derive 2 s, build the runtime + the 30 strategy .so 68 s
# under sibling load, when the list held its first 30 probes: derive 2 s, build the runtime + the 30 strategy .so 68 s
# from clean, run 45 s wall for 80 s of probe CPU, judge <1 s; 94 s end to end
# over an up-to-date build directory, under 3 min cold.
# .github/workflows/ci.yml calls it as a reusable workflow and includes it in
Expand Down Expand Up @@ -80,12 +80,19 @@ env:
# pin is almost entirely cache hits.
CCACHE_MAXSIZE: 2G

# Both jobs run on the organization's 16-core larger runner for a push, the
# schedule, a dispatch and a pull request from a branch of this repository;
# every other event, a fork's pull request above all (this workflow's own or
# CI's: in a workflow_call the github context is the caller's), runs on the
# free standard runner. The build uses every core of the runner that took the
# job. scripts/ci_preflight.py pins the runners and limits.
jobs:
# The whole population. Nightly, on demand, and on a pull request that
# touches the pin or the parity tooling. Never reached by `mode: subset`.
corpus-parity:
if: inputs.mode != 'subset'
runs-on: ubuntu-24.04
runs-on: ${{ (github.event_name == 'push' || github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' || (github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name == github.repository)) && 'pf-linux-x64-16' || 'ubuntu-24.04' }}
# 16.3-26.2 min on the standard runner a fork's pull request still gets.
timeout-minutes: 120
steps:
- uses: actions/checkout@v4
Expand Down Expand Up @@ -129,9 +136,8 @@ jobs:
shell: bash
env:
BUILD_DIR: build-corpus-parity
JOBS: "4"
CMAKE_CXX_COMPILER_LAUNCHER: ccache
run: ./scripts/check_corpus_parity.sh
run: JOBS="$(getconf _NPROCESSORS_ONLN)" ./scripts/check_corpus_parity.sh

- name: Collect the drifted trades
if: failure()
Expand All @@ -156,11 +162,12 @@ jobs:
path: corpus-parity-diagnostics/
if-no-files-found: warn

# The advisory PR subset: the 30 probes scripts/corpus_parity_subset.txt
# The advisory PR subset: the 54 probes scripts/corpus_parity_subset.txt
# names, judged against the same pinned sha256 rows. Reached through CI.
corpus-parity-subset:
if: inputs.mode == 'subset'
runs-on: ubuntu-24.04
runs-on: ${{ (github.event_name == 'push' || github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' || (github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name == github.repository)) && 'pf-linux-x64-16' || 'ubuntu-24.04' }}
# 1.8-4.7 min on the standard runner.
timeout-minutes: 30
steps:
# Credentials stay persisted, exactly as the nightly job above: the
Expand Down Expand Up @@ -218,7 +225,7 @@ jobs:
# A restored cache is not evidence. Every LFS pointer the corpus commits
# under data/ records its content's sha256; check the bytes on disk
# against it, so a corrupt or stale cache is "the feed is wrong" here and
# not "30 probes drifted" three steps later.
# not "54 probes drifted" three steps later.
- name: Verify the chart feed against its Git-LFS pointers
shell: bash
run: |
Expand All @@ -245,9 +252,8 @@ jobs:
shell: bash
env:
BUILD_DIR: build-corpus-parity-subset
JOBS: "4"
CMAKE_CXX_COMPILER_LAUNCHER: ccache
run: ./scripts/check_corpus_parity.sh --subset
run: JOBS="$(getconf _NPROCESSORS_ONLN)" ./scripts/check_corpus_parity.sh --subset

- name: Collect the drifted trades
if: failure()
Expand Down
13 changes: 10 additions & 3 deletions .github/workflows/native-live.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,17 @@ env:
CURL_VERSION: "8.14.1"
CURL_SHA256: "f4619a1e2474c4bbfedc88a7c2191209c8334b48fa1f4e53fd584cc12e9120dd"

# The organization's 16-core larger runner for a push, the schedule, a
# dispatch and a pull request from a branch of this repository; every other
# event, a fork's pull request above all, runs on the free standard runner. In
# a workflow_call the github context is the caller's, so a fork's pull request
# through CI lands there too. scripts/ci_preflight.py pins the runner and limit.
jobs:
native-live:
runs-on: ubuntu-24.04
timeout-minutes: 45
runs-on: ${{ (github.event_name == 'push' || github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' || (github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name == github.repository)) && 'pf-linux-x64-16' || 'ubuntu-24.04' }}
# The full set waits on the test_ci_verify CTest row, 1034 s on the
# standard runner at 0d76a099, which more cores do not shorten.
timeout-minutes: 60
steps:
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262
with:
Expand Down Expand Up @@ -105,7 +112,7 @@ jobs:
cmake --install curl-build 2>&1 | tee curl-install.log

- name: Verify native live
run: python3 scripts/ci_verify.py native --build-dir build-live --jobs 4 --generator Ninja --curl-dir "${{ github.workspace }}/build-native-deps/curl-install/lib/cmake/CURL" --ccache --require-websocket ${{ inputs.exclude_slow && '--exclude-label slow' || '' }}
run: python3 scripts/ci_verify.py native --build-dir build-live --jobs "$(getconf _NPROCESSORS_ONLN)" --generator Ninja --curl-dir "${{ github.workspace }}/build-native-deps/curl-install/lib/cmake/CURL" --ccache --require-websocket ${{ inputs.exclude_slow && '--exclude-label slow' || '' }}

- name: Stage and summarize diagnostics
if: always()
Expand Down
Loading
Loading