EPS
← All tasks·#2519Proposed

tick_triage.py from main imports task_workflow symbols absent in worktree cwd resolution (open_async_ask ImportError)

kind: infra
track:

Highlight text on any card (body, plan, or an event) to anchor a comment, or leave a whole-task comment here. Mention @claude to summon a reply.

No comments yet.

Observed 2026-08-24 in the issue-1739 session: the /issue-tick contract runs 'uv run python REPOROOT/scripts/ticktriage.py<N>′fromtheWORKTREEcwd.uvrunresolvesthepackagefromtheworktree′ssrc/,somain′sticktriage.py(whichnowimportsopenasyncaskfromexplorepersonaspace.taskworkflow)crasheswithImportErroragainsttheworktree′sbranch−pinnedtaskworkflow.py—exit2,whichthetickskillmapstoSTALE−REDRIVE(aspuriousfull−skillre−driveoneverytickforanyworktreeolderthanthesymbol).Fixoptions:(a)maketicktriage.pyimportopenasyncasklazily/guarded(getattrwithfallback)soolderworktreepackagesdegradegracefully;(b)havethetickcontractrunthetriagewithcwdpinnedtoREPOROOT(uvrun−−projectREPO_ROOT/scripts/tick_triage.py <N>' from the WORKTREE cwd. uv run resolves the package from the worktree's src/, so main's tick_triage.py (which now imports open_async_ask from explore_persona_space.task_workflow) crashes with ImportError against the worktree's branch-pinned task_workflow.py — exit 2, which the tick skill maps to STALE-REDRIVE (a spurious full-skill re-drive on every tick for any worktree older than the symbol). Fix options: (a) make tick_triage.py import open_async_ask lazily/guarded (getattr with fallback) so older worktree packages degrade gracefully; (b) have the tick contract run the triage with cwd pinned to REPO_ROOT (uv run --project REPO_ROOT or cd $REPO_ROOT &&) so both script AND package resolve from main. Prefer (b) + a defensive (a). Repro: from any worktree whose src predates open_async_ask, run the tick command.