Repository navigation
docs(spec): the view filter any-of group is described as live, not planned - #29534
Conversation
The console half landed (toFilterNode lowers a group to one or node inside the list's AND, and the builder edits a one-group filter), so ViewFilterOrGroupSchema's PLANNED docblock and describe, the $or refusal prose in filter-rule-array.ts and the view liveness note now state the live behaviour. Tests that pinned the old wording are updated. Claude-Session: https://claude.ai/code/session_01JQwxbYCMdGp2Cju6A39cTB Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JQwxbYCMdGp2Cju6A39cTB Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JQwxbYCMdGp2Cju6A39cTB Co-authored-by: Claude <noreply@anthropic.com>
📓 Docs Drift Check3 anchor(s) derived from 1 changed package(s); no hand-written page names any of them. What this run could not see
Coarse fallback — 168 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 bf01f67849ebb3db8571bb36ec7dc97b0bca28f5 && git checkout bf01f67849ebb3db8571bb36ec7dc97b0bca28f5
# afterwards, rebuild it from the two parents, which stay fetchable
git fetch origin 8e505db8178cedbed174049b211cc409b22adaea 6966a0b17784d89c8aa016f37b64d6aa417096a8 && git checkout -B drift-repro 8e505db8178cedbed174049b211cc409b22adaea && git merge --no-ff 6966a0b17784d89c8aa016f37b64d6aa417096a8
node scripts/docs-audit/affected-docs.mjs --json 8e505db8178cedbed174049b211cc409b22adaea |
|
domain:spec#5 · os-warren · session_01JQwxbWR3K3h7i1ytwycVg1 Contract-review-claim: session_01JQwxbWR3K3h7i1ytwycVg1 · head b71e28d · 2026-11-02T18:27Z The published-schema face ( |
|
domain:spec#5 · os-warren · session_01JQwxbWR3K3h7i1ytwycVg1 Contract reviewServed-tier: Face: schema ( Gate verdicts on the head, read off the check-runs: ① Derived judgments
② Semver level
③ Boundary flags
④ Design judgment
Not judged here: Implemented-by: VERDICT: FAIL |
… its stale status dollarKeysReason still told a $or author the any-of group element is "declared, not yet applied by any console"; the console applies it. Claude-Session: https://claude.ai/code/session_01JQwxbYCMdGp2Cju6A39cTB Co-authored-by: Claude <noreply@anthropic.com>
|
domain:spec#5 · os-warren · session_01JQwxbWR3K3h7i1ytwycVg1 Contract-review-claim: session_01JQwxbWR3K3h7i1ytwycVg1 · head 6966a0b · 2026-11-02T19:06Z Re-review after the patch round on FAIL record 6585135393 ( |
|
domain:spec#5 · os-warren · session_01JQwxbWR3K3h7i1ytwycVg1 Contract reviewServed-tier: Face: schema ( Gate verdicts on the head, read off the check-runs: ① Derived judgments
② Semver level
③ Boundary flags
④ Design judgment
Findings: none must-fix, none should-fix. Three notes recorded above (one-member group lowering is bare, the card's Implemented-by: VERDICT: PASS |
|
domain:spec#5 · os-warren · session_01JQwxbWR3K3h7i1ytwycVg1 维护者速读
席位核对ACCEPT ·
|
Requested by Warren · project thread
Fixes #28522
Clause-②: no
Metadata-protocol: none
维护者速读
{ or: [...] }的 spec 说明文字与$or拒收提示,去掉「[PLANNED] 尚无控制台读取 / 载入即被拒」的旧说法,改述现状;同步 liveness 注记与生成的参考文档。无行为改动。/meta/types与拒收提示仍告诉作者这个形态不可用,把人引向两个视图或客户端变通。dist与src/**/*.zod.ts发布,故带 patch changeset。packages/spec/src/ui/view.zod.ts(ViewFilterOrGroupSchema文档注释与.describe)、packages/spec/src/ui/filter-rule-array.ts($or拒收句)、packages/spec/liveness/view.json(list.filter注记)。pnpm --filter @objectstack/spec exec vitest run src/ui/view-filter-or-group.test.ts src/ui/filter-rule-array-guidance.test.ts,预期全部通过。What changes
The console now applies a view filter's any-of group:
toFilterNodeinui/packages/core/src/utils/filter-converter.tslowers{ or: [rule, ...] }to oneornode inside the list's AND, and the filter builder edits a filter that is exactly one group (builderRulesOfSpecFilter, the save fold inui/packages/app-shell/src/views/viewFilterFold.ts). The spec still said the opposite. This PR corrects the prose only.packages/spec/src/ui/view.zod.ts,ViewFilterOrGroupSchema: the## [PLANNED — not yet rendered]docblock section becomes## Applied by the console, which names the lowering and the builder's one-group rule. The.describeloses its[PLANNED — not yet rendered]prefix and the "No console reads it yet … refused when it loads" sentences; it now ends "The console applies it, ANDed with its sibling elements, and its filter builder edits a filter that is exactly one group."packages/spec/src/ui/filter-rule-array.ts: the$orrefusal still prescribes the any-of group element, without "(declared, but no console applies it yet, so it does not narrow the rows today)". The code comment no longer cites the PLANNED note.packages/spec/liveness/view.json,props.list.children.filter.note: the "rides this live verdict at PLANNED strength" sentence is amended as it asked, citing the group read (toFilterNodeviaviewFilterOrGroupToNode, reached fromListView.tsxbuildEffectiveFilterthroughmergeFilterNodesand fromObjectView.tsx; the builder fold and its read-back). Status stayslive.packages/spec/src/conversions/registry.ts,dollarKeysReason: the TODO reason that the record-form filter conversion gives for a$orrecord drops "(declared, not yet applied by any console)".content/docs/references/ui/{view,page,component}.mdx: regenerated bygen:docs. Each changed line is only this describe..changeset/28522-view-or-group-live.md:@objectstack/specpatch.Why
Every author, human or AI, who reads
/meta/typesfor a viewfilter, or who writes a MongoDB-style$orand gets the parse refusal, was told the group is not applied and that a view storing one fails to load. That steered them away from the one shape that works.Tests
No behaviour changed, so there is no new behaviour test and no ablation. Two pins held the old wording and are updated:
packages/spec/src/ui/view-filter-or-group.test.ts: the describe pin now asserts the description starts with "An any-of group:" and carries no[PLANNEDmarker (it asserted the marker before).packages/spec/src/ui/filter-rule-array-guidance.test.ts: thetoContain('no console applies it yet')line is removed; the pin that the refusal names the any-of group element stays.Acceptance notes
dollarKeysReasoninpackages/spec/src/conversions/registry.tssplits it across two string literals. The contract review found it (record 6585135393), and it is fixed here. A re-sweep with literals and comment lines joined finds no other copy..changeset/28020-view-filter-or-group.mdandpackages/spec/CHANGELOG.mdkeep their wording; both are release-owned history.view.zod.tshunks).view.mdxwas regenerated from the merged tree; the branch's delta vsorigin/mainis exactly the nine files above.Verification
Patch round 1: head
6966a0b17(f42d8a2e+origin/mainmerged again): 105 derived, 104 exit 0,check:dual-build-cjs-loadsNOT MEASURED (exit 3; CI runs it); spec 794 files / 23549 tests pass; typecheck 0. Contract re-review PASS 6586088767 on this head.Round 0 readings, kept below, were at head
b71e28d33(base94d3e254, thenorigin/mainc88467d4amerged in).dispatch-gates: 104 derived, 104 exit 0
node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstackatb71e28d33: 104 commands, each run from a runner with its exit code captured before any pipe.dispatch-gates --ranprinted "104 derived famil(ies) accounted for — 104 run, 0 NOT-MEASURED".turbo run buildfor formula, lint, client, client-react and objectql; the pinned fixture commit ofcheck-plugin-teardown-shape --self-testfetched.70500e67, before the merge, read 103 exit 0 andcheck:dual-build-cjs-loadsexit 3 (prerequisite); the final pass measured it at exit 0.spec package: test, typecheck, generated artifacts
pnpm --filter @objectstack/spec test: Test Files 792 passed (792), Tests 23522 passed, 1 todo. Exit 0.pnpm --filter @objectstack/spec typecheck: exit 0.pnpm --filter @objectstack/spec check:generated --fixafter the merge: 1 of 14 stale (content/docs/references/**), regenerated and committed. The diff ofview.mdxagainstorigin/mainis only the five describe lines.packages/spec/distcarries "The console applies it, ANDed with its" (chunk-HDN2DLYE.js,chunk-M3JDHXOJ.mjs) and 0 files carry "No console reads it yet".view.zod.tsandliveness/also ship throughfiles[], so the changeset is patch, not skip-changeset.Generated by Claude Code