Contributing
Set up
git clone https://github.com/carneirofc/qttaskmanager.git
cd qttaskmanager
uv sync
uv run python main.py
Tests
The suite is stdlib unittest, no extra runner required:
uv run python -m unittest discover -s tests
Tests deliberately target the pure-data collectors (*_data.py) and the
Qt-free logic, plus focused model/tab and MCP tests. The clean split between UI
(*_tab.py) and data (*_data.py) is what keeps them fast and headless — follow
it when adding features: put logic that can be tested without a running Qt
application in a data module.
Linting
Ruff runs in CI on every push and pull request:
uvx ruff check .
Keep it clean before opening a PR.
Commit messages
Commits follow Conventional Commits:
<type>[optional scope]: <description>
Common types: feat, fix, docs, refactor, perf, test, chore,
build, ci. Examples from the history:
feat(disk): expand cleanup-location coverage and make the scan testablefix(scan): sort numeric columns in Python so large byte sizes order correctlydocs(mcp): document MCP tools + agent integration
Documentation
These docs live under website/ (Docusaurus). To work on them:
cd website
npm install
npm start
Add a page under website/docs/ and list it in website/sidebars.js. Pushing
website/ changes to master republishes the site via
.github/workflows/docs.yml.
The read-only principle
The scanners are read-only by design. When adding a scanner, report findings
and stop there — leave removal to the user. If you add an operation the MCP server
can request, route it through the human-in-the-loop approval broker
(mcp_approvals.py); never let a tool act on its own.