Files
pbakaus_impeccable/tests/oracle/golden/pin-opencode-skips-foreign-command.json
T
Paul BakausandClaude Fable 5.1 50684ececb Port: OpenCode slash command bridge (#483)
Upstream sha 9736a9f6e9.

OpenCode does not honor `user-invocable: true` on SKILL.md frontmatter, so a
pinned skill never reaches its slash menu. `pin` now writes
`commands/impeccable-<cmd>.md` on the OpenCode command schema instead, and
skips `.opencode` in the SKILL.md loop so no unreachable
`.opencode/skills/<cmd>` is left behind. `unpin` mirrors it, marker-guarded,
and reaches both scopes even when the skill itself is gone.

`find_opencode_commands_dirs` covers the project-local dir when the project
has the skill and the user config dir when Impeccable is installed globally,
resolving that dir the way the CLI does (`OPENCODE_CONFIG_DIR` ->
`XDG_CONFIG_HOME/opencode` -> `~/.config/opencode`).

The build-tooling half of the upstream change (transformers, the OpenCode
command the build generates, `root-commands-sync`) came in with the merge and
needed no port.

Verified against origin/main's pin.mjs across seven scenarios (no harness,
project scope, user scope, a foreign command file, pin then unpin, unpin over
a foreign file, unpin with nothing pinned): identical stdout, identical file
sets, identical file contents apart from the one deliberate difference.

Oracle: five `pin-opencode-*` cases, with a DELTAS entry for the bridge body
naming the launcher rather than `node .../context.mjs`.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vau2X53xGTjjTCXWMVBoNY
2026-09-03 13:07:22 -07:00

11 lines
337 B
JSON

{
"stdout": " SKIP: <WS>/.opencode/commands/impeccable-polish.md (non-pinned command already exists)\n",
"stderr": "",
"exit": 0,
"signal": null,
"files": {
".opencode/commands/impeccable-polish.md": "---\ndescription: hand written\n---\n",
".opencode/skills/impeccable/SKILL.md": "---\nname: impeccable\n---\n"
}
}