- Development continues on
0.x. Breaking changes (!,BREAKING CHANGE, orBREAKING-CHANGE) produce a minor bump in0.xand a major bump from stable1.xonward. Breaking changes take precedence over all other commit types regardless of commit order. - The first stable release requires an explicit maintainer decision and must use
1.0.1. The accidental1.0.0is reserved forever; do not reuse it or its prerelease numbers. Request1.0.1explicitly instead ofmajororpremajorwhen leaving0.x. - Keep the historical
v1.0.0tag, but exclude it from the release baseline, bump recommendation, changelog range, and contributor range. The recovery release is0.10.0, calculated from the restored0.9.0baseline without reverting product code. - Without breaking changes,
featandrevertproduce a minor bump;fix,perf,refactor, andciproduce a patch bump. Patch releases preserve compatibility at every version; from stable1.xonward, minor releases must also preserve public TypeScript types and runtime behavior. docs,test,chore,build, andstylewithout breaking changes do not trigger a release on their own.- Keep breaking-change markers and migration notes; the pre-1.0 minor-bump policy does not make incompatible changes backward compatible.
- Configure
whatBumpdirectly under@release-it/conventional-changelog. Verify version-policy changes through the installed release-it CLI in isolated fixtures, including the historicalv1.0.0tag and the explicit1.0.1transition. - Preview with
npm run release:previewandnpm run release:notes. These stop before writes; do not use an ordinary release or a dry run merely to inspect the next version or notes.
- Never edit
CHANGELOG.mdmanually, including addingUnreleasedentries or changing formatting. CHANGELOG.mdis generated by release-it using@release-it/conventional-changelog, configured in.release-it.cjs.- Leave changelog updates to the release workflow; do not run a release just to refresh the changelog.
- Include only
feat,fix,perf,refactor, andrevertcommits in generated changelogs and GitHub Release Notes. Features is the section title forfeat, not a separate commit type. Exclude all other types and untyped commits, including their breaking-change notes. - Apply the release-note filter in
writerOpts.transform; narrowing the preset's type list alone is insufficient. Keep version calculation independent of this filter.
This project uses codebase-memory-mcp to maintain a knowledge graph of the codebase. ALWAYS prefer MCP graph tools over grep/glob/file-search for code discovery.
search_graph— find functions, classes, routes, variables by patterntrace_path— trace who calls a function or what it callsget_code_snippet— read specific function/class source codequery_graph— run Cypher queries for complex patternsget_architecture— high-level project summary
- Searching for string literals, error messages, config values
- Searching non-code files (Dockerfiles, shell scripts, configs)
- When MCP tools return insufficient results
- Find a handler:
search_graph(name_pattern=".*OrderHandler.*") - Who calls it:
trace_path(function_name="OrderHandler", direction="inbound") - Read source:
get_code_snippet(qualified_name="pkg/orders.OrderHandler")