| 1 | [project] |
| 2 | name = "last30days-skill" |
| 3 | version = "3.18.4" |
| 4 | description = "Multi-source last-30-days research skill" |
| 5 | readme = "README.md" |
| 6 | requires-python = ">=3.12" |
| 7 | dependencies = [] |
| 8 | |
| 9 | [dependency-groups] |
| 10 | dev = [ |
| 11 | "pytest>=9.1.1,<10", |
| 12 | "pytest-cov>=7,<8", |
| 13 | "pyyaml>=6.0.2,<7", |
| 14 | "towncrier>=25.8.0,<26", |
| 15 | ] |
| 16 | |
| 17 | [tool.towncrier] |
| 18 | name = "last30days-skill" |
| 19 | directory = "changelog.d" |
| 20 | filename = "CHANGELOG.md" |
| 21 | start_string = "<!-- towncrier release notes start -->\n" |
| 22 | underlines = ["", "", ""] |
| 23 | title_format = "## [{version}] - {project_date}" |
| 24 | issue_format = "[#{issue}](https://github.com/mvanhorn/last30days-skill/issues/{issue})" |
| 25 | |
| 26 | [[tool.towncrier.type]] |
| 27 | directory = "security" |
| 28 | name = "Security" |
| 29 | showcontent = true |
| 30 | |
| 31 | [[tool.towncrier.type]] |
| 32 | directory = "removed" |
| 33 | name = "Removed" |
| 34 | showcontent = true |
| 35 | |
| 36 | [[tool.towncrier.type]] |
| 37 | directory = "deprecated" |
| 38 | name = "Deprecated" |
| 39 | showcontent = true |
| 40 | |
| 41 | [[tool.towncrier.type]] |
| 42 | directory = "added" |
| 43 | name = "Added" |
| 44 | showcontent = true |
| 45 | |
| 46 | [[tool.towncrier.type]] |
| 47 | directory = "changed" |
| 48 | name = "Changed" |
| 49 | showcontent = true |
| 50 | |
| 51 | [[tool.towncrier.type]] |
| 52 | directory = "fixed" |
| 53 | name = "Fixed" |
| 54 | showcontent = true |
| 55 | |
| 56 | [tool.pytest.ini_options] |
| 57 | testpaths = ["tests"] |
| 58 | python_files = ["test_*.py"] |
| 59 | addopts = [ |
| 60 | "-q", |
| 61 | "--tb=short", |
| 62 | ] |
| 63 | |
| 64 | [tool.coverage.run] |
| 65 | branch = true |
| 66 | source = ["skills/last30days/scripts", "tests"] |
| 67 | omit = [ |
| 68 | "skills/last30days/scripts/lib/vendor/*", |
| 69 | "dist/*", |
| 70 | ] |
| 71 | |
| 72 | [tool.coverage.report] |
| 73 | skip_empty = true |
| 74 | show_missing = true |
| 75 | # Coverage gate (issue #254). Floor intended to rise over time, not a ceiling. |
| 76 | # Baseline measured 2026-07-03 on main before feat/hosted-api-mode |
| 77 | # (source = scripts + tests): TOTAL 84.06%. Gate pinned at that baseline. |
| 78 | # Do not lower without documenting why in the PR (see AGENTS.md Rules). |
| 79 | fail_under = 84 |
| 80 | omit = [ |
| 81 | "skills/last30days/scripts/lib/vendor/*", |
| 82 | "dist/*", |
| 83 | ] |
| 84 |