skills/manage-ticket/SKILL.md
Use when creating, refining, or managing requirement-stage PM tickets. Triggers include "요구사항 티켓 만들어", "티켓 정리", "이 요구사항 이슈로", "티켓 써줘", "requirement to ticket", "manage ticket", "file this requirement", "이슈로 만들어", "티켓 작성", "요구사항 이슈화".
npx skillsauth add toongri/oh-my-toong-playground manage-ticketInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
A context-synthesis pipeline that turns an assigned PM ticket OR an abstract free-text requirement into a well-formed, cross-linked ticket (and INVEST-sliced sub-tickets when large), written autonomously to the PM tool.
The pipeline runs in five sequential stages:
intake
→ gather + cross-link (the heart — READ references/gather-crosslink.md at this stage)
→ investigate (impact & premises DELEGATED to explore / oracle when requirement touches code)
→ record (best-practice body — READ references/ticket-craft.md at this stage)
→ slice (Model A INVEST — READ references/ticket-craft.md at this stage)
→ write tail (autonomous post-hoc write to PM tool)
Each stage is described below. Refuse-to-file conditions, duplicate policy, and the INVEST slice gate are inline gates within this spine — do not skip them.
Identify what was handed to you. Two input modes:
Collect the input text and any ambient context (conversation thread, linked documents, slack messages) before proceeding to Stage 2.
This is the heart of the pipeline.
Read references/gather-crosslink.md now (using the Read tool with path references/gather-crosslink.md). That file contains the complete gather bound, curation rules, and cross-link procedure. Follow it in full before proceeding to Stage 3.
Abstract source types — gather from all types that are wired in the current runtime:
| Source type | Examples | |---|---| | collaboration-docs | spec pages, PRD, design docs, meeting notes | | PM | linked issues, parent epics, related tickets | | messenger | slack threads, comment trails | | code-VCS | recent commits, blame, open PRs touching the area | | logs | error logs, monitoring alerts, incident records |
Runtime tool-mapping note (stated once): at gather time, map each abstract source TYPE to whatever MCP/CLI is available in the current runtime (e.g., a docs MCP for collaboration-docs, a PM MCP for PM, a Slack MCP for messenger, git/GitHub MCP for code-VCS, a log tool for logs). An unwired source type is skipped gracefully — gather incompleteness does not trigger refuse-to-file.
Tool-agnostic principle (stated once): the judgment body of this skill names source TYPES and abstract write-steps only. Concrete tool field names and API bindings are confined to the write tail (Stage 6). Do not name tool-specific field identifiers anywhere above Stage 6.
When the requirement touches code — any requirement whose realization lands in the codebase, not only bugs or regressions:
explore fires by default: facts — where in the codebase the requirement lands, current behavior of the relevant flow, related recent commits and open PRs touching the area. Investigation-confirmed file-level references are permissible observations; they record what was found, not what should be built.oracle fires conditionally: judgment — change propagation, structural constraints, cross-cutting concerns — when the impact appears to cross module boundaries or an architectural risk is suspected.explore or oracle.explore dispatch, or fire oracle regardless of the cross-module condition when the causal mechanism remains unclear after explore returns.When the requirement does not touch code, skip this stage. In that case, the Pre-Context section at Stage 4 is filled from gathered documents or each item is marked TBD — needs validation via {method}.
Read references/ticket-craft.md now (using the Read tool with path references/ticket-craft.md). That file contains the best-practice body shape, the observable-AC rubric, the RCA shape, and anti-fluff rules. Follow it in full.
Apply the body shape to the gathered context. Do not invent plausible requirements — missing information is filled with TBD — needs validation via {method}.
Read references/ticket-craft.md (already loaded in Stage 4 — re-read only if context was lost). Follow the Model A INVEST slice rubric from that reference.
Slice gate decision:
references/ticket-craft.md — follow its required/conditional column in full (the parent keeps its own Pre-Context; shared context lives in the parent once). Each child carries its own Problem, Pre-Context, AC, and Non-Goals and references the parent for shared definitions rather than duplicating them.prometheus (for planning) or sisyphus (for execution) as appropriate.INVEST is the slice gate. File-count or LOC atomicity is NOT the gate.
These gates apply before the write tail. Failing any gate blocks the write.
Refuse to file (or refuse to enrich an existing ticket) if ANY of the following hold:
When refusing, state clearly which condition triggered and what evidence is needed to unblock.
Before writing, check for existing tickets covering the same issue:
Write to the PM tool autonomously once all refuse-to-file conditions pass. No pre-write human approval gate.
Abstract write steps (in order):
references/ticket-craft.md.Runtime tool binding (this is the only place concrete tool identifiers may appear): when the PM tool is Linear, the write steps map to the Linear MCP: save_issue to create or update, relatedTo for related links, parentId for parent assignment, blockedBy for dependency links. When the PM tool differs, substitute the equivalent fields. The binding is resolved at runtime based on what MCP is wired — this skill carries no hardcoded assumption beyond Linear as the documented example.
Linear auto-relation fact: Linear auto-creates a native relatedTo relation from any unescaped issue reference placed in a description body, including a bare issue key (for example, B2C-4992 as normal text), an issue markdown link, or an issue URL. Therefore, when the PM tool is Linear: relatedTo is written only for the curated related set (step 1 above), parentId only for parent assignment (step 2 above), and PM issues that must be referenced in the body without becoming related — parent epics, context-only mentions, or duplicate-policy distinct siblings — are rendered as inline-code issue identifiers (for example, `B2C-4992`), which preserves literal text and does not create a Linear issue mention/relation. Do not render must-not-relate Linear issue references as bare keys, markdown issue links, or issue URLs in the body.
Review is post-hoc: the ticket is written first; the caller can review and request changes afterward.
references/gather-crosslink.md: complete gather bound, curation rules, cross-link procedure, source-unreachable handling, impact & premises investigation delegation (§7), and cross-link annotation format. Read at Stage 2.references/ticket-craft.md: best-practice body shape, observable-AC rubric (weasel-word prohibition, Action/Expected/Verification), RCA Bug-Report shape, anti-fluff rules, Model A INVEST slice rubric with per-child stage-check and settled-child handoff. Read at Stages 4 and 5.development
Autonomous objective-pursuit orchestrator — wraps deep-interview/prometheus/sisyphus, then re-pursues the objective across plan/execute cycles until an objective-level argus completion gate confirms the verification surface is met.
tools
Use at the end of a work session to review the WHOLE session and record entities worth pinning. This is the manual, deliberate complete-sweep review — NOT an automated nudge. Triggers on "wrap up", "wrap-up", "session wrap", "end of session", "what should I pin".
documentation
Use when initializing the pins knowledge graph for the first time in a project. Guides the user through creating pins.yaml (the storage manifest). Triggers on "setup pins", "initialize pins", "create pins.yaml", "first-run pins".
testing
Use when you need to record a single pin entity to the knowledge graph. Invokes lib/pins record() to validate and write a canonical .md file. Triggers on "record pin", "pin this", "save this as a pin".