feat(bearings): compact open-work board with status colors and expandable status - #47
Merged
Merged
Conversation
…tral queued badge
doitdigital0495
added a commit
that referenced
this pull request
Oct 2, 2026
Removes the all-projects Lavish status page and the compact open-work board from PRs #46 (e10503d) and #47 (837f39d), restoring every bearings path to its state at ac35f70: the bearings skill and board template, fm-bearings-board.sh, fm-bearings-snapshot.sh, the fleet snapshot projects projection, their tests, the bearings test-count pin, and the board-only cross-references in docs and fm-project-mode.sh (--list-json). The Pi stock-call and export-visibility fixes that rode along in #46 are unrelated to the board and stay. Co-authored-by: Daan Aerts <daan@daeverhuur.nl>
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.
Intent
"I find this view not insightful enough. Too much blank project that have nothing running. Also too much text between things. Keep all open work cleanly beneath each other with color for status and I want to expand the section for current status."
The view is the Bearings board page generated by bin/fm-bearings-board.sh (rendered at .lavish/bearings-board.html, snapshot data from bin/fm-bearings-snapshot.sh).
What Changed
<details>row with a color-coded left border and badge for its state (danger, warn, online, info or neutral), and its status text expands under a "Current status" cue. The two-column layout is gone, Completed is now a collapsedCompleted · Ndisclosure, and spacing and padding are tighter.SKILL.mddescription is updated to match.fm-bearings-board-render.test.shadd cases for:🤖 Generated with Claude Code
Risk Assessment
Testing
Both bearings unit suites passed. Three real boards (fleet, status page, empty) were built through fm-bearings-board.sh with real lavish-axi in an isolated lab home. They were rendered in headless Chrome, screenshotted collapsed and after clicking the 'Current status' disclosures, with computed tones, border colors and section order dumped to JSON. Every intent scenario passed. The Completed details was seen collapsed but not clicked open. The lab session, its listener and its temp dirs were torn down.
Evidence: Computed render facts (tones, border colors, section order, expanded detail)
Source: Computed render facts (tones, border colors, section order, expanded detail)
Evidence: Real build output (session live, bound, armed)
Source: Real build output (session live, bound, armed)
Evidence: Built fleet board HTML
Source: Built fleet board HTML
Pipeline
Updates from git push no-mistakes
✅ **intent** - passed
✅ No issues found.
🔧 **Rebase** - 3 issues found → auto-fixed ✅
.agents/skills/bearings/assets/board-template.html- merge conflict rebasing onto origin/maintests/assets/board-render-harness.mjs- merge conflict rebasing onto origin/maintests/fm-bearings-board-render.test.sh- merge conflict rebasing onto origin/main🔧 Fix applied.
✅ Re-checked - no issues remain.
.agents/skills/bearings/assets/board-template.html:595- Intent: "Too much blank project that have nothing running." The all-projects status page is rendered to the same .lavish/bearings-board.html. On that pagedata.projects.forEach(renderProject)(lines 595-597) still renders a full card for every registered project. An idle project still gets a full card with name, delivery, status badge, detail and "No live worker is recorded for this project." (line 583). That is the blank project panel the captain complained about, and this diff leaves it unchanged. The existing testtest_projects_include_idle_work_shared_leads_and_unassigned_peoplestill asserts that idle projects render. The new testtest_empty_sections_and_idle_projects_do_not_take_up_spaceonly renders a board without projects[], so it never exercises this path. The new comment at line 771 ("idle projects have no panel at all") is false for the status page. Decision needed: should idle projects collapse into one line, or be dropped from the status page entirely?.agents/skills/bearings/assets/board-template.html:807- This reverses an earlier deliberate decision. The old code said "Keep the worker kind and routing identity out of the status line", and its test asserted.sub | test("ship") | not. The underway row now showst.kindas detail meta (workRow(..., t.doing, t.kind)). It also usest.idas the subtitle whenevert.repois null, and the test now expects.sub == "mate/child-1". The status-page project test separately insists on "without routing ids". The intent does not ask for kind or routing ids to be shown. Confirm this re-exposure is wanted, or keept.repoonly and drop the kind meta..agents/skills/bearings/assets/board-template.html:390- Simplification/intent pass: Captain's Call ("Needs you") used to be the first section. It is now rendered after Open work and after the Charted Next queue. Decisions that block work now sit below backlog rows. The intent asks only for open work to stack with status colors. It does not ask for decisions to drop below the queue. Confirm the reorder, or put Needs you back above Charted Next..agents/skills/bearings/assets/board-template.html:271- Simplification/intent pass: Completed changed from an always-visible section to a collapsed<details>("Completed · N"). The intent asks for an expandable current status, not a collapsed completions list. The bearings SKILL also describes Recently Landed as "rendered in full on every run". Confirm the collapse, or keep Completed open..agents/skills/bearings/assets/board-template.html:848- Every non-warning Charted row now gets a yellow "waiting" badge, including a dispatchable row with no reason. Its expanded detail then reads "Ready for dispatch.", so the badge and the detail contradict each other. Before this change such a row had no badge. Consider a neutral "queued" tone and label whent.reasonis absent..agents/skills/bearings/assets/board-template.html:778-bb-idlevisibility is computed fromdata.charted.lengthbefore line 879 hidesbb-charted-sectionon the status page when!anyPickable. Example: a status page whose only open items are non-dispatchable charted rows, with no underway and no calls. The charted section is hidden,bb-idlealso stays hidden, and the open-work area shows nothing and no "No open work." line. Computebb-idleafter the final charted visibility is known.🔧 Fix applied.
8 issues (1 error, 4 warnings, 3 infos) still open:
.agents/skills/bearings/assets/board-template.html:595- Intent: "Too much blank project that have nothing running." The all-projects status page is rendered to the same .lavish/bearings-board.html. On that pagedata.projects.forEach(renderProject)(lines 595-597) still renders a full card for every registered project. An idle project still gets a full card with name, delivery, status badge, detail and "No live worker is recorded for this project." (line 583). That is the blank project panel the captain complained about, and this diff leaves it unchanged. The existing testtest_projects_include_idle_work_shared_leads_and_unassigned_peoplestill asserts that idle projects render. The new testtest_empty_sections_and_idle_projects_do_not_take_up_spaceonly renders a board without projects[], so it never exercises this path. The new comment at line 771 ("idle projects have no panel at all") is false for the status page. Decision needed: should idle projects collapse into one line, or be dropped from the status page entirely?.agents/skills/bearings/assets/board-template.html:807- This reverses an earlier deliberate decision. The old code said "Keep the worker kind and routing identity out of the status line", and its test asserted.sub | test("ship") | not. The underway row now showst.kindas detail meta (workRow(..., t.doing, t.kind)). It also usest.idas the subtitle whenevert.repois null, and the test now expects.sub == "mate/child-1". The status-page project test separately insists on "without routing ids". The intent does not ask for kind or routing ids to be shown. Confirm this re-exposure is wanted, or keept.repoonly and drop the kind meta..agents/skills/bearings/assets/board-template.html:390- Simplification/intent pass: Captain's Call ("Needs you") used to be the first section. It is now rendered after Open work and after the Charted Next queue. Decisions that block work now sit below backlog rows. The intent asks only for open work to stack with status colors. It does not ask for decisions to drop below the queue. Confirm the reorder, or put Needs you back above Charted Next..agents/skills/bearings/assets/board-template.html:271- Simplification/intent pass: Completed changed from an always-visible section to a collapsed<details>("Completed · N"). The intent asks for an expandable current status, not a collapsed completions list. The bearings SKILL also describes Recently Landed as "rendered in full on every run". Confirm the collapse, or keep Completed open..agents/skills/bearings/assets/board-template.html:848- Every non-warning Charted row now gets a yellow "waiting" badge, including a dispatchable row with no reason. Its expanded detail then reads "Ready for dispatch.", so the badge and the detail contradict each other. Before this change such a row had no badge. Consider a neutral "queued" tone and label whent.reasonis absent..agents/skills/bearings/assets/board-template.html:778-bb-idlevisibility is computed fromdata.charted.lengthbefore line 879 hidesbb-charted-sectionon the status page when!anyPickable. Example: a status page whose only open items are non-dispatchable charted rows, with no underway and no calls. The charted section is hidden,bb-idlealso stays hidden, and the open-work area shows nothing and no "No open work." line. Computebb-idleafter the final charted visibility is known..agents/skills/bearings/assets/board-template.html:593- This round 1 fix introduced a regression.if (people.length) renderProject(p, people)drops every project that has no crew. That includes a project whose ownquestions[]is non-empty, which the board contract allows (bin/fm-bearings-board.sh:83, project_item validates questions). renderProject is the only placeproject.questionsis rendered (line 580), so those open questions now disappear from the page without any message. Concrete case: projects:[{name:"Portal",...,questions:[<a hold>]}] with crew:[] gives no panel and the question is not shown anywhere. bearings SKILL.md:126 says to explain such questions "rather than silently dropping them". The firstmate decision said to drop idle projects but keep projects with live work, and it did not cover a project that has no worker but does have an open question. Suggested remedy: render the card whenpeople.length || p.questions.length. That changes the user's recorded decision, so confirm it first..agents/skills/bearings/assets/board-template.html:610- The stat strip still counts every registered project (data.projects.length), while the panel now shows only projects with people. Example: in the updated test, 3 projects are given and the stat reads "3 projects", but only Reports and Portal render, plus the synthetic "Project not confirmed" card. The mismatch is minor. It may be intended if the stat means portfolio size.🔧 Fix applied.
3 issues (1 warning, 2 infos) still open:
.agents/skills/bearings/assets/board-template.html:271- Simplification/intent pass: Completed changed from an always-visible section to a collapsed<details>("Completed · N"). The intent asks for an expandable current status, not a collapsed completions list. The bearings SKILL also describes Recently Landed as "rendered in full on every run". Confirm the collapse, or keep Completed open..agents/skills/bearings/assets/board-template.html:778-bb-idlevisibility is computed fromdata.charted.lengthbefore line 879 hidesbb-charted-sectionon the status page when!anyPickable. Example: a status page whose only open items are non-dispatchable charted rows, with no underway and no calls. The charted section is hidden,bb-idlealso stays hidden, and the open-work area shows nothing and no "No open work." line. Computebb-idleafter the final charted visibility is known..agents/skills/bearings/assets/board-template.html:610- The stat strip still counts every registered project (data.projects.length), while the panel now shows only projects with people. Example: in the updated test, 3 projects are given and the stat reads "3 projects", but only Reports and Portal render, plus the synthetic "Project not confirmed" card. The mismatch is minor. It may be intended if the stat means portfolio size.🔧 Fix applied.
2 issues (1 warning, 1 info) still open:
.agents/skills/bearings/assets/board-template.html:271- Simplification/intent pass: Completed changed from an always-visible section to a collapsed<details>("Completed · N"). The intent asks for an expandable current status, not a collapsed completions list. The bearings SKILL also describes Recently Landed as "rendered in full on every run". Confirm the collapse, or keep Completed open..agents/skills/bearings/assets/board-template.html:610- The stat strip still counts every registered project (data.projects.length), while the panel now shows only projects with people. Example: in the updated test, 3 projects are given and the stat reads "3 projects", but only Reports and Portal render, plus the synthetic "Project not confirmed" card. The mismatch is minor. It may be intended if the stat means portfolio size.✅ **Test** - passed
✅ No issues found.
bash tests/fm-bearings-board-render.test.sh(all ok, drives the real built template under a DOM shim)bash tests/fm-bearings-board.test.sh(exit 0)FM_HOME=<lab> bin/fm-bearings-board.sh build payload-fleet.jsonwith real lavish-axi -> session live, bound, armedFM_HOME=<lab> bin/fm-bearings-board.sh build payload-status.json(status page with 2 idle projects, 1 active, 1 question-only)FM_HOME=<lab> bin/fm-bearings-board.sh build payload-empty.json(empty fleet)node cdp-shoot.mjsheadless Chrome CDP: full-page screenshot, click first underway + first chartedsummary, screenshot expanded, dump computed tones/border colors/section orderTeardown:lavish-axi end <lab board>-> status ended, lab procevent watchdog stopped, lab dirs removed✅ **Document** - passed
✅ No issues found.
✅ **Lint** - passed
✅ No issues found.
✅ **Push** - passed
✅ No issues found.