Skip to content

Add release-note agent and skill; add v0.10 release note draft - #414

Merged
antonkri merged 14 commits into
eclipse-score:mainfrom
antonkri:feat/release-note-agent
Oct 28, 2026
Merged

antonkri merged 14 commits into
eclipse-score:mainfrom
antonkri:feat/release-note-agent

Conversation

@antonkri

Copy link
Copy Markdown
Contributor

Adds an agent, a skill and two scripts that generate the S-CORE platform release note, and the v0.10 release note as a draft.

What changes

  • scripts/release_note/generate_release_note.py: generates header, Reference Integration scope, module tables (from known_good.json, with links to the pinned tag/commit, release notes and module verification reports) and the image table. Chapter headings carry icons.
  • scripts/release_note/collect_changes.py: collects the evidence for "Changes to the Platform" (merged PRs of this repository, breaking/new-feature sections of the modules' own release notes, impact hints in this repository).
  • .github/skills/release-note/SKILL.md: document format, criteria for new features and breaking changes (platform level only), run-from-scratch procedure.
  • .github/agents/release-note.agent.md: orchestrates the run.
  • docs/s_core_v_1/releases/release_note_score_v0_10.rst: v0.10 release note, draft, planned for 2026-11-02.
  • docs/s_core_v_1/releases/releases.rst: explicit toctree order (a glob sorted v0_10 before v0_5).

Notes for review

  • Eight modules are pinned to a commit and show <sha7> (unreleased) without a release-notes link. They need release pins before the release.
  • The text under "Changes to the Platform" was written from the evidence of collect_changes.py; please check it for the v0.10 release.
  • The v0.8 note is unchanged.

…raft

Signed-off-by: Anton Krivoborodov <anton.krivoborodov@bmw.de>
@github-actions

Copy link
Copy Markdown

The created documentation from the pull request is available at: docu-html

Signed-off-by: Anton Krivoborodov <anton.krivoborodov@bmw.de>
Signed-off-by: Anton Krivoborodov <anton.krivoborodov@bmw.de>
Signed-off-by: Anton Krivoborodov <anton.krivoborodov@bmw.de>
Signed-off-by: Anton Krivoborodov <anton.krivoborodov@bmw.de>
Signed-off-by: Anton Krivoborodov <anton.krivoborodov@bmw.de>
Signed-off-by: Anton Krivoborodov <anton.krivoborodov@bmw.de>
Signed-off-by: Anton Krivoborodov <anton.krivoborodov@bmw.de>

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

Release evidence can omit relevant releases or mix snapshots, and legacy module keys produce incorrect comparisons.

3 open issues
What changed in this PR

Adds tooling and authoring guidance for S-CORE platform release notes, alongside the v0.10 draft.

Changes:

  • Generates release-note structure, module tables, and image links.
  • Collects change evidence and defines the authoring workflow.
  • Adds the v0.10 draft and explicitly orders the release index.
File Description
scripts/​release_note/​generate_release_note.py Generates release-note structure and module comparisons.
scripts/​release_note/​collect_changes.py Collects PRs, module release notes, and integration-impact evidence.
docs/​s_core_v_1/​releases/​releases.rst Orders release notes explicitly.
docs/​s_core_v_1/​releases/​release_note_score_v0_10.rst Adds the v0.10 draft and migration guidance.
.github/​skills/​release-note/​SKILL.md Defines format, evidence criteria, and validation.
.github/​prompts/​release-note.prompt.md Provides the draft/final authoring entry point.
.github/​agents/​release-note.agent.md Coordinates generation and narrative authoring.

Review effort: Balanced

Comment thread scripts/release_note/collect_changes.py Outdated
Comment thread scripts/release_note/collect_changes.py Outdated
Comment thread scripts/release_note/generate_release_note.py Outdated
…t, one ref for all evidence, alias normalisation)

Signed-off-by: Anton Krivoborodov <anton.krivoborodov@bmw.de>
…e from this PR

Signed-off-by: Anton Krivoborodov <anton.krivoborodov@bmw.de>
Comment on lines +204 to +209
prs = collect_prs_by_commits(slug, base, head) if own_repo else collect_prs(slug, base, head)
relevant = prs if own_repo else [p for p in prs if not p.is_noise]
out = [
f"## {name}: {base} -> {head} ({slug}, {len(prs)} merged PRs, {len(prs) - len(relevant)} bot/dependency PRs omitted)",
"",
]

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

