This is a proposed repository review method. It treats automated review feedback as triage material, while a named human reviewer makes the merge decision from documented protocol behavior and change-specific evidence.
Decision rule and four-case worksheet
Use this worksheet for a changed binary-operation path. The acceptance columns are local policy: they allocate responsibility without presenting repository process as a Python or GitHub requirement.
| Semantic boundary | Documented interpreter outcome | Review evidence required | Acceptance decision | Inference to reject | Evidence owner | Bounded repository-owned action |
|---|---|---|---|---|---|---|
| A binary special method cannot handle the other operand type. | For an unsupported counterpart type, the method may return NotImplemented. | Identify the changed method and the operand pairing it declines. | Accept only after a human maps that pairing to the protocol role. | A review comment alone proves the operation is safe. | Assigned protocol reviewer. | Record the pairing and retain the sentinel result only at that protocol boundary. |
| The interpreter considers a reflected implementation or fallback path. | The runtime then seeks a reflected implementation or an alternative fallback. | Show the relevant counterpart route in the change discussion. | Accept only when the human review leaves dispatch to the interpreter. | The first declined operation ends every possible dispatch route. | Assigned protocol reviewer. | Remove application-owned branching that attempts to replace interpreter dispatch. |
| Every applicable operation attempt yields NotImplemented. | After every applicable attempt yields the sentinel, the runtime raises an appropriate exception. | State which operation paths were considered and where the final outcome is handled. | Hold acceptance until a human reviewer records the terminal-path reasoning. | Returning the sentinel guarantees a successful operation. | Assigned protocol reviewer. | Escalate unresolved operation-path reasoning to the language maintainer. |
| Application logic evaluates NotImplemented for truth. | In Python 3.14, a truth test of NotImplemented raises TypeError. | Inspect changed conditions, guards, and assertions for direct truth evaluation of the sentinel. | Reject the change until the boolean use is removed and independently reviewed. | The sentinel can act as a true-like application status value. | Assigned protocol reviewer and merge reviewer. | Withdraw provisional acceptance and request a revised protocol-focused review. |
Why a Copilot comment is not the merge gate
Copilot normally posts a comment-style review, and that default review does not meet a pull request’s required-approval count.
GitHub cautions that Copilot can miss issues and can be wrong, so its feedback needs human review.
A practical policy is therefore to preserve the comment as a lead, attach the worksheet evidence, and require a separate human sign-off. This separation is a proposed design rather than a provider-prescribed implementation.
Hypothetical failure walkthrough
Consider a hypothetical pull request in which a team reads an automated comment as sufficient acceptance and merges a condition that truth-tests a returned NotImplemented value. Under the Python 3.14 rule in the worksheet, that condition raises TypeError. This is a conditional semantic consequence, not a report of an observed incident or an assertion that Copilot produced, approved, or detected the change.
The corrective path is to withdraw acceptance, remove the boolean use, and ask a human reviewer to trace the binary-operation route again. Keep NotImplemented for the documented binary-operation signal; it is not interchangeable with NotImplementedError. Allow the interpreter to perform its own follow-on dispatch, then collect independent human validation before a new merge decision.
Two operating models and their limits
Protocol-first gate: make the worksheet part of every affected pull request, with a protocol reviewer owning the semantic mapping and a merge reviewer owning the final evidence check. This is the more conservative option when the change alters special-method behavior.
Copilot-assisted triage: request or use Copilot feedback to surface questions, but apply the same human worksheet gate. A later push does not receive another Copilot review by default unless automatic review is configured to cover new pushes.
For either model, treat a subsequent automated review as new input rather than proof that earlier concerns disappeared: a re-review may repeat older comments. This article is limited to the supplied Python 3.14 semantics and selected review behavior described in the supplied excerpts; it excludes preview capabilities and does not claim test execution, detection rates, or performance outcomes.
Repository policy to adopt
Define three local rules: the protocol reviewer owns the four-case mapping, the merge reviewer owns the acceptance record, and disagreements go to a designated language maintainer before merge. If boolean evaluation of NotImplemented is found, the local rule is to revoke acceptance, revise the change, and repeat independent human review. These are recommended governance choices, not guarantees supplied by Python or GitHub.
Keep the acceptance record narrow: identify the relevant operation path, the selected worksheet row, the named evidence owner, and the resulting human decision. Revisit the policy when the Python version changes, when incompatible releases arrive, or when the review-source behavior needs revalidation.
A returned
NotImplementedis not a repository-contained terminal boundary; it is an explicit handoff from the changed method to interpreter-controlled dispatch. The Python 3.14 documentation states that, after a binary or in-place method returns the sentinel, the interpreter tries the other operand’s reflected operation or another operator-specific fallback, and raises only if all attempts returnNotImplemented. Treating the first return as sufficient evidence therefore hides a dependency edge that can change the observable result.changed left method └─ returns NotImplemented for (Left, Right) └─ interpreter dispatch └─ Right reflected method or operator fallback └─ result or terminal exceptionThe worksheet should require the pairing and the applicable successor route together. For example, recording only “
Left.__add__(Right)returnsNotImplemented” leaves unresolved whetherRight.__radd__is reachable, whether it also declines, and where the eventual exception originates. A repository-owned action may remove application-level branching, but it cannot make interpreter dispatch irrelevant; the acceptance record should explicitly preserve that boundary and identify the route left to the runtime.Python’s built-in constants reference also cautions that incorrectly returning
NotImplementedcan produce a misleading error or return the value to Python code. That is an additional reason not to approve the sentinel return without documenting the counterpart/fallback path for the specific operator and operand types.