Skip to main content

Juno Ledger — Git-Native Task Management

Juno Ledger is the Git-native, shell-friendly task and workflow ledger for developers and LLM agents. It works alongside Juno Code, the AI coding-agent orchestration CLI, and Juno Benchmark, the longitudinal evaluation and immutable-evidence system for agent runs.

Canonical current state is one safe Markdown/YAML file per task; history is a separate append-only ledger and SQLite is disposable.

Version Python License Shell jq

Quick Start

# Install in development mode
pip install -e .

# Create your first task
juno-ledger create "Implement user authentication" --tags backend security

# Optional title + body composition
juno-ledger create --title "Auth" --body "Implement OAuth callback handling"

# List recent tasks
juno-ledger list --limit 5
juno-ledger list --status backlog,in_progress --sort asc   # preserve explicit status order

# Search and filter
juno-ledger search --status todo --tags backend
juno-ledger search --status todo --format json             # command-level --format is supported

# Aggregate tag usage (optionally by workflow status)
juno-ledger tags --status todo,in_progress --format table

# Mark task progress with response (ID can be positional or flag)
juno-ledger mark in_progress ABC123 --response "Started OAuth integration"

# Complete with commit hash
juno-ledger mark done --id ABC123 --response "Auth completed" --commit abc123def

# Declare dependencies between tasks
juno-ledger create "Deploy to staging" --blocked-by ABC123

# Find tasks ready to work on (all blockers resolved)
juno-ledger ready
juno-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
juno-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:

juno-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.
juno-ledger archive-pack create --plan /external/receipts/archive-plan.json \
  --report /external/receipts/archive-create.json
juno-ledger archive-pack doctor
juno-ledger doctor
juno-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 (~/.juno-kanban/projects.json) and route any read or write explicitly:

juno-ledger project add juno-code --path /absolute/path/to/juno-code
juno-ledger project list
juno-ledger --project juno-code create --body "Issue discovered elsewhere" --tags bug
juno-ledger --project juno-code list --status todo
juno-ledger project remove juno-code

Environment policy has precedence over project config:

export JUNO_KANBAN_REGISTRY_ENABLED=true
export JUNO_KANBAN_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 juno-ledger

The preferred command is juno-ledger; ledger-juno and jl are equivalent new spellings. Complete backward compatibility is preserved: juno-kanban, juno-feedback, and kanban-juno remain registered and route to the same CLI. The canonical PyPI distribution is juno-ledger, and the Python import remains kanban. Existing installations of the legacy juno-kanban distribution keep their registered commands; new releases are discovered under juno-ledger.

Development Mode

git clone https://github.com/askbudi/juno-ledger.git
cd juno-ledger
pip install -e .

Requirements

  • Python 3.8+
  • Runtime dependency ruamel.yaml>=0.18.6,<0.19 is installed automatically for safe round-trip YAML that preserves comments and ordering

Shell Completion (Tab Autocomplete)

juno-ledger ships a native completion script generator for every command alias:

# One-time test in current shell
source <(juno-ledger completion bash)

# Persist for bash
echo 'source <(juno-ledger completion bash)' >> ~/.bashrc

# Persist for zsh
echo 'source <(juno-ledger completion zsh)' >> ~/.zshrc

# Fish
juno-ledger completion fish > ~/.config/fish/completions/juno-ledger.fish

After reloading your shell, juno-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>.md files 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.sqlite3 index; 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 audited full projections

🏷️ Flexible Organization

  • Configurable status workflows (backlog → todo → done)
  • Feature tags for categorization
  • tags command for per-tag workload counts (supports status filtering + machine-readable formats)
  • Commit hash linking for git integration

🔗 Task Dependencies

  • Declare blockers with --blocked-by or 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
  • ready command finds unblocked tasks for parallel execution
  • order command returns topological sort for safe scheduling
  • Priority scoring ranks tasks by how much downstream work they unblock
  • Every generic mutation to done is 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 sealed umbrella-admission receipt must bind the umbrella revision and every child revision and state task_id, owner_id (the umbrella ID), and admitted: true per child. Admitted IDs must exactly equal blocked_by; related_tasks are 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
