Repository navigation
docs(pm-skill): census reach: in is not ADR-0131 D9 admission; the tenancy ledger decides - #23435
Conversation
…decides Add one reading to platform-readings.md's reading-trap section: the platform-object tenancy census's `reach: in` only says the tenant column resolves; whether a system write is stamped under ADR-0131 D9 is decided by `tenant-scoped` in `PLATFORM_OBJECT_TENANCY`. Paid at the 460-line ceiling by deleting the `in_progress` / advisory-red line, a restatement of reading-discipline.md's two adjacent rules. Claude-Session: https://claude.ai/code/session_013zGKMG1cRedVzWtqGGGZW9 Co-authored-by: Claude <noreply@anthropic.com>
Contract reviewServed-tier: Reviewed in seat by the dispatching skills seat (served tier read from ① Derived judgments
② Semver levelNone owed: ③ Boundary flags
Implemented-by: VERDICT: PASS Generated by Claude Code |
席位核对 · PR #23435 at
|
Fixes #23377
Clause-②: no
What changes
One reading is added to
.claude/skills/pm-dispatch/references/platform-readings.md, section 读数陷阱 (reading traps), and one same-file restatement is deleted to pay for it at the file's 460-line ceiling. File surface: that one file. Noscripts/**, nopackages/**, no other reference.Before / after
Added (119 bytes; placed after 「⛔ 别处写下的计数值一律先复测再用。」, in the count-is-not-mechanism cluster):
Deleted (was line 395, in the required-checks cluster):
Its home:
.claude/skills/pm-dispatch/references/reading-discipline.mdlines 24–25. That is the reference this file's own line 3 points to (见 reading-discipline.md):The deleted line's first half (
in_progressis not a pass) is the negation of line 24's positive criterion: onlycompleted: successreleases. AGENTS.md Multi-agent discipline §7 also states it literally ("in_progressis not a pass"). The second half is line 25 nearly word for word. Nothing in the deleted line exists only there.Line budget: 460 → 460 (ceiling 460, headroom 0). Widest line 120 bytes, unchanged.
Premises, re-read on
4f81f31526before writingscripts/platform-object-tenancy-census.jsonhas"reach": "in"×48 and"reach": "out"×35. The predicate is computed atscripts/platform-object-tenancy-census.mjs:379–384:tenantField = resolveTenantFieldName({ ...def, fields: registeredFields })andreach: tenantField === null ? 'out' : 'in'.scripts/check-platform-object-tenancy-census.mjs:305prints the same predicate sentence in the gate's failure text.PLATFORM_OBJECT_TENANCYis atpackages/objectql/src/tenancy/platform-object-tenancy.ts:124, and the class uniontenant-scoped/global/unclassifiedis at :100–106. It has 9 entries, alltenant-scoped. An unlisted name isunclassifiedby absence (:244–245).Engine.resolveSystemInsertOrganizationatpackages/objectql/src/engine.ts:6699.system-write-organization.tsholds the pure decision and names that method in its header (:164). At :6717,if (isPlatformObjectOutOfTenantAuditScope(object)) return undefined;returns early. That predicate (platform-object-tenancy.ts:261–263) answers true for a platform-namespace object whose class is nottenant-scoped. No organization is derived and nothing is refused.Cross-reading of the two artefacts: 9 of the 48
reach: inobjects aretenant-scopedin the ledger. The other 39 arereach: inand take the early return. That is the size of the trap this line names.Context, all named without a closing verb: the ledger is the one ruled in #13491. The two misreadings the card cites are #23284 and #23256. PR #23340 admitted
sys_notificationto the ledger. The lift for unclassified objects belongs to #15212. This PR is a reading for seats, not a runtime change.Gates (head
0c01a9d561, exit codes captured before any pipe)node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstackderived 20 commands. All 20 exited 0:node scripts/check-closing-keyword-parity.mjs·--self-testnode scripts/check-comment-mask-corpus.mjsnode scripts/pm/check-governed-queue-guard.mjs --self-testnode scripts/pm/check-harness-current.mjs --self-testpnpm --filter @objectstack/lint run check:doc-formula-expressions: the first run exited 3 (PREREQUISITE NOT MET, unbuilt). Afterturbo run build --filter=@objectstack/formula --filter=@objectstack/lintunderos-verify-lock.sh(VERDICT command-exit 0), it exited 0.pnpm check:agent-test-spelling·check:cross-package-test-inputs·check:doc-authoring·check:driver-memory-census·check:gitlink-declared·check:nul-bytes·check:pm-governed-merges·check:pm-half-states·check:pm-skill-id-lint·check:pm-skill-ratchet·check:refd-timer-probe·check:required-contexts·check:skill-frame-sync·check:watch-hint-literalReconciliation:
dispatch-gates --ranprinted 「✓ dispatch-gates --ran: 20 derived famil(ies) accounted for — 20 run, 0 NOT-MEASURED」. The ratchet line reads 「platform-readings.md is 460 lines (ceiling 460; headroom 0)」.Roster families I also ran:
pnpm check:pm-governed-prose0 ·pnpm check:pm-settings-deny-roster0 ·node scripts/check-published-list-mirrors.mjs0 ·node scripts/check-skills-token-ratchet.mjs0.node scripts/check-single-claim-paths.mjswas NOT MEASURED: it exited 2, NOT WIRED, because it needs the PR context only the workflow supplies.The farm (
pnpm lint,pnpm test, builds) and the four type-check lanes belong to CI.Acceptance notes
.claude/**is Tier S in theGOVERNED_SURFACESregister. The triage comment's "Tier H" is a misreading of the register. The landing tier is read at landing bycheck-governed-merges.mjs --pr.维护者速读(草稿)
改了什么:在 PM 席位用的「平台读数事实表」里加了一条:租户普查里的
reach: in只说明找到了租户列,不说明系统写入会被自动盖上组织。会不会盖章,只看PLATFORM_OBJECT_TENANCY账本里是不是tenant-scoped。为了不超行数上限,同时删掉一条已经在 reading-discipline.md 里写过的重复规则,文件仍是 460 行。为什么改:同一个席位在一个班次里两次把普查读成「会盖章」,其中一次写进了裁决记录。实测普查里 48 个
reach: in对象,只有 9 个在账本里是tenant-scoped。其余 39 个对象上的裸系统写入,组织列落空,也不会被拒绝。风险与代价(含回滚):只改给 agent 读的内部参考文件,不进任何发布包,不影响运行时。删掉的那条规则在 reading-discipline.md 里原样保留。回滚就是 revert 这一个提交。
席位意见:
你要做的:无需决策。
.claude/**属 Tier S,由席位做合同档复核,PASS 后入队落地。Generated by Claude Code