chore(release): bump version to 1.5.15 (XS) - #784
Conversation
All six sites: pyproject.toml, src/brainlayer/__init__.py, server.json (root + packages[0]), brain-bar/bundle/Info.plist (short, bundle, release). Casks/brainbar.rb stays 1.5.9: no Swift change this release, declared to scripts/brainlayer-version-check.sh via BRAINLAYER_VERSION_CHECK_CASK_LAG_REASON="no BrainBar release for 1.5.15". Why a release. The installed keg on the M4 is 1.5.14 / build_sha 3bbe19f. Verified: `git merge-base --is-ancestor 7369f80 3bbe19f` -> false, so #781 -- the watcher per-poll burst fix, 14.97% -> 2.39% under the LaunchAgent's background QoS -- is NOT in any installed keg. Enabling com.brainlayer.watch today would start the burst-y watcher. 1.5.15 is what carries #781 (7369f80) onto the Mac. Also in: #772 #773 #775 #776. Co-authored-by: brainlayerClaude-ebe88b04 running claude-opus-5 <noreply@anthropic.com>
Bugbot couldn't run - usage limit reachedBugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit. A user or team admin can review and increase usage limits in the Cursor dashboard. (requestId: serverGenReqId_6491ba83-d836-4476-959e-52ee95535b8b) |
|
@coderabbitai review — brainlayerClaude-ebe88b04 running claude-opus-5 |
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Organization UI Review profile: ASSERTIVE Plan: Team Run ID: 📒 Files selected for processing (4)
Included review availability: Your plan provides up to 1 included review per hour; 0 remain after this review. 📜 Recent review details⏰ Context from checks skipped due to timeout. (5)
🔇 Additional comments (4)
📝 WalkthroughWalkthroughThe release version changes from 1.5.14 to 1.5.15 in the BrainBar bundle, project metadata, server metadata, and Python package metadata. ChangesRelease metadata
Estimated code review effort: 1 (Trivial) | ~2 minutes Merge Risk: ⚪ Minimal · up to This release updates package, server, and BrainBar version metadata to 1.5.15 without changing runtime behavior. No current merge-readiness risk remains. Poem
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
|
Overall Grade |
Security Reliability Complexity Hygiene |
Code Review Summary
| Analyzer | Status | Updated (UTC) | Details |
|---|---|---|---|
| Python | Sep 5, 2026 4:50p.m. | Review ↗ | |
| Swift | Sep 5, 2026 4:50p.m. | Review ↗ | |
| JavaScript | Sep 5, 2026 4:50p.m. | Review ↗ | |
| Shell | Sep 5, 2026 4:50p.m. | Review ↗ | |
| Secrets | Sep 5, 2026 4:50p.m. | Review ↗ |
Important
AI Review is run only on demand for your team. We're only showing results of static analysis review right now. To trigger AI Review, comment @deepsourcebot review on this thread.
|
|
BrainLayer ratchetEvery Value below was measured by this run. A row this machine cannot measure says
🟢 GREEN measured, within budget · 🔴 RED measured, out of budget — a finding to clear before merge · ⚪ n/a not measurable on this machine, never guessed. No RED rows. Measured on Linux/x86_64 · measured |
|
| run | sha | Test BrainBar |
|---|---|---|
| 33977684585 | 3cc9eca3 |
skipped |
| 33977295684 | 0d6d130f |
skipped |
| 33977181415 | 7369f80c |
skipped |
This 7-line bump is the first commit in a while to touch brain-bar/, so it is the first to actually run the Swift suite. A green swift (macos-15) on main does not mean the Swift suite passed.
What actually failed is the threshold, not the property
The stub blocks 0.6 s (BlockingWatcherProbe(delay: 0.6)). The property under test is that refresh(force:) returns without waiting for the probe. CI measured 0.336 s — under 0.6, so the probe did leave the main actor and the property held. 0.3 is a midpoint proxy with no headroom for cold-start overhead on a shared runner.
Proposed handling
Re-run the job to unblock the release, and fix the flake in its own XS PR — canon rule 9, a defect found mid-PR opens a new PR rather than another commit here. The honest fix is not 0.3 → 0.5 but dropping the wall-clock proxy: assert against the stub's own delay, or have the probe signal on entry so the test waits on an event instead of a clock.
Separately worth a look: the path filter leaves the Swift suite unexercised on most main commits — a gate reported green by being skipped.
— brainlayerClaude-ebe88b04 running claude-opus-5
Bugbot couldn't run - usage limit reachedBugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit. A user or team admin can review and increase usage limits in the Cursor dashboard. (requestId: serverGenReqId_3fca2e04-5039-4e36-b879-29e7c6a4449c) |
Branch updated onto
|
Bugbot couldn't run - usage limit reachedBugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit. A user or team admin can review and increase usage limits in the Cursor dashboard. (requestId: serverGenReqId_fb07b593-2b9e-45a0-9878-6ae4edc27bc3) |
…vent, not a 0.3s clock (XS) (#786) * test(brainbar): prove the watcher probe left the main actor with an event, not a 0.3s clock (XS) `testWatcherProbeDoesNotBlockMainActorRefresh` asserted `elapsed < 0.3` while its stub probe slept 0.6s. On #784 a cold macos-15 runner measured 0.336s: the property (refresh returns without waiting for the probe) HELD, the proxy threshold did not. swift (macos-15) is a required check, so that flake blocks releases. The probe now parks its first `sample()` on a semaphore only the test releases, so "the refresh did not wait" is proven by an event -- reaching the next line while the probe is still blocked is the property itself -- with no wall-clock margin anywhere. The park is bounded (15s) so a main-actor regression fails the assertion instead of hanging the suite, and the tail wait is a generous 30s liveness poll for the released result: a slow runner makes this test slower, never red. Verified both directions locally, brain-bar/Tests only: - green: `swift test --filter StatsCollectorTests` -> 16/16, 8 consecutive runs - red: moving `watcherProcessProbe.sample()` out of the detached task onto the main actor fails it on the property assertion (StatsCollectorTests.swift:756); reverted - green under 24x CPU load, where the old 0.3s assert's replacement tail (5s) had failed; this test passes twice under that load Agent: brainlayerClaude-9fcc41a6 (Claude Opus 5, 1M) Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * test(brainbar): stop the comment claiming more than the assertions prove (review round 1) Cursor low on #786: reaching the line after `refresh(force: true)` does not by itself prove anything -- at that instant the probe may not have entered `sample()` yet, and the park is bounded by `maxBlock`, so "only this test can release it" was also too strong. The proof is the PAIR of assertions: the probe entered `sample()`, AND it has not completed while the test runs on. Comment now says exactly that. Comment-only; no assertion, helper, or production behaviour changed. Agent: brainlayerClaude-9fcc41a6 (Claude Opus 5, 1M) Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Size: XS. Four files, seven lines — the #769 (1.5.14) shape exactly.
All six version sites:
pyproject.toml,src/brainlayer/__init__.py,server.json(root +packages[0]),brain-bar/bundle/Info.plist(short, bundle, release).Why a release
The reason is #781 (
7369f80c) — the watcher per-poll burst fix, 14.97% → 2.39% under the LaunchAgent's background QoS. Ingestion cannot be enabled on a keg that lacks it.Installed keg on the M4 is 1.5.14 / build_sha
3bbe19f2(_build.pyin the keg's site-packages). Verified, not assumed:launchctl enable com.brainlayer.watchtoday would start the burst-y watcher. 1.5.15 is what carries #781 onto the Mac. Also riding along: #772 #773 #775 #776 (test hygiene, tag-push scoping).Cask lag
Casks/brainbar.rbstays at 1.5.9 — no Swift change this release. Declared to the guard with:Deliberately not exported into the push environment —
tests/test_brainlayer_version_check.pyasserts the check fails without a reason, so exporting it in the shell that runs the hook would defeat those two tests.Verification (this branch,
13439288)scripts/brainlayer-version-check.sh, all three runs quoted verbatim:A) no reason — must fail:
B) with reason, pre-tag:
C) with reason +
BRAINLAYER_VERSION_CHECK_GIT_TAG=v1.5.15(the script's own override) — proves the tag is the only remaining gap, and it closes in step 2 whenv1.5.15is cut:Pre-push gate: pushed scoped with
BRAINLAYER_PREPUSH_SCOPE=changed-only, comma-separatedBRAINLAYER_CHANGED_FILES,nice -n 15. All five phases green, no full suite (40 passedisolated, bun1 pass, fts5 determinism shell PASS).What this PR does NOT do
brew upgradedoes not re-render an existing plist. Every plist needsscripts/launchd/install.shre-render after the keg upgrade, verified byProgramArgumentspointing at/opt/homebrew/opt/brainlayer/..., before anything is restarted — and the signature gatescripts/release-verify-signatures.sh <keg>runs before any restart. That is step 3 of the release, not this PR.🤖 brainlayerClaude-ebe88b04 running claude-opus-5
Note
Low Risk
Metadata-only version alignment with no behavioral code changes in the diff.
Overview
Bumps the release identity from 1.5.14 to 1.5.15 everywhere the shipped package and BrainBar bundle declare version:
pyproject.toml,brainlayer.__version__, MCPserver.json(root and PyPI package entry), andbrain-bar/bundle/Info.plist(CFBundleVersion, short version, andBrainLayerReleaseVersion).There is no application or runtime logic in this diff—only metadata so a new keg/tag can ship fixes already on main (notably the watcher per-poll burst reduction in #781). The Homebrew cask is not updated here;
Casks/brainbar.rbcan remain behind until a separate BrainBar release.Reviewed by Cursor Bugbot for commit 0f35401. Bugbot is set up for automated code reviews on this repo. Configure here.
Note
Bump version to
1.5.15Updates version metadata in Info.plist, pyproject.toml, and server.json, plus the
brainlayer.__version__constant.Macroscope summarized 0f35401.
Summary by CodeRabbit