This release is a pre-release and may not be stable for production use.
YYLO Ledger — Git-Native Task Management
YYLO Ledger is a Git-native, shell-friendly task manager for developers and LLM workflows. Canonical current state is one safe Markdown/YAML file per task; history is a separate append-only ledger and SQLite is disposable.
Quick Start
# Install in development mode
pip install -e .
# Create your first task
yylo-ledger create "Implement user authentication" --tags backend security
# Optional title + body composition
yylo-ledger create --title "Auth" --body "Implement OAuth callback handling"
# List recent tasks
yylo-ledger list --limit 5
yylo-ledger list --status backlog,in_progress --sort asc # preserve explicit status order
# Search and filter
yylo-ledger search --status todo --tags backend
yylo-ledger search --status todo --format json # command-level --format is supported
# Aggregate tag usage (optionally by workflow status)
yylo-ledger tags --status todo,in_progress --format table
# Mark task progress with response (ID can be positional or flag)
yylo-ledger mark in_progress ABC123 --response "Started OAuth integration"
# Complete with commit hash
yylo-ledger mark done --id ABC123 --response "Auth completed" --commit abc123def
# Declare dependencies between tasks
yylo-ledger create "Deploy to staging" --blocked-by ABC123
# Find tasks ready to work on (all blockers resolved)
yylo-ledger ready
yylo-ledger ready --sort asc # oldest ready tasks first by last_modified
# ready now includes list-like summary counters (Displayed/Total + status breakdown)
# Get safe execution order respecting dependencies
yylo-ledger order --scores
Immutable cold archive packs
Boards can explicitly move up to 1,000 old terminal tasks at a time from hot Markdown/ledger files into bounded, immutable NDJSON packs. Default list, search, ready, and order remain hot-only; exact get ID and history ID transparently verify and read either tier. Existing archive ID still only changes status.
Archival is never automatic. With owner authorization, a clean Git worktree/index, and durable new report paths outside the repository:
yylo-ledger archive-pack plan --status done,archive --older-than 90d --max-tasks 1000 \
--target-bytes 26214400 --hard-max-bytes 47185920 \
--report /external/receipts/archive-plan.json
# Independently review source HEAD, config/policy hashes, selected IDs/revisions, and batches.
yylo-ledger archive-pack create --plan /external/receipts/archive-plan.json \
--report /external/receipts/archive-create.json
yylo-ledger archive-pack doctor
yylo-ledger doctor
yylo-ledger archive-search --tag backend --before 2026-01-01 --limit 20 --projection metadata
Plans are revision-bound and fail closed when Git/config/reservations/archive inventory or selected task history changes. Sealed packs/manifests must never be edited or appended. Archived IDs stay terminal and globally reserved; create a new hot task related to the archived ID for follow-up work. Production archival, push/deploy, and post-deploy E2E require separate authorization. Receipts contain hashes/IDs/instructions, not duplicated task bodies or responses.
Scale evidence is generated only through the installed public commands:
python3 scripts/benchmark_cold_archive.py --tasks 10000 --report evidence/cold-archive-10k.json
python3 scripts/benchmark_cold_archive.py --tasks 100000 --report evidence/cold-archive-100k.json
python3 scripts/verify_wheel_install.py
Opt-in cross-project registry
Cross-project access is disabled by default. Enable only the aliases that the current source project may reach in .juno_task/config.json:
{
"kanbanRegistry": {
"enabled": true,
"allowedProjects": ["juno-code", "convert-if-chat"]
}
}
Register initialized local projects in the single user registry (~/.yylo-ledger/projects.json) and route any read or write explicitly:
yylo-ledger project add juno-code --path /absolute/path/to/juno-code
yylo-ledger project list
yylo-ledger --project juno-code create --body "Issue discovered elsewhere" --tags bug
yylo-ledger --project juno-code list --status todo
yylo-ledger project remove juno-code
Environment policy has precedence over project config:
export YYLO_LEDGER_REGISTRY_ENABLED=true
export YYLO_LEDGER_REGISTRY_ALLOWED_PROJECTS=juno-code,convert-if-chat
Enabling without an allowlist grants access to nothing. Routing executes the destination project's .juno_task/scripts/kanban.sh, so its controller, .venv_juno, compatibility checks, stdin rules, and write guards remain authoritative. Missing, stale, malformed, disallowed, or recursive routes fail without falling back to the source board. This backing destination-wrapper boundary matters because selecting a foreign storage path with the caller runtime could bypass project-specific safety. Two-project subprocess tests verify the implementation preserves exact stdin and reaches only the selected target.
Installation
PyPI (Recommended)
pip install yylo-ledger
The canonical distribution, command, and import are yylo-ledger, yylo-ledger,
and yylo_ledger. During the bounded 0.1 RC migration window, the six former
console scripts (juno-ledger, ledger-juno, jl, juno-kanban,
juno-feedback, and kanban-juno) emit a deprecation action and delegate to
the same runtime; the deprecated kanban import is a single-runtime bridge.
Development Mode
git clone https://github.com/yylo-dev/yylo-ledger.git
cd yylo-ledger
pip install -e .
Requirements
- Python 3.8+
- Runtime dependency
ruamel.yaml>=0.18.6,<0.19is installed automatically for safe round-trip YAML that preserves comments and ordering
Shell Completion (Tab Autocomplete)
yylo-ledger ships a native completion script generator for every command alias:
# One-time test in current shell
source <(yylo-ledger completion bash)
# Persist for bash
echo 'source <(yylo-ledger completion bash)' >> ~/.bashrc
# Persist for zsh
echo 'source <(yylo-ledger completion zsh)' >> ~/.zshrc
# Fish
yylo-ledger completion fish > ~/.config/fish/completions/yylo-ledger.fish
After reloading your shell, yylo-ledger c<TAB><TAB> suggests commands like create/completion,
and command-specific flags/choice values are also suggested (e.g. list --sort <TAB>).
Core Features
🗂️ Git-Native Storage
- Stable
.juno_task/tasks/<prefix>/<ID>.mdfiles with safe round-trip YAML and hidden Markdown boundaries - Per-task locks/CAS receipts and segmented, hash-chained ledgers under
.juno_task/ledger/ - Different-task worktree changes merge independently; status updates never rename files
🔍 Disposable Cached Search
- Rebuildable
.juno_task/cache/kanban.sqlite3index; canonical Markdown remains authoritative - Core/tag/body filters plus typed custom fields, date ranges, and
--overdue - Bounded/redacted broad output with explicit
metadata,summary, and auditedfullprojections
🏷️ Flexible Organization
- Configurable status workflows (backlog → todo → done)
- Feature tags for categorization
tagscommand for per-tag workload counts (supports status filtering + machine-readable formats)- Commit hash linking for git integration
🔗 Task Dependencies
- Declare blockers with
--blocked-byor body markup ([blocked_by]ID[/blocked_by]) - Declare non-blocking related references with
[task_id]...[/task_id]or## ID1 ID2 ## - Cycle detection prevents circular dependencies
readycommand finds unblocked tasks for parallel executionordercommand returns topological sort for safe scheduling- Priority scoring ranks tasks by how much downstream work they unblock
- Every generic mutation to
doneis refused before any task/ledger write when a declared blocker is missing or non-terminal; reopening a resolved blocker is likewise refused when it would block a completed dependent - Umbrella child reconciliation is available only through
umbrella-finalize. Its sealedumbrella-admissionreceipt must bind the umbrella revision and every child revision and statetask_id,owner_id(the umbrella ID), andadmitted: trueper child. Admitted IDs must exactly equalblocked_by;related_tasksare never closed. A sealed evidence receipt bound to that umbrella ID and commit is required. Activation updates all task/ledger pairs in one recoverable transaction, and replay emits no additional events
yylo-ledger umbrella-finalize UMB123 \
--admission-receipt /external/admission.json \
--evidence-receipt /external/evidence.json --commit abc123 \
--receipt-file /external/finalization.json
🤖 LLM & Shell Optimized
- jq-compatible output for automation
- Educational error messages with examples
- Context-aware help text
- Flexible task ID input (
TASK_IDpositional or--id/--IDon key commands) - Agent-friendly create/deps parsing (
--title, flag-onlydeps --id ... --blocked-by ..., trailing quoted body recovery) - Clean, parseable formats
Operational conversion, rollback, reconciliation, cache, safety, test, and benchmark contracts are documented in docs/git-native-storage.md.
Usage Guide
Creating Tasks
# Basic task creation
yylo-ledger create "Fix authentication bug"
# With tags and status
yylo-ledger create "Add user profile page" --status todo --tags frontend ui
# Using --body flag (both formats work)
yylo-ledger create --body "Implement OAuth" --tags security backend
# Optional title merged into body as: title:{title}\n\n{body}
yylo-ledger create --title "OAuth" --body "Implement provider callback validation"
# Read shell-sensitive markdown exactly from a UTF-8 file or stdin
yylo-ledger create --body-file task.md --status todo --tags feature backend
cat task.md | yylo-ledger create --body-file -
# Why file/stdin matters: shells expand unquoted backticks and $() before
# YYLO Ledger can inspect argv. For quoted literals that survive parsing,
# create rejects inline backticks, $(), heredoc-like <<, and multiline bodies
# and asks you to use --body-file PATH or --body-file - instead.
# Trailing quoted body after list flags is supported
yylo-ledger create --status todo --related-tasks ABC123 "Add integration tests for callback flow"
Searching & Listing
# List recent tasks (sorted by last modified)
yylo-ledger list --limit 10
# Search by status
yylo-ledger search --status in_progress
# Search by tags
yylo-ledger search --tags backend --tags security
# Aggregate tag counts across all tasks
yylo-ledger tags
# Aggregate tag counts only for active work
yylo-ledger tags --status todo,in_progress --format json
yylo-ledger tags --status todo in_progress --format table
# Search open tasks (no agent response)
yylo-ledger search --open
# Search recent tasks
yylo-ledger search --recent --limit 5
# Control search sort order by last_modified
yylo-ledger search --status todo --sort asc --limit 5
# Multiple conditions (AND logic)
yylo-ledger search --status todo --tags backend --limit 3
--sort asc|desc uses one shared contract across list, search, and ready:
asc= oldestlast_modifiedfirstdesc= newestlast_modifiedfirst- equal timestamps use task
idas deterministic tie-breaker - default
listbehavior preserves open-before-closed status priority (backlog/todo/in_progressbeforedone/archive) - when
listorreadyreceives--status ..., task groups follow the provided status order, then--sortapplies within each status group
Updating Tasks
# Update status (positional or --id both supported)
yylo-ledger update ABC123 --status in_progress
yylo-ledger update --id ABC123 --status in_progress
# Add agent response
yylo-ledger update --id ABC123 --response "Working on OAuth flow"
# Replace body/response from files without shell quoting risks
yylo-ledger update ABC123 --body-file task.md
yylo-ledger update ABC123 --response-file response.md
# Set commit hash
yylo-ledger update --id ABC123 --commit abc123def
# Update tags
yylo-ledger update ABC123 --tags urgent backend security
Mark Command (Streamlined Workflow)
# Mark with required response
yylo-ledger mark todo ABC123 --response "Ready to start"
# Mark as done with commit (recommended)
yylo-ledger mark done --id ABC123 --response "Feature completed" --commit abc123
# Read response from a file or stdin, preserving code fences/backticks/$VARIABLES
yylo-ledger mark done --id ABC123 --response-file response.md --commit abc123
cat response.md | yylo-ledger mark done --id ABC123 --response-file -
# Mark without commit (shows helpful reminder)
yylo-ledger mark done ABC123 --response "Bug fixed"
# Output: Consider adding commit hash with --commit flag
Dependency Management
# Create a task that's blocked by another
yylo-ledger create "Deploy to prod" --blocked-by ABC123
# Or declare blockers via body markup (auto-parsed)
yylo-ledger create "Run integration tests [blocked_by]ABC123, DEF456[/blocked_by]"
# Add/remove dependencies after creation
yylo-ledger deps add --id GHI789 --blocked-by ABC123 DEF456
yylo-ledger deps remove --id GHI789 --blocked-by ABC123
# Shorthand add (action inferred when --blocked-by is present)
yylo-ledger deps --id GHI789 --blocked-by ABC123 DEF456
# Query dependency info for a task
yylo-ledger deps ABC123
yylo-ledger deps --id ABC123
# Returns: blockers (met/unmet), dependents, priority score
# Find tasks ready to work on (all blockers resolved)
yylo-ledger ready
yylo-ledger ready --sort asc --limit 5 # oldest ready tasks first
yylo-ledger ready --status backlog,in_progress --sort desc # backlog group first, then in_progress
yylo-ledger ready --tag backend --sort desc # newest backend-ready tasks first
# Get safe execution order (topological sort)
yylo-ledger order
yylo-ledger order --scores # includes priority scores
Body Markup for Dependencies
Dependencies and related tasks can be declared inline in the task body:
# Blockers (all synonyms are equivalent)
[blocked_by]ABC123[/blocked_by]
[block_by]ABC123[/block_by]
[block]ABC123[/block]
[parent_task]ABC123[/parent_task]
# Multiple blockers (comma or space separated)
[blocked_by]ABC123, DEF456[/blocked_by]
# Related tasks (non-blocking references)
[task_id]ABC123[/task_id]
## ABC123
##ABC123
## ABC123 DEF456 ##
# If a related ID is valid format but not found yet, it is kept as a
# forward reference and a warning is emitted.
Other Operations
# Get specific task(s) (includes dependency info)
yylo-ledger get ABC123
yylo-ledger get --id ABC123
yylo-ledger get ABC123 --compact # related task details are ID-only
yylo-ledger get ABC123 DEF456 --format json # ordered multi-ID lookup
yylo-ledger show ABC123 DEF456 --format json # alias
# Archive task (preserves data, sets status to archive)
yylo-ledger archive ABC123
yylo-ledger archive --id ABC123
# Preview one sealed merge plan, review it, then apply that exact plan.
yylo-ledger merge /path/to/source/.juno_task --into ./.juno_task \
--dry-run --plan-file /tmp/kanban-merge-plan.json
yylo-ledger merge /path/to/source/.juno_task --into ./.juno_task \
--apply-plan /tmp/kanban-merge-plan.json \
--receipt-file /tmp/kanban-merge-receipt.json
# Show help
yylo-ledger --help
yylo-ledger COMMAND --help
Output Formats
NDJSON (Default)
yylo-ledger search --status todo
{"id": "ABC123", "status": "todo", "body": "Fix bug", "tags": ["backend"]}
{"id": "DEF456", "status": "todo", "body": "Add feature", "tags": ["frontend"]}
JSON (Structured)
yylo-ledger search --status todo --format json
# also supported: yylo-ledger --format json search --status todo
[
{"id": "ABC123", "status": "todo", "body": "Fix bug", "tags": ["backend"]},
{"id": "DEF456", "status": "todo", "body": "Add feature", "tags": ["frontend"]}
]
XML
yylo-ledger search --status todo --format xml
Table (Human-readable)
yylo-ledger search --status todo --format table
# tags command renders markdown table output in table mode
yylo-ledger tags --status todo,in_progress --format table
Shell Integration
jq Compatibility
Perfect integration with jq for data processing:
# Extract task IDs
yylo-ledger list | jq -r '.id'
# Filter by specific criteria
yylo-ledger list | jq 'select(.status == "todo")'
# Count tasks by status
yylo-ledger list | jq -r '.status' | sort | uniq -c
# Get tasks with specific tags
yylo-ledger list | jq 'select(.feature_tags[]? == "backend")'
# Clean data output (suppress summary)
yylo-ledger list 2>/dev/null | jq '.'
Automation Examples
# Daily standup - get your current work
yylo-ledger search --status in_progress | jq -r '.body'
# Review completed work with commits
yylo-ledger search --status done | jq -r '"✅ \(.body) (\(.commit_hash // "no commit"))"'
# Find urgent tasks
yylo-ledger search --tags urgent | jq -r '"⚠️ \(.body)"'
# Git hook integration
git log -1 --format="%H" | xargs -I {} yylo-ledger search --commit {}
Configuration
Configuration file: .juno_task/tasks/config.json
Status Workflow
{
"status_values": ["backlog", "todo", "in_progress", "review", "done", "archive"],
"default_status": "backlog",
"enforce_transitions": true,
"allowed_transitions": {
"backlog": ["todo", "archive"],
"todo": ["in_progress", "archive"],
"in_progress": ["review", "done", "archive"],
"review": ["todo", "done", "archive"],
"done": ["archive"],
"archive": []
}
}
Tag Validation
{
"tag_pattern": "^[a-zA-Z0-9_-]+$",
"max_tags_per_task": 10,
"allowed_tags": ["frontend", "backend", "security", "urgent", "bug", "feature"]
}
Search Settings
{
"storage": {"base_path": ".juno_task/tasks", "file_pattern": "*/*.md"},
"custom_fields": {"due_date": {"type": "date"}},
"search": {"default_limit": 5}
}
Task Schema
Each task is stored in safe YAML front matter plus marker-delimited Markdown body/response. CLI renderers expose these fields:
| Field | Type | Description |
|---|---|---|
id |
string | 6-character alphanumeric ID (e.g., "A1b2C3") |
status |
string | Current status (configurable workflow) |
body |
string | Task description (supports multiline, code, HTML) |
commit_hash |
string|null | Git commit hash when completed |
agent_response |
string | AI/human response or notes |
created_date |
string | Creation timestamp (YYYY-MM-DD HH:MM:SS) |
last_modified |
string | Last modification timestamp |
feature_tags |
string[] | Categorization tags |
blocked_by |
string[]|null | Task IDs that must complete before this task |
related_tasks |
string[]|null | Non-blocking task references |
Example Task
{
"id": "A1b2C3",
"status": "done",
"body": "Implement OAuth2 authentication flow\n\n```python\n@app.route('/auth')\ndef authenticate():\n return oauth.redirect()\n```",
"commit_hash": "abc123def456",
"agent_response": "Implemented OAuth2 with Google provider. Added tests and documentation.",
"created_date": "2025-10-22 14:30:00",
"last_modified": "2025-10-22 16:45:30",
"feature_tags": ["backend", "security", "oauth"],
"blocked_by": ["X4y5Z6"],
"related_tasks": ["D7e8F9"]
}
Error Handling
Educational Error Messages
# Invalid tag format
yylo-ledger create "Task" --tags "frontend v1"
Validation error: Invalid tag format: 'frontend v1'
Tags can only contain letters, numbers, underscores (_), and hyphens (-).
Found: spaces (not allowed)
Correct format examples:
--tags backend urgent fix-auth
--tags frontend_v1 initial feature
Did you mean: 'frontend_v1'?
Status Transition Validation
# Invalid status transition
yylo-ledger update ABC123 --status done # (current: backlog)
Cannot transition from 'backlog' to 'done'.
Allowed transitions from 'backlog': todo, in_progress, archive
Use: yylo-ledger update ABC123 --status todo
Performance
Benchmarks
| Operation | Small (100 tasks) | Large (10,000 tasks) | Notes |
|---|---|---|---|
| Create task | ~5ms | ~5ms | Constant time |
| Existing-ID get | p95 <75ms | Warm canonical path lookup | |
| Cached list/search | p95 <200/250ms | 140k synthetic fixture | |
| List recent | ~25ms | ~100ms | Sorted by timestamp |
Large File Handling
- Streaming: Memory-efficient reading of large files
- SQLite cache: indexed broad queries without becoming source of truth
- Per-task files: bounded Git blobs and isolated merge boundaries
- Indexing: Fast ID lookups even with thousands of tasks
Examples
Development Workflow
# Morning planning
yylo-ledger create "Review pull requests" --tags review daily
yylo-ledger create "Fix authentication bug" --tags backend urgent --status todo
# Start working
yylo-ledger mark in_progress -ID ABC123 --response "Investigating auth issue"
# During development
yylo-ledger update ABC123 --response "Found root cause in JWT validation"
# Complete work
yylo-ledger mark done -ID ABC123 --response "Fixed JWT expiry handling" --commit abc123
# End of day review
yylo-ledger search --status done | jq -r '"✅ \(.body)"'
Dependency-Aware Workflow
# Create a pipeline with dependencies
yylo-ledger create "Write unit tests" --tags backend testing --status todo
# Returns ID: A1b2C3
yylo-ledger create "Implement feature" --blocked-by A1b2C3 --tags backend
# Returns ID: D4e5F6
yylo-ledger create "Deploy to staging" --blocked-by D4e5F6 --tags devops
# Returns ID: G7h8I9
# See what's ready to work on
yylo-ledger ready --sort desc
# Only A1b2C3 shows — the others are blocked (newest ready tasks first)
# Get execution order with priority scores
yylo-ledger order --scores
# A1b2C3 (score: 2) → D4e5F6 (score: 1) → G7h8I9 (score: 0)
# Complete first task, check what's unblocked
yylo-ledger mark done -ID A1b2C3 --response "Tests written" --commit abc123
yylo-ledger ready --sort asc
# Now D4e5F6 is ready (and asc sort keeps oldest ready tasks first)
Team Coordination
# See what teammates are working on
yylo-ledger search --status in_progress | jq -r '"👤 \(.body) - \(.agent_response)"'
# Find tasks needing review
yylo-ledger search --status review --tags urgent
# Weekly retrospective
yylo-ledger search --status done | jq 'group_by(.commit_hash) | length'
Git Integration
# Link completed tasks to commits
git log --oneline | head -5 | while read commit message; do
echo "🔗 $commit: $(yylo-ledger search --commit $commit | jq -r '.body // "No task linked"')"
done
# Pre-commit hook: ensure task exists
if ! yylo-ledger search --status in_progress | grep -q "$(git log -1 --format='%s')"; then
echo "⚠️ No in-progress task found for this commit"
fi
Troubleshooting
Common Issues
Command not found after installation:
# Ensure pip installed to correct environment
which pip
pip show yylo-ledger
# Try reinstalling
pip install -e . --force-reinstall
Slow search performance:
# Rebuild the disposable query cache at any time
yylo-ledger cache rebuild
jq parsing errors:
# Ensure you're using recent version (v1.3.0+)
yylo-ledger --version
# Use stderr redirection if needed
yylo-ledger list 2>/dev/null | jq '.'
Configuration issues:
# Check config file location
ls -la .juno_task/tasks/config.json
# Validate JSON syntax
cat .juno_task/tasks/config.json | jq '.'
Getting Help
- CLI Help:
yylo-ledger --helporyylo-ledger COMMAND --help - Issues: GitHub Issues
- Storage guide: See
docs/git-native-storage.md
Contributing
To contribute, open an issue or pull request in yylo-dev/yylo-ledger, add tests
for behavioral changes, and run python3 -m pytest -q before submission.
License
MIT License - see LICENSE file for details.
Changelog
v1.32.0 (2026-03-22)
- Added
tagscommand for tag-level workload aggregation (yylo-ledger tags) with--statusfiltering and output formats (json,table,xml,ndjson) - Added explicit status-order contract for
listandreadywhen--statusis provided (e.g.--status backlog,in_progresspreserves that group order) - Added
ready --status ...filter support to match list/search filtering workflows - Added list/search parity summaries to
ready(Displayed: X of Y+ status breakdown; JSON summary object for--format json) - Added shared deterministic sort helpers so
list,search, andreadyall follow one--sort asc|desccontract with stable ID tie-breaks
v1.31.0 (2026-03-21)
- Added
search --sort asc|descto controllast_modifiedordering in both ripgrep and Python fallback paths - Added command-level
search --format ...support (in addition to global--format) and list-like result summaries for search output - Added multi-ID retrieval for
get/show(yylo-ledger get ID1 ID2 ...) with ordered JSON output - Added native shell completion generator (
yylo-ledger completion [bash|zsh|fish]) with parser-driven command/option completions
v1.30.0 (2026-03-20)
- Added
##related-task markup parsing (##ID,## ID,## ID1 ID2 ##) alongside[task_id]...[/task_id] - Preserved forward related-task references for valid-but-not-yet-existing IDs (with warning instead of silent drop)
- Hardened local development wrapper resolution so
kanban.shprefers working-treesrc/over stale site-packages - Hardened
scripts/bump_version.pyto usemax(local, PyPI)as baseline and avoid accidental version rollback bumps
v1.29.0 (2026-03-04)
- Added flexible task ID handling across key commands (
get,update,archive,mark,deps)- Supports positional
TASK_IDand flag form (--id/--ID)
- Supports positional
- Added
depsshorthand mode:deps --id TASK_ID --blocked-by ID...defaults toadddeps --id TASK_IDdefaults to dependency info (show)
- Improved create parser resilience for agent workflows:
- trailing quoted body recovery after list flags like
--related-tasks/--blocked-by - maintained strict validation for true no-body cases
- trailing quoted body recovery after list flags like
v1.28.0 (2026-03-03)
- Added
create --titlesupport (title:{title}\n\n{body}merge format) - Added support for title-only task creation
v1.27.0 (2026-03-03)
- Added
--id/--IDtask selection support forget/show - Expanded integration test coverage for ID parsing and create flows
v1.26.0 (2026-02-19)
- Added task dependency system with
blocked_byfield and body markup parsing - Added
depscommand for querying/managing task dependencies - Added
readycommand for finding unblocked tasks (parallel execution support) - Added
ordercommand for topological sort of open tasks - Added dependency graph engine with cycle detection, priority scoring, and critical path analysis
- Added
mergecommand for combining task databases across directories - Added
related_tasksfield for non-blocking task references - Enhanced
getcommand with dependency info and related task details - 350+ tests (pytest), 9 Python modules
v1.25.0 (2026-02-18)
- Migrated into the Juno monorepo
- Added comprehensive pytest test suite (210 tests, 46% coverage)
- Cleaned git bloat (removed dist/, .venv_juno/, stale files)
- Updated repository references for the monorepo migration
- Fixed Python version badge and requirements to 3.8+
v1.3.0 (2025-10-23)
- 🔧 Fixed jq compatibility by redirecting summary to stderr
- 📝 Compacted documentation for better token efficiency
- ✅ All automation workflows now function correctly
v1.2.0 (2025-10-22)
- 📦 Added pip installation with dual entry points
- 🔧 Fixed empty search results messaging
- 📚 Consistent help across command names
v1.1.0 (2025-10-22)
- 🗃️ Replaced delete with archive (data preservation)
- ⚡ Added mark command for streamlined workflow
- 📅 Simplified datetime format
v1.0.1 (2025-10-22)
- ➕ Added missing CRUD operations
- 📖 Improved help text and documentation
- 🏷️ Enhanced tag validation with educational errors
v1.0.0 (2025-10-22)
- 🎉 Initial release with full kanban functionality
- 🔍 Indexed search through a disposable SQLite cache
- 🏷️ Flexible tagging and status workflows
Built with ❤️ for developers who live in the terminal
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 yylo_ledger-0.1.0rc1.tar.gz.
File metadata
- Download URL: yylo_ledger-0.1.0rc1.tar.gz
- Upload date:
- Size: 151.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.13.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f81a5fa2aa5de66130fc7684a3226363fd497f0d5dd0d93fa8fcd0611d5ad859
|
|
| MD5 |
8eb5902f4edbc98654bcefd3eadaef7a
|
|
| BLAKE2b-256 |
fc8f892df85db3f071eef8fa07d4a1d94072c941111b4e62a9d81285c2efc079
|
File details
Details for the file yylo_ledger-0.1.0rc1-py3-none-any.whl.
File metadata
- Download URL: yylo_ledger-0.1.0rc1-py3-none-any.whl
- Upload date:
- Size: 146.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.13.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
81d227ba32f16aa32dd7ba16aeb65f0c8b774d1d6b708136f561766305724be7
|
|
| MD5 |
776edfa58fcbe54e0d8d069ced9c5a74
|
|
| BLAKE2b-256 |
ff7846c462ecc585c9340ec7ad9c725197ae42ad3ba41f4842fd1bb654a89467
|