@@ -36,6 +36,7 @@ Write your deploy logic once in `Taskfile.yml`, run it from your terminal, GitLa
3636- [ Multi-Environment Deploy] ( #multi-environment-deploy )
3737- [ Multi-Platform Deploy] ( #multi-platform-deploy )
3838- [ Environment Groups & Fleet Management] ( #environment-groups--fleet-management )
39+ - [ Workspace (multi-project operations)] ( #workspace-multi-project-operations )
3940- [ Parallel Tasks & Error Handling] ( #parallel-tasks--error-handling )
4041- [ Registry Authentication] ( #registry-authentication )
4142- [ Multi-Registry Publishing] ( #multi-registry-publishing )
@@ -47,6 +48,7 @@ Write your deploy logic once in `Taskfile.yml`, run it from your terminal, GitLa
4748- [ Diagnostics & Validation] ( #diagnostics--validation )
4849- [ Examples] ( #examples )
4950- [ Development] ( #development )
51+ - [ Test Performance] ( #test-performance )
5052- [ Troubleshooting & Debugging] ( #troubleshooting--debugging )
5153
5254---
@@ -866,6 +868,81 @@ taskfile fleet repair kiosk-lobby --auto-fix
866868
867869---
868870
871+ # # Workspace (multi-project operations)
872+
873+ ` taskfile workspace` discovers all projects under a given path (with a depth
874+ limit) and runs group operations on them : list, run, doctor, validate, deploy,
875+ fix, analyze.
876+
877+ Use it when you keep many small repositories in one folder (e.g.
878+ ` ~/github/semcod/` , `~/github/oqlos/`) and want one command to list them,
879+ lint them all, find missing tasks, or deploy the Docker-enabled ones.
880+
881+ # ## Quick examples
882+
883+ ` ` ` bash
884+ # List every project under a folder (direct + 1 level nested)
885+ taskfile workspace list --root ~/github/semcod --depth 2
886+
887+ # Which projects have a ` test` task?
888+ taskfile workspace list --root ~/github/semcod --has-task test
889+
890+ # Frequency table — tasks shared across projects
891+ taskfile workspace tasks --root ~/github/semcod
892+
893+ # Run lint in every project that has it (dry-run first)
894+ taskfile workspace run lint --root ~/github/semcod --dry-run
895+ taskfile workspace run lint --root ~/github/semcod
896+
897+ # Run doctor across all projects
898+ taskfile workspace doctor --root ~/github/semcod
899+
900+ # Validate manifests (Taskfile.yml + app.doql.css)
901+ taskfile workspace validate --root ~/github/semcod
902+
903+ # Generate CSV analysis report
904+ taskfile workspace analyze --root ~/github/semcod -o semcod_analysis.csv
905+
906+ # Fix manifest errors (empty workflows, orphan workflows, …)
907+ taskfile workspace fix --root ~/github/semcod --dry-run
908+ taskfile workspace fix --root ~/github/semcod
909+
910+ # Group deploy (docker compose up -d in each Docker project)
911+ taskfile workspace deploy --root ~/github/semcod --dry-run
912+ ```
913+
914+ ### Also: ` doql workspace ` for ` .doql.css ` manifests
915+
916+ The sister project [ doql] ( https://github.com/softreck/doql ) exposes the same
917+ workspace commands focused on ` app.doql.css ` manifests (workflows, entities,
918+ databases, interfaces):
919+
920+ ``` bash
921+ doql workspace list --root ~ /github/oqlos
922+ doql workspace analyze --root ~ /github/oqlos -o oqlos_report.csv
923+ doql workspace validate --root ~ /github/oqlos
924+ doql workspace fix --root ~ /github/oqlos # delegates to taskfile.workspace
925+ doql workspace run build --root ~ /github/oqlos # runs `doql build` per project
926+ ```
927+
928+ ` doql workspace ` reuses ` taskfile.workspace ` when available (for ` fix ` ), and
929+ falls back to a minimal pure-Python implementation for ` list ` /` analyze ` /` validate ` /` run ` .
930+
931+ ### Full documentation
932+
933+ See [ docs/WORKSPACE.md] ( docs/WORKSPACE.md ) for:
934+
935+ - All commands and options (taskfile side)
936+ - Python API (` taskfile.workspace ` module)
937+ - Project discovery rules (markers, exclusions, depth)
938+ - How ` fix ` heals manifests and how ` analyze ` outputs CSV
939+ - Filtering recipes (regex name, has-task, has-workflow, docker-only, taskfile-only)
940+
941+ For the ` doql ` side of the workspace story, see
942+ [ doql README → doql workspace] ( https://github.com/softreck/doql#doql-workspace--operacje-na-wielu-projektach ) .
943+
944+ ---
945+
869946## Parallel Tasks & Error Handling
870947
871948### Parallel Dependencies
@@ -1588,6 +1665,34 @@ taskfile --dry-run run <task>
15881665
15891666---
15901667
1668+ ## Test Performance
1669+
1670+ The test suite includes both unit tests and integration tests. To speed up development, slow integration tests are marked with ` @pytest.mark.slow ` and can be skipped.
1671+
1672+ ``` bash
1673+ # Run all tests (includes slow e2e SSH tests ~24s)
1674+ pytest
1675+
1676+ # Run only fast tests (skip slow integration tests ~15s)
1677+ pytest -m " not slow"
1678+
1679+ # Run only slow/integration tests
1680+ pytest -m slow
1681+
1682+ # Run with coverage
1683+ pytest --cov=taskfile -m " not slow"
1684+ ```
1685+
1686+ ### Test Performance Summary
1687+
1688+ - ** Full suite** : ~ 24s (876 tests including e2e SSH tests)
1689+ - ** Fast tests only** : ~ 15s (skips slow SSH integration tests)
1690+ - ** Slow tests** : e2e SSH connectivity tests (5+ seconds each)
1691+
1692+ The slow tests are primarily SSH connectivity tests that attempt real SSH connections to validate error handling. These can be skipped during normal development.
1693+
1694+ ---
1695+
15911696## Troubleshooting & Debugging
15921697
15931698### Step-by-Step Execution Tracing
0 commit comments