juno-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_ID positional or --id/--ID on key commands)
  • Agent-friendly create/deps parsing (--title, flag-only deps --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
juno-ledger create "Fix authentication bug"

# With tags and status
juno-ledger create "Add user profile page" --status todo --tags frontend ui

# Using --body flag (both formats work)
juno-ledger create --body "Implement OAuth" --tags security backend

# Optional title merged into body as: title:{title}\n\n{body}
juno-ledger create --title "OAuth" --body "Implement provider callback validation"

# Read shell-sensitive markdown exactly from a UTF-8 file or stdin
juno-ledger create --body-file task.md --status todo --tags feature backend
cat task.md | juno-ledger create --body-file -

# Why file/stdin matters: shells expand unquoted backticks and $() before
# Juno 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
juno-ledger create --status todo --related-tasks ABC123 "Add integration tests for callback flow"

Searching & Listing

# List recent tasks (sorted by last modified)
juno-ledger list --limit 10

# Search by status
juno-ledger search --status in_progress

# Search by tags
juno-ledger search --tags backend --tags security

# Aggregate tag counts across all tasks
juno-ledger tags

# Aggregate tag counts only for active work
juno-ledger tags --status todo,in_progress --format json
juno-ledger tags --status todo in_progress --format table

# Search open tasks (no agent response)
juno-ledger search --open

# Search recent tasks
juno-ledger search --recent --limit 5

# Control search sort order by last_modified
juno-ledger search --status todo --sort asc --limit 5

# Multiple conditions (AND logic)
juno-ledger search --status todo --tags backend --limit 3

--sort asc|desc uses one shared contract across list, search, and ready:

  • asc = oldest last_modified first
  • desc = newest last_modified first
  • equal timestamps use task id as deterministic tie-breaker
  • default list behavior preserves open-before-closed status priority (backlog/todo/in_progress before done/archive)
  • when list or ready receives --status ..., task groups follow the provided status order, then --sort applies within each status group

Updating Tasks

# Update status (positional or --id both supported)
juno-ledger update ABC123 --status in_progress
juno-ledger update --id ABC123 --status in_progress

# Add agent response
juno-ledger update --id ABC123 --response "Working on OAuth flow"

# Replace body/response from files without shell quoting risks
juno-ledger update ABC123 --body-file task.md
juno-ledger update ABC123 --response-file response.md

# Set commit hash
juno-ledger update --id ABC123 --commit abc123def

# Update tags
juno-ledger update ABC123 --tags urgent backend security

Mark Command (Streamlined Workflow)

# Mark with required response
juno-ledger mark todo ABC123 --response "Ready to start"

# Mark as done with commit (recommended)
juno-ledger mark done --id ABC123 --response "Feature completed" --commit abc123

# Read response from a file or stdin, preserving code fences/backticks/$VARIABLES
juno-ledger mark done --id ABC123 --response-file response.md --commit abc123
cat response.md | juno-ledger mark done --id ABC123 --response-file -

# Mark without commit (shows helpful reminder)
juno-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
juno-ledger create "Deploy to prod" --blocked-by ABC123

# Or declare blockers via body markup (auto-parsed)
juno-ledger create "Run integration tests [blocked_by]ABC123, DEF456[/blocked_by]"

# Add/remove dependencies after creation
juno-ledger deps add --id GHI789 --blocked-by ABC123 DEF456
juno-ledger deps remove --id GHI789 --blocked-by ABC123

# Shorthand add (action inferred when --blocked-by is present)
juno-ledger deps --id GHI789 --blocked-by ABC123 DEF456

# Query dependency info for a task
juno-ledger deps ABC123
juno-ledger deps --id ABC123
# Returns: blockers (met/unmet), dependents, priority score

# Find tasks ready to work on (all blockers resolved)
juno-ledger ready
juno-ledger ready --sort asc --limit 5                         # oldest ready tasks first
juno-ledger ready --status backlog,in_progress --sort desc     # backlog group first, then in_progress
juno-ledger ready --tag backend --sort desc                    # newest backend-ready tasks first

# Get safe execution order (topological sort)
juno-ledger order
juno-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)
juno-ledger get ABC123
juno-ledger get --id ABC123
juno-ledger get ABC123 --compact              # related task details are ID-only
juno-ledger get ABC123 DEF456 --format json   # ordered multi-ID lookup
juno-ledger show ABC123 DEF456 --format json  # alias

