Passante A Passante publication

En Passante

In Passing
Field Kit

Independent review must include human producers

Separation of duties follows the actor who produced the work, regardless of whether that actor is human or software.

What happened

A team workflow let a human perform and approve the same job because its self-approval check applied only to assigned software agents.

2026-09-20 TypeScript · agent teams · job acceptance measured: Producer identity checked across acceptance paths
2 prompts, in order
  1. Follow the producing actor A workflow shows an independent-review label and supports both human and agent jobs.
  2. Challenge the acceptance badge The producer comparison has been unified across the workflow.

1Follow the producing actor

Run it when
A workflow shows an independent-review label and supports both human and agent jobs.
It asks you for
The job records, producer identity rules, reviewer choices and every server acceptance path.
You get back
A map of actor identity checks and any path that permits self-approval.
It refuses if
Do not assume a missing assigned-agent identifier means there is no producer.
copy this into a model
<stance>
Your job is to separate an observed failure from a convincing explanation that has never been checked. Keep the reader's actual system in view. A result is useful when another person can repeat the observation and get a different answer if the proposed repair is wrong.
</stance>

<inputs>
Ask for these before drawing a conclusion. Wait for anything essential that is missing.
1. The job records, producer identity rules, reviewer choices and every server acceptance path.
2. The exact user-visible symptom, including the original output and the time it was observed.
3. The implementation and launch conditions responsible for that output. Read the relevant source in full.
4. What may be changed safely, and which actions require the owner's approval.
5. Any existing verification that could distinguish the proposed cause from the alternatives.
</inputs>

<method>
1. Read how the job represents a human producer and a software producer. Derive the producing actor for each valid job shape before inspecting any approval condition.
2. Follow that identity through parsing, handoffs, settlement and reviewer selection. Look for checks guarded only by the presence of an assigned software agent; a human job can pass around that condition.
3. Inspect normalization of actor identities. Trimming and case handling must match the identity rules rather than create a new way for the same actor to appear different.
4. Check the rule again where acceptance takes effect. A valid job at compile time can be edited afterward. Define one consistent producer comparison for every accepting path and remove impossible choices from the interface.
</method>

<deliver>
- OBSERVED: the behavior actually established, with the output that supports it.
- EXPLANATION: what the observation settles and what remains unknown.
- NEXT ACTION: one bounded action, its owner, and its expected result.
- PROOF: the observation that would establish success, plus the result that would disprove it.
</deliver>

<refuse>
Do not assume a missing assigned-agent identifier means there is no producer.
Do not invent measurements, defaults, source contents, or a successful run. Keep historical results separate from today's observations. Never transmit private inputs or perform a paid or external action just to complete this check. If access or authorization is missing, stop and name the exact missing condition.
</refuse>

2Challenge the acceptance badge

Run it when
The producer comparison has been unified across the workflow.
It asks you for
The actual acceptance operations, actor identity variants and existing human and agent job tests.
You get back
Refusal of self-approval and success of authorized independent approval through each real path.
It refuses if
Do not treat a disabled dropdown as server enforcement.
copy this into a model
<stance>
Your job is to separate an observed failure from a convincing explanation that has never been checked. Keep the reader's actual system in view. A result is useful when another person can repeat the observation and get a different answer if the proposed repair is wrong.
</stance>

<inputs>
Ask for these before drawing a conclusion. Wait for anything essential that is missing.
1. The actual acceptance operations, actor identity variants and existing human and agent job tests.
2. The exact user-visible symptom, including the original output and the time it was observed.
3. The implementation and launch conditions responsible for that output. Read the relevant source in full.
4. What may be changed safely, and which actions require the owner's approval.
5. Any existing verification that could distinguish the proposed cause from the alternatives.
</inputs>

<method>
1. Exercise human-produced and agent-produced jobs through the existing tests of the real accepting operations. Attempt self-approval using the stored identity and the permitted spelling variants.
2. Confirm refusal leaves the job unaccepted and the attempt available for proper review. A rejected message beside an already accepted record would fail the requirement.
3. Accept equivalent work through a different authorized reviewer. This positive case proves the rule has preserved independent review rather than blocked every settlement.
4. Check a stored job changed after initial validation and repeat the acceptance attempt. Read the resulting badge and history. They must describe the reviewer who actually accepted, with no independent-review claim when producer and reviewer match.
</method>

<deliver>
- OBSERVED: the behavior actually established, with the output that supports it.
- EXPLANATION: what the observation settles and what remains unknown.
- NEXT ACTION: one bounded action, its owner, and its expected result.
- PROOF: the observation that would establish success, plus the result that would disprove it.
</deliver>

<refuse>
Do not treat a disabled dropdown as server enforcement.
Do not invent measurements, defaults, source contents, or a successful run. Keep historical results separate from today's observations. Never transmit private inputs or perform a paid or external action just to complete this check. If access or authorization is missing, stop and name the exact missing condition.
</refuse>
How you know it worked

Test both producer types. The same actor must be refused as producer and approver for both human and software jobs, including identity spelling variations. A different authorized reviewer must still succeed. Recheck at acceptance so an edited stored job cannot bypass the rule.

from a real incident, 2026-09-20 · stack TypeScript · agent teams · job acceptance · verified by Producer identity checked across acceptance paths · agentsreviewauthorization

← every Field Kit