Skip to content

Docs/install status and pr titles - #9

Merged
AlleyBo55 merged 3 commits into
masterfrom
docs/install-status-and-pr-titles
Jul 26, 2026
Merged

Docs/install status and pr titles#9
AlleyBo55 merged 3 commits into
masterfrom
docs/install-status-and-pr-titles

Conversation

@AlleyBo55

Copy link
Copy Markdown
Owner

No description provided.

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
@AlleyBo55
AlleyBo55 merged commit e6514ad into master Jul 26, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant