Repository navigation
test(dogfood): pin the reason #25591's verdict gives a staff share on a real showcase_project record - #25604
Merged
Conversation
… a real showcase_project record (#25602) The showcase D3/D4 proof's contrast granted on `showcase_project` to a record id that names no row and expected the pre-#25549 object-only reason. Since #25591 the D7 verdict on a public object reads whether the recipient is an external member of the record's organization, so that grant now fails for an unresolvable organization instead, and main's Dogfood Regression Gate (1/3) is red. The contrast now grants on a real project to a staff member of its organization (both preconditions asserted) and pins the ruled reason: "... and the recipient is not one". Claude-Session: https://claude.ai/code/session_014rFBGqoBLiroi35e82xEa7 Co-authored-by: Claude <noreply@anthropic.com>
Contributor
📓 Docs Drift CheckNothing in this diff resolved to a documentable surface (no symbol, route or SDK anchor derived from 0 changed package(s)), so this run has no opinion about the docs. What this run could not see
Coarse fallback — 0 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): |
This was referenced Oct 24, 2026
…-pluvu5 One conflict, in showcase-d3-d4-capabilities.dogfood.test.ts: #25605 loosened the same contrast to the prefix "consulted only for an external member" on the absent record. Kept this branch's side, which grants on a real showcase_project to a staff member of its organization and pins "and the recipient is not one". Main's other incoming change (#25607) is scripts/release-pending-publish.mjs only. Claude-Session: https://claude.ai/code/session_014rFBGqoBLiroi35e82xEa7 Co-authored-by: Claude <noreply@anthropic.com>
Contributor
Author
席位核对 · ACCEPT · 2026-10-24T08:58Z
Generated by Claude Code |
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.
Requested by Sales · project thread
Fixes #25602
Clause-②: no
Metadata-protocol: none
main'sDogfood Regression Gate (1/3)went red when #25591 landed (4a251927c,a57643d3d) on one test,showcase-d3-d4-capabilities.dogfood.test.ts:135. #25605 cleared it by loosening the pin to the prefix "consulted only for an external member", still on a record id naming no row. That prefix also matches the incidental "that organization could not be resolved" reason, and it stays green if the verdict admits staff. This PR pins the ruled reason for a staff recipient on a real record, and keeps the contrast the pin exists to draw. Test-only, in the private@objectstack/dogfoodpackage (skip-changeset). Branchclaude/project-thread-pluvu5is harness-assigned and does not followclaude/issue-N-…; the card is #25602.Why the new reason is the intended one
#25591 (letter A of the ruling on #25549) made the D7 pre-flight in
plugin-sharingread the recipient on an effective-publicobject with a realowner_id: anexternalmember of the record's organization is admitted, every other recipient is refused with "… consulted only for an external member of the record's organization, and the recipient is not one", and a grant whose organization cannot be resolved is refused with "… and that organization could not be resolved". The old pin granted onshowcase_project(public_read_write) to a record id naming no row, so on today'smainit is refused for the third reason, an incidental one. Nothing inplugin-sharingchanges here.What changes
beforeAllshowcase_project(D34 Project, the file's own account) and reads the signed-up member'ssys_useridrecordId: 'pj_absent', recipientu_d34_probe, expects the prefix "... has a public sharing model, so a share row on it is consulted only for an external member" (#25605)sys_member.rolethere ismember; expects "… has a public sharing model, so a share row on it is consulted only for an external member of the record's organization, and the recipient is not one"u_d34_proberesolves to no organizationexternalmember of the record's organization; the retired rules'positionrecipients were that organization's staff, which is the population the contrast now uses. The header'sshowcase_projectsentence says "nothing to widen for the organization's staff"The
showcase_contacthalf (a share on a private-OWD object is accepted) is unchanged.Verification (local, worktree on
maina57643d3, then merged withmain9f390945)c29e83c4:os-verify-lock.sh -c 'pnpm --filter @objectstack/dogfood exec vitest run test/showcase-d3-d4-capabilities.dogfood.test.ts'→VERDICT command-exit 0, Tests 5 passed (5).scripts/ablation-replace.mjs, wrap mode):recordId: pjId→recordId: 'pj_absent', anchor 1 → 0, blob3b0184f2→1593274b. Red, 1 failed / 4 passed, received "… and that organization could not be resolved". Restored: blob equals HEAD,git diff HEADempty.plugin-sharing/src/sharing-service.ts,if (recipient === 'external') return null;→if (recipient === 'external' || recipient === 'internal') return null;(hold mode, blobc1f616f5→d0e5e5e9), rebuiltplugin-sharing;ablation-dist-preflight.mjsfound the marker in bothdist/bundles. Red, 1 failed / 4 passed, "promise resolved … instead of rejecting". Restored: blob equals HEAD, rebuilt (cache hit, 6 files), preflight--absentpasses, tree clean; the file is green again (5/5).pnpm exec eslint --no-inline-configon the file: exit 0.tsc --noEmit --listFilesfor@objectstack/dogfoodunder the lock: exit 0, the file listed once.61e0a268(this commit merged withmain9f390945, which touches onlycore's import coercion), closure rebuilt under the lock:os-verify-lock.sh -c 'pnpm --filter @objectstack/dogfood test'(no shard, no path):VERDICT command-exit 0, Test Files 292 passed / 3 skipped (295), Tests 2508 passed / 18 skipped (2526).node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstackderived 58 commands; all 58 exit 0, each exit captured before any pipe. Two first answered exit 3 (PREREQUISITE NOT MET: the pinned control commit forcheck-plugin-teardown-shape --self-testabsent from the shallow clone, and seven dists outside the dogfood closure forcheck:dual-build-cjs-loads); after fetching that commit and building those seven packages both re-ran exit 0.--ranreconciliation: 58 derived, 58 run, 0 NOT-MEASURED, 0 UNRUN.Dogfood Regression Gateshards onpull_requestandmerge_group, so the CI proof for shard 1/3 ismain's first push battery after this lands.acbef37e(merged withmain8801f2bb; one conflict, in this file's contrast block, resolved to this branch's side): the file 5/5; ablation 1 red as before; ablation 2b, under one ablatedplugin-sharingdist that admits internal recipients, this file red (promise resolved instead of rejecting) whilemain's fix(release): revert the red 18.1.0 version commit and fix the dogfood proof that reddened it #25605 version of it is green 5/5; eslint and dogfood tsc exit 0;dispatch-gates58/58 exit 0; full dogfood battery green (counts in report round 2 on dogfood: main's Dogfood Regression Gate (1/3) is red since #25591 — showcase-d3-d4-capabilities still pins the pre-#25549 SHARING_NOT_ENABLED reason for a share on showcase_project #25602).Acceptance notes
examples/app-showcase/src/security/sharing-rules.tssays that onshowcase_project/showcase_task"no sharing rule can ever take effect there", andexamples/app-showcase/test/inert-wirings.test.ts§6's docblock describes the refusal as the object-only one. Since feat(sharing): a share or sharing rule on a public object reaches an external member of the record's organization #25591 a rule there is effective for external recipients. Noted, not filed.Generated by Claude Code