Uh oh!
There was an error while loading. Please reload this page.
docs(qa): dedupe the private D11 defect and correct four stale sharing/security checklist texts - #7717
Merged
Merged
Conversation
…g/security checklist texts (#7687) Checklist maintenance falling out of QA run #7637 (access-security FULL area). Five itemised corrections under docs/qa/platform-checklist/, each verified against origin/main before it was written down: 1. Dedupe the private D11 defect. #7637 recorded ONE defect on two clauses (rls-both-sides c5 and owd-sharing-matrix c4). rls-both-sides c5 becomes the canonical expected-fail probe; owd-sharing-matrix c4 cross-references it, so a run counts it once. The text is non-disclosing and names only the FOLLOW-UPS D11 handle (private per the #7463 ruling); a negative pins the naming collision with the unrelated "ADR-0090 D11". 2. suggested-binding-loop knownGaps: stock produces NO suggestion row at all — not the "confirmed (observed)" row the old text claimed. Records the auto-bind-at-boot cause (suggested-audience-bindings.ts `if (bound) continue`), the per-clause dependency split, and the unbind sequence that provisions a genuine PENDING row. 3. record-share-grant-revoke c6: a rule-materialized share carries source_id = the sys_sharing_rule ROW ID, not the rule name — the stable FK purgeRuleGrants(ruleId) reconciles on. 4. sharing-rule-authoring-ui: retargeted from showcase_project (which declares sharingModel 'public_read_write', so a rule on it widens nothing observable) to showcase_contact, genuinely OWD private and covered by no seeded rule. Carries the same source_id correction as (3). 5. RUNNER.md briefing: `view` IS in the overlay-allowed set (view, dashboard, report, translation, email_template — derived from the metadata-type registry), so PUT /api/v1/meta/view/<name> works on the stock read-only showcase package with no escape hatch. Docs-only; no changeset. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01S4sFAfxfUgTMtjLvc95inS
The latest updates on your projects. Learn more about Vercel for GitHub. 1 Skipped Deployment
|
huangyiirene
marked this pull request as ready for review
August 11, 2026 12:10
Uh oh!
There was an error while loading. Please reload this page.
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 freeto 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#7687
Checklist maintenance falling out of QA run #7637 (access-security, FULL area). Five itemised corrections, docs-only. Every named product fact was verified against
origin/mainbefore it was written into the ledger.The five edits (落点 | before | after)
rls-both-sidesc5 +owd-sharing-matrixc4rls-both-sidesc5 is the canonical expected-fail probe;owd-sharing-matrixc4 cross-references it — one defect, one count. Text is non-disclosing and names only theFOLLOW-UPSD11 handlesuggested-binding-loopfixtures.knownGapsconfirmed (observed), NOT pending"{suggestions: [], synced: {created: 0}}; the row-dependent clauses have nothing to run against until the unbind sequence provisions onerecord-share-grant-revokec6source_idthe rule name"source_id= the rule's ROW ID (sys_sharing_rule.id)" — the stable FKpurgeRuleGrantsreconciles onsharing-rule-authoring-uifixtures/steps/acceptance/negativesshowcase_projectcalled "a private-OWD object"showcase_contact(genuinelysharingModel: 'private'), criteriahealth=='green'→stage=='qualified', audience-provisioning requirement recordedRUNNER.mdrunner briefingviewis overlay-allowed, so a view PUT on the stock read-only showcase package needs no escape hatchgit diff --statmaps 1:1 onto that table — two files,areas/access-security.json(edits 1–4) andRUNNER.md(edit 5). Each touched item bumpsrevisionand appends ahistoryentry per README's Change lifecycle.Fact verification against
origin/mainEvery claim written into the ledger was re-derived from source, not carried over from the run narrative:
showcase_projectis not private-OWD —examples/app-showcase/src/data/objects/project.object.ts:16declaressharingModel: 'public_read_write'. The genuinely private ones areshowcase_contact(contact.object.ts:37),showcase_inquiry(inquiry.object.ts:30),showcase_private_note(private-note.object.ts:27). Confirms the issue's premise.showcase_contactis disjoint fromsharing-rules-widen— the four seeded rules insrc/security/sharing-rules.tscovershowcase_project(×2),showcase_inquiryandshowcase_task; none coversshowcase_contact. So the non-overlap the item previously kept by a criteria-distinctness convention now holds structurally.showcase_contactgrant isshowcase_manager { allowRead: true, readScope: 'org' }(permission-sets.ts:124), whose org-depth read already sees every contact and would mask the widening; no other stock set grants the object at all. So the audience needs a scratch set + position, which is now a stated fixture requirement plus a vacuous-pass negative.source_idis the row id —purgeRuleGrants(ruleId)deletes onwhere {source: 'rule', source_id: ruleId}withruleId = rule.id(sharing-rule-service.ts:746, callers at :287/:300);sys-sharing-rule.object.ts:12documentssource_id={rule.id};sharing-rule.test.ts:277assertss.source_id === r.id.allowOrgOverride: trueentries ofDEFAULT_METADATA_TYPE_REGISTRY(packages/spec/src/kernel/metadata-plugin.zod.ts) are exactlyview, dashboard, report, translation, email_template, pinned byprotocol.org-scoped-write-refused.test.tsG5 (case "the refused set is DERIVED from the registry").suggested-audience-bindings.ts:224if (bound) continue; // satisfied before ever being surfaced — nothing pending, with theconfirmed (observed)transition at :211 firing only for a row alreadypending. Cause and effect both match the run; the product defect behind it is suggested-binding-loop (a): the isDefault audience-binding suggestion is never surfaced on stock (auto-bound at boot, then skipped) #7677.Privacy handling of D11
The D11 write-up was delivered privately under the ruling recorded on #7463, so the checklist text references the handle only and explicitly instructs a runner not to restate the defect in a public run issue. Two notes for the reviewer:
docs/qa/platform-checklist/FOLLOW-UPS.mdcarries D1–D8 only, and D11 lives in the maintainer's private register. The item text says so rather than implying a row exists here. Adding even a placeholder row was deliberately not done: it is outside the card's file surface and would put the handle's existence in the public tree without a ruling.FOLLOW-UPSD11 is unrelated toADR-0090 D11(the external-OWD authoring clause cited byaccess-security.owd-save-gate).One correction beyond the five, disclosed
sharing-rule-authoring-uic2 and its step 5 carried the samesource_id-is-the-rule-name error as edit 3. It is fixed in the same revision rather than left behind in an item being rewritten anyway; the item'shistoryentry says so. No other item was touched.Gates
node scripts/check-platform-checklist.mjscoverage.json · qa: UNCLASSIFIED(the known red, #7347). branch: the identical 1 problem, no new findings. Not chased, per the card.JSON.parseonareas/access-security.json→ OKrevisionmust equal the lasthistoryentry's revision); green on all four touched itemsnode scripts/check-nul-bytes.mjsgrep -naP '[\x00-\x08\x0b\x0c\x0e-\x1f\x7f]'over both touched files → no hitsDocs-only, releases nothing → no changeset;
skip-changesetapplied.Generated by Claude Code