Generic tasks and kanban boards for the Stapel framework
Project description
stapel-tasks
Generic tasks and kanban boards for the Stapel framework — composable Django apps that deploy as a monolith or as microservices without changing module code.
A generic task domain — Board / Column / Task / ChecklistItem /
TaskComment, a REST surface, a full outbox event surface, and custom fields
via stapel-attributes. It is useful to any project by itself (a team runs a
board by hand), and it is the substrate an orchestrator projects onto: an
external state machine drives cards through opaque origin_* handles and the
MOVE_POLICY seam — the module knows nothing about the machine.
Install
pip install stapel-tasks # core
pip install "stapel-tasks[attributes]" # + typed custom-field validation
INSTALLED_APPS = [
# ...
"stapel_tasks",
]
# urls.py
path("tasks/", include("stapel_tasks.urls"))
Requires a stapel-core whose background
taskstoreapp uses the labelstapel_taskstore— this module owns the Django labelstapel_tasks. See MODULE.md.
Concepts
- Board — an ordered set of columns and the cards on them. Owns the
custom-field schema (
feature_defs) and optional workflowsettings. - Column — a status. Its
keyis the card's status; itscategory(backlog/active/review/waiting/done) is the fixed machine semantic. - Task (card) — status = its column; order within the column is a
fractional
position(drag-and-drop moves write one row). Custom-field values live infeatures; a projecting system writesorigin_meta. - Move — drag-and-drop is a
movevalidated byMOVE_POLICY:allow/deny(reason_key)/defer(the managed-card path).
from stapel_tasks import services
board = services.create_board(name="Team", preset="simple")
card = services.create_task(board=board, title="Ship it")
services.move_task(card, to_column=board.columns.get(key="done")) # emits task.completed
comm surface
| Kind | Name | Purpose |
|---|---|---|
| Emit | task.created / task.updated / task.moved / task.assigned / task.completed / task.comment_added / task.checklist_item_changed / task.archived |
Card lifecycle facts (via the outbox) |
| Consume | user.deleted |
GDPR anonymization |
| Function | tasks.get / tasks.list_board / tasks.create / tasks.move / tasks.comment |
Machine interface / MCP-tool candidates |
Settings (STAPEL_TASKS)
| Key | Default | What it customizes |
|---|---|---|
SCOPE_PROVIDER |
single global scope, allow-all | Tenancy resolution/filtering + permissions |
MOVE_POLICY |
allow any move (honours transitions) |
Drag-and-drop authorization |
BOARD_PRESETS |
{} (merged over built-in simple) |
Board-shape presets |
STORE_UNKNOWN_FEATURES |
True |
Keep raw custom fields when attributes is absent |
DEFAULT_PAGE_SIZE |
100 |
Card-list page size |
See MODULE.md for the full seam map (providers, registries, serializer seams, comm tables, anti-patterns, override-vs-upstream).
License
MIT
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file stapel_tasks-0.1.5.tar.gz.
File metadata
- Download URL: stapel_tasks-0.1.5.tar.gz
- Upload date:
- Size: 45.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0cd0e7f0fb01df6eed9cd436f3b58193e77454453eb1c4aadf4ac12dcd196526
|
|
| MD5 |
176e2126cef5112f89ef867e7e1d3473
|
|
| BLAKE2b-256 |
49c572ed52d96937245067570d0fbdb8869fe840a52c0f1117db3d4f11b56f51
|
Provenance
The following attestation bundles were made for stapel_tasks-0.1.5.tar.gz:
Publisher:
publish.yml on usestapel/stapel-tasks
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
stapel_tasks-0.1.5.tar.gz -
Subject digest:
0cd0e7f0fb01df6eed9cd436f3b58193e77454453eb1c4aadf4ac12dcd196526 - Sigstore transparency entry: 2188069313
- Sigstore integration time:
-
Permalink:
usestapel/stapel-tasks@a4849bd78d0c3fef480543796dd4b72af78d7a29 -
Branch / Tag:
refs/tags/v0.1.5 - Owner: https://github.com/usestapel
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@a4849bd78d0c3fef480543796dd4b72af78d7a29 -
Trigger Event:
push
-
Statement type:
File details
Details for the file stapel_tasks-0.1.5-py3-none-any.whl.
File metadata
- Download URL: stapel_tasks-0.1.5-py3-none-any.whl
- Upload date:
- Size: 49.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e3662fb1f25236d2f7c9e029ff0583e5901392ede270fdad7c70f5d72780322e
|
|
| MD5 |
5f8aba5d70dc59181ee17a3400ffa792
|
|
| BLAKE2b-256 |
1d0f13a296779e6800e593e973b0bd0c8c9ff508d45bcfca4f2926228581e60b
|
Provenance
The following attestation bundles were made for stapel_tasks-0.1.5-py3-none-any.whl:
Publisher:
publish.yml on usestapel/stapel-tasks
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
stapel_tasks-0.1.5-py3-none-any.whl -
Subject digest:
e3662fb1f25236d2f7c9e029ff0583e5901392ede270fdad7c70f5d72780322e - Sigstore transparency entry: 2188069320
- Sigstore integration time:
-
Permalink:
usestapel/stapel-tasks@a4849bd78d0c3fef480543796dd4b72af78d7a29 -
Branch / Tag:
refs/tags/v0.1.5 - Owner: https://github.com/usestapel
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@a4849bd78d0c3fef480543796dd4b72af78d7a29 -
Trigger Event:
push
-
Statement type: