一键导入
spec-sizing
The shared 6-tier size ladder, per-type bands, and the nudge protocol delivery leads use to surface promotion recommendations on oversized specs.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
The shared 6-tier size ladder, per-type bands, and the nudge protocol delivery leads use to surface promotion recommendations on oversized specs.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Behavioral rules that make AI coding agents more reliable — verification, self-correction, and scope discipline.
Debugging guidance and structured report template for thorough bug investigation, evidence gathering, and root cause documentation.
Cold-audit a completed delivery — verify the spec was actually delivered, challenge performative claims, and produce a what-landed report.
Guidelines for generating self-contained HTML mockups that look professional and are easy to iterate on.
Shared implementation guidance for making minimal, correct, maintainable code changes that fit existing systems.
The doctrine for `/roadmap-review` — interactive triage of roadmap-shape drift, walked one item at a time, with paste-ready resolution phrasing for the active sizing lens.
| name | spec-sizing |
| description | The shared 6-tier size ladder, per-type bands, and the nudge protocol delivery leads use to surface promotion recommendations on oversized specs. |
| compatibility | opencode |
| metadata | {"audience":"delivery-leads","purpose":"sizing-nudge"} |
Define the shared 6-tier size ladder that lives in size: frontmatter
on every sized spec, and the nudge protocol delivery leads follow
when they encounter an oversized one.
Two jobs:
size: value means (and what the spec writer
probably meant by choosing it).This skill is the source of truth. The delivery leads reference it;
the CLI (hero size, hero sprint estimate, hero check, hero_warnings)
implements the mechanics. The nudge text below is paste-ready — leads
quote it directly so wording stays consistent.
/design, stamp
size: based on the design conversation. Default to medium only
when truly undetermined./deliver on a spec, read its
size: and size_ack:, run hero size --check, and fire the
appropriate nudge.size: via hero size <slug> <tier> instead of ignoring.One vocabulary across all sized spec types. Each tier represents roughly the same absolute magnitude of effort, regardless of which type carries it. What's "normal" for an initiative is alarming for a feature — that's what the per-type bands below capture.
| Tier | Magnitude | Rough shape |
|---|---|---|
trivial | hours | A single change. Reads in one sitting. |
small | ~1 day | One file or one tight cluster. One PR. |
medium | a few days | A small handful of files; one delivery loop. |
large | week+ | Multi-day work; spans several files or one subsystem. |
x-large | weeks | Real multi-week effort; likely wants phasing. |
giant | month+ | Enormous; almost certainly an initiative in disguise. |
| Tier | Feature / Bug / Enhancement | Epic | Initiative |
|---|---|---|---|
trivial | normal | rare | — |
small | normal | normal | small |
medium | normal | normal | normal |
large | soft nudge | normal | normal |
x-large | strong nudge | nudge | normal |
giant | promote → initiative | promote / /compose | /compose into phases |
Shared vocabulary, absolute magnitude, per-type bands layered on top.
A giant feature ≈ a small initiative in absolute effort — so
promotion is literally "move one step up the type ladder." One
mental model, one promotion rule. Don't re-litigate this choice;
the spec rejected the alternatives explicitly.
Even giant is advisory. Friction climbs but the user always
wins. Never block delivery; record the user's choice and proceed.
| Tier | Design-time | On scope-up edit | Mid-delivery |
|---|---|---|---|
large | soft ask once | quiet | mention in handoff |
x-large | strong ask; recommend /compose or /split | re-ask if scope grew | flag each delivery session |
giant | super-strong; require size_ack: giant | re-recommend each time | strong rec every session until ack, split, or scope shrinks |
The threshold at which the nudge fires shifts based on what the
tracker can do for hierarchy. Read hero.json: tracker.type and the
adapter's supports_hierarchy flag (slice 5 wires the adapter side;
until then default to "no tracker" behavior).
| Regime | Nudge schedule | Promotion offered |
|---|---|---|
No tracker (type: "none") | Most aggressive: large → soft, x-large → strong, giant → super-strong | Local promotion only — turn this spec into an initiative with children in .hero/. |
| Tracker without hierarchy (basic GitHub issues, flat Linear, etc.) | Same as no-tracker | Local promotion only — Hero handles parent/child locally; the tracker just sees the child issues. |
| Tracker with strong hierarchy (Jira epics, Linear projects, GitHub sub-issues) | Less aggressive: soft starts at x-large, strong at giant | Promotion offers to create the parent in the tracker too, so the human team's view stays coherent. |
size_ack: has two jobs. Both come down to the same principle: when
someone inspected the actual work and concluded the declared tier is
right, the system should stop arguing.
giant design-time nudge---
title: ...
type: feature
size: giant
size_ack: giant
---
size_ack: giant says "yes, I know it's giant, I'm shipping it as
one spec anyway." Suppresses the super-strong design-time
recommendation to /compose. Does not suppress mid-delivery
surfacing — every delivery session on a giant spec still gets the
strong rec, because that's where the size is being felt.
---
title: ...
type: feature
size: medium
size_ack: medium
---
When size_ack: matches the declared size:, the drift detector
treats it as "the work was inspected; declared stands." Suppresses
the drift warning even when hero sprint estimate's computed bucket
disagrees. This is the inspector-wins rule: the person who
looked at the actual implementation outranks a word-count heuristic
that only inspected the spec body.
When to use it:
/roadmap-review session walked the drift and the user/agent
confirmed declared is right (prose-dense specs that compute high,
structured-data-dense specs that compute low)status: completedWhen NOT to use it:
won't-fix to clear a queue.size_ack. The lead asks; the lead does not auto-stamp
on a spec it hasn't read.size: medium → large) but the ack stays at the old value (size_ack: medium),
the drift detector treats the ack as stale and re-fires. Update
the ack or drop it.size_ack field.roadmap-reviewer agent should ack every "keep declared as-is"
decision in its session — that's the durable record of inspection.When hero size --check, hero check, or hero_warnings surfaces
drift between declared and computed size, the lead does not
ignore it. Two flavors:
size: differs
from hero sprint estimate bucket. Bump declared via
hero size <slug> <tier> to reflect what the spec actually is, then
re-fire the nudge for the new tier.size: is smaller
than the aggregated child rollup. Bump declared to at least the
rollup tier.Bumping the declared field is the lead's job, not the engineer's. Don't write code to auto-bump — surface the recommendation and let the user or the lead update it via the CLI.
These are the lines the lead should quote. Tune by tier and (where noted) tracker regime. Keep them short and concrete. Don't add hedging like "you might possibly want to consider"; say the thing.
large on feature/bug/enhancement — soft, design-time onlyThis is
large(week+ of work). Doable as one spec, but if it spans more than one subsystem consider/splitinto two specs. No action needed if you're comfortable with the scope.
Mid-delivery for large is quiet — mention in handoff only if
useful, otherwise stay out of the way.
x-large on feature/bug/enhancement — strong, every sessionThis is
x-large(multi-week). Strongly recommend/splitto break it into 2–3 child specs, or/composeif it deserves an initiative parent. Promotion creates a new initiative spec and converts this one into N child specs — real overhead, but cheaper than delivering a runaway spec. Want me to/splitnow?
Re-fire on every /deliver pickup. If the user says "ship it as-is,"
proceed — no size_ack needed for x-large.
giant on feature/bug/enhancement — super-strong, requires ackDesign-time and first delivery pickup:
This is
giant(month+). I strongly recommend promoting to an initiative with phased child specs —/composewill scaffold the parent and let you slot child specs under it. Promotion isn't free (new parent spec, re-parenting this one, writing N child specs), but a month-long single spec almost always runs aground. If you want to proceed without splitting, I'll stampsize_ack: giantin the frontmatter so I stop asking at design time. Mid-delivery I'll still surface the size each session. Split or ack?
Mid-delivery with size_ack: giant set:
Reminder: this spec is
giantand acknowledged. I'll proceed, but if the next phase feels rough, that's the signal to/split.
Mid-delivery without size_ack:
Still
giantand unacknowledged. Quick decision:/splitnow, or stampsize_ack: giantand I'll stop asking at design time (mid-delivery checks continue).
large/x-large on epic — light touchEpics expect to be large. Only nudge at giant:
Epic is
giant— that's bigger than an epic should carry. Recommend promoting to an initiative (the next type up) and/compose-ing phases. Want me to scaffold the initiative parent?
giant on initiative — /compose recommendationInitiative is
giant. Single-pass delivery isn't realistic at this scope. Strongly recommend/composeto break it into 3–5 sequential phases, each its own deliverable child. Want me to sketch the phase boundaries?
When tracker.type != "none" AND supports_hierarchy: true:
large soft nudge, start at
x-large.When you split, I can also create the parent issue in so your team's tracker view matches the spec hierarchy. Want both?
When the tracker has no hierarchy support, fire the local-only phrasing above and do not offer tracker-side parent creation.
hero size --check flags declared-vs-computed mismatch. The lead's
move:
hero size <slug> <new-tier>
Then re-evaluate: the new tier may itself trigger a nudge (e.g.
bumping medium → x-large lands you in strong-nudge territory).size:
to at least match the child rollup, then check whether the new
container tier itself triggers a nudge.Don't ignore drift. The whole point of the field is to make scope
changes visible — ignoring drift makes size: lie, and a lying
field is worse than no field.
The user can override every nudge. The system records the choice
(via size_ack: for giant, or just by the user saying "ship it"
for large/x-large) and proceeds. Document the choice in the
delivery handoff so the next session sees it.
The nudge is a loud linter warning, not a gate. Treat it that way.
spec-format — defines size: as a living frontmatter field
alongside status:. Cross-references this skill for the ladder.agent-reliability — the Persistence rule applies: don't yield
mid-delivery just because a nudge fired. Surface the nudge, get the
user's call, proceed.kickoff-prompt — when rewriting a spec's ## Kickoff after a
size change, reflect the new tier (and the ack state if giant).roadmap-review — the interactive triage surface for the drift
this skill detects. hero size --check reports drift; /roadmap-review
walks it one item at a time and executes the resolution CLI on confirm.spec-composition — owns the canonical "multiple related specs"
phrasing and the multi-spec routing nudge. When a /design request
would produce N related specs (user names multiple deliverables, or
the rolled-up scope reaches large), the routing nudge from
spec-composition fires first — the sizing nudge stands down
for that moment per the precedence rule documented in that skill.
Sizing nudges resurface per-child after the user either pivots to
/compose (each child gets sized when its /design runs) or
declines and proceeds with siblings (each sibling gets sized when
written). One nudge per moment; never both at once.