Uh oh!
There was an error while loading. Please reload this page.
docs(qa): correct five approvals checklist items against the #7517 run - #7638
Merged
Conversation
Five authoring defects surfaced by the full approvals area run — in every case the build behaves correctly and the checklist was wrong. - decision-action-matrix: resubmit does NOT move the original returned->pending; the approval node's re-entry mints a round-N+1 request while the original stays terminally returned. Split into three clauses and named the oracle. - dynamic-approver-routing: the vars clause named an unreadable oracle (a paused run's detail carries no variables key); it now asserts the functional resolution — stage-2 pending_approvers cardinality and order across a 1-pick and a 2-pick run. - ooo-delegation-reroute: the prescribed third-party delegation is not constructible (sys_approval_delegation is self-service-only, no admin exemption since #4839). Rewritten around the admin delegating their OWN slot to a second REAL runtime account that decides with its own bearer token. - knownGaps now record the better-auth issuer=local:credential provisioning detail on the three items that need a real second persona. - notification-deep-link: fixtures re-anchored on the remind/reassign path (no approval.opened topic exists), and the cold-load clause's evidence restated observably — the console consumes the query param. Refs #7517 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JJXyzuEo8JoAGLQLDXA54D
The latest updates on your projects. Learn more about Vercel for GitHub. 1 Skipped Deployment
|
huangyiirene
marked this pull request as ready for review
August 11, 2026 10:48
Uh oh!
There was an error while loading. Please reload this page.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for freeto join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes#7530
Five checklist-authoring corrections in the
approvalsarea, all evidenced against the full-area QA run #7517. No product code changes — in every case the build behaves correctly (or correctly refuses) and the checklist was asserting a shape the implementation does not have. Two of the five were the sole reason their items scored PARTIAL, so leaving them would keep re-manufacturing false amber on every run.The five corrections
decision-action-matrix— the revise/resubmit acceptance clause, its step,source; rev 1 → 2returned; the step re-reads both sides, andmaxRevisionsnow names which request the auto-reject lands ondynamic-approver-routing— the vars clause, steps, newknownGaps,source; rev 1 → 2pending_approvers, 2 picks → 2, same order. AknownGapsentry records that a paused run's detail carries novariableskey at all — structural, not a data gapooo-delegation-reroute— personas,fixtures.requires,knownGaps, steps, the delegate-identity clause, a new negative,source; rev 1 → 2knownGapsonper-group-signoff(rev 3 → 4),viewer-gating-submitter-side(rev 3 → 4) andooo-delegation-reroute(folded into rev 1 → 2)issuerto equallocal:credential, else sign-in failsINVALID_EMAIL_OR_PASSWORDbehind a misleading "User not found" warnnotification-deep-link—fixtures.requires, newknownGaps, steps, the cold-load clause's verify/evidence,source; rev 3 → 4approval.openedtopic exists); evidence is the drawer field-matched against the API, because the console consumes the query param before the drawer is capturablePremise verification — all five confirmed on
origin/main@8c20f75Per the issue-is-a-lead rule, each premise was checked against source before editing; none had expired.
ApprovalService.resubmit(packages/plugins/plugin-approvals/src/approval-service.ts) — its own docstring: "traversal walks the declared back-edge into the approval node, whose executor opens the round-N+1 request — fresh approver slate, record re-locks." The method never rewritesraw.status, so the resubmitted row staysreturned.sendBackcounts prior rounds asreturnedsiblings onflow_run_id+flow_node_id— which is only coherent under the mint-a-new-request shape.packages/services/service-automation/src/engine.ts— bothstatus: 'paused'recordLogcalls passstepsandtriggerbut novariables/outputkey, while the adjacent suspended-run bookkeeping does capturevariables. So the snapshot exists, it is just not on the surface run-detail serves.bindDelegationWriteGuard(packages/plugins/plugin-approvals/src/lifecycle-hooks.ts) — a foreigndelegator_idis rejected withFORBIDDEN/statusCode403, an absent one is stamped to the caller, and there is no admin exemption (deliberately removed in plugin-approvals 的 admin 豁免读session.roles,而 ObjectQL 的buildSession()从不填充它 —— 记录锁/delegation 守卫的 admin 覆盖在真实引擎路径上永不生效 #4839). The old fixture was therefore unconstructible by anybody, not merely inconvenient.packages/plugins/plugin-auth/src/backfill-account-issuer.ts—CREDENTIAL_ISSUER === 'local:credential';better-authis pinned at1.7.0-rc.2inpackages/plugins/plugin-auth/package.json.approval-service.tsisapproval.{reminder,reassigned,returned,request_info,comment,ooo_substituted,ooo_skipped,escalated,sla_breached}— noapproval.openedmember, so opening a request notifies nobody.ApprovalService.notifyrewrites a bare/system/approvalsactionUrl into the?request=deep link centrally, so the remind and reassign paths both do produce a real deep-linked notification.Diff — maps 1:1 to the table above
coverage.jsonneeded no change and carries none. It maps governed metadata kinds to item ids; this pass adds no item, retires none and renames none, so its two approvals entries (position→approvals.per-group-signoff,approvals.dynamic-approver-routing) stay exactly right. Called out explicitly because this branch was the wave's sole holder of that file.Gates
pnpm check:platform-checklist— the BASE is already red, and the reading is unchanged by this PR. Measured onorigin/main@8c20f75with a pristine checklist tree, before the edit: exit 1, exactly one problem —coverage.json · qa: UNCLASSIFIED. After the edit: byte-identical output, same exit 1. Not chased: it is the newqaliveness ledger needing acoverage.jsonrow, already filed and open as finding:check:platform-checklistis red onmain— the newqaliveness ledger is neither mapped nor waived in coverage.json #7347, and deciding between "author a realqaitem" and "waive it" is a separate scoping call.JSON.parseof the edited area file is green; every touched item'srevisionequals the maxrevisionin its ownhistory(checked mechanically for all six).pnpm check:nul-bytes— green:OK (scanned 7061 text file(s) ... no raw ASCII control bytes), exit 0. Plus a targeted self-scan of the edited file for the wider control-byte class: no matches.Changeset
None, deliberately. This is docs-only — it touches
docs/qa/platform-checklist/and nothing that ships in a package, so it releases nothing and a changeset would be noise. Needs theskip-changesetlabel.Generated by Claude Code