Skip to content

Commit 96fd49c

Browse files
committed
docs(spec): leave object.zod.ts and filter-logic-conformance.ts to the open PRs that now hold them (stage 3)
The #20494 PR (object.zod.ts) and the #20444 PR (filter-logic-conformance.ts) opened after this stage's claim, so both files join the stage's exclusions. Their comment sites return to the base bytes (blobs befde04 and c9b32ac) and wait for a later stage. Claude-Session: https://claude.ai/code/session_014EJ1ED8X4MMrT18BhVx4tx Co-authored-by: Claude <noreply@anthropic.com>
1 parent 3479600 commit 96fd49c

2 files changed

Lines changed: 21 additions & 21 deletions

File tree

‎packages/spec/src/data/filter-logic-conformance.ts‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@
164164
* - **`$exists` means "has a value"** (`!= null`), never key-presence — cell 2,
165165
* the leg of the 07:33Z ruling that was never in conflict with #5298 and had
166166
* already shipped in PR #5962 on the surfaces the ruling named. It stands —
167-
* and since commit 9dac1ae01 (PR #13529) moved the last three key-presence exits, it
167+
* and since PR #13529 (#13195) moved the last three key-presence exits, it
168168
* is enforced here too: enrolled in {@link FILTER_LOGIC_CASES} in BOTH
169169
* directions (#13531).
170170
*
@@ -223,8 +223,8 @@
223223
* path, its analytics face (a third divergent exit the earlier prose never
224224
* named; measured in PR #13420), and `driver-mongodb`'s `translateFilter`.
225225
* The #5499 investment freeze that once excused the lag dissolved on
226-
* 2026-08-11 (recorded in `./aggregation-conformance.ts`), and commit
227-
* 9dac1ae01 (PR #13529) moved all three to has-value — the gap is closed, the stated
226+
* 2026-08-11 (recorded in `./aggregation-conformance.ts`), and PR #13529
227+
* (#13195) moved all three to has-value — the gap is closed, the stated
228228
* blocker on enrolment is gone with it, and the two `$exists` rows below are
229229
* enrolled in BOTH directions (#13531).
230230
*
@@ -499,7 +499,7 @@ export const FILTER_LOGIC_CASES: readonly FilterLogicCase[] = [
499499
},
500500

501501
// [#13531] The value-presence predicate, enrolled in BOTH directions once
502-
// commit 9dac1ae01 (PR #13529) moved the last three key-presence exits to has-value.
502+
// PR #13529 (#13195) moved the last three key-presence exits to has-value.
503503
// The stored-null seeding is what makes these rows discriminating: a
504504
// key-presence reading answers MATCH on rows 3-4 for `$exists: true`
505505
// precisely because every harness stores `d: null` with the key present —

‎packages/spec/src/data/object.zod.ts‎

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -815,7 +815,7 @@ const lifecycleDuration = (what: string) =>
815815
z.string().regex(LIFECYCLE_DURATION_REGEX, `${what} must be a duration literal like '6h', '14d', '12w' or '7y'`);
816816

817817
/**
818-
* [commit 801296050] The `onlyWhen` row-filter value union, shared by
818+
* [#10165] The `onlyWhen` row-filter value union, shared by
819819
* `retention.onlyWhen` and `ttl.onlyWhen` — ONE shape on purpose: the two
820820
* blocks are mirrors (maintainer ruling 2026-08-20, option A: give `ttl` an
821821
* `onlyWhen` mirroring `retention`'s), and the runtime enforces them through
@@ -1002,8 +1002,8 @@ export const LifecycleSchema = lazySchema(() => strictObject({
10021002
message: `lifecycle.archive.after ('${lc.archive.after}') must equal retention.maxAge ('${lc.retention.maxAge}') — the hot window ends where the archive begins`,
10031003
});
10041004
}
1005-
// [commit 5649efbf9] The retention + ttl + archive triple — the alignment above, one
1006-
// policy wider. Since [commit 530c1df65] the Archiver selects the rows it moves by the
1005+
// [#10527] The retention + ttl + archive triple — the alignment above, one
1006+
// policy wider. Since [#10347] the Archiver selects the rows it moves by the
10071007
// ttl cutoff (`ttl.field` older than `ttl.expireAfter`) whenever `ttl` is
10081008
// declared, and by `created_at`/`archive.after` only when it is not — so on
10091009
// this triple the age bound (`retention.maxAge`, pinned equal to
@@ -1033,20 +1033,20 @@ export const LifecycleSchema = lazySchema(() => strictObject({
10331033
message: 'lifecycle.retention.onlyWhen cannot be combined with archive — the Archiver moves rows by age alone and would archive rows the filter protects',
10341034
});
10351035
}
1036-
// [commit 801296050] ttl.onlyWhen mirrors both of retention.onlyWhen's conflicts, from
1036+
// [#10165] ttl.onlyWhen mirrors both of retention.onlyWhen's conflicts, from
10371037
// the Reaper's actual semantics rather than by symmetry alone:
10381038
// - rotation: the Rotator DROPs whole physical shards; a shard is dropped by
10391039
// age with no row read, so rows the filter protects go down with it.
10401040
// - archive: `reapObject` returns into `archiveObject` before the ttl reap
10411041
// ever runs, so with `archive` declared the filter guards a code path that
1042-
// is never executed (declared ≠ enforced). Since [commit 530c1df65] the Archiver does
1042+
// is never executed (declared ≠ enforced). Since [#10347] the Archiver does
10431043
// apply the declared ttl window itself — it selects candidates by
10441044
// `ttl.field` past `ttl.expireAfter` instead of `created_at` past
10451045
// `archive.after` — but its candidate read is that cutoff and nothing else
10461046
// (`where: { [ttl.field]: { $lt: cutoff } }`, no `onlyWhen` spread the way
10471047
// `reap()` spreads it into its scope), so every due row is copied and
10481048
// hot-deleted whether or not the filter names it. That is the whole of what
1049-
// [commit 530c1df65] changed here: the WINDOW an author declares now carries over to
1049+
// [#10347] changed here: the WINDOW an author declares now carries over to
10501050
// the Archiver, the FILTER still does not — so the refusal stands, on a
10511051
// narrower reason than the "moves rows by age alone" this bullet used to
10521052
// give. Whether `onlyWhen` should become meaningful under `archive` (the
@@ -1788,7 +1788,7 @@ const ObjectSchemaBase = strictObject(
17881788
// `ui/view.zod.ts` declares its own `userActions` with a completely
17891789
// disjoint vocabulary (sort/search/filter/refresh/rowHeight/group/
17901790
// addRecordForm/editInline/hideFields/rowColor/buttons — the last three
1791-
// adopted by commit b37231883), so an author who learned that block writes these
1791+
// adopted at #11195), so an author who learned that block writes these
17921792
// here. `group`/`hideFields`/`rowColor` were refused by name but without
17931793
// a curated pointer until #11459 gave them one too, mirroring the other
17941794
// four.
@@ -2186,7 +2186,7 @@ const ObjectSchemaBase = strictObject(
21862186
* `recordFormNavigation.ts` branches on `editMode !== 'page'`, and
21872187
* `AppContent`'s `handleEdit` dispatcher routes on it).
21882188
*
2189-
* Declared here by the maintainer ruling commit f11fc61c5 landed (the measured residue of the
2189+
* Declared here by the #11408 maintainer ruling (the measured residue of the
21902190
* #10144 declare-or-rule-out census): objectui had published the key to
21912191
* authors (CHANGELOG + live runtime read) while this strict parse rejected
21922192
* it. objectui's `ObjectSchemaClientExtensions.editMode` mirror retires in a
@@ -2314,7 +2314,7 @@ const ObjectSchemaBase = strictObject(
23142314
/**
23152315
* Master switch — a STANDING policy held at every redemption, not a
23162316
* mint-time check (#14033; the same shape as the `eligibility` predicate
2317-
* below, commit fc9ba76a5).
2317+
* below, #13608).
23182318
*
23192319
* When false (default), no share links can be issued for this object AND
23202320
* no share link on it resolves: `resolveToken` re-reads this switch on
@@ -2351,7 +2351,7 @@ const ObjectSchemaBase = strictObject(
23512351
/**
23522352
* Optional CEL predicate over the candidate record. It is a STANDING
23532353
* policy about which records may be reached anonymously, and the platform
2354-
* holds it at BOTH points in a link's life (commit fc9ba76a5):
2354+
* holds it at BOTH points in a link's life (#13608):
23552355
*
23562356
* - **at mint** — `createLink` refuses with 422 when the predicate is
23572357
* false (e.g. "draft records cannot be shared") and writes no link row;
@@ -2363,7 +2363,7 @@ const ObjectSchemaBase = strictObject(
23632363
* ⚠️ Tightening this policy therefore cuts off already-minted links, on
23642364
* purpose — no revocation step, no grace period. That is the point of a
23652365
* standing policy, and it is a behaviour change for deployments that
2366-
* shipped before commit fc9ba76a5.
2366+
* shipped before #13608.
23672367
*
23682368
* Fail-CLOSED at both points: a predicate that does not compile, that
23692369
* faults on the record, or that answers anything other than `true` refuses
@@ -2715,7 +2715,7 @@ function assertReferenceViaSiblingDeclared(objectName: unknown, fields: unknown)
27152715
}
27162716

27172717
/**
2718-
* [#9138 — commit 75b7c240a, maintainer ruling Direction 2 / ADR-0055] Under
2718+
* [#9138 — #8772 maintainer ruling, Direction 2 / ADR-0055] Under
27192719
* `sharingModel: 'controlled_by_parent'` the builder FORCES `required: true`
27202720
* on every `master_detail` reference, and REFUSES an explicit
27212721
* `required: false` there, loudly.
@@ -2728,9 +2728,9 @@ function assertReferenceViaSiblingDeclared(objectName: unknown, fields: unknown)
27282728
* `masterFK IN (accessible master ids)` can never match null — the row is
27292729
* invisible to everyone — and every later by-id write answers
27302730
* `422 MISSING_REQUIRED_FIELD`. Today only the security gate
2731-
* (`assertControlledByParentWrite`) closes that shape, and the ruling commit
2732-
* 75b7c240a landed measured that the declaration and the enforcement
2733-
* disagree. This makes the unsafe shape impossible to NEWLY declare:
2731+
* (`assertControlledByParentWrite`) closes that shape, and #8772 measured that
2732+
* the declaration and the enforcement disagree. This makes the unsafe shape
2733+
* impossible to NEWLY declare:
27342734
*
27352735
* - omitted `required` → forced to `true` (the lint rule
27362736
* `relationship/master-detail-required` already computes exactly this fix);
@@ -2741,7 +2741,7 @@ function assertReferenceViaSiblingDeclared(objectName: unknown, fields: unknown)
27412741
* Lives at `create()` — the authoring surface (ADR-0077) — beside
27422742
* {@link assertSystemDataIsWritable}, and deliberately NOT in raw
27432743
* `.parse()`/`.safeParse()`: metadata already at rest must keep loading.
2744-
* Runtime tolerance is the other half of commit 75b7c240a's ruling — the security
2744+
* Runtime tolerance is the other half of the #8772 ruling — the security
27452745
* gate's fallbacks stay, and the lint rule stays `warning` until v18 — so
27462746
* publish-time refuses new declarations while runtime tolerates old ones.
27472747
*
@@ -2907,7 +2907,7 @@ export const ObjectSchema = lazySchema(() => {
29072907
// declared can never resolve — refuse at the authoring seam, beside its
29082908
// sibling assertions, rather than one error per seeded row at load time.
29092909
assertReferenceViaSiblingDeclared(cfg.name, cfg.fields);
2910-
// [#9138 — commit 75b7c240a, ruling Direction 2] A `controlled_by_parent` object's
2910+
// [#9138 — #8772 ruling, Direction 2] A `controlled_by_parent` object's
29112911
// `master_detail` reference is forced `required: true` (an explicit
29122912
// `required: false` throws, loudly) so the unsafe shape cannot be newly
29132913
// declared. Raw `.parse()`/`.safeParse()` stay tolerant for metadata at

0 commit comments

Comments
 (0)