# Stopping short: leaving part of the reported problem failing, and saying so

*Tests and verification*: one of the ways AI coding agents bloat software, from lessloc's [pattern catalog](https://lessloc.org/patterns/index.md). lessloc catches it as [`unfinished`](https://lessloc.org/guide/reference.md#tier-1): in a turn that changed code, the agent's last reply is read sentence by sentence, with headings and lead-ins speaking for what is under them.

## What makes stopping short (part of the problem left failing) a bad practice?

The standard that calls it a bad practice: ISO/IEC 25010 functional completeness.

## What does lessloc do about stopping short (part of the problem left failing)?

lessloc catches it as [`unfinished`](https://lessloc.org/guide/reference.md#tier-1): in a turn that changed code, the agent's last reply is read sentence by sentence, with headings and lead-ins speaking for what is under them. An explicit marker that something is left broken ("Not fixed:", "Known limitation:") with a failure stated now, a neutral scope note ("Not changed:", "I left it alone") with a present-tense defect tied to the request (a name from its code, or the report's own example), the report's own example still failing, or the same problem suspected elsewhere and unchecked, holds the turn once, quoting the sentence. A fixed state, a cause, a condition, an offer, a tool's report or housekeeping never counts.

- `unfinished` (tier 1): In a turn that changed code, the agent's last reply says part of the reported problem still fails, or that the same problem may be elsewhere, unchecked.

## Related patterns

The other patterns in [Tests and verification](https://lessloc.org/patterns/index.md#tests-and-verification):

- [Behavior added with no test changed in the same change](https://lessloc.org/patterns/untested.md): lessloc gives every session the rule: new behavior gets one focused test.
- [Tests that assert nothing, or assert a constant](https://lessloc.org/patterns/empty-test.md): lessloc catches it as `empty-test`.
- [Deleted, skipped or force-passed tests](https://lessloc.org/patterns/weakened-tests.md): lessloc catches it as `weakened-tests`.
- [Test-only branches in production code](https://lessloc.org/patterns/test-logic.md): lessloc catches it as `test-logic`.
- [Tests that mock the code they test](https://lessloc.org/patterns/mocked-subject.md): lessloc catches it as `empty-test`.
- [Production code that branches on a value from the tests](https://lessloc.org/patterns/test-shaped.md): lessloc catches it as `test-logic`.
- [Stopping short: a requested function never written](https://lessloc.org/patterns/unaddressed.md): lessloc catches it as `unaddressed`: names a request asks to exist ("add a `--status` flag", "implement `export_csv()`") are looked for in the final repository; one that appears nowhere holds the turn.
- [Saying "done" without a passing run on the final state](https://lessloc.org/patterns/index.md#unverified): lessloc catches it as `tests-failed` and `unverified`: the agent's own test runs, as its host reported them, are the evidence for the exact tree; a run that fails on the final state, or a change to how the tests run, holds the turn once, and a final state no run verified is written to the record; `lessloc test`, `verify` and `ci` record evidence too.
- [A refactor that changes existing tests](https://lessloc.org/patterns/refactor-tests.md): lessloc catches it as `refactor-tests`.
