Skip to main content

A clean minimal task tracking engine with layered architecture.

Project description

Taskforge

Tests Python License Coverage

A clean, minimal task tracking engine built with layered architecture, UUID identity, JSON persistence, and pytest-driven development.


Features

  • Clean layered architecture:
    • domain
    • services
    • storage
    • cli
  • Stable UUID-based task identity
  • JSON persistence
  • Backward compatible data loading
  • CLI with subcommands
  • Pytest test suite
  • GitHub Actions CI
  • 79%+ test coverage

Architecture Overview

CLI
  ↓
Tracker (Application Service)
  ↓
Task (Domain Model)
  ↓
Repository Interface
  ↓
JSON Repository

Desing Principles Used

  • Single Responsibility Principle
  • Dependency Inversion
  • Encapsulation
  • Backward Compatibility
  • Separation of Concerns

Installation

git clone https://github.com/itsar-t/taskforge.git
cd taskforge

Create virtual environment:

python -m venv venv
venv\Scripts\activate   # Windows

Install editable:

pip install -e .

Usage

Add a task:

taskforge add "Learn architecture"

List tasks:

taskforge list

List pending tasks:

taskforge list --pending

List done tasks:

taskforge list --done

Mark done (using short UUID prefix):

taskforge done a1b2c3d4

Mark undone (using short UUID prefix):

taskforge undone a1b2c3d4

Switch done (using short UUID prefix):

taskforge switch a1b2c3d4

Remove:

taskforge rm a1b2c3d4

Remove ALL tasks:

taskforge rm --all

Remove ALL tasks without confirmation:

taskforge rm --all --yes

Remove ALL PENDING tasks:

taskforge rm --pending

Remove ALL PENDING tasks without confirmation:

taskforge rm --pending --yes

Remove ALL DONE tasks (No confirmation on this one):

taskforge rm --done 

Example Output

1. [Undone] (a1b2c3d4) Learn architecture
2. [Done] (f8e9d123) Build portfolio project

Running Tests

Install pytest

pip install -e .[dev]

Run:

pytest

Example output:

7 passed in 0.24s
Coverage: 79%

Project Structure

taskforge/
│
├── src/
│   └── taskforge/
│       ├── domain/
│       │   └── task.py
│       ├── services/
│       │   └── tracker.py
│       ├── storage/
│       │   ├── repository.py
│       │   └── json_repo.py
│       ├── cli.py
│       └── __main__.py
│
├── tests/
│   ├── test_task.py
│   ├── test_tracker.py
│   └── test_json_repo.py
│
├── pyproject.toml
└── README.md

Persistence

Tasks are stored in:

data/tasks.json

The system is backward compatible:

  • Missing id fields are automatically generated.
  • Missing done fields default to False.

Future Improvements

  • SQLite backend
  • Rich CLI formatting (rich library)
  • Sorting & filtering
  • Export / import
  • REST API wrapper
  • Packaging for PyPI

License

MIT License
Copyright (c) 2026 Rasti


Author

Rasti
Built as a learning project in clean Python architecture and testing discipline.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

taskforge_rasti-0.1.0.tar.gz (10.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

taskforge_rasti-0.1.0-py3-none-any.whl (9.2 kB view details)

Uploaded Python 3

File details

Details for the file taskforge_rasti-0.1.0.tar.gz.

File metadata

  • Download URL: taskforge_rasti-0.1.0.tar.gz
  • Upload date:
  • Size: 10.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.0

File hashes

Hashes for taskforge_rasti-0.1.0.tar.gz
Algorithm Hash digest
SHA256 ba579b38e2976befe22935711408038883d0555e617d6d46450ed694cb101015
MD5 a76f6116660fb40b00b6dec430e467f3
BLAKE2b-256 0133ab030e3c86cf6d290793fd7c9019b0becf60754ec432d52b5b9c00d03204

See more details on using hashes here.

File details

Details for the file taskforge_rasti-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for taskforge_rasti-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 7b58f05f4d8e17bea7ab472ea5c5834c1e6f3a4d773e997eb02e0e2afe610adf
MD5 c838638ed1ab706d584545c6121dbb4d
BLAKE2b-256 f1be168ac73324dfcd068f2c7757448e99936a5e6e6036e3ef729d57375583b8

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page