Uh oh!
There was an error while loading. Please reload this page.
docs(spec): organizationField pin annotation reflects the #10101 landing (three consumers live) - #11488
Conversation
Refresh the #8778 scope-pin annotation and the .describe() beside tenancy.organizationField in packages/spec/src/data/object.zod.ts. The annotation (landed by #10999) said consumer 1 (audit stamping) was "still the only one wired up" and consumers 2/3 (approvals, automation runs) were "sanctioned but not yet implemented". #10101's PR #11311 (merged 2026-08-23) landed both: resolveRecordOrganizationField was promoted to a shared resolver in @objectstack/metadata-core and all three sanctioned platform-row writers now call it. Also corrects the resolver-home naming ("plugin-audit's resolveRecordOrganizationField" -> @objectstack/metadata-core's, plugin-audit re-exports). Prose accuracy only: the pin's load-bearing "exactly THREE consumers, and no others" sentence and the fourth-consumer refusal posture are unchanged verbatim. No accept/reject behaviour change, no schema shape change, no new keys.
📓 Docs Drift CheckThis PR changes 1 package(s): ⛔ 1 release-owned page(s) name something this change touched. These are read-only:
What this run could not see
Coarse fallback — 126 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): Which tree this was computed onThis run read A worktree cut from an older # while this PR is open — GitHub drops the merge commit once it closes
git fetch origin dcd7e3eac3efc030fa58f8ea995f65c3fdf8799f && git checkout dcd7e3eac3efc030fa58f8ea995f65c3fdf8799f
# afterwards, rebuild it from the two parents, which stay fetchable
git fetch origin b6d9432d1ac2db89bb18075ff14d2acf150b1932 cf29316fb0389712b0beb9b31e2a8de99fdabbd2 && git checkout -B drift-repro b6d9432d1ac2db89bb18075ff14d2acf150b1932 && git merge --no-ff cf29316fb0389712b0beb9b31e2a8de99fdabbd2
node scripts/docs-audit/affected-docs.mjs --json b6d9432d1ac2db89bb18075ff14d2acf150b1932
|
Uh oh!
There was an error while loading. Please reload this page.
Fixes#11307
What was stale, and why now
The #8778 scope-pin annotation beside
tenancy.organizationFieldinpackages/spec/src/data/object.zod.ts(landed by #10999) transcribed thecloud#1395 ruling and said, correctly at the time:
wired up";
resolveRecordOrganizationFieldto the shared platform-row resolver (approvals + automation runs), per the ruled cloud#1395 Option A #10101 carriesthat behaviour change";
.describe()"still speaks of audit rows … and PromoteresolveRecordOrganizationFieldto the shared platform-row resolver (approvals + automation runs), per the ruled cloud#1395 Option A #10101 updates it asthe readers actually land".
#10101's PR #11311 (merged 2026-08-23T13:08:26Z) landed both remaining
consumers:
resolveRecordOrganizationFieldwas promoted to a shared resolverin
@objectstack/metadata-core(new modulerecord-organization.ts), andall three sanctioned platform-row writers now call it —
plugin-audit/src/audit-writers.tsimports theresolver from
@objectstack/metadata-coreand re-exports it from itsoriginal path (public surface unchanged);
plugin-approvals—approval-service.ts'sopenNodeRequest(theonly
sys_approval_requestinsert site) resolvesrequestOrgviacreateRecordOrganizationResolver;service-automation'sObjectStoreSuspendedRunStoreresolves the same way on both write paths(
serialize()for paused rows,recordTerminal()for terminal rows).Verified directly against
mainbefore writing any prose (not from PRdescription alone):
grepconfirms@objectstack/metadata-coreexportsresolveRecordOrganizationField/createFieldPresenceProbe/createRecordOrganizationResolverfromrecord-organization.ts, plugin-auditre-exports the first two from
audit-writers.ts, and bothplugin-approvals/src/approval-service.tsandservice-automation/src/suspended-run-store.tsimportcreateRecordOrganizationResolverfrom@objectstack/metadata-coreand call.organizationOf(...)on live write paths.This PR refreshes:
consumers are live, citing Promote
resolveRecordOrganizationFieldto the shared platform-row resolver (approvals + automation runs), per the ruled cloud#1395 Option A #10101 / PR Promote resolveRecordOrganizationField to the shared platform-row resolver: approvals + automation runs stamp the SUBJECT record's organization (cloud#1395 Option A) #11311 as the landing..describe()onorganizationField— now names all three consumersand the shared resolver, instead of "consulted exclusively when audit rows
are stamped".
resolveRecordOrganizationField"is now named as
@objectstack/metadata-core's, with plugin-audit'sre-export noted, everywhere it appeared in the block (including the
pre-widening paragraph, which had the same stale attribution and the same
"consulted exclusively by audit stamping" staleness once the resolver
fanned out to all three writers).
Pin-property-untouched declaration
The pin's load-bearing property is unchanged and still states verbatim:
The refusal posture for a fourth consumer (lines below the list) is untouched
byte-for-byte. This PR updates which of the sanctioned three are live,
not the sanction set — no accept/reject behaviour change, no schema shape
change, no new keys. Diff is confined to the JSDoc annotation block above
TenancyConfigSchemaand theorganizationField.describe()string inpackages/spec/src/data/object.zod.ts, plus the generated docs mirror.Regen audit
.describe()changes regeneratecontent/docs/references/**(
check:docs). Ranpnpm --filter @objectstack/spec check:generatedfirst —it reported exactly 1 of 14 artifacts stale (
check:docs), all others green.Regenerated narrowly with
pnpm --filter @objectstack/spec gen:docs(neverthe whole set). Diff to
content/docs/references/data/object.mdxis exactlythe
organizationFielddescribe-text change, one row, no other rows moved.check:generatedreruns clean after regen (see Verification).needs:contract-reviewDiff touches
packages/spec/src/**, so per the clause-② path limb this PRstays DRAFT, held for the PM's contract review —
needs:contract-reviewapplies. The substantive claim under review is narrow: prose accuracy
only, the pin property untouched — the review verifies exactly that (the
"exactly THREE consumers, and no others" sentence and the refusal-posture
paragraph are unchanged; only which consumers are live changed).
Verification
All heavy commands run through
scripts/pm/os-verify-lock.sh; exit codescaptured before any pipe; verdicts quoted from the tool's own printed line.
At final commit
cf29316fb0.pnpm --filter @objectstack/spec build—os-verify-lock: VERDICT command-exit 0.pnpm --filter @objectstack/spec check:generated— first run reported 1 of14 stale (
check:docs, expected from the.describe()edit), regeneratednarrowly with
gen:docs(audited above), rerun reports✓ All 14 generated artifacts are up to date—os-verify-lock: VERDICT command-exit 0.pnpm --filter @objectstack/spec test -- --maxWorkers=2—Test Files 419 passed (419),Tests 11183 passed (11183)—os-verify-lock: VERDICT command-exit 0.pnpm --filter @objectstack/spec typecheck—tsc --noEmitclean,check:scripts-typecheckclean,check:test-typecheck: OK(55 file(s) /263 error(s) held in the pre-existing shrink-only
test-typecheck-debt.jsonledger, issue@ts-expect-error退役 pin 在packages/spec里是幽灵检查:tsconfig 把**/*.test.ts排除出唯一的tsc --noEmit#5286 — unaffected by this diff)—
os-verify-lock: VERDICT command-exit 0.node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack(no hand-supplied paths, re-run at the finalcommit — same 3-file change set both times) — 32 local gate(s) named, all
run to a green verdict:
check:changeset-gate-self-tests·check:cross-package-test-inputs·check:doc-anchors·check:doc-authoring·check:doc-formula-expressions·check:doc-security-posture·check:docs-audit-scope·check:docs-redirects·check:empty-state(spec) ·check:liveness(spec) ·
check:merge-driver·check:objectui-changeset·check:published-files·check:published-readme-links·check:quick-reference-counts·check:role-word·check:slot-lookup·check:spec-parsed-alias·check:strictness-ledger(spec) ·check:test-source-alias·check:type-source-resolution·check:variant-docs(spec) ·check-adr-0087-registration·check-changeset-no-major·check-ci-filter-parity·check-cross-package-test-inputs·check-doc-frontmatter·check-empty-changeset·check-plugin-teardown-shape·check-section-landing-index·docs-audit/check-affected-docs. The 32nd,check-dev-prereqs, needed a call-site distinction: CI's own gate for it(
lint.yml) invokes only--self-test, which passes; the full scan (noflag) reports the workspace's other 66 packages have no
dist/in thisfresh worktree — a local dev-server precondition unrelated to this diff
(unbuilt siblings, not this PR), not something CI enforces here.
@objectstack/formulaand@objectstack/lintwere built (their owndependency closures first) so their two doc-content gates above could run
for real rather than being declared unrunnable.
node scripts/check-nul-bytes.mjs(repo-wide) andnode scripts/check-adr-anchors.mjs— both clean; the file's one ADRanchor (
ADR-0120,IndexSchema.unique) is untouched by this diff.Generated by Claude Code