Description
The GitHub store's write verb creates each issue with --parent and --blocked-by on gh issue create (skills/bmad-preview-ticketing/config/gh-ticketing.toml, lines 51-52). gh creates the issue first and applies those relations afterwards (pkg/cmd/issue/create/create.go, DeferredUpdateIssue), and it prints the url only when both steps succeed. When the relation step fails, the issue exists but the agent never sees its number, so tracker_id is never written back and the next publish files the ticket again.
The error doesn't give it away either: for a stale reference it reads resolving --parent reference "N": ..., which sounds like a check that ran before anything was created.
Steps to reproduce
- With gh 2.101.0, in any repository:
gh issue create --title test --body x --blocked-by 999999 (or --parent 999999).
- It exits 1 and prints no url.
gh issue list --state all shows the new issue anyway.
Through the skill, headless in Claude Code: a gh wrapper let the create succeed, then failed the relation step with a rate-limit error and printed no url, the way gh does, and a second publish ran clean. With a smaller model the agent retried the create, and story 1 of two was filed four times in 2 of 3 trials. A larger model found the orphan by title and kept one issue per story in 6 of 6.
Expected behavior
One issue per ticket, with its number in the ticket file, however many times publish runs.
Actual behavior
An issue the ticket tree doesn't know about, and a second issue for the same ticket on the next publish.
Which module is this for?
BMad Method (BMM) - Core Framework
BMad Version
6.13.0-next (skills from main at 1b59caa; config/gh-ticketing.toml is the same on dev at bc5f6ac)
Which AI IDE are you using?
Claude Code
Operating System
macOS
Relevant log output
$ gh --version
gh version 2.101.0 (2026-09-15)
$ gh issue create --title "repro: relation after create" --body x --blocked-by 999999; echo "exit=$?"
resolving --blocked-by reference "999999": GraphQL: Could not resolve to an Issue with the number of 999999. (repository.issue)
exit=1
$ gh issue list --state all --json number,title
[{"number":1,"title":"repro: relation after create"}]
Confirm
A fix follows as a small PR against dev.
Description
The GitHub store's
writeverb creates each issue with--parentand--blocked-byongh issue create(skills/bmad-preview-ticketing/config/gh-ticketing.toml, lines 51-52). gh creates the issue first and applies those relations afterwards (pkg/cmd/issue/create/create.go,DeferredUpdateIssue), and it prints the url only when both steps succeed. When the relation step fails, the issue exists but the agent never sees its number, sotracker_idis never written back and the next publish files the ticket again.The error doesn't give it away either: for a stale reference it reads
resolving --parent reference "N": ..., which sounds like a check that ran before anything was created.Steps to reproduce
gh issue create --title test --body x --blocked-by 999999(or--parent 999999).gh issue list --state allshows the new issue anyway.Through the skill, headless in Claude Code: a gh wrapper let the create succeed, then failed the relation step with a rate-limit error and printed no url, the way gh does, and a second publish ran clean. With a smaller model the agent retried the create, and story 1 of two was filed four times in 2 of 3 trials. A larger model found the orphan by title and kept one issue per story in 6 of 6.
Expected behavior
One issue per ticket, with its number in the ticket file, however many times publish runs.
Actual behavior
An issue the ticket tree doesn't know about, and a second issue for the same ticket on the next publish.
Which module is this for?
BMad Method (BMM) - Core Framework
BMad Version
6.13.0-next (skills from
mainat 1b59caa;config/gh-ticketing.tomlis the same ondevat bc5f6ac)Which AI IDE are you using?
Claude Code
Operating System
macOS
Relevant log output
Confirm
A fix follows as a small PR against
dev.