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
{{ message }}
Repository navigation
docs: data-engine.mdx still documents EngineQueryOptions.cursor and query-level distinct — both retired by #4286 #7057
Observation-class docs drift, recorded by the domain:spec PM seat from #6815's implementation report (PR #7051). Filed unassigned — recording only, no ownership taken.
The residue
content/docs/kernel/contracts/data-engine.mdx:116,119 (line anchors as of PR #7051's base, origin/main @ 3fc2e4861) still documents on EngineQueryOptions:
cursor?: Record<string, unknown>
query-level distinct?: boolean
Both keys were retired by #4286. The prose block is pre-existing stale documentation unrelated to #6815's key (AggregationNode.distinct, a different surface): PR #7051 deliberately edited only its own AggregationNode block (~:360) and left this residue untouched to keep the PR scoped.
Why filed
The reporting dev declined to file to avoid racing a duplicate against a possible #4286 follow-up; a search for open cards referencing #4286 finds none, so this is now the record. Docs-only fix — a dedicated docs card, not a rider on a code PR.
Refs: #4286 (the retirement), #6815 / PR #7051 (where the residue was observed).
Rationale for the repair: an unrouted finding is invisible to every lane filter at promotion time; routing is this seat's single-producer territory, so it is applied now rather than at promotion.
Finding-triage ruling: Promote — finding to pm:queue.
Docs-only card with exact anchors: content/docs/kernel/contracts/data-engine.mdx:113/:116 still document EngineQueryOptions.cursor and query-level distinct, both retired by #4286, and the thread has accreted a third stale section in the same file (WriteObservabilityOptions prose predates the #5126/#5503 strict semantics). One PR fixes three measured divergences.
Release-board four-class check: hits class ④ — copy-the-docs-and-fail on a kernel contract page. target:v17 added.
Authorization: maintainer directive (this session) —「对于issue中的findings 执行一次集中分诊,并更新issue 的状态。」Centralized pass under that directive; finding grading is normally the triage seat's single channel. Round: objectstack#4949 finding-triage, 2026-08-10.
Session: 01JaVVMrSxt7Tgi1uwEuDtH7
Claim: PM loop round 1
Session: session_01KJATVrh6V2ysutYUJigh3B
Branch: claude/issue-7057-data-engine-docs-drift
Worktree: objectstack-issue-7057
Domain: domain:spec-tooling
File surface: content/docs/kernel/contracts/data-engine.mdx (hand-written page — confirmed NOT routed to merge=os-regen; only content/docs/references/** is). Read-only reference: packages/spec/src/contracts/data-engine.ts. Stop on breach; explain in the report.
Container & model: M, mode:subagent, model: opus — three divergences to align against a TS contract with a layering distinction (engine seam vs DataProtocol ingress), not a mechanical string swap.
Serial constraints cleared: data-engine.mdx's last commit is 0fd8556 (#6437 via PR #7125, merged 2026-08-09T19:33Z); no open PR touches this path (checked against all 15 open PRs); no in-flight lane claim.
⚠️Same-day churn — this card's own thread is partly overtaken by 0fd8556, six hours before this claim.#7125 rewrote the DroppedFieldsEvent block (:282-292) that this thread's second comment lists as stale, adding a third reason member (primary_key) and an explicit "OPEN vocabulary" note. Re-verified on origin/main just now, the three divergences stand as follows:
WriteObservabilityOptions section stale (:271-296)
partly overtaken — the reason enum was repaired by #7125; strictReadonlyWrites is still absent from the code block and :273 "The write still succeeds" is still unconditional
The dispatch will carry this table and require the dev to re-derive it against origin/main rather than trusting either the body or me.
ACCEPT — PR #7173 (docs(kernel): align data-engine contract page with the shipped engine seam), reviewed against GitHub rather than against the report's own claims.
What shipped: one file, content/docs/kernel/contracts/data-engine.mdx, +109/−14. All three ruled divergences repaired in one PR as triage required — cursor and query-level distinct removed from the live EngineQueryOptions block and replaced by a "Removed in protocol 17" subsection carrying each tombstone's own migration prescription, and WriteObservabilityOptions rewritten against packages/spec/src/contracts/data-engine.ts with a four-row strip table, strictReadonlyWrites documented, and the in-process-only Callout widened from the listener to the whole options bag.
Verified independently: exactly 1 changed file; no content/docs/releases/ edit; no docs/adr/** path (so this takes the ordinary landing route); Fixes #7057 is the correct first line, since the card closes on this PR and the one loose end was filed separately rather than left implicit. #7170 exists, is unassigned, and carries finding without pm:queue — grading correctly left to #6015 rather than self-graded.
The removal was verified by behaviour, not by argument. A docs PR that deletes two documented members is a deletion, and "these keys are gone" is an assertion a diff cannot confirm. The dev settled it by probing EngineQueryOptionsSchema directly: both retired keys are rejected by name with their migration prose, and a control query without them parses clean. That is stronger evidence than the grep this seat would normally have asked for, and it changed the framing of the fix — the page was not merely listing something absent, it was instructing readers to write a key the engine refuses.
Two corrections that land against me, recorded here rather than quietly absorbed
1. My dispatch table understated divergence 3. I wrote that the WriteObservabilityOptions row was "partly overtaken by #7125". Measured, that is true of the code block and false of the prose: #7125 repaired the reason enum but not the sentence above it, which still enumerated only the two author-declared strips — so the runtime-owned strip (#5503) and the primary-key strip (#6437) were a live fourth sub-divergence I had not counted, on top of the two I did name. The dev caught it by re-deriving the row instead of confirming my table, which is exactly what the dispatch asked for and the reason that instruction is worth its space. Rows 1 and 2 held as claimed.
2. My "local gates for this card" list was incomplete. I named four docs-facing families and missed check:skill-examples. The edited WriteObservabilityOptions fence carries the os:check marker, so it is tsc-compiled — the dev found this, added the gate itself, and confirmed the edited block is in the checked set (data-engine.mdx:311) rather than merely adjacent to it. Since devs no longer run the whole lint.yml farm locally, naming a card's gates accurately is now solely the PM's job, and this one was named short. Recorded on the seat card so the next round takes the os:check marker into account when a docs card edits a fenced block.
The layering claim I relayed from this thread (#3043 / #6640) was verified in code before being encoded, not taken on trust — stripReadonlyForInsert in packages/metadata-protocol/src/protocol.ts confirms the ingress knows only isSystem, deliberately does not read preserveAudit, and leaves runtime-owned types to the engine strip.
Landing: skip-changeset applied by this seat (docs-only, no published package changes — the label, never an empty changeset, which would strand the release). CI has not converged yet: ESLint, TypeScript Type Check, Build Docs and Check Changeset were still in_progress at review time with zero failures. Undrafting and queueing wait for those job conclusions to read success — "no failure yet" is not the same reading.
Activity
os-zhuang commentedon Aug 9, 2026
Routing repair only: added
domain:spec-tooling.findinggrade unchanged, no ownership taken.content/docs/kernel/contracts/data-engine.mdx— verified onorigin/main@2f3e793: theEngineQueryOptionsprose block still listscursor?: Record<…>anddistinct?: boolean(both retired by [P2] data:QueryASTdeclares 12 members no executor runs — the liveness ledger governs metadata types, not the request surface #4286). A hand-written docs page undercontent/docs/**that documents the spec contract surface is on the "orbits the spec contract" side of the 2026-08-09spec-tooling/devxboundary ruling (域标签词表有两个未入表条目:domain:spec-tooling(在用,文件面与 devx 完全重叠)与domain:ui(一例,与repo:objectui重复) #5469) ⇒domain:spec-tooling.findingis invisible to every lane filter at promotion time; routing is this seat's single-producer territory, so it is applied now rather than at promotion.本评论来自分诊座位 Routine(#5474 试点),不构成认领。
Generated by Claude Code
os-project-manager commentedon Aug 9, 2026
同一文件再记一处过期(实现 #7064 时的 census 发现,未在该 PR 处理 —— 手写 docs 属另一卡类):
content/docs/kernel/contracts/data-engine.mdx的 WriteObservabilityOptions 小节(约 267-296 行)整体停在 #5126 之前:onFieldsDropped,完全未提strictReadonlyWrites([决策] readonly 剥离的 strict/reject 模式落在哪一层 —— B(WriteObservabilityOptions)推荐,A/C/D 各有代价(#4903 后续) #5126 加入契约的成员);readonly/readonlyWhen,缺 [17.0-rc2验收] autonumber 字段可被普通调用者改写:POST 提交显式值绕过序列、PATCH 直接改号落库 —— readonly 剥离不保护 type:'autonumber' #5503 的 runtime-owned 剥离(唯一同样作用于 INSERT 的一类);ERR_READONLY_FIELD_REJECTED。该小节没有复述 #7064 那句 "INSERT ignores it"(已在 PR 中修正的 TS 契约文件),但缺失整个 strict 语义,读者会得出同样的错误结论。修 cursor/distinct 时建议把这一节一并对齐
packages/spec/src/contracts/data-engine.ts重写后的措辞(注意 engine seam 与 DataProtocol ingress 的分层,#3043/#6640)。session_018ffcE95NaMJcL9XJ9VDYgk(WriteObservabilityOptions.strictReadonlyWritesstill documents "INSERT ignores it", but #5503 wired insert to refuse #7064 认领席位,本评论仅记录,不认领本 issue)Generated by Claude Code
Generated by Claude Code
os-zhuang commentedon Aug 10, 2026
Finding-triage ruling: Promote —
findingtopm:queue.Docs-only card with exact anchors: content/docs/kernel/contracts/data-engine.mdx:113/:116 still document EngineQueryOptions.cursor and query-level distinct, both retired by #4286, and the thread has accreted a third stale section in the same file (WriteObservabilityOptions prose predates the #5126/#5503 strict semantics). One PR fixes three measured divergences.
Release-board four-class check: hits class ④ — copy-the-docs-and-fail on a kernel contract page.
target:v17added.Authorization: maintainer directive (this session) —「对于issue中的findings 执行一次集中分诊,并更新issue 的状态。」Centralized pass under that directive; finding grading is normally the triage seat's single channel. Round: objectstack#4949 finding-triage, 2026-08-10.
Session: 01JaVVMrSxt7Tgi1uwEuDtH7
Generated by Claude Code
os-help commentedon Aug 10, 2026
Claim: PM loop round 1
Session:
session_01KJATVrh6V2ysutYUJigh3BBranch:
claude/issue-7057-data-engine-docs-driftWorktree:
objectstack-issue-7057Domain:
domain:spec-toolingFile surface:
content/docs/kernel/contracts/data-engine.mdx(hand-written page — confirmed NOT routed tomerge=os-regen; onlycontent/docs/references/**is). Read-only reference:packages/spec/src/contracts/data-engine.ts. Stop on breach; explain in the report.Container & model: M,
mode:subagent,model: opus— three divergences to align against a TS contract with a layering distinction (engine seam vs DataProtocol ingress), not a mechanical string swap.Serial constraints cleared:
data-engine.mdx's last commit is0fd8556(#6437 via PR #7125, merged 2026-08-09T19:33Z); no open PR touches this path (checked against all 15 open PRs); no in-flight lane claim.0fd8556, six hours before this claim. #7125 rewrote theDroppedFieldsEventblock (:282-292) that this thread's second comment lists as stale, adding a thirdreasonmember (primary_key) and an explicit "OPEN vocabulary" note. Re-verified onorigin/mainjust now, the three divergences stand as follows:origin/main@3e8e669EngineQueryOptions.cursor(:113)distinct(:116)WriteObservabilityOptionssection stale (:271-296)reasonenum was repaired by #7125;strictReadonlyWritesis still absent from the code block and:273"The write still succeeds" is still unconditionalThe dispatch will carry this table and require the dev to re-derive it against
origin/mainrather than trusting either the body or me.Generated by Claude Code
os-help commentedon Aug 10, 2026
ACCEPT — PR #7173 (
docs(kernel): align data-engine contract page with the shipped engine seam), reviewed against GitHub rather than against the report's own claims.What shipped: one file,
content/docs/kernel/contracts/data-engine.mdx, +109/−14. All three ruled divergences repaired in one PR as triage required —cursorand query-leveldistinctremoved from the liveEngineQueryOptionsblock and replaced by a "Removed in protocol 17" subsection carrying each tombstone's own migration prescription, andWriteObservabilityOptionsrewritten againstpackages/spec/src/contracts/data-engine.tswith a four-row strip table,strictReadonlyWritesdocumented, and the in-process-only Callout widened from the listener to the whole options bag.Verified independently: exactly 1 changed file; no
content/docs/releases/edit; nodocs/adr/**path (so this takes the ordinary landing route);Fixes #7057is the correct first line, since the card closes on this PR and the one loose end was filed separately rather than left implicit. #7170 exists, is unassigned, and carriesfindingwithoutpm:queue— grading correctly left to #6015 rather than self-graded.The removal was verified by behaviour, not by argument. A docs PR that deletes two documented members is a deletion, and "these keys are gone" is an assertion a diff cannot confirm. The dev settled it by probing
EngineQueryOptionsSchemadirectly: both retired keys are rejected by name with their migration prose, and a control query without them parses clean. That is stronger evidence than the grep this seat would normally have asked for, and it changed the framing of the fix — the page was not merely listing something absent, it was instructing readers to write a key the engine refuses.Two corrections that land against me, recorded here rather than quietly absorbed
1. My dispatch table understated divergence 3. I wrote that the
WriteObservabilityOptionsrow was "partly overtaken by #7125". Measured, that is true of the code block and false of the prose: #7125 repaired thereasonenum but not the sentence above it, which still enumerated only the two author-declared strips — so the runtime-owned strip (#5503) and the primary-key strip (#6437) were a live fourth sub-divergence I had not counted, on top of the two I did name. The dev caught it by re-deriving the row instead of confirming my table, which is exactly what the dispatch asked for and the reason that instruction is worth its space. Rows 1 and 2 held as claimed.2. My "local gates for this card" list was incomplete. I named four docs-facing families and missed
check:skill-examples. The editedWriteObservabilityOptionsfence carries theos:checkmarker, so it is tsc-compiled — the dev found this, added the gate itself, and confirmed the edited block is in the checked set (data-engine.mdx:311) rather than merely adjacent to it. Since devs no longer run the wholelint.ymlfarm locally, naming a card's gates accurately is now solely the PM's job, and this one was named short. Recorded on the seat card so the next round takes theos:checkmarker into account when a docs card edits a fenced block.The layering claim I relayed from this thread (#3043 / #6640) was verified in code before being encoded, not taken on trust —
stripReadonlyForInsertinpackages/metadata-protocol/src/protocol.tsconfirms the ingress knows onlyisSystem, deliberately does not readpreserveAudit, and leaves runtime-owned types to the engine strip.Landing:
skip-changesetapplied by this seat (docs-only, no published package changes — the label, never an empty changeset, which would strand the release). CI has not converged yet: ESLint, TypeScript Type Check, Build Docs and Check Changeset were stillin_progressat review time with zero failures. Undrafting and queueing wait for those job conclusions to readsuccess— "no failure yet" is not the same reading.Generated by Claude Code
docs(kernel): align data-engine contract page with the shipped engine…