IW-710: review-state path subcommand and write --from-stdin default output #713

Merged
mph merged 12 commits from IW-710 into main 2026-10-04 18:30:09 +00:00
Member

Summary

Callers that are not Scala (bash hooks, agent instructions, E2E scripts) can now find the review-state card through the core instead of copying the IW-702 out-of-tree layout.

Changes

  • iw review-state path [--key K] [--slice NN-SLICE-SLUG] prints the absolute card path as the only stdout line. Exit 0: the card exists. Exit 1 with the path: no card. Exit 1 with empty stdout and Error: on stderr: the location does not resolve. It never moves, writes or commits a card.
    • Without --key, the key comes from the current branch. With --key, it resolves from any worktree (common git dir). It routes on the parsed key kind, not on isFramedEffort(cwd).
    • --slice names an effort slice directly, so path --key <slug> --slice <NN-slug> works from the main checkout with no .active-slice pointer.
  • write --from-stdin without --output writes to the same default card as write with flags. With an explicit --output, behaviour is unchanged.
  • Pure ReviewStateLocation.namedSliceLocations; sliceLocations uses it, so the layout stays in one place.
  • Docs: docs/commands/review-state.md, docs/review-state-cards.md, README.md, docs/api/ReviewStatePath.md, docs/api/ReviewStateLocation.md.

Testing

  • Unit: ReviewStateHarnessTest +27, ReviewStateLocationTest +6; HelpTest subcommand list updated.
  • E2E: test/review-state.bats +4 (linked worktree, second worktree, stdin default, --key --slice from the main checkout).
  • Phase PR #711: CI green (compile, format, lint, test, dashboard-build).
  • Two code review iterations: 0 critical; review follow-ups filed as #712.

Review packet: project-management/issues/IW-710/review-packet.md

Release notes

