# Photo Mode Tournament Voting Bridge

`@v2/photo-mode-tournament-voting-bridge` closes the §133 Photo Mode tournament
and community jury voting integration. It composes `@kuanyin/precognition` and
`@themis/voting` into the `v2.photo-mode-tournament-voting-manifest` consumed by
`V2PhotoMode`, `V2ReplayTheater`, `V2CommunityHub`, and `V2CompanionApp`.

## Source Packages

- `@kuanyin/precognition` owns the submission moderation pre-pass over Photo
  Mode titles, captions, extracted text, and tags.
- `@themis/voting` owns ranked-choice jury ballots, approval voting, winner
  certification, and the reciprocal `v2.photo-mode-tournament-voting-profile`.

## Voting Profile

The reciprocal Themis profile is `v2.photo-mode-tournament-voting-profile`. Each
publishable tournament manifest requires:

- Kuanyin moderation before voting.
- At least two moderation-cleared submissions.
- Ranked-choice jury ballots through `RankedChoiceVotingEngine`.
- Approval ballots through `ApprovalVotingEngine`.
- Certified winners from the V2-local aggregation of ranked Borda points plus
  approval satisfaction.

The gRPC surface is `libs/proto/v2/photo-mode/photo-mode-tournament.proto`;
event topics are `v2.photo-mode.submission.moderated`,
`v2.photo-mode.vote.ranked.cast`, `v2.photo-mode.vote.approval.cast`, and
`v2.photo-mode.winners.certified`.

## Runtime Boundary

The bridge is off rollback, server-authoritative, and gallery/companion-only. It
rejects live gameplay frame RPCs and cannot affect deterministic match
simulation, Photo Mode camera capture, replay playback, AI, inventory, damage,
or competitive frame outcomes.

CI ownership is enforced by
`V2/ue/Tools/check-v2-photo-mode-tournament-voting-bridge.py`.
