---
title: "Challenge the Premise"
description: "Add explicit investigation dispositions and stopping rules so unsupported claims and missing product decisions cannot drift into implementation."
canonical_url: "https://vercel.com/academy/creating-a-software-factory/challenge-the-premise"
md_url: "https://vercel.com/academy/creating-a-software-factory/challenge-the-premise.md"
docset_id: "vercel-academy"
doc_version: "1.0"
last_updated: "2026-08-29T01:48:00.666Z"
content_type: "lesson"
course: "creating-a-software-factory"
course_title: "Creating a Software Factory"
prerequisites:  []
---

<agent-instructions>
Vercel Academy — structured learning, not reference docs.
Lessons are sequenced.
Adapt commands to the human's actual environment (OS, package manager, shell, editor) — detect from project context or ask, don't assume.
The lesson shows one path; if the human's project diverges, adapt concepts to their setup.
Preserve the learning goal over literal steps.
Quizzes are pedagogical — engage, don't spoil.
Quiz answers are included for your reference.
</agent-instructions>

# Challenge the Premise

# Challenge the premise

The issue asks us to reject whitespace-only messages. The probe shows the SDK already throws the expected validation error. This work order should stop rather than expand into an adjacent cleanup.

```json
{
  "claimSupported": false,
  "disposition": "unsupported",
  "openQuestions": [],
  "evidence": [
    { "command": "pnpm test ...", "result": "empty message rejected" }
  ]
}
```

Stopping preserves trust and reviewer time. The factory should explain the contradiction without smuggling in a nearby change.

## Let Contradictory Evidence Stop the Line

Stop or redirect a work order when evidence cannot support the requested change.

## Hands-on Exercise 3.3

Add two fields to `agent/subagents/investigator/agent.ts`:

```ts title="agent/subagents/investigator/agent.ts"
disposition: {
  enum: ["proceed", "needs-clarification", "unsupported"],
  type: "string",
},
openQuestions: { items: { type: "string" }, type: "array" },
```

Add both names to `required`. `openQuestions: []` means the Investigator has enough information to decide.

Update the Investigator instructions:

```md title="agent/subagents/investigator/instructions.md"
If the premise is unsupported, set `disposition` to `unsupported` and explain the contradictory evidence. If a decision requires missing product intent, set `disposition` to `needs-clarification` and ask focused questions. Produce a buildable specification only when `disposition` is `proceed`.
```

Now add the matching boundary to the root `agent/instructions.md`. Place it immediately after the Investigator returns:

```md title="agent/instructions.md"
Read the Investigator disposition before any implementation handoff. For `unsupported`, record the contradictory evidence, set the work order to `stopped`, and explain why no code change was created. For `needs-clarification`, ask the returned questions and stop. Delegate to the Builder only when the disposition is exactly `proceed`.
```

The position matters. Check the disposition before the Builder handoff so unsupported work cannot reach implementation.

## Try It

Run the static checks:

```bash
pnpm typecheck
pnpm exec eve info
```

Then invoke the factory with the false-premise fixture:

```bash
pnpm exec eve invoke "$(cat fixtures/issues/false-premise-example.md)"
```

Inspect the final work order. It should contain the probe and the stop decision, with no Builder delegation and no candidate branch.

Run the recorded overview again for comparison:

```bash
pnpm trace
```

Issue 44 should stop after investigation. Issue 42 should continue. The same bug lane can now produce two correct outcomes.

\*\*Note: Propose a nearby cleanup\*\*

Ask what would happen if the Investigator found an unrelated naming issue while disproving the report. The answer is a separate work order, not expanded scope.

\*\*Warning: Unsupported work reaches a Builder\*\*

Check the disposition before any implementation delegation. Accept only the exact value `proceed`.

\*\*Warning: The stop has no evidence\*\*

Record the command and observed result that contradicted the issue. “Could not reproduce” without the attempted reproduction is weak evidence.

## Commit

```bash
git add agent/subagents/investigator agent/instructions.md
git commit -m "feat(factory): stop unsupported work"
```

## Done-When

- [ ] Every investigation returns an explicit disposition
- [ ] Unsupported work records contradictory evidence
- [ ] Missing product intent produces focused questions
- [ ] Only `proceed` can reach implementation
- [ ] A stopped work order creates no branch

An evidence-backed decision to change zero files is a successful result. Supported work can now proceed to a Builder with scoped write access.

## Solution

The completed contract requires every field listed in the exercise, including `disposition` and `openQuestions`. The root instructions inspect that disposition before any Builder handoff.


---

[Full course index](/academy/llms.txt) · [Sitemap](/academy/sitemap.md)
