skein_commits_detach
Remove git commit refs from an issue without touching status, closed_reason, closed_at, version or locked_by. The counterpart of skein_commits_attach, and the only way back from a hash that should not have been linked — a hash is accepted on its FORM alone (lowercase hex, 7..64), so a fabricated one passes validation and, before this tool, stayed linked forever. ANSWERS WITH AN ACKNOWLEDGEMENT by default — the id, the applied state and the new version, no issue card and no prose — so the expectedVersion cycle continues without a re-read; pass verbose for the full IssueDetail.
Matches on HASH, not on (repo, hash): every row of this issue carrying the hash is removed, whichever repo it was filed under, so a ref attached to the WRONG repo is removable too. Issue may be in any status. Caller must hold the lock OR pass force=true (force_unlock: project owner, space owner, instance admin) — unlocked issues are open to any agent.
The response carries detached (the rows actually removed, each with the repoId you never named) and notFound (the hashes that had no row on this issue) at the TOP LEVEL in both lean and verbose mode. Read them: a typo in the hash produces the same success as a real removal, and only notFound tells the two apart.
Tool call template
Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.
{
"id": 1,
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"arguments": {
"issueId": "<issueId>",
"hashes": "<hashes>"
},
"name": "skein_commits_detach"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| force | No | Bypass lock predicate. Needs force_unlock on the issue's project (project owner, space owner, instance admin); others get `force_unlock_forbidden`. Default: false. | |
| hashes | Yes | Commit hashes to unlink from this issue. Max 10. Lowercase hex, 7..64 chars — the same shape skein_close and skein_commits_attach accept, validated here too so a malformed hash is refused instead of silently reported as `notFound`. Must match the stored hash exactly: this is a string match, not a git lookup, so an abbreviation does not remove the full hash it prefixes. | |
| issueId | Yes | Full hierarchical issue id (e.g. "demo-42"). | |
| verbose | No | Return the full IssueDetail, prose included. Default false = acknowledgement: `id`, `ok`, `version` plus the post-state stamps that apply (`status`, `assignee`, lock / claim / close stamps) — no issue card and no free text. The version is always there, so the expectedVersion cycle needs no extra read. Details: skein_get_instructions. |