Repository navigation
sweep(spec): 2-item "self-descriptions answerable to reality" sweep II — one claim, one PR, per-item checklist (#7017 #6961) #7056
Description
Activity
CLAIM — PM seat
domain:spec(sessionsession_01PiRUoQkTSBBmpyXBY3cVn2), dispatching as a mode:cloud card.- Branch:
claude/issue-7056-describe-realignment-sweep - Delivery: self-opened draft PR +
OS-DEV-REPORTcomment on this card - Members spec:liveness 台账
widgets.children.chartConfig的 evidence 措辞不实(「chart-config bag forwarded」),按 #5175 实测改写(无争议先行步) #7017 / spec:UserFiltersSchema.allowAddTab的.describe()从「仅承诺渲染入口」升回真实语义(#5236 A1 落地后的联动半边) #6961 keeppm:queuebut are excluded from selection while this sweep is open (member-list rule above).
Generated by Claude Code
- Branch:
OS-DEV-REPORT
{ "card": 7056, "branch": "claude/issue-7056-describe-realignment-sweep", "pr": 7065, "pr_state": "draft", "base_merged": "origin/main 3f7f14e61", "members": [ { "issue": 7017, "status": "done", "landing": "packages/spec/liveness/dashboard.json → widgets.children.chartConfig", "premise": "held — the evidence sentence 'chart-config bag forwarded to the chart renderer' was never measured; #5175 measured that the cited lines take the bag out and the next line reads only showLegend (1 of 14 declared keys)", "verdict_change": "none — status stays `live`. #5175's measurements did not demand one: the maintainer's 2026-08-06 ruling resolved the direction as enforce (方案② 的收敛版, 「协议端 v17 零 schema 改动」), so the fix owed was evidence that supports the verdict, not a different verdict", "re_anchor": "objectui @91757a7 → @230ffd875 (current objectui main). The enforce half #7016 merged 2026-08-09T09:56Z as objectui#3934, so per this card's own instruction the wording follows the post-merge reality: chartConfigPresentation (DatasetWidget.tsx:380-429) lowers 9 keys one `if` per key (showLegend/showDataLabels/title/subtitle/description/height/annotations/interaction/colors), called at :1091 and spread at :1118, DOM-pinned in __tests__/DatasetWidget.chartConfig.dom.test.tsx; 5 keys stay unforwarded with the reason (xAxis/yAxis/series derived from the dataset selection, type answered via CHART_TYPE_MAP, aria has no reader)", "children_opened": false, "extra_fields": ["verifiedAt 2026-08-03 → 2026-08-09", "evidenceScope: cross-repo (added)"], "note_guard": "the note states the narrowing half for the 5 unforwarded keys is still an open maintainer decision on #5175, so the row cannot be read as classifying them" }, { "issue": 6961, "status": "done", "landing": "packages/spec/src/ui/view.zod.ts → UserFiltersSchema.allowAddTab .describe() + the ⚠️ Scope-of-the-promotion TSDoc above the schema; regenerated content/docs/references/ui/view.mdx", "premise": "held — the describe still carried #5073's deliberately narrowed 「仅承诺渲染入口」 wording", "ruling_source": "#5236 comment 5200253516 (2026-08-06) — A1 —— 实现,会话级; quoted verbatim and untranslated in the PR body", "delivery_verified": "objectui#3926 MERGED, objectui main cf5be4ec2; re-read in the merged source (packages/plugin-list/src/UserFilters.tsx): handleAddTab snapshots filtersForTab(activeTab) under a drafted label into component-state-only SessionTab[] (no sys_metadata, no API, no storage), and each session tab renders a remove control the authored presets do not get", "describe_after": "Let end users add their own tab after the presets (tabs element): the affordance asks for a name and snapshots the filters currently applied as a new tab. SESSION-SCOPED — an added tab lives only for the current mount, is never written back as metadata (ADR-0047), and carries a remove control the authored presets do not. Page lists only — object views use `listViews` for named presets", "regen": "pnpm gen:schema && pnpm gen:docs — one line changed in content/docs/references/ui/view.mdx; check:docs was the only stale artifact the gates found" } ], "dropped": [], "files_touched": [ { "path": ".changeset/self-descriptions-answerable-to-reality-ii.md", "added": 55, "deleted": 0, "member": "sweep changeset (one patch bump on @objectstack/spec)" }, { "path": "content/docs/references/ui/view.mdx", "added": 1, "deleted": 1, "member": 6961 }, { "path": "packages/spec/liveness/dashboard.json", "added": 4, "deleted": 3, "member": 7017 }, { "path": "packages/spec/src/ui/view.zod.ts", "added": 14, "deleted": 7, "member": 6961 } ], "diff_stat": "4 files changed, 74 insertions(+), 11 deletions(-)", "acceptance_face": "byte-identical — check:authorable-surface (authorable-surface/, authorable-defaults/, JSON schemas) green WITHOUT regeneration; no schema key/enum member/default/strictness posture/tombstone moved; no test file touched, no expectation edited", "gates": { "source": "enumerated from .github/workflows/lint.yml (both jobs) + .github/workflows/spec-liveness-check.yml, run after merging origin/main and rebuilding", "pass": [ "check:generated (all 10 artifacts up to date after gen:schema + gen:docs)", "check:liveness", "check:empty-state", "check:variant-docs", "check:strictness-ledger", "pnpm lint (ESLint)", "check:slot-lookup", "check:query-options-erasure", "check:verify-stand-in", "check:nul-bytes", "check:stack-collection-maps", "check:doc-authoring", "check:docs-audit-scope", "check:role-word", "check:quick-reference-counts", "check:adr-anchors", "check:org-identifier", "check:authz-resolver", "check:service-providers", "check:route-envelope", "check:error-code-casing", "check:wildcard-fallthrough", "check:meta-type-normalized", "check:init-service-contract", "check:durability-log-level", "check:startup-registry-verdict", "check:objectui-changeset", "check:changeset-gate-self-tests", "check:release-notes", "check:release-body", "check:node-version", "check:workflow-status-functions", "check:shard-attestation", "check:required-contexts", "check:published-files", "check:engine-double-contract", "check:kernel-hook-pairs", "check:resume-authority-declared", "check:driver-memory-census", "check:merge-driver", "check:spec-parsed-alias", "check:tenant-chokepoint", "check:type-check-coverage", "check:driver-conformance", "check:stall-guard", "check:skill-frame-sync", "check:skill-compatibility", "check:agent-model-declared", "check:generated --reconcile-only", "spec tsc --noEmit", "turbo run typecheck (121/121)", "check:i18n", "check:i18n-coverage", "check:app-nav-i18n", "pnpm --filter @objectstack/spec test (354 files / 9235 tests)", "node scripts/check-adr-0087-registration.mjs --base origin/main (no declared-breaking changeset — prose realignment owes no disposition)" ], "fail": [], "not_runnable": [ "check:react-declaration-parity — needs objectui's sdui.manifest.json; on-demand at the pin bump by decision (#5960)" ] }, "out_of_scope_findings_filed": [], "landing": "NOT queued, NOT armed for auto-merge — left as a draft PR for the PM to land serially" }Both members completed; nothing dropped, nothing folded in. The one judgement worth a reviewer's eye is on #7017: because the enforce half (#7016 → objectui#3934) merged at 09:56Z today, the evidence is anchored to the post-merge reality per this card's own instruction 「evidence 改写完成时若其已合入,以合入后的实况措辞为准」 — 9 keys forwarded, 5 named as not, verdict untouched at
live, and nochildrenopened.
Generated by Claude Code
Sweep complete — closing the claim card. PR #7065 merged to
mainatb88f5e8d4(2026-08-09T14:13Z). Both members delivered and verified closed by direct reading: #7017 ✓, #6961 ✓ (eachstate_reason: completed, closed 14:13:50Z). No members dropped; per-item checklist and 1:1 diff-stat self-certification in the PR body; acceptance face byte-identical (check:authorable-surfacegreen without regeneration). #7017's evidence was anchored to the post-merge reality (objectui#3934) per the card's own instruction, verdict untouched atlive.
Generated by Claude Code
Sweep card per the findings-round bundling discipline (#6243 / PR #6288 precedent; #7024 / PR #7032 is the immediate predecessor of this same criterion family), packaged by the
domain:specseat under the maintainer's cloud-bundling approval (2026-08-09 「同意」, chat) and today's batch-dispatch instruction. This card is the claim object; the member cards keeppm:queuebut are NOT dispatch candidates while this sweep is open — selection excludes them via this member list.Shared criterion (what makes these one sweep)
Both members are self-descriptions that are no longer answerable to reality — prose (a liveness-ledger evidence sentence, a
.describe()contract note) asserting something the code does not back, or understating something the code now delivers. Every fix re-anchors the description to a verifiable, already-measured source of truth. No acceptance-face changes anywhere in this sweep — the legal-metadata set must be byte-identical before/after (the sweep's red line; a member that turns out to need an acceptance change is DROPPED and reported, not smuggled).Members (read each card in full before touching it; premise-first per member)
widgets.children.chartConfig的 evidence 措辞不实(「chart-config bag forwarded」),按 #5175 实测改写(无争议先行步) #7017 —packages/spec/livenessledger entrywidgets.children.chartConfig: the evidence wording ("chart-config bag forwarded") is not what was measured. Rewrite evidence/note per theDashboardWidget.chartConfig在 dashboard 元数据面只有showLegend落地 —— 12 个已声明键里 11 个惰性,liveness 台账那一行高估了证据 #5175 measurements (the card marks this the uncontroversial first step — 无争议先行步). Scope is the ledger entry's prose only.UserFiltersSchema.allowAddTab的.describe()从「仅承诺渲染入口」升回真实语义(#5236 A1 落地后的联动半边) #6961 —UserFiltersSchema.allowAddTab's.describe()still carries the downgraded "仅承诺渲染入口" wording. objectui:allowAddTab渲染出的「新增 tab」按钮没有 click handler —— 契约刚声明的能力只交付了一半 #5236 A1 has landed and objectui#3926 is MERGED (unblock comment on the card, objectui maincf5be4ec2, two readings), so the describe is upgraded back to the real semantics. Read the objectui:allowAddTab渲染出的「新增 tab」按钮没有 click handler —— 契约刚声明的能力只交付了一半 #5236 A1 ruling for the exact promised behavior; quote it in the PR. Note:.describe()text flows into generated JSON-schema/docs artifacts — regenerate (gen:schema/gen:docs) and commitcontent/docs/referencesdeltas (PR feat(spec,service-automation): a flow variable can declare adefaultValue, so "declared" means "bound" (#4697) #6998 lesson).Sweep rules (binding on the PR)
Fixes #7017/Fixes #6961only for members actually completed; a dropped member gets aPart ofnote and the reason.git diff --statfile list must map 1:1 onto the checklist (generated-artifact deltas fromgen:schema/gen:docscount as part of spec:UserFiltersSchema.allowAddTab的.describe()从「仅承诺渲染入口」升回真实语义(#5236 A1 落地后的联动半边) #6961's row).Refs: #6243 (sweep pilot), #7024 (criterion-family predecessor, closed today via PR #7032), #5175 (the #7017 measurement source), #5236 / objectui#3926 (the #6961 semantics source).