Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,11 @@ Label every claim.
- **live-run-proven:** exact binary path + the version that binary printed (`blender --version`). Headless harness only. Live MCP does not count.
- **inspection-only:** read the skill / diff / RNA docs; no process ran.

`blender-smoke.yml` has no `push` trigger. Post-merge smoke evidence is the PR-head 5.2 + 4.5 jobs (state the versions from those logs). Apply `needs-5.1` when 5.1 must be CI-proven on the PR; default matrix does not include it.
Merge evidence is the PR-head 5.2 + 4.5 smoke jobs (state the versions from those logs). Smoke also re-runs on the push to `main`; the release gate uses that run only for direct pushes. Apply `needs-5.1` when 5.1 must be CI-proven on the PR; default matrix does not include it.

## Release-owned fields — do not hand-edit

`VERSION`, `CHANGELOG.md`, CLAUDE.md `**Version:**`, ROADMAP.md `**Current:**`, `.cursor-plugin/plugin.json` `"version"`. The release pipeline rewrites those. Do not bump `standards-version` unless the fleet stamp actually moved.
`VERSION`, `CHANGELOG.md`, CLAUDE.md `**Version:**`, ROADMAP.md `**Current:**`, and `"version"` in `.cursor-plugin/plugin.json`, `.claude-plugin/plugin.json` and `.claude-plugin/marketplace.json`. The release pipeline rewrites those. Do not bump `standards-version` unless the fleet stamp actually moved.

## Checklist

