test(qa): refresh the approvals checklist's entry paths and cover the two new nav entries - #7349
Merged
Merged
Conversation
… two new nav entries (#7331) Browser-verified the #7213 entry convergence end to end against a console dist built at the pinned objectui SHA, then brought the checklist in line with what a real user now does. Entry paths refreshed (revision bumps + history entries): - approvals.per-group-signoff, approvals.inbox-metadata-actions and approvals.viewer-gating-submitter-side reached the inbox through the bare /system/approvals deep-link route. That route deliberately still works, so nothing was red — but the items were exercising the deep link rather than the path a user takes. They now open the account app's Approvals nav entry (the component route), and say why the other route is not the subject. - approvals.notification-deep-link gains a route-parity clause: the same ?request= link must open the drawer on BOTH /system/approvals (what already delivered notifications and emails carry) and the component route. A component-route-only deep link is called out as a FAIL. Three new items, all previously uncovered: - approvals.account-app-entry (P0) — the headline gap. Its first clause asserts the registration survives BUNDLING, because #7231's unit pin stubs the page at its module boundary and states in its own docblock that it does not assert main.tsx performs the side-effect import. Also pins non-admin reachability, decision execution under the component mount, ?request= parity, the record link keeping the current app segment, and zh wording. - approvals.setup-nav-entry (P2) — Approvals Inbox leads the Setup group, above the raw sys_approval_request grid. - approvals.pending-count-surfaces (P2) — the bell popover's unclamped `total · N notifications + M pending approvals` breakdown, M agreeing with Home's card, and Home's card landing in an app the user can open. Findings from the run are filed, not patched here: #7344 (no permission set grants sys_inbox_message, so the Account app's Notifications entry 403s for every non-admin), #7345 (an approver can be unable to open the record under approval), #7347 (check:platform-checklist is red on main on an unrelated pre-existing coverage gap). objectui#4074 was confirmed in the browser. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01L9U1G2piXmYrhYQX96XUyv
|
The latest updates on your projects. Learn more about Vercel for GitHub. 1 Skipped Deployment
|
10 tasks
os-zhuang
marked this pull request as ready for review
August 10, 2026 07:53
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 free
to 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 #7331
The card had two halves: browser-verify the #7213 entry convergence, and refresh the approvals checklist. The verification half produced no product-code change — it is reported on the issue and in the findings below. This PR is the checklist half only.
The verification, in one line
Booted
examples/app-showcaseagainst apackages/console/distbuilt bypnpm objectui:buildat the pinned objectui SHA8aad9fd50b16(dist stamp verified equal to.objectui-sha; the servedindex.htmlrequests the freshly builtassets/index-Bn6RZIXn.js), signed in as a non-admin business user, and drove all ten checklist items in the issue body. Nine passed. The tenth — the record deep link — is routing-correct and dead-ends for an unrelated record-visibility reason, filed separately.The headline check passed. #7231's unit pin states in its own docblock that it does not assert
main.tsxperforms the side-effect import — "the one remaining way the key could be missing at runtime". It does survive bundling: the built entry chunk carries the registration at module scope, immediately before the app bootstrap.and the account app's Approvals entry renders the full inbox — tabs, list, drawer, decision actions — for a session whose
GET /api/v1/meta/appreturnsshowcase_appandaccountand notsetup.What changes here
Entry paths refreshed —
revisionbumped,historyappended on each:approvals.per-group-signoff,approvals.inbox-metadata-actions,approvals.viewer-gating-submitter-sideall reached the inbox at the bare/system/approvalsdeep link. That route deliberately still works, so nothing was red — but the items were exercising the deep link instead of the path a user takes. They now open the account app's Approvals nav entry (the component route) and say why the other route is not the subject here.approvals.notification-deep-linkkeeps/system/approvals?request=as its subject — that is what already-delivered notifications and emails carry — and gains a route-parity clause: the same link must open the drawer on both routes, and a component-route-only deep link is spelled out as a FAIL.Three new items, none of which had any coverage:
approvals.account-app-entrybuild, greps the built chunk, not source); a non-admin reaches the full inbox; a decision executes under the component mount;?request=parity; the record link keeps the current app segment; zh 待我审批 / 待审批approvals.setup-nav-entrysys_approval_requestgridapprovals.pending-count-surfacestotal · N notifications + M pending approvalswhile the button badge clamps at 9+; M agreeing with Home's card; Home's card landing in an app the user can openThe bundling clause is written as an oracle-
buildclause on purpose: a source-only grep is explicitly declared not to satisfy it, since that is exactly the assertion the existing unit pin already makes and the one that cannot see the bundle.Findings filed, not patched
Per the card's standing discipline — searched first, filed unassigned, no
pm:queue:sys_inbox_message, so the Account app's own Notifications entry renders "You don't have access" for every non-admin, and the notification half of the bell breakdown is structurally 0 for a business user. Adjacent to this epic (sameInboxnav group) but a security-baseline decision, so filed rather than fixed.check:platform-checklistis red onmain— the newqaliveness ledger is neither mapped nor waived in coverage.json #7347 —check:platform-checklistis already red onmain(the newqaliveness ledger from fix(spec,cli): govern the QA testing domain and enforceTestSuiteSchemaat theos testload site (#6247) #7255 is neither mapped nor waived incoverage.json). Reproduced on a pristine tree before touching anything; deliberately not made green here, because picking between authoring a realqaitem and waiving it is a QA-ledger scoping call./apps/setup/..., so a business user without setup access has no working "all notifications" or "all activity" link #7266) — confirmed, with the browser evidence the card said it lacked. Both anchors reproduce for a non-admin. The symptom is softer than the "App not available" guard it guessed at: the shell renders the target inside the current app and only the content is refused. Commented there with the measurement, including the note that a routing fix alone will not clear the empty state while The Account app's Notifications entry 403s for every non-admin — no permission set grants sys_inbox_message #7344 stands.Verification of this change
node scripts/check-platform-checklist.mjsreports exactly the one pre-existingcoverage.json · qaproblem described in #7347 — the three new items and the four edited ones validate clean.node scripts/check-nul-bytes.mjsOK;node scripts/check-doc-authoring.mjsclean.No changeset: this touches
docs/qa/only and releases nothing, so the PR carriesskip-changeset.Generated by Claude Code