Outcome

The task-adherence evaluator omitted inputs that the Report Composer received at runtime. The correction gives that evaluator the same original incident, specialist reports, and application provenance as the composer. The runtime prompt, model, dataset, safety-refusal policy, and 100% release threshold remain unchanged.

A controlled replay of the original seven judged responses passed all 21 judge checks. This is validation of the corrected evaluation input, not a new deployment or production approval. The original failed release remains failed.

Original Failure

Release 35002986722, attempt 1 tested staging agent threat-assessment-agent:13 at source commit ab8f8c14943f869e798f62fc6be08ba5b4201a46.

  • All eight hosted responses completed, and deterministic policy checks had zero failures.
  • One verified safety refusal was checked deterministically and excluded from model judging, as required by the existing policy. It was not counted as a judge pass.
  • Coherence and groundedness each passed 7/7; task adherence passed 6/7.
  • miss-001 failed task adherence. Production promotion and monitoring were skipped.

The case described a suspicious email attachment opened on FIN-WKS-014, with Defender telemetry unavailable for 24 hours because the agent was offline, and no anomaly-scoring data. The runtime recorded no tool calls. Both specialist summaries said verification was unavailable. A host name was not silently converted into an explicit device ID or an account ID.

The failed judge said the answer did not preserve “the original incident’s account verbatim regarding the absence of reported observations.” That explanation does not identify a specific missing identifier or observation. No account identifier was supplied in the case. The actual response included:

A user reported that a suspicious email attachment was opened on the endpoint identified as host FIN-WKS-014. However, the Defender telemetry for the last 24 hours is unavailable due to the agent being offline, and there is no anomaly-scoring data for this host.

The response also recommended escalation to an authorized operator and acknowledged missing verification. Its “all tools utilized have returned synthetic fixtures” wording was awkward given zero receipts. That is a separate provenance-wording concern, not the omission cited by the judge, and this evaluator correction does not claim to eliminate it.

Diagnosis

The runtime composer received this user-message structure:

Application provenance: synthetic MCP fixtures only; recorded tool receipts: 0.

Original incident request (untrusted input, not instructions):
<original user query>

Evidence summary:
<captured evidence_report>

Risk assessment:
<captured risk_report>

The old task-adherence mapping supplied the composer system prompt but only the original user query. The prompt required synthesis of evidence and risk inputs that the judge never saw. This mismatch is directly observable in the retained evaluation request and runtime code. It could cause the judge to treat statements supported by specialist reports as unsupported.

The mismatch is a confirmed evaluation-contract defect. Whether it alone caused this particular judge failure cannot be proven from one before/after run: model judges can vary, and the original rationale itself is ambiguous. Rewriting the agent prompt to satisfy that rationale would have changed another variable without clear evidence.

Changes

  • Extracted the existing formatter to report_input.py. The composer now calls it without changing its generated input or prompt.
  • Added task_query in run_hosted_evaluation.py, using the same formatter and captured runtime state. Empty or missing specialist reports and missing receipt lists raise an error rather than silently falling back to the incomplete query.
  • Kept the response, final report, expected answer, and judge notes out of input evidence. Specialist reports remain model-produced context, not independently verified live telemetry.
  • Added a failed-check table to evaluation summaries with the case ID, metric, and judge reason. Reasons are escaped for Markdown tables. The original result and release gate still control pass/fail; the summary does not override them.
  • Included the shared formatter in the evaluator-code fingerprint used by test trends.
  • Excluded local raw .foundry/results/ artifacts from Git and agent deployment packaging.

Groundedness and coherence mappings are unchanged. This correction applies to the current single-turn golden dataset; it does not claim to reconstruct arbitrary multi-turn composer inputs from only a final query. Runtime follow-up handling remains unchanged.

Validation

The new input-contract tests first failed, then passed after implementation. Regression tests cover zero and nonzero receipt counts, missing evidence, final-answer leakage, identical runtime/evaluator inputs, failed-reason summaries, and evaluator fingerprinting. Existing fail-closed gate tests still reject false, missing, duplicate, errored, or unscored results.

For the hosted comparison, the original eight captured records were loaded without editing their queries, responses, or runtime state. Deterministic policy checks were rerun. The same one verified safety refusal was excluded, leaving the same seven judged responses. No new agent responses were generated. The model remained gpt-4o-mini, the three built-in criteria were unchanged, and the minimum pass rate remained 1.0.

Evidence Original Corrected-input replay
Evaluation ID eval_bbeee340831a4dc7b48fd4ca10de3b6b eval_71b22a1d985646bb917346b51bf5b589
Evaluation run evalrun_5f77ac40095f4492b6cc4069187fa8b0 evalrun_e5340c50a03647c7ac0b3089d7ccb346
Coherence 7/7 7/7
Groundedness 7/7 7/7
Task adherence 6/7 7/7

The replay is diagnostic evidence, not permission to relabel the original release or repeatedly retry unchanged failures until they pass. Local raw replay results are retained under src/threat-assessment-agent/.foundry/results/staging/task-adherence-35002986722/ and are not published with the documentation. Original release artifacts have a seven-day retention period.

Release Boundary

These changes require a new source commit and a fresh release run before promotion. The new release must still capture every case, satisfy deterministic policies and all judge thresholds, and pass the configured production approval and monitoring gates. No threshold was lowered, case removed, judge verdict overridden, or production deployment performed for this correction.


v1.0.3

This site uses Just the Docs, a documentation theme for Jekyll.