docs(skills): refactor-protocol — rename sweeps need word-boundary grep and an end-to-end test - #341
Merged
Conversation
…ep and an end-to-end test
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.
Encodes a lesson from the
visionset ui→visionset serverrename into the skill that governsimplementation tasks. Docs-only: three bullets at the tail of
## Scope discipline, no other filetouched.
The rule
command, subcommand, flag, or public symbol.
git grep -nwE "<name>"— alongside the phrase grep, which still covers prose and docs. Everyhit is triaged: updated, or named in the PR body as deliberately left.
that spawns the real process.
Why a phrase grep is structurally blind
The call sites that actually run a command spell its name as a separate argv element
(
["visionset", "ui", "--host", …]), so the contiguous textvisionset uinever appears in thefile that invokes it. The same applies to a name travelling as a config value, a dict key, or a
string-built identifier — which is why the sweep has to match the bare word, and why a test that
patches the implementation underneath the name can never notice the name is wrong.
cf. #333— wheregit grep -n "visionset ui"reported zero remaining hits whileexamples/http_end_to_end.pywas still invoking the removed command. A subprocess-based testcaught it; the unit test that patches
uvicorn.runcould not have.Placement
The bullets go at the end of
## Scope discipline, which already owns what counts as in scope —this is the "how you prove you covered it" beat. Same bold-lead voice and
— #NNNprovenance tagas the surrounding rules. The rest of the skill is untouched.
.agents/skills/is the canonical copy; the.claude/skills/symlinks are generated andgit-ignored.
Test plan
Everything
scripts/check.shruns, all three suites, green. A docs-only change should move notest outcome and no generated artifact, and none moved — the diff is one file, three insertions,
and all four drift gates (
openapi drift,generated client drift,mcp tool reference drift,version sync) pass.The run was executed in stages rather than as one
bash scripts/check.shinvocation, because thismachine kills any single command at ten minutes and the full run takes longer than that. Stages
and their exit codes:
pytest tests/kernelpytest tests/serverpytest tests/{architecture,cli,formats,mcp,scripts} test_versioning.pypytest tests/examplespytest tests/packagingwheelCI job owns itruff check/ruff format --checkmypy src/visionsetlint-importscheck.sh frontend generatedcheck.sh browsercf. #336— in a fresh worktreecheck.shstops at missingnode_modulesrather than failingloudly, so the run was preceded by
pnpm install --frozen-lockfile.