Ships in the same release as IW-702 (the issue decides this: --commit is removed with no shim, and kanon dev-docs#439 follows both at once).

Karta stavu práce, kterou čte přehled (dashboard) a podle které se řídí automatizované postupy, se od minulé změny ukládá mimo pracovní adresář projektu, do společného úložiště repozitáře. Skripty, háčky a instrukce pro agenty ji proto dosud musely hledat tak, že si samy skládaly její umístění, a každá změna tohoto umístění je mohla rozbít. Tato změna přináší jednoduchý a spolehlivý způsob, jak se na kartu zeptat přímo nástroje iw.

Nový příkaz iw review-state path vypíše úplnou cestu ke kartě aktuální práce. Pokud karta existuje, příkaz skončí úspěšně; pokud zatím neexistuje, vypíše cestu, kde by měla být, a dá najevo, že tam nic není. Kartu pak lze přečíst běžnými nástroji, aniž by volající musel cokoli vědět o tom, jak jsou karty uloženy. Příkaz kartu pouze vyhledá: nikdy ji nepřesouvá, nemění ani neukládá do historie.

Cestu lze zjistit i pro jinou práci než tu, ve které se právě nacházíte, a to zadáním čísla úkolu nebo názvu většího celku (efortu). Protože karty úkolů leží ve společném úložišti, dostanete stejnou odpověď z kteréhokoli pracovního adresáře téhož repozitáře. U efortů lze navíc určit konkrétní dílčí část (slice), takže cestu k její kartě zjistíte i z hlavního adresáře projektu nebo z jiného pracovního adresáře.

Zápis celé karty předané na vstupu nyní funguje stejně pohodlně jako zápis jednotlivých údajů: pokud neurčíte, kam se má karta uložit, uloží se automaticky na správné místo pro aktuální práci. Kdo cílové místo zadá výslovně, nepozná žádnou změnu.

Změna vychází ve stejném vydání jako přesun karet mimo pracovní adresář, takže navazující nástroje mohou přejít na nový způsob najednou a už nemusejí znát vnitřní uspořádání úložiště.

🤖 Generated with Claude Code

https://claude.ai/code/session_01XUPuhuJzRub8vdkq4TR8Se

Closes #710

## Summary Callers that are not Scala (bash hooks, agent instructions, E2E scripts) can now find the review-state card through the core instead of copying the IW-702 out-of-tree layout. ## Changes - **`iw review-state path [--key K] [--slice NN-SLICE-SLUG]`** prints the absolute card path as the only stdout line. Exit 0: the card exists. Exit 1 with the path: no card. Exit 1 with empty stdout and `Error:` on stderr: the location does not resolve. It never moves, writes or commits a card. - Without `--key`, the key comes from the current branch. With `--key`, it resolves from any worktree (common git dir). It routes on the parsed key kind, not on `isFramedEffort(cwd)`. - `--slice` names an effort slice directly, so `path --key <slug> --slice <NN-slug>` works from the main checkout with no `.active-slice` pointer. - **`write --from-stdin` without `--output`** writes to the same default card as `write` with flags. With an explicit `--output`, behaviour is unchanged. - Pure `ReviewStateLocation.namedSliceLocations`; `sliceLocations` uses it, so the layout stays in one place. - Docs: `docs/commands/review-state.md`, `docs/review-state-cards.md`, `README.md`, `docs/api/ReviewStatePath.md`, `docs/api/ReviewStateLocation.md`. ## Testing - Unit: `ReviewStateHarnessTest` +27, `ReviewStateLocationTest` +6; `HelpTest` subcommand list updated. - E2E: `test/review-state.bats` +4 (linked worktree, second worktree, stdin default, `--key --slice` from the main checkout). - Phase PR #711: CI green (compile, format, lint, test, dashboard-build). - Two code review iterations: 0 critical; review follow-ups filed as #712. Review packet: `project-management/issues/IW-710/review-packet.md` ## Release notes Ships in the same release as IW-702 (the issue decides this: `--commit` is removed with no shim, and kanon dev-docs#439 follows both at once). Karta stavu práce, kterou čte přehled (dashboard) a podle které se řídí automatizované postupy, se od minulé změny ukládá mimo pracovní adresář projektu, do společného úložiště repozitáře. Skripty, háčky a instrukce pro agenty ji proto dosud musely hledat tak, že si samy skládaly její umístění, a každá změna tohoto umístění je mohla rozbít. Tato změna přináší jednoduchý a spolehlivý způsob, jak se na kartu zeptat přímo nástroje iw. Nový příkaz `iw review-state path` vypíše úplnou cestu ke kartě aktuální práce. Pokud karta existuje, příkaz skončí úspěšně; pokud zatím neexistuje, vypíše cestu, kde by měla být, a dá najevo, že tam nic není. Kartu pak lze přečíst běžnými nástroji, aniž by volající musel cokoli vědět o tom, jak jsou karty uloženy. Příkaz kartu pouze vyhledá: nikdy ji nepřesouvá, nemění ani neukládá do historie. Cestu lze zjistit i pro jinou práci než tu, ve které se právě nacházíte, a to zadáním čísla úkolu nebo názvu většího celku (efortu). Protože karty úkolů leží ve společném úložišti, dostanete stejnou odpověď z kteréhokoli pracovního adresáře téhož repozitáře. U efortů lze navíc určit konkrétní dílčí část (slice), takže cestu k její kartě zjistíte i z hlavního adresáře projektu nebo z jiného pracovního adresáře. Zápis celé karty předané na vstupu nyní funguje stejně pohodlně jako zápis jednotlivých údajů: pokud neurčíte, kam se má karta uložit, uloží se automaticky na správné místo pro aktuální práci. Kdo cílové místo zadá výslovně, nepozná žádnou změnu. Změna vychází ve stejném vydání jako přesun karet mimo pracovní adresář, takže navazující nástroje mohou přejít na nový způsob najednou a už nemusejí znát vnitřní uspořádání úložiště. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01XUPuhuJzRub8vdkq4TR8Se Closes #710
review-state: add a path subcommand and a default output for write --from-stdin

Artifacts:
- analysis.md
- issue.md

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XUPuhuJzRub8vdkq4TR8Se
Resolved:
- analysis.md: What `path --key <effort-slug>` does from a worktree other
  than the effort's → Option C with `--slice <NN-slice-slug>` on `path` in
  this issue; an effort key without `--slice` uses the cwd pointer
  (advice from the kanon dev-docs#439 session: effort-status reads named
  slices from the main checkout)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XUPuhuJzRub8vdkq4TR8Se
review-state: add a path subcommand and a default output for write --from-stdin

Artifacts:
- tasks.md

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XUPuhuJzRub8vdkq4TR8Se
Issue: IW-710
Phase: 1 - path subcommand with --slice + write --from-stdin default + docs

This commit marks the checkpoint for phase 1 context generation.
Use wf-implement IW-710 to return to this point.

analysis.md: the Testing Strategy and Implementation Sequence sections
now agree with the Option C decision (a domain slice-location function).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XUPuhuJzRub8vdkq4TR8Se
path subcommand with --slice + write --from-stdin default + docs

Artifacts:
- phase-01-tasks.md

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XUPuhuJzRub8vdkq4TR8Se
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XUPuhuJzRub8vdkq4TR8Se
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XUPuhuJzRub8vdkq4TR8Se
- review-state path prints the card location; exit 0 when the card exists, 1 with the path when not, 1 with empty stdout when unresolved
- path --key/--slice resolve an issue or effort-slice card from any worktree, routed on the key kind
- write --from-stdin without --output writes to the default card
- Docs regenerated and updated; 27 harness, 6 unit and 4 BATS tests added
fix: add path to the review-state subcommand list HelpTest pins (phase 1 pre-push)
All checks were successful
CI / changes (pull_request) Successful in 5s
CI / contract (pull_request) Has been skipped
CI / format (pull_request) Successful in 11s
CI / lint (pull_request) Successful in 14s
CI / compile (pull_request) Successful in 1m49s
CI / dashboard-build (pull_request) Successful in 1m29s
CI / test (pull_request) Successful in 18m5s
ca02600a14
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XUPuhuJzRub8vdkq4TR8Se
Reviewed-on: #711
workflow(IW-710): review packet, release notes, follow-ups filed as #712
All checks were successful
CI / changes (pull_request) Successful in 5s
CI / contract (pull_request) Has been skipped
CI / format (pull_request) Successful in 11s
CI / lint (pull_request) Successful in 15s
CI / compile (pull_request) Successful in 1m40s
CI / dashboard-build (pull_request) Successful in 1m28s
CI / test (pull_request) Successful in 18m2s
81770505c4
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XUPuhuJzRub8vdkq4TR8Se
mph merged commit 09625628ac into main 2026-10-04 18:30:09 +00:00
Sign in to join this conversation.
No description provided.