From 875f524d8a972e2e8451577ad3eb8dbe5d318d74 Mon Sep 17 00:00:00 2001 From: Michael Dieringer <65093775+MichaelDieringer@users.noreply.github.com> Date: Fri, 31 Jul 2026 22:35:56 +0200 Subject: [PATCH] Smiley v3: TDD-stop-gate skal trigges af udfald, ikke ordvalg Opdaget i praksis 2026-07-31: en afslappet "det vil jeg gerne have de ting fikset" (efter en QA/challenge-session, ikke en "lad os starte en opgave"- formulering) udloeste ikke Task Lifecycle-stopgaten automatisk - den koerte kun roed/groen fordi et menneske eksplicit skrev "roed/groen-gate" ind i den efterfoelgende prompt. Det skal ikke vaere paakraevet. En ordliste kan ikke loese det - der findes uendeligt mange maader at bede om en rettelse paa. Erstattet med en udfalds-baseret betingelse: gaten aktiveres naar Claude er ved at skrive/aendre AL-kode der aendrer adfaerd, uanset brugerens ordvalg. Kalibrerings-eksempler ("fiks det", "kan du ordne det", et bart "ja, goer det") er illustrationer af raekkevidden, ikke en udtoemmende liste at matche imod. Co-Authored-By: Claude Sonnet 5 --- custom/agents/smiley.agent.md | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/custom/agents/smiley.agent.md b/custom/agents/smiley.agent.md index 9ea62ce..b7367da 100644 --- a/custom/agents/smiley.agent.md +++ b/custom/agents/smiley.agent.md @@ -1,7 +1,7 @@ --- kind: watchdog id: curabis-smiley -version: 2 +version: 3 title: Smiley — Session Watchdog description: > Always-active session observer. Shapes Claude's behavior from within. @@ -99,7 +99,25 @@ Enforces the four lifecycle rules: `development-requires-bc-task`, `one-task-in-progress-at-a-time`, `testcase-must-fail-before-implementation`, `release-must-update-app-version`. -**Start gate — activate when development is about to begin:** +**Start gate — activate on the outcome, not the phrasing:** + +The trigger is **"Claude is about to write or modify AL code that changes +behavior"** — never the words the user used to ask for it. A keyword list +cannot cover this: there are infinite ways to request a fix, and every list +will always miss the next one. Judge what you are about to *do*, not what +was said. 2026-07-31: confirmed the gap in practice — a casual "det vil jeg +gerne have de ting fikset" (after a QA/challenge session, not a "let's start +a task" framing) did not activate this gate on its own; it only ran red/green +because the human explicitly spelled out "rød/grøn-gate" in the follow-up +prompt. That must not be required. + +Calibration examples of phrasing that still activates the gate — illustrations +of the range, not an exhaustive list to match against: "fiks det", "kan du +ordne det", "ret lige X", "løs det her", a bare "ja, gør det" confirming a +prior offer to fix, or a QA/review session pivoting straight into "implement +the findings." None of these look like "starting a task" on the surface — +all of them mean AL code is about to change. + - Customer app (`app.json` idRanges within 50000–99999): a BC task MUST exist. None found via BC MCP → Claude registers it first (create-task workflow), naturally, before any branch exists. AppSource app: offer, never block.