From my understanding that summarizes everything that happened on main branch via merging PRs. Release candidate branch gets direct commits.
Is it not a usecase? We use it only to generate initial notes and all other updates need to be manual or?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good catch. The collector does not look at main. It compares the origin tag with the HEAD of the checked-out release candidate branch. But it only picked up squash-merged PRs ((#N) suffix), so commits pushed directly to the RC branch were silently dropped. Fixed in 7f1fbf7: collect_changes.py now has a "commits without PR" section listing those commits with their changed files. Commits that only touch the release notes are skipped. The skill tells the agent to classify them like PRs.

On the use case: it is not only for the initial note. Re-running the prompt on the RC branch refreshes the generated parts (tables, images, architecture diagram) and re-collects the evidence. New items (new PRs or direct commits) are added, and the reviewed narrative is kept. So later updates don't have to be manual.

The generator renders docs/s_core_v_1/releases/_assets/architecture_vX_Y.svg
from scratch (scripts/release_note/architecture_diagram.py) and embeds it in
the Overview: platform/infrastructure/tooling modules, the integrated software
modules with their components (Sphinx-Needs comp/mod from needs.json, --needs)
and the target images. Same inputs give a byte-identical SVG.
Skill and agent document the diagram as a generated part.
The generator builds //:needs_json_file with Bazel and reads bazel-bin/needs.json,
so the components match the module pins of the checked-out release branch instead
of the published main docs. A failing build stops the run; --needs only reproduces
a diagram from a kept file. Removes the unused diagram path without components.
The evidence of this repository covers the range origin tag -> checked-out
release branch, but only squash-merged PRs ("(#N)") were listed, so commits
pushed directly to the release candidate branch were dropped. collect_changes.py
now lists them with their changed files (commits that only touch the release
notes are skipped). The skill classifies them like PRs and, on refresh, adds
items for new evidence while keeping the reviewed narrative.
@antonkri
antonkri merged commit 9f60b91 into eclipse-score:main Oct 28, 2026
22 checks passed
antonkri added a commit that referenced this pull request Oct 28, 2026
* Add release-note agent, skill and generator; add v0.10 release note draft

Signed-off-by: Anton Krivoborodov <anton.krivoborodov@bmw.de>

* Format release-note scripts with ruff

Signed-off-by: Anton Krivoborodov <anton.krivoborodov@bmw.de>

* Remove session-specific details from release-note skill and agent

Signed-off-by: Anton Krivoborodov <anton.krivoborodov@bmw.de>

* Release note: list removed files as evidence, correct v0.10 content

Signed-off-by: Anton Krivoborodov <anton.krivoborodov@bmw.de>

* Release note: take the release date from the S-CORE milestone

Signed-off-by: Anton Krivoborodov <anton.krivoborodov@bmw.de>

* Release note: show draft or final state on top of the note

Signed-off-by: Anton Krivoborodov <anton.krivoborodov@bmw.de>

* Release note: set the final state explicitly with --final

Signed-off-by: Anton Krivoborodov <anton.krivoborodov@bmw.de>

* Add release-note prompt with draft/final parameter

Signed-off-by: Anton Krivoborodov <anton.krivoborodov@bmw.de>

* Release note: address review findings (release selection by tag commit, one ref for all evidence, alias normalisation)

Signed-off-by: Anton Krivoborodov <anton.krivoborodov@bmw.de>

* Release note: run on the release candidate branch; drop the v0.10 note from this PR

Signed-off-by: Anton Krivoborodov <anton.krivoborodov@bmw.de>

* Release note: generate an architecture diagram with every skeleton run

The generator renders docs/s_core_v_1/releases/_assets/architecture_vX_Y.svg
from scratch (scripts/release_note/architecture_diagram.py) and embeds it in
the Overview: platform/infrastructure/tooling modules, the integrated software
modules with their components (Sphinx-Needs comp/mod from needs.json, --needs)
and the target images. Same inputs give a byte-identical SVG.
Skill and agent document the diagram as a generated part.

* Release note: take the diagram components from the checkout's needs.json

The generator builds //:needs_json_file with Bazel and reads bazel-bin/needs.json,
so the components match the module pins of the checked-out release branch instead
of the published main docs. A failing build stops the run; --needs only reproduces
a diagram from a kept file. Removes the unused diagram path without components.

* Release note: list commits without PR of the release branch as evidence

The evidence of this repository covers the range origin tag -> checked-out
release branch, but only squash-merged PRs ("(#N)") were listed, so commits
pushed directly to the release candidate branch were dropped. collect_changes.py
now lists them with their changed files (commits that only touch the release
notes are skipped). The skill classifies them like PRs and, on refresh, adds
items for new evidence while keeping the reviewed narrative.

---------

Signed-off-by: Anton Krivoborodov <anton.krivoborodov@bmw.de>
(cherry picked from commit 9f60b91)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants