Skip to content

feat(stories): one shared format for client user stories, tickets, QA and closing comments (OSS-129) - #293

Merged
arzafran merged 2 commits into
mainfrom
feat/OSS-129-ticket-standard
Nov 5, 2026
Merged

arzafran merged 2 commits into
mainfrom
feat/OSS-129-ticket-standard

Conversation

@vanvasten

@vanvasten vanvasten commented Nov 4, 2026 •

Copy link
Copy Markdown
Contributor

What this does

Gives every person and agent on a client build the same way to write, work and close tickets. A new /stories skill takes a signed scope to a user stories doc, stops until the client approves it, then writes the tickets, kickoff and QA checklist from shared templates. /build treats a ticket's acceptance criteria as its done list and ends with a closing comment, and /dr-review can review tickets and flag the patterns that made the Sweet Death first pass thin.

Fixes OSS-129.

Where each piece sits

We checked each piece against the existing skills before adding anything:

Piece Owner Why there
Pipeline, approval stop, ticket rules new skills/stories/SKILL.md No existing skill writes planning docs for a client. context-doc is closest, but it writes a glossary and ADRs for engineers, not client-facing stories.
Ticket, kickoff, QA checklist, closing comment templates skills/stories/references/ They load only when the skill runs, so they don't add to every turn.
Acceptance criteria as the done list, closing comment draft skills/build/SKILL.md /build already owns "build this and say what's done".
Anti-pattern review of tickets skills/dr-review/SKILL.md, new "Ticket Review" variant /dr-review already owns review against Darkroom's checklist, and it has a variant pattern (PR feedback) to copy.
Creating Linear tickets, posting the closing comment agents/linear.md, new tickets and review-ready events The linear agent owns every Linear write. /build runs as a fork and can't spawn it, so /build drafts and the main session posts.
Team-facing docs not share-learning or rules/ A rule loads by file path and a team note is a fact, neither runs a multi-step pipeline.

The skill count goes from 25 to 26. lint-skills.ts asks for consolidation instead of a raise. We raised it because no existing skill fits (see the table), and the description budget has room (about 5.9 KB of 7.4 KB used). Franco, this is the main thing to decide in review.

Summary

Review order: skills/stories/SKILL.md, then its four references/, then the /build and /dr-review diffs. The rest is registration.

  • /stories: seven steps (scope tickets, user stories, implementation review, tickets, kickoff, QA checklist, closing comment). It writes files to the folder the team already uses, or .context/stories/<client>/, and stops after the stories doc for client approval even when told the client will approve. Tickets go to Linear through the linear agent or to GitHub with gh issue create. The skill text names no tracker fields itself.
  • Templates: every section from the issue is there. The ticket template has User story, Acceptance criteria, Client input, Implementation notes, Design references, Verify, QA, Open questions, Out of scope and Source. The kickoff holds the shared rules once: Verify commands, screenshot QA, branch rules, data contract, decisions table, build order, definition of done, when blocked, out of scope.
  • /build: reads a ticket's criteria, out of scope and open questions in the research gate, and ends a ticket build with a closing comment draft. Anything not seen working goes under "Verified by logic, not live", and the ticket is never marked done from that.
  • /dr-review: the Ticket Review variant flags a container parent, implementation detail in criteria, bare design node IDs, boilerplate copied across tickets, and done from a reasoned check.
  • Workflow map follow-ups: /stories runs the /dr-review ticket review on tickets.md and fixes every flag before creating tickets; the session running /stories walks the QA checklist before launch with the tester agent and holds the launch on unseen items; the ticket template's Source line links the kickoff.
  • Registration: ACTIVE_SKILLS, Claude managed-files manifest v41 (full profile only), Codex runtime manifest v29, the skill guide, MANUAL, README and the counts in .claude/AGENTS.md.

Test Plan

  • bun run typecheck, lint (same 31 warnings as main), lint:skills (26 skills, 0 errors), lint:links, lint:agents: clean.
  • bun run test: 3180 pass, 8 fail. The same 8 fail on main on this machine: npm-installer x3, safety-net removed-cwd x3, Codex TOML x1, runtime-dependencies x1. tests/install-e2e.test.ts and tests/codex-install.test.ts: 307 pass, 0 fail.
  • Evals capped at $1 ($1.08 spent): build-closing-comment and the three other build cases passed, and dr-review-generic-landing passed. dr-review-local-diff failed once. That case reviews a local diff, which this change doesn't touch, but I haven't confirmed whether it's flaky. The run stopped at the cap before stories-approval-stop and dr-review-ticket-antipatterns ran.
  • The pre-push hook ran again on the follow-up commit and allowed the push.
  • The pre-push hook then ran the changed-skill cases and allowed the push. Its per-case output wasn't shown, so treat the two new cases as unconfirmed. Run bun src/scripts/eval-changed.ts --base origin/main to see them.
  • Not run end to end: /stories on a real scope, a tickets event creating Linear issues, or /dr-review on the real Sweet Death first pass (the eval uses a synthetic copy of its patterns).

@arzafran
arzafran merged commit a5de53d into main Nov 5, 2026
11 checks passed
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.

2 participants