taskill 0.1.7__tar.gz → 0.1.8__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. {taskill-0.1.7 → taskill-0.1.8}/CHANGELOG.md +21 -0
  2. {taskill-0.1.7 → taskill-0.1.8}/PKG-INFO +5 -5
  3. {taskill-0.1.7 → taskill-0.1.8}/README.md +4 -4
  4. {taskill-0.1.7 → taskill-0.1.8}/SUMD.md +55 -56
  5. {taskill-0.1.7 → taskill-0.1.8}/SUMR.md +120 -128
  6. taskill-0.1.8/VERSION +1 -0
  7. {taskill-0.1.7 → taskill-0.1.8}/app.doql.less +1 -1
  8. {taskill-0.1.7 → taskill-0.1.8}/project/analysis.toon.yaml +14 -20
  9. {taskill-0.1.7 → taskill-0.1.8}/project/calls.mmd +72 -75
  10. taskill-0.1.8/project/calls.png +0 -0
  11. {taskill-0.1.7 → taskill-0.1.8}/project/calls.toon.yaml +50 -51
  12. {taskill-0.1.7 → taskill-0.1.8}/project/calls.yaml +348 -356
  13. {taskill-0.1.7 → taskill-0.1.8}/project/compact_flow.mmd +0 -1
  14. taskill-0.1.8/project/compact_flow.png +0 -0
  15. {taskill-0.1.7 → taskill-0.1.8}/project/context.md +95 -91
  16. {taskill-0.1.7 → taskill-0.1.8}/project/duplication.toon.yaml +1 -1
  17. {taskill-0.1.7 → taskill-0.1.8}/project/evolution.toon.yaml +1 -1
  18. taskill-0.1.8/project/flow.mmd +25 -0
  19. taskill-0.1.8/project/flow.png +0 -0
  20. taskill-0.1.8/project/index.html +623 -0
  21. {taskill-0.1.7 → taskill-0.1.8}/project/mermaid.export +64 -64
  22. {taskill-0.1.7 → taskill-0.1.8}/project/project.toon.yaml +11 -11
  23. {taskill-0.1.7 → taskill-0.1.8}/project/prompt.txt +1 -1
  24. {taskill-0.1.7 → taskill-0.1.8}/pyproject.toml +1 -1
  25. {taskill-0.1.7 → taskill-0.1.8}/src/taskill/__init__.py +1 -1
  26. taskill-0.1.7/VERSION +0 -1
  27. taskill-0.1.7/project/calls.png +0 -0
  28. taskill-0.1.7/project/compact_flow.png +0 -0
  29. taskill-0.1.7/project/flow.mmd +0 -25
  30. taskill-0.1.7/project/flow.png +0 -0
  31. taskill-0.1.7/project/index.html +0 -623
  32. {taskill-0.1.7 → taskill-0.1.8}/.gitignore +0 -0
  33. {taskill-0.1.7 → taskill-0.1.8}/.windsurf/workflows/daily-docs-update.md +0 -0
  34. {taskill-0.1.7 → taskill-0.1.8}/LICENSE +0 -0
  35. {taskill-0.1.7 → taskill-0.1.8}/ROADMAP.md +0 -0
  36. {taskill-0.1.7 → taskill-0.1.8}/TODO.md +0 -0
  37. {taskill-0.1.7 → taskill-0.1.8}/daily_update.sh +0 -0
  38. {taskill-0.1.7 → taskill-0.1.8}/examples/ansible-playbook.yml +0 -0
  39. {taskill-0.1.7 → taskill-0.1.8}/examples/github-action.yml +0 -0
  40. {taskill-0.1.7 → taskill-0.1.8}/examples/gitlab-ci.yml +0 -0
  41. {taskill-0.1.7 → taskill-0.1.8}/examples/systemd-timer/taskill.service +0 -0
  42. {taskill-0.1.7 → taskill-0.1.8}/examples/systemd-timer/taskill.timer +0 -0
  43. {taskill-0.1.7 → taskill-0.1.8}/goal.yaml +0 -0
  44. {taskill-0.1.7 → taskill-0.1.8}/planfile.yaml +0 -0
  45. {taskill-0.1.7 → taskill-0.1.8}/prefact.yaml +0 -0
  46. {taskill-0.1.7 → taskill-0.1.8}/project/README.md +0 -0
  47. {taskill-0.1.7 → taskill-0.1.8}/project/map.toon.yaml +0 -0
  48. {taskill-0.1.7 → taskill-0.1.8}/project.sh +0 -0
  49. {taskill-0.1.7 → taskill-0.1.8}/src/taskill/bulk.py +0 -0
  50. {taskill-0.1.7 → taskill-0.1.8}/src/taskill/cli.py +0 -0
  51. {taskill-0.1.7 → taskill-0.1.8}/src/taskill/config.py +0 -0
  52. {taskill-0.1.7 → taskill-0.1.8}/src/taskill/core.py +0 -0
  53. {taskill-0.1.7 → taskill-0.1.8}/src/taskill/git_state.py +0 -0
  54. {taskill-0.1.7 → taskill-0.1.8}/src/taskill/providers/__init__.py +0 -0
  55. {taskill-0.1.7 → taskill-0.1.8}/src/taskill/providers/algorithmic.py +0 -0
  56. {taskill-0.1.7 → taskill-0.1.8}/src/taskill/providers/base.py +0 -0
  57. {taskill-0.1.7 → taskill-0.1.8}/src/taskill/providers/openrouter.py +0 -0
  58. {taskill-0.1.7 → taskill-0.1.8}/src/taskill/providers/windsurf_mcp.py +0 -0
  59. {taskill-0.1.7 → taskill-0.1.8}/src/taskill/state.py +0 -0
  60. {taskill-0.1.7 → taskill-0.1.8}/src/taskill/triggers.py +0 -0
  61. {taskill-0.1.7 → taskill-0.1.8}/src/taskill/updaters/__init__.py +0 -0
  62. {taskill-0.1.7 → taskill-0.1.8}/src/taskill/updaters/base.py +0 -0
  63. {taskill-0.1.7 → taskill-0.1.8}/src/taskill/updaters/changelog.py +0 -0
  64. {taskill-0.1.7 → taskill-0.1.8}/src/taskill/updaters/readme.py +0 -0
  65. {taskill-0.1.7 → taskill-0.1.8}/src/taskill/updaters/todo.py +0 -0
  66. {taskill-0.1.7 → taskill-0.1.8}/taskill.yaml +0 -0
  67. {taskill-0.1.7 → taskill-0.1.8}/testql-scenarios/generated-cli-tests.testql.toon.yaml +0 -0
  68. {taskill-0.1.7 → taskill-0.1.8}/tests/__init__.py +0 -0
  69. {taskill-0.1.7 → taskill-0.1.8}/tests/test_algorithmic.py +0 -0
  70. {taskill-0.1.7 → taskill-0.1.8}/tests/test_bulk.py +0 -0
  71. {taskill-0.1.7 → taskill-0.1.8}/tests/test_config.py +0 -0
  72. {taskill-0.1.7 → taskill-0.1.8}/tests/test_providers.py +0 -0
  73. {taskill-0.1.7 → taskill-0.1.8}/tests/test_triggers.py +0 -0
  74. {taskill-0.1.7 → taskill-0.1.8}/tests/test_updaters.py +0 -0
  75. {taskill-0.1.7 → taskill-0.1.8}/tree.sh +0 -0
  76. {taskill-0.1.7 → taskill-0.1.8}/tree.txt +0 -0
