--- title: delegate-task — literal negative triggers beat abstract carve-outs type: concept updated: 2026-06-17 --- # delegate-task — literal negative triggers beat abstract carve-outs ## Symptom `delegate-task` v0.2.0 false-positive-fired on **«создать задачу себе»** (create a task for myself) — a self-assigned task that should route to `using-tasks`, not to cross-agent delegation. The `delegate-task-test-trigger` run measured it at **5/5 trials** consistently wrong (→ `delegate-task`). ## Root cause The positive trigger list contained **«создать задачу на агента»**. A self-task phrase **«создать задачу себе»** shares the stem **«создать задачу»**, so it literal-matched the positive trigger. The negative clause was abstract — *"Does NOT apply when doing the work yourself"* — and an abstract carve-out does **not** beat a literal stem-match under the `using-superpowers` 1%-rule. Clean-context subagents *recognized* the «себе» exception in their reasoning, yet still invoked `delegate-task` FIRST because the literal match outweighed the abstract exclusion. ## Fix (v0.2.0 → v0.2.1, PATCH) Make the negative **literal and routed**, so it competes head-on with the positive at the same surface level: > Does NOT apply to self-assigned tasks on your own board (**«создать задачу себе»**, > **«task for myself»**, **«поставить себе задачу»** → using-tasks), to work you do > yourself, or to workshop-internal tasks. Plus a body disambiguator in the "Не применяется" section: **«на агента» / «агенту» / «в проект X» = делегирование; «себе» / «myself» = своя доска.** ## Verification Re-ran the `delegate-task-test-trigger` methodology (fresh-context subagents, simulated available-skills registry with the new description + competitors `using-tasks` / `using-projects-meta` / `setup-tasks` / `session-handoff`, no hint about the expected answer): - **Positives 5/5** — «создать задачу на агента», «поставить задачу агенту», «delegate task to the books project», «делегировать таску», «tasks_create для проекта X» → all `delegate-task`. No regression from the literal negative. - **Negative «создать задачу себе на завтра» 4/5 → `using-tasks`** (was 0/5 before the fix). The single residual miss reasoned correctly («себе» → using-tasks) but was tripped by an eval-harness artifact (the prompt forced a skill name on line 1 *before* reasoning), not by ambiguity in the description. ## Reusable principle When a skill's positive triggers contain a phrase whose **stem** also appears in a sibling skill's domain, an abstract "does NOT apply when…" clause is too weak. Put the **exact colliding negative phrase** in the description with an explicit **→ ** route. Literal beats abstract under the 1%-rule. See also [[tdd-criteria-design]] for another "make the bright line literal, not a judgement call" pattern. See [[session-inbox-monitor-received-msg-fp]] for the next clause: a literal+routed negative still fails if its **route target isn't installed** — the carve-out then has no real competitor and the nearest in-domain skill wins anyway.