Expand Down
44 changes: 27 additions & 17 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -76,12 +76,14 @@ Blender-Developer-Tools/
- **Squash-merge with branch deletion is the standard.** The PR becomes one
commit on `main`; delete the remote feature branch after merge, then
fast-forward local `main`.
- **Smoke jobs do not re-run on the merge SHA.** `blender-smoke.yml` triggers
on `pull_request` (plus a weekly schedule and manual dispatch) — there is no
`push` trigger. The correct post-merge evidence for example changes is:
both Blender smoke jobs (5.2 LTS and 4.5 LTS) passed on the PR head SHA that
became the sole squash-merged commit, with the actual binary versions
confirmed in the job logs.
- **Smoke runs on the PR head and again on `main`.** `blender-smoke.yml`
triggers on `pull_request`, on `push` to `main` (both with the same
`paths-ignore`: `**.md`, `docs/**`, `assets/**`), weekly, and on manual
dispatch. The merge evidence for example changes is still both Blender smoke
jobs (5.2 LTS and 4.5 LTS) passing on the PR head SHA that became the sole
squash-merged commit, with the actual binary versions confirmed in the job
logs. The push run is what `release-gate.sh` waits for on a direct push to
`main`; for a PR merge the gate reads the PR's own checks.
- **Post-merge, verify green on `main`:** Release (`release.yml`), Validate
(`validate.yml`), Ecosystem drift check (`drift-check.yml`), and Deploy
GitHub Pages (`pages.yml`; paths-filtered, so it does not trigger for every
Expand All @@ -92,7 +94,8 @@ Blender-Developer-Tools/
unresolved — wait before merging.
- **Release-owned fields are never hand-edited:** `VERSION`, `CHANGELOG.md`,
the CLAUDE.md `**Version:**` line, the ROADMAP.md `**Current:**` line, and
the manifest `"version"` in `.cursor-plugin/plugin.json`. Generated gallery
the manifest `"version"` in `.cursor-plugin/plugin.json`,
`.claude-plugin/plugin.json` and `.claude-plugin/marketplace.json`. Generated gallery
pages under `docs/gallery/` are regenerated via `scripts/build_gallery.py`,
never hand-edited.
- **Evidence over assertion:** PR bodies must label what was proven by live
Expand Down Expand Up @@ -170,23 +173,30 @@ way, and a one-paragraph rationale. 30 to 80 lines is the right size.
5.2 LTS and 4.5 LTS for every PR. 5.1 is weekly cron, the opt-in
`needs-5.1` PR label (`pull_request` types include `labeled`), or
`workflow_dispatch` with a `series` input. Auto-label does not apply
`needs-5.1`. Contributor-facing notes for the smoke lever, the deliberate
lack of a `push` trigger, Pages path filters, and the three-role exit-code
`needs-5.1`. It also runs on `push` to `main` (same `paths-ignore`), which
is what the release gate waits for on a direct push. Contributor-facing
notes for the smoke lever, Pages path filters, and the three-role exit-code
convention live in CONTRIBUTING.md. Examples run
through `tests/smoke/run_example.py` (catalog: `tests/smoke/catalog.json`).
SKIP is exit 77 plus a `SMOKE_SKIP:` reason, and only when `--min-version`
is above this Blender; exit 0 with that marker is a vacuous pass and fails.
Post-exit sidecars are opt-in (`--expect-sidecar`). A leg with zero PASSes
is red. A new example is not shipped until it has a catalog row.
- `drift-check.yml` consumes `Developer-Tools-Directory/.github/actions/
drift-check@v1.15` to enforce ecosystem standards-version markers.
- `release.yml` auto-bumps the version, tags, force-updates floating tags
`v0` and `v0.1`, and runs `release-doc-sync@v1` to rewrite CHANGELOG.md,
CLAUDE.md `**Version:**`, and ROADMAP.md `**Current:**`. It also rewrites
the `"version"` line in `.cursor-plugin/plugin.json` so the manifest tracks
each release. Triggered on push to `main` for content-changing paths only.
- `label-sync.yml` self-heals labels via `gh label create --force` per
label, then applies them to the PR.
drift-check`, pinned by SHA (the pin's comment names the tag), to enforce
ecosystem standards-version markers.
- `release.yml` runs on every push to `main` (no path filter). It releases
only when a commit subject in range is `feat:`/`fix:`/breaking, and only
after `.github/scripts/release-gate.sh` sees green CI for the SHA. It then
bumps the version, tags `vX.Y.Z`, force-updates the floating tags
`v<major>` and `v<major>.<minor>` (currently `v0` and `v0.143`), runs
`release-doc-sync` to rewrite CHANGELOG.md, CLAUDE.md `**Version:**`, and
ROADMAP.md `**Current:**`, rewrites the `"version"` in
`.cursor-plugin/plugin.json`, `.claude-plugin/plugin.json` and
`.claude-plugin/marketplace.json`, and force-pushes the slim plugin build
to the `plugin-dist` branch.
- `label-sync.yml` creates any missing label and applies path-based labels
to same-repo PRs.
- `pages.yml` builds the landing page from the **locally vendored** template
at `scripts/site/` (originally scaffolded from Developer-Tools-Directory's
site-template, now owned by this repo — the fleet template only scaffolds
Expand Down
2 changes: 1 addition & 1 deletion CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -241,7 +241,7 @@ The AI consumes content via:

## Release Hygiene

The release pipeline is automated via `release.yml` on push to `main` for content-changing paths. The `release-doc-sync@v1` step rewrites CHANGELOG.md, this CLAUDE.md `**Version:**` line, and ROADMAP.md `**Current:**` line on each release. Never hand-edit those lines, the action owns them.
The release pipeline is automated via `release.yml` on every push to `main`; it releases only for `feat:`/`fix:`/breaking commit subjects and only after `release-gate.sh` sees green CI. The `release-doc-sync@v1` step rewrites CHANGELOG.md, this CLAUDE.md `**Version:**` line, and ROADMAP.md `**Current:**` line on each release. Never hand-edit those lines, the action owns them.

When adding content to a future version:

Expand Down
9 changes: 5 additions & 4 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -148,10 +148,11 @@ Default PR smoke is Blender 5.2 and 4.5 (`.github/workflows/blender-smoke.yml`).
pick the branch and the `series` input.
- Monday 07:00 UTC cron still runs 5.2, 5.1, and 4.5. Do not treat cron as
PR evidence.
- **There is deliberately no `push` trigger on `blender-smoke.yml`.**
Squash-merging a green PR makes `main` identical to the content already
smoke-tested, so a push job would re-prove the same tree at double the
CI cost. Absence of post-merge smoke is not a coverage gap.
- **`blender-smoke.yml` also runs on `push` to `main`**, with the same
`paths-ignore` as pull requests. It exists so a direct push to `main` is
smoke-tested before `release.yml` releases it: the release gate waits for
that run. For a merged PR the gate reads the PR's own checks, so the PR-head
5.2 and 4.5 jobs remain the merge evidence.
- **`pages.yml` is path-filtered.** A workflow-or-docs-only merge does not
deploy Pages. Observed on `13ea521` (`ci:` #137): Validate, drift-check,
and Release ran; Pages did not. Intentional, not a failed job.
Expand Down
5 changes: 3 additions & 2 deletions showcase/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -798,5 +798,6 @@ contact patch on the ground).
## Smoke

`tests/smoke/catalog.json` takes opaque script paths. A showcase row is
enough; `blender-smoke.yml` has no path filter and runs the whole catalog
on every PR. Measure wall-clock before adding the next piece.
enough; `blender-smoke.yml` runs the whole catalog on every PR and every
push to `main` that touches a file outside its `paths-ignore` (`**.md`,
`docs/**`, `assets/**`). Measure wall-clock before adding the next piece.
Loading