@@ -77,6 +77,27 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77
77
  - README: new "Bulk / fleet-wide runs" and "Extending taskill" sections
78
78
  - ROADMAP: marked v0.2.1, v0.2.3, and v0.5 baseline as shipped
79
79
 
80
+ ## [0.1.8] - 2026-04-25
81
+
82
+ ### Docs
83
+ - Update README.md
84
+ - Update SUMD.md
85
+ - Update SUMR.md
86
+ - Update project/context.md
87
+
88
+ ### Other
89
+ - Update app.doql.less
90
+ - Update project/analysis.toon.yaml
91
+ - Update project/calls.mmd
92
+ - Update project/calls.png
93
+ - Update project/calls.toon.yaml
94
+ - Update project/calls.yaml
95
+ - Update project/compact_flow.mmd
96
+ - Update project/compact_flow.png
97
+ - Update project/duplication.toon.yaml
98
+ - Update project/evolution.toon.yaml
99
+ - ... and 6 more files
100
+
80
101
  ## [0.1.7] - 2026-04-25
81
102
 
82
103
  ### Docs
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: taskill
3
- Version: 0.1.7
3
+ Version: 0.1.8
4
4
  Summary: Daily project hygiene: keep README / CHANGELOG / TODO in sync with reality. LLM-first, algorithmic fallback.
