You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
A named course-domain owner must choose ADOPT, DEFER, or REJECT independently for four behavior families introduced by immutable CMP series ending at 598c028fcd5cf30d4b1cdcae344bcc2193adc2c9:
staff-created system project evaluations;
learner-facing peer-review task visibility;
score/result readiness and visibility;
explicit peer-assignment and score notification actions.
#149 remains a blocked product-decision gate. It is not an engineering or source-sync issue. Unknown policy fails closed: keep the website pin and target overlays unchanged, do not copy/apply CMP bytes, and do not create implementation children until the owner responds.
The earlier phrase “whether learners may submit the CMP system rubric” is inaccurate and is superseded by this body and the latest PM comment.
At the reviewed upstream commit, learners do not submit a system evaluation. The only upstream creation route is the compatibility API guarded by token_required plus require_staff_token. Its GET/POST resolves a non-volunteer submission inside the route's course/project, requires every rubric criterion, records created_by=request.user, and creates an idempotency-keyed evaluation. The product decision is whether authorized staff and/or a trusted service may create it and how it affects learners—not whether learners author it.
This correction does not approve the upstream staff-token authorization as the target management design. Any adopted target behavior must still use named capabilities, shared services, Studio and /api/v1/admin/ parity, object/cohort authorization, revision/idempotency, and redacted audit.
Evidence boundary
Website remains pinned to CMP 98a235283904b4ef9ad29e196298540756cf1bcc; the requested series is unapplied.
Review CMP upstream overlay drift at 598c028f #148 accepted only a fail-closed review. Its exact comparison identified substantive model/migration/API/scoring/render/notification behavior and target overlay conflicts; it did not approve product behavior or pin movement.
The reviewed upstream families are commits 8146d463 (split processing from notifications), 80d67dfa (peer-review task visibility), 894696cf (system evaluation), and 83242da (score hiding).
Current target migration numbering and overlays are authoritative. Upstream courses.0041 cannot replace the target's existing migration identity.
For each family, reply with exactly one disposition:
ADOPT — approve the behavior for this release and answer every required policy field below. Adoption approves product semantics only; PM will later create/groom bounded implementation issues against current main.
DEFER — preserve current target behavior, state why it is not in this release, name the condition or future decision that may reopen it, and leave all corresponding CMP bytes/overlays unapplied.
REJECT — preserve current target behavior, state why this behavior is not part of the target product, and record it as an explicit source-sync exclusion rather than a later implementation promise.
“Adopt upstream,” “same as CMP,” silence, or a partial answer is not sufficient. Do not combine the four dispositions; each has an independent security, migration, UI, and delivery boundary.
Decision 1 — staff-created system project evaluations
Reviewed upstream behavior
Only the staff-token compatibility GET/POST route creates/reads system evaluations; there is no learner-authoring route.
POST requires feedback, an idempotency key, and one valid answer for every project review criterion. Exact replay returns the existing evaluation; a different payload with the same key conflicts.
Each new evaluation is append-only in the reviewed API. Multiple system evaluations for one submission can exist and all of their criterion responses join submitted peer responses in criterion scoring; each response has equal input weight before the existing median/ceiling calculation.
Creation immediately replaces stored criterion scores, recomputes total/pass state, and may update leaderboard/legacy Datamailer projections in the upstream implementation.
Learner results may display system feedback and include system rubric votes. The staff compatibility GET exposes submission/account fields and peer/system evaluation details that require a separate target field/PII policy.
Required ADOPT answers
Actor: Which named target capability may create/view a system evaluation? Is a separately authenticated trusted service allowed, staff allowed, or both? No learner actor is implied. Define object/cohort scope and reauthentication/confirmation if required.
Weight and aggregation: Does each system response count equally with each submitted peer response, act only as a fallback when peer evidence is insufficient, override peers, or use another explicit weight? Define rounding, missing criteria, conflicting/multiple system evaluations, and leaderboard/pass effects.
Correction and history: Is an evaluation immutable append-only, revision-correctable, supersedable, or deletable? Define replay/conflict, reason, audit, rescoring, retention, actor deletion, legal deletion, and rollback behavior. State whether multiple active evaluations may contribute simultaneously.
Visibility: Which feedback, rubric answers, source label, actor class, timestamps, and score effects are visible to the learner, Studio, admin API, compatibility API, exports, and audits? Define masking and no-existence leakage.
Completion/readiness: Which project/submission states permit creation and when is the evaluation complete enough to affect score/results? Define missing, partial, stale, failed, superseded, and post-completion correction behavior.
A DEFER or REJECT response preserves current peer-only target scoring/results and excludes the model, migration, API, feedback, and aggregation changes together unless the owner explicitly adopts a smaller separately defined family later.
The upstream change does not prove that a learner has a concrete PeerReview assignment. It changes the current-assignment label/link by project state and the learner's own ordinary project submission:
anonymous/no-user context sees the generic Peer review task during peer-reviewing and completed states;
an authenticated user sees it only after having an ordinary submission for that project;
it does not separately require current enrollment or query an assigned review row;
completion keeps the task visible, so reassigned, removed, completed, or otherwise stale assignment state is not represented.
Required ADOPT answers
Anonymous: Should signed-out visitors see a generic peer-review task/link, only non-actionable phase copy, or nothing?
Eligibility source: For an authenticated learner, is visibility based on own project submission, an actual current PeerReview assignment, either, or another explicit rule? Volunteer-only rows must be addressed separately.
Enrollment and identity: Must the learner have an active enrollment in the exact cohort? Define staff/view-as and inactive/removed enrollment behavior without revealing assignment existence.
Cohort/project boundary: Require exact Course/Cohort/Project ownership and define behavior for same slugs across cohorts, hidden/cancelled cohorts, closed projects, and legacy routes.
Stale lifecycle: Define visibility before assignment, after completion/submission, after reassignment/removal, after project completion, and on missing/ambiguous/stale state. State which destination is safe in every state.
A DEFER or REJECT response retains current target course-page assignment presentation and excludes the upstream learner-visibility change.
Decision 3 — score/result readiness and visibility
Reviewed upstream behavior
The reviewed HTML change treats a submission as “evaluated” after any submitted peer evaluation or any system evaluation. Until then it hides outcome/criteria/components/submission/feedback sections behind No evaluation is available for this submission yet. The source change does not by itself define consistent readiness for compatibility APIs, future /api/v1/, Studio, exports, leaderboards/statistics, cached projections, or already-stored historical scores. Existing fallback scoring may already have stored values before an evaluation exists.
Required ADOPT answers
Readiness predicate: Is one submitted peer evaluation sufficient? Must the configured peer-review count, every rubric criterion, a system evaluation, scoring completion, or another explicit condition be satisfied? Define volunteer/system inputs and partial criteria.
Learner HTML: Before readiness, which outcome, total/components, criterion votes, submission facts, feedback, pass/fail, and navigation remain visible? Define empty/error copy and whether a learner can distinguish missing from failed/stale processing.
API/Studio/export: Apply the same readiness rule explicitly to public/learner APIs, compatibility API, /api/v1/admin/, Studio, CSV/data exports, and staff diagnostics, with exact staff override/masking rules.
Leaderboard/statistics: Decide whether unready scores are excluded, marked pending, or included but hidden; define aggregates, ranking, certificates, completion, and notification eligibility.
History/correction: Define legacy stored scores without evaluation rows, later evaluation/regrade, stale projections, rollback, and correction visibility. No historical score may silently become zero, failed, or disappear without an approved migration/reconciliation rule.
A DEFER or REJECT response retains current target score/result visibility and excludes upstream score-hiding behavior; it does not authorize misleading placeholder scores.
Decision 4 — explicit peer-assignment and score notifications
Reviewed upstream behavior
Upstream removes notification sends from assignment/scoring actions and adds separate staff POST actions. The peer notification action is offered in peer-reviewing state; the score action in completed state. The reviewed code can be invoked repeatedly and calls copied Datamailer synchronously; project state alone gates the action, and the exact already-notified/audience-delta semantics are not a product contract.
Required ADOPT answers
Actor and trigger: Which named capability may trigger each action, from Studio and /api/v1/admin/ parity? Define project/assignment/scoring/readiness state, confirmation, reason, reauthentication, and audit.
Audience: For peer assignment, are recipients only learners with a current unresolved assignment, all ordinary submitters, or another exact set? For scores, define ready/passed/failed/withdrawn/inactive recipients. Require exact cohort/project scope and suppression/preferences.
Repeat semantics: Is a second action a no-op, delta-only delivery, explicit resend, or new version? Define idempotency key, changed assignments/rescores, per-recipient result, partial failure, cancellation, and manual-resend authorization.
Delivery status: Define accepted versus delivered, retryable versus ambiguous, expiry/retention, redacted Studio/API status, and what happens when Relay is unavailable. Ambiguous acknowledgement never becomes automatic duplicate send.
Purpose contract: Confirm the approved Decision: Confirm the MVP transactional email purpose catalog #22 purpose IDs, audience, sender/reply-to, Relay template/version/context, and retention for peer-assignment and score communication, or explicitly defer the purpose.
Even if ADOPT is chosen, implementation remains owned by #48/#49/#50: one website business intent plus durable job commits atomically, only a leased post-commit job contacts Relay, and there is no direct Datamailer/SES, synchronous provider call, dual sender, or local canonical renderer.
Cross-family requirements for any ADOPT
Exact cohort/project/submission identity and authorized-queryset boundaries; no cross-cohort/account fallback or existence leak.
Shared courses services used by learner HTML, Studio, admin API, compatibility adapters, exports, and jobs as applicable.
Target-native UUID/revision/idempotency/capability/audit rules; an upstream staff token alone is insufficient management authorization.
Fresh/upgrade/replay/SQLite/PostgreSQL migration plan that preserves target migration identities and historical results.
Private/no-store/noindex learner and management responses, field minimization/redaction, CSRF-safe HTML mutations, OpenAPI parity, safe empty/stale/error states, and inspected desktop/mobile screenshots for changed render surfaces.
Exact current-main overlay reconciliation and one immutable CMP source SHA after—not before—the product decisions and bounded implementation acceptance.
No decision about unrelated project submission, peer assignment algorithm, scoring redesign, registration, curriculum, events, content, SEO, or infrastructure.
Decision acceptance
A named owner records ADOPT/DEFER/REJECT separately for all four families.
Every ADOPT answer completes all required fields above; every DEFER/REJECT records rationale and preserved current behavior.
PM confirms the response is internally consistent across actor, cohort/privacy, scoring/readiness, export/history, and delivery boundaries.
Course-domain owner: reply using the four numbered decision sections. PM then records the selected contract and, only for adopted families, splits/grooms implementation work. Until that response, keep #149 blocked for engineering and CMP apply.
Decision outcome
A named course-domain owner must choose ADOPT, DEFER, or REJECT independently for four behavior families introduced by immutable CMP series ending at
598c028fcd5cf30d4b1cdcae344bcc2193adc2c9:#149 remains a blocked product-decision gate. It is not an engineering or source-sync issue. Unknown policy fails closed: keep the website pin and target overlays unchanged, do not copy/apply CMP bytes, and do not create implementation children until the owner responds.
Parent review: #148.
Correction to the 2026-08-27 packet
The earlier phrase “whether learners may submit the CMP system rubric” is inaccurate and is superseded by this body and the latest PM comment.
At the reviewed upstream commit, learners do not submit a system evaluation. The only upstream creation route is the compatibility API guarded by
token_requiredplusrequire_staff_token. Its GET/POST resolves a non-volunteer submission inside the route's course/project, requires every rubric criterion, recordscreated_by=request.user, and creates an idempotency-keyed evaluation. The product decision is whether authorized staff and/or a trusted service may create it and how it affects learners—not whether learners author it.This correction does not approve the upstream staff-token authorization as the target management design. Any adopted target behavior must still use named capabilities, shared services, Studio and
/api/v1/admin/parity, object/cohort authorization, revision/idempotency, and redacted audit.Evidence boundary
98a235283904b4ef9ad29e196298540756cf1bcc; the requested series is unapplied.8146d463(split processing from notifications),80d67dfa(peer-review task visibility),894696cf(system evaluation), and83242da(score hiding).courses.0041cannot replace the target's existing migration identity.Owner response format
For each family, reply with exactly one disposition:
“Adopt upstream,” “same as CMP,” silence, or a partial answer is not sufficient. Do not combine the four dispositions; each has an independent security, migration, UI, and delivery boundary.
Decision 1 — staff-created system project evaluations
Reviewed upstream behavior
Required ADOPT answers
A DEFER or REJECT response preserves current peer-only target scoring/results and excludes the model, migration, API, feedback, and aggregation changes together unless the owner explicitly adopts a smaller separately defined family later.
Decision 2 — peer-review task/assignment visibility
Reviewed upstream behavior
The upstream change does not prove that a learner has a concrete
PeerReviewassignment. It changes the current-assignment label/link by project state and the learner's own ordinary project submission:Required ADOPT answers
A DEFER or REJECT response retains current target course-page assignment presentation and excludes the upstream learner-visibility change.
Decision 3 — score/result readiness and visibility
Reviewed upstream behavior
The reviewed HTML change treats a submission as “evaluated” after any submitted peer evaluation or any system evaluation. Until then it hides outcome/criteria/components/submission/feedback sections behind
No evaluation is available for this submission yet.The source change does not by itself define consistent readiness for compatibility APIs, future/api/v1/, Studio, exports, leaderboards/statistics, cached projections, or already-stored historical scores. Existing fallback scoring may already have stored values before an evaluation exists.Required ADOPT answers
/api/v1/admin/, Studio, CSV/data exports, and staff diagnostics, with exact staff override/masking rules.A DEFER or REJECT response retains current target score/result visibility and excludes upstream score-hiding behavior; it does not authorize misleading placeholder scores.
Decision 4 — explicit peer-assignment and score notifications
Reviewed upstream behavior
Upstream removes notification sends from assignment/scoring actions and adds separate staff POST actions. The peer notification action is offered in peer-reviewing state; the score action in completed state. The reviewed code can be invoked repeatedly and calls copied Datamailer synchronously; project state alone gates the action, and the exact already-notified/audience-delta semantics are not a product contract.
Required ADOPT answers
/api/v1/admin/parity? Define project/assignment/scoring/readiness state, confirmation, reason, reauthentication, and audit.Even if ADOPT is chosen, implementation remains owned by #48/#49/#50: one website business intent plus durable job commits atomically, only a leased post-commit job contacts Relay, and there is no direct Datamailer/SES, synchronous provider call, dual sender, or local canonical renderer.
Cross-family requirements for any ADOPT
Dependencies and blocked state
Non-goals while blocked
--apply, or adoption manifest rewrite.Decision acceptance
Exact next action
Course-domain owner: reply using the four numbered decision sections. PM then records the selected contract and, only for adopted families, splits/grooms implementation work. Until that response, keep #149 blocked for engineering and CMP apply.