# Archive task (preserves data, sets status to archive)
juno-ledger archive ABC123
juno-ledger archive --id ABC123

# Preview one sealed merge plan, review it, then apply that exact plan.
juno-ledger merge /path/to/source/.juno_task --into ./.juno_task \
  --dry-run --plan-file /tmp/kanban-merge-plan.json
juno-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
juno-ledger --help
juno-ledger COMMAND --help

Output Formats

NDJSON (Default)

juno-ledger search --status todo
{"id": "ABC123", "status": "todo", "body": "Fix bug", "tags": ["backend"]}
{"id": "DEF456", "status": "todo", "body": "Add feature", "tags": ["frontend"]}

JSON (Structured)

juno-ledger search --status todo --format json
# global format placement is also supported
juno-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

juno-ledger search --status todo --format xml

Table (Human-readable)

juno-ledger search --status todo --format table

# tags command renders markdown table output in table mode
juno-ledger tags --status todo,in_progress --format table

Shell Integration

jq Compatibility

Perfect integration with jq for data processing:

# Extract task IDs
juno-ledger list | jq -r '.id'

# Filter by specific criteria
juno-ledger list | jq 'select(.status == "todo")'

# Count tasks by status
juno-ledger list | jq -r '.status' | sort | uniq -c

# Get tasks with specific tags
juno-ledger list | jq 'select(.feature_tags[]? == "backend")'

# Clean data output (suppress summary)
juno-ledger list 2>/dev/null | jq '.'

Automation Examples

# Daily standup - get your current work
juno-ledger search --status in_progress | jq -r '.body'

# Review completed work with commits
juno-ledger search --status done | jq -r '"✅ \(.body) (\(.commit_hash // "no commit"))"'

# Find urgent tasks
juno-ledger search --tags urgent | jq -r '"⚠️  \(.body)"'

# Git hook integration
git log -1 --format="%H" | xargs -I {} juno-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
juno-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
juno-ledger update ABC123 --status done  # (current: backlog)
Cannot transition from 'backlog' to 'done'.
Allowed transitions from 'backlog': todo, in_progress, archive

Use: juno-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
juno-ledger create "Review pull requests" --tags review daily
juno-ledger create "Fix authentication bug" --tags backend urgent --status todo

# Start working
juno-ledger mark in_progress -ID ABC123 --response "Investigating auth issue"

# During development
juno-ledger update ABC123 --response "Found root cause in JWT validation"

# Complete work
juno-ledger mark done -ID ABC123 --response "Fixed JWT expiry handling" --commit abc123

# End of day review
juno-ledger search --status done | jq -r '"✅ \(.body)"'

Dependency-Aware Workflow

# Create a pipeline with dependencies
juno-ledger create "Write unit tests" --tags backend testing --status todo
# Returns ID: A1b2C3

juno-ledger create "Implement feature" --blocked-by A1b2C3 --tags backend
# Returns ID: D4e5F6

juno-ledger create "Deploy to staging" --blocked-by D4e5F6 --tags devops
# Returns ID: G7h8I9

# See what's ready to work on
juno-ledger ready --sort desc
# Only A1b2C3 shows — the others are blocked (newest ready tasks first)

# Get execution order with priority scores
juno-ledger order --scores
# A1b2C3 (score: 2) → D4e5F6 (score: 1) → G7h8I9 (score: 0)

