fix(delegate-task): literal negative-clause kills self-task FP (0.2.0->0.2.1)
«создать задачу себе» false-positive-fired delegate-task instead of using-tasks (5/5 trials, found by delegate-task-test-trigger). Root cause: the self-task phrase shares the stem «создать задачу» with the positive trigger «создать задачу на агента», and the abstract "Does NOT apply when doing the work yourself" carve-out cannot beat a literal stem-match under the using-superpowers 1%-rule. Fix: make the negative literal + routed. Description now lists «создать задачу себе» / «task for myself» / «поставить себе задачу» -> using-tasks; body "Ne primenyaetsya" gains a self-assigned bullet plus a disambiguator («на агента»/«агенту»/«в проект X» = delegate; «себе» = own board). PATCH bump 0.2.0 -> 0.2.1. Verification (fresh-context subagents, simulated available-skills registry, no hint): positives 5/5 -> delegate-task (no regression); negative «создать задачу себе на завтра» 4/5 -> using-tasks (was 0/5). The 1 residual miss reasoned correctly but tripped on an eval-harness artifact (prompt forced skill-name-before-reasoning), not description ambiguity. Wiki: concept page delegate-task-negative-trigger-fp.md + index/log. Board: [delegate-task-description-fp-fix] -> done. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
59
.wiki/concepts/delegate-task-negative-trigger-fp.md
Normal file
59
.wiki/concepts/delegate-task-negative-trigger-fp.md
Normal file
@@ -0,0 +1,59 @@
|
||||
---
|
||||
title: delegate-task — literal negative triggers beat abstract carve-outs
|
||||
type: concept
|
||||
updated: 2026-06-09
|
||||
---
|
||||
|
||||
# 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 **→ <sibling-skill>** 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.
|
||||
Reference in New Issue
Block a user