Athlete comms test harness
What this is
This harness is a repeatable dry-run review workflow for athlete-comms.
It is not a unit test framework. It is a structured evaluation harness for a language-review gate.
Why not a unit test framework
A unit test framework is a good fit when behavior is deterministic code with stable inputs and exact outputs.
That is not the current system.
The current athlete-comms implementation is a policy-defined review role. The important questions are:
- did it approve, rewrite, or block correctly
- did it preserve coaching meaning
- did it catch internal chatter and operator leakage
- did it avoid turning dry-run review into delivery
Those are best tested first with repeatable dry-run fixtures and shadow review.
Current configuration
The harness is configured by Markdown artifacts:
- global policy:
shared/comms/athlete-comms-policy.md - athlete-local wording profile:
athlete/comms-profile.md - test protocol:
shared/comms/athlete-comms-test-protocol.md - test fixtures:
shared/comms/athlete-comms-test-fixtures.md - handoff package template:
shared/comms/athlete-comms-handoff-template.md - run log template:
shared/comms/athlete-comms-test-run-log-template.md
How to run a test
- pick a fixture or real draft
- fill in the handoff template
- send that package to
athlete-commsin dry-run mode - capture the returned review result
- compare actual result against expected result
- record the outcome in a test run log
Test modes
Fixture mode
Use known examples with expected outcomes.
Good for regression checks after policy changes.
Shadow mode
Use a real outbound draft but keep delivery disabled.
Good for validating the role against live coaching work without live athlete risk.
Adversarial mode
Use intentionally bad candidate bodies.
Good for checking block behavior and leakage detection.
Minimum acceptance standard
Before trusting the gate operationally, it should repeatedly do all of the following:
- approve already-clean athlete messages
- rewrite weak but salvageable messages
- block internal process chatter
- block operator leakage
- preserve technical meaning
- keep
send_allowed: falsein every dry-run test
When to consider automation
If the dry-run harness proves useful and stable, the next layer could be a scripted regression runner that:
- loads fixtures
- dispatches them to
athlete-comms - parses the YAML response
- compares actual versus expected result
- writes a summary report
That would be automation around the harness, not the first step.
Recommendation
Start with the Markdown dry-run harness now. Only add a unit-test-style scripted runner after we have confidence that the role behavior and result schema are stable.