docs(faq): the Copilot answer stops promising an AI redaction rule - #1624
Merged
Conversation
`reference/faq` line 116, under "The Copilot won't answer about a specific customer", told admins they could "block the Copilot from referencing flagged accounts (e.g., VIP, in litigation)" and that "The Copilot says so explicitly". No such control ships, in any of the three faces. Resolved against the installed platform (@objectstack/* 17.3.0): none of the eleven shipped settings namespaces carries a redaction or sensitivity key, no Setup entry names redaction, sensitivity or masking in any of the four shipped locales, and src/ carries no VIP, litigation or AI-exclusion flag for anything to read — so the promised "says so explicitly" behaviour has nothing to trigger it. The platform's only redactFields is an object's publicSharing block, spec'd as the fields stripped from share-token responses; knowledge_article.object.ts is this repo's only user, for exactly that. Nothing leaks — the danger runs the other way. An admin who believes flagged-account blocking is available to switch on may never configure the control actually doing the work, so the line becomes a denial that hands the reader field-level security: the Copilot reads as the signed-in user, so a field masked on their profile never reaches it. That is what administration/sharing-and-security already states, FLS being enforced for the Copilot as for list views, reports and the API. Deliberately not written as per-account blocking — FLS is permission-shaped visibility, and conflating the two is the defect being removed. The same claim in checklist form was corrected on administration/setup section 14 (#1622); both pages now deny it in one voice and point at one page. Fixes #1623 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018xtjdpZFjgWh4Ad9Wcx68J
|
The latest updates on your projects. Learn more about Vercel for GitHub. |
os-steve
marked this pull request as ready for review
September 6, 2026 01:05
This was referenced Sep 6, 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.
Fixes #1623
Description
reference/faqline 116, under "The Copilot won't answer about a specific customer.", promised a security control that ships nowhere:The answer offered two possibilities and only the first one — sharing — was real. Line 116 is now a denial that hands the reader the mechanism actually doing the work, in all three faces. Nothing else on the page is touched.
Why this matters more than a wrong navigation path
No data leaks. Field-level security is real and is enforced for the Copilot, exactly as
administration/sharing-and-securitystates. The risk runs the other way: an admin reads this bullet, believes flagged-account blocking is sitting there waiting to be configured, and therefore never sets up the FLS that is actually protecting the records. A false control placed next to a true one can substitute for it in a reader's head.So the replacement is written to leave a reader knowing what they must actually do: field permissions on the profile are the control, and there is no second, AI-specific one to go looking for.
What was resolved, and against what
Measured in this worktree at
b66ee261, against the installed package —node_modules/@objectstack/specreports17.3.0, matchingobjectstack.manifest.json'sspecVersion: ^17.3.0.redactFieldspublicSharingblock — fields stripped from share-token responses.src/objects/knowledge_article.object.tsis this repo's only user, for exactly that. Not the Copilot.src/confidentialhit is a comment insales-manager.profile.tsaboutcrm_opportunity.is_private, an opportunity row-level rule — not an account flag and not AI-specific.src/skills/instruction mentioning redaction or a blocked-account checkThree near-misses were run down rather than pattern-matched, and none is a Copilot redaction rule:
maskingRule— a field property (name/email/phone/id_card/bank_account, or{keepHead, keepTail}). Field-shaped PII masking, not per-account blocking.redactUrlCredentials/redactableConfigKeys/MetadataTypeRedactor— credential redaction on datasource and metadata read paths. Secrets, not customer records.sensitivityinspec/dist/data— the words "case sensitivity" in filter-logic prose. Not a key.⇒ the card's premise holds unchanged. Nothing has appeared at this ref that would invert it.
Changes Made
content/docs/reference/faq.mdx— line 116 onlycontent/docs/reference/faq.zh-Hans.mdx— line 116 onlycontent/docs/reference/faq.zh-Hant.mdx— line 116 only.changeset/faq-no-ai-redaction-rule.md— added by this PRThe diff is exactly
@@ -116 +116 @@in each of the three faces — one line each, nothing else on the page, nosrc/, notest/**, no new guard.Deliberately not over-claiming FLS
FLS gives permission-shaped visibility, which is a different thing from per-account VIP blocking — conflating them is the defect this card exists to remove. The new line therefore says only what is true: the Copilot reads as the signed-in user, so a field masked on their profile never reaches it. It does not say FLS blocks flagged accounts. Record-level invisibility is left where it already lives — the Sharing bullet immediately above — rather than being restated as a second cause.
crm_opportunity.is_privateis real record-level confidentiality, and is deliberately not cited here: it is opportunity-scoped, not account-scoped, not AI-specific, and already covered by that sharing bullet. Naming it would have re-invented the very shape being deleted.Agreement with PR #1622
#1622 corrected the same claim in checklist form on
administration/setupsection 14. Its landed wording was read first and reused, so the two pages now deny the same thing in one voice and send the reader to the same page —Sharing & security, unanchored, the same link target #1622 used.Terminology follows the live pages rather than a fresh coinage: zh-Hans 字段级安全 / 遮罩 / 权限档案 / 共享与安全, zh-Hant 欄位層級安全 / 遮罩 / 權限設定檔 / 共用與安全, each as
administration/sharing-and-securityspells it in that locale. The zh-Hant face keeps #1622's脫敏spelling for the denied term so both pages name it identically.Testing
pnpm verify— exit 0, all eight stages ran and printed their own verdict:Targeted docs guards, run first:
docs-setup-navigation-names,docs-anchor-links,docs-zh-hant-justification,docs-locale-callouts,docs-drift— 5 files, 57 tests, exit 0.Checked by hand, because no gate reads this prose:
/zh-Hans/and/zh-Hant/.grep -nE '\]\(/docs/'over both Chinese faces returns nothing.RETIRED_UI_NAMES, and neither bolded phrase (There is no AI redaction rule,field-level security) contains an arrow, so it makes no**App → …**navigation claim for the guard's rule 2 to resolve. No path is bolded that does not resolve, because no path is claimed.grep -naP '[\x00-\x08\x0b\x0c\x0e-\x1f\x7f]'over all four changed files is empty.What no green here proves
link-check.ymlwakes on.mdxbut runsfile-extension: '.md'exact, so it opens none of the three edited pages — only the changeset, which is why no site-absolute link was put in it. The claim that the bullet is now true rests on the measurements above, atb66ee261, against installed@objectstack/* 17.3.0— not on any check turning green.Type of Change
Documentation update. Draft — not marked ready, not enqueued, no auto-merge.
Generated by Claude Code