Repository navigation
Approvals: read the native pending list and resolve names from the run view - #424
Merged
Merged
Conversation
…n view The needs-you read surface duplicated what Interchange already serves. The web now reads the native pending-approvals list and single-approval routes through one composer that adds the agent's display name from the run view, the headline from the approvals package's browser-safe subpath, and the bench name from membership. The chat approve card's status poll keeps its ready / forbidden / not-found / error shape, and the e2e harnesses page the native list and fail loud on a non-200 instead of silently skipping. The approvals package keeps its grant-allowance gate and headline helper; the needs-you routes, view model and their tests are gone, as is the hub mount. The vendored hub-api approval routes return to upstream's plain /:approvalId patterns, leaving that vendored copy with two deltas.
This was referenced Aug 28, 2026
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.
Closes CL-7113 (parent CL-7103). Wave 1 of the Interchange re-pin prep (CL-7107).
What changed
The needs-you read surface is gone. It existed to turn Interchange's pending
approvalrows into names a person can read. Both names are already served natively: the run view returnsdefinitionName(the agent), and the bench name is on the client from membership.apps/webnow reads nativeGET /approvalsandGET /approvals/:approvalIdthrough one composer (apps/web/src/pending-approvals.ts) — one cached run-view read per distinctrunId, headline from the approvals package's new browser-safe./headlinesubpath. The chat approve card's status poll keeps itsready / forbidden / not-found / errorshape (native 403 → forbidden, 404 → not-found); the "N waiting on you" chip is the native pending count.@corbits/approvalsstays for its grant-allowance gate (withGrantAllowance, used by the hub) andheadlineFor(used by chat). The needs-you routes, view model, their tests, and the hub mount are deleted. The e2e harnesses (scripts/e2e/play.ts,cl-6324-launch-proof.ts) page the native list and fail loud on a non-200 instead of silently skipping — they were reading the deleted route.Vendored
@intx/hub-apishrinks. The three{^(?!needs-you$)[^/]+}param patterns return to upstream's plain/:approvalId; a full diff against the pinned upstream now leaves only the null-principalresolveApprovalexport and the bearer deploy mirror.VENDORED.md,VENDORED-FROM, and the kill-date tree hash are updated.docs/needs-you.mdrewritten.Verification
bun run checkgreen: typecheck, 6493 tests / 0 fail, structural checks, lint 0 errors. New tests: two pending rows from one run render with the run view'sdefinitionNameand issue exactly one run-view fetch; a 403 on the list renders the no-permission state, not an empty queue;getStatusmaps pending → ready/canAct, 403 → forbidden, 404 → not-found.Notes for review
benchNameis composed but no current consumer renders it (check:ui-vocabularybans "bench"/"workspace" in copy); it is an optional omitted key, not a placeholder.