You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Findings triage — verdict: HOLD (finding retained). Routing recorded: this belongs to domain:spec if and when it is promoted — see below; no domain:* applied while it is held, since the label is only consumed by dispatch.
Why still held: the author's grading is right and re-checked rather than taken on trust. The new strip did not exist before PR #6433 — before it, the payload went into the SET clause verbatim, which was the #6262 data corruption — so no caller has lost a signal they previously had. The gap only bites a caller who has opted into onFieldsDropped or strictReadonlyWritesand wrote a non-id value into data.idand declared multi; a warn is emitted on that path. That is a narrowed observable surface on an author-error path, not a live defect.
Why not promoted: the fix is vocabulary design, not a small edit — add a value, or split reason into category + specific cause — and it ships through three protocol consumers (packages/spec/src/api/batch.zod.ts, .../api/protocol.zod.ts) plus regenerated spec baselines. PR #6433 was right not to reuse readonly / readonly_when: that would make reason lie, which is strictly worse than the current silence.
Routing when promoted:domain:spec, not domain:spec-surface. The enum at packages/spec/src/data/data-engine.zod.ts:228 is the accepted set — widening it changes what validates — so the reverse red line applies however small the diff (precedents #6245, #6235). Only the .describe() half would be surface, and it cannot travel without the enum.
Restart condition: promote when a second non-readonly strip lands on the write path. One instance is a special case that a warn covers; two make the enum's closed shape a recurring lie, and at that point the design question ("new value vs. category + cause") has two data points instead of one to answer it. Also promote immediately if a caller reports relying on strictReadonlyWrites for total coverage — that would convert this from a narrowed surface into a broken promise.
Stale-premise check:reason: z.enum(['readonly', 'readonly_when']) is verbatim on origin/main at data-engine.zod.ts:228, describe text unchanged. The deliberate "not reporting this one" comment in PR #6433's new strip block is the externalised half this card records, and item 3 of the body's own landing-site list correctly requires deleting it whenever the enum moves.
No target:<major>: no shipped-surface defect — the strip itself is correct, only a machine-readable signal is absent, and the warn is present.
Findings sweep (maintainer-authorized one-off, 2026-08-07 — registered on #6015): promoted to the queue. The seam's declared observability is now narrower than the strips it reports on: yesterday's legal data.id strip (PR #6433) is invisible to onFieldsDropped and to strictReadonlyWrites — the loud/observable pair #3407/#5126 built loses coverage silently as new legal strips appear. Widen the enum (acceptance-surface change ⇒ spec seat). finding → pm:queue + domain:spec.
Dispatch basis (findings-sweep promotion, quoted as ruling): "The seam's declared observability is now narrower than the strips it reports on … Widen the enum (acceptance-surface change ⇒ spec seat)." Direction is the enum-widening route, NOT the category+cause split the earlier HOLD comment surveyed.
File surface (from the card's own landing-site list):packages/spec/src/data/data-engine.zod.ts (DroppedFieldsEventSchema.reason + describe), the protocol-response consumers packages/spec/src/api/batch.zod.ts / protocol.zod.ts, packages/objectql/src/engine.ts (the PR fix(objectql): multi update 的 SET 载荷剥掉非 id 的 data.id (#6262) #6433 strip block — its deliberate "not reporting this one" comment must be deleted when the enum moves, per the card), regenerated api-surface/JSON-schema baselines.
PM bookkeeping: pm:dispatched → pm:queue. The dispatched os-dev was stopped externally (mass session-level cancellation, 15:21Z patrol census) before pushing any code — no branch, zero work product. Claim released; card returns to the queue intact. Re-dispatch awaits the maintainer's word; the brief (ruling: widen the enum; strict-mode posture measured in-PR) remains valid.
Activity
claude commentedon Aug 7, 2026
Findings triage — verdict: HOLD (
findingretained). Routing recorded: this belongs todomain:specif and when it is promoted — see below; nodomain:*applied while it is held, since the label is only consumed by dispatch.Why still held: the author's grading is right and re-checked rather than taken on trust. The new strip did not exist before PR #6433 — before it, the payload went into the SET clause verbatim, which was the #6262 data corruption — so no caller has lost a signal they previously had. The gap only bites a caller who has opted into
onFieldsDroppedorstrictReadonlyWritesand wrote a non-id value intodata.idand declared multi; awarnis emitted on that path. That is a narrowed observable surface on an author-error path, not a live defect.Why not promoted: the fix is vocabulary design, not a small edit — add a value, or split
reasonintocategory+ specific cause — and it ships through three protocol consumers (packages/spec/src/api/batch.zod.ts,.../api/protocol.zod.ts) plus regenerated spec baselines. PR #6433 was right not to reusereadonly/readonly_when: that would makereasonlie, which is strictly worse than the current silence.Routing when promoted:
domain:spec, notdomain:spec-surface. The enum atpackages/spec/src/data/data-engine.zod.ts:228is the accepted set — widening it changes what validates — so the reverse red line applies however small the diff (precedents #6245, #6235). Only the.describe()half would be surface, and it cannot travel without the enum.Restart condition: promote when a second non-readonly strip lands on the write path. One instance is a special case that a
warncovers; two make the enum's closed shape a recurring lie, and at that point the design question ("new value vs.category+ cause") has two data points instead of one to answer it. Also promote immediately if a caller reports relying onstrictReadonlyWritesfor total coverage — that would convert this from a narrowed surface into a broken promise.Stale-premise check:
reason: z.enum(['readonly', 'readonly_when'])is verbatim onorigin/mainatdata-engine.zod.ts:228, describe text unchanged. The deliberate "not reporting this one" comment in PR #6433's new strip block is the externalised half this card records, and item 3 of the body's own landing-site list correctly requires deleting it whenever the enum moves.No
target:<major>: no shipped-surface defect — the strip itself is correct, only a machine-readable signal is absent, and thewarnis present.本评论来自分诊座位 Routine(#5474 试点),不构成认领。
Generated by Claude Code
os-project-manager commentedon Aug 8, 2026
Findings sweep (maintainer-authorized one-off, 2026-08-07 — registered on #6015): promoted to the queue. The seam's declared observability is now narrower than the strips it reports on: yesterday's legal
data.idstrip (PR #6433) is invisible toonFieldsDroppedand tostrictReadonlyWrites— the loud/observable pair #3407/#5126 built loses coverage silently as new legal strips appear. Widen the enum (acceptance-surface change ⇒ spec seat).finding→pm:queue+domain:spec.Generated by Claude Code
os-zhuang commentedon Aug 9, 2026
CLAIM — PM seat
domain:spec(sessionsession_01PiRUoQkTSBBmpyXBY3cVn2), dispatching to an os-dev subagent.claude/issue-6437-dropped-fields-reason-vocabulary../objectstack-issue-6437(per-task, per Prime Directive Migrate documentation site to Fumadocs with monorepo structure and shared content #11)category+cause split the earlier HOLD comment surveyed.packages/spec/src/data/data-engine.zod.ts(DroppedFieldsEventSchema.reason+ describe), the protocol-response consumerspackages/spec/src/api/batch.zod.ts/protocol.zod.ts,packages/objectql/src/engine.ts(the PR fix(objectql): multi update 的 SET 载荷剥掉非 id 的data.id(#6262) #6433 strip block — its deliberate "not reporting this one" comment must be deleted when the enum moves, per the card), regenerated api-surface/JSON-schema baselines.view.zod.ts) and An action param'sdefaultValueis typedz.unknown(), so a default that can never satisfy the param's own value contract is accepted at authoring time and only 400s at submit #6970 (action.zod.ts) devs in flight in the same package — disjoint source files, overlapping generated artifacts; serial landing via the PM relay, do not pre-resolve.Generated by Claude Code
os-zhuang commentedon Aug 9, 2026
PM bookkeeping:
pm:dispatched→pm:queue. The dispatched os-dev was stopped externally (mass session-level cancellation, 15:21Z patrol census) before pushing any code — no branch, zero work product. Claim released; card returns to the queue intact. Re-dispatch awaits the maintainer's word; the brief (ruling: widen the enum; strict-mode posture measured in-PR) remains valid.Generated by Claude Code
os-zhuang commentedon Aug 9, 2026
RE-CLAIM — PM seat (session
session_01PiRUoQkTSBBmpyXBY3cVn2), fresh os-dev dispatched under the maintainer's re-acceleration (2026-08-09 chat). Branchclaude/issue-6437-dropped-fields-reason-vocabulary, worktree../objectstack-issue-6437. All constraints in the 12:28Z claim comment remain binding.Generated by Claude Code
feat(spec,objectql): DroppedFieldsEvent.reason names the dispatch-rul…
docs(kernel): align data-engine contract page with the shipped engine…
fix(objectql): the addressed row's primary key is not a dropped field (…
test(spec): the first data/ file group's test titles state each cited…