Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
430 commits
Select commit Hold shift + click to select a range
81faec8
ci: run only Python 3.14 on PRs, full matrix on main
Koan-Bot Apr 3, 2026
bb5feba
fix: gate startup self-reflection behind startup_reflection config se…
Koan-Bot Apr 3, 2026
37baab8
feat: guard rebase/ci_check against PRs from other koan instances
toddr-bot Apr 2, 2026
2ca03fe
rebase: apply review feedback on #1121
toddr-bot Apr 2, 2026
fc89410
fix: resolve CI failures on #1121 (attempt 1)
toddr-bot Apr 2, 2026
6188866
rebase: apply review feedback on #1121
toddr-bot Apr 2, 2026
5e3e555
fix: resolve CI failures on #1121 (attempt 1)
toddr-bot Apr 2, 2026
30af609
fix: resolve CI failures on #1121 (attempt 1)
toddr-bot Apr 2, 2026
bdfe863
feat: add pre-push CI check to rebase pipeline
Koan-Bot Apr 3, 2026
f229a47
rebase: apply review feedback on #1137
Koan-Bot Apr 6, 2026
3e4407b
fix: address 5 robustness issues (#1138-#1142)
Koan-Bot Apr 3, 2026
60d632a
rebase: apply review feedback on #1151
Koan-Bot Apr 5, 2026
87b75f1
feat: auto-cleanup remote branches and add config toggle for branch c…
Koan-Bot Mar 29, 2026
25af892
rebase: apply review feedback on #1087
Koan-Bot Mar 30, 2026
944edea
feat: add ## CI section parsing and helpers to missions.py
Koan-Bot Apr 3, 2026
0ab0969
feat: migrate CI queue from JSON to ## CI section in missions.md
Koan-Bot Apr 3, 2026
d66ef88
rebase: apply review feedback on #1149
Koan-Bot Apr 7, 2026
a1098f9
feat: prevent duplicate issue work in contemplative and autonomous modes
Koan-Bot Apr 7, 2026
31d52b9
fix: prevent /resume during startup from being ignored
Koan-Bot Apr 7, 2026
31a3527
feat: friendly timestamp display in /list command
Koan-Bot Apr 7, 2026
709215d
feat: surface stdout diagnostics when CLI fails with no stderr
atoomic Apr 7, 2026
b56a62a
Use configurable max_turns across all runners
atoomic Apr 7, 2026
3a881d6
fix: reload stale github_skill_helpers when is_own_pr is missing
Koan-Bot Apr 8, 2026
4e4a475
fix: harden CI fix pipeline — configurable limits, safe checkout, for…
Koan-Bot Apr 8, 2026
03d0fb5
fix: label usage stats as estimates, add cost tracking, remove bogus …
Koan-Bot Apr 6, 2026
8d013eb
rebase: apply review feedback on #1153
Koan-Bot Apr 7, 2026
8f7a985
fix: escape @copilot mentions in all GitHub comment posts
Koan-Bot Apr 9, 2026
3f2fa0d
rebase: apply review feedback on #1166
Koan-Bot Apr 9, 2026
fc8a7a2
fix: resolve pre-existing CI failures on #1166
Koan-Bot Apr 9, 2026
d3afbfc
feat: improve GitHub @mention help with grouped commands, emoji, and …
Koan-Bot Apr 9, 2026
fd3ccf8
feat: add Jira @mention integration mirroring GitHub notification pip…
Koan-Bot Apr 9, 2026
1d353b5
rebase: apply review feedback on #1169
Koan-Bot Apr 9, 2026
2842d5a
feat: add timestamps to log output and improve run pipeline visibility
Koan-Bot Apr 3, 2026
cb2f2b6
feat: add convention-aware commit messages to rebase workflow
atoomic Apr 9, 2026
d4d7dbd
rebase: apply review feedback on #1170
Koan-Bot Apr 9, 2026
96a59aa
docs: add Jira integration guide and update GitHub commands reference
Koan-Bot Apr 10, 2026
838e79e
fix: override non-zero CLI exit code when JSON output shows success
Koan-Bot Apr 10, 2026
60518ee
fix: add Jira notification startup check and fix 410 API error
atoomic Apr 10, 2026
4836f07
feat: support Jira URLs in /fix, /plan, /implement
atoomic Apr 10, 2026
9cc6af7
fix: mark GitHub notifications as read after processing
atoomic Apr 10, 2026
7e1b9d0
feat: acknowledge Jira @mentions with reply comment
atoomic Apr 10, 2026
14935d4
fix: pass auth params to acknowledge_jira_comment instead of reloadin…
Koan-Bot Apr 10, 2026
3ac421c
fix: correct test assertion for mark_notification_read call count
Koan-Bot Apr 10, 2026
2070c3e
feat: add per-Jira-project target branch for PRs
atoomic Apr 10, 2026
f5db79a
feat: add max_pending_branches per-project limit to cap unreviewed wo…
sukria-koan0 Apr 10, 2026
5210ff6
fix: patch acknowledge_jira_comment in jira command handler tests
Apr 10, 2026
ba3571f
feat: add /config_check skill to detect config.yaml drift
Apr 10, 2026
d9542ac
docs: document /config_check skill in CLAUDE.md and user manual
Apr 10, 2026
beab037
Merge branch 'koan/config-check-skill'
Apr 10, 2026
b763d13
Merge branch 'main' into koan/test-coverage-phase1
Apr 10, 2026
b1f1a47
Merge branch 'koan/test-coverage-phase1'
Apr 10, 2026
3a87a71
feat: show server IP in /status command
Koan-Bot Apr 10, 2026
3049127
feat: add review_markers module and find_bot_comment helper
Koan-Bot Mar 26, 2026
b45e60d
feat: wire SUMMARY_TAG, in-progress marker, and commit SHAs into revi…
Koan-Bot Mar 26, 2026
d70a48d
feat: add get_project_review_ignore to projects_config
Koan-Bot Mar 27, 2026
d91a9d9
feat: add filter_diff_by_ignore utility to utils.py
Koan-Bot Mar 27, 2026
39e59da
feat: wire review_ignore filter into run_review()
Koan-Bot Mar 27, 2026
8b292b1
docs: document review_ignore config in example yaml, README, and user…
Koan-Bot Mar 27, 2026
568d511
refactor: move review_ignore config from projects.yaml to instance/co…
Koan-Bot Apr 10, 2026
1ff1cfb
fix: increase /ask and github-reply timeout from 120s to 300s
Koan-Bot Apr 11, 2026
0fdc322
feat: add coverage tracking and enforce golden rule in CI
sukria-koan0 Apr 12, 2026
616c591
feat: add testing anti-patterns reference with conditional injection
Koan-Bot Mar 26, 2026
f641408
refactor: make expects_tests public and remove broad exception handle…
Koan-Bot Apr 12, 2026
e7c60e9
fix: speed up 6 slow tests by mocking at correct abstraction level
Koan-Bot Apr 13, 2026
334987f
docs: add retry_with_backoff mock-level anti-pattern
Koan-Bot Apr 13, 2026
df54eda
fix: requeue missions on quota exhaustion instead of failing them
Koan-Bot Apr 13, 2026
151580a
fix: scope branch saturation to autonomous exploration only
atoomic Apr 13, 2026
520e764
feat: per-phase Telegram visibility during startup window
atoomic Apr 13, 2026
99c00c8
fix: bypass personality formatter for startup-only status notifications
atoomic Apr 13, 2026
df0c3af
fix: skip Jira startup notifications when Jira is not configured (#1189)
sukria-koan0 Apr 15, 2026
06f7a13
feat: learn from unmerged closed PRs (#1190)
sukria-koan0 Apr 15, 2026
39a71ea
feat: add strict_missions mode to gate autonomous work (#1175) (#1176)
sukria-koan0 Apr 15, 2026
1f111af
fix: replace atoomic skill prefix with generic team prefix in code an…
Koan-Bot Apr 15, 2026
c0449d5
fix: stop cold-start Telegram flood on non-productive wake-ups (#1193…
sukria-koan0 Apr 15, 2026
71c5f7c
fix: stop passive_wait tight-loop flood in make logs
Apr 15, 2026
c11bdfe
fix: isolate chat CLI in dedicated workspace to avoid session lock
Apr 15, 2026
5051899
Merge remote-tracking branch 'origin/main' into koan/implement-1092
Apr 15, 2026
70487f7
fix: merge main + restore sys.modules in runpy helper; break silent e…
Apr 15, 2026
888a94f
chore: refresh coverage/test-count baselines after main merge
Apr 15, 2026
40ebfc1
fix(chat): restore journal/memory context and allow tool use
Apr 15, 2026
ef07eda
fix(chat): serialize chat CLI calls to avoid session-lock collision
Apr 15, 2026
f11541b
Merge branch 'koan/implement-1092'
Apr 15, 2026
f0e8d82
fix(chat): run chat + reflection from KOAN_ROOT with instance/ layout…
Apr 15, 2026
55ef9ee
add a release workflow for maintainers
Apr 15, 2026
147592b
feat: expose custom skills to GitHub/Jira @mentions
atoomic Apr 13, 2026
06a8b75
feat: add pause/resume, day-of-week filter, and status display to rec…
herbertia Apr 16, 2026
ca8adcc
fix(run): silence empty-state boot pings on resume
Koan-Bot Apr 16, 2026
41117bf
fix: raise default skill_timeout to 7200s and log tail on timeout
Koan-Bot Apr 15, 2026
54db2b4
fix(test): mock _notify in first-iteration tests to prevent Claude CL…
Koan-Bot Apr 15, 2026
262309c
fix: add 20+ missing config keys to validation schema
Koan-Bot Apr 14, 2026
da4f6f6
fix(run): gate GitHub/Jira boot notifications on their integration flags
Koan-Bot Apr 17, 2026
db5abf9
feat(rebase): structured GitHub comment with summary, changes, stats …
Koan-Bot Apr 17, 2026
8e5fe0f
docs(rebase): document structured PR comment format in user manual
Koan-Bot Apr 17, 2026
a87c32d
fix: remove dead shell-interpolation code in branches handler
Koan-Bot Mar 31, 2026
83b227d
rebase: apply review feedback on #1107
Koan-Bot Apr 1, 2026
45646e4
rebase: apply review feedback on #1107
Koan-Bot Apr 12, 2026
538c159
fix: strip @botname suffix from Telegram group commands
Koan-Bot Apr 18, 2026
ec5d404
fix: enforce per-project focus filtering in iteration planning (#1205)
sukria-koan0 Apr 19, 2026
b0fd087
fix: distinguish morning ritual skip vs failure messaging
Koan-Bot Apr 17, 2026
3875785
feat: add --now flag to /fix, /rebase, /review for priority queuing
Koan-Bot Apr 17, 2026
0e7fcd4
fix: deduplicate rebase conflict resolution logic between claude_step…
Koan-Bot Apr 17, 2026
a9433b6
fix: reload github_skill_helpers in skill handlers to prevent stale c…
toddr-bot Apr 23, 2026
2740c9c
fix: centralize stale module reload in _execute_handler instead of pe…
toddr-bot Apr 23, 2026
5eaf561
fix: resolve CI failures on #1236 (attempt 1)
toddr-bot Apr 23, 2026
eaac9a1
fix: add logging to stale-module reload and restore inline hasattr gu…
toddr-bot Apr 23, 2026
3d063ec
fix: retry fetching CI failure logs when first attempt returns empty
Koan-Bot Apr 24, 2026
7234db9
fix: handle non-UTF-8 bytes in gh CLI output
Koan-Bot Apr 24, 2026
547057e
fix: wrap instance path with Path() in plugin dir generation
Koan-Bot Apr 24, 2026
e6f5c2b
refactor: deduplicate _apply_review_feedback via run_claude_step (#1208)
Koan-Bot Apr 23, 2026
36db240
refactor: deduplicate builder functions in skill_dispatch.py (#1209)
Koan-Bot Apr 22, 2026
261b531
fix: make /ai skill respect skill_max_turns/skill_timeout config
atoomic Apr 27, 2026
254f5b2
fix: escape #N refs in checklist with fullwidth # to prevent GitHub a…
Koan-Bot Apr 27, 2026
2ad017f
feat: expand mission_type taxonomy and add to cost_tracker JSONL
Koan-Bot Apr 20, 2026
bbf691e
feat: add persistent daily metrics snapshot system (#1224)
Koan-Bot Apr 21, 2026
295a831
fix: apply review feedback — use atomic_write, public load_outcomes, …
Koan-Bot Apr 22, 2026
4ed3456
fix: prevent timeout override to success and add liveness watchdog
Koan-Bot Apr 27, 2026
c6f02e9
feat: skip issues with existing PRs in /fix batch mode
toddr-bot Apr 24, 2026
1af6b3f
fix: apply review feedback — tighten closing-keyword matching and cle…
toddr-bot Apr 28, 2026
b76a44a
fix: resolve CI failures on #1250 (attempt 1)
toddr-bot Apr 28, 2026
f80b6a7
fix: use configurable max_turns for /claudemd skill
Koan-Bot Apr 28, 2026
3bcdb06
refactor: centralize atomic-write pattern via utils.atomic_write_json
atoomic Apr 27, 2026
35f8a24
feat: add reasoning effort controls to CLIProvider interface (#1243)
Koan-Bot Apr 28, 2026
01ae24f
fix: use configurable max_turns for deepplan and brainstorm skills
Koan-Bot Apr 28, 2026
31ffef7
feat: add mission-type aggregation and week/month convenience wrapper…
Koan-Bot Apr 20, 2026
01dbb3e
refactor: move project-and-type aggregation into _aggregate to elimin…
Koan-Bot Apr 22, 2026
f7cc942
feat: pre-classify mission complexity to route to cheapest capable model
Koan-Bot Apr 19, 2026
2106c12
fix: increase complexity routing max_turns defaults per review feedback
Koan-Bot Apr 24, 2026
627c575
fix(rebase_pr): replace unconditional sleep with retry_with_backoff i…
Koan-Bot Apr 17, 2026
54e3fd1
fix: prevent analysis skills from hitting max turns too easily (#1256)
Koan-Bot Apr 28, 2026
aad5fd3
fix: resolve CI failures on #1263 (attempt 1)
Koan-Bot Apr 29, 2026
b8b0431
feat: add OPSEC policy and data fencing for prompt injection defense
Koan-Bot Apr 28, 2026
7212195
fix: use nonce-based fence markers, fence PR diffs, move stdlib impor…
Koan-Bot Apr 29, 2026
5ce5a25
fix: resolve CI failures on #1267 (attempt 1)
Koan-Bot Apr 29, 2026
faaa6fe
fix(tests): add missing effort kwarg to fake_build in tier tests
Koan-Bot Apr 29, 2026
b3695ac
fix: add Python AST pre-analysis to dead_code skill and raise analysi…
Koan-Bot May 4, 2026
fbc557b
fix: replace undefined log() with _log_runner() in quota check path
Koan-Bot May 3, 2026
f9a0bc1
fix: ensure prompt guard always provides reason when blocking
Koan-Bot May 3, 2026
a453efb
fix: auto-recover tracked project files after integrity check failure…
Koan-Bot May 2, 2026
7e6077a
fix: return partial output when skills hit max turns instead of raising
Koan-Bot May 1, 2026
c301243
fix(tests): eliminate RuntimeWarning from runpy in CLI tests (#1196)
Koan-Bot May 1, 2026
a544cec
fix: evict stale modules on reload failure and expand refresh scope (…
toddr-bot Apr 23, 2026
71f120a
fix: resolve CI failures on #1237 (attempt 1)
toddr-bot Apr 29, 2026
fdcb526
fix: replace lstrip('- ') with removeprefix('- ') across codebase
Koan-Bot May 8, 2026
d10b701
fix: pass --disallowedTools as comma-separated value like --allowedTools
Koan-Bot May 8, 2026
2987a21
fix: add stdout heartbeats to skill runners for liveness watchdog
toddr-bot May 7, 2026
d3857a2
fix: add missing profile_runner and enforce runner registration consi…
Koan-Bot May 7, 2026
4b25a1d
feat(stagnation): abort stuck Claude sessions via rolling stdout hash
sukria-koan0 Apr 19, 2026
7771b9c
refactor(stagnation): use threading.Event for cross-thread flag and c…
sukria-koan0 May 5, 2026
df7d2ad
feat(stagnation): add max_retry_on_stagnation with per-mission requeu…
sukria-koan0 May 8, 2026
5d2c8d9
fix: resolve CI failures on #1228 (attempt 1)
sukria-koan0 May 8, 2026
21f4b6b
feat: caveman output optimization (#1279)
atoomic May 9, 2026
36caf9b
feat(brainstorm): add ideation framing and master synthesis
atoomic May 9, 2026
da8cec7
fix: include stdout in CLI error diagnostics when stderr is empty
Koan-Bot Apr 29, 2026
99ec9d2
fix: handle missing get_effort_for_mode gracefully on startup
Koan-Bot May 4, 2026
8934589
feat(brainstorm): enforce template + log prompt provenance
atoomic May 9, 2026
bd4c0e2
Create SECURITY.md
atoomic May 13, 2026
9a32a06
fix(security): quarantine new skill installs behind approval gate
atoomic May 13, 2026
f3d9f6f
feat(github): skip notifications on closed/merged PRs and issues
Koan-Bot May 13, 2026
35c8a97
fix(github): move json import to module level in command handler
Koan-Bot May 14, 2026
bd41f14
fix(review): remove in-progress marker comment from GitHub PRs
Koan-Bot May 13, 2026
987bbfe
fix: preserve original positions in brainstorm issue cross-references
Koan-Bot May 13, 2026
c8e30ac
fix: add auth/quota error handling to skill dispatch path
Koan-Bot May 13, 2026
0d6fe47
fix: remove dead handle_quota_exhaustion call in skill dispatch quota…
Koan-Bot May 14, 2026
98ca115
feat(skill): add /check_notifications command with /read alias
Koan-Bot May 13, 2026
8173257
fix(check_notifications): only consume signal when a notification pro…
Koan-Bot May 13, 2026
ad46bdc
fix: replace hardcoded module refresh with mtime-based detection
Koan-Bot May 14, 2026
275f56f
fix: exit non-zero after crash loop and guard stagnation from retry
Koan-Bot May 11, 2026
66c3590
koan: 2026-05-14-21:47
bluetoothbot May 14, 2026
6cbb0d4
koan: 2026-05-14-21:48
bluetoothbot May 14, 2026
d271ed6
fix(missions): simplify needle reduction and gate nonproductive throt…
bluetoothbot May 15, 2026
bd642e1
fix: resolve cross-owner PR URLs via git remote fallback
Koan-Bot May 14, 2026
efadb1d
fix: replace debug print with logging and make dedup case-insensitive…
Koan-Bot May 14, 2026
19a73ac
refactor: eliminate redundant I/O in post-mission pipeline
Koan-Bot May 12, 2026
67aa5ea
refactor: extract _ensure_tokens helper to DRY token fallback pattern
Koan-Bot May 14, 2026
c42afd6
refactor: remove dead code from branch_limiter, iteration_manager, co…
Koan-Bot May 6, 2026
aa2b23e
style: collapse double blank lines left by dead code removal
Koan-Bot May 14, 2026
48d3439
feat: task-aware memory recall to filter learnings by mission relevance
bluetoothbot May 15, 2026
d3dcc3b
refactor: address PR review on task-aware memory recall
bluetoothbot May 15, 2026
4ce5edf
feat: forward mission result text to outbox for SKIP/FAIL/ERROR outcomes
atoomic May 15, 2026
2f77118
fix: embed commit SHAs in review comment body upfront
Koan-Bot May 15, 2026
d7d8550
feat(rtk): integrate optional rtk-ai/rtk for compressed tool output (…
atoomic May 10, 2026
793951b
fix(rtk): use projects config for per-project opt-out and remove unre…
Koan-Bot May 14, 2026
7e597f5
feat: add structured mission progress checkpoints (#1247)
Koan-Bot May 11, 2026
45544b7
fix: address review feedback on checkpoint crash recovery
Koan-Bot May 14, 2026
72aa183
fix: resolve CI failures on #1297 (attempt 1)
Koan-Bot May 14, 2026
8d1cfe6
fix: address review feedback on checkpoint crash recovery
Koan-Bot May 15, 2026
5fd84ce
refactor: extract token_parser module to centralize Claude JSON parsing
Koan-Bot May 15, 2026
54e98f9
fix: add error context to memory_manager silent exception handlers
Koan-Bot May 15, 2026
890f961
fix: eliminate redundant file read in archive_journals
Koan-Bot May 15, 2026
c0736f0
feat: add workflow_dispatch release pipeline
Koan-Bot May 9, 2026
85917c6
refactor(ci): remove duplicate test job from release workflow
Koan-Bot May 9, 2026
22e3d74
refactor(ci): replace stable branch with stable tag in release workflow
Koan-Bot May 9, 2026
482a1da
test: add comprehensive test suite for outbox_manager module
Koan-Bot May 15, 2026
5c0891a
fix(jira): pick up @mentions ranked deep in result set
atoomic May 15, 2026
441d775
fix(github): persist dedup for assignment notifications
atoomic May 15, 2026
410195e
test(jira): cover spaced nicknames in parse_jira_mention_command
atoomic May 15, 2026
5cfd75c
feat(hooks): discover skill-bound lifecycle modules
atoomic May 15, 2026
0c17736
docs(hooks): clarify skill-bound hook event-name filter
atoomic May 15, 2026
1988129
build(makefile): ensure pytest installed before test-skills runs
atoomic May 15, 2026
4ee21ee
fix(rebase): skip --onto when fork is simply behind upstream
toddr-bot May 15, 2026
db4b030
fix(rebase): mock _run_git in _is_ancestor tests per review feedback
toddr-bot May 15, 2026
7e150f4
fix(review): replace dumb diff truncation with file-aware strategy
Koan-Bot May 15, 2026
b88d08d
fix(review): reserve footer budget in truncate_diff and fix vacuous t…
Koan-Bot May 15, 2026
1ed0e96
fix: resolve CI failures on #1335 (attempt 1)
Koan-Bot May 15, 2026
c10ed5a
test(dispatch): add failing tests for dotted project names
bluetoothbot May 16, 2026
60c244b
fix(dispatch): allow dots in project tag names
bluetoothbot May 16, 2026
5742248
refactor(missions): consolidate project-tag regexes into shared const…
bluetoothbot May 16, 2026
d516085
feat(provider): route Claude system prompt through 0600 temp file
bluetoothbot May 16, 2026
60f88fe
refactor(provider): apply review feedback — NamedTemporaryFile + dedu…
bluetoothbot May 16, 2026
c1c4886
fix(provider): attribute max_turns warning to its real source
bluetoothbot May 16, 2026
ff4f3b9
perf(github): parallelize per-notification processing during checks
bluetoothbot May 16, 2026
1320e9c
test: add failing tests for quota false-positive in cli_errors
sukria-koan0 Mar 27, 2026
c805fa1
fix: prevent false quota classification from stdout content
sukria-koan0 Mar 27, 2026
3114d0a
fix: coerce stdout/stderr to str in classify_cli_error
sukria-koan0 Apr 17, 2026
3f22445
fix(rebase): add stdout heartbeats to prevent liveness watchdog kills
toddr-bot May 16, 2026
3fa4718
feat(usage): burn-rate prediction and proactive exhaustion warnings (…
bluetoothbot May 15, 2026
e1ccb94
rebase: apply review feedback on #1318
bluetoothbot May 16, 2026
b3f8dc1
feat: add dependency declarations and auto-install to SKILL.md
Koan-Bot May 5, 2026
1a11bfd
fix: address review — pip flag injection, PEP 440 parsing, test state…
Koan-Bot May 14, 2026
6259880
chore: enable ruff PERF rules and fix violations
bluetoothbot May 16, 2026
2495dff
fix(ci): ignore skipped Dependabot auto-merge runs in CI status
aiolibsbot May 16, 2026
911ac87
feat: route security audit findings to PVRS when available
Koan-Bot May 16, 2026
04476fc
fix: redact PVRS fallback issues to prevent leaking vulnerability det…
Koan-Bot May 16, 2026
7aaec0d
feat(git): sync all remotes before branch work
toddr-bot May 15, 2026
3b39ba7
fix: address review — remove double-fetch, fix fragile rebase tests
toddr-bot May 16, 2026
97fcac3
fix: resolve CI failures on #1334 (attempt 1)
toddr-bot May 16, 2026
5d1afc6
docs: enforce ruff linting in CLAUDE.md and add make lint target
Koan-Bot May 16, 2026
0d2925f
feat(messaging): add Matrix provider alongside Telegram and Slack
bdraco May 16, 2026
2e3fac7
docs(matrix): advertise instance/config.yaml as primary, env vars as …
aiolibsbot May 16, 2026
f28d0c4
lint: enable ruff SIM105 and convert try/except/pass to contextlib.su…
bluetoothbot May 16, 2026
767c25d
feat(ci): detect workflows blocked on maintainer approval and stop re…
bluetoothbot May 16, 2026
be2aea3
fix(rebase): stream run_claude stdout so liveness watchdog sees output
bluetoothbot May 16, 2026
d5ff6d8
refactor(cli_exec): extract stream_with_timeout helper and fix watchd…
bluetoothbot May 16, 2026
b21a5ab
refactor(cli_exec): use contextlib.suppress in stream_with_timeout cl…
bluetoothbot May 16, 2026
3a4cbff
fix: use atomic writes for crash-sensitive file operations
Koan-Bot May 15, 2026
1ca92b4
refactor(ci): introduce CI_STATUS_BLOCKED_APPROVAL constant
Koan-Bot May 17, 2026
ec2ab67
test: isolate tests so they can run in parallel under pytest-xdist
bluetoothbot May 16, 2026
4d29b39
test(perf): parallelize the test suite with pytest-xdist
bluetoothbot May 16, 2026
a87abf7
test: address review feedback on pytest-xdist isolation fixtures
bluetoothbot May 17, 2026
dbdca5e
test: mock resolve_pr_location in conftest to fix xdist gh flakes
bluetoothbot May 17, 2026
77e6d14
test(memory_manager): verify _get_file_tree skipped below compact thr…
Koan-Bot May 17, 2026
270e114
feat(missions): add duplicate detection for GitHub-action missions
Koan-Bot May 16, 2026
6f6a4d4
fix(missions): handle duplicate return value in all skill handlers
Koan-Bot May 17, 2026
50e9a89
refactor(missions): extract queue_github_mission_once helper to reduc…
Koan-Bot May 17, 2026
305b045
fix(skills): reload modules updated since process boot
atoomic May 17, 2026
cb6e927
fix(restart): per-process restart markers
atoomic May 17, 2026
87a3aa6
fix(messaging): load every provider module on first call
atoomic May 17, 2026
7b05b09
fix(ci): use less alarming emoji for CI failure notifications
Koan-Bot May 17, 2026
fb53400
feat(watchdog): runner-side self-heal for stale or hung bridge
atoomic May 17, 2026
9f68a2b
fix(watchdog): apply review feedback — docs path, zombie comment, fai…
Koan-Bot May 17, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
84 changes: 84 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
name: Release

on:
workflow_dispatch:
inputs:
version:
description: "Release version (e.g. v0.5, v1.0.0)"
required: true
type: string
update_stable:
description: "Update the 'stable' tag to point to this release"
required: false
type: boolean
default: true

permissions:
contents: write

jobs:
release:
runs-on: ubuntu-latest
timeout-minutes: 10

steps:
- uses: actions/checkout@v6
with:
fetch-depth: 0

- name: Validate version format
run: |
if ! echo "${{ inputs.version }}" | grep -qE '^v[0-9]+(\.[0-9]+){1,2}$'; then
echo "::error::Version must match vMAJOR.MINOR or vMAJOR.MINOR.PATCH (e.g. v0.5, v1.0.0)"
exit 1
fi

- name: Check tag does not already exist
run: |
if git rev-parse "${{ inputs.version }}" >/dev/null 2>&1; then
echo "::error::Tag ${{ inputs.version }} already exists"
exit 1
fi

- name: Check for commits since last tag
id: changelog
run: |
LAST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "")
if [ -n "$LAST_TAG" ]; then
RANGE="${LAST_TAG}..HEAD"
COMMIT_COUNT=$(git rev-list --count "$RANGE")
if [ "$COMMIT_COUNT" -eq 0 ]; then
echo "::error::No commits since $LAST_TAG — nothing to release"
exit 1
fi
NOTES=$(git log "$RANGE" --pretty=format:"- %s (%h)")
else
NOTES=$(git log --pretty=format:"- %s (%h)")
fi

# Write notes to file (multi-line safe)
echo "$NOTES" > /tmp/release-notes.md
echo "last_tag=${LAST_TAG:-none}" >> "$GITHUB_OUTPUT"

- name: Create and push tag
run: |
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
git tag -a "${{ inputs.version }}" -m "Release ${{ inputs.version }}"
git push origin "${{ inputs.version }}"

- name: Update stable tag
if: inputs.update_stable
run: |
echo "Updating stable tag → ${{ inputs.version }}"
git tag -f stable "${{ inputs.version }}"
git push origin stable --force

- name: Create GitHub release
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
gh release create "${{ inputs.version }}" \
--title "Kōan ${{ inputs.version }}" \
--notes-file /tmp/release-notes.md \
--latest
92 changes: 86 additions & 6 deletions .github/workflows/tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ jobs:
strategy:
fail-fast: true
matrix:
python-version: ${{ github.event_name == 'pull_request' && fromJSON('["3.14"]') || fromJSON('["3.11", "3.14"]') }}
group:
- name: fast
marker: "not slow"
Expand All @@ -36,23 +37,23 @@ jobs:
marker: "slow"
split_group: 3

name: test (${{ matrix.group.name }})
name: test (py${{ matrix.python-version }}, ${{ matrix.group.name }})

steps:
- uses: actions/checkout@v6

- name: Set up Python 3.14
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v6
with:
python-version: "3.14"
python-version: "${{ matrix.python-version }}"
allow-prereleases: true
cache: 'pip'
cache-dependency-path: koan/requirements.txt

- name: Install dependencies
run: |
pip install -r koan/requirements.txt
pip install pytest pytest-split
pip install pytest pytest-split pytest-cov pytest-xdist

- name: Run tests (${{ matrix.group.name }})
if: ${{ !inputs.group || matrix.group.name == inputs.group }}
Expand All @@ -64,7 +65,86 @@ jobs:
KOAN_TELEGRAM_CHAT_ID: "123456789"
run: |
if [ -n "${{ matrix.group.split_group }}" ]; then
pytest tests/ -m "${{ matrix.group.marker }}" --splits 3 --group ${{ matrix.group.split_group }} -v
pytest tests/ -m "${{ matrix.group.marker }}" --splits 3 --group ${{ matrix.group.split_group }} -v \
-n auto --dist loadfile \
--cov=app --cov-report=term-missing
else
pytest tests/ -m "${{ matrix.group.marker }}" -v
pytest tests/ -m "${{ matrix.group.marker }}" -v \
-n auto --dist loadfile \
--cov=app --cov-report=term-missing
fi

- name: Upload coverage data
if: ${{ !inputs.group || matrix.group.name == inputs.group }}
uses: actions/upload-artifact@v4
with:
name: coverage-py${{ matrix.python-version }}-${{ matrix.group.name }}
path: koan/.coverage
include-hidden-files: true

check-coverage:
needs: test
runs-on: ubuntu-latest
timeout-minutes: 5
name: check-coverage

steps:
- uses: actions/checkout@v6

- name: Set up Python 3.14
uses: actions/setup-python@v6
with:
python-version: "3.14"
allow-prereleases: true

- name: Install coverage
run: pip install coverage

- name: Download all coverage artifacts
uses: actions/download-artifact@v4
with:
pattern: coverage-py*
path: coverage-parts

- name: Combine coverage and check baselines
working-directory: koan
env:
KOAN_ROOT: ${{ github.workspace }}/koan
run: |
# Collect all .coverage files and rename for combine
i=0
for f in ../coverage-parts/coverage-*/.coverage; do
cp "$f" ".coverage.$i"
i=$((i + 1))
done

coverage combine
TOTAL_COV=$(coverage report --format=total 2>/dev/null || coverage report | grep '^TOTAL' | awk '{print $NF}' | tr -d '%')
echo "Total coverage: ${TOTAL_COV}%"

# Read baselines
BASELINE_COV=$(cat ../coverage-baseline.txt | tr -d '[:space:]')
echo "Baseline coverage: ${BASELINE_COV}%"

# Allow 0.5% tolerance on coverage
python3 -c "
import sys
actual = float('${TOTAL_COV}')
baseline = float('${BASELINE_COV}')
tolerance = 0.5
if actual < baseline - tolerance:
print(f'FAIL: Coverage {actual}% is below baseline {baseline}% (tolerance {tolerance}%)')
sys.exit(1)
print(f'OK: Coverage {actual}% meets baseline {baseline}% (tolerance {tolerance}%)')
"

- name: Check test count baseline
run: |
BASELINE_COUNT=$(cat test-count-baseline.txt | tr -d '[:space:]')
echo "Test count baseline: ${BASELINE_COUNT}"

# Sum test counts from all matrix job logs
# The test count check is best-effort from the coverage report;
# the authoritative count comes from running all tests.
# For now, this is informational — the hard enforcement is on coverage.
echo "INFO: Test count baseline is ${BASELINE_COUNT}. Monitor via PR review."
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,9 @@ __pycache__/
.venv/
venv/
.coverage
.coverage.*
htmlcov/
koan/htmlcov/

# Runtime
.koan-status
Expand Down
125 changes: 125 additions & 0 deletions AI_POLICY.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
# AI Policy

> **TL;DR** — AI tools assist our workflow at every stage. Humans remain in control of every decision, every review, and every release.

---

## Overview

This document describes how artificial intelligence tools are used in the maintenance and development of this project. It is intended to be transparent with our contributors, users, and the broader open-source community about the role AI plays — and, equally importantly, the role it does **not** play.

We believe in honest, clear communication about AI-assisted workflows. This policy will be updated as our practices evolve.

---

## Our Guiding Principle

**AI assists. Humans decide.**

The maintainers who have been stewarding this project for years remain fully responsible for every line of code that ships. AI tools extend our capacity to review, research, and improve — they do not replace human judgment, expertise, or accountability.

---

## How AI Is Used in This Project

### 1. Code and Issue Analysis

AI tools help us process and understand incoming issues, pull requests, and code changes at scale. This includes:

- Summarising issue reports and identifying patterns across similar bugs
- Analysing code diffs for potential problems, regressions, or style inconsistencies
- Surfacing relevant context from the codebase, documentation, and prior discussions
- Flagging potential security concerns for human review

This analysis is **always** used as input to human decision-making, never as a substitute for it.

### 2. Draft Pull Requests

AI may generate draft pull requests as a starting point for a fix, a refactor, or an improvement. These drafts:

- Are clearly labelled as AI-generated when created
- Represent a first pass only — they are never considered complete or correct without human review
- May be substantially reworked, rejected, or replaced entirely by maintainers

Think of these drafts the way you would think of a junior contributor's first attempt: useful raw material that still needs experienced eyes.

### 3. Human Review of Every Pull Request

**Every pull request — whether AI-drafted or human-authored — is reviewed by a human maintainer before it can be merged.**

During review, maintainers actively use AI as a tool to assist their own thinking:

- Asking AI to explain or justify specific implementation choices
- Challenging AI-generated code and requesting alternative approaches
- Using AI to research edge cases, relevant standards, or upstream behaviour
- Requesting targeted rewrites of individual sections based on review feedback

The maintainer's judgment always takes precedence. AI answers are treated as input to be verified, not conclusions to be accepted.

### 4. Test Coverage and Defect Detection

AI helps us improve the quality and completeness of our test suite by:

- Suggesting test cases for edge conditions and failure modes
- Identifying gaps in existing test coverage
- Proposing tests that target known classes of defects or security issues
- Helping reproduce and characterise reported bugs

All suggested tests are reviewed and validated by maintainers before being committed.

### 5. Security Review

AI tools assist in identifying potential security issues, including:

- Common vulnerability patterns (injection, insecure defaults, deprecated APIs, etc.)
- Dependencies with known CVEs
- Code paths that may warrant closer scrutiny

Security findings from AI are **always** verified by a human maintainer. We do not act on AI-flagged security issues without independent assessment.

---

## What AI Does Not Do

To be explicit about the limits of AI involvement in this project:

| ❌ AI does not… | ✅ A human maintainer does… |
|---|---|
| Approve or merge pull requests | Review and decide on every PR |
| Make architectural decisions | Own all design and direction choices |
| Triage and close issues autonomously | Assess and respond to all issues |
| Publish releases | Tag, build, and release manually |
| Represent the project publicly | Communicate on behalf of the project |

---

## Releases

Releases are performed manually by the same long-standing maintainers as always. The release process — including changelog review, version tagging, and publication — involves no AI-driven automation. Every release is initiated, supervised, and published by a human maintainer.

AI may assist in drafting changelogs or release notes, but these are always reviewed and edited before publication.

---

## Attribution and Transparency

Where AI has played a material role in generating code or content within a pull request, we aim to note this in the PR description (e.g. via a `Generated-By` or `AI-Assisted` label or note). We do not consider AI the author of any contribution — the maintainer who reviewed and approved the work takes responsibility for it.

---

## Why We Do This

Open-source software is built on trust. Our users and downstream dependants trust us to ship correct, secure, and well-considered code. AI tools help us do that work better — but they do not change who is responsible for the outcome.

We use AI because it makes our maintainers more effective, not because it replaces them.

---

## Questions and Feedback

If you have questions about our use of AI, or concerns about a specific pull request or change, please open an issue or start a discussion. We are committed to being open about our process.

---

*Last updated: 2026-03-23*
*This policy is maintained by the project maintainers and subject to revision as AI tooling and community norms evolve.*
Loading