Repository navigation
docs: align access, audit and approval pages with ObjectStack 17.0–17.7 - #331
objectstack-fleet[bot] wants to merge 2 commits into
Conversation
… 17.0-17.7 Masking as a third field state, the query-door 403, the deny baseline and the guest anchor, deactivation, RLS fail-closed, audit-row visibility and view_all_audit_log, approval participant visibility, API-key organization binding, and the closed-by-default sign-up audience. Deletes the locale siblings of positions.mdx and permissions/index.mdx: both English corrections reverse the claim that binding a set to `guest` opens data to anonymous visitors. Claude-Session: https://claude.ai/code/session_01CXCwzqwMhkphKoBC11oPSz Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CXCwzqwMhkphKoBC11oPSz Co-authored-by: Claude <noreply@anthropic.com>
席位核对ACCEPT: PR #331 for #329 · 2026-10-15T13:16Z · seat Shape.
Checks pinned to Prose, checked sentence by sentence against objectstack
Locale siblings. All 14 deletions are the Out-of-scope findings. (a) The changelog's 17.1 bullets point at capabilities ObjectOS cannot reach. Carrier: #330, in flight and owning Landing. Non-governed and under the size line. The seat marks the PR ready. ❗ Merging to Generated by Claude Code |
|
Seat note · 2026-10-15T13:24Z: a one-sentence follow-up is being pushed to this PR — Generated by Claude Code |
Fixes #329
Aligns the access, audit and approval pages with what ObjectStack 17.0 through 17.7 actually ship. Every row of the card was checked against the release notes (objectstack
origin/main54770208,content/docs/releases/v17/17-0.mdxthrough17-7.mdx). Where a note and the current docs disagreed, the published 17.x packages decided (npm packof@objectstack/plugin-audit,plugin-auth,plugin-approvals,service-settingsandcoreat 17.7.0, and the pinned@objectstack/spec17.7.0). objectstackmainis18.0.0-next.1, and its hand-written permission pages already describe unreleased v18 behaviour, so they were not taken as the 17.x truth.Row by row
build/automation/approvals.mdx("Who can see a request"),use/approvals.mdx(theAllrow and "You see the requests you take part in")visibleRequestIdsin plugin-approvals 17.7.0: the submitter, a current approver (a position slot included), anyone who has acted or commented, plus platform and organization admins through the overridereference/security.mdxitem 2api.requireAuthis gone (#3963)"permission-sets.mdx"Deactivating a permission set",positions.mdx"Deactivating a position"maskingRule)field-level-security.mdx(a new "Masked fields" section, aMasked fieldcolumn, and the explain engine),permission-sets.mdxappendix,permissions/index.mdxlayer 5,reference/security.mdxitem 4FieldSchema.maskingRuleis in spec 17.7.0. Who sees what followscomputePartialMaskRules: the field'srequiredPermissionsis the unmask gate, and areadable: falsegrant still hides the fieldrecordReaderVisibleObjects)api-access.mdx"Keys belong to an organization"isolated(organization_required), andgroupstill admits it. A key whose owner has left the organization (organization_membership_ended) is refused under both. The page follows the codeinvite_only)OS_AUTH_MEMBERSHIP_POLICYauthentication.mdx"Who may sign up",users.mdx"Add people"invite_only(4f24e9d)". The setting reaches ObjectOS through theauthsettings namespace that ObjectOS already documents as Setup → Authentication → Membership. The published@objectstack/service-settings17.3.0 and 17.7.0 carry the Audience group beside it (audience_posture). Admission logic:decideAudienceAdmissionin plugin-auth 17.7.0, which shows thesignup_enabledtoggle cannot overrideinvite_onlyusing-only policy gates writesrecord-access.mdx"Row-level security refuses what it cannot enforce",reference/security.mdxitem 3guestgrants nothingpositions.mdx("guestgrants nothing" and the deny-baseline paragraph),permissions/index.mdxlayer 2,reference/security.mdxitem 2guestbinding grants an anonymous caller anything on 17.6 or 17.7. The current ObjectStackpermissions/positions.mdxagrees ("names no permission set")field-level-security.mdx("On query" and aFilter, sort, group, aggregaterow),reference/security.mdxitem 4operate/audit-logs.mdx("What each reader is served", theWritesandAuthrows, "Reading a change"),operate/observability.mdxview_all_audit_loglifts the narrowing, andADMIN_FULL_ACCESS_CAPABILITIEScarries it by default (17-7, "Auditing and access", #21296; spec 17.7.0). An organization admin does not hold itReachability of the two rows not documented
Both are open-framework plugin constructor options. Neither has a metadata key, an environment variable or a Setup field that an ObjectOS admin or operator can reach:
new AuditPlugin({ readAudit: { objects } }). The ObjectStack pagepermissions/record-view-auditing.mdxsays there is "no object-metadata key and no environment variable". ObjectOS loads@objectstack/plugin-audititself, from the artifact'srequires(reference/runtime-capabilities.mdx). Therequiresprovider table (packages/core/src/capability-providers.ts,audit) has noconfigKey, so that path builds the plugin with no options. A compiledobjectstack.jsoncannot carry a plugin instance, and no ObjectOS environment variable or Setup field names the option.recordReaderVisibleObjectsis anApprovalsServicePluginoption. Theapprovalsprovider entry has noconfigKeyeither. The object-levelenable.approvalsVisibleToReadersexists only on objectstackmain(18.0.0-next) and is absent from spec 17.7.0.ObjectOS's own composition is private. This conclusion rests on the documented surfaces, and the maintainer can overturn it.
Locale siblings
The rule from #256 deletes a page's siblings when its English correction removes or reverses a capability claim. Two pages meet it:
configure/permissions/positions.{de,es,fr,ja,ko,zh-Hans,zh-Hant}.mdxcarried "bind toguestto open something to anonymous visitors", which is now reversed.configure/permissions/index.{de,es,fr,ja,ko,zh-Hans,zh-Hant}.mdxcarried "guest… lets you bind baseline permission sets", which is now reversed.gen-zh-hant.mjspruned the twozh-Hantfiles. All other siblings stay: their pages gained content, or a claim gained a qualifier (the audit views still show everything to platform administrators), so they stay with the translation pass. No locale file was hand-edited.Gates (local, on
6067fb5)node apps/docs/scripts/gen-zh-hant.mjs --checknode .github/scripts/check-doc-samples.mjsmaskingRule: 'iban'in a scratch tree exits 1node .github/scripts/check-translation-ownership.mjsTRANSLATION_BOT_LOGINis setnode .github/scripts/check-translations.mjspnpm turbo run type-check --continue(shared lock)pnpm turbo run build(shared lock)node .github/scripts/check-locale-surface.mjsnode .github/scripts/check-positioning.mjsnode .github/scripts/check-search-locales.mjspnpm turbo run test(shared lock).github/scripts/**,apps/docs/lib/i18n.ts) changednode scripts/pm/check-half-states.mjs --self-test·node .github/scripts/check-node-floor.mjsThe built HTML has every new anchor and every link target:
#masked-fields,#who-may-sign-up-objectstack-173,#what-each-reader-is-served,#deactivating-a-position,#deactivating-a-permission-set,#keys-belong-to-an-organization-objectstack-171,#row-level-security-refuses-what-it-cannot-enforce,views#public-formsandenvironment-variables#multi-organization-deployments. Thezh-Hansandderoutes forpositionsandpermissionsrender the corrected English. The render smoke-check and the size gate run in CI on this PR.Acceptance notes (not filed)
resources/changelog.mdxbelongs to Build, API and operations pages predate ObjectStack 17.0–17.7: the changelog stops at 17.1, upgrade has no 17.x steps, and the REST reference lists removed cursor paging, error codes and routes #330. Its 17.1 bullets point "who viewed this record" at Audit Logs and read-only approval visibility at Approvals. After this PR neither page documents them, because neither is reachable from ObjectOS (see above). Carrier: Build, API and operations pages predate ObjectStack 17.0–17.7: the changelog stops at 17.1, upgrade has no 17.x steps, and the REST reference lists removed cursor paging, error codes and routes #330.Preset viewstable inoperate/audit-logs.mdxomits theAlltab (shipped since 17.0.0) and theRecord Viewstab (17.1+). The second would be empty on ObjectOS. Both gaps predate this card, which leaves the table's tab list alone. Carrier: none.OS_AUTH_AUDIENCE_POSTURE; it is named in its own refusal log lines. That variable is not onreference/environment-variables.mdx, which belongs to Build, API and operations pages predate ObjectStack 17.0–17.7: the changelog stops at 17.1, upgrade has no 17.x steps, and the REST reference lists removed cursor paging, error codes and routes #330, and this PR documents only the Setup path. Carrier: none.main(18.0.0-next) retiressys_position_permission_setand makes anchor bindings unauthorable.positions.mdxdescribes 17.x and will need another pass when v18 reaches GA. Carrier: none.Generated by Claude Code