# nobrainer-tech-flow 2.9.0: work to done

Release date: 2026-10-31.

The module set (eighteen), the hooks and the MCP server do not change. The entry skill
gains a short `Work to done` section and a finish check before the handoff block.

## Why

- Flow already covered verification, the corrective budget, blockers and the BUDDY
  permission package, but it left four behaviours to the agent's default temperament:
  - telling a request to act apart from a question, so a "do it" request could end in
    a plan and a question could end in unrequested edits;
  - keeping the whole scope, so the easier part could be delivered as the whole, and
    requirements added mid-task could be dropped;
  - naming a safe assumption and continuing instead of stopping on ambiguity, while never
    reading silence as consent;
  - a last check before the handoff, so a reply could promise an action it could have
    taken, call partial work done or promise background work that nothing started.
- `references/autopilot.md` already says to continue ready work and not to end on a
  milestone report. The entry skill had no equivalent for tasks that never enter
  autopilot.

## What changes

- `skills/nobrainer-tech-flow/SKILL.md`, new `## Work to done` before `## Choose the
  smallest workflow`:
  - intent comes from the whole conversation; a request to do something is done, and a
    question, review or brainstorm gets an answer and no unrequested changes;
  - the full scope stays in force, including requirements added mid-task; the task
    neither shrinks to its easier part nor grows into the agent's own project;
  - a known, authorized next step is taken; routine reversible details are decided in
    scope; permission already given is reused;
  - ambiguity is not a blocker: a safe assumption is named and work continues; only
    dependent or out-of-authority work pauses; silence is never consent;
  - before an unavoidable approval, everything already allowed is prepared;
  - after a failure the cause is found first; an identical attempt is never repeated; a
    real denial or missing access stays a limit.
- New `Finish check:` paragraph before the handoff block: compare the result with the
  whole agreed scope, do any requested, possible and allowed action the reply would only
  promise, stop only on acceptance, an explicit stop or a real blocker (naming the done
  part, the missing item and the unblock condition), and never call a partial result
  done or promise background work that nothing started.
- `tests/test_work_to_done.py` (six tests) checks the section position, each rule and
  that the existing approval gate ("Autonomy does not expand authority") still holds.
- The entry-skill size test allows 280 lines and 2150 words (was 250 and 1900). The skill
  is 271 lines and 2104 words.

## Not changed

- No approval gate is relaxed: publishing, spending, contacting people, deleting data,
  credentials, merges, deploys and production changes still need their own authority.
- The MCP server code and its pinned guidance cards are unchanged; re-pinning is a
  separate step after the tag, as in earlier releases.
- No skill was merged, added or retired; the references are unchanged.

## Verification record

- `python3 scripts/validate_skills.py` and `--suite` pass.
- `python3 -m unittest discover -s tests`: 623 tests OK, 5 skipped (617 before this
  release, plus six work-to-done tests).
- `git diff --check` is clean.
- Behavior evaluation ([record](../evals/v2.9.0-work-to-done-2026-10-31.md)): baseline
  2.8.0 and candidate 2.9.0 on three frozen scenarios (act, non-trigger, adversarial)
  with an independent judge: 11/12 for both on gpt-6.1-terra. A second round on Claude
  Haiku and Sonnet added a six-part request and a request phrased as a question: 22/22
  for both variants on both models. Null result at ceiling, no regression in 26 runs;
  long multi-turn tasks were not tested.
- Marketplace readback for 2.9.0 follows the merge ([releasing](../RELEASING.md), step 3).
