Skip to content

Build sanitizer shards from their selected CTest producers - #785

Merged
luisleo526 merged 101 commits into
mainfrom
sanitizer-selected-build-cfd0a3d9
Nov 8, 2026
Merged

luisleo526 merged 101 commits into
mainfrom
sanitizer-selected-build-cfd0a3d9

Conversation

@luisleo526

Copy link
Copy Markdown
Collaborator

Building every sanitizer test binary on every shard exhausted the hosted runner disk before its selected tests could finish. Build the producers and prerequisites of the selected CTest rows, then verify unchanged inventories, required outputs and actual result names. Keep the existing shard count, exclusions, execution floors and release checks.

The verifier also reports sampled filesystem usage without adding a gate. Regression coverage includes real Makefiles and Ninja projects, static archives, install inputs, escaped outputs, missing producers and result accounting.

Diagnostic ci-post run42419673056 on f232555 passed all eight regular sanitizer shards and live-ASAN. The overall run failed verifier-unit fixtures that the follow-up commits correct; it is not final-head CI success. Displayed disk space after verification:

Shard Free Used Filesystem size
1/8 81G 64G 145G
2/8 84G 61G 145G
3/8 81G 64G 145G
4/8 81G 64G 145G
5/8 82G 63G 145G
6/8 84G 61G 145G
7/8 84G 61G 145G
8/8 85G 60G 145G

These are df -h displayed units after verification, not continuous peaks. The independent five-second trace records a worst regular sampled minimum of 86,465,515,520 bytes and a live-ASAN minimum of 98,452,574,208 bytes on that diagnostic head.

Validation of final head cfd0a3d: hosted all-tier CI is running in ci-post run 42433767461; this description is updated with its result when it ends.

🤖 Generated with Claude Code

luisleo526 and others added 30 commits November 1, 2026 22:29
…it text, byte-exact

The report sink carries no entry comment and replaces invalid text, and the bounded text interface of the trade source had no production provider, so the text a strategy attaches to its orders could not be read back from the engine side. This adds a read-only adapter over the trade ledger and the engine report that implements the bounded, offset-based text reads of the trade source, and a separate opt-in companion output (runner option --trade-text) that writes one record per trade bound to the run and to the row, carrying entry id, exit id, entry comment and exit comment, with a closing record that carries the count and a digest. The sink format is untouched and a run without the option prints the same bytes as before. Invalid UTF-8 follows the sink's rule. No size cap is added. Documented in the report channel design page and the changelog.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
A bounded drawing arena replaces its whole state with a deep copy on every
create, delete and setter, whether or not a checkpoint shares it, so a script
that moves a few of its live drawings per bar pays O(bound) per call and the
first write after each checkpoint pays it again. The unbound arena already
shares blocks of 32 records between copies and clones only the blocks a write
reaches; this is the bounded twin of test_coof_drawing_checkpoint_cost.

The test fills an arena to its bound (100 and 1,000), then runs the scheduler's
checkpoint sequence (snapshot, restore, execute, commit) around an execution
that deletes the oldest label, creates one, moves three and changes one text,
all with texts that are never inline so a record copy allocates. Per execution
it checks that the arena shares all but a few blocks of records with its
checkpoint (the same record object through both) and that the heap blocks
allocated do not depend on the bound, that the arena equals a plain model of
the same operations after every execution, and that checkpointing an unwritten
arena allocates the same at both bounds.

The cost row is the row the change that follows must turn from red to green;
the model row and the unchanged-checkpoint row are the guards that change has
to keep green.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
A bounded arena replaced its whole state with a deep copy on every create,
delete and setter: every slot, the text of every label, the directory and the
order, whether or not a script-state checkpoint still shared it. A script that
moves a few of its live drawings on every bar therefore paid time proportional
to the bound on every call, and the first write after each checkpoint paid it
again.

