From 6b35b54a513dfc5a8bcc0a4b3cf05ecb3a9299bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Flor=C3=AAncio?= Date: Mon, 27 Apr 2026 21:36:50 +0100 Subject: [PATCH] fix: restore release changelog boundaries (#716) --- CHANGELOG.md | 128 ++++++++++++++++++++++++---------- scripts/release/release-pr.sh | 81 ++++++++++++++++++++- 2 files changed, 171 insertions(+), 38 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 789ebda355..90755344f4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,27 +16,6 @@ All notable changes to Kandev. - auto-open plan panel with unseen-changes indicator ([#650](https://github.com/kdlbs/kandev/pull/650)) - add /spec for writing feature specs ([#700](https://github.com/kdlbs/kandev/pull/700)) - support claude-acp Monitor tool and fix incremental tool_call updates ([#698](https://github.com/kdlbs/kandev/pull/698)) -- add GitHub token injection for remote executors and Docker session resume ([#654](https://github.com/kdlbs/kandev/pull/654)) -- add Ctrl+F search to session, plan, and terminal panels ([#686](https://github.com/kdlbs/kandev/pull/686)) -- configurable quick-action presets and PR branch checkout ([#689](https://github.com/kdlbs/kandev/pull/689)) -- add /github page for PRs and issues ([#687](https://github.com/kdlbs/kandev/pull/687)) -- collapse subtasks in sidebar ([#662](https://github.com/kdlbs/kandev/pull/662)) -- review uncommitted changes and add git safety rails ([#684](https://github.com/kdlbs/kandev/pull/684)) -- add issue watcher with task creation and auto-cleanup ([#672](https://github.com/kdlbs/kandev/pull/672)) -- per-launch authentication for agentctl ([#666](https://github.com/kdlbs/kandev/pull/666)) -- configurable CLI flags per agent profile ([#653](https://github.com/kdlbs/kandev/pull/653)) -- session tabs on kanban preview panel ([#648](https://github.com/kdlbs/kandev/pull/648)) -- sidebar filter UX polish — align ops, group steps by workflow ([#647](https://github.com/kdlbs/kandev/pull/647)) -- explain why Start task button is disabled via hover tooltip ([#649](https://github.com/kdlbs/kandev/pull/649)) -- add filter/group/sort and saved views to task sidebar ([#644](https://github.com/kdlbs/kandev/pull/644)) -- vscode-style preview tabs for files, diffs, and commits ([#622](https://github.com/kdlbs/kandev/pull/622)) -- add confirmation dialog before archiving tasks ([#621](https://github.com/kdlbs/kandev/pull/621)) -- introduce card multi-selection ([#573](https://github.com/kdlbs/kandev/pull/573)) -- render short tool-call output inline ([#604](https://github.com/kdlbs/kandev/pull/604)) -- associate agent profiles with workflows and steps ([#597](https://github.com/kdlbs/kandev/pull/597)) -- add start_agent and local_path params to create_task ([#505](https://github.com/kdlbs/kandev/pull/505)) -- acp-first profiles, models, and modes ([#566](https://github.com/kdlbs/kandev/pull/566)) -- add multi-select and drag-to-move for file tree and changes panel ([#490](https://github.com/kdlbs/kandev/pull/490)) ### Bug Fixes @@ -49,6 +28,23 @@ All notable changes to Kandev. - align sidebar filter toolbar height with panel headers ([#699](https://github.com/kdlbs/kandev/pull/699)) - derive sidebar session state from most active session ([#697](https://github.com/kdlbs/kandev/pull/697)) - auto-resume failed sessions with silent workspace-restore fallback ([#696](https://github.com/kdlbs/kandev/pull/696)) + +## 0.37 - 2026-04-25 + +### Features + +- add GitHub token injection for remote executors and Docker session resume ([#654](https://github.com/kdlbs/kandev/pull/654)) +- add Ctrl+F search to session, plan, and terminal panels ([#686](https://github.com/kdlbs/kandev/pull/686)) +- configurable quick-action presets and PR branch checkout ([#689](https://github.com/kdlbs/kandev/pull/689)) +- add /github page for PRs and issues ([#687](https://github.com/kdlbs/kandev/pull/687)) +- collapse subtasks in sidebar ([#662](https://github.com/kdlbs/kandev/pull/662)) +- review uncommitted changes and add git safety rails ([#684](https://github.com/kdlbs/kandev/pull/684)) +- add issue watcher with task creation and auto-cleanup ([#672](https://github.com/kdlbs/kandev/pull/672)) +- per-launch authentication for agentctl ([#666](https://github.com/kdlbs/kandev/pull/666)) +- configurable CLI flags per agent profile ([#653](https://github.com/kdlbs/kandev/pull/653)) + +### Bug Fixes + - ui polish — unified topbar, selector consistency, quick actions editor improvements ([#693](https://github.com/kdlbs/kandev/pull/693)) - subtask sessions inherit agent profile from parent task ([#692](https://github.com/kdlbs/kandev/pull/692)) - recover from stale execution ID when auto-starting agent on prepared workspace ([#690](https://github.com/kdlbs/kandev/pull/690)) @@ -62,6 +58,24 @@ All notable changes to Kandev. - send auto-start prompt after on_turn_complete context reset ([#669](https://github.com/kdlbs/kandev/pull/669)) - include archived tasks in completed tasks over time chart ([#668](https://github.com/kdlbs/kandev/pull/668)) - remove duplicate WebSocket event subscriptions ([#667](https://github.com/kdlbs/kandev/pull/667)) + +### Refactoring + +- unify task.updated via single publisher and shared mapper ([#676](https://github.com/kdlbs/kandev/pull/676)) +- move system prompts from Go constants to external config files ([#673](https://github.com/kdlbs/kandev/pull/673)) + +### Documentation + +- improve commit skill with mandatory verify and pre-commit check ([#691](https://github.com/kdlbs/kandev/pull/691)) + +## 0.36 - 2026-04-20 + +### Features + +- session tabs on kanban preview panel ([#648](https://github.com/kdlbs/kandev/pull/648)) + +### Bug Fixes + - prevent kanban topbar search from overlapping right buttons ([#661](https://github.com/kdlbs/kandev/pull/661)) - enable Start task button when workflow provides agent override ([#665](https://github.com/kdlbs/kandev/pull/665)) - default dev mode db to /.kandev-dev/data ([#664](https://github.com/kdlbs/kandev/pull/664)) @@ -72,7 +86,21 @@ All notable changes to Kandev. - exclude ephemeral tasks from stats page queries ([#656](https://github.com/kdlbs/kandev/pull/656)) - add edit icon hint to utility agent rows ([#657](https://github.com/kdlbs/kandev/pull/657)) - tighten default template prompts for commits, todos, and PR review ([#655](https://github.com/kdlbs/kandev/pull/655)) -- release script tags fetching + +## 0.35 - 2026-04-20 + +### Features + +- sidebar filter UX polish — align ops, group steps by workflow ([#647](https://github.com/kdlbs/kandev/pull/647)) +- explain why Start task button is disabled via hover tooltip ([#649](https://github.com/kdlbs/kandev/pull/649)) +- add filter/group/sort and saved views to task sidebar ([#644](https://github.com/kdlbs/kandev/pull/644)) +- vscode-style preview tabs for files, diffs, and commits ([#622](https://github.com/kdlbs/kandev/pull/622)) +- add confirmation dialog before archiving tasks ([#621](https://github.com/kdlbs/kandev/pull/621)) +- introduce card multi-selection ([#573](https://github.com/kdlbs/kandev/pull/573)) + +### Bug Fixes + +- release script tags fetching ([986410ab](https://github.com/kdlbs/kandev/commit/986410ab2ebb1cc25e1ad046c9daae18a58cc150)) - show repo name instead of full path in task sidebar ([#652](https://github.com/kdlbs/kandev/pull/652)) - unstick agent session when cancel times out ([#651](https://github.com/kdlbs/kandev/pull/651)) - anchor PR detail panel to session group on auto-open ([#646](https://github.com/kdlbs/kandev/pull/646)) @@ -92,6 +120,25 @@ All notable changes to Kandev. - apply display filters in list view ([#612](https://github.com/kdlbs/kandev/pull/612)) - isolate dev mode state when running inside a kandev task ([#617](https://github.com/kdlbs/kandev/pull/617)) - disable multi-select mode after bulk archive or delete ([#623](https://github.com/kdlbs/kandev/pull/623)) + +### Performance + +- focus-gated git polling to reduce CPU on retained worktrees ([#610](https://github.com/kdlbs/kandev/pull/610)) + +### Documentation + +- add Discord link and require e2e tests for UI changes ([#630](https://github.com/kdlbs/kandev/pull/630)) +- refresh README, roadmap, and workflow templates ([#624](https://github.com/kdlbs/kandev/pull/624)) + +## 0.34 - 2026-04-17 + +### Features + +- render short tool-call output inline ([#604](https://github.com/kdlbs/kandev/pull/604)) +- associate agent profiles with workflows and steps ([#597](https://github.com/kdlbs/kandev/pull/597)) + +### Bug Fixes + - close file diff tab when uncommitted change is undone ([#618](https://github.com/kdlbs/kandev/pull/618)) - stop killing live agents on resume race ([#619](https://github.com/kdlbs/kandev/pull/619)) - treat skipped checks as passing and add ready-to-merge status ([#616](https://github.com/kdlbs/kandev/pull/616)) @@ -103,6 +150,16 @@ All notable changes to Kandev. - prevent duplicate review tasks via atomic PR reservation ([#605](https://github.com/kdlbs/kandev/pull/605)) - stop panels from opening in the left sidebar group ([#603](https://github.com/kdlbs/kandev/pull/603)) - align top-bar right button heights ([#601](https://github.com/kdlbs/kandev/pull/601)) + +## 0.33 - 2026-04-16 + +### Features + +- add start_agent and local_path params to create_task ([#505](https://github.com/kdlbs/kandev/pull/505)) +- acp-first profiles, models, and modes ([#566](https://github.com/kdlbs/kandev/pull/566)) + +### Bug Fixes + - improve plan comment formatting to match code review style ([#600](https://github.com/kdlbs/kandev/pull/600)) - skip ExtraFiles liveness pipe on Windows to fix agentctl startup ([#599](https://github.com/kdlbs/kandev/pull/599)) - disable resume and show agent selector when profile is deleted ([#578](https://github.com/kdlbs/kandev/pull/578)) @@ -122,6 +179,19 @@ All notable changes to Kandev. - stop vertical scroll on mobile column tabs ([#583](https://github.com/kdlbs/kandev/pull/583)) - disable inherited git-crypt filters when repo is locked ([#577](https://github.com/kdlbs/kandev/pull/577)) - handle locked git-crypt repos and localized git errors ([#532](https://github.com/kdlbs/kandev/pull/532)) + +### Refactoring + +- re-key dockview panel state by environmentId instead of sessionId ([#491](https://github.com/kdlbs/kandev/pull/491)) + +## 0.32 - 2026-04-13 + +### Features + +- add multi-select and drag-to-move for file tree and changes panel ([#490](https://github.com/kdlbs/kandev/pull/490)) + +### Bug Fixes + - register MCP tools with _kandev suffix to match sysprompt ([#572](https://github.com/kdlbs/kandev/pull/572)) - recalculate dockview layout after fast-path session switch ([#571](https://github.com/kdlbs/kandev/pull/571)) - prevent worktree branches from inheriting upstream tracking ([#570](https://github.com/kdlbs/kandev/pull/570)) @@ -129,21 +199,8 @@ All notable changes to Kandev. - make PR Approve button look clickable ([#567](https://github.com/kdlbs/kandev/pull/567)) - associate PRs with tasks after branch rename or PR replacement ([#565](https://github.com/kdlbs/kandev/pull/565)) -### Performance - -- focus-gated git polling to reduce CPU on retained worktrees ([#610](https://github.com/kdlbs/kandev/pull/610)) - -### Refactoring - -- unify task.updated via single publisher and shared mapper ([#676](https://github.com/kdlbs/kandev/pull/676)) -- move system prompts from Go constants to external config files ([#673](https://github.com/kdlbs/kandev/pull/673)) -- re-key dockview panel state by environmentId instead of sessionId ([#491](https://github.com/kdlbs/kandev/pull/491)) - ### Documentation -- improve commit skill with mandatory verify and pre-commit check ([#691](https://github.com/kdlbs/kandev/pull/691)) -- add Discord link and require e2e tests for UI changes ([#630](https://github.com/kdlbs/kandev/pull/630)) -- refresh README, roadmap, and workflow templates ([#624](https://github.com/kdlbs/kandev/pull/624)) - enforce test requirements and improve agent skill resilience ([#543](https://github.com/kdlbs/kandev/pull/543)) ## 0.31 - 2026-04-09 @@ -1099,4 +1156,3 @@ All notable changes to Kandev. - resolve conflicts with main - diff --git a/scripts/release/release-pr.sh b/scripts/release/release-pr.sh index 636712e00f..cd3d1d7e32 100755 --- a/scripts/release/release-pr.sh +++ b/scripts/release/release-pr.sh @@ -47,6 +47,7 @@ CURRENT_CLI_MAJOR=0 CURRENT_CLI_MINOR=0 CURRENT_CLI_PATCH=0 CURRENT_APP_TAG="" +CURRENT_APP_TAG_FOUND=0 CURRENT_APP_MAJOR=0 CURRENT_APP_MINOR=0 @@ -232,6 +233,7 @@ detect_current_app_version() { local tags tags="$(git -C "$ROOT_DIR" tag --list 'v*')" + CURRENT_APP_TAG_FOUND=0 local found=0 local best_major=0 local best_minor=0 @@ -239,7 +241,7 @@ detect_current_app_version() { while IFS= read -r tag; do [[ -z "$tag" ]] && continue - if [[ "$tag" =~ ^v([0-9]+)\.([0-9]+)(\.[0-9]+)?$ ]]; then + if [[ "$tag" =~ ^v([0-9]+)\.([0-9]+)$ ]]; then local major="${BASH_REMATCH[1]}" local minor="${BASH_REMATCH[2]}" if [[ "$found" -eq 0 ]] || (( 10#$major > 10#$best_major )) || \ @@ -254,6 +256,7 @@ detect_current_app_version() { CURRENT_APP_MAJOR="$best_major" CURRENT_APP_MINOR="$best_minor" CURRENT_APP_TAG="v${CURRENT_APP_MAJOR}.${CURRENT_APP_MINOR}" + CURRENT_APP_TAG_FOUND="$found" if [[ "$found" -eq 1 ]]; then log "Current app tag: $(bold "$CURRENT_APP_TAG") $(dim "(latest git tag matching vM.m)")" @@ -371,7 +374,7 @@ ensure_prerequisites() { log_ok "Working tree is clean" log "Fetching tags from origin..." - run_cmd git -C "$ROOT_DIR" fetch --tags + run_cmd git -C "$ROOT_DIR" fetch --tags origin log_ok "Tags fetched" } @@ -422,6 +425,75 @@ ensure_app_tag_available() { log_ok "Tag $(bold "$NEXT_APP_TAG") is available" } +latest_origin_app_tag() { + local refs + if ! refs="$(git -C "$ROOT_DIR" ls-remote --tags origin 'refs/tags/v*')"; then + return 2 + fi + + local found=0 + local best_major=0 + local best_minor=0 + local ref tag + + while read -r _ ref; do + [[ -z "${ref:-}" ]] && continue + tag="${ref#refs/tags/}" + tag="${tag%\^\{\}}" + if [[ "$tag" =~ ^v([0-9]+)\.([0-9]+)$ ]]; then + local major="${BASH_REMATCH[1]}" + local minor="${BASH_REMATCH[2]}" + if [[ "$found" -eq 0 ]] || (( 10#$major > 10#$best_major )) || \ + (( 10#$major == 10#$best_major && 10#$minor > 10#$best_minor )); then + found=1 + best_major="$major" + best_minor="$minor" + fi + fi + done <<<"$refs" + + [[ "$found" -eq 1 ]] || return 1 + echo "v${best_major}.${best_minor}" +} + +ensure_latest_app_tag_present() { + [[ "$APP_SELECTED" -eq 1 ]] || return 0 + [[ "$DRY_RUN" -eq 1 ]] && return 0 + + log "Verifying latest app tag $(bold "$CURRENT_APP_TAG") is present locally..." + if [[ "$CURRENT_APP_TAG_FOUND" -eq 0 ]]; then + local origin_status + if latest_origin_app_tag >/dev/null; then + origin_status=0 + else + origin_status="$?" + fi + if [[ "$origin_status" -eq 0 ]]; then + die "No local app tag found, but origin has app tags. Fetch origin tags and retry." + fi + if [[ "$origin_status" -ne 1 ]]; then + die "Could not reach origin to verify app tags. Check your connection and retry." + fi + log_ok "No prior app tags on origin or locally" + return 0 + fi + + local origin_app_tag + if ! origin_app_tag="$(latest_origin_app_tag)"; then + die "Could not determine latest app tag from origin. Refusing to generate CHANGELOG.md." + fi + + if [[ "$CURRENT_APP_TAG" != "$origin_app_tag" ]]; then + die "Latest local app tag is $CURRENT_APP_TAG, but origin latest is $origin_app_tag. Refusing to generate CHANGELOG.md." + fi + + if ! git -C "$ROOT_DIR" rev-parse --verify --quiet "refs/tags/$CURRENT_APP_TAG" >/dev/null; then + die "Latest app tag $CURRENT_APP_TAG is missing locally after fetching origin tags. Refusing to generate CHANGELOG.md." + fi + + log_ok "Latest app tag $(bold "$CURRENT_APP_TAG") is present" +} + # -- Release plan -------------------------------------------------------------- print_plan() { @@ -509,6 +581,10 @@ apply_cli_release() { generate_changelog() { [[ "$APP_SELECTED" -eq 1 ]] || return 0 + log "Refreshing origin tags before changelog generation..." + run_cmd git -C "$ROOT_DIR" fetch --tags origin + ensure_latest_app_tag_present + log "Generating changelog for $(bold "$NEXT_APP_TAG")..." if [[ "$DRY_RUN" -eq 1 ]]; then echo " $(yellow "[dry-run]") git-cliff --tag $NEXT_APP_TAG -o CHANGELOG.md" @@ -705,6 +781,7 @@ main() { detect_current_cli_version detect_current_app_version compute_next_versions + ensure_latest_app_tag_present ensure_app_tag_available compute_total_steps print_plan