Skip to content

Fix permissibility-split policy violation metrics - #276

Merged
AaronAspinwall123 merged 6 commits into
responsibleai:mainfrom
ricfog:codex/fix-permissibility-split-metrics
Jul 29, 2026
Merged

Fix permissibility-split policy violation metrics#276
AaronAspinwall123 merged 6 commits into
responsibleai:mainfrom
ricfog:codex/fix-permissibility-split-metrics

Conversation

@ricfog

@ricfog ricfog commented Jul 23, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • derive permissible and non-permissible policy violations from relevant node judgments
  • aggregate each permissibility bucket once per conversation using any-violation semantics
  • exclude conversations with no relevant behaviors in a bucket from that bucket's denominator
  • apply the same metric definition in the CLI/results path and viewer

Root cause

The CLI conditioned the overall policy_violation verdict on the test case's originating permissibility label. The viewer grouped judgments by node permissibility but averaged individual nodes rather than computing one Boolean per conversation.

Neither implementation matched the intended definition:

  • permissible: any relevant permissible behavior was violated
  • non-permissible: any relevant non-permissible behavior was violated

Impact

Overall policy_violation remains unchanged. This does not modify judge prompts, schemas, or the evaluation pipeline.

Historical results can be recalculated from their existing node judgments and taxonomy.

Validation

  • Python results, CLI, and benchmark tests: 18 passed
  • Viewer metric regression tests: 2 passed
  • Svelte check: 0 errors

Fixes #272

@ricfog
ricfog marked this pull request as ready for review July 24, 2026 18:44
AaronAspinwall123 and others added 4 commits July 28, 2026 13:42
The viewer stop-reason label is 'Refused before Inference' (capital I, result-view.ts:20), but three assertions in test_load_run_page_data_exposes_refusal_stop_reason_display still expected lowercase 'inference'. This mismatch is inherited from main (present at base 7a6e95b, from responsibleai#266's terminology cleanup) and fails Tier 1 unit tests. Align the test to the code label; mirrors the fix in a403385.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Copilot-Session: ef089fbc-c563-427f-b8e1-f87370e98c76
…plit

export_suite_results.py still computed not_permissible_policy_violation_rate by row-filtering on the originating permissibility label and reading the row-level policy_violation verdict - the overrefusal-contaminated approach issue responsibleai#272 calls out. Reuse compute_policy_violation_by_permissibility so the export matches the CLI/results and viewer definition: one vote per conversation over non-permissible nodes only. Keeps permissible_overrefusal_rate on the ok-filtered permissible rows.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Copilot-Session: ef089fbc-c563-427f-b8e1-f87370e98c76
@AaronAspinwall123
AaronAspinwall123 merged commit c26c842 into responsibleai:main Jul 29, 2026
12 checks passed
ango10 pushed a commit that referenced this pull request Jul 29, 2026
Pull latest from main: science regression gate (#263) and
permissibility-split policy violation metrics fix (#276).

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 1806a109-7c72-4b6b-bc14-5dd5443280e8
ango10 pushed a commit that referenced this pull request Jul 29, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: Built-in policy_violation ORs over permissible nodes, coupling it with overrefusal and forcing a custom-dimension workaround for ACS A/B evals.

3 participants