Phase 6: One index, one truth #535
No reviewers
Labels
No labels
agent-ready
bug
contract
documentation
duplicate
enhancement
good first issue
help wanted
invalid
needs-human
needs-input
question
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
iterative-works/iw-cli!535
Loading…
Reference in a new issue
No description provided.
Delete branch "IW-463-phase-06"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Phase 6 of IW-463. The declarations become the only place a caller can read a command fact from, and they become reachable from a terminal.
iw.core.commands.Helprenders three things fromCommandRegistry: the grouped index, one command's full help, and a parse rejection that names the offending flag.iw --listbecomes a seven-group index of 25 commands. The comment-header scrape and all 25// USAGE:lines are deleted.Read this before merging
Do not squash Steps 3-5. The rollback target is a single commit:
a5d0ed1ee3a53bfc61089174Reverting
e3a53bfcalone leaves the classpath resolution and the fallback standing but unreached. Reverting one squashed commit takes them with it and leaves the launcher unable to answer any help request.Wait for
CI / test. It is the job that packages a release and runstest/bootstrap.bats— the only proof that the classpath tier every consumer install uses works. The other checks going green does not cover it.Accepted regression, one release cycle
iw --describe kanon/implementused to print a scrapedPurpose:/Usage:. It now prints a name plus a label. Plugin and project commands have no declaration until Phase 7 gives their owners a command index. This is deliberate: keeping the scrape for plugins would keep the drift this issue exists to remove.What the review changed
Two rounds, six reviewers. Iteration 1 found 5 critical; iteration 2, over the fixes, found 0.
The most serious: the phase as first written re-created the defect this issue exists to remove, one layer up. It moved the command roster from filesystem discovery to a hand-kept registry while leaving
iw-runresolving built-ins by file existence, with no gate between them.core/test/CommandRegistryTest.scalanow diffs the two sets in both directions, and reads the launcher's own name rule out ofiw-runrather than restating it.Also closed: a filename in a cloned repository (
build me.scala, orreport.md.scalaby accident) emptied the whole command index; six assertions across the phase could not fail; andIW_HELP_CLASSPATHwas accepted unvalidated intojava -cp.What this changes for everyone after it
test/bootstrap.batswas silently skipping all five cases — a bats skip reports asok— so every earlier phase's green suite was green with the release path untested. It now runs, and both CI workflows package a release first, gated byIW_REQUIRE_RELEASE=1.commands/*.scalafile now requires aCommandRegistry.topLevelrow, orcore.testgoes red.Both are documented in
docs/testing.md.Still open for the reviewer
phase-06-tasks.md:414): extendingCoreJarTest/DashboardJarTest. The argument for leaving it is that the classpath choice is made in Bash, so no falsifiable assertion exists in those Scala files. Accept or reject it.LESSONS.md: the command-name grammar exists in thirteen literal copies, two of which already disagree; andExternalCommand, a value object with a validating constructor, sits in the presentation package.LESSONS.mdcarries severalDecision: _pending_entries awaiting triage.Verification
IW_REQUIRE_RELEASE=1 ./iw ./test— exit 0, 244 ok, 0 failures, 0 skips.Latency, recorded not asserted: release
--listand<cmd> --helpboth 0.23-0.24 s; dev checkout both 0.35-0.38 s.analysis.md's 0.09 s does not reproduce — the JVM alone costs 0.21-0.26 s.<cmd> --helpfell from 0.95 s under scala-cli.Review packet:
project-management/issues/IW-463/review-packet-phase-06.md🤖 Generated with Claude Code
https://claude.ai/code/session_01WehHdHp9MRKJkrhGFiKNxa