balls 0.5.10

Git-native task tracker for parallel agent workflows
Documentation
# The hook schedule (§6) — the seeded default a fresh landing starts from.
#
# `[hooks]` is the SINGLE source of truth for plugin wiring: each `<op>.<phase>`
# key maps to an ordered list of plugin names. Listed = run this plugin in this
# op-phase; list position = run order (the last name runs last). An absent key or
# empty list = run nothing. The names are pure text and travel verbatim on `bl
# install`; the local `config/plugins/bin/<name>` symlink (gitignored) resolves
# each name to this box's binary.
#
# This default wires the two shipped capabilities — `bl-tracker` (remote sync) and
# `bl-delivery` (the code worktree). `bl prime` PRUNES any entry whose binary is
# not installed beside `bl`, so a tracker-less or test box never aborts. Replace
# this file (or the whole `$XDG_CONFIG_HOME/balls/default-config/` folder) to
# ship an org's own default capability set without touching core (§1/§12).

[hooks]
"sync.pre"     = ["bl-tracker"]                  # import remote state first
"prime.pre"    = ["bl-tracker"]
"install.pre"  = ["bl-tracker"]                  # fetch the center's config to adopt (§13 prime --install)
"prime.post"   = ["bl-delivery", "bl-tracker"]   # backstop prune of settled work/<id> branches (worktrees materialize at claim only), then settle store content (fetch-ff + push)
"claim.post"   = ["bl-delivery", "bl-tracker"]   # worktree (prints its path), then the push (tracker last)
"unclaim.post" = ["bl-delivery", "bl-tracker"]
"show"         = ["bl-delivery"]              # read-op (§6, single phase): fold the worktree path into the human render (§11)
"close.pre"    = ["bl-delivery"]              # deliver (squash) before the seal
"close.post"   = ["bl-delivery", "bl-tracker"]   # teardown (worktree + the work/<id> branch), then push
"create.post"  = ["bl-tracker"]
"update.post"  = ["bl-tracker"]
"import.post"  = ["bl-tracker"]                  # imported records sync like any mutate (§16)