From 27cad971d026475e793ecda24340568fc2286939 Mon Sep 17 00:00:00 2001 From: 0xdhx Date: Fri, 14 Aug 2026 11:33:12 -0500 Subject: [PATCH] enhance(#2115): replace bare eval with llm eval and drop ai system in the AI-integration gate (#3431) * enhance(#2115): tighten AI-integration gate keywords per re-triage pin Apply the maintainer-pinned scope from the 2026-07-31 re-triage on #2115 exactly: `eval` -> `llm eval`, `ai system` dropped, every other token and the surrounding sentence byte-identical. Supersedes the stale-closed PR #3131, whose broader whole-word-matching rework went beyond the pin. * chore(#2115): set changeset fragment pr to 3431 --- .changeset/2115-plan-phase-ai-keyword-precision.md | 6 ++++++ gsd-core/workflows/plan-phase.md | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 .changeset/2115-plan-phase-ai-keyword-precision.md diff --git a/.changeset/2115-plan-phase-ai-keyword-precision.md b/.changeset/2115-plan-phase-ai-keyword-precision.md new file mode 100644 index 000000000..6fa6827dd --- /dev/null +++ b/.changeset/2115-plan-phase-ai-keyword-precision.md @@ -0,0 +1,6 @@ +--- +type: Changed +pr: 3431 +--- + +**The `plan-phase` AI-integration capability gate no longer lists substring-collidable keywords** — bare `eval` (a substring of ordinary phase-goal words like `evaluation` and `retrieval`) is replaced by `llm eval`, and the under-specified `ai system` is dropped, per maintainer triage on the linked issue. The gate is a capability prompt, not a hard block, so this is a precision improvement: phase goals like "add evaluation metrics" or "build the retrieval layer" no longer invite a spurious AI-SPEC branch, and genuinely AI-flavored goals still match on the precise framework and technique names. (#2115) diff --git a/gsd-core/workflows/plan-phase.md b/gsd-core/workflows/plan-phase.md index 58bd1f947..8a2a2daf3 100644 --- a/gsd-core/workflows/plan-phase.md +++ b/gsd-core/workflows/plan-phase.md @@ -461,7 +461,7 @@ Read the `activeHooks` array directly from `PLAN_PRE_HOOKS_JSON` / `HOOKS_JSON` - If `ref.agent` is set, dispatch with `Agent(prompt=filled_hook_fragment, subagent_type=ref.agent, model="{researcher_model}")`. Use the hook's `fragment.inline` as the prompt body and fill phase fields before spawning. - The `research` hook is handled by §5.1's research decision. The `pattern-mapper` hook is handled by §7.8 after `RESEARCH_PATH` is known. Future plan:pre agent hooks use the same `ref.agent` fragment contract. -**AI integration capability:** If the active `ai-integration` step hook is present, `AI_SPEC_PATH` is empty, and the phase goal contains AI keywords (`agent`, `llm`, `rag`, `chatbot`, `embedding`, `langchain`, `llamaindex`, `crewai`, `langgraph`, `openai`, `anthropic`, `vector`, `eval`, `ai system`), then: +**AI integration capability:** If the active `ai-integration` step hook is present, `AI_SPEC_PATH` is empty, and the phase goal contains AI keywords (`agent`, `llm`, `rag`, `chatbot`, `embedding`, `langchain`, `llamaindex`, `crewai`, `langgraph`, `openai`, `anthropic`, `vector`, `llm eval`), then: - In pipeline / `--auto` mode, invoke the hook's `ref.skill` via `Skill(skill="gsd-${ref.skill}", args="${PHASE} --auto ${GSD_WS}")`. - In manual mode, display the existing non-blocking `/gsd:ai-integration-phase {N}` recommendation and let the user continue planning without AI-SPEC or stop to run the capability workflow first.