Release v0.18.0
Promotes dev @ 9b5b79a8 (v0.17.6-0174, merge of PR #747) to main as v0.18.0.
Headline: the v0.18.0 DBAS absorption epic (enhancedchannelmanager-0i2vt) — Dispatcharr Backup & Snapshot: full backup/restore round-trip across all 12 in-scope categories (plugins excluded per ADR-012 D10), saved-backup management, cloud backup targets (WebDAV enabled end-to-end, SSRF-hardened, encrypted credentials), scheduled backups, and DBAS restore reporting. Plus Event Sync review queue/exclusions/promotion, Channel Pipeline UX and integrity work, a large accessibility sweep (keyboard-operable selection, tri-state select-alls, labeled controls), journal noise purge, EPG/logo fixes, and dependency/security bumps.
CHANGELOG
The promoted [0.18.0] — 2026-07-26 block spans 199 bullets (Added 90, Fixed 69, Changed 30, Security 7, Deprecated 2, Removed 1) — at ~257 KB it exceeds GitHub's PR-body limit (65,536 chars), so it is not pasted here verbatim (same approach as PR #503). Read it in full on the release branch: CHANGELOG.md → [0.18.0]. Rollover only — no bullets were rewritten or curated. A fresh empty [Unreleased] section sits above it.
Version touchpoints (all three, lockstep — scripts/check_version_consistency.py green)
| Touchpoint | Before | After |
|---|---|---|
frontend/package.json "version" |
0.17.6-0174 |
0.18.0 |
backend/main.py FastAPI(version=...) |
0.17.6-0174 |
0.18.0 |
backend/routers/backup.py APP_VERSION |
0.17.6-0174 |
0.18.0 |
Note: 0.18.0 was previously used for the June cut that was renumbered to 0.17.5 (PR #501 → PR #503); that tag/release were deleted and 0.18.0 reserved for the DBAS epic — this cut. No v0.18.0 tag, GitHub release, or branch collision exists.
Pre-Cut Gate Checklist
- G1a: Zero open P0/P1 bugs at cut SHA (verified via
bd list --status open --priority 0/1— both empty) - G1b: Zero open HIGH/CRITICAL security findings not formally waived (code-scanning API query returned 0)
- G2: Backend Tests green (CI will verify)
- G3: Frontend Tests green (CI will verify)
- G4: CodeQL delta-zero vs.
main(CI will verify via Code Scanning merge protection rule) - G5: CHANGELOG [Unreleased] promoted to [0.18.0] — 2026-07-26 (today, UTC), fresh empty [Unreleased] above
- G6: Version in frontend/package.json matches
0.18.0(release branch name) - G7: No other release-cut or hotfix PR targeting main is open (
gh pr list --base main— empty)
MCP Release Verification (docs/runbooks/mcp-release-verification.md)
This release touches mcp-server/ and MCPSettingsSection.tsx, so the checklist was walked:
- Step 1: Static API key path —
?api_key=initialize returned 200 with a session,tools/listreturned 200 listing 197 tools;Authorization: Bearervariant also authenticated (200 on initialize); wrong key returned 401 ([MCP] Connection rejected: invalid API keyin logs) - Step 2: Tool call via Claude —
list_channel_groupsover the live Claude Code MCP connection returned real data (2,950 channel groups); container logs showCallToolRequestdispatch withauth_method=static_keyand backendGET /api/channel-groups 200 - Step 3: Settings panel smoke check — Settings → MCP Integration shows "MCP server online — 197 tools available", "API key is configured", both the mcp-remote bridge and Claude Code
.mcp.jsonconnection blocks, and enabled Regenerate/Revoke Key buttons. (Buttons verified present/enabled; not clicked — rotating or revoking the live key would sever active MCP consumers, including the verification session itself.)
Verified by: Project Engineer (Claude), 2026-07-26, on ECM v0.17.6-0169 dev deployment (ecm-ecm-1 + ecm-ecm-mcp-1, localhost:6100/6101).
Process notes
- Merge with a merge commit (
--merge), not squash/rebase, per ADR-004 (preserves per-commit bisection intomain). - Post-merge steps (tag
v0.18.0, GitHub release, back-sync dev + reopen counter via PR, branch cleanup) follow after PO-authorized merge perdocs/shipping.md§Cut Mechanics steps 7–9. - Release-cut bead: creation was hook-blocked for the executing agent (board transitions are orchestrator territory); commit carries
[no-bead]and cites epicenhancedchannelmanager-0i2vtfor content traceability.
🤖 Generated with Claude Code