Milestone: M1 · Labels: pm:queue · Blocked-by: 02, 03
src/profiles/*.profile.ts (5 permission sets), src/sharing/positions.ts (7 positions),
src/sharing/*.sharing.ts (6 rules), FLS declarations, src/security/bind-position-sets.ts +
onEnable in objectstack.config.ts. Adds requires: ['sharing'].
Positions, sets, the permission matrix, the six sharing rules and the FLS table are pinned there (global-first revision, 2026-09-07: no seal keeper; clm_records_manager covers execution and archive).
Capabilities granted via systemPermissions: clm_requester.access · clm_legal.access · clm_finance.access
· clm_records.access · clm_admin.access; action gates approve_contract ·
execute_contract · archive_contract · terminate_contract · manage_clauses · manage_approval_rules.
contract_manager_reports uses writeScope: 'own_and_reports' only if declaring it does not require the
hierarchy-security capability at validate time; if it does, declare the capability (it is safe on an
open-edition boot — see HotCRM's objectstack.config.ts note) and record the edition boundary in the PR.
Bindings: sys_position_permission_set rows cannot be seeds — bind on kernel:bootstrapped as ATS does.
- Gates green. Two requester accounts cannot read each other's contracts through REST; a
clm_legalaccount reads all; aclm_financeaccount reads noin_reviewcontract. clm_party.bank_accountis absent from a requester's REST read.
Views/app gating (07).