Docs/install status and pr titles - #9
Merged
Conversation
The hero showed a single command and said "There is no step two", when kirobuff install *is* step two: you need the binary first. Now it shows both, labelled, and the install section is split into "get the binary" and "configure Kiro CLI". Install status is now measured rather than asserted. All three binary paths were verified against v0.1.1: go install, the curl script with checksum verification, and make install from source. The README previously called the script "not usable yet", which stopped being true when v0.1.1 shipped assets, and separately claimed go install "reports v0.0.1", which is now wrong. Homebrew genuinely does not work and stays marked as unavailable: brew install AlleyBo55/tap/kirobuff fails with "No available formula or cask", because the tap repository and token do not exist. Two findings added to known limits: - pkg.go.dev tokenises the module name as one word, so "kiro buff" spaced returns nothing while kirobuff, KiroBuff, kiro and kiro cli all match. Not fixable from this repository. - pkg.go.dev documents the latest tag rather than the default branch, which is why exporting the packages appeared to do nothing until v0.1.0 was cut. Two process notes added to CONTRIBUTING, both learned the hard way: - GitHub's default squash title is the branch name, so "Fix/ci lint config (#7)" has no colon and falls through to patch. One release here was classified major only because the squash body happened to keep a BREAKING CHANGE footer. Left unaddressed, kirobuff version next stops reflecting reality. - Do not push to the default branch. A release fix went straight to master during development, bypassing branch protection and leaving an unsigned commit where signatures are required. kirobuff preflight blocks exactly this with [blocker] protected-branch; the check existed and was ignored. Assisted-by: Claude:claude-opus-4.7 kiro-cli gofmt go-vet go-test golangci-lint
Probing the preToolUse rules on a real install found six working bypasses across two rules: deleting a test: rm ok git rm ok mv X unlink X find -delete X signing off: -s ok git config format.signOff X --trailer X All eight are blocked now, with a paired negative test for each so ordinary mv, rm and git config still work. But closing holes one at a time is the wrong shape: every command rule invites the next variation and the list is never complete. internal/sentinel measures the outcome instead. It counts test files and assertions across the repository and warns when the total falls below the highest it has seen, so it catches deletion by any route without ever looking at a command. Verified against the three methods the rules originally missed: deleting the file, moving it out of the tree, and truncating it in place. - Installed on the stop hook, since it needs the repository state after a turn rather than a command to inspect. A stop hook cannot block, only warn, so this finds the loss a minute later rather than preventing it. Both layers together: preToolUse stops the obvious move, the sentinel catches the rest. - The peak only rises. Recording a drop as the new baseline would let coverage ratchet down one turn at a time with no warning at all. - kirobuff sentinel accept exists because deleting an obsolete test is legitimate, and it is a separate command rather than a flag: the baseline is in enforce's protected paths, so an agent cannot lower it in the same turn that removed the test. - Assertion counting reuses enforce.CountAssertions, so the two layers can never disagree about what an assertion is. - Symlinks are skipped during the scan. gosec flagged the read-in-walk as a TOCTOU traversal risk, and skipping is both the fix and the correct semantics, since a symlinked test would otherwise be counted twice. Assisted-by: Claude:claude-opus-4.7 kiro-cli gofmt go-vet go-test golangci-lint
gosec flags any filesystem operation on a WalkDir path as a symlink TOCTOU risk. The symlink skip removes the route, and the complete fix is os.Root, which requires Go 1.24 while this module targets 1.21. Annotated at the site with that reasoning rather than excluding the rule globally, so the next reader sees the mitigation next to the call. Assisted-by: Claude:claude-opus-4.7 kiro-cli gofmt go-vet go-test golangci-lint
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.
No description provided.