Skip to content

chore(release): set release-please draft mode for manual version review - #183

Closed
lusoris wants to merge 1 commit into
masterfrom
chore/release-please-draft-mode-wt
Closed

lusoris wants to merge 1 commit into
masterfrom
chore/release-please-draft-mode-wt

Conversation

@lusoris

@lusoris lusoris commented May 29, 2026 •

Copy link
Copy Markdown
Contributor

Summary

  • Sets "draft": true in release-please-config.json for the root package so the next release PR opens as a DRAFT, requiring manual review before merge.
  • Blocks an unintended 4.0.0 major bump by adding a human gate to catch mislabelled breaking commits.
  • Documents the 5 breaking-commit analysis so the reviewer knows which version to choose on merge.

Breaking-commit analysis (the problem this fixes)

The current 3.0.0-lusoris.0 baseline has 5 commits with ! markers. Three are incorrectly tagged:

PR Commit subject Verdict
#47 feat(core)!: drop Vulkan backend Correct — libvmaf_vulkan.h public header + CLI flags removed
#52 feat!: sunset legacy native build modes Wrong — CI-matrix pruning only; no public API, CLI flag, or header removed
#80 fix(cuda)!: wrap __global__ kernels in extern "C" Wrong — internal CUDA mangling bug fix; no public API change
#87 feat!: sunset VmafLegacyQualityRunner Correct — importable Python class removed, callers must migrate
#108 fix(cuda)!: remove committed conflict marker Wrong — 3-line literal-marker deletion hotfix

Net: 2 of 5 ! markers are genuine breaking changes. The other 3 are implementation-level changes that were labelled breaking by mistake.

Recommended version on review

3.1.0-lusoris.0 — both genuine breaking changes (Vulkan drop, LegacyRunner removal) are fork-local extensions with no upstream Netflix/vmaf counterpart. The fork has not bumped its upstream-tracking MAJOR; jumping to 4.0.0 would misrepresent the relationship to netflix/vmaf v3.x.

When you un-draft the release-please PR, edit the version in CHANGELOG.md and .release-please-manifest.json from 4.0.0 to 3.1.0 before merging.

Why not "versioning": "always-bump-minor"?

That would permanently mask future real majors. "draft": true adds exactly one manual review gate per release without changing the versioning algorithm — the maintainer can still accept 4.0.0 if a future MAJOR is genuinely warranted.

Reproducer

# Verify the config change
python3 -m json.tool release-please-config.json | grep '"draft"'
# Expected: "draft": true  (root package only)

Deep-dive deliverables (ADR-0108)

  • Research digest — no digest needed: trivial config knob, no novel design
  • Decision matrix — no alternatives: only safe fix without history rewrite
  • AGENTS.md invariant note — no rebase-sensitive invariants
  • Reproducer / smoke-test command — see Reproducer section above
  • CHANGELOG fragment — changelog.d/changed/release-please-draft-mode.md
  • Rebase note — docs/rebase-notes.md entry added (no rebase impact: release-tooling-only)

Bug-status hygiene (ADR-0165)

no state delta: no bug opened or closed.

Netflix golden-data gate

  • No assertAlmostEqual values modified.

🤖 Generated with Claude Code

