Skip to content

Commit 362cd23

Browse files
committed
fix(core,changeset): classify the lint's referenceTargetOf() caller; the objectql changeset declares no narrowing
The [#22661] census requires a CALLERS row for every source that calls the reference-target arbiter; validate-expressions.ts now does, as authoring-time static analysis. The objectql changeset is a patch and narrows nothing, so its Clause-② line carries no arm; the lint changeset names the objectExtensions blind spot at build time. Claude-Session: https://claude.ai/code/session_01SE5iTKQC8i5LBRywMuQZmt Co-authored-by: Claude <noreply@anthropic.com>
1 parent 94de92b commit 362cd23

3 files changed

Lines changed: 7 additions & 2 deletions

File tree

‎.changeset/24410-lint-formula-hop-undeclared-field.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,4 @@ The field-formula pass judges the field a formula reads one hop through a refere
1616
- `record.book.title`, where the target declares `title`, passes as before.
1717
- A target the stack does not carry is not judged. At the save door the stack carries the live registry's objects in the written package's closure, so a target from a package it depends on is judged.
1818

19-
What to do. Read a field the target declares, or declare the field on the target object. Do not declare it on the object that carries the formula.
19+
What to do. Read a field the target declares, or declare the field on the target object. Do not declare it on the object that carries the formula. At `os build` and `os validate` this pass does not see a target field that an `objectExtensions` entry contributes, while the save door judges the merged object.

‎.changeset/24410-objectql-formula-hop-sibling-isolation.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
fix(objectql): a formula reading a field its reference's target does not declare no longer makes the other formulas reading through the same reference read null
66

7-
Clause-②: no (narrowing)
7+
Clause-②: no
88

99
<!-- adr-0087: not-required (no-migration-prescription) Nothing an author writes, and nothing stored, is added, removed or renamed. A valid formula that read null beside a misspelt sibling now reads its value; no spec key, export, option, object definition or stored shape changes, so there is nothing for `objectstack migrate meta` to rewrite. -->
1010

‎packages/core/src/security/second-object-read-exposure.pin.test.ts‎

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,11 @@ const CALLERS: Record<string, Classification> = {
201201
kind: 'not-a-served-read',
202202
reason: 'authoring-time static analysis of metadata; reads no record',
203203
},
204+
// [#24410] A formula's one-hop read judged against its target's declared fields.
205+
'packages/lint/src/validate-expressions.ts': {
206+
kind: 'not-a-served-read',
207+
reason: 'authoring-time static analysis of metadata; reads no record',
208+
},
204209
'packages/metadata-protocol/src/seed-loader.ts': {
205210
kind: 'not-a-served-read',
206211
reason: "resolves a seed's references at install, under the system identity; serves nothing to a caller",

0 commit comments

Comments
 (0)