Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
639 commits
Select commit Hold shift + click to select a range
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
ca52b9f
test(ci_check): add failing tests for stale-SHA failure leakage
bluetoothbot May 17, 2026
684b986
fix(ci_check): aggregate CI runs scoped to latest commit SHA
bluetoothbot May 17, 2026
01c915a
feat(pr): auto-generate structured PR descriptions from diff
Koan-Bot May 17, 2026
1adbae1
fix(pr): enforce structured PR description sections (summary/why/how/…
Koan-Bot May 17, 2026
b82380d
fix(pr): enforce structured PR description sections (summary/why/how/…
Koan-Bot May 17, 2026
e8e6872
test(squash_pr): add comprehensive test suite for PR squash pipeline
Koan-Bot May 18, 2026
4059ea4
fix(skill-runner): heartbeat keeps liveness watchdog alive during sil…
bluetoothbot May 17, 2026
460c72e
fix(skill-runner): watch Claude tool-use events to keep watchdog alive
bluetoothbot May 17, 2026
4102764
fix(skill-runner): preserve partial stream output and harden max-turn…
bluetoothbot May 17, 2026
133532f
fix(skill-runner): treat empty stream-json result as miss to preserve…
bluetoothbot May 18, 2026
ee658e4
feat(rebase): add severity filter for selective review feedback
Koan-Bot May 17, 2026
236a000
fix(rebase): add clarifying comments per review feedback
Koan-Bot May 17, 2026
7e2983f
fix(review): propagate post-comment error detail to notification
Koan-Bot May 18, 2026
586692b
test(ci_queue): add comprehensive test suite for persistent CI queue
Koan-Bot May 18, 2026
28a0894
fix(audit): dedup findings against already-open issues
aiolibsbot May 18, 2026
3e65dca
fix(audit): fingerprint findings in issue body so dedup survives titl…
aiolibsbot May 18, 2026
f4a924d
test(provider): add coverage for managed temp-file helpers and stream…
Koan-Bot May 18, 2026
130f536
refactor(provider): replace name check with supports_stream_json() ca…
Koan-Bot May 18, 2026
868d9f4
feat(abort): signal runner via SIGUSR1 for instant /abort
aiolibsbot May 18, 2026
bf1b94a
fix(abort): verify PID owns runner before sending SIGUSR1
aiolibsbot May 18, 2026
f038c2f
feat(memory): wire memory into skill prompts
atoomic May 17, 2026
39c1358
fix(ci_queue): drop closed and merged PRs from CI queue
aiolibsbot May 17, 2026
947477e
refactor(ci_queue): promote check_pr_state public and DRY closed/merg…
aiolibsbot May 18, 2026
e2aa489
feat(prompts): add {@include} directive for composable prompt partials
Koan-Bot May 18, 2026
8a39c78
fix(prompts): strip trailing newlines from partials and remove unused…
Koan-Bot May 18, 2026
497bb81
feat(review): inject project learnings into review prompts
Koan-Bot May 17, 2026
81177b3
fix(review): update docstring and hoist KOAN_ROOT import per review f…
Koan-Bot May 17, 2026
2b17814
fix: resolve CI failures on #1364 (attempt 1)
Koan-Bot May 17, 2026
ebe23b0
fix(notifications): filter all notifications by registered projects
Koan-Bot May 18, 2026
7ae9795
fix(notifications): add diagnostic logging and skipped_repos tracking…
Koan-Bot May 18, 2026
f27dd5c
fix(review): use GitHub @mention format for severity rebase hints
Koan-Bot May 18, 2026
a9bcaee
feat: add upstream update hint notification (48h throttled)
Koan-Bot May 18, 2026
e92c9dc
fix(review): address PR feedback on update_hint module
Koan-Bot May 18, 2026
a9bb2a0
feat(prompts): extract 5 new partials to reduce prompt duplication
Koan-Bot May 18, 2026
d7dd784
fix(implement): handle null issue body without crashing
aiolibsbot May 18, 2026
406751a
refactor(burn_rate): add BurnRateSnapshot to eliminate redundant file…
Koan-Bot May 19, 2026
bbb0c5a
refactor(memory): extract _should_skip_compaction() from compact_lear…
Koan-Bot May 19, 2026
f5173d7
feat(bandit): add Thompson Sampling MAB for project selection
Koan-Bot May 17, 2026
22835c2
fix(bandit): add stderr diagnostic to silent except block in iteratio…
Koan-Bot May 17, 2026
43b9e2e
fix(bandit): record failures on non-zero exit so bandit learns from b…
Koan-Bot May 17, 2026
2c5ac44
feat(review): add self-reflection pass to filter low-signal findings
Koan-Bot May 17, 2026
0e164b5
fix(review): move lazy prompt import to module level
Koan-Bot May 17, 2026
4df87be
fix: resolve CI failures on #1357 (attempt 1)
Koan-Bot May 17, 2026
041520a
fix: resolve CI failures on #1357 (attempt 2)
Koan-Bot May 17, 2026
8d86922
fix: resolve CI failures on #1357 (attempt 3)
Koan-Bot May 17, 2026
7ff68fb
fix(review): short-circuit reflect on threshold=0 and remove debug pr…
Koan-Bot May 17, 2026
5cc5909
fix: resolve CI failures on #1357 (attempt 1)
Koan-Bot May 17, 2026
0bf9708
fix: handle stale Skill instances missing 'requirements' attribute
toddr-bot May 20, 2026
d094bc5
fix(squash_pr): return error instead of silently skipping when commit…
Koan-Bot May 18, 2026
4392a2c
fix(squash_pr): update test_squash_skill to expect -1 error sentinel
Koan-Bot May 20, 2026
c468239
fix(notifications): don't mark foreign-repo notifications as read
atoomic May 21, 2026
5bef69b
feat(review): wire close_pr decision to actual gh pr close
bluetoothbot May 17, 2026
6ae9d25
fix(review): make close+comment atomic via `gh pr close --comment` an…
bluetoothbot May 18, 2026
c126d07
test(review): cover posted=False close skip and isolate close_pr fixture
bluetoothbot May 19, 2026
84a19a4
feat(security_audit): add /private_security_audit skill
aiolibsbot May 18, 2026
ef9db97
fix(security_audit): lock journal writes and dedupe audit helpers
aiolibsbot May 19, 2026
73311ee
fix: resolve CI failures on #1375 (attempt 1)
aiolibsbot May 19, 2026
c6fdd8a
fix(pr): target upstream not fork when submitting draft PRs
aiolibsbot May 20, 2026
de3e150
feat(provider): add thinking/reasoning controls to CLIProvider interface
Koan-Bot May 18, 2026
915c563
fix(provider): resolve duplicate --effort flags, register thinking co…
Koan-Bot May 18, 2026
3d217b0
refactor(thinking): tie extended thinking to critical complexity tier…
Koan-Bot May 19, 2026
5795850
fix: resolve CI failures on #1377 (attempt 1)
Koan-Bot May 19, 2026
6415666
fix(test): mock _notify in two resume tests to avoid 7.3s Claude CLI …
Koan-Bot May 21, 2026
0cc26cc
refactor: remove f-prefix from 66 strings without placeholders (F541)
Koan-Bot May 21, 2026
c4d42a5
fix: resolve 14 bugbear (B) violations across koan/app/
Koan-Bot May 21, 2026
fd32358
refactor: extract locked file ops into reusable locked_file.py module
Koan-Bot May 19, 2026
dba0b2d
fix: address PR review — lock path double-dot, recurring type guard, …
Koan-Bot May 21, 2026
7293394
fix: resolve CI failures on #1401 (attempt 1)
Koan-Bot May 21, 2026
463f309
feat(audit): add specialized long-term security intelligence layer
Koan-Bot May 19, 2026
0eb76f9
fix(audit): trust escalation for same-project recurrence and cleanup
Koan-Bot May 21, 2026
0fba961
fix(rebase): preserve user comment context during PR rebase
Koan-Bot May 21, 2026
c13ca71
fix(rebase): use match span for mention removal, case-insensitive bot…
Koan-Bot May 21, 2026
a7bbaba
feat(priority): support bulk reorder syntax in /prio command
Koan-Bot May 21, 2026
4dabb41
fix(priority): drop legacy move-to-position syntax, all multi-number …
Koan-Bot May 21, 2026
eb80fc8
feat(implement): add plan-review quality gate before execution
Koan-Bot May 20, 2026
45b9a51
fix(implement): send plan-review gate issues to Telegram and GitHub
Koan-Bot May 21, 2026
3f016fa
refactor(self_reflection): extract inline prompt and fix OPSEC leak
Koan-Bot May 20, 2026
ccdced1
feat(skills): add /remove_project alias to delete_project skill
Koan-Bot May 21, 2026
645323f
refactor(prompts): extract review output field rules into shared partial
Koan-Bot May 20, 2026
46c44c1
feat(claudemd): inject project learnings into CLAUDE.md refresh prompt
Koan-Bot May 21, 2026
1493ad3
feat(review): add diff compression for large PRs
Koan-Bot May 17, 2026
b08a021
fix(review): apply PR feedback — use log helper, conservative token e…
Koan-Bot May 17, 2026
708b102
feat(review): add config option to toggle diff compression optimization
Koan-Bot May 21, 2026
39cd576
fix(review): merge optimization blocks into single config entry in ex…
Koan-Bot May 21, 2026
5f534a9
fix(skills): ensure skills package is importable in handler execution
Koan-Bot May 21, 2026
3d4e5dc
feat(metrics): record plan-review and PR outcomes in per-project skil…
Koan-Bot May 21, 2026
1715f57
fix(metrics): wire PROTECTED_PROJECT_FILES, add file locking, publish…
Koan-Bot May 21, 2026
90081e8
feat(metrics): add skill metrics display to web dashboard
Koan-Bot May 21, 2026
a3259b8
feat(audit): auto-chain audit findings to fix missions via --auto-fix…
Koan-Bot May 21, 2026
aada69d
fix(telegram): redact token from poll errors and add backoff on conse…
Koan-Bot May 22, 2026
2c4a2b6
fix(diff): include mode-only files in compressed diff instead of skip…
Koan-Bot May 21, 2026
e49e1bf
feat(skills): add /inbox command for GitHub notification check
toddr-bot May 22, 2026
2aeed86
test(stagnation): add retry tracker and edge-case coverage (62.7% → 9…
Koan-Bot May 22, 2026
6c44c6a
test: cover update_hint and workspace_discovery error paths to 100%
Koan-Bot May 22, 2026
81d6950
fix(skills): resolve handler imports to skills package, not app/skill…
aiolibsbot May 21, 2026
2cfb5c6
fix(diff): use exact match in compress_diff safety fallback
Koan-Bot May 21, 2026
0142b63
fix(learning): reset failure counter when any lessons added in mixed …
Koan-Bot May 21, 2026
eeb3217
refactor(prompts): extract shared implementation-workflow partial
Koan-Bot May 20, 2026
4f31986
fix(prompts): revert premature partial extraction, restore lost imple…
Koan-Bot May 20, 2026
82707d5
refactor(prompts): extract shared implementation-workflow partial, pr…
Koan-Bot May 21, 2026
3d3db60
fix: resolve CI failures on #1417 (attempt 1)
Koan-Bot May 21, 2026
21cc9ac
feat(memory): add JSONL truth log with sliding context window
Koan-Bot May 21, 2026
b31a2bd
feat(cancel): support cancelling multiple missions with /cancel 1,3,5
Koan-Bot May 21, 2026
6cf08de
feat(git): detect remote HEAD branch changes and add /rescan skill
toddr-bot May 22, 2026
2f23923
fix(test): remove unused import in test_head_tracker
toddr-bot May 23, 2026
4fa27b1
feat(startup): detect and fix renamed GitHub remotes at startup
toddr-bot May 22, 2026
2904873
fix(startup): address review feedback on remote rename detector
toddr-bot May 23, 2026
ead7c4c
fix(selection): remove success-rate double-counting and add decision …
Koan-Bot May 22, 2026
a7aa0c1
feat(implement): add content-hash caching to plan-review gate
Koan-Bot May 21, 2026
0c057d2
fix(implement): replace debug print with logger.warning in plan-revie…
Koan-Bot May 23, 2026
babc4e2
fix(abort): add macOS fallback for _verify_is_runner
Koan-Bot May 22, 2026
c20efa4
fix: resolve_target_repo respects submit_to_repository config
toddr-bot May 22, 2026
163183f
fix: resolve CI failures from project_name parameter addition
toddr-bot May 23, 2026
8e6db5c
fix(github): warn when @mentions from unregistered repos are dropped
toddr-bot May 23, 2026
f65558c
feat(stagnation): classify root-cause patterns before abort
Koan-Bot May 22, 2026
fa13a45
fix(stagnation): annotate classify error print as intentional diagnostic
Koan-Bot May 23, 2026
a9920d0
style: add Unicode emoji prefixes to GitHub Actions workflow names
Koan-Bot May 23, 2026
45c1add
feat(skills): early abort worker skills when required args missing
Koan-Bot May 23, 2026
da9800b
fix(release): replace git describe with git tag for last-tag lookup
Koan-Bot May 23, 2026
571443d
feat(skill): add /doc skill for codebase documentation extraction
Koan-Bot May 22, 2026
149d108
refactor(doc): improve documentation extraction prompt with deeper in…
Koan-Bot May 23, 2026
f365168
refactor(doc): strengthen documentation prompt with deeper investigat…
Koan-Bot May 23, 2026
f4ea867
feat(session): record contemplative outcomes in session_tracker
Koan-Bot May 22, 2026
cb3c8ef
feat(suggestions): add automation suggestion engine
Koan-Bot May 23, 2026
a76c3de
feat(scheduler): add datetime-scheduled one-shot mission triggers
Koan-Bot May 23, 2026
7051b11
fix(scheduler): remove example event file that fires on fresh installs
Koan-Bot May 23, 2026
d606cbd
fix(notifications): only set _fetch_failure_alerted on successful out…
Koan-Bot May 23, 2026
08465ac
feat: add silent-failure-hunter pass to /review skill
Koan-Bot Mar 26, 2026
0bd6367
fix: restrict silent-failure-hunter auto-trigger to added diff lines …
Koan-Bot Apr 12, 2026
e580072
fix: resolve CI failures on #1048 (attempt 1)
Koan-Bot May 17, 2026
0cbf272
fix: resolve CI failures on #1048 (attempt 1)
Koan-Bot May 17, 2026
5f348ba
feat(ai): add structured output parsing with ---IDEA--- blocks
Koan-Bot May 23, 2026
49cd85c
feat(ai): add focus/context parameter to /ai skill
Koan-Bot May 23, 2026
aee5c4b
feat(mission_runner): emit STEP_FAILED|<step_name> to stderr on post-…
Koan-Bot May 23, 2026
aa4ad91
fix(logging): raise CI queue drain errors to warning level
Koan-Bot May 23, 2026
164048d
fix(snapshot): log diagnostic trace on snapshot write failure
Koan-Bot May 23, 2026
d35d7a8
feat(health): auto-inject diagnostic missions for low-success projects
Koan-Bot May 22, 2026
2d438d5
feat: recreate PR #566 — feat: differential security review on missio…
Koan-Bot Mar 9, 2026
f481a2f
rebase: apply review feedback on #566
Koan-Bot Mar 25, 2026
7754a63
fix(security_review): correct write_to_journal import and risk level …
Koan-Bot May 23, 2026
f8302f2
refactor: extract heartbeat read-parse-age into shared utils
Koan-Bot May 23, 2026
bfb149f
refactor(skills): extract shared audit handler logic into audit_helpe…
Koan-Bot May 23, 2026
9e1eb60
feat(status): show koan version in /status header
Koan-Bot May 23, 2026
b3fd976
feat(skill): add /check_need skill for PR/issue relevance analysis
Koan-Bot May 23, 2026
c37e4bd
fix(check_need): remove unused import and use logger for diagnostics
Koan-Bot May 23, 2026
f8ca246
fix(skills): prevent TypeError when SkillError bypasses isinstance af…
Koan-Bot May 23, 2026
4d29ca8
feat(github): drain unregistered-repo notifications in single-instanc…
Koan-Bot May 23, 2026
062d17d
fix(budget): re-check affordability after complexity tier resolves
Koan-Bot May 23, 2026
c695e42
feat(pipeline): track post-mission timeout rate and alert on overload
Koan-Bot May 23, 2026
ddb2b38
feat(mission_runner): surface token extraction failure in result dict
Koan-Bot May 23, 2026
d951683
perf(projects_config): add mtime-keyed cache to load_projects_config()
Koan-Bot May 23, 2026
daeea1c
refactor: extract duplicated GitHub skill helpers into shared functions
Koan-Bot May 23, 2026
3eb4707
style: remove extra blank line in github_skill_helpers.py
Koan-Bot May 23, 2026
0edf98b
refactor: extract shared CI fix loop into claude_step.run_ci_fix_loop
Koan-Bot May 23, 2026
56bc292
fix: normalize log prefixes in run_ci_fix_loop to match claude_step c…
Koan-Bot May 23, 2026
31ecc6b
fix(notifications): use comment_id for dedup and monotonic clock for TTL
Koan-Bot May 23, 2026
502ecc8
fix(loop_manager): skip notification dispatch in branch-saturated sleep
Koan-Bot May 23, 2026
d73c646
feat(ai): inject project learnings and health metrics into /ai explor…
Koan-Bot May 23, 2026
2dbf7cd
fix(ai): reference structured findings format in exploration prompt g…
Koan-Bot May 23, 2026
e665204
feat(skill): add /spec_audit for autonomous docs/code drift detection
Koan-Bot May 22, 2026
2862deb
fix(spec_audit): remove default recurring.json to avoid forced schedu…
Koan-Bot May 23, 2026
1f30772
feat: drain stale foreign-repo notifications in multi-instance mode
Koan-Bot May 23, 2026
b89e40f
refactor(missions): simplify reorder_mission with arithmetic boundari…
Koan-Bot May 24, 2026
7565a4b
test(missions): add unit tests for _collect_item_start_indices and _f…
Koan-Bot May 24, 2026
00ddf31
feat(prompt_builder): add budget-aware context trimming
Koan-Bot May 24, 2026
75dbf69
fix(prompt_builder): replace debug print statements with logger.info
Koan-Bot May 24, 2026
648a22d
feat(contemplative): adapt roll probability from historical session o…
Koan-Bot May 24, 2026
910eb4e
refactor: extract shared log helper and centralize magic constants
Koan-Bot May 24, 2026
cb15203
refactor(github_notifications): encapsulate global state in Notificat…
Koan-Bot May 24, 2026
7230887
test: fill coverage gaps in contemplative_runner, stagnation_monitor
Koan-Bot May 24, 2026
29cce5a
feat: add --comments flag for comment-quality review pass
Koan-Bot Mar 17, 2026
144c794
fix(burn_rate): hold exclusive lock across read-modify-write in recor…
Koan-Bot May 24, 2026
4463988
fix(quota): unify quota handling across skill and Claude mission paths
Koan-Bot May 24, 2026
9712ac8
fix(notify): use ⏭ and suppress redundant notifications for skipped /fix
Koan-Bot May 24, 2026
9eb0d32
refactor(skills): derive combo skills from SKILL.md frontmatter
Koan-Bot May 24, 2026
66e8cda
docs(skills): document sub_commands field for combo skill authoring
Koan-Bot May 24, 2026
c3b5847
perf(missions): eliminate redundant find_section_boundaries() in reor…
Koan-Bot May 24, 2026
f4b676b
fix(notifications): close silent dedup gap in check_already_processed
Koan-Bot May 24, 2026
b89701c
feat(review): use collapsible sections for silent failure analysis
Koan-Bot May 24, 2026
a74c98b
test: add regression test for stagnation monitor off-by-one
Koan-Bot May 24, 2026
48503e3
fix(stagnation): count duplicates not total samples for abort threshold
Koan-Bot May 24, 2026
fe21f2e
fix(auto_update): add overall timeout to pull_upstream to prevent dea…
Koan-Bot May 24, 2026
eafbc6e
fix(rtk): detect `rtk hook` marker shipped by rtk >= 0.41
Koan-Bot May 24, 2026
4562baa
test(stagnation): update classify-exception test for duplicate-counti…
Koan-Bot May 24, 2026
67d0e02
fix(claudemd): use timestamped branch names to avoid collision
Koan-Bot May 24, 2026
f2d2c85
ci: strip emoji prefix from job-level names
Koan-Bot May 24, 2026
3f2bfbb
fix(burn_rate): alert on corrupted state file instead of silent reset
Koan-Bot May 23, 2026
dbea821
fix(burn_rate): add diagnostic logging to silent except block
Koan-Bot May 24, 2026
5e51e3f
docs: update CLAUDE.md
Koan-Bot May 24, 2026
86e0185
fix(missions): complexity tag breaks mission lifecycle transitions
toddr-bot May 24, 2026
f6685db
Add make setup
atoomic May 24, 2026
de7ab87
fix(add_project): clone private repos via gh to fix auth failure
Albertia-Bot May 24, 2026
f905b81
fix(notifications): refresh workspace remote cache when building know…
Albertia-Bot May 24, 2026
b81cba3
fix(notifications): close same alias gap in attention.py + address re…
Albertia-Bot May 24, 2026
fde6d51
fix(notifications): send Telegram alert when quota check is unreliable
Koan-Bot May 24, 2026
3bfcd4f
fix(burn_rate): log warning when record_run() drops invalid cost samples
Koan-Bot May 24, 2026
47aa2ca
fix(mission_runner): set cost_tracking_failed on non-zero exit too
Koan-Bot May 24, 2026
fe3fb68
fix(attention): convert GitHub API URLs to web URLs for @mention links
Koan-Bot May 24, 2026
8a2a169
fix(pvrs): use raw JSON body for security advisory submissions
atoomic May 25, 2026
bda2877
feat(auto_update): use release tags for update notifications
Koan-Bot May 24, 2026
8581175
feat(update_hint): use tag-based mechanism for update notifications
Koan-Bot May 25, 2026
98dc7b3
fix: resolve CI failures on #1495 (attempt 1)
Koan-Bot May 25, 2026
5ce6d1b
fix(update_hint): record notified tag to prevent duplicate notificati…
Koan-Bot May 25, 2026
496f9a8
feat(implement): autonomous plan improvement loop replaces blocking gate
atoomic May 25, 2026
3b489c4
feat(implement): pass improvement context to implementation agent
atoomic May 25, 2026
afe0e13
feat(plan-improve): enforce simplicity and maintainability in improve…
atoomic May 25, 2026
24d4477
feat(audit): write local security files for high+ findings instead of…
atoomic May 25, 2026
1a9ac2a
fix(audit): address PR review — security regression, silent failures,…
atoomic May 25, 2026
85d4fe6
fix(docker,provider): add Codex provider support + remove deprecated …
Koan-Bot May 23, 2026
34561a1
fix(docker): restore missions.docker.md overlay mount per review
Koan-Bot May 25, 2026
bb3694f
feat: add dashboard observability viewer (logs + health)
Koan-Bot Mar 16, 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
  •  
  •  
  •  
86 changes: 86 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
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
name: release

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

- 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 tag --sort=-v:refname --list 'v*' | head -1)
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
98 changes: 89 additions & 9 deletions .github/workflows/tests.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: Tests
name: 🧪 Tests

on:
push:
Expand All @@ -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,25 +37,25 @@ 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
- 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 }})
- name: ▶️ Run tests (${{ matrix.group.name }})
if: ${{ !inputs.group || matrix.group.name == inputs.group }}
working-directory: koan
env:
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."
4 changes: 4 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 Expand Up @@ -52,3 +55,4 @@ projects.docker.yaml
docker-compose.override.yml
.env.docker
claude-auth/
.spec/
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
Loading