The slots now live in a DrawingRecordStore, the block store the unbound arena
already uses: blocks of 32 that a copy of the state shares, one path copied per
write that reaches a shared block. A copy of the state shares the blocks and
copies only the directory and the order (an integer per occupant), the
directory with room for every slot so a creation never reallocates it.
Creation, deletion and every setter give the arena a state of its own when a
checkpoint shares it, then change it in place. Each does every step that can
allocate or throw (the state's copy, the copy of the slot's block, the
directory's room, the order's growth) before its first change and only steps
that cannot throw after it, so a refused allocation leaves the arena and its
checkpoint as they were. The search for the lowest free slot starts at a
recorded index below which every slot is occupied, so slot reuse order is
unchanged and a creation no longer scans every slot.

The bound, the typed overflow outcome, the stale-handle behaviour and every
value a script reads are unchanged.

The source allocation-bound gate (ci/cr150-source-bounds.yaml) pins every
growable-container site of include/pineforge/**, so its reviewed site
inventory moves with this change: the two groups for the removed whole-state
copies are deleted and the OPEN ceiling drops by two; the groups for the slots
(a block store filled by push_back), the directory and the state's allocation
gain the new site identities. The inventory is the gate's own proposal for this
tree; its differences from the previous one are exactly those sites. The
gate's real-tree test pins the number of OPEN groups, so that pin moves by the
same two.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
Main moved to the hosted verification jobs and their documentation since this
branch was cut. No file of this change is touched by those commits and no
conflict arises.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
… lines

A bounded drawing arena's edits and checkpoints do no per-record work in the
bound: they copy only the blocks of 32 records they write. They do not cost
O(changes): the first write after a checkpoint still copies the slot directory
and the creation order (one 8-byte integer per occupant), and deleting the
oldest drawing moves the directory's entries. The test header and the
CHANGELOG now say so, and the test's function is renamed to match.

The source allocation-bound manifest keeps its line fields as diagnostics. The
entries of drawing.hpp that the change moved (U1665, U1669, U1670, U1671,
U1672) carry the first line the gate finds for them again. No identity changes.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
The CHANGELOG entry and the cost test header of the bounded drawing change said
that the first write after a checkpoint copies "one 8-byte integer per
occupant". The slot directory holds two 32-bit integers per occupant (the id and
the slot) and the creation order one 32-bit integer, so both now say "a
directory entry and an order index per occupant". Words only: no code, no
assertion and no manifest line changes.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
Main moved by one commit since the previous merge: the hosted sanitizer builds
get a dedicated data disk (two workflow files). No file of this change is
touched by it and no conflict arises.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
Assert open and closed short accessors preserve direction from a real fill.
Report signed quantities for open and closed short trades while preserving long,
flat and bounds behavior.
The signed trade-size accessor fix intentionally removes two obsolete public statements from docs/pages/pine-to-native.md. The sentence introduced by 7328f4d is wrong after the fix because Pine's size accessor carries direction in its sign; the sentence introduced by cced2aa is the same obsolete unsigned/raw-quantity description. The replacement rows state positive long and negative short and distinguish raw magnitude fields with is_long.

Name 7328f4d and cced2aa so the doc-reverts guard can verify why those historical sentences were removed.
The accessor bodies already return signed quantities; keep each expression on one source line so the existing documentation citations remain bound to the same header and implementation lines. This preserves the exact signed-size tree behavior while removing the anchor shift.
…n moved its lines

The bounded drawing checkpoint test adds one source, test_drawing_bound_checkpoint_cost, to the TEST_SOURCES list near the top of tests/CMakeLists.txt, which moves every later line of that file by one. The evidence row for test_pooc_close_fill_view_tapes cites five of those lines: the line the sweep re-reads (3459, now 3460) and four in its reason text (:3443, :3455, :3479 and :3485-3501, now :3444, :3456, :3480 and :3486-3502). test_private_fixture_reads failed with "the token no longer sits on tests/CMakeLists.txt:3459", and test_private_fixture_reads_controls failed with it.

Only those five numbers change; the row's text is otherwise as it was. Each new line was read from the file: 3444 is the EXISTS test of a tape, 3456 the increment of _pf_pcv_emitted, 3460 the condition that is the row's token, 3480 the registration of the test, 3486 the registration of the skipped placeholder.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
Use GCC minimal debug information for instrumented Debug profiles while
retaining file and line data, sanitizer flags and the full test selection.
Keep the definition below the cited profile-floor table so existing
documentation anchors remain valid.

This is a measurement step: it lowers debug info only. The pass condition
is at least 20 GB free after Verify on the worst hosted sanitizer shard.
If that margin is not reached, each shard will build only its own targets
next.
Update the margin-call twin assertion digest and register the pyramiding
partial-drain signed-size rewrite in the twin parity inventory. Recompute the
inventory hash so the guard covers both intentional assertion changes.
Build and select the existing ABI layout probe alongside the eleven existing
fast executables. Update the derived membership pin, preserve prior checks,
and exercise removal of the actual ABI row through the real workflow checker.

Documentation replacement: the sentence "names its eleven real executables;
configure refuses" now names twelve executables and explains the existing
probe's Linux x86_64 GNU libstdc++ applicability.
The ABI smoke explanation adds two documentation lines. Correct both exact
line-count expectations from 2060 to 2062 while retaining all substantive
runner, slow-inventory and same-size negative checks.
Accept live_drawings through the existing typed limit helper and publish
its English template, preserving the code identity, since value and prior
limit values. Regenerate the registry and catalog diff and exercise distinct
operator maxima through the real helper contract.
Bring the merged hosted release workflow and its CI documentation and
checks into the candidate without rewriting the existing commits.
Bring the merged hosted release workflow and its CI documentation and
checks into the candidate without rewriting the existing commits.
The merge gate now requires pineforge/parity and treats pineforge/verify
as advisory, so the promotion workflow skipped every engine merge whose
head carried no verify status. Admit on pineforge/parity success alone;
a failed or absent parity still skips.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Retain the ABI smoke selector and its tests alongside the current engine changes.
Retain the runtime limit catalog addition alongside the current engine changes.
Takes in main since 0027d8e (89 commits). The two conflicts were additive: the runner usage text now lists both `--report-jsonl=delta-v2` and `--trade-text`, and the changelog keeps main's entries before the trade text entry. No other file of the companion channel overlaps a main change except runner/CMakeLists.txt and runner/README.md, which merged without conflict.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
…site manifest, doc anchors

The merge with main left four checks of the trade text companion failing.

- test_trade_text_default_bytes took PINEFORGE_VERSION_FULL as the expected
  engine field. The report sink writes PINEFORGE_VERSION_STRING
  (MAJOR.MINOR.PATCH), and the full value gains a describe suffix on a tagged
  checkout, so the row only passed where describe was unavailable. It now takes
  PINEFORGE_VERSION_MMP, which is the value the sink writes in every
  configuration.
- The allocation-bound manifest gets five unreviewed groups for the companion's
  source accessor and writer, its unreviewed ceiling goes from 1407 to 1412, the
  gate test pins 1356 + 56 + 184 open groups, and the site inventory gains the
  eleven concrete sites. No existing inventory record changes.
- The runner's test block moves to the end of runner/CMakeLists.txt so the design
  doc lines that cite that file stay valid, and one main.cpp anchor follows the
  usage text lines to 344.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
Require the complete parity-only head predicate while preserving main-copy,
latest-status, pagination, tree, authorization and credential-order checks.
Add Bash and jq status decisions and workflow mutation controls.
Normalize enclosing parentheses around the exact parity-success expression.
Reject compound and malformed predicates, and cover parity-only, verify-only,
combined-status and missing-status cases plus expression wrapping controls.
Point seven documentation citations at the matching catalog fields after the vocabulary additions shifted their lines.
luisleo526 and others added 11 commits November 8, 2026 08:34
…tion

Brings the head of the pull request that registers the rerun controller tests
in the preflight plan into the branch that adds the corpus validation job
variant. The two changes meet in one place: the stage inventory test of the
preflight plan pins how many checks the plan holds (the whole plan, the fast
tier, and the fast tier on the platforms that skip the prebuilt checks). The
corpus change adds four checks and the rerun change adds one, so each of the
three expectations is the sum of both additions: 71, 66 and 64. Every other
hunk combines without a conflict, and no other line is edited by hand.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
… branch

Plain merge of the source head into the combined branch; nothing was resolved by hand. The source head already contains main (755e665). It makes the preflight admit split release builds and retained smoke output, pins the identities of the split dispatch and of the legacy workflow fixtures, adds credential-withdrawal controls, and requires repository-bound uploads and main-only OIDC callers.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
…combined branch

Plain merge of the source head into the combined branch; nothing was resolved by hand. The source head already contains main (755e665). It registers the rerun-controller test module as a fast-preflight stage (run rerun-controller tests in fast preflight), updates the stage-plan assertions, and removes the documentation row that described these tests as local-only.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
Plain merge of the source head into the combined branch; nothing was resolved by hand. The source head is the trade text companion branch merged with main (63f3978), where the two arithmetic conflicts of the source allocation-bound gate (the ceiling and the pinned total) were resolved on the source branch itself. It adds the opt-in trade text option of the live runner.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
… into the combined branch

Plain merge of the source head into the combined branch; nothing was resolved by hand. The source head already contains main (755e665). It computes the simple moving average from a correctly rounded window sum, with tests that check the rounded window means, and records the new window container sites in the allocation-bound inventory.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
163abf5) into the combined branch

Plain merge of the source head into the combined branch; nothing was resolved by hand. The source head already contains main (755e665). It adds an end-to-end regression for the map pair limit, driven through the ordinary command line over a committed generated strategy library in seven cases, registers it as a slow-labelled row from its tests/cr150.d lane file, and pins the explicit slow-row count (89 to 90) and the documentation that states it.

docs/ci.md: the slow-label bound paragraph and the slow-label inventory
paragraph, introduced by 69cddc9 (#679), now state the size of the pinned set
(90 names, including test_cr559_map_capacity_cli) instead of the retired
43 + 28 = 71 breakdown.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
…ed branch

Plain merge of the source head into the combined branch; nothing was resolved by hand. The source head already contains main (755e665). It stops the RCI oscillator from copying the price history while ranking, and puts the regression test for its workspace in the required technical-analysis unit target.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
…sted state (head 000e2da) into the combined branch

Plain merge of the source head into the combined branch; nothing was resolved by hand. The source head already contains main (755e665). It gives the private calculation group, the current execution frame and the margin liquidation of the native execution consumer explicit constructors with the same default values, so that constructing them in place compiles with Clang 18 and libstdc++ 13 in the default build with the tests on, and it moves nine source citations on three documentation pages by the five lines that the constructors add.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
The census test of the corpus variant module requires every script test module
to be named by a preflight row or to carry an explicit exemption, and it
requires an exemption to be removed once a row names the module. The pull
request that registers the rerun controller tests in the preflight plan names
scripts/test_ci_rerun_preempted.py, so the combination with it fails that test
until the exemption of the module is removed. This commit removes that one
exemption line and changes nothing else.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
Comment thread scripts/test_ci_verify.py
code, summary, _, _ = self.dispatch('sanitizers', shard=shard)
self.assertEqual(code, 0, summary['failures'])
summaries.append(summary)
self.assertIsNone(ci_verify.validate_ctest_shard_union(summaries))
Comment thread scripts/test_ci_verify.py
disabled = list(scripted.exits.get('ctest_disabled', ()))
self.assertEqual(scripted.exits['ctest_registered'], len(registry))
self.assertEqual(scripted.exits['ctest_rows'], len(registry))
self.assertTrue(set(skipped + not_run + disabled) <= registry)

@graphify-labs graphify-labs Bot left a comment •

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Graphify reviewed this change.

Worth a look — the grounded gate found no coupling regressions or blocking issues, but 1 advisory finding(s) below merit a look before merge.

Not checked: tests were not run; formal verification proved 0 of 6 changed function(s) (6 not verified).

Formal verification. PR-changed functions: 0/6 verified (0 proven, 0 may-equivalent, 0 distinguished) · 6 not verified (1 vacuous, 5 unsupported).

Not verified on this run: test\_verifier\_classes\_are\_an\_exhaustive\_disjoint\_partition (unsupported), \_\_init\_\_ (unsupported), finish (unsupported), run (unsupported), run\_sharded\_ctest (unsupported), validate\_ctest\_shard\_union (vacuous: never exercised).


Graphify review — findings

Adds a build-closure step to the sanitizer shards and the live-sanitizers profile in scripts/ci_verify.py: it reads the configured CTest commands and properties plus the real Makefile/Ninja link producers, rebuilds only the selected tests' producers and dependencies, and refuses missing producers, changed inputs or missing outputs before running the same CTest set. Install inputs are added only on the owner shard (shard 1 or an unsharded run). The rebuild stage is recorded as seven new required ctest-build-* stages for multi-shard sanitizers and every live-sanitizers run, and it parses arbitrary CTest properties and data paths into that inventory, so non-string properties, .. segments and \; escaping in that parsing are where it could mis-map or abort. Also gives the equivalence-probe rows REQUIRED_FILES for pineforge-live and pineforge, registers the new CTestTargetMapping test class as slow, and updates the docs and the PRIVATE_FIXTURE_PROFILE_FLOORS line reference (808 → 809).

Worth a look

  • Non-string CTest properties such as RESOURCE_GROUPS abort inventory — scripts/ci_verify.py · Escalate · medium
    • NOT verified (no proof, no reproducing execution) — needs human review

Review partial — this diff was larger than one review pass covers, so later files were not reviewed; some findings may be missing.

Analysis details — impact, health, verification

Impact & health

Graphify review

Impact — 815 functions depend on the 765 functions this change touches.

Health — this change adds coupling hotspots:

  • new: ctest_build_inventory() — 1 callers, 6 callees

Verification — 815 functions in the blast radius were not formally verified this run (proofs are advisory here).

Gate & verification

graphify gate

PASS — objectively clean (no health regressions, tests not run — proofs not run this pass (advisory)). Grounded, not self-assessed.

Advisory (not blocking):

  • verification_scope: 799 function(s) in the blast radius were not formally verified this run

Docs that may be stale (advisory)

…and 10 more.

Formal verification

Could not verify: Could not verify test\_verifier\_classes\_are\_an\_exhaustive\_disjoint\_partition.

The verifier did not have enough to check test\_verifier\_classes\_are\_an\_exhaustive\_disjoint\_partition, so it is saying so rather than guessing. No false assurance is the whole point.

Guarantee: No guarantee either way, this is an honest abstention, not a pass.

Note: Reason: method — first parameter is `self`, which needs a constructed instance (not synthesizable)

Could not verify: Could not verify \_\_init\_\_.

The verifier did not have enough to check \_\_init\_\_, so it is saying so rather than guessing. No false assurance is the whole point.

Guarantee: No guarantee either way, this is an honest abstention, not a pass.

Note: Reason: method — first parameter is `self`, which needs a constructed instance (not synthesizable)

Could not verify: Could not verify finish.

The verifier did not have enough to check finish, so it is saying so rather than guessing. No false assurance is the whole point.

Guarantee: No guarantee either way, this is an honest abstention, not a pass.

Note: Reason: method — first parameter is `self`, which needs a constructed instance (not synthesizable)

Could not verify: Could not verify run.

The verifier did not have enough to check run, so it is saying so rather than guessing. No false assurance is the whole point.

Guarantee: No guarantee either way, this is an honest abstention, not a pass.

Note: Reason: method — first parameter is `self`, which needs a constructed instance (not synthesizable)

Could not verify: Could not verify run\_sharded\_ctest.

The verifier did not have enough to check run\_sharded\_ctest, so it is saying so rather than guessing. No false assurance is the whole point.

Guarantee: No guarantee either way, this is an honest abstention, not a pass.

Note: Reason: method — first parameter is `self`, which needs a constructed instance (not synthesizable)

Could not verify: Could not verify validate\_ctest\_shard\_union.

The verifier did not have enough to check validate\_ctest\_shard\_union, so it is saying so rather than guessing. No false assurance is the whole point.

Guarantee: No guarantee either way, this is an honest abstention, not a pass.

Note: Reason: not verifiable: all 9 sampled inputs raised on both versions — the function never executed, so 'no divergence' would be vacuous (mostly TypeError — names the real obstacle, not a sampling gap)

· 1 grounded finding(s) anchored inline below.

Comment thread scripts/ci_verify.py
return dict(sorted(installed.items()))


def ctest_build_inventory(output: bytes, build_dir: Path, registry: tuple[str, ...],

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Health regression — ctest_build_inventory()

fans out to 6 callees (efferent coupling).

Grounded coupling-delta finding (deterministic), not an LLM guess.

luisleo526 and others added 12 commits November 8, 2026 10:03
…the process

The checker's tests exercised the decision function and the exit codes 0 and 2,
but nothing ran the script to a refusal, and nothing pinned the repository, the
check name, the application and the host that the gate trusts. A script whose
main returned 0 after printing a refusal, or whose constants named another
repository or host, passed every test.

This adds, in the checker's test module only:
- a process-level test that runs the script against a local server for each
  refusal (the check missing, failed, pending, from another application id,
  from another application slug, and for another commit) and requires exit
  code 1, one reason line, no traceback and one request;
- a test that the request names the pinned repository and the check name as
  literal text instead of through the script's own constants;
- a test that a run without an explicit API URL asks the pinned repository on
  the pinned host;
- a test that the four constants have their literal values.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
…e tools

The validator's build-and-probe stage (configure, build, library check, feed
derivation, probe run and the comparison of each produced trade file's header
with the recorded tape header) had no committed test; only one successful run
on a real corpus checkout exercised it. A change that ignored a failed build or
a failed probe, or stopped comparing headers, passed every test.

This adds, in the validator's test module only, a test class that runs the
stage against a tiny real Git repository whose tracked scripts are stubs, a
fake cmake first on PATH and a plain corpus directory. The fake tools only
decide which step fails. The tests require, for each step, the reported finding
and whether it counts as an error: a failed configure or derivation is an
error with its log shown; a failed build, a probe without exactly one library
and a failed probe are findings; a renamed or missing header column, an
undeclared trailing column and a repeated declared one are findings; the
declared trailing column is accepted; the command helper returns the exit code
and shows the log of a failure. They claim nothing about what a real compiler
does.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
The documentation of the corpus repository validation gate said that the
validator measures the selected subset and that a coverage limit is a finding.
The validator compares only the header of each produced trade file with the
recorded tape header and never compares trades, and no code emits a coverage
finding. The section also described the corpus workflow in the present tense
although the workflow is added by a later corpus pull request.

This rewrites the three sentences, quoted here as they were so that the
documentation checker can see them named:
- "The corpus workflow runs the engine's `scripts/validate_corpus_sha.py`
  against the proposed corpus checkout and prints the engine commit it ran."
- "The validator checks recorded bytes and checkout cleanliness, builds the
  probes and measures the selected subset."
- "A coverage limit is a finding; subset measurement does not establish full
  population parity."

The page is two lines longer, 2109 lines, so the two length pins in the
preflight tests move together.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
… branch

Plain merge of the source head into the combined branch; nothing was resolved by hand. The source head already contains main (755e665). It makes the preflight admit split release builds and retained smoke output, pins the identities of the split dispatch and of the legacy workflow fixtures, adds credential-withdrawal controls, and requires repository-bound uploads and main-only OIDC callers.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
…anch

Plain merge of the source head into the combined branch; nothing was resolved by hand. The source head already contains main (755e665), the release admission contract (130bda2) and the rerun-controller test registration (348a897). It adds the corpus record validator, the corpus gitlink result checker and the writer of the corpus file digest manifest with their tests and fixtures, lets the preflight admit the corpus validation job of the pull-request workflow, combines the preflight stage inventory with the rerun-controller test registration, and drops the census exemption of the rerun-controller tests. Its tests also cover the checker's refusals at process level and the validator's build and probe failures, and its documentation page states what those checks measure.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
Plain merge of the source head into the combined branch; nothing was resolved by hand. The source head is the trade text companion branch merged with main (63f3978), where the two arithmetic conflicts of the source allocation-bound gate (the ceiling and the pinned total) were resolved on the source branch itself. It adds the opt-in trade text option of the live runner.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
… into the combined branch

Plain merge of the source head into the combined branch; nothing was resolved by hand. The source head already contains main (755e665). It computes the simple moving average from a correctly rounded window sum, with tests that check the rounded window means, and records the new window container sites in the allocation-bound inventory.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
163abf5) into the combined branch

Plain merge of the source head into the combined branch; nothing was resolved by hand. The source head already contains main (755e665). It adds an end-to-end regression for the map pair limit, driven through the ordinary command line over a committed generated strategy library in seven cases, registers it as a slow-labelled row from its tests/cr150.d lane file, and pins the explicit slow-row count (89 to 90) and the documentation that states it.

docs/ci.md: the slow-label bound paragraph and the slow-label inventory
paragraph, introduced by 69cddc9 (#679), now state the size of the pinned set
(90 names, including test_cr559_map_capacity_cli) instead of the retired
43 + 28 = 71 breakdown.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
…ed branch

Plain merge of the source head into the combined branch; nothing was resolved by hand. The source head already contains main (755e665). It stops the RCI oscillator from copying the price history while ranking, and puts the regression test for its workspace in the required technical-analysis unit target.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
…sted state (head 000e2da) into the combined branch

Plain merge of the source head into the combined branch; nothing was resolved by hand. The source head already contains main (755e665). It gives the private calculation group, the current execution frame and the margin liquidation of the native execution consumer explicit constructors with the same default values, so that constructing them in place compiles with Clang 18 and libstdc++ 13 in the default build with the tests on, and it moves nine source citations on three documentation pages by the five lines that the constructors add.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
Comment thread scripts/test_ci_preflight.py Fixed
luisleo526 and others added 3 commits November 8, 2026 13:37
…out of the combined branch

Plain revert of the merge commit 3f22452 (git revert -m 1); nothing was resolved by hand and the revert had no conflict. The parity measurement of the combined branch with this change showed 40 probes whose graded tier falls against their committed TradingView tapes (every one of them calls ta.sma) and no other probe that changes; a measurement of main plus only this change gave the same 40 results. A fresh TradingView export of two of these probes agrees with the new arithmetic, so the committed tapes of the others are expected to be out of date. The change leaves this branch and returns on its own with refreshed tapes. The six other members are unchanged.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
Integrate the train base that reverts the moving-average change. Retain the
sanitizer selection implementation and its literal verifier expectations.
This private integration still requires exact-head checks and review.
@luisleo526
luisleo526 merged commit 67e1e80 into main Nov 8, 2026
16 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant