dart-changelog
GitHub用于管理 DART 项目变更日志的决策与编写流程。支持决定是否需要条目、起草内容、完善 PR 链接及审计发布说明,确保符合规范并生成结构化决策记录。
Trigger Scenarios
Install
npx skills add dartsim/dart --skill dart-changelog -g -y
SKILL.md
Frontmatter
{
"name": "dart-changelog",
"description": "DART Changelog: decide, draft, finalize, or audit DART changelog entries"
}
dart-changelog
Use this skill to run the DART dart-changelog workflow. The editable workflow
source lives in .claude/commands/; this generated skill is its entrypoint for
Codex and Muse.
Invocation
- Claude Code:
/dart-changelog <arguments> - Codex:
$dart-changelog <arguments> - Muse:
/dart-changelog <arguments>
Treat the text after the skill name, or the user's request when the skill is
loaded on demand, as $ARGUMENTS. When the workflow references $1, $2,
etc., map those to the positional values supplied by the user.
Command Body
Maintain DART changelog entries: $ARGUMENTS
Purpose
dart-changelog is the reusable changelog decision and writing routine. It is
usually invoked by other DART workflows when they reach a changelog decision,
not directly by users.
Use it to decide whether CHANGELOG.md needs an entry, draft an entry at the
right level of detail, add a PR link after publication, or audit a release
section for missing or over-detailed entries. Keep style, placement, evidence,
and release-note density aligned with docs/onboarding/changelog.md.
Required Reading
@AGENTS.md @docs/onboarding/changelog.md @docs/onboarding/release-management.md
Modes
Interpret $ARGUMENTS as one of these modes when present:
decide: determine whether the current change needs a changelog entry and record the reason in author/task notes when no entry is needed.draft: write or revise the entry before a PR number exists.finalize: add the PR link or adjust the entry after a PR exists, keeping the follow-up local until explicit maintainer/user approval permits a push.audit: scan a release section or PR set for missing, duplicate, over-detailed, misplaced, or stale entries.release-audit: alias forauditwhen the caller is finalizing a release section as part of release packaging (seedocs/onboarding/release-management.md).
If no mode is given, infer the smallest mode that satisfies the caller's need.
Output Contract
Every run must leave the caller with a concise, pasteable decision note. Use this shape in the response or handoff text; PR descriptions follow the contributor owner rather than copying this decision log:
Changelog decision:
- Mode: decide | draft | finalize | audit | release-audit
- Base evidence: <base ref or PR/release inspected>
- Scope evidence: <diff, PR, issue, or release section inspected>
- Decision: entry required | no entry required | entry deferred | audit only
- Target section: <release/category, or N/A>
- Entry text: <final or draft bullet, or N/A>
- Decision reason: <evidence-backed reason or required follow-up>
- Follow-up: <PR link, maintainer approval, release audit, or none>
For no entry required, the decision note must name the evidence-backed reason
rather than just saying "not needed." For entry deferred, say exactly what is
missing, usually the PR number or release target. For finalize, confirm the
entry still matches nearby CHANGELOG.md style after adding the PR link.
Workflow
- Inspect the change and target:
Use the base comparison or PR diff even when the worktree is clean. If a PR, issue, release, or target branch is named, inspect that live object before writing and prefer its base over thegit status --short --branch git diff --stat git diff --cached --stat BASE_REF="$(gh pr view --json baseRefName --jq .baseRefName 2>/dev/null || true)" # If the caller or arguments name a target branch before PR creation, set # BASE_REF to that branch before falling back to automatic inference. if [ -z "$BASE_REF" ]; then CURRENT_BRANCH="$(git branch --show-current)" UPSTREAM_REF="$(git rev-parse --abbrev-ref --symbolic-full-name @{upstream} 2>/dev/null || true)" for REF in "$CURRENT_BRANCH" "${UPSTREAM_REF#origin/}"; do case "$REF" in main|release-*) BASE_REF="$REF"; break ;; esac done fi BASE_REF="${BASE_REF:-main}" git fetch origin "$BASE_REF" git diff --stat "origin/$BASE_REF...HEAD" gh pr diff --name-only 2>/dev/null || true gh pr list --head "$(git branch --show-current)"mainfallback. - Read
docs/onboarding/changelog.mdand the relevantCHANGELOG.mdrelease section. Compare nearby bullets before drafting so wording, section choice, and level of detail match the current file. - Decide whether an entry is required using the guide.
CHANGELOG.mdis written for users of the released library and packages:- public API, behavior, packaging, dependency, platform, simulation correctness, release, or migration impact needs an entry;
- CI, tooling, AI-harness, docs-workflow, and other internal changes do not, unless they change a command or workflow that users of the release run; typo-only, formatting-only, generated-only, and tiny internal refactors never do.
- Record the decision with the Output Contract before modifying
CHANGELOG.mdor telling a caller to skip it. The decision must cite the diff, PR, issue, release section, or target branch that was inspected. - When writing, start with the reader-visible outcome, not the implementation chore. Use one concise bullet, combine closely related changes, avoid author credits, and avoid one-bullet-per-PR diary style. Keep the entry to what the reader must know or do (what changed for them, any rebuild or migration step); the mechanism belongs in the PR body or a design doc. Describe DART behavior or API conditions for any downstream, without naming a specific downstream project in entry descriptions; keep bug-report issue links as references. PR descriptions may still cite downstream evidence.
- Place the entry under the target branch's release section and nearest existing category. Do not create a new category for one PR unless the release shape genuinely needs it.
- Add the best evidence link, matching this branch's established style
(
*bullets; the bare[#1234](https://github.com/dartsim/dart/pull/1234)link on its own line at the end of the entry):- if no PR number exists yet, draft without the link and leave the follow-up local until explicit approval permits another push or PR update.
- For release audits, consolidate noisy implementation ledgers, confirm breaking/removal/deprecation bullets name a migration or support lane, and preserve human-readable release notes over exhaustive history.
- Validate with the gate appropriate to the caller. For changelog-only edits,
run the docs-only checks from
docs/ai/verification.md; before any commit, runpixi run lint.
Caller Contract
Other workflows should call this routine whenever they touch behavior or docs
that may need release notes. The caller keeps ownership of the overall task,
validation, PR body, and approval boundary; dart-changelog owns the changelog
decision, wording, placement, evidence-link hygiene, and the pasteable decision
note that lets Claude, Codex, Muse, and manual contributors record the same
outcome.
Output
Report:
- the changelog decision note in the Output Contract shape above;
- the drafted or finalized entry text and its
CHANGELOG.mdplacement; - gates run (
pixi run lint, docs-only checks) and their results; - any follow-up left local pending explicit maintainer/user approval.
Version History
-
f630c91
Current 2026-10-18 20:24
新增 Muse 客户端支持;更新所需阅读文档,移除 release-roadmap.md,保留 release-management.md;扩展 Modes 以支持 release-audit 场景。
-
deb9869
2026-09-08 21:44
将AI工具支持范围缩小至Claude Code和Codex。
- b9fbefc 2026-07-19 11:29


