Releases: Anantys-oss/koan
Releases · Anantys-oss/koan
Kōan v0.78
- Merge pull request #2047 from Koan-Bot/koan.atoomic/update-last-release (8063eab)
- fix: constrain release tags to upstream, detect downgrades, fix API restart ordering (b83b47c)
- fix: address review feedback for /update_last_release robustness (467ed91)
- feat: add /update_last_release to checkout latest release tag (403ddb9)
- Merge pull request #2035 from Koan-Bot/koan.atoomic/orphan-skill-test-robust (5dbe88e)
- Merge pull request #2046 from Koan-Bot/koan.atoomic/focus-mode-sentinel-markers (80da023)
- Merge pull request #2048 from Koan-Bot/koan.atoomic/fix-issue-2042 (08cd2f4)
- Merge pull request #2049 from Koan-Bot/koan.atoomic/fix-issue-2044 (089aa39)
- fix(stagnation): exception-safe test cleanup and real-fs assertions per review (a140552)
- refactor(memory): extract _extract_file_header() to deduplicate header parsing (b60a9cf)
- perf(stagnation): cache _migrate_tracker_filename to avoid per-iteration stat syscall (6ccab7c)
- Merge pull request #2038 from Koan-Bot/koan.atoomic/ci-dispatch-api-vs-green (08cc994)
- Merge pull request #2040 from Koan-Bot/koan.atoomic/fsync-prune-memory-log (2af1f4c)
- fix(prompt_builder): guard against misordered focus mode sentinels (17b70f6)
- refactor(prompt_builder): replace regex with sentinel markers for focus mode override (87973e4)
- fix(memory): add fsync after truncate+write in prune_memory_log() (43f634d)
- fix(ci_dispatch): distinguish API failure from CI green in fetch_failing_check_runs (8793111)
- test: ignore pycache-only dirs in orphan skill check (a66598b)
Kōan v0.77
- Merge pull request #2039 from Anantys-oss/slack-integration (c411c7e)
- style(tests): fix ruff lint in test_skills.py (cb62ad2)
- docs(slack): correct the assistant status rendering scope (aa9278f)
- feat(slack): show a "thinking" status while replying (302e420)
- feat(slack): in-thread replies and fix dropped events (51befe3)
- Fixup ssh connection (536eddb)
- Merge pull request #2034 from Koan-Bot/koan.atoomic/skill-md-validation (65d610a)
- test(skills): add core skill compliance check for validate_skill_metadata (b602994)
- feat(skills): validate SKILL.md frontmatter at parse time (b163bbc)
- Merge pull request #2032 from Koan-Bot/koan.atoomic/fix-claudemd-init-creation (b472546)
- Merge pull request #2033 from Koan-Bot/koan.atoomic/ignore-other-user-mentions (55f6f01)
- fix: use /init for claude provider, prompt template for others in INIT mode (54df9ff)
- fix: use prompt template for /claudemd INIT mode instead of /init (a022419)
- fix(bridge): add diagnostic output to getMe exception handler (fdef11c)
- feat(bridge): ignore group messages addressed to other users (bb701c9)
- Merge pull request #2031 from Koan-Bot/koan.atoomic/fix-autoreview-merge-gate (7b25f09)
- Merge pull request #2029 from atoomic/koan/fix-github-reply-spam (79847af)
- fix: resolve CI failures on #2031 (attempt 1) (0c70b29)
- fix: check_auto_merge distinguishes merge-skip from merge-success (16be907)
- fix(github): address review feedback on reply breaker silent failures (346336d)
- fix(github): stop reply spam on closed and reprocessed PRs (ac9a503)
- fix: check_auto_merge returns None when auto-merge not configured (b51a363)
- Merge pull request #2030 from Koan-Bot/koan.atoomic/add-gh-skill (454fbfb)
- feat: add /gh skill to show GitHub CLI auth status (f6b3449)
- Merge pull request #2014 from Koan-Bot/koan.atoomic/implement-1659 (94ac0e8)
- Merge pull request #2013 from Koan-Bot/koan.atoomic/fix-recover-tracker-error-handling (777d56c)
- Merge pull request #2026 from Koan-Bot/koan.atoomic/status-show-parallel-workers (45186ad)
- Merge pull request #2028 from Koan-Bot/koan.atoomic/fix-multi-mention-feedback (42b7dc0)
- Merge pull request #2027 from Koan-Bot/koan.atoomic/ci-failure-emoji-consistency (f920c0c)
- Merge pull request #2025 from Koan-Bot/koan.atoomic/abort-review-closed-pr (ff12e5a)
- fix(github): address multi-mention review concerns from PR #2023 (7c2f8ba)
- fix(notify): use 🚦 for ci_dispatch failure notifications too (5443fe1)
- feat(status): show parallel worker count in header when > 1 (ac65d45)
- feat(review): skip closed/merged PRs unless --force (0f1cb9f)
- fix(api): log attention errors and extract status helpers per review (345eee2)
- feat(api): enrich /v1/status with elapsed_seconds, signals, and attention_count (9ec945f)
- fix(recover): propagate tracker write errors and log safe-wrapper failures (9f519fc)
- fix(recover): guard per-mission tracker calls against runtime errors (67ade7e)
- Merge pull request #2023 from Koan-Bot/koan.atoomic/fix-multi-mention-per-thread (9503ca4)
- Merge pull request #2024 from atoomic/review-lines (9d5eea7)
- Make /review finding locations clickable file links (41def3c)
- fix(github): process all @mentions in a thread, not just the last one (bf47425)
- Merge pull request #1532 from Koan-Bot/koan.atoomic/implement-1304 (2fc8f65)
- Merge pull request #2020 from atoomic/koan/fix-github-auth-false-warning (5c9b48c)
- Merge pull request #2022 from atoomic/ack-false (0de4f6d)
- fix(github): default github.ack_enabled to false (1eabfb2)
- fix(github): trust existing GH_TOKEN instead of false auth warning (646a982)
- Merge pull request #2011 from Koan-Bot/koan.atoomic/improve-pr-reply-threading (48e3323)
- fix(parallel): apply review feedback — skill guard, quota fallback, error isolation (513a0f9)
- fix(parallel): apply review feedback — skill guard, quota fallback, error isolation (cdf6cc5)
- feat(parallel): activate session orchestration in main loop (440cc5c)
- Merge pull request #2009 from Koan-Bot/koan.atoomic/review-verdict-approved-toggle (f9e3133)
- Merge pull request #2005 from Koan-Bot/koan.atoomic/implement-1988 (796388a)
- Merge pull request #1961 from exciton/claude/fix-unified-retry-cap (7f0157d)
- Merge pull request #2012 from Koan-Bot/koan.atoomic/status-show-branch (45be321)
- fix(tests): update mock targets from post_reply to post_threaded_reply (194fd2c)
- fix(github): apply review feedback for threading and ack reliability (c3c89b6)
- feat(status): show current branch in header (9d8c7eb)
- fix(skills): check combo expansion result and remove unused import (ee71485)
- fix(skills): make combo skills executable from direct dispatch path (fd5b250)
- test: add parallel combo skill tests and backward compatibility checks (3efbc11)
- docs: document parallel combo skills and audit_all (e693128)
- feat(skills): add audit_all parallel combo skill (fa4b7a4)
- feat(skills): add parallel flag to combo skills for batch insertion (7758fe5)
- fix(review): fail closed on verdict config errors + add review_verdict docs (43ee85e)
- fix(review): fail closed on verdict config errors + add review_verdict docs (d789ced)
- feat(review): add review_verdict.approved toggle to control verdict submission (1e181f5)
- feat(github): thread replies and add command acknowledgments (3d3b627)
- Merge pull request #2010 from Koan-Bot/koan.atoomic/add-time-skill (f27f03b)
- feat(skill): add /time core skill with /date alias (6831315)
- Merge pull request #2007 from Koan-Bot/koan.atoomic/stronger-unlimited-quota-helper (50b3065)
- Merge pull request #2008 from Koan-Bot/koan.atoomic/fix-stats-perf-alias (0397c82)
- fix(quota): harden _get_budget_mode() for non-dict usage config per review (698546b)
- fix(quota): harden is_unlimited_quota() and fix budget_mode fallback (bcff42b)
- fix(stats): resolve project aliases in --perf mode (12818eb)
- Merge pull request #2002 from Koan-Bot/koan.atoomic/fix-ai-project-alias (b701659)
- refactor(skills): centralize alias resolution into shared helpers per review feedback (a3ef53d)
- fix(skills): resolve project aliases across all skill handlers (c7a348c)
- Merge pull request #2003 from Koan-Bot/koan.atoomic/suppress-burn-rate-unlimited-quota (b1143f8)
- Merge pull request #1991 from Koan-Bot/koan.atoomic/implement-1986 (2887416)
- fix: resolve CI failures on #2003 (attempt 1) (4c612a7)
- fix(burn-rate): make is_unlimited_quota() internally safe, remove caller boilerplate (94db284)
- fix(burn-rate): suppress warnings when unlimited_quota is set (92b88f1)
- fix(debug): fix handler crash, PR submission kwargs, and mission locking (5d49a78)
- fix(debug): fix handler crash, PR submission kwargs, and mission locking (9afd38d)
- fix: add debug/dbg to _GITHUB_ACTION_RE for mission dedup (ff87da5)
- docs: add /debug skill to CLAUDE.md, user manual, and skills reference (0abcc3f)
- feat(debug): add auto-escalation from failed /fix to /debug with config gate (6272a71)
- feat(debug): add debug_runner, handler, and skill_dispatch registration (5b36ec8)
- feat(skills): add /debug skill prompt and metadata (db3c110)
- feat(conventions): add DEBUG_HYPOTHESIS marker parser for /debug skill (96e148e)
- Merge pull request #1992 from Koan-Bot/koan.atoomic/implement-1985 (029d966)
- Merge pull request #2001 from Koan-Bot/koan.atoomic/onboarding-config-yaml-provider (20d4f0c)
- fix(onboarding): harden config.yaml reads and ensure file creation (a0a8fdf)
- fix(onboarding): write cli_provider to config.yaml instead of .env (f246569)
- fix(brief): handle journal read OSError to preserve digest delivery (0e404cd)
- fix(brief): make scheduled events dispatchable, stop silent auto-scheduling (60c9b86)
- feat(skills): add /brief daily digest skill (9a7e00d)
- Merge pull request #1954 from exciton/claude/fix-prune-decoupling (335a8a9)
- Merge pull request #1993 from Koan-Bot/koan.atoomic/fix-jira-repo-alias (6c4ae45)
- fix(jira): resolve project aliases in repo: override syntax (8741a8c)
- Merge remote-tracking branch 'origin/main' into claude/fix-prune-decoupling (051d6eb)
- Merge remote-tracking branch 'origin/main' into claude/fix-unified-retry-cap (ff003cb)
- fix(retry): consistent direct config access + error-level clear failures (a7fb9c4)
- Merge pull request #1920 from Koan-Bot/koan.atoomic/implement-1907 (680c89b)
- feat(memory): log FTS5 read-path usage for observability (0983161)
- fix(memory): run SQLite FTS5 indexing as a standalone startup step (4becd3a)
- fix(memory): prevent FTS5 false-latch, entry_count silent swallow, and ensure_db conn leak (cb7b4e5)
- fix(memory): prevent FTS5 false-latch, entry_count silent swallow, and ensure_db conn leak (22e24ab)
- fix(memory): close SQLite connections on error paths and cap recent_entries scan (f845bdc)
- docs: update memory architecture for SQLite FTS5 index (417b0bb)
- feat(memory): FTS5-aware read_memory_window and learnings filter (a1867c7)
- feat(memory): wire JSONL→SQLite migration into startup path (d1b8c2c)
- feat(memory): dual-write JSONL + SQLite in append/prune (b7fe836)
- feat(memory): add SQLite FTS5 storage layer and build_fts5_query() (50189de)
- Merge pull request #1968 from Koan-Bot/koan.atoomic/implement-1966 (344155f)
- fix: resolve CI failures on #1968 (attempt 1) (34f5ff4)
- fix(review): use
is not Nonecheck sobody_enabled: falsedisables verdict body (2270200) - docs(config): add review_verdict config example (aa5a6d8)
- feat(review): add configurable verdict body with concise blocker summary (617c869)
- feat(config): add review_verdict config for verdict body control (d351185)
- Merge pull request #1950 from Koan-Bot/koan.atoomic/implement-1944 (3677601)
- Merge pull request #1972 from Koan-Bot/koan.atoomic/fix-claudemd-mission-runner-accuracy (8af1471)
- Merge pull request #1967 from Koan-Bot/koan.atoomic/implement-1965 (c1a8157)
- docs(claude.md): fix mission_runner.py and missio...
Kōan v0.76
- docs: update CLAUDE.md (#1606) (a43eb54)
- fix: harden subprocess error handling and deduplicate missing-project warnings (#1608) (05d612b)
- feat(doctor): add --fix mode for auto-repair of common issues (#1611) (cd78705)
- feat(stats): surface cost, cache metrics, and per-project spend in /stats (#1612) (23daa8c)
- perf(missions): prune Failed section + inline pruning after every completion (#1613) (d93d768)
- fix(run): proceed on dedup guard error instead of silently skipping (#1616) (837a0a5)
- fix(issue_cli): add error handling and test coverage (#1617) (f4ea1f2)
- fix(quota): stop false-positive quota pauses on skill missions + add /quota reset (#1621) (8372e55)
- Recover stalled rebase feedback and make bot-comment filtering opt-out (#1629) (8244eb5)
- feat(jira): post structured PR/plan comments back to Jira issues (#1628) (bdbfef0)
- chore(config): update codex recommended models (#1627) (0c5b5d6)
- feat(pid_manager): notify Telegram when operator runs make stop (38fdf5f)
- feat(docker): add recommended dev packages (ripgrep, fd, bat, ruff, etc.) (03b9e76)
- Add shared base-branch/context handling for URL skills (d945f33)
- fix(models): honor configured model role in ai_runner + spec_generator (#1620) (d5b3014)
- fix(skills): /implement and /fix mishandle non-main/master base branches (#1588) (#1590) (06c86ee)
- fix(plan): use mission model for plan generation and improvement (issue #1614) (#1619) (c5ebbfe)
- fix(quota): anchor rate_limit_event status + decollide OK summary line (979f871)
- fix(ci): use pull_request_target so fork PRs can access BOT_TOKEN (364cd06)
- Add request review pipeline (8aff6b6)
- fix(quota): status-aware rate_limit_event detection to stop false quota pauses (cceecb7)
- refactor(missions): extract _collect_item_ranges to deduplicate 5 loops (37c628e)
- fix: thread-safe skill registry cache + fingerprint body detection (9c702dd)
- refactor(run): consolidate 3 quota/auth error handling paths into shared functions (316aa82)
- Add allow_rebase_foreign_prs config to /rebase ownership check (0de9943)
- fix: add diagnostic output to mission_command_name except block (c2246a8)
- fix: apply rebase timeout override across all dispatch paths (bbd674f)
- Add activity-aware timeouts to /rebase review and CI-fix phases (8ded06a)
- fix(explore): include workspace-discovered projects in /explore listing (ea89595)
- fix: show in-progress mission in /status during pause/stop (983c8b5)
- fix: count github missions only when actually queued (cb4c61b)
- fix: ignore stale restart marker during idle sleep (c01bf56)
- fix: prevent idle loop spam in always-on mode (03c56a2)
- fix: throttle notification polling in always-on mode (c9a4c31)
- Setup IP for dashboard (07b80dd)
- Improve Codex usage accounting and quota detection clarity (08aeda6)
- chore: update codex lightweight model to gpt-5.4-mini (0778bb9)
- fix(list): remove duplicate origin markers from mission display (a395b97)
- Make rebase remote selection repository-aware (209bef2)
- refactor(issue_tracker): tighten Jira URL check, lowercase cache key, document JQL safety (6725452)
- refactor(run): centralize quota reset buffer in quota_handler (e1e3b7c)
- test(prompts): assert KOAN_PYTHON placeholder never leaks (47b97a4)
- fix(audit): strip GitHub search operators, fail closed on unknown severity (a7893fe)
- perf(issue_tracker): cache repo context, skip gh probes for Jira audits (f0a470a)
- refactor(issue_tracker): narrow blanket except blocks (362854d)
- refactor(issue_tracker): invalidate projects cache inside set_project_tracker (af62650)
- fix(run): probe quota on exit-0 skill dispatch (1c95840)
- Improve quota pause handling and coverage (f61d66c)
- Fail fast on unmapped Jira project in plan/fix/implement (6091be8)
- Improve skill execution and quota handling (9d31aa6)
- Reorganize documentation files (65efd32)
- test: expand coverage for agent helpers (4c54f46)
- feat(tracker): per-project GitHub/Jira issue routing (17f9504)
- refactor(observability): use suppress_logged context manager instead of try/except/log blocks (0105175)
- fix: resolve CI failures on #1538 (attempt 1) (0e5bb1c)
- refactor(observability): use suppress_logged context manager instead of try/except/log blocks (ca30b5a)
- fix(observability): replace silent contextlib.suppress with logged handlers (6d88ee8)
- fix(review-dispatch): address review feedback on comment summary, tracker state, and logging (93a4266)
- feat: auto-dispatch missions on new PR review comments (2656fa4)
- fix(projects_config): restore get_project_mcp accessor per review feedback (71a3de7)
- refactor(projects_config): remove unused get_project_mcp accessor (f4b63c9)
- refactor: consolidate subprocess kill/watchdog into subprocess_runner.py (f3af7b5)
- fix(config): restore wildcard example for enterprise users per review feedback (58843c3)
- fix(security): enforce write-access check on reply wildcard + persist rate limits (ac908ee)
- feat: resume Claude session for post-mission reflection (#1219) (839fd8a)
- feat(alias): resolve project aliases in skill arguments (16e6118)
- fix(skills): repair /models command registration (fc35cc9)
- fix: prevent rapid-fire duplicate /ci_check missions (d9bdc91)
- docs(github): document review_requested API-call trade-off (7eae009)
- fix(github): dedup review-request missions by PR head SHA (07f464c)
- fix(review): recover review JSON from preamble with brace tokens and embedded fences (a517ece)
- fix: sync CLAUDE.md core skills list with actual skills directory (3db5f9b)
- fix: thread project_path through all fetch_pr_context callers (afd05c2)
- fix: sync _GITHUB_ACTION_RE with all github_enabled skill commands (83e81c5)
Kōan v0.75
- fix: use errors=replace for CLI subprocess stdout decoding (ae779fb)
- fix: wrap commit tracker output in code block for Telegram rendering (d877a35)
- fix: exclude merge commits from startup git log (d510d41)
- refactor: merge commit_tracker into auto_update per review feedback (4c99091)
- feat: track Kōan's own commits across startups (213b176)
- fix: update codex full access flag (d045213)
- fix: make quota detection provider-specific (3c3a7c2)
- fix: pass codex prompts via stdin (ee78a31)
- feat(config): add provider-scoped model sections and /models skill (1b8e3a7)
- fix(review): capture Codex final output reliably (a243277)
- fix(review): use review_mode for review skill (4944126)
- feat(skills): add /diagnose skill to analyze and retry failed missions (16bf5b1)
- fix(tests): align codex output args test with --json behavior (cc5684c)
- Fix Codex review liveness streaming (9de54d6)
- Add Codex project instructions (0465882)
- feat(review): retry oversized-PR diff fetch with gh token URL on auth failure (ec5f814)
- fix(review): fetch oversized-PR diff via local remote, not a bare HTTPS URL (c5dd3d0)
- fix(review): fall back to local git diff when PR has > 300 files (41cf8b5)
- feat(skills): add /project as alias for /projects (bb3008c)
- feat: add /alias skill for project name shortcuts (0abac52)
- refactor(makefile): extract KOAN_RUN/KOAN_TEST_RUN shared prefixes (6f41cf9)
- fix(makefile): invoke venv python via absolute path to silence site warnings (908df79)
- feat: auto-dispatch CI fix missions for failing Koan PRs (f606384)
- fix(missions): add plan + other github-enabled commands to dedup regex (d4e36f8)
- fix(review): don't PATCH another bot's review comment after bot switch (611ab76)
- fix(tests): update test_usage_analytics to use renamed "series" key (194b15d)
- feat(dashboard): add per-project/type analytics charts with time navigation (75dbb63)
- refactor(prompts): reorder verification criteria for prompt cache optimization (a61dcac)
- feat(prompts): add INCOSE-aligned verification criteria to plan/review/audit (cce186d)
- fix: strip --now flag from implement skill to prevent argparse crash (efeb3d0)
- feat(github): support --now priority flag in @mention commands (df27629)
- fix: stop infinite re-dispatch of missions with internal double spaces (c00c28b)
- fix: replace private org/user names with generic placeholders in utils (559b88a)
- fix: resolve cross-owner PR URLs via GitHub fork API (f5382c2)
- refactor(session): remove unused kill_all_sessions function (8236b3a)
- feat(stats): add token spend, cost estimates, and mission-type breakdown (f43e501)
- feat: add dashboard observability viewer (logs + health) (bb769bf)
- fix: replace deprecated datetime.utcnow() and add burn-rate warning tests (9ac35d6)
- perf(prompt): reorder system prompt sections for cache prefix hits (d786fbe)
- fix(docker): restore missions.docker.md overlay mount per review (34561a1)
- fix(docker,provider): add Codex provider support + remove deprecated head_tracker (85d4fe6)
- fix(audit): address PR review — security regression, silent failures, collisions (1a9ac2a)
- feat(audit): write local security files for high+ findings instead of redacted issues (24d4477)
- feat(plan-improve): enforce simplicity and maintainability in improvement prompt (afe0e13)
- feat(implement): pass improvement context to implementation agent (3b489c4)
- feat(implement): autonomous plan improvement loop replaces blocking gate (496f9a8)
- fix(update_hint): record notified tag to prevent duplicate notifications with auto_update (5ce6d1b)
- fix: resolve CI failures on #1495 (attempt 1) (98dc7b3)
- feat(update_hint): use tag-based mechanism for update notifications (8581175)
- feat(auto_update): use release tags for update notifications (bda2877)
- fix(pvrs): use raw JSON body for security advisory submissions (8a2a169)
- fix(attention): convert GitHub API URLs to web URLs for @mention links (fe3fb68)
- fix(mission_runner): set cost_tracking_failed on non-zero exit too (47aa2ca)
- fix(burn_rate): log warning when record_run() drops invalid cost samples (3bfcd4f)
- fix(notifications): send Telegram alert when quota check is unreliable (fde6d51)
- fix(notifications): close same alias gap in attention.py + address review (b81cba3)
- fix(notifications): refresh workspace remote cache when building known_repos (f905b81)
- fix(add_project): clone private repos via gh to fix auth failure (de7ab87)
- Add make setup (f6685db)
- fix(missions): complexity tag breaks mission lifecycle transitions (86e0185)
- docs: update CLAUDE.md (5e51e3f)
Kōan v0.74
- fix(burn_rate): add diagnostic logging to silent except block (dbea821)
- fix(burn_rate): alert on corrupted state file instead of silent reset (3f2bfbb)
- ci: strip emoji prefix from job-level names (f2d2c85)
- fix(claudemd): use timestamped branch names to avoid collision (67d0e02)
- test(stagnation): update classify-exception test for duplicate-counting semantics (4562baa)
- fix(rtk): detect
rtk hookmarker shipped by rtk >= 0.41 (eafbc6e) - fix(auto_update): add overall timeout to pull_upstream to prevent deadlock (fe21f2e)
- fix(stagnation): count duplicates not total samples for abort threshold (48503e3)
- test: add regression test for stagnation monitor off-by-one (a74c98b)
- feat(review): use collapsible sections for silent failure analysis (b89701c)
- fix(notifications): close silent dedup gap in check_already_processed (f4b676b)
- perf(missions): eliminate redundant find_section_boundaries() in reorder_mission() (c3b5847)
- docs(skills): document sub_commands field for combo skill authoring (66e8cda)
- refactor(skills): derive combo skills from SKILL.md frontmatter (9eb0d32)
- fix(notify): use ⏭ and suppress redundant notifications for skipped /fix (9712ac8)
- fix(quota): unify quota handling across skill and Claude mission paths (4463988)
- fix(burn_rate): hold exclusive lock across read-modify-write in record_run (144c794)
- feat: add --comments flag for comment-quality review pass (29cce5a)
- test: fill coverage gaps in contemplative_runner, stagnation_monitor (7230887)
- refactor(github_notifications): encapsulate global state in NotificationTracker class (cb15203)
- refactor: extract shared log helper and centralize magic constants (910eb4e)
- feat(contemplative): adapt roll probability from historical session outcomes (648a22d)
- fix(prompt_builder): replace debug print statements with logger.info (75dbf69)
- feat(prompt_builder): add budget-aware context trimming (00ddf31)
- test(missions): add unit tests for _collect_item_start_indices and _find_insertion_index helpers (7565a4b)
- refactor(missions): simplify reorder_mission with arithmetic boundaries and extracted helpers (b89e40f)
- feat: drain stale foreign-repo notifications in multi-instance mode (1f30772)
- fix(spec_audit): remove default recurring.json to avoid forced schedule on all installs (2862deb)
- feat(skill): add /spec_audit for autonomous docs/code drift detection (e665204)
- fix(ai): reference structured findings format in exploration prompt guidance (2dbf7cd)
- feat(ai): inject project learnings and health metrics into /ai exploration prompt (d73c646)
- fix(loop_manager): skip notification dispatch in branch-saturated sleep (502ecc8)
- fix(notifications): use comment_id for dedup and monotonic clock for TTL (31ecc6b)
- fix: normalize log prefixes in run_ci_fix_loop to match claude_step convention (56bc292)
- refactor: extract shared CI fix loop into claude_step.run_ci_fix_loop (0edf98b)
- style: remove extra blank line in github_skill_helpers.py (3eb4707)
- refactor: extract duplicated GitHub skill helpers into shared functions (daeea1c)
- perf(projects_config): add mtime-keyed cache to load_projects_config() (d951683)
- feat(mission_runner): surface token extraction failure in result dict (ddb2b38)
- feat(pipeline): track post-mission timeout rate and alert on overload (c695e42)
- fix(budget): re-check affordability after complexity tier resolves (062d17d)
- feat(github): drain unregistered-repo notifications in single-instance mode (4d29ca8)
- fix(skills): prevent TypeError when SkillError bypasses isinstance after module reload (f8ca246)
- fix(check_need): remove unused import and use logger for diagnostics (c37e4bd)
- feat(skill): add /check_need skill for PR/issue relevance analysis (b3fd976)
- feat(status): show koan version in /status header (9e1eb60)
- refactor(skills): extract shared audit handler logic into audit_helpers module (bfb149f)
- refactor: extract heartbeat read-parse-age into shared utils (f8302f2)
- fix(security_review): correct write_to_journal import and risk level test input (7754a63)
- rebase: apply review feedback on #566 (f481a2f)
- feat: recreate PR #566 — feat: differential security review on mission diffs (2d438d5)
- feat(health): auto-inject diagnostic missions for low-success projects (d35d7a8)
- fix(snapshot): log diagnostic trace on snapshot write failure (164048d)
- fix(logging): raise CI queue drain errors to warning level (aa4ad91)
- feat(mission_runner): emit STEP_FAILED|<step_name> to stderr on post-mission step failures (aee5c4b)
- feat(ai): add focus/context parameter to /ai skill (49cd85c)
- feat(ai): add structured output parsing with ---IDEA--- blocks (5f348ba)
- fix: resolve CI failures on #1048 (attempt 1) (0cbf272)
- fix: resolve CI failures on #1048 (attempt 1) (e580072)
- fix: restrict silent-failure-hunter auto-trigger to added diff lines and tighten regex (0bd6367)
- feat: add silent-failure-hunter pass to /review skill (08465ac)
- fix(notifications): only set _fetch_failure_alerted on successful outbox write (d606cbd)
- fix(scheduler): remove example event file that fires on fresh installs (7051b11)
- feat(scheduler): add datetime-scheduled one-shot mission triggers (a76c3de)
- feat(suggestions): add automation suggestion engine (cb3c8ef)
Kōan v0.73
- feat(session): record contemplative outcomes in session_tracker (f4ea867)
- refactor(doc): strengthen documentation prompt with deeper investigation, evidence citations, and failure guard rails (f365168)
- refactor(doc): improve documentation extraction prompt with deeper investigation and guard rails (149d108)
- feat(skill): add /doc skill for codebase documentation extraction (571443d)
- fix(release): replace git describe with git tag for last-tag lookup (da9800b)
- feat(skills): early abort worker skills when required args missing (45c1add)
- style: add Unicode emoji prefixes to GitHub Actions workflow names (a9920d0)
- fix(stagnation): annotate classify error print as intentional diagnostic (fa13a45)
- feat(stagnation): classify root-cause patterns before abort (f65558c)
- fix(github): warn when @mentions from unregistered repos are dropped (8e6db5c)
- fix: resolve CI failures from project_name parameter addition (163183f)
- fix: resolve_target_repo respects submit_to_repository config (c20efa4)
- fix(abort): add macOS fallback for _verify_is_runner (babc4e2)
- fix(implement): replace debug print with logger.warning in plan-review cache (0c057d2)
- feat(implement): add content-hash caching to plan-review gate (a7aa0c1)
- fix(selection): remove success-rate double-counting and add decision audit trail (ead7c4c)
- fix(startup): address review feedback on remote rename detector (2904873)
- feat(startup): detect and fix renamed GitHub remotes at startup (4fa27b1)
- fix(test): remove unused import in test_head_tracker (2f23923)
- feat(git): detect remote HEAD branch changes and add /rescan skill (6cf08de)
- feat(cancel): support cancelling multiple missions with /cancel 1,3,5 (b31a2bd)
- feat(memory): add JSONL truth log with sliding context window (21cc9ac)
- fix: resolve CI failures on #1417 (attempt 1) (3d3db60)
- refactor(prompts): extract shared implementation-workflow partial, preserve implement.md guidelines (82707d5)
- fix(prompts): revert premature partial extraction, restore lost implement.md content (4f31986)
- refactor(prompts): extract shared implementation-workflow partial (eeb3217)
- fix(learning): reset failure counter when any lessons added in mixed results (0142b63)
- fix(diff): use exact match in compress_diff safety fallback (2cfb5c6)
- fix(skills): resolve handler imports to skills package, not app/skills.py (81d6950)
- test: cover update_hint and workspace_discovery error paths to 100% (6c44c6a)
- test(stagnation): add retry tracker and edge-case coverage (62.7% → 97.8%) (2aeed86)
- feat(skills): add /inbox command for GitHub notification check (e49e1bf)
- fix(diff): include mode-only files in compressed diff instead of skipping them (2c4a2b6)
- fix(telegram): redact token from poll errors and add backoff on consecutive failures (aada69d)
- feat(audit): auto-chain audit findings to fix missions via --auto-fix flag (a3259b8)
- feat(metrics): add skill metrics display to web dashboard (90081e8)
- fix(metrics): wire PROTECTED_PROJECT_FILES, add file locking, publish detect_pr_created (1715f57)
- feat(metrics): record plan-review and PR outcomes in per-project skill-metrics.md (3d4e5dc)
- fix(skills): ensure skills package is importable in handler execution (5f534a9)
- fix(review): merge optimization blocks into single config entry in example config (39cd576)
- feat(review): add config option to toggle diff compression optimization (708b102)
- fix(review): apply PR feedback — use log helper, conservative token estimate, greedy hunk continue (b08a021)
- feat(review): add diff compression for large PRs (1493ad3)
- feat(claudemd): inject project learnings into CLAUDE.md refresh prompt (46c44c1)
- refactor(prompts): extract review output field rules into shared partial (645323f)
- feat(skills): add /remove_project alias to delete_project skill (ccdced1)
- refactor(self_reflection): extract inline prompt and fix OPSEC leak (3f016fa)
- fix(implement): send plan-review gate issues to Telegram and GitHub (45b9a51)
- feat(implement): add plan-review quality gate before execution (eb80fc8)
- fix(priority): drop legacy move-to-position syntax, all multi-number input is bulk reorder (4dabb41)
- feat(priority): support bulk reorder syntax in /prio command (a7bbaba)
- fix(rebase): use match span for mention removal, case-insensitive bot filter (c13ca71)
- fix(rebase): preserve user comment context during PR rebase (0fba961)
- fix(audit): trust escalation for same-project recurrence and cleanup (0eb76f9)
- feat(audit): add specialized long-term security intelligence layer (463f309)
- fix: resolve CI failures on #1401 (attempt 1) (7293394)
- fix: address PR review — lock path double-dot, recurring type guard, dead code (dba0b2d)
- refactor: extract locked file ops into reusable locked_file.py module (fd32358)
- fix: resolve 14 bugbear (B) violations across koan/app/ (c4d42a5)
- refactor: remove f-prefix from 66 strings without placeholders (F541) (0cc26cc)
- fix(test): mock _notify in two resume tests to avoid 7.3s Claude CLI call (6415666)
- fix: resolve CI failures on #1377 (attempt 1) (5795850)
- refactor(thinking): tie extended thinking to critical complexity tier instead of blanket boolean (3d217b0)
- fix(provider): resolve duplicate --effort flags, register thinking config schema, and clean up import (915c563)
- feat(provider): add thinking/reasoning controls to CLIProvider interface (de3e150)
- fix(pr): target upstream not fork when submitting draft PRs (c6fdd8a)
- fix: resolve CI failures on #1375 (attempt 1) (73311ee)
- fix(security_audit): lock journal writes and dedupe audit helpers (ef9db97)
- feat(security_audit): add /private_security_audit skill (84a19a4)
- test(review): cover posted=False close skip and isolate close_pr fixture (c126d07)
- fix(review): make close+comment atomic via
gh pr close --commentand tighten guard (6ae9d25) - feat(review): wire close_pr decision to actual gh pr close (5bef69b)
- fix(notifications): don't mark foreign-repo notifications as read (c468239)
- fix(squash_pr): update test_squash_skill to expect -1 error sentinel (4392a2c)
- fix(squash_pr): return error instead of silently skipping when commit count fails (d094bc5)
- fix: handle stale Skill instances missing 'requirements' attribute (0bf9708)
- fix: resolve CI failures on #1357 (attempt 1) (5cc5909)
- fix(review): short-circuit reflect on threshold=0 and remove debug prints (7ff68fb)
- fix: resolve CI failures on #1357 (attempt 3) (8d86922)
- fix: resolve CI failures on #1357 (attempt 2) (041520a)
- fix: resolve CI failures on #1357 (attempt 1) (4df87be)
- fix(review): move lazy prompt import to module level (0e164b5)
- feat(review): add self-reflection pass to filter low-signal findings (2c5ac44)
- fix(bandit): record failures on non-zero exit so bandit learns from both outcomes (43b9e2e)
- fix(bandit): add stderr diagnostic to silent except block in iteration_manager (22835c2)
- feat(bandit): add Thompson Sampling MAB for project selection (f5173d7)
- refactor(memory): extract _should_skip_compaction() from compact_learnings() (bbb0c5a)
- refactor(burn_rate): add BurnRateSnapshot to eliminate redundant file reads (406751a)
- fix(implement): handle null issue body without crashing (d7dd784)
- feat(prompts): extract 5 new partials to reduce prompt duplication (a9bb2a0)
- fix(review): address PR feedback on update_hint module (e92c9dc)
- feat: add upstream update hint notification (48h throttled) (a9bcaee)
- fix(review): use GitHub @mention format for severity rebase hints (f27dd5c)
- fix(notifications): add diagnostic logging and skipped_repos tracking per review feedback (7ae9795)
- fix(notifications): filter all notifications by registered projects (ebe23b0)
- fix: resolve CI failures on #1364 (attempt 1) (2b17814)
- fix(review): update docstring and hoist KOAN_ROOT import per review feedback (81177b3)
- feat(review): inject project learnings into review prompts (497bb81)
- fix(prompts): strip trailing newlines from partials and remove unused explore-codebase (8a39c78)
- feat(prompts): add {@include} directive for composable prompt partials (e2aa489)
- refactor(ci_queue): promote check_pr_state public and DRY closed/merged drain (947477e)
- fix(ci_queue): drop closed and merged PRs from CI queue (39c1358)
- feat(memory): wire memory into skill prompts (f038c2f)
- fix(abort): verify PID owns runner before sending SIGUSR1 (bf1b94a)
- feat(abort): signal runner via SIGUSR1 for instant /abort (868d9f4)
- refactor(provider): replace name check with supports_stream_json() capability (130f536)
- test(provider): add coverage for managed temp-file helpers and stream event parsers (f4a924d)
- fix(audit): fingerprint findings in issue body so dedup survives title drift (3e65dca)
- fix(audit): dedup findings against already-open issues (28a0894)
- test(ci_queue): add comprehensive test suite for persistent CI queue (586692b)
- fix(review): propagate post-comment error detail to notification (7e2983f)
- fix(rebase): add clarifying comments per review feedback (236a000)
- feat(rebase): add severity filter for selective review feedback (ee658e4)
- fix(skill-runner): treat empty stream-json result as miss to preserve text fallback (133532f)
- fix(skill-runner): preserve partial stream output and harden max-turns subtype match (4102764)
- fix(skill-runner): watch Claude tool-use events to keep watchdog alive (460c72e)
- fix(skill-runner): heartbeat keeps liveness watchdog alive during silent Claude calls (4059ea4)
- test(squash_pr): add comprehensive test suite for PR squash pipeline (e8e6872)
- fix(pr): enforce structured PR description sections (summary/why/how/testing) (b82380d)
- fix(pr): enforce structured PR description sections (summary/why/how/testing) (1adbae1)
- feat(pr): auto-generate structured PR descriptions from diff (01c915a)
- fix(ci_check): aggregate CI runs scoped to latest commit SHA (684b986)
- test(ci_check): add failing tests for stale-SHA failure leakage (ca52b9f)
- fix(ci): use less alarming ...
Kōan v0.71
- fix(github): persist dedup for assignment notifications (441d775)
- fix(jira): pick up @mentions ranked deep in result set (5c0891a)
- test: add comprehensive test suite for outbox_manager module (482a1da)
- refactor(ci): replace stable branch with stable tag in release workflow (22e3d74)
- refactor(ci): remove duplicate test job from release workflow (85917c6)
- feat: add workflow_dispatch release pipeline (c0736f0)
- fix: eliminate redundant file read in archive_journals (890f961)
- fix: add error context to memory_manager silent exception handlers (54e98f9)
- refactor: extract token_parser module to centralize Claude JSON parsing (5fd84ce)
- fix: address review feedback on checkpoint crash recovery (8d1cfe6)
- fix: resolve CI failures on #1297 (attempt 1) (72aa183)
- fix: address review feedback on checkpoint crash recovery (45544b7)
- feat: add structured mission progress checkpoints (#1247) (7e597f5)
- fix(rtk): use projects config for per-project opt-out and remove unrelated .spec/ gitignore (793951b)
- feat(rtk): integrate optional rtk-ai/rtk for compressed tool output (#1295) (d7d8550)
- fix: embed commit SHAs in review comment body upfront (2f77118)
- feat: forward mission result text to outbox for SKIP/FAIL/ERROR outcomes (4ce5edf)
- refactor: address PR review on task-aware memory recall (d3dcc3b)
- feat: task-aware memory recall to filter learnings by mission relevance (48d3439)
- style: collapse double blank lines left by dead code removal (aa2b23e)
- refactor: remove dead code from branch_limiter, iteration_manager, config (c42afd6)
- refactor: extract _ensure_tokens helper to DRY token fallback pattern (67aa5ea)
- refactor: eliminate redundant I/O in post-mission pipeline (19a73ac)
- fix: replace debug print with logging and make dedup case-insensitive in resolve_pr_location (efadb1d)
- fix: resolve cross-owner PR URLs via git remote fallback (bd642e1)
- fix(missions): simplify needle reduction and gate nonproductive throttle behind threshold (d271ed6)
- koan: 2026-05-14-21:48 (6cbb0d4)
- koan: 2026-05-14-21:47 (66c3590)
- fix: exit non-zero after crash loop and guard stagnation from retry (275f56f)
- fix: replace hardcoded module refresh with mtime-based detection (ad46bdc)
- fix(check_notifications): only consume signal when a notification provider is enabled (8173257)
- feat(skill): add /check_notifications command with /read alias (98ca115)
- fix: remove dead handle_quota_exhaustion call in skill dispatch quota path (0d6fe47)
- fix: add auth/quota error handling to skill dispatch path (c8e30ac)
- fix: preserve original positions in brainstorm issue cross-references (987bbfe)
- fix(review): remove in-progress marker comment from GitHub PRs (bd41f14)
- fix(github): move json import to module level in command handler (35c8a97)
- feat(github): skip notifications on closed/merged PRs and issues (f3d9f6f)
- fix(security): quarantine new skill installs behind approval gate (9a32a06)
- Create SECURITY.md (bd4c0e2)
- feat(brainstorm): enforce template + log prompt provenance (8934589)
- fix: handle missing get_effort_for_mode gracefully on startup (99ec9d2)
- fix: include stdout in CLI error diagnostics when stderr is empty (da8cec7)
- feat(brainstorm): add ideation framing and master synthesis (36caf9b)
- feat: caveman output optimization (#1279) (21f4b6b)
- fix: resolve CI failures on #1228 (attempt 1) (5d2c8d9)
- feat(stagnation): add max_retry_on_stagnation with per-mission requeue counter (df7d2ad)
- refactor(stagnation): use threading.Event for cross-thread flag and clarify stderr diagnostics (7771b9c)
- feat(stagnation): abort stuck Claude sessions via rolling stdout hash (4b25a1d)
- fix: add missing profile_runner and enforce runner registration consistency (d3857a2)
- fix: add stdout heartbeats to skill runners for liveness watchdog (2987a21)
- fix: pass --disallowedTools as comma-separated value like --allowedTools (d10b701)
- fix: replace lstrip('- ') with removeprefix('- ') across codebase (fdcb526)
- fix: resolve CI failures on #1237 (attempt 1) (71f120a)
- fix: evict stale modules on reload failure and expand refresh scope (#1235) (a544cec)
- fix(tests): eliminate RuntimeWarning from runpy in CLI tests (#1196) (c301243)
- fix: return partial output when skills hit max turns instead of raising (7e6077a)
- fix: auto-recover tracked project files after integrity check failure (#1255) (a453efb)
- fix: ensure prompt guard always provides reason when blocking (f9a0bc1)
- fix: replace undefined log() with _log_runner() in quota check path (fbc557b)
- fix: add Python AST pre-analysis to dead_code skill and raise analysis_max_turns (#1256) (b3695ac)
- fix(tests): add missing effort kwarg to fake_build in tier tests (faaa6fe)
- fix: resolve CI failures on #1267 (attempt 1) (5ce5a25)
- fix: use nonce-based fence markers, fence PR diffs, move stdlib imports to module level (7212195)
- feat: add OPSEC policy and data fencing for prompt injection defense (b8b0431)
- fix: resolve CI failures on #1263 (attempt 1) (aad5fd3)
- fix: prevent analysis skills from hitting max turns too easily (#1256) (54e3fd1)
- fix(rebase_pr): replace unconditional sleep with retry_with_backoff in fetch_pr_context (627c575)
- fix: increase complexity routing max_turns defaults per review feedback (2106c12)
- feat: pre-classify mission complexity to route to cheapest capable model (f7cc942)
- refactor: move project-and-type aggregation into _aggregate to eliminate duplication (01dbb3e)
- feat: add mission-type aggregation and week/month convenience wrappers to cost_tracker (31ffef7)
- fix: use configurable max_turns for deepplan and brainstorm skills (01ae24f)
- feat: add reasoning effort controls to CLIProvider interface (#1243) (35f8a24)
- refactor: centralize atomic-write pattern via utils.atomic_write_json (3bcdb06)
- fix: use configurable max_turns for /claudemd skill (f80b6a7)
- fix: resolve CI failures on #1250 (attempt 1) (b76a44a)
- fix: apply review feedback — tighten closing-keyword matching and clean up imports (1af6b3f)
- feat: skip issues with existing PRs in /fix batch mode (c6f02e9)
- fix: prevent timeout override to success and add liveness watchdog (4ed3456)
- fix: apply review feedback — use atomic_write, public load_outcomes, structured logging (295a831)
- feat: add persistent daily metrics snapshot system (#1224) (bbf691e)
- feat: expand mission_type taxonomy and add to cost_tracker JSONL (2ad017f)
- fix: escape #N refs in checklist with fullwidth # to prevent GitHub auto-linking (254f5b2)
- fix: make /ai skill respect skill_max_turns/skill_timeout config (261b531)
- refactor: deduplicate builder functions in skill_dispatch.py (#1209) (36db240)
- refactor: deduplicate _apply_review_feedback via run_claude_step (#1208) (e6f5c2b)
- fix: wrap instance path with Path() in plugin dir generation (547057e)
- fix: handle non-UTF-8 bytes in gh CLI output (7234db9)
- fix: retry fetching CI failure logs when first attempt returns empty (3d063ec)
- fix: add logging to stale-module reload and restore inline hasattr guards (eaac9a1)
- fix: resolve CI failures on #1236 (attempt 1) (5eaf561)
- fix: centralize stale module reload in _execute_handler instead of per-handler boilerplate (2740c9c)
- fix: reload github_skill_helpers in skill handlers to prevent stale cache errors (a9433b6)
- fix: deduplicate rebase conflict resolution logic between claude_step and rebase_pr (0e7fcd4)
- feat: add --now flag to /fix, /rebase, /review for priority queuing (3875785)
- fix: distinguish morning ritual skip vs failure messaging (b0fd087)
- fix: enforce per-project focus filtering in iteration planning (#1205) (ec5d404)
- fix: strip @botName suffix from Telegram group commands (538c159)
- rebase: apply review feedback on #1107 (45646e4)
- rebase: apply review feedback on #1107 (83b227d)
- fix: remove dead shell-interpolation code in branches handler (a87c32d)
- docs(rebase): document structured PR comment format in user manual (8e5fe0f)
- feat(rebase): structured GitHub comment with summary, changes, stats sections (db5abf9)
- fix(run): gate GitHub/Jira boot notifications on their integration flags (da4f6f6)
- fix: add 20+ missing config keys to validation schema (262309c)
- fix(test): mock _notify in first-iteration tests to prevent Claude CLI calls (54db2b4)
- fix: raise default skill_timeout to 7200s and log tail on timeout (41117bf)
- fix(run): silence empty-state boot pings on resume (ca8adcc)
- feat: add pause/resume, day-of-week filter, and status display to recurring missions (06a8b75)
- feat: expose custom skills to GitHub/Jira @mentions (147592b)
Kōan v0.70
Changelog — Kōan v0.70
Features
- Chat isolation & locking — Run chat + reflection from KOAN_ROOT with instance/ layout hints; serialize CLI calls to avoid session-lock collisions; restore journal/memory context and allow tool use
- Jira integration — Add Jira @mention support mirroring GitHub pipeline; support Jira URLs in /fix, /plan, /implement; add per-Jira-project target branch for PRs; acknowledge Jira comments with replies
- Review learning & filtering — Learn from unmerged closed PRs; add review_ignore config with per-project filtering; wire SUMMARY_TAG and commit SHAs into review pipeline; add review_markers module
- PR management — Add max_pending_branches per-project limit; detect already-solved PRs and auto-close; add pre-push CI check to rebase pipeline; guard rebase/ci_check against cross-instance PRs
- Memory management — Add configurable memory compaction thresholds; implement semantic learnings compaction via Claude CLI; add global memory file rotation for append-only files
- Skills & commands — Add /config_check skill to detect config drift; add /rm alias for cancel; improve GitHub @mention help with grouped commands and emoji
- Observability — Add timestamps to log output; show server IP in /status; improve /logs command with filtering; add per-activity usage logging with rotation
- Dashboard — Add automation rules UI with storage and executor; add Agent introspection panel
- Testing & CI — Add coverage tracking and golden rule enforcement; add testing anti-patterns reference; require Python 3.11+ compatibility; strict_missions mode to gate autonomous work
- Startup & notifications — Add per-phase Telegram visibility during startup; stop cold-start floods; bypass personality formatter for startup-only status notifications
Fixes
- Chat stability — Isolate chat CLI in dedicated workspace to avoid session lock; serialize CLI calls; restore journal/memory context
- Telegram reliability — Stop passive_wait tight-loop flood; stop cold-start flood on non-productive wake-ups; fix notification startup checks
- Mission handling — Requeue missions on quota exhaustion instead of failing; scope branch saturation to autonomous exploration only
- Performance — Speed up 6 slow tests by mocking at correct abstraction level; add pytest-split for balanced test groups
- Timeouts — Increase /ask and github-reply timeout from 120s to 300s; harden CLI timeout handling
- Configuration — Skip Jira startup notifications when not configured; handle configuration drift; enforce strict FIFO mission ordering
- Testing — Fix TOCTOU races in recover_missions; mock at correct abstraction levels; add 50+ new unit tests; improve test isolation
Refactors
- Config management — Move review_ignore from projects.yaml to instance/config.yaml; extract shared PR submission helpers; consolidate prompt loading
- Code quality — Make expects_tests public; remove broad exception handlers in prompt_builder; narrow exception catches to specific types across modules
- Architecture — Consolidate duplicate implementations; extract helpers from core modules; deduplicate GitHub URL regex patterns
Docs
- Guides & references — Document memory compaction in user manual and CLAUDE.md; add Jira integration guide; document /config_check skill; document review_ignore config in examples
- Best practices — Add skill-authoring checklist; add testing anti-patterns reference; document PR review comment auto-forwarding; document retry_with_backoff mock levels
Chore
- Release workflow — Add release workflow for maintainers