Skip to content

fix: honest command descriptions for discovered vs bundled skills#594

Merged
marcusrbrown merged 1 commit into
mainfrom
fix/honest-skill-command-prefixes
Jul 7, 2026
Merged

fix: honest command descriptions for discovered vs bundled skills#594
marcusrbrown merged 1 commit into
mainfrom
fix/honest-skill-command-prefixes

Conversation

@marcusrbrown

Copy link
Copy Markdown
Owner

Discovered (user/project) skills registered as slash commands were labelled (Systematic - Skill) ... in their description — falsely implying Systematic authored them. They are the user's own skills. This drops the prefix from discovered-skill commands entirely (they now show their own description) and shortens the bundled-skill prefix to (Systematic) , matching bundled plain commands.

Changes

  • Discovered skills → honest description: loadDiscoveredSkillAsCommand uses the skill's own frontmatter description (fallback <name> skill), no Systematic prefix.
  • Bundled skills(Systematic) : SKILL_DESCRIPTION_PREFIX drops the - Skill qualifier.
  • isSystematicCommandConfig recognizes only (Systematic) . The retired (Systematic - Skill) label needs no migration branch: OpenCode applies config-hook mutations in memory per load and never persists them (verified against v1.17.6 source — the hook result is discarded, config is rebuilt from disk every launch), so a previously-injected entry can never reappear as existing config.

Consequence

Discovered-skill commands are now unmarked, so the merge treats them as add-if-absent and no longer refreshes or removes them across reloads. This is fine: every launch rebuilds config from disk and simply omits deleted skills, and the prior-art plugins this feature is modelled on don't do marker-based cleanup either. A user's own same-named command still wins.

Verification

  • 1072 unit tests pass (bundled prefix → (Systematic), discovered → raw description, the removal test flipped to assert persistence, a new test locking honest attribution).
  • bun run typecheck, content-integrity, and lint all clean. Zero (Systematic - Skill) remain anywhere in the repo.

…ills

Discovered (user/project) skills registered as commands were labelled
"(Systematic - Skill) ...", falsely implying Systematic authored them.
They are the user's own skills — drop the prefix entirely and use the
skill's own description.

Bundled Systematic skills-as-commands lose the "- Skill" qualifier too, so
their prefix reads "(Systematic) " — matching bundled plain commands.

isSystematicCommandConfig now recognizes only "(Systematic) ". The retired
"(Systematic - Skill) " label needs no migration path: OpenCode applies
config-hook mutations in memory per load and never persists them, so a
previously-injected entry can never reappear as existing config. Discovered
commands are consequently unmarked — add-if-absent, not refreshed or cleaned
across reloads, which is fine since every launch rebuilds config from disk
and simply omits deleted skills.

@fro-bot fro-bot left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Verified the diff directly (checked out pr-594, ran typecheck/lint/full test suite) against the stated intent: discovered (user/project) skills should show their own honest description with no Systematic attribution, while bundled skills/commands share one (Systematic) marker.

Verdict: PASS

Blocking issues

None

Non-blocking concerns

  • loadDiscoveredSkillAsCommand inlines skill.description || \${skill.name} skill`instead of reusingformatSkillDescription's fallback logic — minor duplication of the "empty description → skill`" fallback across two files. Acceptable since the two functions now have genuinely different behavior (prefix vs. no prefix), but worth a shared helper if a third consumer appears.
  • The "add-if-absent, never refreshed/removed" behavior for discovered-skill commands (now unmarked) is a real semantic change from the prior marker-based cleanup, but the reasoning in the code comment and PR description is sound: OpenCode never persists config-hook mutations back to disk, so there's no stale-entry risk to clean up. Confirmed via the updated test (discovered-skill command persists after its skill is deleted from disk) that this is intentional and tested, not an oversight.
  • isSystematicCommandConfig dropping the retired (Systematic - Skill) string means any command literally carrying that legacy string in a user's own on-disk config (extremely unlikely, but theoretically possible if a user copied an old emitted value into their config) would no longer be recognized/refreshed as Systematic-owned and would need manual removal. Low likelihood, no migration needed per the PR's own analysis, and matches the "user's own command wins" principle already in place.

Missing tests

None — the diff includes a direct test locking honest attribution (no (Systematic substring) for discovered skills, updates all previously-hardcoded (Systematic - Skill) expectations to (Systematic), and flips the "orphaned command removed" test to "persists" with a comment explaining why that's correct.

Risk assessment: LOW

Small, self-contained change (two source files, both existing exports/behavior, no new public API surface). No security implications — the change only affects a description string that is either the user's own skill frontmatter (already trusted, sourced from disk they control) or a static bundled prefix constant; no template/execution path changes. Verified: bun run typecheck clean, Biome clean, zero remaining (Systematic - Skill) references repo-wide, and the full suite (1123 tests) passes. Blast radius is limited to command descriptions shown in OpenCode's command palette — cosmetic/trust-labeling only, not functional behavior of skill execution.


Run Summary
Field Value
Event pull_request
Repository marcusrbrown/systematic
Run ID 28859810984
Cache hit
Session ses_0c3d9b79bffeogeWdZ6nsNtUDn

@marcusrbrown marcusrbrown merged commit f6727e9 into main Jul 7, 2026
11 checks passed
@marcusrbrown marcusrbrown deleted the fix/honest-skill-command-prefixes branch July 7, 2026 10:41
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.

2 participants