Use when reviewing UI for accessibility — WCAG 2.2 AA, keyboard nav, focus, ARIA, contrast, screen-reader semantics — even on 'is this a11y-OK?' or 'mach das barrierefrei'.
日本語の概要は準備中です。原文の説明を表示しています。
Refine a Jira/Linear ticket before planning — 'refine ticket', 'tighten AC on PROJ-123', 'ist das Ticket klar?'; rewritten ticket, risks, persona voices, close-prompt.
インストールする前に、エージェントに与えられる指示の中身を確認できます。
Move a ticket from "raw idea" to "implementation-ready" in one run. Produces a rewritten ticket, Top-5 risks, and persona voices. Orchestrates
validate-feature-fitandthreat-modelingas sub-skills — never duplicates their logic. Output is copy-paste ready; the user decides write-back.
/feature-plan or /feature-explore on a ticket-anchored scope.| Phrasing | Route to |
|---|---|
| "plan this feature" | /feature-plan (downstream) |
| "estimate this ticket" | /estimate-ticket (sibling, Phase 4) |
| "is this a duplicate feature?" | validate-feature-fit (sub-skill) |
| "threat-model this change" | threat-modeling (sub-skill) |
| "investigate this bug" | /bug-investigate (bug-focused) |
/refine-ticket orchestrates these — it does not replace them.
The refined output's prose language is picked once, up front, and applied to every section (refined description, risks, persona voices, orchestration notes, close-prompt). Fallback order — first hit wins:
language-and-tone iron law./refine-ticket PROJ-123), mirror the language the
ticket is written in — detected from the summary + description..agent-settings.yml default. If both are silent or unclear,
fall back to the project default in .agent-settings.yml
(personal.language or equivalent). If that is also missing,
default to English.Quoted identifiers (ticket keys, file paths, command names, code snippets) stay in their native form. Only the prose mirrors the selected language.
Reuses the jira-ticket command's loader. Accepts:
/refine-ticket PROJ-123/refine-ticket with no arg; agent-config git:convention ticket
on the current branch (commit-subject § Reading the ticket)/refine-ticket followed by a markdown block/refine-ticket https://acme.atlassian.net/browse/PROJ-123If none resolve to a ticket, fall back to conversational discovery
(feature-explore-style): ask one focused question, then continue.
Delegate to jira-ticket §1-3:
GET /issue/{id}) — summary, description,
issue type, priority, status, comments, linked issues.If pasted text: skip API, parse markdown, extract title + AC bullets + body.
Auto-fetch parent (Phase F4). Before detection, check the issue type and fold parent context in:
import { issuetype_needs_parent, fold_parent_context } from 'scripts/refine_ticket_detect.js';
if (issuetype_needs_parent(ticket.issuetype)) {
const parentKey = ticket.parent_key; // from `fields.parent.key`
const parent = fetch_jira_issue(parentKey); // +1 API call
ticketBody = fold_parent_context(ticketBody, parent.body, parentKey);
}
Rules:
Story and Sub-task (and their Linear / Shortcut
equivalents). Task / Bug / Epic skip the auto-fetch unless a
parent link field is already populated — in that case the agent
folds explicitly without the issuetype guard.fold_parent_context() is idempotent; folding twice with the same
parent does not duplicate the block.<key> not reachable — AC may lack upstream context."Parent AC lines surfaced this way must be cited verbatim in the refined output's Open questions section so the user sees which constraints come from the parent.
Check the loaded ticket for clarity signals before orchestrating:
Cross-source discrepancy scan (per cross-source-consistency): the ticket is rarely a single source. Compare every source against the others and surface any conflict as an Open question — never resolve it silently:
Fold every discrepancy into the refined output's Open questions section (one batched list), never a second prompt. Full taxonomy + scan procedure: cross-source-consistency-mechanics.
Then run the deterministic detection helper — do not re-derive trigger logic in prose:
./agent-config refine-ticket:detect <ticket-body-file>
# or, inside the skill run (scripts/refine_ticket_detect.ts):
# import { detect, load_map } from 'scripts/refine_ticket_detect.js';
# const decision = detect(ticketBody, load_map(), process.cwd());
The helper consumes detection-map.yml (co-located
in this skill folder) and returns:
validate-feature-fit — fires when ≥ 2 distinct feature-area keywords
appear in the body (see sub_skills.validate-feature-fit.keywords).threat-modeling — fires on any auth / webhook / upload / queue /
secret / tenant / admin / PII / payment keyword, or a CVE-YYYY-N
regex match.repo_aware — on when .git/, agents/settings/contexts/, composer.json,
or package.json is present in the cwd; off otherwise.repo_aware=True, decision.repo_context is populated by
gather_repo_context():
recent_branches — up to 20 most recent local branches (naming
convention signal).recent_commits — up to 30 most recent commit subjects (active
modules + verb conventions).context_docs — every agents/settings/contexts/*.md filename (domain
vocabulary).Use repo_context.recent_branches to anchor the "Refined ticket" title
naming (e.g. feat/ vs fix/ vs refactor/ prefix), and
repo_context.context_docs to cite domain vocabulary in the Top-5
risks instead of inventing terms.
The match lists and require_count thresholds are owned by
detection-map.yml — edit the map, not this skill (DE + EN fixtures,
repo-aware + graceful-degrade coverage are regression-locked in this
package's own test suite).
For every SubSkillDecision with fired=True, invoke the named sub-skill
with the ticket body as input:
validate-feature-fit → returns duplicate / scope-creep findingsthreat-modeling → returns trust boundaries + abuse casesCite, don't copy — the output references findings by sub-skill name and
file:line where applicable. If a sub-skill reports zero findings, emit
fired → clean in the orchestration section. Skipped sub-skills appear
as skipped (no trigger match) — never silently omitted.
Each fired finding must map to at least one entry in the Top-5 risks section; orchestration that does not influence the risks is waste.
Load the persona set from frontmatter (Core-6 default). Each persona reviews the ticket through its lens and produces one paragraph:
Optional: --personas=+qa adds the QA persona (edge cases, regression
risk, test matrix).
Optional: --user-type=<id> loads one user-type from user-types/<id>.md
and adds an end-user simulation lens to the persona stack (e.g.
--user-type=galabau-field-crew). User-types compose orthogonally with
personas — persona = methodology / role lens; user-type = end-user / field
lens. v1 is CLI-only (no skill-level default; no frontmatter list). The
user-type voice renders as one paragraph in Persona voices labelled
**User: <label>**, citing Daily Workflow, Vocabulary, Operational
Constraints, and Ticket Red Flags from the loaded user-type. Contract:
docs/contracts/user-type-schema.md.
Produce the three-section output (template below). After rendering, emit the close-prompt (below). Do not write to Jira. Do not open a planning doc.
Frozen per Q25.
## Refined ticket
**Title:** <rewritten title>
<rewritten description — tightened AC, explicit out-of-scope,
open questions surfaced>
## Top-5 risks
1. <risk> — <mitigation / deferral>
2. <risk> — <mitigation / deferral>
3. <risk> — <mitigation / deferral>
4. <risk> — <mitigation / deferral>
5. <risk> — <mitigation / deferral>
## Persona voices
- **Developer** — <one paragraph>
- **Senior Engineer** — <one paragraph>
- **Product Owner** — <one paragraph>
- **Stakeholder** — <one paragraph>
- **Critical Challenger** — <one paragraph>
- **AI Agent** — <one paragraph>
- **[qa]** — *(only when `--personas=+qa`)* <one paragraph>
- **User: <label>** — *(only when `--user-type=<id>`)* <one paragraph
citing Daily Workflow / Vocabulary / Operational Constraints /
Ticket Red Flags from the loaded user-type>
## Orchestration notes
- `validate-feature-fit` — <fired / skipped; key findings or "clean">
- `threat-modeling` — <fired / skipped; key findings or "clean">
- Repo-aware — <on / off; contexts loaded>
The "Refined ticket" section is wrapped in a copyable Markdown box so the user can grab it verbatim.
Run these three scans on the rendered output before the close-prompt. Each is a fast pass; failure blocks emission and forces a fix.
fold_parent_context) is reflected in the rewritten ticket, the Top-5 risks, or the Open questions section. Nothing from the input vanishes silently.<placeholder>, TODO, FIXME, tbd, ???, XXX strings remain. The angle-bracket placeholders in the template (<rewritten title>, <risk>, <one paragraph>) must be replaced with concrete prose before the close-prompt fires.repo_context.context_docs and recent_branches vocabulary. Invented terms are flagged in Open questions or replaced with the project's actual term.Self-review is mechanical (gaps, leftovers, naming drift); persona voices and orchestration outputs handle reasoning critique. Both run; neither replaces the other.
Source: adapted from an external reference.
Probe write access first (Phase F6). Before rendering, do a cheap upfront check:
import { render_close_prompt } from 'scripts/refine_ticket_detect.js';
let write: boolean | null;
try {
const me = jira_get('/myself'); // existence → auth works
const meta = jira_get(`/issue/${key}/editmeta`); // fields → write access
write = Boolean(meta.fields);
} catch {
write = null; // probe itself failed
}
console.log(render_close_prompt(write));
Behaviour:
| Probe result | Prompt shape |
|---|---|
Write access present (True) | Full three-option prompt (comment / replace / nothing) |
Read-only (False) | Single option: "Copy-paste — no write access to this project" |
Probe failed (None) | Full three-option prompt; skill degrades to copy-paste on selection (v1 fallback) |
Per user interaction rules, accept number or free text. editmeta
is cheap and cacheable; cache the result per Jira project key for
the session, re-probe on project change.
After refinement, run
judge-artifact-completeness
with rubric ticket-quality-score to verify DoR readiness — acceptance
criteria, test plan, risk, and estimate. Invoke when the user asks for a
DoR check — not automatically on every refinement.
validate-feature-fit, threat-modeling) cost tokens; orchestrate only when the trigger matrix actually matches, not defensively on every run.ticket that git:convention ticket prints; chained keys (e.g. feat/PROJ-1-and-PROJ-2) pick the first and note the rest./estimate-ticket or /feature-plan automatically — separate invocations by design (Q5 decision).validate-feature-fit or threat-modeling — orchestrate by reference, cite findings, don't re-derive them.--personas=+qa, add QA, otherwise do not.--user-type=<id> was passed; loading a user-type proactively (e.g. "this ticket smells like field-crew") is forbidden — the axis is CLI-only in v1.jira-ticket — ticket loadervalidate-feature-fit — orchestrated sub-skillthreat-modeling — orchestrated sub-skillfeature-explore — upstream idea capture; hints at /refine-ticket when input looks like a ticketfeature-plan — downstream planningadversarial-review — same critical-challenger persona, different stage (post-plan)artifact-drafting-protocol — this skill was drafted under itまだレビューはありません。使ってみた感想をお寄せください。
概要と使いどころ
Use when reviewing UI for accessibility — WCAG 2.2 AA, keyboard nav, focus, ARIA, contrast, screen-reader semantics — even on 'is this a11y-OK?' or 'mach das barrierefrei'.
日本語の概要は準備中です。原文の説明を表示しています。
Use when defining or auditing the activation event — aha-moment selection, retention correlation, falsifiable definition. Triggers on 'what is our aha moment', 'redefine activation'.
日本語の概要は準備中です。原文の説明を表示しています。
Use when capturing an architectural decision — file naming, next ADR number, Status / Context / Decision / Consequences, index regen; fires even without saying 'ADR'.
日本語の概要は準備中です。原文の説明を表示しています。
Adversarial critique — devil's advocate, stress-test, honest teardown ('poke holes', 'be brutal', 'was hältst du davon'); explicit request only. Routine code or design review → code-review.
日本語の概要は準備中です。原文の説明を表示しています。
Use when reading, creating, or updating agent documentation, module docs, roadmaps, or AGENTS.md. Understands the full .augment/, agents/, and copilot-instructions structure.
日本語の概要は準備中です。原文の説明を表示しています。
Use for an adversarial red-team / blue-team / auditor review of an AI agent's CONFIG + behaviour (rules, skills, MCP, hooks, permissions) — attack-chain → defensive-gap list, not a code audit.
日本語の概要は準備中です。原文の説明を表示しています。