Skip to content

feat(brainbar): turn the new menu on by default - #1809

Open
EtanHey wants to merge 1 commit into
feat/brainbar-brain-iconfrom
feat/brainbar-new-menu-default-on
Open

EtanHey wants to merge 1 commit into
feat/brainbar-brain-iconfrom
feat/brainbar-new-menu-default-on

Conversation

@EtanHey

@EtanHey EtanHey commented Nov 15, 2026

Copy link
Copy Markdown
Owner

BrainBar now uses the new menu and brain icon when the preference is unset. Settings › Advanced keeps a “Use the new menu” switch; turning it off restores the previous menu and charts icon. Explicit true/false values are preserved, with no preference migration. The preference reader and Settings toggle share one default.

Proof: fail-first headless Swift coverage of the real controller, menu and icon renderer. Live installed-app behavior is not verified in this lane; the brief forbids screen changes, socket/database access and the three native UI suites.

Tests updated to select the legacy path explicitly rather than assuming an absent key means off:

  • BrainBarNewMenuTests: preference default/re-read, exact legacy item restoration, model-backed overflow/backup restoration.
  • BrainBarBrainIconTests: switch round trip and exact chart-pixel comparison in idle, active and badged states; explicit true selects the new menu.
  • BrainBarBackupStatusConsistencyTests, BrainBarCompactMenuTests, BrainBarHealthVerdictTests, BrainBarJobAlertTests, BrainBarMainWindowTests, BrainBarMenuCoherenceTests, BrainBarOneStatusTests, BrainBarStatusMenuTrackingTests, BrainBarStatusPopoverControllerTests, BrainBarStatusSnapshotFix1Tests: legacy controller fixtures now opt out through an isolated UserDefaults helper.

Added three tests: testAbsentPreferenceUsesNewMenuAndBrainWithoutWritingAValue, testExplicitFalseUsesPreviousMenuAndExactCharts, and testExplicitTrueUsesNewMenuAndBrain. These cover the first assigned brain image, new-menu actions, exact legacy menu titles/chart pixels, and preservation of both absent and stored values.

Validation:

  • Fail-first at base 3fa24d58214a390a5ff8c629b2bf0ecacc667a18: the absent-key test ran and failed 5 assertions (first image, preference, rendered image and menu selection).
  • taskpolicy -b swift test --package-path brain-bar --scratch-path .build.noindex/swift --jobs 4 --filter 'BrainBar(NewMenu|BrainIcon)Tests': 20 passed, 0 failures. Final run started below the load gate at 7.22.
  • python3 -m pytest tests/test_ci_swift_gate.py -q --basetemp=.build.noindex/pytest/w89: 51 passed.
  • git diff --check: passed.
  • The single BRAINLAYER_PREPUSH_SCOPE=changed-only git push -u origin HEAD passed the repository pre-push gate.
  • Other changed legacy suites compiled but were not executed locally. In particular, BrainBarMainWindowTests, BrainBarStatusPopoverControllerTests and BrainBarStatusMenuTrackingTests were not run.

The legacy helper uses a private stored suite with automatic domain cleanup. Registering defaults would contaminate the process-wide registration domain; a custom volatile domain was not read by this suite's search path.

Surface check: controller menu selection and first/subsequent icon rendering use the preference reader; Settings uses the shared default. Explicit false retains the old menu inventory and chart pixel checks; explicit true retains the new path. No provider, transport, socket, database, connection-mode or documentation contract changes.

Loop-record: implementer=codex gpt-6.1-sol (T3); reviewer=; rounds=0; defects=0

Review is lead-owned. No reviewer was started and no merge was attempted. Worktree and branch are retained per the lane brief.

🤖 Generated with GPT-6.1 Sol in T3 Code Nightly

Share the enabled default with Settings, retain explicit opt-outs, and label the switch Use the new menu. Cover absent and stored preferences, preserving legacy menu inventories and exact chart pixels through isolated opt-out fixtures.

Co-Authored-By: GPT-6.1 Sol <noreply@openai.com>
@EtanHey EtanHey added the size:S Tight-loop PR size: 51-150 hand-written lines added label Nov 15, 2026
@coderabbitai

coderabbitai Bot commented Nov 15, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

Run configuration

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • Trigger review
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

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.

Share

@github-actions

Copy link
Copy Markdown

