PRD: unic-ticket-specification
Status: resolved
Plugin: apps/claude-code/unic-ticket-specification
Category: plugin
A Claude Code plugin that packages a portable Archon workflow taking a tracker ticket from intake to
"ready for implementation" — tracker-agnostic (Jira, Azure DevOps, GitHub), multi-repo, and
OS-independent (Windows / macOS).
Tracked retroactively to satisfy the Feature-first convention in CONTRIBUTING.md: the workflow
was authored and tested in client projects (Jura.ECommerce, sitecore-website) and is now being
brought into the shared unic-agents-plugins monorepo as a distributable plugin on branch
feature/add-ticket-specification-workflow.
Problem Statement
Unic teams repeatedly need to take a raw tracker ticket — an existing reference or a free-text
request — and groom it into something a developer or an AFK agent can implement: a clear,
template-shaped description, a classification (Bug vs Change-Request/Story), an effort estimate, and
a record of open questions. Doing this by hand is slow and inconsistent across clients, and each
client uses a different issue tracker (Jira, Azure DevOps, GitHub), a different number of code repos,
and a different OS. A Jura-specific ticket-readiness workflow proved the value but hardcoded one
tenant, project, and repo layout, so it could not be reused. There was no portable, installable
artifact a team could drop into any project.
Solution
unic-ticket-specification ships the grooming workflow as a Claude Code plugin whose installable
bundle is its .archon/ directory. The workflow is an 11-node Archon DAG: detect-input → analyze
(across all configured repos + linked docs) → classify → rewrite to the Bug or CR-Story template →
non-blocking completeness assessment → PERT estimate → persist locally → present draft → human
approval gate → apply (create or update) → report. All tracker/tenant/repo/OS variability lives in
a per-project config .archon/ticket-spec.config.yaml; nothing tracker-specific is in the workflow
or the seven uts-* command templates. Tracker access is MCP-first with a CLI fallback. A
/unic-ticket-specification:setup slash command makes installation zero-config: it asks a few
questions and writes the config and MCP server, so users never hand-edit YAML.
User Stories
- As a developer, I want to pass either an existing ticket reference (Jira key, ADO work-item id,
GitHub issue) or a free-text description, and have the workflow detect which it is, so that one
entry point covers both grooming and creation.
- As a developer, I want the ticket analysed against all my configured code repos and linked docs,
so that the rewritten description and estimate are grounded in the real codebase.
- As a product owner, I want the description rewritten into our standard Bug or Change-Request/Story
template, with a plain-language ### ToDo separate from ### Suggested Technical Tasks, so that
business and technical audiences each get the right level of detail.
- As a developer, I want a non-blocking completeness assessment that annotates gaps but never stops
the run, so that incomplete tickets are still estimated, with caveats.
- As a team lead, I want a three-point PERT effort estimate recorded on the ticket, so that planning
has a defensible number.
- As a reviewer, I want a mandatory human approval gate before anything is written to the tracker,
with reject-and-revise up to three attempts, so that no automated content reaches the tracker
without sign-off.
- As a developer on any Unic project, I want the same workflow to work whether we use Jira, Azure
DevOps, or GitHub, on Windows or macOS, across one or many repos, so that I learn it once.
- As a developer installing the plugin, I want a
/setup command that configures the project for
me, so that I do not hand-edit YAML to get started.
- As a developer, I want a full local copy of every proposal written under
output.dir, so that the
result survives a rejection or a failed tracker write.
Implementation Decisions
- Plugin location & packaging. Lives at
apps/claude-code/unic-ticket-specification/, mirroring
unic-archon-dlc: the installable Archon assets sit under the plugin's .archon/, with plugin
scaffolding (.claude-plugin/, package.json, CHANGELOG.md, CONTEXT.md, AGENTS.md,
CLAUDE.md symlink, README.md) around them.
- Tool-agnostic, config-driven. See ADR-0001.
- MCP-first, CLI fallback. See ADR-0002.
- Markdown-only descriptions. See ADR-0003.
- Setup is a conversational slash command, no JS lib. See ADR-0004.
- Ship the config template only. The bundle ships
ticket-spec.config.example.yaml; the active
ticket-spec.config.yaml is created per project and never committed to the shared plugin.
- No LICENSE file. Per the monorepo convention, the maintainer adds
LICENSE files by hand.
Testing Decisions
- This plugin ships no JavaScript — it is Archon workflow YAML, command Markdown, MCP JSON, and a
config template — so it has no node:test suite. Quality gates are the repo's pnpm ci:check
(Biome for JSON, Prettier for Markdown) and pnpm --filter unic-ticket-specification verify:changelog.
- The workflow bundle itself was validated by real runs in
Jura.ECommerce (Jira) and
sitecore-website (Switzerland Tourism Atlassian tenant) before extraction.
- If
commands/setup.md ever grows non-trivial config-merge logic, extract it to a tested lib/
module and adopt the unic-archon-dlc delegation pattern (ADR-0004 names this trigger).
Out of Scope
- Implementing the ticket, code review, or general Q&A — the workflow stops at "ready for
implementation".
- Estimation methods other than PERT.
- Tracker backends beyond Jira, Azure DevOps, and GitHub.
- Tracker-specific rich markup (e.g. Jira ADF) — descriptions are Markdown only (ADR-0003).
- A non-interactive / headless variant of the approval gate — the human gate is mandatory.
Further Notes
- The workflow is a generalisation of the Jura-specific
ticket-readiness workflow; the
generalisation (config extraction, multi-repo, multi-tracker) is the core of ADR-0001.
- The Jira
cloud_id may be left empty and auto-resolved at runtime from site_url, so client
tenants whose GUID is unknown work with no extra config.
PRD: unic-ticket-specification
Status: resolved
Plugin:
apps/claude-code/unic-ticket-specificationCategory: plugin
A Claude Code plugin that packages a portable Archon workflow taking a tracker ticket from intake to
"ready for implementation" — tracker-agnostic (Jira, Azure DevOps, GitHub), multi-repo, and
OS-independent (Windows / macOS).
Problem Statement
Unic teams repeatedly need to take a raw tracker ticket — an existing reference or a free-text
request — and groom it into something a developer or an AFK agent can implement: a clear,
template-shaped description, a classification (Bug vs Change-Request/Story), an effort estimate, and
a record of open questions. Doing this by hand is slow and inconsistent across clients, and each
client uses a different issue tracker (Jira, Azure DevOps, GitHub), a different number of code repos,
and a different OS. A Jura-specific
ticket-readinessworkflow proved the value but hardcoded onetenant, project, and repo layout, so it could not be reused. There was no portable, installable
artifact a team could drop into any project.
Solution
unic-ticket-specificationships the grooming workflow as a Claude Code plugin whose installablebundle is its
.archon/directory. The workflow is an 11-node Archon DAG: detect-input → analyze(across all configured repos + linked docs) → classify → rewrite to the Bug or CR-Story template →
non-blocking completeness assessment → PERT estimate → persist locally → present draft → human
approval gate → apply (create or update) → report. All tracker/tenant/repo/OS variability lives in
a per-project config
.archon/ticket-spec.config.yaml; nothing tracker-specific is in the workflowor the seven
uts-*command templates. Tracker access is MCP-first with a CLI fallback. A/unic-ticket-specification:setupslash command makes installation zero-config: it asks a fewquestions and writes the config and MCP server, so users never hand-edit YAML.
User Stories
GitHub issue) or a free-text description, and have the workflow detect which it is, so that one
entry point covers both grooming and creation.
so that the rewritten description and estimate are grounded in the real codebase.
template, with a plain-language
### ToDoseparate from### Suggested Technical Tasks, so thatbusiness and technical audiences each get the right level of detail.
the run, so that incomplete tickets are still estimated, with caveats.
has a defensible number.
with reject-and-revise up to three attempts, so that no automated content reaches the tracker
without sign-off.
DevOps, or GitHub, on Windows or macOS, across one or many repos, so that I learn it once.
/setupcommand that configures the project forme, so that I do not hand-edit YAML to get started.
output.dir, so that theresult survives a rejection or a failed tracker write.
Implementation Decisions
apps/claude-code/unic-ticket-specification/, mirroringunic-archon-dlc: the installable Archon assets sit under the plugin's.archon/, with pluginscaffolding (
.claude-plugin/,package.json,CHANGELOG.md,CONTEXT.md,AGENTS.md,CLAUDE.mdsymlink,README.md) around them.ticket-spec.config.example.yaml; the activeticket-spec.config.yamlis created per project and never committed to the shared plugin.LICENSEfiles by hand.Testing Decisions
config template — so it has no
node:testsuite. Quality gates are the repo'spnpm ci:check(Biome for JSON, Prettier for Markdown) and
pnpm --filter unic-ticket-specification verify:changelog.Jura.ECommerce(Jira) andsitecore-website(Switzerland Tourism Atlassian tenant) before extraction.commands/setup.mdever grows non-trivial config-merge logic, extract it to a testedlib/module and adopt the
unic-archon-dlcdelegation pattern (ADR-0004 names this trigger).Out of Scope
implementation".
Further Notes
ticket-readinessworkflow; thegeneralisation (config extraction, multi-repo, multi-tracker) is the core of ADR-0001.
cloud_idmay be left empty and auto-resolved at runtime fromsite_url, so clienttenants whose GUID is unknown work with no extra config.