Recorded while verifying #10153's triage rationale. Not fixed there (that card is fenced to the manager approver branch), and filed as an observation because the correct treatment is a judgement call, not a mechanical repair.
What was measured
#10153's triage argues direction 1 from a standing meta-rule — "when one column has two consumers behaving inconsistently, the governed side wins" — naming HierarchyScopeResolver.screenToTenant (cloud#1195) as the governed consumer of sys_user.manager_id.
Neither symbol exists in this repository:
$ grep -rn "provablyDisjoint" . --include=*.ts --include=*.mts --include=*.md # (no output)
$ grep -rn "screenToTenant" . --include=*.ts # (no output)
Counter-check that the search works — a neighbouring known-present term on the same sweep:
$ grep -rln "expandPositionUsers" . --include=*.ts
./packages/spec/src/automation/approval.zod.ts
./packages/core/src/security/grant-validity.ts
./packages/plugins/plugin-sharing/src/position-graph.ts
./packages/plugins/plugin-approvals/src/approval-service.ts
... (10 files)
So the screened consumer lives in cloud's enterprise resolver. What this repo ships is IHierarchyScopeResolver as a seam (packages/spec/src/contracts/sharing-service.ts), with the open-source implementations here:
packages/plugins/plugin-sharing/src/team-graph.ts
asyncmanagerOf(userId: string,_organizationId?: string): Promise<string|null>{
...
constrows=awaitthis.engine.find('sys_user',{where: {id: userId},fields: ['id','manager_id'],limit: 1,context: SYSTEM_CTX,});The organization argument is accepted and discarded — the parameter is underscore-prefixed to say so. The sibling method on the same class, expandRoleUsers, does apply filter.organization_id. BusinessUnitGraphService.managerOf delegates here, and its standalone fallback reads sys_user unscreened the same way.
Why it matters for triage rather than for a patch
Within framework, approvals is therefore not an unscreened straggler among screened peers on this column: both manager-chain readers in this repo are unscreened, and the screened one is enterprise-side. Whether the OSS resolver should screen is a real question (the seam's documented contract is "fail-closed to own" for the open tier, which is a different posture from a tenant screen), but it is not answerable by reading the two call sites.
Recording it so the meta-rule is applied to the actual distribution of consumers rather than to the cloud-side one alone.
Related
Filed unassigned, no pm:queue.
Generated by Claude Code
Recorded while verifying #10153's triage rationale. Not fixed there (that card is fenced to the
managerapprover branch), and filed as an observation because the correct treatment is a judgement call, not a mechanical repair.What was measured
#10153's triage argues direction 1 from a standing meta-rule — "when one column has two consumers behaving inconsistently, the governed side wins" — naming
HierarchyScopeResolver.screenToTenant(cloud#1195) as the governed consumer ofsys_user.manager_id.Neither symbol exists in this repository:
Counter-check that the search works — a neighbouring known-present term on the same sweep:
So the screened consumer lives in cloud's enterprise resolver. What this repo ships is
IHierarchyScopeResolveras a seam (packages/spec/src/contracts/sharing-service.ts), with the open-source implementations here:packages/plugins/plugin-sharing/src/team-graph.tsThe organization argument is accepted and discarded — the parameter is underscore-prefixed to say so. The sibling method on the same class,
expandRoleUsers, does applyfilter.organization_id.BusinessUnitGraphService.managerOfdelegates here, and its standalone fallback readssys_userunscreened the same way.Why it matters for triage rather than for a patch
Within
framework, approvals is therefore not an unscreened straggler among screened peers on this column: both manager-chain readers in this repo are unscreened, and the screened one is enterprise-side. Whether the OSS resolver should screen is a real question (the seam's documented contract is "fail-closed to own" for the open tier, which is a different posture from a tenant screen), but it is not answerable by reading the two call sites.Recording it so the meta-rule is applied to the actual distribution of consumers rather than to the cloud-side one alone.
Related
managerapprover resolvessys_user.manager_idwith no organization screen, while every sibling approver expansion is org-scoped #10153 — the approvals-side consumer of the same columnFiled unassigned, no
pm:queue.Generated by Claude Code