BrainLayer ratchet

Every Value below was measured by this run. A row this machine cannot measure says n/a — <reason> instead of a number; baselines in Notes name their own machine, method and date and were not measured here.

Hosted success gives no verdict on mapped bytes, search p50/p95, idle CPU, hotlane backlog CPU, or fallback replay debt.

Row Status Value (measured by this run) Method Notes
commit provenance 🟢 GREEN measured b81bfb58f73c == PR head · checkout b81bfb58f73c commit graph + live PR head · in-process · runner Which commit this whole table is about. On a pull_request event the checkout is GitHub's synthetic merge ref, whose sha is not on the PR — #759's table printed 13fa724278bf while that PR's head was 4632f979 — so this row names the PR-head parent instead, the sha a reviewer can actually see. The comparison sha is read live from repos/{owner}/{repo}/pulls/{n} when the table is collected, not taken from the event payload, because the payload cannot know the run has been overtaken. Residual window, stated rather than papered over: a push landing between that read and the comment being posted is not caught here — the run for that push refreshes the table.
baseline attestation 🟢 GREEN baseline f421d1a7c5e6 matches the main attestation (run 43598401087 · main b79f553bb3ba · 2026-11-14T13:10:38Z) main attestation artifact via Actions API · in-process · runner What every comparison is measured AGAINST, and who says so. The baseline fields of tests/fixtures/sprint_gate/corpus.json (queries, latency_baseline_ms, thresholds) are compared to the ratchet-attestation artifact of the latest successful push or (no-input) workflow_dispatch run of ratchet-attest.yml on main, fetched through the Actions API — a PR run cannot write to another run's artifacts. A field that differs is RED unless that main run measured the new value. The calibrated socket collector can license p50/p95; every absent measured path stays locked, so missing collection never passes as permission for a hand edit. Boundary: the comparator is this PR's checkout of ci_ratchet_table.py, diff-reviewable, not tamper-proof.
provenance 🟢 GREEN stamped b81bfb58f73c == HEAD, tree clean wheel stamp · in-process · runner Sha half of #749 keg-mode provenance: a keg built from this wheel can answer __build_sha__. The helper-age and served-process predicates need a running BrainBar and are measured only by scripts/sprint_gate.py on an installed Mac. The sha here is the checkout's — the explicit PR head in ratchet.yml — because that is what publish.yml stamps at release time; the PR-head sha this table describes is the one in commit provenance above.
fallback replay debt ⚪ n/a n/a — no fallback queue on this machine: the pending memories live in ~/Gits/*/docs.local/decisions, and docs.local/ is gitignored, so a runner checkout has no copy of them to count docs.local walk · machine with the fallback queue local-only; not enforced by hosted CI. intended_brain_store: true with no chunk_id means a memory reached disk and never reached the DB, so it answers no brain_search. Budget: 0. Any pending or unparseable file is a finding, never a band -- 122 of these sat from 2026-06-28 to 2026-09-05 because nothing counted them where a reader would look. Measured by walking the tree, so it is only ever measured on a machine that HAS the tree.
pre-push: delete-only push runs no suite 🟢 GREEN 0 suite starts · exit 0 real checkout hook · delete-only stdin · sentinel suite runner Bug SHA: 44ecbf5ba6f1ada3b965797559eee90c94b45595 (RED replay, 2026-10-06). Fix: #1084; measured at b81bfb58f73c332a2cd0e4afb96e37f6899d7221. Ceiling: 0 suite starts; hook must exit 0 and announce the delete-only skip.
mapped bytes ⚪ n/a n/a — no BrainBar daemon at /tmp/brainbar.sock: this row needs the daemon, its hybrid helper and the indexed corpus running together, and no GitHub-hosted runner has them (macOS included) — only a self-hosted Darwin/arm64 runner on an installed Mac would socket · installed Mac local-only; not enforced by hosted CI. Baseline 26.2 GB — installed Mac, socket, 2026-09-03, after R2 drained 15,070 → 0. Up from 16.8 GB because the drain left more vectors mapped under the same cap: the change is the drain, not a leak. Not measured by this run.
search p50/p95 ⚪ n/a n/a — no BrainBar daemon at /tmp/brainbar.sock: this row needs the daemon, its hybrid helper and the indexed corpus running together, and no GitHub-hosted runner has them (macOS included) — only a self-hosted Darwin/arm64 runner on an installed Mac would socket · installed Mac local-only; not enforced by hosted CI. Margin p50: margin unmeasured — 0 of the 5 attested green main runs it needs; no verdict is rendered from fewer. Margin p95: margin unmeasured — 0 of the 5 attested green main runs it needs; no verdict is rendered from fewer. Calibrated on MacBook-Pro.local at 2026-09-01T08:42:22Z under active_sprint_load (tests/fixtures/sprint_gate/corpus.json). Not measured by this run.
idle CPU ⚪ n/a n/a — no BrainBar daemon at /tmp/brainbar.sock: this row needs the daemon, its hybrid helper and the indexed corpus running together, and no GitHub-hosted runner has them (macOS included) — only a self-hosted Darwin/arm64 runner on an installed Mac would ps sampling · installed Mac local-only; not enforced by hosted CI. Ceiling: average CPU < 30% over a 60 s window (resource_budget in scripts/sprint_gate.py), ratified and kept as a hard budget. Margin daemon: margin unmeasured — 0 of the 5 attested green main runs it needs; no verdict is rendered from fewer. Margin helper: margin unmeasured — 0 of the 5 attested green main runs it needs; no verdict is rendered from fewer. Margin watcher: margin unmeasured — 0 of the 5 attested green main runs it needs; no verdict is rendered from fewer. Needs the BrainBar daemon, helper and watcher actually running. Not measured by this run.
hotlane backlog CPU ⚪ n/a n/a — live hotlane CPU evidence requires an installed Mac CPU/wall for backlog-encoding cycles · rolling 600 s · installed Mac local-only; not enforced by hosted CI. Default budget 60% of one core; BRAINLAYER_HOTLANE_CPU_BUDGET_PERCENT overrides. At least 30s of active backlog cycles required; yielded time excluded. Measures installed code.
signature_valid ⚪ n/a n/a — the macOS signature-parity job is trigger-gated and did not run on this PR: it touches no release or signing path (pyproject.toml, scripts/release-*, scripts/brainlayer-version-check.sh, publish.yml, ratchet.yml) and carries no ratchet:signatures label — a GitHub macOS runner bills at ~10× Linux minutes and rebuilds the keg venv from source codesign · installed keg scripts/release-verify-signatures.sh <keg> codesign-verifies every *.so/*.dylib under libexec/venv. The macOS parity job installs the published tap formula (etanhey/layers/brainlayer), so this row measures the release path — formula, published sdist and Homebrew's relocation — and not this PR's tree. Release-time baseline for the same keg on a different machine: 442 valid / 0 invalid — installed Mac (M4 Max), brew --prefix brainlayer 1.5.11, 2026-09-03.
BrainBar renders no enrichment status 🟢 GREEN 19 actual-view captures; active pending-store/replay retained macOS DEBUG binary · AppKit actual views · Vision OCR + icon RGBA comparison · private synthetic state Missing render capability/evidence is RED. Historical data is retained; this is source-build proof, not installed-app proof.
Watcher heartbeat freshness and recovery ⚪ n/a n/a — macOS native probe trigger-gated: no affected path or ratchet:heartbeat label private Python producer -> compiled Swift consumer Preserves genuine silence; independent agent stores cannot revive the watcher. Not a load or installed-UI measurement.
maintenance quiesce: services stay down under a reviving watchdog ⚪ n/a n/a — macOS replay trigger-gated: no affected path or ratchet:quiesce label real launchd · GitHub macOS runner · real maintenance + fleet-watchdog Fix: #1076 (bc6d690f4331387485678d0247e19e14e6ef8d97). Ceiling: 0 revivals; supervisor held, both resumed, no hold marker.
no cloud model call reachable anywhere 🟢 GREEN 548 source files; 480 installed imports; 3 native tests; wheel 49172b60e4e0; 0 candidate attempts immutable installed wheel (default + dev) + AST source + actual native BrainBar Synthetic private fixtures; SDK absence gated on merged R10b. Exact-head candidate proof, not deployment.

🟢 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 b81bfb58f73c · PR head b81bfb58f73c · checkout b81bfb58f73c · run · updated 2026-11-15 01:00:32 UTC

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:S Tight-loop PR size: 51-150 hand-written lines added

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant