Files
fusion/docs/solutions/workflow-learnings
gsxdsm 01ab2400d0 docs(learnings): blinding measures the instrument you picked — rule 5, and where the measurement cannot be taken (#3222)
Extends `blind-the-resolver-to-find-uncovered-conversions.md` rather
than forking a second doc on the same technique.

## Rule 5: blinding measures the instrument you picked, not the site

A suite that never reaches the blinded site reports `0 failed` for the
same reason a covered one does. The outputs are identical. This produced
a **wrong answer twice in one sweep**, both times reading as a finding:

| blinded | suite run | said | actually |
|---|---|---|---|
| `reads.ts` ×3 | `search-excludes-renamed-archive-lane.test.ts` | 3
uncovered | that file unit-tests `liveSearchPredicate` and never runs
`reads.ts`; against `cold-storage-renamed-archive-lane.test.ts` one of
the three is covered |
| `server.ts` ×3 | `reliability-metrics.test.ts` | 3 uncovered | that
file imports `../reliability-metrics`; nothing executes the route at all
|

The `reads.ts` case is the one to remember, because **the misleading
suite was written for that exact conversion**. It proves the
collaborator honours a resolved set — which says nothing about whether
the caller passes one, and can never fail when the call site is blinded.
That gap shipped as a real hole and was closed in #3220.

Doc adds the cheap guard: make the blinded edit obviously fatal (`throw
new Error("x")`) and re-run. Still green means the suite does not reach
the site and the measurement is void.

## Where the measurement cannot be taken

Per #3212's stance that recording *why* something cannot be pinned is a
result, three groups are written down so nobody re-derives them:

- **No TCP PostgreSQL** — `workflow-analytics.ts` / `team-analytics.ts`
(4 resolvers) keep renamed-lane coverage in `.pg` suites. `pgDescribe`
probes **TCP**; `pg_isready` succeeding on a **Unix socket** is not the
same thing. I made exactly this mistake and reported PG as reachable one
round before correcting it — mistaking the two turns 4 skipped suites
into 4 false "uncovered" readings.
- **No injectable seam** — `reads.ts`'s incremental-sync scan composes
Drizzle conditions against `layer.db`. A test there asserts the query
built, not the rows excluded: green, and blind to the bug.
- **Logic inside a route closure** — `server.ts`'s three resolvers sit
in the `/api/health/reliability` handler, which has no route-level test.
The only harness in that package is a mock-the-world shell the slow-test
rule forbids; the alternative is a refactor to expose a seam, which is
its own commit.

## Census

**Unchanged — `CONVERSION QUEUE EMPTY`, `AVAILABLE: 0`.** Documentation
only.

Gates verified green (`check-fnxc-future-dates`,
`lifecycle-column-census --strict`).

No changeset: internal docs, per AGENTS.md.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **Documentation**
* Added guidance for verifying the test instrument used during blinding.
  * Documented fatal-edit reachability checks.
* Added troubleshooting guidance for situations where resolver coverage
cannot be measured.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-07-31 12:28:20 -07:00
..