# nobrainer-tech-flow 2.8.0: a fixed handoff block and plain public language

Release date: 2026-10-28.

The module set (eighteen) and the hooks do not change. The entry skill gains a required
final handoff block and one verify-gate line. Seventeen module descriptions, the entry
skill prose and the README top section are rewritten in plain language. Two
maintainer-only planning sources leave the public tree.

## Why

- The handoff that the README promises ("what was delivered, what was checked and what
  was not") was enforced only by the optional MCP server (`check_flow_done` and
  `draft_flow_handoff`). The skill itself ended with "delivered outcome, decisive proof,
  uncertainty", so an agent without the MCP server could skip the unchecked part.
- Agents follow stale docs. A task that changes code but leaves a contradicting doc
  passes every check unless someone names the drift.
- Seventeen of eighteen descriptions started with "Use when the owner says nb-...". A
  reader, or a client choosing a module, saw an alias before the situation.
- Public entry text used private terms ("owner", MAIN) and long sentences.
- `tasks/` held a maintainer to-do list and `docs/reports/paid-run-plan.md` a maintainer
  plan; neither is product content.
- `docs/COMPATIBILITY.md` showed every distribution cell as `NOT_PUBLISHED` while the
  README tells users to install the Claude Code and Codex plugins.

## What changes

- `skills/nobrainer-tech-flow/SKILL.md`: every non-trivial task ends with a fenced
  `Delivered` / `Checked` (command or check -> observed result) / `Not checked` (item -
  reason, or None) block. A listed gap means done with gaps, not done: the MCP
  `DONE_WITH_GAPS` verdict. The verify gate adds: before done, list each place the task
  touched where docs and code disagree.
- `scripts/validate_skills.py --suite` fails when the entry skill loses the block, a
  heading, the heading order, the `->` pairing or the `DONE_WITH_GAPS` meaning.
  `tests/test_handoff_block.py` covers each failure.
- Descriptions of all modules except `nobrainer-decide` (already intent-first) lead with
  the situation and end with their aliases. Every alias the validator and tests require is
  still present; the `Use when` prefix and the 1024-character limit hold.
- Entry skill prose says "the user" and "main agent"; one line maps them to "owner" and
  MAIN, which the references still use. Machine tokens (`OWNER_DECISION_REQUIRED`,
  `OWNER_DECISION_CHANGED`) are unchanged. The entry-skill size test allows 250 lines and
  1900 words (was 240 and 1750) for the new block.
- README: shorter top-section sentences, the handoff block in "What it does", no Jev or
  Laya node in the workflow chart (they stay optional and documented in
  `docs/HOW_IT_WORKS.md` and the optional-decisions reference), and "What's new in 2.8.0".
- `tasks/` and `docs/reports/paid-run-plan.md` are untracked and ignored; history is not
  rewritten. Links to them in `docs/TESTING.md`, the quality report, its generator and
  `docs/specs/goal-driven-delivery.spec.md` now say the material is kept outside this
  repository.
- `docs/COMPATIBILITY.md`: the current source version is 2.8.0 (the page still said
  2.1.1). A new "Distribution channels" table records the GitHub release, npm and both
  repository marketplaces as `DISTRIBUTED`, and the Claude and OpenAI plugin directories
  and the other client registries as `NOT_PUBLISHED`. Automatic routing stays unverified.

## Not changed

- The MCP server code and its pinned guidance cards (`mcp/content/SOURCE.json`,
  `mcp/src/generated/cards.json`) still describe 2.7.3. Re-pinning the cards is a separate
  step after the tag, as in earlier releases.
- No skill was merged, added or retired.

## Verification record

- Marketplace readback before the release, 2026-10-28: Claude Code `2.1.310` with an
  empty `CLAUDE_CONFIG_DIR` and Codex `0.163.0` with an empty `CODEX_HOME` each added
  `nobrainer-tech/nobrainer-tech-flow` and installed `nobrainer-tech-flow@nobrainer-tech`
  at version 2.7.3 from the default branch. The same readback for 2.8.0 follows the merge
  ([releasing](../RELEASING.md), step 3).
- `python3 scripts/validate_skills.py` and `--suite` pass.
- `python3 -m unittest discover -s tests`: 617 tests OK, 5 skipped (611 before this release,
  plus six handoff-block tests).
- MCP `npm test` (unchanged server): 254 tests, 252 pass, 0 fail, 2 skipped.
- `git diff --check` is clean.
