# Keep Deterministic Results Machine-to-Machine

## Trigger

The fixed processor produced a complete valid 135-record result, but the model-mediated MCP call submitted only 20
records. Prompt strengthening improved tool selection and fetch behavior but could not guarantee lossless serialization
of a large structured payload.

## Expected Behavior

Once deterministic code has created a schema-valid result, the receiving system should validate and ingest that exact
machine artifact without asking a model to reconstruct the payload as tool arguments.

## Actual Behavior

The result crossed an unnecessary model serialization boundary. That boundary introduced truncation, rereads and
retry ambiguity even though both the source fetch and deterministic business processing had already succeeded.

## Root Cause

- Unclear ownership of structured-result transport
- A probabilistic orchestration boundary was placed between deterministic producer and deterministic consumer

## Evidence

- `.project-docs/50-evidence/topics/2026-07-30-superagent-fetch-oss-prompt-experiment.md`
- `.project-docs/50-evidence/topics/2026-07-30-arr2-programmatic-pipeline.md`
- `arr_web/programmatic.py`
- `tests/test_arr_programmatic.py`

## Lesson

Use models to interpret ambiguous inputs or choose work when that is genuinely required. Do not use a model as the
transport encoder for a complete, machine-generated business result. Preserve the original artifact, validate it at the
system boundary, and make the database commit authoritative.

## Action

- Updated the architecture through ADR-004.
- Added programmatic success/failure vertical slices and active-runtime deployment guards.

## Promotion

Promoted to ADR-004, the ARR2.0 architecture documents, deployment contracts and regression tests. No new skill is
needed unless this pattern recurs in another project.
