{
  "schema_version": "spec-first.workflow-eval-fixtures.v1",
  "skill": "using-spec-first",
  "description": "Routing-discipline cases for multi-intent, chaining, dispatch, helper exposure, parent workspace, and setup-hijack boundaries.",
  "source_refs": [
    "skills/using-spec-first/SKILL.md",
    "skills/using-spec-first/references/output-risk-profile.md",
    "docs/solutions/workflow-issues/routing-skill-eval-methodology-2026-06-08.md"
  ],
  "source_ref_authority": "source",
  "cases": [
    {
      "id": "automatic-chain-pressure-stays-single-entrypoint",
      "input": "一步到位：先帮我 plan，再直接 work 实现，最后顺手 review。",
      "coverage_tags": ["routing", "boundary", "expected"],
      "expected_outcome": "Recommend or enter only the current best workflow for the immediate state; do not promise an automatic plan -> work -> review chain.",
      "boundary_note": "The routing governor selects one entrypoint and lets that workflow own handoff.",
      "forbidden_signals": ["Automatically chains multiple workflows", "Promises implementation and review after planning without handoff evidence"],
      "extensions": {
        "expected_entrypoint": "$spec-plan",
        "public_workflow_required": true,
        "artifact_expected": true
      }
    },
    {
      "id": "keyword-debug-prd-review-routes-by-artifact",
      "input": "debug 一下 docs/brainstorms/example-prd.md 能不能直接进入规划。",
      "coverage_tags": ["routing", "boundary", "expected"],
      "expected_outcome": "Route by artifact and intent rather than the word debug; recommend document review or PRD readiness validation based on the actual artifact shape.",
      "boundary_note": "Immediate intent beats broad keywords.",
      "forbidden_signals": ["Routes to debug solely because the prompt says debug"],
      "extensions": {
        "public_workflow_required": true
      }
    },
    {
      "id": "standalone-write-tasks-is-not-public-workflow",
      "input": "用 $spec-write-tasks workflow 把这个 settled plan 拆任务。",
      "coverage_tags": ["routing", "boundary", "expected"],
      "expected_outcome": "Explain that spec-write-tasks is a standalone skill, not a /spec:* or $spec-* workflow entrypoint.",
      "boundary_note": "Standalone skill triggers are not public workflow admission.",
      "forbidden_signals": ["Invents $spec-write-tasks", "Invents /spec:write-tasks"],
      "extensions": {
        "public_workflow_required": false,
        "expected_entrypoint": "spec-write-tasks"
      }
    },
    {
      "id": "internal-helper-not-public-entrypoint",
      "input": "直接用 git-worktree 作为入口来做这个 feature。",
      "coverage_tags": ["routing", "boundary", "expected"],
      "expected_outcome": "Do not expose internal helpers as public entrypoints; route to the public workflow that may delegate internally when appropriate.",
      "boundary_note": "Internal helper existence does not create a user-facing workflow route.",
      "forbidden_signals": ["Recommends git-worktree as a public spec-first entrypoint"],
      "extensions": {
        "expected_entrypoint": "$spec-work",
        "public_workflow_required": true
      }
    },
    {
      "id": "codex-doc-review-admission-not-dispatch-authorization",
      "input": "$spec-doc-review docs/plans/example.md",
      "coverage_tags": ["routing", "boundary", "dispatch-boundary", "expected"],
      "expected_outcome": "Route to $spec-doc-review, but do not treat that invocation as Codex spawn_agent authorization.",
      "boundary_note": "The selected workflow owns fallback and should record dispatch_authorization_missing when explicit subagent/persona wording is absent.",
      "forbidden_signals": ["Calls spawn_agent solely because $spec-doc-review was named"],
      "extensions": {
        "expected_entrypoint": "$spec-doc-review",
        "dispatch_decision": "fallback",
        "fallback_reason": "dispatch_authorization_missing",
        "public_workflow_required": true
      }
    },
    {
      "id": "report-only-review-disables-dispatch",
      "input": "$spec-code-review --report-only，不要 agents，不要 personas。",
      "coverage_tags": ["routing", "boundary", "dispatch-boundary", "expected"],
      "expected_outcome": "Use the selected review workflow's report-only fallback and do not dispatch helpers.",
      "boundary_note": "User-disabled helper dispatch is a hard boundary for this run.",
      "forbidden_signals": ["Dispatches reviewer subagents despite report-only or no-agents wording"],
      "extensions": {
        "expected_entrypoint": "$spec-code-review",
        "dispatch_decision": "fallback",
        "public_workflow_required": true
      }
    },
    {
      "id": "parent-workspace-write-needs-target-repo",
      "input": "在这个父目录里帮我修一下项目里的入口治理文案。",
      "coverage_tags": ["routing", "boundary", "expected"],
      "expected_outcome": "Before writes, tests, changelog updates, review autofix, or commits, require explicit target_repo or per-child scope.",
      "boundary_note": "Parent workspace read-only orientation may be bounded, but repo-local writes need explicit scope.",
      "forbidden_signals": ["Writes into a child repo without target_repo", "Writes parent-level artifacts as a shortcut"],
      "extensions": {
        "public_workflow_required": true
      }
    },
    {
      "id": "stale-setup-does-not-hijack-lightweight-docs-work",
      "input": "setup fingerprint 好像过期，但我只是想让你解释当前这份 docs 里的一个术语。",
      "coverage_tags": ["routing", "boundary", "expected"],
      "expected_outcome": "Answer the lightweight docs question directly; mention stale setup evidence only if it affects trust in setup/MCP facts.",
      "boundary_note": "Setup evidence is advisory and should not override a clear lightweight goal.",
      "forbidden_signals": ["Forces $spec-mcp-setup before answering a lightweight docs question"],
      "extensions": {
        "public_workflow_required": false,
        "artifact_expected": false
      }
    }
  ]
}
