Filed unassigned by the domain:spec @ objectui execution seat, session session_01VCpmqvacV4BypY48QdoxcE, R1, 2026-09-16T10:2xZ. ⛔ Not claiming; grading and domain:* are the triage seat's.
Filed because references/platform-readings.md is a governed surface a lane seat may not edit, and because this debt has a track record of accumulating: the previous shift's 收班简报 §3 item 6 (objectui#5734 5682547109) lists four such readings still owed from before this one. Three more were measured today. ⛔ A platform reading with no carrier is exactly the thing that gets re-derived from scratch by the next seat.
Batched into one card deliberately (「写少而大」). Each is independent — ⛔ adopt or reject them one at a time.
1 · zod v4 defines safeParse / parse per INSTANCE, so prototype spying throws
Measured by the dev on objectui#9585 while building a parse-counting probe, and it is the reason that probe needed a different seam.
vi.spyOn(z.ZodType.prototype, 'safeParse') throws "The property safeParse is not defined on the object" — zod v4 hangs these methods on each schema instance, not on a shared prototype.
⇒ the working seam is the barrel population: instrument every safeParse/parse across the exports of the @object-ui/types/zod barrel (measured: 408 methods across 211 exports), which are module singletons and therefore the very objects consumers hold.
⚠️ Stated radius: a parse through a zod object minted inside some function body is NOT counted by that seam.
Why it belongs in the fact table: "is this schema actually parsed at runtime?" is a recurring question on this board — it is the whole of the declared-but-unenforced family — and the obvious instrument silently fails rather than answering.
2 · The REST/MCP write-identity split is NOT a constant — it is per-token
The existing record says the split is: MCP resolves to the account, REST-posted content is recorded as claude[bot]. That was measured on the previous shift under the os-sam token and is true of that token, not of the channel.
Measured this shift on a different token, by reading back this seat's own comments:
| channel |
previous shift (os-sam token) |
this shift (this session's token) |
MCP get_me / GET /user |
os-sam |
hotlong |
| REST-posted comment author |
claude[bot] |
hotlong |
Same script (scripts/pm/post-stamped.mjs), same proxy, different answer. Control that both readings are live: on objectui#5734 the predecessor's comments 5682547109 / 5682611149 read claude[bot] while this seat's 5695637315 reads hotlong, in one thread.
⇒ ⛔ a seat may not assume its content is attributed to claude[bot]. It has to read back one of its own writes.
⚠️ The consequence is a governance one, and it is why this item is not cosmetic: hotlong is one of the two accounts in GOVERNED_APPROVERS. A seat holding that token authors content as an approver account, which sits against 「批准账号永不跑席位或作其关联用户」 — while SKILL.md elsewhere anticipates exactly that case with its author-identity 422 fallback for request-review. ⛔ This card does not resolve that; it records that the identity is measurable and was measured, so the question can be asked against a reading instead of an assumption. Raised to the maintainer separately.
3 · scripts/pm/os-verify-lock.sh does not exist in objectui
SKILL.md 〈候选与批次〉 makes the depth wait a named precondition of the Nth dispatch: 「第 N 单派发前读 scripts/pm/os-verify-lock.sh --status:到达深度 ≥ LOCK_DEPTH_HOLD(= 2)即等。」
Measured: that script is objectstack's. It is absent from the objectui checkout (independently reported by the objectui#9585 dev, which went looking for it). A seat working objectui either runs objectstack's copy — which reports on /tmp/os-heavy-verify.lock, a container-local lock shared by whatever runs in that container, ⛔ not an objectui-scoped queue — or has no reading at all.
⇒ the rule's instrument is either cross-repo-by-accident or missing, depending on which checkout the seat stands in. ⛔ This card does not propose which; it records that the named command is not repo-local.
Dedup words
platform-readings zod v4 instance safeParse · vi.spyOn ZodType.prototype throws · REST identity claude[bot] per-token · GOVERNED_APPROVERS seat token · os-verify-lock.sh absent objectui
Generated by Claude Code
Filed unassigned by the
domain:spec@ objectui execution seat, sessionsession_01VCpmqvacV4BypY48QdoxcE, R1, 2026-09-16T10:2xZ. ⛔ Not claiming; grading anddomain:*are the triage seat's.Filed because
references/platform-readings.mdis a governed surface a lane seat may not edit, and because this debt has a track record of accumulating: the previous shift's 收班简报 §3 item 6 (objectui#57345682547109) lists four such readings still owed from before this one. Three more were measured today. ⛔ A platform reading with no carrier is exactly the thing that gets re-derived from scratch by the next seat.Batched into one card deliberately (「写少而大」). Each is independent — ⛔ adopt or reject them one at a time.
1 · zod v4 defines
safeParse/parseper INSTANCE, so prototype spying throwsMeasured by the dev on objectui#9585 while building a parse-counting probe, and it is the reason that probe needed a different seam.
vi.spyOn(z.ZodType.prototype, 'safeParse')throws "The property safeParse is not defined on the object" — zod v4 hangs these methods on each schema instance, not on a shared prototype.⇒ the working seam is the barrel population: instrument every
⚠️ Stated radius: a parse through a zod object minted inside some function body is NOT counted by that seam.
safeParse/parseacross the exports of the@object-ui/types/zodbarrel (measured: 408 methods across 211 exports), which are module singletons and therefore the very objects consumers hold.Why it belongs in the fact table: "is this schema actually parsed at runtime?" is a recurring question on this board — it is the whole of the declared-but-unenforced family — and the obvious instrument silently fails rather than answering.
2 · The REST/MCP write-identity split is NOT a constant — it is per-token
The existing record says the split is: MCP resolves to the account, REST-posted content is recorded as
claude[bot]. That was measured on the previous shift under theos-samtoken and is true of that token, not of the channel.Measured this shift on a different token, by reading back this seat's own comments:
os-samtoken)get_me/GET /useros-samhotlongclaude[bot]hotlongSame script (
scripts/pm/post-stamped.mjs), same proxy, different answer. Control that both readings are live: on objectui#5734 the predecessor's comments5682547109/5682611149readclaude[bot]while this seat's5695637315readshotlong, in one thread.⇒ ⛔ a seat may not assume its content is attributed to
claude[bot]. It has to read back one of its own writes.hotlongis one of the two accounts inGOVERNED_APPROVERS. A seat holding that token authors content as an approver account, which sits against 「批准账号永不跑席位或作其关联用户」 — whileSKILL.mdelsewhere anticipates exactly that case with its author-identity 422 fallback for request-review. ⛔ This card does not resolve that; it records that the identity is measurable and was measured, so the question can be asked against a reading instead of an assumption. Raised to the maintainer separately.3 ·
scripts/pm/os-verify-lock.shdoes not exist in objectuiSKILL.md〈候选与批次〉 makes the depth wait a named precondition of the Nth dispatch: 「第 N 单派发前读scripts/pm/os-verify-lock.sh --status:到达深度 ≥LOCK_DEPTH_HOLD(= 2)即等。」Measured: that script is objectstack's. It is absent from the objectui checkout (independently reported by the objectui#9585 dev, which went looking for it). A seat working objectui either runs objectstack's copy — which reports on
/tmp/os-heavy-verify.lock, a container-local lock shared by whatever runs in that container, ⛔ not an objectui-scoped queue — or has no reading at all.⇒ the rule's instrument is either cross-repo-by-accident or missing, depending on which checkout the seat stands in. ⛔ This card does not propose which; it records that the named command is not repo-local.
Dedup words
platform-readings zod v4 instance safeParse·vi.spyOn ZodType.prototype throws·REST identity claude[bot] per-token·GOVERNED_APPROVERS seat token·os-verify-lock.sh absent objectuiGenerated by Claude Code