name: enumerate-changes description: Use after scope-need and relevant specialist skills approve work. Takes the scoped-need document and produces a flat, ordered list of discrete changes required. Each change is scoped to be a single commit.
Enumerate changes
A scoped need describes what is being delivered. An enumerated change list describes what must move in the repo. This skill is the transformation.
greater's change lists vary: a narrow bug fix might be two commits; a new component addition with docs + playground + tests is six to ten; a contract-sync with adapter updates can be larger. The single-commit rule holds regardless.
Input required
An approved scoped-need document from scope-need. Specialist-skill findings (from evolve-component-surface, sync-contracts, enforce-accessibility, release-components, coordinate-framework-feedback, review-advisor-brief) if applicable. Load prior context with memory_recent.
The walk
Walk the scoped need against every surface:
packages/primitives/— 17 styled components. Structure:<component>/<component>.svelte,<component>/<component>.test.ts,<component>/types.ts,<component>/index.ts.packages/headless/— behavior-only primitives (button, modal, menu, tooltip, tabs) + behaviors (focus-trap, roving-tabindex, typeahead, popover, dismissable, live-region).packages/tokens/— design tokens (CSS custom properties, palettes, theme-aware).packages/icons/— 300+ SVG icons (Feather + Fediverse-specific).packages/adapters/— GraphQL (Apollo), REST, Lesser Host REST, viem integrations.packages/cli/—greaterCLI (install, add, update commands).packages/faces/— domain-specific suites:social/,artist/,blog/,community/,agent/.packages/shared/— internal domain packages (messaging, notifications, admin, auth, compose, search, soul).packages/utils/— utility functions.packages/testing/— Vitest fixtures, Playwright helpers, a11y matchers.packages/greater-components/— root barrel export.apps/playground/— SvelteKit sandbox; demos.apps/docs/— SvelteKit docs site.docs/— API reference, guides, component inventory, CLI guide, theming guide, Lesser / Lesser Host integration guides.docs/lesser/contracts/— pinned Lesser GraphQL + OpenAPI snapshots.docs/lesser-host/contracts/— pinned Lesser Host soul-conversation snapshots.registry/index.json— per-file checksums (generated via scripts; do not hand-edit).registry/latest.json— latest-tag pointer (generated).schema.graphql— aggregated Lesser / Fediverse type definitions.scripts/— automation (registry generation, validation, release)..github/workflows/— CI workflows (staging/premain/main promotion gates).release-please-config.json— stable release configuration.release-please-config.premain.json— RC release configuration.CHANGELOG.md— maintained by release-please.package.json/pnpm-lock.yaml— workspace root dependency management.AGENTS.md/CONTRIBUTING.md/README.md— governance + contributor docs. Rarely touched; governance-level.LICENSE/CODEOWNERS— rarely touched.
A change that touches none of these isn't really a change.
The ordering rules
- Test-first for bug fixes. Regression test first (fails against current code), then fix. Especially important for component-API, theming-contract, and accessibility fixes.
- Token changes land before component changes that consume them. Token package depends inward.
- Headless behaviors land before components that use them. Dependency direction: headless → primitives → faces.
- Contract snapshot updates land alongside adapter-code changes that consume them. In the same commit where practical; at least in the same PR.
- Changeset file lands in the same commit as the source change it describes. Contributors add
.changeset/*.mddeclaring semver impact. - Documentation rides with the behavior it describes. Component additions update the component inventory; API changes update API reference; new adapters update integration guides.
apps/playground/demos ride with component additions. Interactive demo for new component lands in the same PR.registry/index.jsonregeneration is automated; PRs regenerate via the scripts, not by hand. CI verifies.- Dependency bumps land in isolated commits for bisect clarity.
- CI workflow changes land in isolated commits with clear rationale.
- Breaking changes require major-version changeset; additive changes require minor; bug fixes require patch.
The mission-scope rule
Every enumerated item must answer: is this greater-mission work, or scope growth?
- In-mission: component / primitive / headless / face / adapter / token / icon / CLI / registry / docs / playground / release automation / accessibility / Mastodon-compat / AGPL / dependency-maintenance / framework-feedback / bug-fix / test-coverage / docs.
- Scope growth (refuse): general form-validation library, general-purpose routing / state-management, backend logic, non-Fediverse icons at scale, payments processing beyond agent-face wallet UX, framework patches.
If any item is scope growth, stop and revisit scope-need.
The component-API-stability rule
Every enumerated item must answer: does this touch component public API (props, slots, events, exports)?
- No — default.
- Yes — additive (new optional prop / slot / event) — proceed; minor version.
- Yes — semantic refinement — evaluate; may be minor or major.
- Yes — breaking (removed, renamed, changed semantics) — requires major-version changeset +
evolve-component-surfacewalk + consumer coordination.
The contract-sync rule
Every enumerated item must answer: does this touch packages/adapters/?
- No — default.
- Yes, consuming already-pinned contracts — proceed; no snapshot update needed.
- Yes, requires updated snapshot — the
sync-contractswalk must be complete; the snapshot update commits in the same PR as the adapter change.
The accessibility rule
Every enumerated item must answer: does this touch accessibility-relevant DOM, ARIA, keyboard navigation, focus management, or contrast?
- No — default.
- Yes — tightening (higher bar) — proceed; consider adding a test to lock in the baseline.
- Yes — preserving existing baseline — proceed; verify tests pass.
- Yes — loosening — refuse unless explicitly authorized via
enforce-accessibilitywalk.
The theming-contract rule
Every enumerated item must answer: does this touch packages/tokens/ or token usage in components?
- No — default.
- Yes — additive (new token) — proceed.
- Yes — rename or semantic shift — breaking; requires major-version changeset +
evolve-component-surfacewalk.
The registry-integrity rule
Every enumerated item must answer: does this touch registry/*.json or registry-regeneration scripts?
- No — default; the CI job auto-regenerates on every PR touching source.
- Yes — automated regeneration expected — ensure the PR reflects the regenerated state.
- Yes — hand-editing registry JSON — refuse.
The single-commit rule
Each enumerated item fits in one commit:
- One logical intent
pnpm installsucceeds (lockfile-strict)pnpm lintpassespnpm typecheckpasses (TypeScript strict)pnpm test(Vitest unit / integration, 75% coverage) passespnpm buildsucceedspnpm playwright:install && pnpm test:e2e(a11y + e2e) passes where applicable- Registry regeneration produces no diff
- Contract-sync check passes
- Changeset file present (for source-changing PRs)
- No commit depends on a later item to compile or pass tests
Output format
### N. <imperative title>
- **Paths**: <files or directories touched>
- **Surface**: <primitives / headless / tokens / icons / adapters / cli / faces / shared / utils / testing / docs / apps / registry / scripts / workflows / deps>
- **Classification**: <component-addition / api-evolution / adapter-change / accessibility / theming / cli-registry / release-automation / docs / bug-fix / test-coverage / dependency-maintenance>
- **Component API impact**: <none / additive / semantic-refinement / breaking (major) — `evolve-component-surface` walk referenced>
- **Contract sync impact**: <none / consumes already-pinned / requires snapshot update — `sync-contracts` walk referenced>
- **Accessibility impact**: <none / tightening / loosening (refuse without authorization) — `enforce-accessibility` walk referenced>
- **Theming impact**: <none / additive token / rename or shift (breaking)>
- **Registry impact**: <automated regen — no hand-editing>
- **Semver impact**: <major / minor / patch — changeset file added>
- **Acceptance**: <one sentence>
- **Validation**: <`pnpm lint / typecheck / test / build`, `pnpm test:e2e`, registry regen check, changeset validate>
- **Conventional Commit subject**: `<type(scope): subject>`
- **Changeset**: `.changeset/<slug>.md` with declared impact
Self-check before handing off
- Every item is in-mission
- No item breaks component API silently (breaking → major changeset)
- No adapter change without synced contract snapshot
- No accessibility regression
- No token rename or semantic shift without major-version discipline
- No hand-editing of registry JSON
- No item loosens Mastodon-compat silently
- Framework awkwardness routed to
coordinate-framework-feedback, not patched locally - Bug fixes follow test-first ordering
- Dependency bumps isolated
- CI workflow changes isolated
- Playground demos ride with component additions
- Docs ride with behavior changes
- Changeset file present for source-changing items
- Every item has test / build / regen validation
- No hardcoded secrets
- No AGPL-incompatible dependencies introduced
- Full list satisfies the scoped need's success criteria
Persist
Append when enumeration surfaces something unusual — a component-dependency ordering subtlety, a contract-snapshot-sync edge case, an accessibility-test ordering consideration, a token-rollout pattern, a CI-workflow interaction. Routine enumerations aren't memory material. Five meaningful entries beat fifty log-shaped ones.
Handoff
Invoke plan-roadmap to sequence the flat list into phases and identify the three-branch release plan (staging → premain → main).