# Complete first task, check what's unblocked
juno-ledger mark done -ID A1b2C3 --response "Tests written" --commit abc123
juno-ledger ready --sort asc
# Now D4e5F6 is ready (and asc sort keeps oldest ready tasks first)

Team Coordination

# See what teammates are working on
juno-ledger search --status in_progress | jq -r '"👤 \(.body) - \(.agent_response)"'

# Find tasks needing review
juno-ledger search --status review --tags urgent

# Weekly retrospective
juno-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: $(juno-ledger search --commit $commit | jq -r '.body // "No task linked"')"
done

# Pre-commit hook: ensure task exists
if ! juno-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 juno-ledger

# Try reinstalling
pip install -e . --force-reinstall

Slow search performance:

# Rebuild the disposable query cache at any time
juno-ledger cache rebuild

jq parsing errors:

# Ensure you're using recent version (v1.3.0+)
juno-ledger --version

# Use stderr redirection if needed
juno-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

Contributing

To contribute, open an issue or pull request in askbudi/juno-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 tags command for tag-level workload aggregation (juno-ledger tags) with --status filtering and output formats (json, table, xml, ndjson)
  • Added explicit status-order contract for list and ready when --status is provided (e.g. --status backlog,in_progress preserves 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, and ready all follow one --sort asc|desc contract with stable ID tie-breaks

v1.31.0 (2026-03-21)

  • Added search --sort asc|desc to control last_modified ordering 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 (juno-ledger get ID1 ID2 ...) with ordered JSON output
  • Added native shell completion generator (juno-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.sh prefers working-tree src/ over stale site-packages
  • Hardened scripts/bump_version.py to use max(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_ID and flag form (--id / --ID)
  • Added deps shorthand mode:
    • deps --id TASK_ID --blocked-by ID... defaults to add
    • deps --id TASK_ID defaults 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

v1.28.0 (2026-03-03)

  • Added create --title support (title:{title}\n\n{body} merge format)
  • Added support for title-only task creation

v1.27.0 (2026-03-03)

  • Added --id/--ID task selection support for get/show
  • Expanded integration test coverage for ID parsing and create flows

v1.26.0 (2026-02-19)

  • Added task dependency system with blocked_by field and body markup parsing
  • Added deps command for querying/managing task dependencies
  • Added ready command for finding unblocked tasks (parallel execution support)
  • Added order command for topological sort of open tasks
  • Added dependency graph engine with cycle detection, priority scoring, and critical path analysis
  • Added merge command for combining task databases across directories
  • Added related_tasks field for non-blocking task references
  • Enhanced get command 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

Metadata

Release files for juno-ledger 2.0.7

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for juno-ledger 2.0.7
File Size Uploaded
juno_ledger-2.0.7.tar.gz 149.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for juno-ledger 2.0.7
File Interpreter ABI Platform
juno_ledger-2.0.7-py3-none-any.whl Python 3 none any Details

Total release size: 294.7 kB

Release files / juno_ledger-2.0.7.tar.gz

Download URL juno_ledger-2.0.7.tar.gz
Size 149.8 kB
Tags Source
SHA-256 checksum
How to use checksums
b6d940f3515da50d0ffcf2be4aa7bb6ee632ba1b13da8ac195ca85865545f5ae
BLAKE2b-256 checksum
How to use checksums
66c0b45cf24c2b936eaf92056a9469596ce41bdf6919de22b71eb84424775167
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.9

Release files / juno_ledger-2.0.7-py3-none-any.whl

Download URL juno_ledger-2.0.7-py3-none-any.whl
Size 144.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
1fdf32a241cbf0c3c156a68a5c8dcb0f42b8ea2a1263cbf9f1aebe1693e13df6
BLAKE2b-256 checksum
How to use checksums
efc32b1b620fad6b136030e2c17b48502d969248d03c82c5311d53f1fb0c9473
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.9

Release history Release notifications | RSS feed

This release

2.0.7 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page