Repository navigation
Description
Why
Mobile product wants implicit Peer Checker assignment: when a chapter reaches Peer Check without a pre-assigned checker, eligible peers can work the item, and whoever taps Send to Community Review becomes the recorded Peer Checker.
Today the API blocks that flow. When status === peer_check and peerCheckerId is null, ChapterAssignmentPolicy.edit / submit require peerCheckerId === user.id — so nobody can edit, upload verse audio (verse-audio auth uses the same edit policy), or PATCH /chapter-assignments/{id}/submit.
@mattrace-gloo flagged this as an API blocker on the mobile ticket before mobile UI can ship: fluent-mobile#442#issuecomment-5622893731.
Unblocks / related
- Implement Implicit Peer Checker Assignment fluent-mobile#442 — Implicit Peer Checker Assignment (product)
- Engineering write-up: fluent-mobile#442#issuecomment-5622893731
- feat(chapter-assignments): allow open Peer Check edit/submit and assign checker on submit #334 — PR implementing this issue (
Closes #335) - [#442]: Implement implicit Peer Checker assignment fluent-mobile#538 — mobile PR for build(deps-dev): bump vitest from 3.2.7 to 5.0.5 #442 (pairs with API feat(chapter-assignments): allow open Peer Check edit/submit and assign checker on submit #334)
Web uses PM assign for Peer Check today — open Peer Check is new API behavior aligned with mobile, not catch-up to web.
Current state (main)
ChapterAssignmentPolicy.edit/submit:peer_checkrequirespeerCheckerId === user.id- Open Peer Check (
peerCheckerId == null): no translator can upload verse audio, write translated verses, or submit submitChapterAssignmentdoes not take the acting user and does not setpeerCheckerIdonpeer_check → community_review- PM assign path can set
peerCheckerId— exclusive assignee behavior must stay unchanged
Proposed scope
-
Policy (
ChapterAssignmentPolicy.edit/submit)- When
status === peer_checkandpeerCheckerId == null: allow project members withcontent:updatewho are not the drafter (assignedUserId). - Deny the drafter on open Peer Check (align with mobile AC).
- When
peerCheckerIdis already set (PM assign): keep exclusive checker behavior (unchanged). - Managers (
content:assign) keep existing post-peer rules — do not open translator Peer Check rules for them.
- When
-
Submit (
PATCH /chapter-assignments/{id}/submit)- Pass authenticated user into submit.
- On advance from open Peer Check: set
peerCheckerIdto the submitter in the same transaction; write peer-checker assignment history. - Concurrent open Peer Check submits: first-wins; loser no-ops with current assignment (no special conflict type).
-
Tests
- Policy (open allow / deny drafter / PM exclusive / non-member denied)
- Conditional submit update (CAS on open
peer_checker_id) - Service race + route wiring
Acceptance criteria
- Non-drafter project member with
content:updatecan edit/submit on open Peer Check (peerCheckerIdnull) - Drafter is denied edit/submit on open Peer Check
- Submit from open Peer Check sets
peerCheckerIdto submitter and advances tocommunity_review - PM-assigned
peerCheckerIdexclusivity unchanged - Concurrent open Peer Check submits: first-wins; no invalid checker assignment
- Manual QA: claim → draft → submit (T1) → open
peer_check→ T2 presence/submit →community_reviewwithpeerCheckerId = T2 - No OpenAPI contract change — submit stays
PATCHwith no body and the checker is derived from the authenticated user; covered by tests on policy, repository, service and route - Deny edit/submit on open Peer Check when
assignedUserIdis null (inconsistent data)
Notes
Mobile should not ship alone against API without these changes (403 / false “done”). QA join point: API + mobile on the same release train.
Product details live on mobile #442 — match those behaviors where possible.
Metadata
Metadata
Assignees
Labels
Type
Projects
- StatusShow more project fieldsIn Progress (Dev)
Activity
Roslin22 commentedon Oct 20, 2026
Test Results
Issues Identified (Same and Different Devices)
@chadw-eten, these issues are related to mobile. Could you please suggest where can report these issues, mobile or Web?
chadw-eten commentedon Oct 20, 2026
I'm confused on the two reported issues. Line 3 above seems to indicate that synchronization works and, I assume, the stage is part of what is working. How are these different?
@JonathanSeehagen Heads up on this as an issue that is coming your way. I assume this is a good place to report this?
JonathanSeehagen commentedon Oct 22, 2026
@chadw-eten I looked at Roslin’s notes. Line 3 is audio: takes do upload after reconnect. The two issues are the stage change: offline Send to Peer Check (and the same for the peer checker’s next stage) never reaches the server, so after sync the chapter is Drafting again and the user has to Send a second time.
That is already covered by eten-tech-foundation/fluent-mobile#257 — not a new API bug. I’m implementing that issue as the fix for what she reported.
This thread is a fine place to have reported it. I’ll point QA at #257 for the retest.
Roslin22 commentedon Oct 27, 2026
@chadw-eten and @JonathanSeehagen Due to the current mobile sync issues, we are unable to test this issue at the moment. We will retest it once all sync issues are resolved.
JonathanSeehagen commentedon Oct 27, 2026
@Roslin22, @chadw-eten, I am still working on eten-tech-foundation/fluent-mobile#257. As soon as I finish, I will let you know here.
JonathanSeehagen commentedon Oct 29, 2026
@Roslin22, I have completed the #257 and moved to "In QA".