Skip to content

feat(plugin): add /colormath:implement-ticket - #15

Closed
craigmbooth wants to merge 1 commit into
feat/refine-initiative-skillfrom
feat/implement-ticket-skill
Closed

feat(plugin): add /colormath:implement-ticket#15
craigmbooth wants to merge 1 commit into
feat/refine-initiative-skillfrom
feat/implement-ticket-skill

Conversation

@craigmbooth

Copy link
Copy Markdown
Collaborator

Stacked on #14 — base is feat/refine-initiative-skill, so this diff is the new skill alone and it can use the renamed refine-ticket. Merge #14 first.

The chain had a gap at the end. refine-initiative designs an initiative, plan-initiative plans every ticket in it, refine-ticket plans one — and then somebody reads the plan out loud to a fresh session and hopes.

What it does

/colormath:implement-ticket CM-00012:

  1. Read it and check it can be built. No implementation plan → back to refine-ticket, because a plan written by the same run that implements it has never been read by anyone. A task carries no plans by design and isn't code work; an initiative is the wrong altitude. Reads the parent initiative when there is one, so the build doesn't collide with the ticket next to it.
  2. Check the plan against the code before touching anything. This is the step that earns the skill's keep. The plan was written against the codebase as it was — files move, adjacent tickets land, assumptions expire. Every step gets walked against the repo, and where it no longer holds that is a finding for the user, not something to route around. Silently improving a plan is how a reviewed decision gets replaced by an unreviewed one. Sometimes the right outcome is "this plan no longer holds, here's why" and no PR at all.
  3. Ask only what actually blocks. Usually nothing — grooming's whole job was to remove it. One round; wanting several means the ticket isn't groomed and should go back.
  4. Build at the layer the plan names, on a branch, in the surrounding idiom, with tests at the layer the change lives at.
  5. Execute the QA plan against the running stack — every item observed rather than asserted, ⚠️ when a UI item has no browser reachable (rather than inferred from the code just written, which is the least trustworthy possible source), failures fixed and re-run rather than shipped with the document claiming they passed.
  6. make preflight, then /colormath:ship for PR, gates, review, test plan and the merge decision.

What it deliberately doesn't do

  • Rewrite the plan. Deviations go in chat, the PR body and a ticket comment; plan and qa_plan stay as the record of intent, because the difference between intent and outcome is the only interesting part. It holds no update_ticket tool.
  • Move tickets between lanes. One board's "In Review" is another's "Staging"; guessing at somebody's workflow is worse than leaving it where they put it. It says what it would have moved it to.
  • Merge. ship owns that decision and has the gates to make it.

Verification

The repo's 16-gate self-test. Plus the mechanical checks: frontmatter parses and name matches the directory, no update_ticket in the grant, every /colormath:<x> referenced anywhere resolves to a skill that exists (only the deliberate review-ticket mentions in the rename note and pre-v3 history remain), and every line inside 80 characters.

Not invocable end to end until released — skills reach a session through the plugin cache.

🤖 Generated with Claude Code

https://claude.ai/code/session_01Xuh2iqLAyZQjFmPP29xVZf

The chain had a gap at the end. refine-initiative designs an initiative,
plan-initiative plans every ticket in it, refine-ticket plans one — and then
somebody reads the plan out loud to a fresh session and hopes.

This skill executes it. The thinking already happened, so it deliberately does
not re-open the ticket: no re-grooming, no interviewing its way to a design, no
rewriting the plan field to match what got built.

The step that earns its keep is the one before any code. A plan was written
against the codebase as it was; between grooming and now, files move, adjacent
tickets land, assumptions expire. So every step is walked against the repo
first, and where it no longer holds that is a finding for the user rather than
something to route around — silently improving a plan is how a reviewed
decision gets replaced by an unreviewed one. Sometimes the right outcome here
is "this plan no longer holds, here is why" and no PR at all.

Then: branch, build at the layer the plan names, execute the ticket's QA plan
against the running stack — every item observed rather than asserted, UI items
marked unverified when no browser is reachable rather than inferred from the
code just written — preflight, and hand off to ship.

What happened is recorded in a ticket comment; the plan and qa_plan fields are
left as the record of what was intended, because the difference between the two
is the only interesting part. It does not move tickets between lanes: one
board's "In Review" is another's "Staging", and guessing at somebody's workflow
is worse than leaving it where they put it.

A ticket with no plan goes back to refine-ticket rather than being planned and
implemented in one breath, which would mean nobody ever reviewed the plan. A
task is refused outright: that type carries no plans by design and is not code
work.
@craigmbooth
craigmbooth deleted the branch feat/refine-initiative-skill August 3, 2026 21:44
@craigmbooth craigmbooth closed this Aug 3, 2026
@craigmbooth

Copy link
Copy Markdown
Collaborator Author

Closed unmerged by GitHub when #14 landed with --delete-branch: this PR's base was feat/refine-initiative-skill, so deleting that branch closed this rather than retargeting it to main. Reopening was refused, so the same commit continues in #16.

@craigmbooth
craigmbooth deleted the feat/implement-ticket-skill branch August 3, 2026 23:01
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