feat(board): the Nerves board — read-only browser of every config file (#172) - #173
Merged
Merged
Conversation
…e (PyAutoNerves#172) scripts/board.py collects every YAML file under each library's <package>/config/ and each workspace's config/ (SOURCES table), with keys, comments, source, prior tables, a workspace -> library-stack override map (autonerves lookup order, diffed against the merged stack), the PYAUTO_* env vars, and renders a Pages site (index + one page per repo with search), badge/board/state.json and dashboard.md. state.json follows the Brain's cockpit contract: green / yellow (unparseable file, orphan workspace keys) / grey, never red. nerves_board.yml publishes it daily from sparse clones of the config folders and validates the feed. scripts/ is excluded from the package. Tests: test_autonerves/test_board.py (hermetic). AGENTS.md: board section and the stale focused-test path fixed. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SbKQQHRRgm2b69aT9t7771
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.
Summary
Nerves board, PR 2 of 3 (PyAutoNerves#172 — after the Brain theme PR): a read-only browser of every config file and option across the repos. The human's request, verbatim: "a simply way for me to view all config file source code entries and options acrosss the repos (e.g their config folders)". Supersedes the "Nerves gets no board" note recorded earlier today.
scripts/board.pycollects the config folders of the 5 libraries (PyAutoFit, PyAutoArray, PyAutoGalaxy, PyAutoLens, PyAutoCTI) and 4 workspaces (aSOURCEStable; PyAutoNerves ships no YAML of its own) — locally from the workspace layout viarepos.yaml, in CI from sparse clones of just the config dirs — and renders an index (counts per source, override map,PYAUTO_*env-var panel, a search box over an embedded key index of 4558 entries) plus one page per repo (per file: key chips, then the line-numbered source with its#comments and a GitHub link; prior files as Class · param · type · mean/σ or bounds tables). Overrides are resolved the way autonerves resolves them — against the whole library stack in import order — sogeneral.yamlkeys that live in PyAutoFit are not flagged when a lens workspace sets them.The board's first render already found real drift: 79 orphan keys in 14 workspace files (keys no library in the stack defines —
hpc.live_visual_update,test.check_preloads,version.*, removedsubplot_shape.*,delaunay.areas_factor, a large autoctivisualize/plots.yamlblock) and a typo inautogalaxy_workspace/config/visualize/plots.yamlline 30 (fit_imaging {}:). Those keep the feed yellow until fixed (follow-ups, not this PR).API Changes
scripts/board.py(1137 lines):SOURCES,collect(root, brain, mind, sources_dir), pure renders--md --md-brief --json --badge --state --html-index --html-repo NAME --site DIR; inputs--brain --mind --root --sources --collect OUT | --snapshot F. Not packaged (pyprojectexcludesscripts*,MANIFEST.inprunes it; wheel checked)..github/workflows/nerves_board.yml: cron + dispatch; checks out Brain + Mind; sparse-clones the sources listed by the script itself; collect →--site _site; "Validate the cockpit feed against the Brain contract"; Pages deploy (site pre-created by the human token).test_autonerves/test_decorator.py).See full details below.
Test Plan
pytest test_autonerves -q— 201 passed (16 new intest_board.py, hermetic: two fake libraries + a workspace, prior file, broken YAML, build/ file; SomeOrg only). CI's barepytestpicks it up viatestpaths.--root /home/jammy/Code/PyAutoLabs): 332 files / 9 sources (Fit 17, Array 4, Galaxy 99, Lens 5, CTI 6; workspaces 19/86/84/12), 258 prior files, 0 parse errors, 173 overrides (33 differ, 79 orphan keys in 14 files), 10 env vars--site: index.html 323 KB, largest repo page 333 KB, state.json 9.5 KB;python ../PyAutoBrain/board/_state.py state.json→state: ok; the key index containspositions(11 hits)nerves_board.ymlgreen withstate: ok; https://pyautolabs.github.io/PyAutoNerves/ lists 9 sources; search "positions"; cockpit Nerves card populates. No browser here — layout unchecked by eye.Full API Changes (for automation & release notes)
Added
scripts/board.py,.github/workflows/nerves_board.yml,test_autonerves/test_board.pyChanged
Removed
Heart YELLOW acknowledgement
Heart readiness is YELLOW (score 85, snapshot 2026-09-26T16:19:27+00:00). Verbatim reasons:
manifest drift: hub organism blurb (organs present) — 7 mismatch(es) vs PyAutoMind/repos.yamlmanifest drift: organism-map blocks (generated) — 1 mismatch(es) vs PyAutoMind/repos.yamlmanifest drift: workspace checkouts (manifest ↔ disk) — 1 mismatch(es) vs PyAutoMind/repos.yamlAll pre-existing organism-map drift, unrelated to this diff. Human acknowledgement (live, this session, 2026-09-26, for PyAutoNerves#172): "ack and merge" — development shipping + merge on green checks; no release
Generated by the PyAutoLabs agent workflow.
🤖 Generated with Claude Code
https://claude.ai/code/session_01SbKQQHRRgm2b69aT9t7771