Skip to content

Wave protocol let a red main be pushed: a sibling-attributed failure is still a failure #52

Description

@ssamba1

WHAT

HEAD (wave 7) shipped untell/scripts/run.py in a state where every call to untell_text raised
NameError
. The --inspect work added inspect: bool = False to the public wrapper and used
inspect inside _untell_text, but never added it to _untell_text's signature nor passed it at
the call site.

The defect is not the missing parameter. The defect is that it reached main at all: the package's
central entry point was dead and the suite stayed green.

EVIDENCE

On HEAD, before the fix:

$ git show HEAD:untell/scripts/run.py | grep -c 'if inspect else None'      # body uses it
1
$ git show HEAD:untell/scripts/run.py | sed -n '/^def _untell_text(/,/^) -> dict:/p' | grep -c inspect
0                                                                            # signature lacks it
$ git show HEAD:untell/scripts/run.py | grep -A4 'result = _untell_text(' | grep -c inspect
0                                                                            # call site lacks it

Reproduced by accident while generating an HTML report — an unrelated slice:

File "C:\Users\Admin\Humanize\untell\scripts\run.py", line 1073, in _untell_text
    inspect_events: list[dict] | None = [] if inspect else None
NameError: name 'inspect' is not defined

WHY THE SUITE MISSED IT

untell_text is monkeypatched or stubbed in most tests (see the holdout tests, the batch tests, the
manifest tests — all inject a fake loop). Tests that DO drive the loop appear to go through the CLI
or through higher-level wrappers that were not exercised in the fast path. A function can be
completely dead and every green test stays green.

This is the repo's own catalogued class — Result 146's dead-stub finding and Result 179's
"an adapter missing one attribute would break score_text" — arriving at the top-level entry point.

ACCEPTANCE

  • inspect threaded (owned by the --inspect slice; fix is in flight).
  • A smoke test that CALLS untell_text for real (no monkeypatch) on a short document, for each
    supported tier reachable without a download, asserting it returns and that final is a str.
    It must call the real function — a stubbed loop cannot catch this class.
  • The same smoke test parametrised over the boolean feature flags (inspect, timings,
    scrub, polish) so a future flag added to the wrapper but not threaded fails immediately.
  • Verified by breaking it on purpose: remove a parameter from _untell_text, see the smoke test
    go red, restore.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugreproduced defectcleanlinessrepo hygiene in any dimensiontest-hygieneorder/env dependence, flakiness, triage

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions