diff --git a/AGENTS.md b/AGENTS.md index 305613a9..7cd59fbf 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -74,6 +74,18 @@ them mypy-clean under `strict` is a separate piece of work. The `UP046` rule (PEP 695 `type` statement syntax for generic classes) is **ignored** in `pyproject.toml`. Do not convert `class Foo(Generic[T]):` to PEP 695 syntax — it is a deliberate migration decision. +## PR Titles and the Changelog + +PRs are squash-merged with the PR title as the commit message, and release-please builds each package's changelog from those messages. + +- **A change to an experimental feature uses that feature's scope:** `skills` (Agent Skills) and `evaluations` (Evaluations from Code). `feat`, `fix` and `perf` commits with one of these scopes are listed under **Experimental** (`changelog-sections` in `release-please-config.json`), for example `feat(skills): watch skills for revocations`. Any other scope, such as `client`, lists the change as a core feature or fix. +- **Use exactly one scope.** `feat(skills,client):` matches no Experimental row, so it lands under Features. +- **A PR that changes both core and experimental behaviour** should be split. If it can't be, add a `BEGIN_COMMIT_OVERRIDE` block to its description with one conventional-commit line per change. An override also corrects a merged PR's title, as long as the release PR hasn't merged yet. +- **A breaking experimental change** uses `!` while the package is 0.x: `feat(skills)!:` bumps the minor version, which is what an experimental break is allowed. After 1.0, `!` would force a major release. Use `feat(skills):` without `!` instead, and say the change is breaking in the title. +- **When a feature is promoted to core,** remove its rows from `changelog-sections`. + +The rule is specified in `TESTING.md` §0.3 in `launchdarkly/ai-sdks-monorepo`. + ## Package Hierarchy The monorepo is organized into three tiers plus a convenience barrel. Dependencies only flow **downward** — never sideways between packages in the same tier, and never upward. diff --git a/release-please-config.json b/release-please-config.json index 9d2a04e3..1e7001b9 100644 --- a/release-please-config.json +++ b/release-please-config.json @@ -90,5 +90,25 @@ ], "component": "launchdarkly-ai-langchain-messages" } - } + }, + "changelog-sections": [ + { "type": "feat", "scope": "skills", "section": "Experimental" }, + { "type": "fix", "scope": "skills", "section": "Experimental" }, + { "type": "perf", "scope": "skills", "section": "Experimental" }, + { "type": "feat", "scope": "evaluations", "section": "Experimental" }, + { "type": "fix", "scope": "evaluations", "section": "Experimental" }, + { "type": "perf", "scope": "evaluations", "section": "Experimental" }, + { "type": "feat", "section": "Features" }, + { "type": "fix", "section": "Bug Fixes" }, + { "type": "perf", "section": "Performance Improvements" }, + { "type": "deps", "section": "Dependencies" }, + { "type": "revert", "section": "Reverts" }, + { "type": "docs", "section": "Documentation" }, + { "type": "style", "section": "Styles", "hidden": true }, + { "type": "chore", "section": "Miscellaneous Chores", "hidden": true }, + { "type": "refactor", "section": "Code Refactoring", "hidden": true }, + { "type": "test", "section": "Tests", "hidden": true }, + { "type": "build", "section": "Build System", "hidden": true }, + { "type": "ci", "section": "Continuous Integration", "hidden": true } + ] }