Skip to content

fix(skills): drop two ix commands that do not exist - #31

Open
KageBinary wants to merge 1 commit into
mainfrom
fix/dead-command-references
Open

fix(skills): drop two ix commands that do not exist#31
KageBinary wants to merge 1 commit into
mainfrom
fix/dead-command-references

Conversation

@KageBinary

Copy link
Copy Markdown
Collaborator

I checked every ix command this plugin references against the CLI's actual registered command list — enumerated by loading ix-cli/src/cli/register/oss.ts and reading program.commands, rather than trusting any documentation. That's 37 OSS commands + 13 Pro stubs. Two references did not resolve.

ix goalsix goal list

The CLI's command is goal, singular. goals exists only as a help-topic alias (workflows.ts:83) that forwards to goal's help — so ix goals --format json could never return data.

ix-plan ran it directly:

ix plans --format json
ix goals --format json      # <- no such command

The failure mode is quiet: no error surfaced to the user, the Pro branch's goal context just came back empty every time.

ix connectix docker start

This one never existed — there is no connect command anywhere in the CLI's history. ix-architecture used it as the recovery instruction:

"ix graph unavailable — run ix connect or check your connection."

So it sent users to a dead end at precisely the moment something was already broken. It now says to run ix docker start and confirm with ix status, which matches what the CLI itself prints for an unreachable backend since ix-infrastructure/Ix#333 — plugin and tool now agree.

What I checked and found fine

Worth stating, since it's most of the surface:

  • Pro gating is correct. All seven skills use [Pro] labels with explicit "skip if it errors" fallbacks, and ix-briefing.sh is gated behind ix_check_pro — OSS users skip it cleanly rather than erroring every session.
  • Token efficiency is already good. --format llm is used 66× in skills and 38× in agents; the remaining json uses are in hooks (which parse with jq, so json is correct) and against Pro commands.
  • No stale repo references from the June renames.
  • All other 29 referenced commands resolve.

Version bump

Bumped to 3.1.2 across plugin.json, marketplace.json and CHANGELOG.md. These are instructions Claude follows at runtime, so without a bump the fix reaches nobody — and CI enforces the two manifests match.

Verification

  • 83 hook tests pass, 0 failures
  • shellcheck: 0 errors across all shell scripts
  • all JSON parses; plugin.json / marketplace.json / CHANGELOG versions agree
  • re-ran the command-existence sweep after the edits: every referenced command now resolves

Checked every `ix` command the plugin references against the CLI's actual
registered command list (37 OSS + 13 Pro stubs, enumerated from
ix-cli/src/cli/register/oss.ts rather than from docs). Two did not resolve.

`ix goals` — the CLI's command is `goal`, singular. `goals` exists only as a
help-topic alias that forwards to `goal`'s help, so `ix goals --format json`
could never return data. ix-plan ran it directly, so the Pro branch of that
skill silently produced no goal context: no error surfaced, the section just
came back empty. Replaced with `ix goal list --format json`.

`ix connect` — never existed. There is no `connect` command anywhere in the
CLI's history. ix-architecture used it as the recovery instruction for an
unreachable graph, which sent users to a dead end at precisely the moment
something was already broken. It now says to run `ix docker start` and confirm
with `ix status`, which is what the CLI itself prints for an unreachable
backend, so the plugin and the tool now agree.

Also corrects a stale plugin version in IX_CLAUDE_PLUGIN_OVERVIEW.md (2.3.0).

Bumped to 3.1.2 across plugin.json, marketplace.json and CHANGELOG.md — these
are instructions Claude follows, so without a version bump the fix reaches
nobody.

83 hook tests pass, shellcheck clean, all JSON valid, versions consistent.

@KageBinary KageBinary left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

Reviewed. The ix connect half is straightforwardly right — connect is not a registered command in either the OSS CLI or @ix/pro, and pointing users at ix docker start + ix status (which docker is a real command) is a strict improvement, especially since that text fires at the moment something is already broken.

The ix goals half has the right conclusion but the wrong reason, and the CHANGELOG states it as fact.

The changelog says:

ix goals does not exist — replaced with ix goal list. The CLI's command is goal (singular); goals is only a help-topic alias that forwards to goal's help, so ix goals --format json could never return data.

That isn't accurate. goals is a real, fully implemented Pro command — Ix-pro/src/cli/commands/goals.ts:

.command("goals")
.description("List all goals")
.option("--status <status>", "Filter by status (active|all)", "all")
.option("--format <fmt>", "Output format (text|json)", "text")
.action(async (opts) => { const client = await createClient(); let intents = await client.listGoals(); ... })

I checked both invocations against a Pro-loaded install and they behave identically — ix goals --format json and ix goal list --format json both reach the auth layer, i.e. both resolve to real command implementations. Since this line only runs in the Pro branch of the skill, ix goals --format json was working.

The real defect is in the Ix repo. PRO_COMMANDS in ix-cli/src/cli/register/oss.ts is:

briefing, bug, bugs, decide, decisions, goal, patches, plan, task, plans, tasks, truth, workflow

goals is missing, while the other plural list commands — bugs, plans, tasks — are all present. So on an OSS install ix goal gives the documented The 'goal' command requires Ix Pro. and exit 1, but ix goals gives commander's "unknown command" instead. That breaks the stub contract the plugins' Pro detection depends on, and it's the same contract ix-cli/src/cli/__tests__/pro-stub-message.test.ts asserts for every other Pro command.

So:

  1. The change itself is fine to keepix goal list works and sidesteps the gap.
  2. Please correct the CHANGELOG wording, and the same line in IX_CLAUDE_PLUGIN_OVERVIEW.md. As written it will send the next person looking for a nonexistent alias, and it also undercuts the "every ix command referenced anywhere in the plugin was checked against the CLI's registered command list" claim — that check appears to have been run against the OSS list only, which is exactly why goals looked missing.
  3. The actual one-line fix belongs in the Ix repo: add { name: "goals", desc: "List all goals" } to PRO_COMMANDS. Happy to open that if you want it.

ix-opencode-plugin#13 makes the identical ix goalsix goal list change and has the same issue.

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