Skip to content

feat(output-assay): add witness scaffold, corpus, and report CLI#104

Open
Haserjian wants to merge 29 commits into
mainfrom
feat/output-assay-stack-2026-05-01
Open

feat(output-assay): add witness scaffold, corpus, and report CLI#104
Haserjian wants to merge 29 commits into
mainfrom
feat/output-assay-stack-2026-05-01

Conversation

@Haserjian
Copy link
Copy Markdown
Owner

@Haserjian Haserjian commented May 1, 2026

Summary

  • add the Output Assay calibration specs, reconciliation draft, fixture corpus, and contract tests
  • add the local Output Assay scaffold with deterministic run stamping, guardian validation, parity fields, and staged extraction failures
  • add operator-facing report rendering and the assay output-assay CLI surface
  • exercise Output Assay receipts inside the reviewer-packet e2e path
  • add the invariant-accounting v0 baseline spec, primitives, and focused tests that ship in this branch

Validation

  • /Users/timmybhaserjian/assay/.venv/bin/python -m pytest tests/assay/test_output_assay_scaffold.py tests/assay/test_output_assay_report.py tests/contracts/test_output_assay_calibration_fixtures.py tests/e2e/test_reviewer_packet_evidence_sprint.py -q
  • 71 passed

Scope note

  • this PR is still centered on Output Assay, but it also includes the first invariant-accounting baseline through docs/specs/INVARIANT_ACCOUNTING_V0.md, src/assay/invariants.py, and tests/assay/test_invariant_accounting.py

Copilot AI review requested due to automatic review settings May 1, 2026 17:30
@github-actions
Copy link
Copy Markdown

github-actions Bot commented May 1, 2026

AgentMesh Lineage Check

Lineage coverage: 0/29 commits (0%)

No AgentMesh-Episode: trailers found.
Install AgentMesh to enable commit lineage tracking.

Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds an initial “Output Assay” local-only scaffold (draft validation → deterministic stamping → deterministic Guardian gating) plus a calibration fixture corpus and operator-facing report/CLI wiring, and threads the resulting receipts through the reviewer-packet e2e path.

Changes:

  • Introduces Output Assay models/guardian/analyzer/report modules and a new assay output-assay CLI command.
  • Adds Output Assay calibration fixtures (manifest + 20-fixture corpus) and contract tests to enforce fixture shape/completeness.
  • Adds a small invariant-accounting v0 primitive (evaluate_latency_budget) with tests, and extends reviewer-packet e2e receipts to include Output Assay receipts.

Reviewed changes

