Repository navigation
Print a board.yaml to start a board from - #338
Merged
Merged
Conversation
basou board init prints a declaration of the newest board_version, in the anchor's language: a title from the workspace's name, the six stages with a meaning each, one sample lane to cut again, nothing to observe, no component registered, an axis of version 1, and the effort from the day of the first session in this host's time zone (the same default the board page measures with). It writes nothing; it stops, printing nothing, where a board is already declared or the workspace's own repo is not declared private. Its help and the guide say to save it through a file of its own, moved into place only where no board is: printing straight into board/board.yaml would let the shell empty an existing board before init could refuse. The guide's steps for a workspace with no board now start from init. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The help said to print the board to a fixed name under the temporary directory, which on a /tmp other users share is a path another user can place first. mktemp makes a file of the user's own. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Leave out a time zone a board cannot declare (an offset such as +00:00, which some hosts name their zone), and say on stderr and in a comment when the start is today in UTC because the zone has no name. - Run only from the top of the workspace's own repo, where the save writes: from a member repo, a view or a subdirectory the board would land elsewhere, a public repo included. - Save through a file of its own inside board/, linked into place only where no board.yaml is and removed either way, with board/ when nothing else is in it: nothing is left in the temporary directory, and a board that appears meanwhile is never replaced. The guide shares the command. - The guide refuses a board.yaml that is a link to nothing, which init would not replace, and names the basou that printed it with no board declared too. - Escape the remaining bidirectional and invisible characters in what init and the guide print, and fix a comment and a test that hung on the host's time zone. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Node 20, which CI runs, refuses an offset such as +00:00 as a time zone, so a host named so has no zone at all there, while Node 24 takes it. The test now expects what the running Node does. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This was referenced Oct 9, 2026
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
Adds
basou board init(experimental): it prints aboard.yamlto start a board from, and writes nothing.board_version, in the language the manifest declares for the workspace's own repo:view-strings.ts;replace-me, to cut again (a board needs one);+00:00):mkdir -p board && f=$(mktemp board/.board.yaml.XXXXXX) && { basou board init > "$f" && ln "$f" board/board.yaml; s=$?; rm -f "$f"; rmdir board 2>/dev/null; [ "$s" -eq 0 ]; }board/bymktemp.board.yamlis; a link never replaces one.board/when nothing else is in it.basou board guideboth print this command (BOARD_INIT_SAVEin@basou/core). Neither suggests printing straight intoboard/board.yaml: the shell empties that file before init runs.@basou/core(Internal):boardInitText,BOARD_INIT_SAVE,BOARD_INIT_LANE_ID,BOARD_INIT_REVIEW_DUE_DAYS,effortStartOf,isBoardTimeZoneandboardInitStrings;basou boardstays experimental. init writes nothing, so it touches no invariant ofcompatibility.md, and the README does not change either.docs/spec/cli-commands.mdlists the subcommand.Why
Starting a board meant writing
board.yamlby hand and fixing it againstbasou board measure's errors. init gives a board that reads as printed, in the anchor's language. Its start date is the one the board page already uses.Printing straight into
board/board.yamlwould empty an existing board before init could refuse, so the save goes through a file of its own.Verification
pnpm -r build,pnpm typecheck,pnpm lint(the existing 4 warnings only),pnpm lint:lang,pnpm lint:paths,pnpm test:scripts,pnpm test:coverage: all 0.TZ=America/New_YorkandAsia/Tokyo.America/Los_AngelesandGMT.$&, newlines and bidi characters read back as written;sh: it writes once, refuses the second time with the board untouched, and leaves nothing behind when init fails;board.yamlthat is a link to nothing.basou board measurethen read the saved board.Review
One round of convergent review (review only), with the decided scope given as fixed. 10 findings (2 medium, 8 low), all fixed in the fourth commit:
time_zonethat measure refuses;mktempleft files in the temporary directory, andmvcould replace a board that appeared in between;board.yamlthat is a link to nothing got three contradictory answers;Not taken up:
mktempfile carries.Checklist
main.pnpm lint,pnpm typecheck, andpnpm testare all green locally.CHANGELOG.md## Unreleasedupdated.🤖 Generated with Claude Code