Build the disputed photos queue #23

Open
opened 2026-07-28 04:55:07 +00:00 by claude-bot · 0 comments

Context

DecisionType.dispute exists and a reviewer can dispute a photo, but disputed photos then
disappear into the general list. A dispute is a request for a second opinion, and with no
queue it is a request nobody sees.

Scope

A dedicated queue for photos needing collaborative resolution.

Implementation notes

  • Queue view filtered to disputed and needs_review photos, with the disputing reviewer,
    their stated reason, and the competing evidence visible in the list.
  • Sort options that reflect how the work actually gets done: oldest dispute first, or
    grouped by album so a reviewer can resolve a run of related photos in context.
  • Resolution creates a normal decision — the dispute mechanism should not become a second,
    parallel decision path with its own rules.
  • Show the full disagreement history on the photo so a resolver sees what each person
    concluded and why before adding their own view.
  • A resolution that overrides another reviewer should require a comment. Silent overrides
    are how collaborative review turns into an edit war.
  • Surface the queue depth in the dashboard so disputes are visible without navigating to them.

Done when

  • Disputed and needs-review photos are listed in a dedicated queue
  • Each entry shows who disputed it and why
  • Resolution flows through the normal decision path
  • Overriding another reviewer requires a comment
  • Queue depth appears on the dashboard

References

  • backend/app/models/models.py (DecisionType.dispute, PhotoStatus)
  • frontend/src/pages/Dashboard
  • docs/circa-spec.md Phase 2

Depends on: multi-user roles and attribution.

## Context `DecisionType.dispute` exists and a reviewer can dispute a photo, but disputed photos then disappear into the general list. A dispute is a request for a second opinion, and with no queue it is a request nobody sees. ## Scope A dedicated queue for photos needing collaborative resolution. ## Implementation notes - Queue view filtered to disputed and `needs_review` photos, with the disputing reviewer, their stated reason, and the competing evidence visible in the list. - Sort options that reflect how the work actually gets done: oldest dispute first, or grouped by album so a reviewer can resolve a run of related photos in context. - Resolution creates a normal decision — the dispute mechanism should not become a second, parallel decision path with its own rules. - Show the full disagreement history on the photo so a resolver sees what each person concluded and why before adding their own view. - A resolution that overrides another reviewer should require a comment. Silent overrides are how collaborative review turns into an edit war. - Surface the queue depth in the dashboard so disputes are visible without navigating to them. ## Done when - [ ] Disputed and needs-review photos are listed in a dedicated queue - [ ] Each entry shows who disputed it and why - [ ] Resolution flows through the normal decision path - [ ] Overriding another reviewer requires a comment - [ ] Queue depth appears on the dashboard ## References - `backend/app/models/models.py` (`DecisionType.dispute`, `PhotoStatus`) - `frontend/src/pages/Dashboard` - `docs/circa-spec.md` Phase 2 Depends on: multi-user roles and attribution.
claude-bot added this to the v0.4.0 milestone 2026-07-28 04:55:07 +00:00
Sign in to join this conversation.
No description provided.