❯ go run cmd/entire/main.go labs

Claude Code·Opus 4.8[1m]·Soph·3mo ago·37min·4 Checkpoints·3 file changes·+102/-3·21.2K tokens

❯ go run cmd/entire/main.go labs Labs

These are newer Entire workflows we are actively refining. They are available to try now, but details may change based on feedback.

Available experimental commands: entire review Run configured review skills against the current branch entire investigate Run a multi-agent investigation against a topic, issue, or seed doc entire org Manage Entire organizations (create, list) entire project Manage Entire projects (create, list) entire repo Manage Entire repositories (create, list, get, delete) entire grant Manage access grants and org membership (org, project, repo)

3mo ago·16.4s

I see the labs output. There's no question or instruction attached — what would you like me to do here?

One thing I notice in the output: the column alignment is off because investigate is longer than the other command names:

Every other description starts at a fixed column, but investigate's description gets squeezed right after it with a single space. If you'd like, I can fix that formatting so the descriptions line up. Otherwise, let me know what you're after.

yes, I'd like to fix formatting, can we also future proof that a bit if not super complex?

3mo ago·1m

Fixed. The descriptions now align in a single column.

The change makes alignment self-adjusting: instead of a hardcoded width of 16, renderExperimentalCommands computes the column width from the longest invocation in the slice. Add a longer command later and it'll just work. I also made padRight count runes rather than bytes, so a future command name with multi-byte characters won't throw off the alignment.

Want me to run mise run fmt && mise run lint before you commit?

can/should we add some tests?

3mo ago·58.8s

Done. Tests pass, lint is clean (0 issues), formatting is good.

Summary

Fix (labs.go): renderExperimentalCommands now computes the column width from the longest invocation instead of the hardcoded 16, so entire investigate no longer breaks the alignment. Both it and padRight count runes rather than bytes, future-proofing against multi-byte command names.

Tests (labs_test.go): two new unit tests on the rendering helper —

  • TestRenderExperimentalCommands_SummariesAlign — pins the regression: every summary in the real experimentalCommands registry starts at the same column.
  • TestRenderExperimentalCommands_ColumnWidthAdjustsToLongest — verifies the column auto-widens when a longer invocation is added, and rows stay aligned.

Both work off renderExperimentalCommands directly, so they'll keep guarding alignment as commands are added or renamed. Want me to commit this?

The new rune-based padding in renderExperimentalCommands/padRight is intended to fix alignment for multi-byte UTF-8 invocations, but the added tests don’t currently cover a case where len(value) >= width while utf8.RuneCountInString(value) < width (the scenario that previously caused misalignment). Adding a regression test with a multi-byte rune ensures this behavior doesn’t regress.c

3mo ago·8m

Done. Added TestRenderExperimentalCommands_MultiByteInvocationAligns, which covers exactly the gap you flagged:

  • Uses entire ▶▶ — 9 runes but 13 bytes — alongside a 12-rune invocation, so the column width is 12 and this row hits the len(value) >= width but RuneCountInString(value) < width case.
  • Includes a precondition assertion so the test fails loudly if someone changes the fixture in a way that no longer exercises the multi-byte path.
  • I verified it's a true regression guard: reverting padRight to byte-based logic fails it ([15 12] misaligned), and the rune-based fix passes it.

Lint is clean (0 issues), formatting good. Ready to commit whenever you'd like.