5
5
  Project-URL: Homepage, https://github.com/oqlos/taskill
6
6
  Project-URL: Issues, https://github.com/oqlos/taskill/issues
@@ -37,11 +37,11 @@ Description-Content-Type: text/markdown
37
37
 
38
38
  ## AI Cost Tracking
39
39
 
40
- ![PyPI](https://img.shields.io/badge/pypi-costs-blue) ![Version](https://img.shields.io/badge/version-0.1.7-blue) ![Python](https://img.shields.io/badge/python-3.9+-blue) ![License](https://img.shields.io/badge/license-Apache--2.0-green)
41
- ![AI Cost](https://img.shields.io/badge/AI%20Cost-$0.90-orange) ![Human Time](https://img.shields.io/badge/Human%20Time-4.9h-blue) ![Model](https://img.shields.io/badge/Model-openrouter%2Fqwen%2Fqwen3--coder--next-lightgrey)
40
+ ![PyPI](https://img.shields.io/badge/pypi-costs-blue) ![Version](https://img.shields.io/badge/version-0.1.8-blue) ![Python](https://img.shields.io/badge/python-3.9+-blue) ![License](https://img.shields.io/badge/license-Apache--2.0-green)
41
+ ![AI Cost](https://img.shields.io/badge/AI%20Cost-$1.05-orange) ![Human Time](https://img.shields.io/badge/Human%20Time-5.2h-blue) ![Model](https://img.shields.io/badge/Model-openrouter%2Fqwen%2Fqwen3--coder--next-lightgrey)
42
42
 
43
- - 🤖 **LLM usage:** $0.9000 (6 commits)
44
- - 👤 **Human dev:** ~$487 (4.9h @ $100/h, 30min dedup)
43
+ - 🤖 **LLM usage:** $1.0500 (7 commits)
44
+ - 👤 **Human dev:** ~$524 (5.2h @ $100/h, 30min dedup)
45
45
 
46
46
  Generated on 2026-04-25 using [openrouter/qwen/qwen3-coder-next](https://openrouter.ai/qwen/qwen3-coder-next)
47
47
 
@@ -3,11 +3,11 @@
3
3
 
4
4
  ## AI Cost Tracking
5
5
 
6
- ![PyPI](https://img.shields.io/badge/pypi-costs-blue) ![Version](https://img.shields.io/badge/version-0.1.7-blue) ![Python](https://img.shields.io/badge/python-3.9+-blue) ![License](https://img.shields.io/badge/license-Apache--2.0-green)
7
- ![AI Cost](https://img.shields.io/badge/AI%20Cost-$0.90-orange) ![Human Time](https://img.shields.io/badge/Human%20Time-4.9h-blue) ![Model](https://img.shields.io/badge/Model-openrouter%2Fqwen%2Fqwen3--coder--next-lightgrey)
6
+ ![PyPI](https://img.shields.io/badge/pypi-costs-blue) ![Version](https://img.shields.io/badge/version-0.1.8-blue) ![Python](https://img.shields.io/badge/python-3.9+-blue) ![License](https://img.shields.io/badge/license-Apache--2.0-green)
7
+ ![AI Cost](https://img.shields.io/badge/AI%20Cost-$1.05-orange) ![Human Time](https://img.shields.io/badge/Human%20Time-5.2h-blue) ![Model](https://img.shields.io/badge/Model-openrouter%2Fqwen%2Fqwen3--coder--next-lightgrey)
8
8
 
9
- - 🤖 **LLM usage:** $0.9000 (6 commits)
10
- - 👤 **Human dev:** ~$487 (4.9h @ $100/h, 30min dedup)
9
+ - 🤖 **LLM usage:** $1.0500 (7 commits)
10
+ - 👤 **Human dev:** ~$524 (5.2h @ $100/h, 30min dedup)
11
11
 
12
12
  Generated on 2026-04-25 using [openrouter/qwen/qwen3-coder-next](https://openrouter.ai/qwen/qwen3-coder-next)
13
13
 
@@ -20,7 +20,7 @@ Daily project hygiene: keep README / CHANGELOG / TODO in sync with reality. LLM-
20
20
  ## Metadata
21
21
 
22
22
  - **name**: `taskill`
23
- - **version**: `0.1.6`
23
+ - **version**: `0.1.7`
24
24
  - **python_requires**: `>=3.10`
25
25
  - **license**: Apache-2.0
26
26
  - **ai_model**: `openrouter/qwen/qwen3-coder-next`
@@ -40,7 +40,7 @@ SUMD (description) → DOQL/source (code) → taskfile (automation) → testql (
40
40
 
41
41
  app {
42
42
  name: taskill;
43
- version: 0.1.6;
43
+ version: 0.1.7;
44
44
  }
45
45
 
46
46
  dependencies {
@@ -100,7 +100,7 @@ LOG[3]{message}:
100
100
  ```yaml
101
101
  project:
102
102
  name: taskill
103
- version: 0.1.6
103
+ version: 0.1.7
104
104
  env: local
105
105
  ```
106
106
 
@@ -392,7 +392,7 @@ D:
392
392
 
393
393
  ## Call Graph
394
394
 
395
- *56 nodes · 50 edges · 14 modules · CC̄=1.8*
395
+ *55 nodes · 50 edges · 14 modules · CC̄=1.8*
396
396
 
397
397
  ### Hubs (by degree)
398
398
 
@@ -403,13 +403,13 @@ D:
403
403
  | `generate` *(in src.taskill.providers.openrouter.OpenRouterProvider)* | 6 | 0 | 27 | **27** |
404
404
  | `status` *(in src.taskill.cli)* | 11 ⚠ | 0 | 25 | **25** |
405
405
  | `_print_run_result` *(in src.taskill.cli)* | 12 ⚠ | 1 | 20 | **21** |
406
- | `run` *(in src.taskill.core.Taskill)* | 11 ⚠ | 0 | 20 | **20** |
407
406
  | `bulk_run_cmd` *(in src.taskill.cli)* | 5 | 0 | 20 | **20** |
407
+ | `run` *(in src.taskill.core.Taskill)* | 11 ⚠ | 0 | 20 | **20** |
408
408
  | `bulk_run` *(in src.taskill.bulk)* | 3 | 1 | 14 | **15** |
409
409
 
410
410
  ```toon markpact:analysis path=project/calls.toon.yaml
411
411
  # code2llm call graph | /home/tom/github/semcod/taskill
412
- # nodes: 56 | edges: 50 | modules: 14
412
+ # nodes: 55 | edges: 50 | modules: 14
413
413
  # CC̄=1.8
414
414
 
415
415
  HUBS[20]:
@@ -423,10 +423,10 @@ HUBS[20]:
423
423
  CC=11 in:0 out:25 total:25
424
424
  src.taskill.cli._print_run_result
425
425
  CC=12 in:1 out:20 total:21
426
- src.taskill.core.Taskill.run
427
- CC=11 in:0 out:20 total:20
428
426
  src.taskill.cli.bulk_run_cmd
429
427
  CC=5 in:0 out:20 total:20
428
+ src.taskill.core.Taskill.run
429
+ CC=11 in:0 out:20 total:20
430
430
  src.taskill.bulk.bulk_run
431
431
  CC=3 in:1 out:14 total:15
432
432
  src.taskill.git_state.collect_snapshot
@@ -435,35 +435,26 @@ HUBS[20]:
435
435
  CC=6 in:0 out:13 total:13
436
436
  src.taskill.git_state.read_coverage
437
437
  CC=7 in:1 out:11 total:12
438
+ src.taskill.triggers.evaluate
439
+ CC=3 in:2 out:10 total:12
438
440
  src.taskill.core.Taskill._apply
439
441
  CC=4 in:0 out:12 total:12
440
442
  src.taskill.updaters.readme.ReadmeUpdater._update_readme
441
443
  CC=5 in:0 out:10 total:10
442
- src.taskill.triggers.evaluate
443
- CC=3 in:0 out:10 total:10
444
444
  src.taskill.bulk._apply_filters
445
445
  CC=12 in:1 out:8 total:9
446
+ src.taskill.git_state.commits_since
447
+ CC=7 in:1 out:8 total:9
448
+ src.taskill.providers.windsurf_mcp._candidate_endpoints
449
+ CC=5 in:2 out:7 total:9
446
450
  src.taskill.bulk._scan
447
451
  CC=9 in:2 out:7 total:9
448
452
  src.taskill.git_state.read_failed_tests
449
453
  CC=5 in:1 out:8 total:9
450
- src.taskill.git_state.commits_since
451
- CC=7 in:1 out:8 total:9
452
- src.taskill.cli.release
453
- CC=2 in:0 out:8 total:8
454
- src.taskill.providers.discover_providers
455
- CC=6 in:1 out:7 total:8
454
+ src.taskill.providers.base.parse_json_loosely
455
+ CC=4 in:2 out:6 total:8
456
456
 
457
457
  MODULES:
458
- project.map.toon [8 funcs]
459
- _candidate_endpoints CC=0 out:0
460
- _mcp_lib_present CC=0 out:0
461
- _normalize_model CC=0 out:0
462
- empty_todo CC=0 out:0
463
- evaluate CC=0 out:0
464
- render_status_block CC=0 out:0
465
- update_readme CC=0 out:0
466
- update_todo CC=0 out:0
467
458
  src.taskill.bulk [8 funcs]
468
459
  _apply_filters CC=12 out:8
469
460
  _load_shared_config CC=4 out:5
@@ -504,11 +495,14 @@ MODULES:
504
495
  discover_providers CC=6 out:7
505
496
  src.taskill.providers.base [1 funcs]
506
497
  parse_json_loosely CC=4 out:6
507
- src.taskill.providers.openrouter [1 funcs]
498
+ src.taskill.providers.openrouter [2 funcs]
508
499
  generate CC=6 out:27
509
- src.taskill.providers.windsurf_mcp [2 funcs]
500
+ _normalize_model CC=2 out:2
501
+ src.taskill.providers.windsurf_mcp [4 funcs]
510
502
  generate CC=7 out:32
511
503
  is_available CC=2 out:3
504
+ _candidate_endpoints CC=5 out:7
505
+ _mcp_lib_present CC=2 out:0
512
506
  src.taskill.state [1 funcs]
513
507
  load_state CC=3 out:6
514
508
  src.taskill.triggers [8 funcs]
@@ -523,10 +517,22 @@ MODULES:
523
517
  src.taskill.updaters.changelog [2 funcs]
524
518
  release_unreleased CC=4 out:6
525
519
  update_changelog CC=1 out:2
526
- src.taskill.updaters.readme [1 funcs]
520
+ src.taskill.updaters.readme [3 funcs]
527
521
  _update_readme CC=5 out:10
522
+ render_status_block CC=6 out:5
523
+ update_readme CC=1 out:2
524
+ src.taskill.updaters.todo [2 funcs]
525
+ empty_todo CC=1 out:1
526
+ update_todo CC=1 out:2
528
527
 
529
528
  EDGES:
529
+ src.taskill.cli.main → src.taskill.cli._setup_logging
530
+ src.taskill.cli.run → src.taskill.config.load_config
531
+ src.taskill.cli.run → src.taskill.cli._print_run_result
532
+ src.taskill.cli.status → src.taskill.config.load_config
533
+ src.taskill.cli.release → src.taskill.updaters.changelog.release_unreleased
534
+ src.taskill.cli.bulk_run_cmd → src.taskill.bulk.bulk_run
535
+ src.taskill.cli.clean_todo → src.taskill.updaters.todo.empty_todo
530
536
  src.taskill.git_state.head_sha → src.taskill.git_state._run
531
537
  src.taskill.git_state.commits_since → src.taskill.git_state._run
532
538
  src.taskill.git_state.changed_files_since → src.taskill.git_state._run
@@ -536,16 +542,6 @@ EDGES:
536
542
  src.taskill.git_state.collect_snapshot → src.taskill.git_state.read_coverage
537
543
  src.taskill.git_state.collect_snapshot → src.taskill.git_state.read_failed_tests
538
544
  src.taskill.git_state.collect_snapshot → src.taskill.git_state.file_hash
539
- src.taskill.bulk.find_repos → src.taskill.bulk._scan
540
- src.taskill.bulk.resolve_repo_config → src.taskill.config.load_config
541
- src.taskill.bulk.resolve_repo_config → src.taskill.bulk._rebase_config
542
- src.taskill.bulk._load_shared_config → src.taskill.config.load_config
543
- src.taskill.bulk._run_single_repo → src.taskill.bulk.resolve_repo_config
544
- src.taskill.bulk.bulk_run → src.taskill.bulk._load_shared_config
545
- src.taskill.bulk.bulk_run → src.taskill.bulk.find_repos
546
- src.taskill.bulk.bulk_run → src.taskill.bulk._apply_filters
547
- src.taskill.bulk.bulk_run → src.taskill.bulk._run_single_repo
548
- src.taskill.providers.build_chain → src.taskill.providers.discover_providers
549
545
  src.taskill.triggers.evaluate → src.taskill.triggers._check_time
550
546
  src.taskill.triggers.evaluate → src.taskill.triggers._check_commits
551
547
  src.taskill.triggers.evaluate → src.taskill.triggers._check_changed_files
@@ -553,30 +549,33 @@ EDGES:
553
549
  src.taskill.triggers.evaluate → src.taskill.triggers._check_failed_tests
554
550
  src.taskill.triggers.evaluate → src.taskill.triggers._check_sumd
555
551
  src.taskill.triggers.evaluate → src.taskill.triggers._check_watched_files
556
- src.taskill.providers.openrouter.OpenRouterProvider.generate → project.map.toon._normalize_model
557
- src.taskill.providers.openrouter.OpenRouterProvider.generate → src.taskill.providers.base.parse_json_loosely
558
552
  src.taskill.core.Taskill.__init__ → src.taskill.state.load_state
559
553
  src.taskill.core.Taskill.__init__ → src.taskill.config.load_config
560
- src.taskill.core.Taskill.run → project.map.toon.evaluate
554
+ src.taskill.core.Taskill.run → src.taskill.triggers.evaluate
561
555
  src.taskill.core.Taskill.run → src.taskill.providers.build_chain
562
- src.taskill.core.Taskill.status → project.map.toon.evaluate
556
+ src.taskill.core.Taskill.status → src.taskill.triggers.evaluate
563
557
  src.taskill.core.Taskill._snapshot → src.taskill.git_state.collect_snapshot
564
558
  src.taskill.core.Taskill._apply → src.taskill.updaters.changelog.update_changelog
565
- src.taskill.core.Taskill._apply → project.map.toon.update_todo
566
- src.taskill.core.Taskill._apply → project.map.toon.update_readme
567
- src.taskill.providers.windsurf_mcp.WindsurfMcpProvider.is_availableproject.map.toon._mcp_lib_present
568
- src.taskill.providers.windsurf_mcp.WindsurfMcpProvider.is_availableproject.map.toon._candidate_endpoints
569
- src.taskill.providers.windsurf_mcp.WindsurfMcpProvider.generateproject.map.toon._candidate_endpoints
559
+ src.taskill.core.Taskill._apply → src.taskill.updaters.todo.update_todo
560
+ src.taskill.core.Taskill._apply → src.taskill.updaters.readme.update_readme
561
+ src.taskill.bulk.find_repossrc.taskill.bulk._scan
562
+ src.taskill.bulk.resolve_repo_configsrc.taskill.config.load_config
563
+ src.taskill.bulk.resolve_repo_configsrc.taskill.bulk._rebase_config
564
+ src.taskill.bulk._load_shared_config → src.taskill.config.load_config
565
+ src.taskill.bulk._run_single_repo → src.taskill.bulk.resolve_repo_config
566
+ src.taskill.bulk.bulk_run → src.taskill.bulk._load_shared_config
567
+ src.taskill.bulk.bulk_run → src.taskill.bulk.find_repos
568
+ src.taskill.bulk.bulk_run → src.taskill.bulk._apply_filters
569
+ src.taskill.bulk.bulk_run → src.taskill.bulk._run_single_repo
570
+ src.taskill.updaters.readme.ReadmeUpdater._update_readme → src.taskill.updaters.readme.render_status_block
571
+ src.taskill.providers.windsurf_mcp.WindsurfMcpProvider.is_available → src.taskill.providers.windsurf_mcp._mcp_lib_present
572
+ src.taskill.providers.windsurf_mcp.WindsurfMcpProvider.is_available → src.taskill.providers.windsurf_mcp._candidate_endpoints
573
+ src.taskill.providers.windsurf_mcp.WindsurfMcpProvider.generate → src.taskill.providers.windsurf_mcp._candidate_endpoints
570
574
  src.taskill.providers.windsurf_mcp.WindsurfMcpProvider.generate → src.taskill.providers.base.parse_json_loosely
571
- src.taskill.providers.windsurf_mcp.WindsurfMcpProvider.generate → project.map.toon._mcp_lib_present
572
- src.taskill.updaters.readme.ReadmeUpdater._update_readmeproject.map.toon.render_status_block
573
- src.taskill.cli.main → src.taskill.cli._setup_logging
574
- src.taskill.cli.run → src.taskill.config.load_config
575
- src.taskill.cli.run → src.taskill.cli._print_run_result
576
- src.taskill.cli.status → src.taskill.config.load_config
577
- src.taskill.cli.release → src.taskill.updaters.changelog.release_unreleased
578
- src.taskill.cli.bulk_run_cmd → src.taskill.bulk.bulk_run
579
- src.taskill.cli.clean_todo → project.map.toon.empty_todo
575
+ src.taskill.providers.windsurf_mcp.WindsurfMcpProvider.generate → src.taskill.providers.windsurf_mcp._mcp_lib_present
576
+ src.taskill.providers.openrouter.OpenRouterProvider.generatesrc.taskill.providers.openrouter._normalize_model
577
+ src.taskill.providers.openrouter.OpenRouterProvider.generate → src.taskill.providers.base.parse_json_loosely
578
+ src.taskill.providers.build_chain → src.taskill.providers.discover_providers
580
579
  ```
581
580
 
582
581
  ## Test Contracts