Repository navigation
fix(brain-ci): tri stress --health measures 17 brain probes instead of a stub - #1328
Merged
Merged
Conversation
poll(since, allocator, max_events) scanned only the first max_events
buffered events and then filtered them by `since`. Whenever those oldest
events were at or before `since`, it returned nothing even though newer
events matched: with three old events and two new ones,
poll(boundary, a, 1) returned 0 events instead of 1.
The scan now walks the whole buffer and stops once max_events events
have passed the filter, which is what the doc comment already promised
("Returns events with timestamp > since ... Limited by max_events").
poll(0, a, n) is unchanged.
Found by the new `tri stress --health` probe limit-after-filter. A module
test pins it: it fails on the old code (0 events) and passes on this one.
Refs #1326
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
`tri stress --health` was a stub that printed "not implemented yet" and no Score: line, so the brain-ci Brain Health Check failed on every run as "not measured". It now runs 17 probes against the three brain regions linked into tri: basal_ganglia (8: claim, refuse, heartbeat, complete, abandon, TTL expiry, shard accounting, an 8-thread one-winner-per-task race), reticular_formation (5: string ownership, FIFO order, since filter, limit-after-filter, bounded ring) and locus_coeruleus (4: exponential, capped and monotone, linear and constant, jitter bounds). Each probe uses fresh private instances (never the process globals) and its own leak-checking allocator; a leak fails the probe. The output lists every probe as PASS or FAIL with its claim, then one plain-ASCII line Score: <n.n>/100 (<passed> of <total> probes passed) where n = 100 * passed / total, then "Status: HEALTHY" or "Status: UNHEALTHY". The command exits 1 if any probe failed. Nothing in the score is a constant: removing the basal_ganglia live-claim check, the locus_coeruleus cap or the poll fix drops it to 88.2, 82.4 and 94.1. Not covered: other src/brain regions (not linked into tri), load and soak behaviour. The other stress modes still only print a notice. Refs #1326 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The Brain Health Check parsed the first number anywhere on the Score: line, so a colour escape such as ESC[32m before "Score:" read as 32. It now reads only the number directly after "Score:" on the first Score: line, integer or decimal. The HEALTHY check used `grep -q "HEALTHY"`, which also matches "UNHEALTHY", so every run with a Status line reported healthy. It now matches the whole line "Status: HEALTHY". A run above the threshold with failed probes now gets a warning annotation instead of passing silently. The threshold (80), the not-measured and unparseable branches, and `|| true` are unchanged. The comment block describes what the score measures and states that the CLI Smoke Test, which fails on any failed probe, only runs after brain-unit, brain-integration and brain-stress succeed. Closes #1326 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The repository default GITHUB_TOKEN is read-only and brain-ci.yml had no permissions block, so "Comment Health on PR" failed with 403 "Resource not accessible by integration" on the first PR run where the health check passed (run 37176287100). The same applies to the stress comment and the Critical State Notification. Those steps were unreachable while the health check failed first. Grant contents: read and pull-requests: write at workflow level. A PR from a fork still receives a read-only token. Refs #1326 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Contributor
X Brain Health CheckScore: 100.0/100 X Brain is above merge threshold |
Contributor
🚨 CRITICAL: Brain Health Below ThresholdThe brain health CI gate has failed. This PR cannot be merged until:
Please review the failed job logs and fix the issues. |
gHashTag
added a commit
that referenced
this pull request
Oct 4, 2026
The gate needed brain-health-report without always(), so whenever the report failed the gate was skipped. A skipped check renders grey, not red: on #1328 (run 37176676345) the report failed and the Merge Gate showed skipped. With always() the gate runs and its existing check fails it for any report result other than success. Refs #1331 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
gHashTag
added a commit
that referenced
this pull request
Oct 4, 2026
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
gHashTag
added a commit
that referenced
this pull request
Oct 4, 2026
main moved by 20+ commits since 8a8f0d7 (providers tab #1302, brain health #1328, FPGA recordings #1329, blog #1309). Clean merge. check:queen-runners, queen-spec-sync, queen-contrast and queen-languages pass on the merged tree; check:queen-honesty fails 3 on inputs byte-identical to main (Queen.tsx, QueenCombBabylon.tsx), so that is main's state, not this branch. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This was referenced Oct 4, 2026
gHashTag
added a commit
that referenced
this pull request
Oct 4, 2026
… that test nothing (#1333) * fix(brain): EventBus.poll applies max_events after the since filter poll(since, allocator, max_events) scanned only the first max_events buffered events and then filtered them by `since`. Whenever those oldest events were at or before `since`, it returned nothing even though newer events matched: with three old events and two new ones, poll(boundary, a, 1) returned 0 events instead of 1. The scan now walks the whole buffer and stops once max_events events have passed the filter, which is what the doc comment already promised ("Returns events with timestamp > since ... Limited by max_events"). poll(0, a, n) is unchanged. Found by the new `tri stress --health` probe limit-after-filter. A module test pins it: it fails on the old code (0 events) and passes on this one. Refs #1326 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * feat(tri): tri stress --health runs brain self-check probes `tri stress --health` was a stub that printed "not implemented yet" and no Score: line, so the brain-ci Brain Health Check failed on every run as "not measured". It now runs 17 probes against the three brain regions linked into tri: basal_ganglia (8: claim, refuse, heartbeat, complete, abandon, TTL expiry, shard accounting, an 8-thread one-winner-per-task race), reticular_formation (5: string ownership, FIFO order, since filter, limit-after-filter, bounded ring) and locus_coeruleus (4: exponential, capped and monotone, linear and constant, jitter bounds). Each probe uses fresh private instances (never the process globals) and its own leak-checking allocator; a leak fails the probe. The output lists every probe as PASS or FAIL with its claim, then one plain-ASCII line Score: <n.n>/100 (<passed> of <total> probes passed) where n = 100 * passed / total, then "Status: HEALTHY" or "Status: UNHEALTHY". The command exits 1 if any probe failed. Nothing in the score is a constant: removing the basal_ganglia live-claim check, the locus_coeruleus cap or the poll fix drops it to 88.2, 82.4 and 94.1. Not covered: other src/brain regions (not linked into tri), load and soak behaviour. The other stress modes still only print a notice. Refs #1326 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(ci): brain health step reads the number right after Score: The Brain Health Check parsed the first number anywhere on the Score: line, so a colour escape such as ESC[32m before "Score:" read as 32. It now reads only the number directly after "Score:" on the first Score: line, integer or decimal. The HEALTHY check used `grep -q "HEALTHY"`, which also matches "UNHEALTHY", so every run with a Status line reported healthy. It now matches the whole line "Status: HEALTHY". A run above the threshold with failed probes now gets a warning annotation instead of passing silently. The threshold (80), the not-measured and unparseable branches, and `|| true` are unchanged. The comment block describes what the score measures and states that the CLI Smoke Test, which fails on any failed probe, only runs after brain-unit, brain-integration and brain-stress succeed. Closes #1326 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(ci): grant brain-ci the token permission its PR comments need The repository default GITHUB_TOKEN is read-only and brain-ci.yml had no permissions block, so "Comment Health on PR" failed with 403 "Resource not accessible by integration" on the first PR run where the health check passed (run 37176287100). The same applies to the stress comment and the Critical State Notification. Those steps were unreachable while the health check failed first. Grant contents: read and pull-requests: write at workflow level. A PR from a fork still receives a read-only token. Refs #1326 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(brain): stress_test reads claims through the sharded registry stress_test.zig still read `registry.claims`, the single map the registry had before it was split into 16 shards, so the file stopped compiling (13 errors) and test-brain-stress could not run. Count with Registry.count() and look a claim up in the one shard Registry.getShardIndex names, under that shard's read lock. The tests themselves are unchanged: 261/261 pass on zig 0.15.2. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(brain): metrics_dashboard deinit and overwrite no longer corrupt or leak Restoring test-brain ran the dashboard's own tests for the first time in months (integration_test.zig imports the file by path). They found: - RegionMetrics.deinit freed the alert through raw_metrics.allocator after raw_metrics.deinit() had set the map to undefined: a segfault at 0xaaaa... whenever a region carried an alert. Read the allocator first. - setMetric/setMetricOwned on an existing key leaked the new key copy and the replaced value, because HashMap.put keeps the stored key. Copy the key only on first insert and free the replaced value. - Five tests leaked memory they owned (the singletons collect() creates, buffers setMetric copies) and one asserted a 23-byte prefix of a name formatAscii truncates to 20 bytes. The assertions now match the code. test-brain: 151/151 pass, no leaks. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(build): restore the brain test steps brain-ci calls #517 (42490a2) removed test-basal-ganglia, test-reticular-formation, test-locus-coeruleus, test-brain and test-brain-stress from build.zig while brain-ci.yml kept calling them, so every Unit Tests leg failed with "no step named ..." and nothing behind it ran. Point the steps back at the source files, which were never removed. Not restored: test-intraparietal (intraparietal_sulcus.zig is stubs around the hslm library that left this repo and does not compile) and test-hslm (hslm is tested in gHashTag/trinity-training; no such step ever existed). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(ci): brain-ci runs only steps that exist and measure something - Unit Tests: basal-ganglia, reticular-formation, locus-coeruleus only; intraparietal and hslm dropped with the reason in the file. - Stress: pipefail-safe exit code plus zig's own "N/M tests passed" count. A missing count is NOT MEASURED and fails, never 0. The 270/300 threshold and the hard-coded 100/100 PR table are gone; nothing ever produced them. - CLI Smoke: only `tri stress --health`, no `|| true`. task stats, task list, event stats and stress --scan are unimplemented and exit 0. - Export Brain Metrics job and the --record/--history steps removed: they call unimplemented subcommands, and the health job wrote "snapshot recorded" whether or not anything was. - Report shows each job's real result instead of FAIL for skipped; the verdict still requires every job to succeed. Weekly artifact name is now unique (`with:` never expanded $(date)). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(build): link libc for the state_recovery brain module captureState() calls std.c.getpid(). macOS links libc implicitly, so test-brain passed locally, but on ubuntu-latest the integration binary failed to compile with 'dependency on libc must be explicitly specified' (brain-ci run 37180861619). A cross-compile for x86_64-linux-gnu reproduces the error before this change and compiles cleanly after it. Refs #1331 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(ci): brain-ci merge gate fails red instead of skipping The gate needed brain-health-report without always(), so whenever the report failed the gate was skipped. A skipped check renders grey, not red: on #1328 (run 37176676345) the report failed and the Merge Gate showed skipped. With always() the gate runs and its existing check fails it for any report result other than success. Refs #1331 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * build(brain): spell out brain test roots so the S01 checker can see them The capability index (external/t27/tools/trinity_manifest.py) finds build targets only as `const X = b.addTest(.{ .root_module = b.createModule(.{ .root_source_file = b.path(...) }) })` and `b.step("literal", ...)`. The helper-built roots and the region-step loop showed up as `test:None` and hid three steps. Each brain test root and step is now written out, so every target has a precise name a capability card can own. No test changes: the same files are compiled with the same imports. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * build(reproduce): vendor gHashTag/t27@39e06aa0 and measure trinity/brain.regions The brain test steps this PR restores (test-basal-ganglia, test-reticular-formation, test-locus-coeruleus, test-brain, test-brain-stress) and their six src/brain test roots had no S01 card, so the capability index failed on each as UNASSIGNED_TARGET. gHashTag/t27#5965 (39e06aa0, Closes gHashTag/t27#5953) adds the card trinity/brain.regions that owns exactly those eleven targets. - tools/contracts.py vendor --revision 39e06aa0: external/t27 and the lock move from de2a1aca; 76 files (the new card is the 76th). It also brings gHashTag/t27#5474: the S01 checker skips build.zig comments and counts the vendored copies apart, and the acceptance of mcp.needle-mcp and mcp.trinity-mcp becomes zig build -Dci=true && test -x zig-out/bin/<name>. - specs/reproduce/capabilities.t27: trinity/brain.regions is in RUN. The profile's test step does not compile its roots, so its five zig build test-<region> commands are its only measure in the index. mcp.needle-mcp and mcp.trinity-mcp leave KNOWN_BLOCKED: they were blocked on steps that exist only in commented-out lines, and their new acceptance is the install the profile already makes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * build(reproduce): raise the contract-test floor to the 78 that run at t27@39e06aa0 The vendoring of gHashTag/t27@39e06aa0 added one spec test, the card_is_bound_to_its_package test of specs/trinity/capabilities/ brain.regions.t27; no other vendored spec changed its number of tests. t27c built at 39e06aa0 with zig 0.16.0 measures 58 specs and 78 tests, all passing, so a floor left at 77 would let one test vanish unseen. The other ledgers were re-checked against the new vendor and stand as they are: the eleven TEST_BLOCKED specs fail with the same first error each, lotus.t27 still drops 48 top-level tokens, and the two specs/tools/mcp specs still declare no test. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <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.
Closes #1326
What was wrong
brain-ci.yml→ ⚡ Brain Health Check runs./zig-out/bin/tri stress --health. That command was a stub. It printedstress-test: ... not implemented yetand noScore:line, so the step correctly saidbrain health was NOT MEASUREDand exited 1, and 📋 Brain Health Report went red with it. The last 100 brain-ci runs all failed this way.#957 kept the job failing on purpose, because an unimplemented health check is a real deficiency. This PR does not relax that gate. It gives the gate something real to measure.
Option (a):
tri stress --healthnow measures somethingI chose option (a): implement the command honestly. Option (b), a neutral "not measured" outcome, was not needed, because the three brain regions already linked into
trihave a contract that can be checked in about a second.What the score is.
src/tri/brain_health.zigruns 17 probes. Each probe checks one behavioural claim and prints it next to its PASS/FAIL row:basal_ganglia(8)reticular_formation(5)locus_coeruleus(4)Score = 100 * passed / total. It is printed as exactly one plain-ASCII line,Score: <n.n>/100 (<passed> of <total> probes passed), thenStatus: HEALTHY(all passed) orStatus: UNHEALTHY.getGlobal) and its ownDebugAllocator. A leak fails the probe.src/brainregions, which are not linked intotri; and load or soak behaviour.brain_health.zigand in the workflow step.Output from the CI build (
zig build -Dci=true, zig 0.15.2):A real bug the probes found:
EventBus.pollpoll(since, a, max_events)scanned only the firstmax_eventsbuffered events and then applied thesincefilter. With 3 old events and 2 new ones,poll(boundary, a, 1)returned 0 events instead of 1. The scan now covers the whole buffer and stops oncemax_eventsevents have passed the filter, which is what the doc comment already promised. A new module test pins this: it fails on the old code (expected 1, found 0) and passes on the new code.poll(0, a, n)behaves as before.Workflow step (health parser only)
Score:on the first Score: line, integer or decimal. The old parser took the first number anywhere on the line, so a colour escapeESC[32mbeforeScore:read as 32.HEALTHYnow matches the whole lineStatus: HEALTHY. The oldgrep -q "HEALTHY"also matched UNHEALTHY.::warning::annotation instead of passing silently.|| true.GITHUB_TOKENis read-only and brain-ci.yml had nopermissions:block. On the first PR run where the health check passed (run 37176287100), the job failed at Comment Health on PR with403 Resource not accessible by integration. The stress comment and Critical State Notification have the same problem. Nobody saw it before, because those steps were skipped once the health check failed. The workflow now grantscontents: readandpull-requests: write.Threshold semantics, stated plainly. There are 17 probes, so one failure scores 94.1 and three score 82.4. Both pass this step's threshold of 80, with a warning. Four failures score 76.5 and fail the step. The CLI Smoke Test runs
tri stress --healthwithout|| trueand fails on any failed probe, but it only runs after brain-unit, brain-integration and brain-stress succeed, and they cannot today (see below).Verification
This is the health step's own
run:script, extracted verbatim from the workflow at the base commit (old) and in this PR (new). It runs underbash -ewith GNU sed, as on ubuntu-latest, withtristubbed to print each input:100.0/true/ pass100.0/true/ pass94.1/true/ pass94.1/false/ pass82.4/true/ pass82.4/false/ pass41.2/true/ FAIL41.2/false/ FAIL76.5/true/ FAIL76.5/false/ FAIL80.0/true/ pass80.0/false/ pass92/true/ pass92/true/ passScore: n/a(empty)/unknown/ FAIL(empty)/unknown/ FAIL(empty)/unknown/ FAIL(empty)/unknown/ FAILScore:32/true/ FAIL94.1/false/ passThe old column also shows the
HEALTHYbug: every run with a Status line reportedtrue.Negative controls. Each row is the probes built against a mutated copy of one region; every one exits 1 with
Status: UNHEALTHY:if (false and existing.isValid()))task race-0 had 8 winners, want exactly 1)max_mscap removedpollrestoredreturned 0 events, want 1)aux_stringcopy leakedOn GitHub Actions (ubuntu-latest):
Score: 100.0/100 (17 of 17 probes passed)andStatus: HEALTHY. None of the previous 100 brain-ci runs got past this step.Other checks:
zig build -Dci=true(zig 0.15.2): exit 0, 1m58s../zig-out/bin/tri stress --health: 17/17, exit 0, on 20 of 20 repeated runs. The standalone probe binary also passed 100 of 100 runs.zig testreticular_formation 48/48, basal_ganglia 51/51, locus_coeruleus 52/52.zig fmt --checkis clean on every touched file.State of the other brain-ci phases (separate failures, not fixed here)
🧠 Unit Tests, 🔗 Integration and 🧪 Stress Test fail on their own. They run
zig build test-basal-ganglia,test-reticular-formation,test-locus-coeruleus,test-intraparietal,test-hslm,test-brainandtest-brain-stress. None of those steps exists:zig build test-basal-ganglia -Dci=true→no step named 'test-basal-ganglia'.build.zigin 42490a2 (refactor: remove 4425 lines of migrated duplicates #517, 2026-04-19).hslmmoved to gHashTag/trinity-training.src/brain/intraparietal_sulcus.zigdoes not compile standalone (undeclaredhslm, u16/f32 type errors).Until now these jobs were skipped because the health check failed first. After this PR the health check passes, Unit Tests runs and fails, and the workflow and the Report job stay red for that separate, real reason. I am not papering over it.
💨 CLI Smoke is skipped behind that chain. When it runs,
tri stress --scanpasses vacuously: it prints a not-implemented notice and exits 0.🧪 Stress Test parser still turns "no Score: line" into
0(|| echo "0"), the same class fix(ci): brain-ci reported an unmeasured value as a score of zero #957 fixed for the health step. Itsgrep -oE "[0-9]+"also yields several numbers for a270/300line.📊 Export Metrics succeeds, but
tri stress --metricsonly prints the notice.🔨 Build Check passes. 🔒 Merge Gate runs on PRs only.
pr-opened(project-auto-status.yml) fails on this PR withgh: Bad credentials (HTTP 401). It has failed the same way on every recent PR: it is a repository token secret, not this change.Limitations
tri. It is a functional self-check, not a load test.pollstill holds its mutex ifinitCapacityfails with OOM. That is pre-existing, out of scope, and the_optand_lockfreecopies, which are not linked intotri, were not touched.{ "version": 1, "head_sha": "9097fc9c49288aecba28d24a22a30e7b918d5245", "summary": "tri stress --health was a stub, so the brain-ci health gate failed on every run as not measured. It now runs 17 behavioural probes over basal_ganglia, reticular_formation and locus_coeruleus and reports Score as the passed fraction; the probes found and this PR fixes a real EventBus.poll bug.", "changes": [ "New src/tri/brain_health.zig: 17 probes on fresh private instances, each on a leak-checking allocator, printing Score: n/100 as 100 * passed / total and exiting 1 on any failure.", "src/tri/tri_commands.zig: tri stress --health dispatches to the probes; the other stress modes still print a not-implemented notice.", "src/brain/reticular_formation.zig: EventBus.poll applies max_events after the since filter instead of to the first events scanned, with a module test that fails on the old code.", "brain-ci.yml health step reads only the number right after Score:, matches the whole Status: HEALTHY line, and annotates a passing run that had failed probes.", "brain-ci.yml grants contents: read and pull-requests: write, because its PR-comment steps failed with 403 under the read-only default token." ], "tests": [ { "command": "zig build -Dci=true (zig 0.15.2)", "result": "Build finished with exit 0 in 1m58s and installed zig-out/bin/tri.", "status": "passed", "evidence": "ls -la zig-out/bin/tri shows the 35 MB binary; the zig sources are unchanged since 3a2717083." }, { "command": "GitHub Actions brain-ci push run 37176194113 and PR run 37176287100, Brain Health Check job", "result": "Health step passed on both runs with Score: 100.0/100 and Status: HEALTHY on ubuntu-latest.", "status": "passed", "evidence": "Job logs; the PR run then hit a 403 in Comment Health on PR, fixed by the permissions block." }, { "command": "./zig-out/bin/tri stress --health", "result": "17 of 17 probes passed, Score: 100.0/100, Status: HEALTHY, exit 0 on 20 of 20 runs.", "status": "passed", "evidence": "Probe rows and the Score and Status lines are quoted in the PR description." }, { "command": "probes rebuilt against four mutated region sources (live-claim check, backoff cap, old poll, leaked string)", "result": "Every mutation exits 1 as UNHEALTHY with scores 88.2, 82.4, 94.1 and 94.1.", "status": "passed", "evidence": "Negative-control table in the PR description names the failing probe and its message." }, { "command": "zig test src/brain/reticular_formation.zig, basal_ganglia.zig, locus_coeruleus.zig", "result": "48/48, 51/51 and 52/52 tests pass; the new poll test fails on the base code with expected 1, found 0.", "status": "passed", "evidence": "zig test summary lines; the base file with the new test reports 47 passed, 1 failed." }, { "command": "health step run script, base vs head, over 10 inputs under bash -e with GNU sed", "result": "Score parsing, HEALTHY detection and the not-measured branches behave as in the verification table.", "status": "passed", "evidence": "Verification table in the PR description; the ANSI row reads 94.1 now and 32 on the base." }, { "command": "actionlint .github/workflows/brain-ci.yml", "result": "48 findings on both base and head, all info or style shellcheck notes, none introduced here.", "status": "passed", "evidence": "44 SC2086 and 4 SC2129 on both versions of the file." }, { "command": "zig build test-basal-ganglia -Dci=true", "result": "Fails with no step named test-basal-ganglia; the brain test steps left build.zig in #517.", "status": "failed", "evidence": "Unit, Integration and Stress jobs will now run and fail on this separate pre-existing cause." } ], "limitations": [ "The score covers only the three brain regions linked into tri; other src/brain regions and load or soak behaviour are not measured.", "The threshold of 80 lets up to 3 of 17 failed probes pass the health step with a warning; all-pass is enforced only by CLI Smoke.", "Brain CI stays red after this PR because Unit, Integration and Stress call build steps that were removed in #517." ], "tags": ["brain_ci", "zig", "health_check", "honest_metrics"], "blog": { "title": "A health check that finally measures something, and finds a bug", "summary": "The brain CI gate failed on every run because tri stress --health was never implemented. Seventeen behavioural probes now produce the score, and on their first run one of them caught a real EventBus.poll bug.", "outline": [ "Why the gate was red: the command printed a not-implemented notice and no Score line, and #957 rightly refused to turn that absence into a zero.", "What the score is: 100 times the passed fraction of 17 named probes over basal_ganglia, reticular_formation and locus_coeruleus, each on fresh instances and a leak-checking allocator.", "The bug the probes caught: EventBus.poll applied max_events before the since filter, so a limited poll after old events returned nothing.", "Two parser bugs in the workflow step: an ANSI escape read as a score of 32, and grep HEALTHY also matched UNHEALTHY, so every run looked healthy.", "What stays red and why: the unit, integration and stress jobs call build steps that were deleted in April, which is now visible instead of hidden behind a cascade." ] } }🤖 Generated with Claude Code