Repository navigation
tenx 0.27.0 — proactive delegation routing, configured Herdr/tmux projection, live-dispatch fixes
Delegation is now reachable, and live Herdr dispatch actually works.
What was wrong. Nothing in the loop ever proposed an isolated worker, and
even an explicit tenx dispatch --visual failed closed. Dogfooding a real
dispatch against a live Herdr session surfaced three defects on top of that.
Added
tenx nextemits adelegate ready ticket ...action naming the runnable
tenx dispatch/tenx swarmcommand for every spec with ready tickets.tenx exec <SPEC>prints the same commands when a spec has more than one
open ticket.- The bundled
tenx-dispatchskill routes proactively on ticket-shaped
intent instead of suppressing itself, and carries the Herdr supervision
commands inline so a projected worker never depends on another skill being
routed. dispatch:section in.tenx/config.yaml(agent,visual) with
TENX_DISPATCH_VISUALand a new--no-visualoverride. Default stays
headless, so nothing changes for projects that do not opt in.
Fixed
herdr agent start --timeoutis a readiness wait capped at 300000ms, not a
work budget. tenx passed the ticket timeout there, so every visual
dispatch failed withinvalid_agent_timeout.- The dry-run plan advertised a Herdr agent name with underscores while the
live launch used dashes, so following the plan returnedagent_not_found. --visualwith no active multiplexer silently ran an invisible headless
worker and reported success.- A failed visual launch left
.tenx/worktrees/<TICKET-ID>and the
tenx/<TICKET-ID>branch behind. - PyYAML wrapped long frontmatter titles at ~80 columns, and the built-in
fallback parser dropped the continuation lines, so artifacts written on a
PyYAML machine failedtenx validateon every install without it.
Resolution order for projection is CLI flag > TENX_DISPATCH_VISUAL >
dispatch config > headless. Unattended runs stay explicit:
tenx swarm <SPEC> --auto-reconcile from CI or cron.
Verified
Both smoke modes pass (module + clean install) on 3.10/3.12/3.13 in CI.
This release was itself dogfooded end to end: a ticket was dispatched to a
live Herdr workspace, the worker implemented it in an isolated worktree, and
the change was reviewed and landed through tenx reconcile.
Added
- Added proactive delegation routing:
tenx nextnow names the runnable isolated-worker command for every spec with ready tickets, thetenx execbrief prints the same commands, and the bundledtenx-dispatchskill routes on ticket-shaped intent instead of suppressing itself. Added adispatchsection to.tenx/config.yaml(agent,visual) withTENX_DISPATCH_VISUALoverride and--no-visual, defaulting to headless. (SPC-036)
Changed
- Teach capability catalog about configured projection and delegation trigger (dispatch and swarm flags, dispatch config section, --no-visual) (SPC-037)
Fixed
tenx dispatch --visualwith no active multiplexer now exits non-zero with the cause instead of silently running an invisible headless worker, and a launch that fails after worktree creation leaves no worktree or branch behind. (SPC-036)- Fixed frontmatter portability: PyYAML wrapped long titles at ~80 columns, producing continuation lines the fallback parser could not read, so artifacts written on a PyYAML machine failed
tenx validateon every install without it. The writer now emits unwrapped scalars and the round-trip is pinned by tests. (SPC-036) - Fixed a second live-dispatch defect found by dogfooding: the dry-run plan advertised a Herdr agent name with underscores while the live launch used dashes, so following the plan with
herdr agent get <name>returnedagent_not_found. Plan and launch now share oneherdr_agent_name()helper and the agreement is pinned by tests. (SPC-036) - Fixed live Herdr dispatch, found by dogfooding:
herdr agent start --timeoutis a readiness wait capped at 300000ms, not a work budget, so passing the ticket timeout there made every visual dispatch fail closed withinvalid_agent_timeout. The readiness budget is now bounded independently and the dry-run plan reports it truthfully. (SPC-036)