- Shipped
- September 6, 2026 at 1:21 AM UTC
- Author
- Kamo
- Commit
- d8c43f6
The member Careers tab now appears on two conditions and no right among them: the viewer is a team member, and the organization has at least one posting open and taking applications. CareersAccess.requireView is moved to the same rule, because a server set narrower than the tab's leaves a member opening it and collecting a 403 over an empty grid. That IS a widening, and it is worth naming rather than burying: VIEW_JOB_LISTINGS used to decide this, so an organization could keep its people off the internal board and some did while a reorganisation was in flight. It no longer can. The right still gates what an org publishes; what it no longer does is hide an open posting from staff. The blast radius is unchanged — the board is the org's own list of adverts, which it chose to open, and no endpoint on this surface takes a member id, so it cannot return anybody else's submission. Reading who ELSE applied is still MANAGE_JOB_POSTINGS alone. With the rights gate gone, the base-member exclusion is the only thing left between the internal board and somebody with no employment relationship at all — a customer, a portal user, a securityProvider mirror. It is load-bearing now, and pinned as such. openingsAcceptingApplications counts the POSTING, never the caller. A listing's canApply also goes false once THIS member has applied, and counting that way would delete the tab the moment somebody applied to the last open role — taking with it the one surface where their own application can be read, edited or withdrawn. ON_HOLD does not count either: it belongs on the board as information, but nothing can be filed against it. Its own endpoint rather than a field on the board, because the answer is needed before the tab exists and the tab's own first act is to fetch that board — gating on it would mean two identical round trips per profile visit, one thrown away. isHrs drops out of the tab gate as an assertion and returns as an implication: a posting is written from the HR module, so an org without it can never count above zero.