Problem
PR descriptions generated by summarize-change use ## Details subsections (Features, Fixes, Refactoring, Tests, Dependencies) that don't carry the work-type emojis. There's also no convention for surfacing breaking changes prominently. As a result, PR descriptions don't visually align with release notes, and reviewers have no consistent visual cue for breaking changes.
Context
- This repo's
packages/agents/content/skills/_data/work-types.json is the canonical SSOT for the work-type taxonomy (consumed by skill content and downstream changelog/release-notes tooling).
- The
breakingPolicy field on each type covers commit-level marker policy, but there's no SSOT entry for the visual breaking-changes marker (emoji + label).
- For per-type emoji/label values,
@williamthorsen/release-kit's downstream copy carries more mature values that haven't flowed back to the SSOT. Adopt those values into the SSOT to bring the canonical set up to date. Release-kit's downstream copy will then re-sync downstream of the SSOT (out of scope here; tracked separately).
- Release-kit's release notes tag breaking changes inline (
🚨 **Breaking:** ...) rather than collecting them under a dedicated section. PR descriptions adopt the same inline-prefix convention.
Solution
- Update
work-types.json to adopt the more mature emoji/label values currently in release-kit's bundled copy:
drop: 🪦 "Removed"
deprecate: 🗑️ "Deprecated"
fix: label "Bug fixes" (emoji unchanged)
internal: 🏗️ "Internal features"
tooling: ⚙️ (label unchanged)
ci: 👷 (label unchanged)
ai: 🤖 "Agentic support"
fmt: 🎨 (label unchanged)
- Add a top-level
markers block: markers.breaking: { emoji: "🚨", label: "Breaking" }. Label is the bare tag word; punctuation belongs to the rendering template.
- Extend
work-types.schema.json and work-types-schema.test.ts to validate the new markers block.
- Update
summarize-change's ## Details template: subsection headers use {emoji} {label} from work-types.json; any individual entry that represents a breaking change is prefixed inline with 🚨 **Breaking:** (rendered via the construction {emoji} **{label}:**, drawn from markers.breaking). The breaking entry stays under its work-type subsection.
Acceptance criteria
Problem
PR descriptions generated by
summarize-changeuse## Detailssubsections (Features, Fixes, Refactoring, Tests, Dependencies) that don't carry the work-type emojis. There's also no convention for surfacing breaking changes prominently. As a result, PR descriptions don't visually align with release notes, and reviewers have no consistent visual cue for breaking changes.Context
packages/agents/content/skills/_data/work-types.jsonis the canonical SSOT for the work-type taxonomy (consumed by skill content and downstream changelog/release-notes tooling).breakingPolicyfield on each type covers commit-level marker policy, but there's no SSOT entry for the visual breaking-changes marker (emoji + label).@williamthorsen/release-kit's downstream copy carries more mature values that haven't flowed back to the SSOT. Adopt those values into the SSOT to bring the canonical set up to date. Release-kit's downstream copy will then re-sync downstream of the SSOT (out of scope here; tracked separately).🚨 **Breaking:** ...) rather than collecting them under a dedicated section. PR descriptions adopt the same inline-prefix convention.Solution
work-types.jsonto adopt the more mature emoji/label values currently in release-kit's bundled copy:drop: 🪦 "Removed"deprecate: 🗑️ "Deprecated"fix: label "Bug fixes" (emoji unchanged)internal: 🏗️ "Internal features"tooling: ⚙️ (label unchanged)ci: 👷 (label unchanged)ai: 🤖 "Agentic support"fmt: 🎨 (label unchanged)markersblock:markers.breaking: { emoji: "🚨", label: "Breaking" }. Label is the bare tag word; punctuation belongs to the rendering template.work-types.schema.jsonandwork-types-schema.test.tsto validate the newmarkersblock.summarize-change's## Detailstemplate: subsection headers use{emoji} {label}fromwork-types.json; any individual entry that represents a breaking change is prefixed inline with🚨 **Breaking:**(rendered via the construction{emoji} **{label}:**, drawn frommarkers.breaking). The breaking entry stays under its work-type subsection.Acceptance criteria
work-types.jsoncarries the eight updated emoji/label pairs above.work-types.jsonincludes a top-levelmarkers.breakingentry with emoji🚨and label "Breaking".work-types.jsonare alphabetized (per repo convention; preserve array element order where it carries meaning —tiersprecedence andtypesrender-order within tier).work-types.schema.jsonvalidates the newmarkersblock.work-types-schema.test.tscovers themarkers.breakingvalidation cases and asserts the SSOT's🚨/ "Breaking" values directly (downstream-consumer guard).summarize-change's## Detailstemplate renders subsection headers as{emoji} {label}drawn fromwork-types.json.## Detailsentry describes a breaking change (commit with!marker orBREAKING CHANGE:footer), it's prefixed inline with🚨 **Breaking:**drawn frommarkers.breaking. The entry stays in its work-type subsection.