Skip to content

Staging - #272

Merged
andrewsg3 merged 7 commits into
mainfrom
staging
Aug 12, 2026
Merged

Staging#272
andrewsg3 merged 7 commits into
mainfrom
staging

Conversation

@andrewsg3

Copy link
Copy Markdown
Collaborator

No description provided.

andrewsg3 and others added 7 commits August 11, 2026 13:16
- loom_stimulus.py / loom_camera_module.py: the near-screen keepalive
  tick and test-flash button now also cover the stimulus monitor, gated
  to only fire while idle (batch.active is False) so a tick can never
  blank an in-progress loom animation or the photodiode marker mid-trial.
  Renamed the IPC command/status from test_near_screen to test_screens
  to match.
- App.jsx (basic + loom): RecordingStatusWidget is now mounted once at
  the App level instead of only inside each Dashboard page, so it's
  visible on every route, not just Dashboard. Adjusted Dashboard/
  LoomDashboard root height rules (100vh -> flex:1) to account for the
  bar now sitting above them in the same flex column.
- Sidebar.jsx/css: footer's plain-text "GitHub Page" link is now an icon
  link (octocat mark), alongside a new "Docs" link (book icon) pointing
  at https://saviour.readthedocs.io. Both icons use currentColor to
  theme with light/dark, matching the existing power-button icon
  convention. Increased the title-to-nav-links gap (20px -> 32px, plus
  a 10px floor on .main-nav for when no hostname is shown).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
LoomStageContext.jsx's dashboard Habituation/Loom toggle pushed
loom_stimulus.enabled, but the module only ever reads
loom_stimulus.armed (loom_camera_module.py, config schema, and the
manual config-card checkbox all use "armed"). The toggle silently did
nothing to the module's actual armed state.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…weep

- Settings/System/Guide/Recording: restyled page headers/toolbars for
  consistency (padding, dropdown label placement), then removed the
  page-level titles entirely per feedback that they duplicated the
  sidebar's own active-nav indicator.
- Guide page rewritten to render docs/readthedocs/*.md directly (via a
  new src/docs/loadDocs.js Vite raw-import loader + react-markdown/
  remark-gfm/rehype-raw/rehype-slug) instead of separately hand-written
  JSX content, so there's a single source of truth for docs instead of
  two copies drifting apart. Populated getting_started.md/open_ephys.md
  (previously "Coming soon!" placeholders) and merged extra FAQ entries
  from the old JSX into faqs.md. Internal markdown links between doc
  pages resolve to in-app tab switches; images resolve to bundled
  assets. Navigation is a left contents panel (readthedocs/docs-outline
  style) rather than a top button row.
- Sidebar: moved the Admin/Guest role badge from the footer to directly
  below the title/hostname, and fixed its dropdown menu to open
  downward (was bottom:100%, which only made sense in the old footer
  position).
- Recording page: standardised page padding to match System/Guide,
  moved the warning text color to var(--warning-color, ...) matching
  the existing --error-color fallback-var convention, and de-duplicated
  .primary-button/.secondary-button (previously copy-pasted identically
  into LoomRecording.css and NewSessionForm.css) into index.css.
- Swept em dashes to plain hyphens across every user-visible string in
  the frontend (JSX labels/tooltips/placeholders) and the docs/
  readthedocs markdown content that now renders in-app; code comments
  were deliberately left untouched.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
- how_it_works.md: was a "Coming soon!" placeholder; wrote an overview
  (controller/module split, ZeroMQ transport, recording/export/download
  lifecycle) plus deep-dive sections on network topology, avahi (mDNS
  hostname resolution) vs zeroconf (mDNS service discovery - these are
  two genuinely separate mechanisms in this codebase, not the same
  thing), Samba export, systemd, and the Picamera2/CameraBase stack.
- open_ephys.md: added a photo walkthrough (complete rig -> acquisition
  board -> labelled HDMI digital I/O ports) with an explanation of the
  8-TTL-channels-per-port / IO-board-to-BNC setup, and a screenshot of
  inbound TTLs rendering as coloured columns in the Open Ephys GUI.
- Converted all new images to WebP (saviour_logo.png excepted, per
  request) - cad.md's existing image reference updated to match.
  Original PNG/JPG sources deleted; ~25.6MB of unreferenced/oversized
  images is now ~1MB total.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…quisites

- Guide page: contained scroll region for .guide-page (matches
  Settings/Recording) so a long doc no longer grows the outer app
  shell, and so the contents panel's sticky positioning has something
  to actually stick against. Widened the content column (720px ->
  900px) and added a sticky right-hand "On this page" outline listing
  the current doc's H2/H3 headings as smooth-scroll jump-links -
  addresses the empty space to the right of a capped-width content
  column on wide screens.
- loadDocs.js: new extractOutline() builds that outline from the raw
  markdown, using a fresh github-slugger instance per doc (matching
  rehype-slug's own per-render scoping) so generated ids exactly match
  the real rendered heading anchors. Verified independently in Node
  against hardware.md - the extracted #shared-hardware slug matches
  that page's own pre-existing internal link.
- getting_started.md: added a "Before you start" section covering the
  assumed hardware/OS/SAVIOUR-install prerequisites, with an
  "Installing SAVIOUR" walkthrough (the real install.sh bootstrap
  one-liner, what it does, and a pointer to multiclone.sh for fleet
  setups) rather than leaving installation as an unstated assumption.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…ontend-nav-polish

Feat/loom screens and frontend nav polish
@andrewsg3
andrewsg3 merged commit beb01e1 into main Aug 12, 2026
6 checks passed
@codecov

codecov Bot commented Aug 12, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 4.76190% with 20 lines in your changes missing coverage. Please review.

Files with missing lines Patch % Lines
src/modules/examples/loom_camera/loom_stimulus.py 0.00% 18 Missing ⚠️
...modules/examples/loom_camera/loom_camera_module.py 33.33% 2 Missing ⚠️

📢 Thoughts on this report? Let us know!

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