Conversation
…1389) commands/run.md is #1389's mechanism but still listed all nine commands in the picker. Move setup, scaffold, triage, curate, changelog and install-audit to commands/run/*.md -- the plugin harness discovers slash commands from top-level commands/*.md only, never recursively, and there is no frontmatter equivalent of a skill's user-invocable: false for a command file, so a subdirectory is the only mechanism that demotes one without deleting it. Each stays reachable via /oss:run's own procedure or its forcing override (/oss:run setup, and so on). commands/tick.md and commands/release.md stay top-level, deliberately: each is named by dozens of test files and several scripts by literal path (spawn wiring, board-read caps, release-gate plugin-root checks), and /oss:tick is the command a maintainer's fingers already know. Migrating either is its own, separately-reviewable change -- see CLAUDE.md and docs/overview.md for the full argument and what is left. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012UYdzDHX3k3C2Eh7B5hRVH
) Two bare, now-dead invocation instructions fixed in files already part of this diff's own set: commands/run/install-audit.md and commands/run/triage.md still said `/oss:setup`/`/oss:scaffold` where only `/oss:run setup`/`/oss:run scaffold` resolve after the demotion. Also finished the docs/autonomy.md edit that was left uncommitted, and its tracking trap.d fragment. Both reviewers independently found a much larger version of the same class across scripts/oss_config.py, scripts/doctor.py, scripts/oss_rules.py (whose generated per-repo rule text is affected too, not just this plugin's own prose), scripts/trap_curate.py, scripts/workspace_routes.py, scripts/select_issues.py, scripts/statusline.py, scripts/scaffold.py, plus commands/doctor.md and commands/tick.md -- files outside this lane's own touched set, one of them (statusline.py) plausibly live territory for a concurrently-dispatched lane. Ranked misreports (non-blocking) and logged to trap.d/1389.stale-remedy-strings-picker-demotion.md for a follow-up sweep rather than fixed here. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012UYdzDHX3k3C2Eh7B5hRVH
A third self-review round (two spawns against the prior fix commit alone, required by fix_commit_scope.py's needs-second-pass verdict on a 5-file diff) found the trap.d fragment's per-bullet line citations implied exhaustive counts for commands/run/install-audit.md and commands/doctor.md when they were spot checks. Reworded to say so explicitly and to name the extra instances the reviewer found, so a future curator does not under-scope the deferred sweep from the bullets alone. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012UYdzDHX3k3C2Eh7B5hRVH
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.
What this does
Part of #1389 ("One entry point: /oss:run asks what this repo needs now"). PR #1404 built
/oss:runas the mechanism but left the picker showing all ninecommands/*.mdfiles. This closes the picker-visibility half for six of the eight absorbed commands:setup.md,scaffold.md,triage.md,curate.md,changelog.md,install-audit.mdmove fromcommands/*.mdtocommands/run/*.md.commands/non-recursively -- confirmed via two claude-code-guide research agents against the plugins-reference doc (subdirectories not scanned) and the frontmatter reference (no user-invocable/disable-model-invocation equivalent hides a command from the picker the way it hides a skill -- that key exists only for skills). A subdirectory move genuinely removes the file from the picker while it stays reachable prose; there is no non-destructive alternative for a command file./oss:run <step>(the existing forcing override) or a direct file read -- never again as a bare/oss:setup-style invocation.What stays, deliberately
commands/tick.mdandcommands/release.mdstay top-level. Each is named by literal path in dozens of test files and several scripts -- spawn wiring, board-read caps, release-gate plugin-root checks, chain-of-handoff assertions that read the file's own content, not just its path -- coupling deep enough that migrating either is its own, separately-reviewable change./oss:tickis also the command a maintainer's fingers already know, so keeping it live and unchanged during this transition is a deliberate choice, stated in CLAUDE.md and docs/overview.md, not an oversight. The picker is now four commands (run, doctor, tick, release), down from nine.Coupling counts that drove the split (measured, not estimated)
tick.md ~38 test files, release.md ~35; the six demoted commands 0-7 each (curate.md: zero). Full table in the session note.
Tests
New tests/test_picker_demotion_1389.py: 5 tests, including a must-fire and a must-not-fire control pinning the non-recursive-glob mechanism itself. Verified red against origin/main's tree (copied via git show) before the move, green after. ~20 existing test files' Path(...) constants and a few glob-based coverage lists (COMMANDS, EXECUTABLE_PROSE, the shipped_op_spellings loop) updated so nothing silently stopped being checked. 827 passed, 1 pre-existing unrelated skip, across the full targeted + guard battery (lane_setup.py's own guard derivation plus every file with a functional path reference to a moved command). python3 scripts/assemble_changelog.py --check: ok, 16 fragments.
Self-review
Both spawns (Explore, oss:auditor) ran twice: once against the full lane diff, once more against the fix-for-findings commit alone (fix_commit_scope.py returned needs-second-pass, 5 files touched). Round 1: 3 + 2 findings, all misreports (non-blocking) -- a handful of bare /oss:setup//oss:scaffold invocation strings left stale by the demotion, in files both inside and outside this lane's touched set. Fixed the in-scope ones (commands/run/install-audit.md, commands/run/triage.md); logged the much larger out-of-scope sweep (8 scripts, commands/doctor.md, commands/tick.md, and scripts/oss_rules.py's own generated per-repo rule text) to trap.d/1389.stale-remedy-strings-picker-demotion.md rather than fixing it here -- it crosses into another concurrently-dispatched lane's territory (fix/1405 touches scripts/statusline.py) and scripts/oss_rules.py's fix is not a simple substitution. Round 2: 0 + 2 findings, the second round's two findings being that the trap.d fragment's own line citations implied exhaustive counts when they were spot checks -- fixed in a third, 1-file commit (fix_commit_scope.py: within-scope, no further round needed).
below-bar note: docs/autonomy.md's stale /oss:scaffold example-list mention and two paragraphs of pre-#1404 launcher-decision staleness in docs/open-the-workspace.md and docs/install.md were found adjacent to this diff. The autonomy.md one-liner was fixed in place (cheap, same subsystem). The other two are logged to trap.d/1389.stale-launcher-docs-from-1404.md as below-bar: a real, pre-existing staleness from PR #1404's own launcher rewrite, not reachable as a one-sentence fix (they need a line-by-line re-verification against current bin/oss-workspace behaviour), and not this diff's own regression.
Changelog
changelog.d/1389.changed.md (a second fragment for #1389, alongside PR #1404's existing 1389.added.md).
Part of #1389.
🤖 Generated with Claude Code
https://claude.ai/code/session_012UYdzDHX3k3C2Eh7B5hRVH
[AI-generated]