@lusoris
lusoris enabled auto-merge (squash) May 29, 2026 10:26
@lusoris
lusoris disabled auto-merge May 29, 2026 11:43
@lusoris
lusoris marked this pull request as draft May 29, 2026 11:43
@lusoris
lusoris force-pushed the chore/release-please-draft-mode-wt branch 2 times, most recently from a0949ff to 8a4b316 Compare May 29, 2026 14:04
Set `"draft": true` in `release-please-config.json` root package so the
next release PR opens as a draft, requiring manual review before merge.
Prevents an unintended `4.0.0` major bump caused by three incorrectly
marked breaking commits (PR #52, #80, #108).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@lusoris
lusoris force-pushed the chore/release-please-draft-mode-wt branch from 8a4b316 to 6ea0651 Compare May 29, 2026 15:31
@lusoris
lusoris marked this pull request as ready for review May 31, 2026 13:37
@lusoris

lusoris commented May 31, 2026

Copy link
Copy Markdown
Contributor Author

Superseded by master after merge marathon 2026-05-31.

@lusoris lusoris closed this May 31, 2026
@lusoris
lusoris deleted the chore/release-please-draft-mode-wt branch May 31, 2026 13:43
@lusoris
lusoris restored the chore/release-please-draft-mode-wt branch May 31, 2026 18:43
@lusoris lusoris reopened this May 31, 2026
@lusoris
lusoris marked this pull request as draft May 31, 2026 18:50
@lusoris

lusoris commented Jun 1, 2026

Copy link
Copy Markdown
Contributor Author

Superseded by #520 — bundled per 2026-06-01 triage.

@lusoris lusoris closed this Jun 1, 2026
lusoris added a commit that referenced this pull request Jun 2, 2026
…141 #165 #173 #183

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
lusoris added a commit that referenced this pull request Jun 2, 2026
…-24.04 pin + #173 Renovate grouping + #183 release-please draft) (#520)

* chore(ci): nightly workflow audit — remove redundant TSan, fix retention + Python ver (ADR-0793)

Three targeted fixes surfaced by a periodic nightly-CI audit:

1. Remove the `tsan` job from nightly.yml. sanitizers.yml already fires
   TSan on every push to master (ADR-0710); the daily cron duplicate burned
   ~45 runner-minutes/night for zero additional signal.

2. Add explicit `retention-days` to both nightly artifacts: 14 d for the
   clang-tidy-full-report (diagnostic value expires quickly) and 30 d for
   nightly-benchmark-results (one month of period-over-period comparisons).
   Both previously defaulted to GitHub's 90-day retention.

3. Fix `python-version: "3.14.5"` → `"3.12"` in nightly-bisect.yml.
   Python 3.14 is a pre-release alpha series with no stable release; the
   step name ("Set up Python 3.12") was correct and the version string was
   wrong. This would cause the job to fail trying to download a non-existent
   release.

No functional changes to test coverage. All nightly signal is preserved.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* chore(ci): pin ubuntu-latest to ubuntu-24.04 across all non-Docker runners (ADR-0802)

Replace floating `ubuntu-latest` runner alias with `ubuntu-24.04` across 15
workflow files to prevent silent toolchain drift when GitHub promotes the alias
to Ubuntu 26.04 (expected H2 2026). Add ADR-0802 documenting the pin policy.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* chore(deps): Renovate — Go/Cargo grouping, off-hours schedule, PR-cap (ADR-0812)

- Global schedule: "at any time" → "before 6am on weekdays" (Europe/Vienna);
  vulnerability alerts retain their existing "at any time" override.
- Add gomod packageRule: minor+patch grouped, auto-merged Monday mornings;
  major individual, manual review.
- Add cargo packageRule: same group-and-automerge pattern; major manual.
- prConcurrentLimit: 12 → 10 (Go grouping reduces PR count per cycle).
- ADR-0812 documents the decision and alternatives.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* chore(release): set release-please draft mode for manual version review

Set `"draft": true` in `release-please-config.json` root package so the
next release PR opens as a draft, requiring manual review before merge.
Prevents an unintended `4.0.0` major bump caused by three incorrectly
marked breaking commits (PR #52, #80, #108).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* chore(ci): add bundle CHANGELOG fragment for CI workflow hygiene PRs #141 #165 #173 #183

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: Lusoris <lusoris@pm.me>
@lusoris
lusoris deleted the chore/release-please-draft-mode-wt branch June 4, 2026 08:09
lusoris added a commit that referenced this pull request Jun 12, 2026
…s, empty-except) (#870)

* fix(codeql): resolve py/unused-import, py/unnecessary-lambda, and related Python note alerts (batch 1)

Fixes 32 py/unused-import, 10 py/unnecessary-lambda, 4 py/unused-local-variable,
1 py/repeated-import, and 1 py/import-and-import-from CodeQL alerts:

- Remove unused imports: asyncio/math/Path (test_mcp_hardening_wave1.py), tempfile
  (test_result_store.py), MagicMock (test_cross_validation.py), patch (test_result.py),
  patch+Result (test_quality_runner.py), np+FeatureExtractor (test_feature_assembler.py),
  AsyncMock+patch module-level (test_coverage_round3.py), os+shutil (test_server.py),
  subprocess (test_coverage_round2.py, test_probe_backend_pr850.py), patch
  (test_mcp_p0_adr0608.py), svmutil from libsvm (quality_runner.py), repeated asyncio
  (test_probe_backend_pr850.py).
- Fix py/import-and-import-from in quality_runner.py: consolidate `import vmaf` +
  `from vmaf import` into a single from-import; add model_path to the import list
  and replace vmaf.model_path() calls with the direct name.
- Mark plt re-export in compat/python-vmaf/__init__.py with # noqa: F401 so CodeQL
  sees it is intentional; add type: ignore for the None fallback assignment.
- Fix py/unnecessary-lambda: replace `lambda p: Path(p)` with Path directly in
  test_http_transport.py, test_coverage_round{2,3,4}.py, test_http_transport_round5.py.
- Fix py/unused-local-variable: remove unused fake_payload (test_mcp_p0_adr0608.py),
  rename unused registry to _registry (test_coverage_round3.py), remove unused
  _fake_event_wait function (test_http_transport_round5.py).

Skipped (genuine false positives / intentional patterns):
- run_testing.py imports with # noqa: F401 + side-effect comment: intentional registration.
- misc.py sleep re-export with # noqa: F401: downstream callers import sleep from here.
- test_iserror_invariant.py aiohttp/prometheus_client: optional-dep probes with noqa.
- test_smoke_e2e.py pytest_asyncio: needed for asyncio mode, already has noqa.
- train_test_model.py `== None`: numpy element-wise comparison; is None is incorrect there.
- test_tools_misc.py Child class: class definition IS the test side-effect; CodeQL FP.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* fix(codeql): resolve py/empty-except alerts — add explanatory comments to all silent except-pass blocks

All 6 open CodeQL py/empty-except alerts (alerts #183–188, #338) are addressed:
- compat/python-vmaf/config.py: OSError on temp-file removal during download cleanup
- mcp-server/…/http_transport.py: CancelledError + KeyboardInterrupt on event-loop shutdown
- mcp-server/…/server.py (_describe_model): JSONDecodeError/OSError on malformed model JSON
- mcp-server/…/server.py (progress-token extraction): LookupError/AttributeError when called outside request context
- mcp-server/…/server.py (JSON-RPC parse error): bare Exception on unparseable stdin line
- mcp-server/…/server.py (ladder/tune-per-shot): JSONDecodeError fallback to raw stdout
- mcp-server/…/tests/test_coverage_round2.py: replace try/except/pass with contextlib.suppress per SIM105; add contextlib import, remove unused subprocess import

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* fix(codeql): ruff cleanup after cherry-pick — remove stale noqa, fix import ordering

Remove two unused `# noqa: PLW0603` directives from server.py (PLW0603
was not in the ruff enabled-ruleset, making them RUF100 violations) and
fix ruff I001 import-ordering in test_coverage_round3.py (formatter
blank-line normalisation after local patch/AsyncMock imports were added
to resolve the conflict with the batch-1 cherry-pick).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Lusoris <lusoris@pm.me>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
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.

1 participant