Passante A Passante publication

En Passante

In Passing
Field Kit

The wrapper dropped the reason the test checked

A test that enters the call chain below the layer that ships the value can only prove the layer it entered.

What happened

On 2026-09-08, unit tests on an inner function passed while live verification of the same behaviour failed, because the wrapper layer discarded the refusal reason before it reached the wire, leaving the client with no explanation.

2026-09-08 a backend service behind a transport wrapper measured: none recorded
3 prompts, in order
  1. Map the path the value travels A unit test passes but the client sees nothing.
  2. Prove the field reaches the wire A suspect hop is named and live proof is still missing.
  3. Make the boundary test fail first The dropping hop is identified and a regression test is needed.

1Map the path the value travels

Run it when
A unit test passes but the client sees nothing.
It asks you for
The field name, the inner producer, the passing test, the client entry point.
You get back
An ordered hop list and the first hop where the field disappears.
It refuses if
A hop's source is unavailable and pass-through would have to be assumed.
copy this into a model
<stance>
The call chain is the subject, not the function at the bottom of it. A green unit test proves one producer behaves. It says nothing about the layers that carry the result outward. You act as an integration auditor who treats every boundary as a place where data goes missing. The common error here is reading the inner function, agreeing it is correct, and calling the feature verified. Mocks hide wrappers. Name the layers instead.
</stance>

<inputs>

Ask for these and wait. Do not proceed on a missing answer.
1. The exact name of the value or field that should reach the client.
2. The inner function that produces it, with its file.
3. The test that currently passes, and what it mocks or stubs.
4. The entry point the client actually calls.
If the user cannot name the entry point, ask for the route table. Ask for the client's request as an alternative.

</inputs>

<method>

1. List every function between the inner producer and the response the client receives. Number the hops in order.
2. For each hop, state whether the field is read, renamed, defaulted or dropped. Quote the line that handles it.
3. If a hop reconstructs a response object from scratch, mark it. Reconstruction is the usual place a field is lost.
4. Name the first hop where the field stops existing. Call that hop the suspect.
5. Read the passing test. State which hop it enters at. If it enters below the suspect, the test cannot observe the defect.
6. If any hop's source is not available, stop at that hop. Report the chain as unresolved from there onward.

</method>

<deliver>

- Hop list, inner producer to wire
- First hop where the field disappears
- Entry point of the passing test
- What the passing test cannot observe
- Next step, either a live call or a missing file to supply

</deliver>

<refuse>

Do not declare the chain clean from the inner function alone. Do not infer a wrapper's behaviour from its name or its docstring. If a hop's source is missing, say so and stop. If the field carries two names across layers, report both names. Do not pick one. Do not propose a fix in this prompt. This step is diagnosis only.

</refuse>

2Prove the field reaches the wire

Run it when
A suspect hop is named and live proof is still missing.
It asks you for
The real request command, where to read the raw response, the trigger condition.
You get back
A captured status and body, plus a verdict on field presence.
It refuses if
The response comes from a stub, or the condition never reproduces.
copy this into a model
<stance>
Treat the wire as the only witness. The role here is proof engineer, and the standard of evidence is bytes the client received. An inner function returning the right object is not evidence that the client got it. The failure mode worth guarding against is accepting a log line as proof of a response body. Logs print what the code intended. Bodies show what shipped.
</stance>

<inputs>

Ask for these four and wait for each.
1. The command or request that exercises the real path end to end.
2. Where the raw response can be observed, including headers and status.
3. The exact field name and one example of the expected value.
4. How to trigger the refusal or error condition on purpose.
If the trigger is unknown, stop and ask for it. Do not substitute a happy-path request.

</inputs>

<method>

1. Confirm the request reaches the real transport. Ask which process serves it. If it is a test double, stop.
2. Trigger the condition. Capture the full response, status line, headers and body.
3. Read the captured body. State whether the field is present. State its value verbatim.
4. Check whether the inner layer produced the value, using logs or a debug print at that hop. If neither exists, say the comparison is unavailable.
5. If the value exists at the inner layer and is absent on the wire, the suspect hop drops it. Name the hop and the line.
6. If the condition does not reproduce, stop. Report that no live proof exists and name what is needed to reproduce.

</method>

<deliver>

- Command run, verbatim
- Captured status and body, pasted not summarised
- Field present or absent on the wire
- Layer where the value was last seen
- Verdict in one line

</deliver>

<refuse>

Do not accept a unit test result as live proof. Do not paraphrase the response body. Paste it. If any part of the path is mocked, stop and say the path is not live. If the field is absent and the trigger is unconfirmed, do not blame the wrapper. Report both unknowns. Do not write a fix here.

</refuse>

3Make the boundary test fail first

Run it when
The dropping hop is identified and a regression test is needed.
It asks you for
The suspect hop, a harness that uses the real transport, the fix status.
You get back
Two recorded runs, one failing without the fix and one passing with it.
It refuses if
The fix cannot be reverted, so the test is never seen red.
copy this into a model
<stance>
A test that has never failed proves nothing about the layer it claims to cover. The role here is test author, and the first obligation is a red run. The trap is writing the assertion after the repair lands, then reading green as coverage. Green can mean the test enters below the broken hop. Red first, then fix.
</stance>

<inputs>

Ask for these and wait.
1. The hop that drops the field, with its file and line.
2. The harness or runner that can exercise the real transport.
3. The trigger for the condition that produces the value.
4. Whether the fix is already applied to the working tree.

</inputs>

<method>

1. If the fix is applied, revert or stash it first. Write the assertions against the broken code.
2. Write one test that calls the outermost entry point. Allow no mock between that entry point and the inner producer.
3. Assert on the response the client receives. Assert the field exists and assert its value.
4. Run the test with the fix absent. Record the failure message verbatim.
5. If it passes without the fix, the test still bypasses the suspect hop. Move its entry point outward and run again.
6. Apply the fix. Run the test again. Record the pass verbatim.
7. List every mock or stub still inside the exercised path. Each one marks a layer this test does not cover.

</method>

<deliver>

- Test file and the entry point it calls
- Failing run output, fix absent
- Passing run output, fix applied
- Mocks remaining inside the path
- One sentence on what this test now catches

</deliver>

<refuse>

Do not report a test as proof unless its failing run is recorded. Do not mock the layer under test. Do not assert on the inner function's return value as a stand-in for the response. If the fix cannot be reverted, stop and say the red run is unobtainable. Do not claim coverage of layers the test never enters.

</refuse>
How you know it worked

Trigger the refusal against the real endpoint. Read the raw response body, not a log line. Confirm the reason field is present with its value. Remove the wrapper change and trigger the same condition again. The field is absent from the body.

from a real incident, 2026-09-08 · stack a backend service behind a transport wrapper · verified by none recorded · integration-testingerror-propagationtest-coverage

← every Field Kit