Repository navigation
basou: Measure the workspace on the spot when the board has no record - #334
Merged
Merged
Conversation
basou view's board page draws a record of board/board.yaml. With no record yet, or no board.yaml read (the manifest does not declare the workspace's own repo private), it said why and drew nothing. It now measures what basou board measure measures without a declaration and draws that: the period and effort, the repositories, the decisions and open tracks, the sessions and how many basou verify does not find verified, the review gaps, the newest session and the sessions not yet imported, and the components the markers find. A page that draws a record links to the same measurement (/board?live=1), and a button measures again. Nothing on it is judged and nothing is written, so it needs no private repo, and it is not served in portfolio mode. The effort starts on the day of the first session in this host's time zone, so an adopted repository's older history does not fill the charts with empty months. @basou/core gains measureBoardLive and boardLivePage, and the effort section's start may be left out; a declared start is measured as before. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Captures of an import's console now run one at a time in the process, whoever starts them: the board page's dry run overlapped the portfolio's (and two portfolio requests, or one and a refresh, already could), and one of them came out wrong. - The page tells a value it could not measure from a null that means so (a detached HEAD, no commit yet, no origin/main), says when the sessions not imported could not be counted, and draws the sessions by basou verify status and the units of work by review-gaps verdict. - With ?live=1 it leads back to the records only when there are some. - The effort's start with no named time zone is documented: today in UTC, only a label, as nothing is measured then. - Tests: "writes nothing" compares each file's size, modification time and content, with the real dry run of an import too; dry runs started at once count the same and leave the console as they found it; the page's script runs with a fake fetch for each way it loads; a session dated after today does not move the start. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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
basou view's board page (/board) now measures the workspace on the spot when there is no record to draw, so every workspace gets the measurable half of a board with no declaration, no record and no agent.board/board.yamlread (the manifest does not declare the workspace's own repo private),/boardmeasures and draws instead of only saying why there is nothing. A page that draws a record links to the same measurement (/board?live=1), and a button measures again.basou board measurethat need nothing from a declaration, measured as that command measures them:origin/mainas of the last fetch;basou verifydoes not find verified, the review gaps, the newest session and the sessions not yet imported (the dry runbasou orientruns);GET /api/board/liveand/api/ws/<key>/board/live, checked before the record route (which would takelivefor an id). Like every page ofbasou view, a local UI and not an API. Requests that arrive while a measurement runs share it.@basou/core(Internal):measureBoardLiveandboardLivePage; the effort section's start may be left out (a declared start is measured as before); the effort layout of the page is shared between records and live measurements (effortOf).No new flag, no change to
compatibility.mdor the README.Why
The board needs a declaration file and a judging workflow before it shows anything, which keeps it from spreading to other workspaces. The part a board measures without judgement (period and effort, repositories, trail, components) needs none of that, so a workspace now sees it as soon as it runs
basou view. Starting the effort at the first session, rather than the first commit, keeps an adopted repository's long history from filling the charts with empty months.Verification
CI steps run locally on the final commit, with exit codes:
pnpm -r build,pnpm typecheck,pnpm lint(the existing 4 warnings only),pnpm lint:lang,pnpm lint:paths,pnpm test:scripts,pnpm test:coverage(core 2630, sdk 65, cli 1474): all 0.pnpm audit --prod: no known vulnerabilities. The board and view tests pass underTZ=UTC,America/New_YorkandAsia/Tokyo.New tests: the effort's start with none declared (first session's day in the section's zone, today with none, today and a
not_foundentry when the sessions cannot be read, a session dated after today, a host zone with no name);measureBoardLiveandmeasureLiveBoardwriting nothing (each file's size, modification time and content,.gitand.basou/included, with the real dry run of an import too); declared repos, none declared, an unreadable manifest; the routes (single and portfolio mode, scoped and flat,livenot taken for a record, the anchor's language); request sharing; dry runs started at once; the page's script run with a fake fetch for each way it loads; and the drawing (values not measured told from nulls that mean so, counts by status and verdict, markup in a track title shown as text, the no-board note, links).Mutations: 34 applied one at a time to the final code (effort start and its cap, live measurement and layout, writing, routes, mode gating, request sharing, the capture queue, manifest fallback, page loading, drawing). All 34 are caught.
In a browser, with the built CLI:
/boardmeasures on the spot in English and explains where records are read from.Review: one round of convergent review (review only), with the decided scope given as fixed. The reviewer ran a server against scratch workspaces, compared every file before and after (size, mtime, sha256), checked that declared boards measure the same as before in eight cases, and drew a track title holding
<img onerror>(shown as text). Eight findings, all fixed in the second commit:-, like nulls that mean something.basou verifystatus and by review-gaps verdict were not drawn.?live=1linked back to records in a workspace with none.Not taken up, as design questions rather than defects: whether the heading uses the workspace name or the repository's directory name, a cap on the number of days, disabling the button while measuring, and saying in the footnotes why there is no record.
Checklist
main.pnpm lint,pnpm typecheck, andpnpm testare all green locally.CHANGELOG.md## Unreleasedupdated.CHANGELOG.md.🤖 Generated with Claude Code