Copilot reviewed 77 out of 77 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
docs/specs/INVARIANT_ACCOUNTING_V0.md Spec draft for invariant accounting v0
docs/specs/OUTPUT_ASSAY_CALIBRATION_V0.md Spec draft for Output Assay calibration v0
docs/specs/OUTPUT_ASSAY_RECONCILIATION_V0_DRAFT.md Spec draft for Output Assay noun/projection boundaries
src/assay/commands.py Adds assay output-assay command
src/assay/invariants.py Adds invariant accounting primitives
src/assay/output_assay/init.py Exposes Output Assay public API
src/assay/output_assay/analyzer.py Local draft validation + deterministic stamping pipeline
src/assay/output_assay/guardian.py Deterministic local Guardian gating
src/assay/output_assay/models.py Pydantic models for draft/run/failure
src/assay/output_assay/report.py Operator report rendering + fail-on helpers
tests/assay/test_invariant_accounting.py Tests for invariant accounting
tests/assay/test_output_assay_report.py Tests report rendering + CLI wiring
tests/assay/test_output_assay_scaffold.py Tests for analyzer scaffold behavior
tests/contracts/test_output_assay_calibration_fixtures.py Contract tests for fixture corpus
tests/e2e/test_reviewer_packet_evidence_sprint.py Adds Output Assay receipts into e2e pack
tests/fixtures/output_assay/README.md Fixture corpus README
tests/fixtures/output_assay/manifest.json Fixture corpus manifest
tests/fixtures/output_assay/business_artifacts/oa_301_status_update_mixed/artifact.md Business fixture artifact
tests/fixtures/output_assay/business_artifacts/oa_301_status_update_mixed/expected_run.json Business fixture golden run
tests/fixtures/output_assay/business_artifacts/oa_301_status_update_mixed/fixture.json Business fixture metadata
tests/fixtures/output_assay/business_artifacts/oa_302_decision_memo_mixed/artifact.md Business fixture artifact
tests/fixtures/output_assay/business_artifacts/oa_302_decision_memo_mixed/expected_run.json Business fixture golden run
tests/fixtures/output_assay/business_artifacts/oa_302_decision_memo_mixed/fixture.json Business fixture metadata
tests/fixtures/output_assay/business_artifacts/oa_303_business_insight_brief_mixed/artifact.md Business fixture artifact
tests/fixtures/output_assay/business_artifacts/oa_303_business_insight_brief_mixed/expected_run.json Business fixture golden run
tests/fixtures/output_assay/business_artifacts/oa_303_business_insight_brief_mixed/fixture.json Business fixture metadata
tests/fixtures/output_assay/mixed_quality/oa_201_claim_like_example/artifact.md Mixed-quality fixture artifact
tests/fixtures/output_assay/mixed_quality/oa_201_claim_like_example/expected_run.json Mixed-quality fixture golden run
tests/fixtures/output_assay/mixed_quality/oa_201_claim_like_example/fixture.json Mixed-quality fixture metadata
tests/fixtures/output_assay/mixed_quality/oa_202_partial_evidence_brief/artifact.md Mixed-quality fixture artifact
tests/fixtures/output_assay/mixed_quality/oa_202_partial_evidence_brief/expected_run.json Mixed-quality fixture golden run
tests/fixtures/output_assay/mixed_quality/oa_202_partial_evidence_brief/fixture.json Mixed-quality fixture metadata
tests/fixtures/output_assay/mixed_quality/oa_203_evidence_quote_boundary/artifact.md Mixed-quality fixture artifact
tests/fixtures/output_assay/mixed_quality/oa_203_evidence_quote_boundary/expected_run.json Mixed-quality fixture golden run
tests/fixtures/output_assay/mixed_quality/oa_203_evidence_quote_boundary/fixture.json Mixed-quality fixture metadata
tests/fixtures/output_assay/mixed_quality/oa_204_ambiguous_stance_argument/artifact.md Mixed-quality fixture artifact
tests/fixtures/output_assay/mixed_quality/oa_204_ambiguous_stance_argument/expected_run.json Mixed-quality fixture golden run
tests/fixtures/output_assay/mixed_quality/oa_204_ambiguous_stance_argument/fixture.json Mixed-quality fixture metadata
tests/fixtures/output_assay/mixed_quality/oa_205_verify_status_boundary/artifact.md Mixed-quality fixture artifact
tests/fixtures/output_assay/mixed_quality/oa_205_verify_status_boundary/expected_run.json Mixed-quality fixture golden run
tests/fixtures/output_assay/mixed_quality/oa_205_verify_status_boundary/fixture.json Mixed-quality fixture metadata
tests/fixtures/output_assay/negative_controls/oa_101_output_assay_duplicate_spec/artifact.md Negative-control fixture artifact
tests/fixtures/output_assay/negative_controls/oa_101_output_assay_duplicate_spec/expected_run.json Negative-control fixture golden run
tests/fixtures/output_assay/negative_controls/oa_101_output_assay_duplicate_spec/fixture.json Negative-control fixture metadata
tests/fixtures/output_assay/negative_controls/oa_102_unanchorable_extraction/artifact.md Negative-control fixture artifact
tests/fixtures/output_assay/negative_controls/oa_102_unanchorable_extraction/expected_run.json Negative-control fixture golden run
tests/fixtures/output_assay/negative_controls/oa_102_unanchorable_extraction/fixture.json Negative-control fixture metadata
tests/fixtures/output_assay/negative_controls/oa_103_prompt_injection_bait/artifact.md Negative-control fixture artifact
tests/fixtures/output_assay/negative_controls/oa_103_prompt_injection_bait/expected_run.json Negative-control fixture golden run
tests/fixtures/output_assay/negative_controls/oa_103_prompt_injection_bait/fixture.json Negative-control fixture metadata
tests/fixtures/output_assay/negative_controls/oa_104_author_judgment_bait/artifact.md Negative-control fixture artifact
tests/fixtures/output_assay/negative_controls/oa_104_author_judgment_bait/expected_run.json Negative-control fixture golden run
tests/fixtures/output_assay/negative_controls/oa_104_author_judgment_bait/fixture.json Negative-control fixture metadata
tests/fixtures/output_assay/negative_controls/oa_105_failed_extraction_refusal/artifact.md Negative-control fixture artifact
tests/fixtures/output_assay/negative_controls/oa_105_failed_extraction_refusal/expected_run.json Negative-control fixture golden run
tests/fixtures/output_assay/negative_controls/oa_105_failed_extraction_refusal/fixture.json Negative-control fixture metadata
tests/fixtures/output_assay/non_claim_artifacts/oa_401_support_note/artifact.md Non-claim fixture artifact
tests/fixtures/output_assay/non_claim_artifacts/oa_401_support_note/expected_run.json Non-claim fixture golden run
tests/fixtures/output_assay/non_claim_artifacts/oa_401_support_note/fixture.json Non-claim fixture metadata
tests/fixtures/output_assay/non_claim_artifacts/oa_402_brainstorm/artifact.md Non-claim fixture artifact
tests/fixtures/output_assay/non_claim_artifacts/oa_402_brainstorm/expected_run.json Non-claim fixture golden run
tests/fixtures/output_assay/non_claim_artifacts/oa_402_brainstorm/fixture.json Non-claim fixture metadata
tests/fixtures/output_assay/positive_controls/oa_001_clear_claim/artifact.md Positive-control fixture artifact
tests/fixtures/output_assay/positive_controls/oa_001_clear_claim/expected_run.json Positive-control fixture golden run
tests/fixtures/output_assay/positive_controls/oa_001_clear_claim/fixture.json Positive-control fixture metadata
tests/fixtures/output_assay/positive_controls/oa_002_kernel_constitutional_rules/artifact.md Positive-control fixture artifact
tests/fixtures/output_assay/positive_controls/oa_002_kernel_constitutional_rules/expected_run.json Positive-control fixture golden run
tests/fixtures/output_assay/positive_controls/oa_002_kernel_constitutional_rules/fixture.json Positive-control fixture metadata
tests/fixtures/output_assay/positive_controls/oa_003_compiled_packet_claim_bindings/artifact.md Positive-control fixture artifact
tests/fixtures/output_assay/positive_controls/oa_003_compiled_packet_claim_bindings/expected_run.json Positive-control fixture golden run
tests/fixtures/output_assay/positive_controls/oa_003_compiled_packet_claim_bindings/fixture.json Positive-control fixture metadata
tests/fixtures/output_assay/positive_controls/oa_004_observation_not_assertion_boundary/artifact.md Positive-control fixture artifact
tests/fixtures/output_assay/positive_controls/oa_004_observation_not_assertion_boundary/expected_run.json Positive-control fixture golden run
tests/fixtures/output_assay/positive_controls/oa_004_observation_not_assertion_boundary/fixture.json Positive-control fixture metadata
tests/fixtures/output_assay/positive_controls/oa_005_verification_order_plan/artifact.md Positive-control fixture artifact
tests/fixtures/output_assay/positive_controls/oa_005_verification_order_plan/expected_run.json Positive-control fixture golden run
tests/fixtures/output_assay/positive_controls/oa_005_verification_order_plan/fixture.json Positive-control fixture metadata

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +131 to +151
expected = (
"# OUTPUT ASSAY REPORT\n"
"\n"
"Run:\n"
" status: extraction_failure\n"
f" artifact_hash: {result.artifact_hash}\n"
f" failure_id: {result.failure_id}\n"
" truth_verification: performed=false tier=internal_support_only\n"
"\n"
"Failure:\n"
" stage: draft_validation\n"
" failure_modes: schema_validation_failed\n"
" summary: The system failed to produce a trustworthy Output Assay run artifact during local draft validation.\n"
" errors:\n"
" - (root): 'observed_units' is a required property\n"
"\n"
"Decision:\n"
" quarantine (no trustworthy run artifact produced)"
)

assert report == expected
@Haserjian Haserjian changed the title feat(output-assay): add local witness scaffold and report CLI feat(output-assay): add witness scaffold, corpus, and report CLI May 1, 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.

2 participants