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
spec(data): the referenceNameVisible describe names nameField where the engine resolves the ADR-0079 display name, lists three of its five name floors, and the served { id, name, readRefused } value has no named schema #29579
Filing gate: ① the two should-fix findings of the CONTRACT_REVIEW_TIER record on PR #29576 (#29460, head 7e8a7b30, verdict PASS), plus open question 3 of the #29460 dev (os-dev-report 6586656992), which that review confirmed as a spec-lane follow-up. Filed by domain:server seat 3 for the domain:spec lane. ⛔ Not a claim. Suggested-grade: p3 (reference text and a type name only; the served behaviour is unchanged and the current describe is not false about it).
What happens
PR #29576 serves FieldSchema.referenceNameVisible on $expand. A refused target answers { id, name, readRefused: true }. Three gaps remain in packages/spec/src/data/field.zod.ts (source reading, not reproduced):
The name's source. The describe says the served name is "the target object's nameField value". The engine resolves the ADR-0079 D4 display name instead (nameField, then displayNameField, then the derived title), through resolveRecordDisplayName. Since D7's designate-only provisioning the two coincide for registry-owned objects, but the describe is narrower than the resolver and can drift from it.
The floor cases. The describe lists three cases where the Record # floor with the id is served instead of the name. These are a name column kept by FLS, by a maskingRule, or by a formula hop. servableNameField in packages/objectql/src/engine-reference-name-visible.ts serves the floor in two more cases:
an explicit nameField on a column that is neither title-typed nor autonumber;
Item 1: the describe names the ADR-0079 display name, not nameField.
Item 2: the describe lists all five floor cases, or ends its list with a closing clause that covers the cases the engine cannot read without computing what the security layer owns.
Item 3: a named schema (for example ReferenceNameOnlyValueSchema) for { id, name, readRefused: true }, joined into the expanded lookup value's union. The engine's exported ReferenceNameOnlyValue type then derives from it. Declare it Metadata-protocol: added with Clause-②: yes (widening) if the union widens. Otherwise the type only names an accepted shape, and a different declaration may fit; the spec seat measures which.
Regenerate the reference docs the describe feeds (content/docs/references/data/field.mdx).
Serial: after PR #29576 merges (same file, field.zod.ts).
it says the served name comes from nameField, where the engine resolves the ADR-0079 display name;
it lists three of the five name floors;
the served { id, name, readRefused } value has no named schema.
The value is served to callers who cannot read the target, so the published text must state exactly what is exposed. Declaring the served shape on the contract is a protocol addition, so p1. ⛔ The value is already served, but a named schema export, and readRefused as a declared key, still wait for the maintainer's approval of the names before merge. The PR body quotes that approval.
Claim: PM loop round 5 · 2026-11-02T21:26Z
Session: session_01JQwxbahe4v7GBD94QeSnir (seat); dev = card thread session_01JQwxbahxR9HAJnTs7UKhmn
Account: os-warren
Branch: claude/project-thread-z15khz
Worktree: the card thread's own checkout of objectstack-ai/objectstack
Domain: domain:spec
Seat: domain:spec#3
File surface: packages/spec/src/data/field.zod.ts (the referenceNameVisible describe only), packages/spec/src/data/field-value.zod.ts (one named schema for the served { id, name, readRefused: true }, joined into the expanded lookup value union), their spec tests, packages/objectql/src/engine-reference-name-visible.ts (only to derive ReferenceNameOnlyValue from the spec schema, if the import edge is allowed), the regenerated reference / schema / api-surface / authorable-surface artifacts, root .changeset/; ⛔ not packages/metadata-protocol/src/protocol.ts, packages/spec/src/api/protocol.zod.ts or packages/spec/src/identity/protocol.ts (frozen by server seat 5 until 06:00 UTC on 3 November), ⛔ no engine behaviour change (stop on breach; explain in the report)
Container & model: M, mode:thread (platform exception: the seat container pushes only its mailbox branch), model: TIER_DEFAULT (build), reviewed at CONTRACT_REVIEW_TIER (published describe + a new schema export), effort: high asked; the thread runs at the project default effort
Clause-②: yes if the expanded lookup value union widens, otherwise the dev measures and declares
Metadata-protocol: added if a named schema export lands; the dev measures against the authorable-surface shards and declares
Responsibility: n/a — follow-up of PR #29576 (#29460) contract review should-fixes and the #29460 dev's open question 3
Thread-read: 6587041711
Premise: holds (read on origin/main81cd9eb0: the describe at field.zod.ts ~L1755 names nameField; ReferenceNameOnlyValue at engine-reference-name-visible.ts ~L79 is a hand-written interface)
Serial constraints cleared: PR #29576 merged 21:04Z. Open PR #29553 (spec seat 5, #29415) edits field.zod.ts in disjoint hunks (~L1819, ~L2734 onward); the later lander merges main. Maintainer approval of the new export name and the readRefused key is owed before merge (triage 6587041711); the seat carries it.
{
"issue": 29579,
"status": "done",
"branch": "claude/project-thread-z15khz",
"pr": "https://github.com/objectstack-ai/objectstack/pull/29623",
"session": "session_01JQwxbahxR9HAJnTs7UKhmn",
"premise_still_valid": true,
"summary": "All three gaps held on origin/main 81cd9eb0 and are closed at head 0d181d41. (1) The referenceNameVisible JSDoc and describe now name the ADR-0079 D4 display name resolveRecordDisplayName answers (nameField, else displayNameField, else the derived title field). (2) They list all five Record # floor cases objectql servableNameField serves (FLS, maskingRule, formula hop, explicit pointer at a column neither title-typed nor autonumber, no usable field-level answer) plus the floor every reader gets for a missing or empty name. (3) New closed ReferenceNameOnlyValueSchema / ReferenceNameOnlyValue in field-value.zod.ts, joined into the expanded reference union before the open record member; the engine's hand interface is gone and the type is imported from @objectstack/spec/data. No engine behaviour change. Proposed names for maintainer approval before merge: ReferenceNameOnlyValueSchema, ReferenceNameOnlyValue, and readRefused as a declared key (in the PR 速读). Card assignee untouched; PR carries no assignee.",
"tests": "At 0d181d41 against a rebuilt spec dist: spec vitest field-value.test.ts + field-reference-name-visible.test.ts + type-alias-convention.pin.test.ts + scripts/strictness-ledger.test.ts: Test Files 4 passed (4), Tests 69 passed (69). spec typecheck exit 0, objectql typecheck exit 0. objectql vitest whole package: Test Files 541 passed (541), Tests 10493 passed (10493). rest src/data-reference-name-visible.test.ts: Tests 23 passed (23) (first run hit Failed to resolve entry for @objectstack/plugin-security, a missing build, rerun after building its closure). Reverse verification (one-shot): ablation-replace changed the spec schema name z.string().min(1) to z.number() (anchor 1 to 0, blob e91212ba468a to e122c5983b7e), spec rebuilt exit 0, objectql typecheck exit 2 with engine-reference-name-visible.ts(147,26) TS2322 string not assignable to number; restored (blob equals HEAD), spec rebuilt, objectql typecheck exit 0. No ablation: no tested behaviour changed.",
"gates": "dispatch-gates --commands --repo objectstack-ai/objectstack at 0d181d41: 107 derived; 106 exit 0; 1 NOT MEASURED: pnpm check:dual-build-cjs-loads exit 3 (needs every package built), left to CI. check-plugin-teardown-shape --self-test first exit 3 (shallow clone), exit 0 after git fetch origin 621a4876 (48 cases pass). --ran: 107 derived famil(ies) accounted for, 106 run, 1 NOT-MEASURED. spec check:generated: all 14 artifacts up to date. check-platform-checklist --changed-from origin/main: OK, 9 anchors judged, 0 lost. origin/main 5bd615eff merges clean (merge-tree exit 0). PR check-runs: in_progress at report time, CI families cited by the seat on ACCEPT.",
"dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm",
"mcp_calls": "0",
"api_writes": "2 — fleet-write relay pr_create (objectstack-ai/objectstack#29623, 8902 bytes sent and stored identical); post-stamped issue comment on #29579 (this report). Plus git push of the branch (not a REST write).",
"open_questions": [
{
"question": "Metadata-protocol for a served, never-written value schema: the claim's measurement (authorable-surface shard) gains 3 rows, so the PR declares added and spec takes minor; AGENTS.md defines added as something an author can write, and this value is refused on write. Keep added?",
"options": [
"A keep added (shard measurement, claim arm)",
"B none (nothing an author can write; spec patch)"
],
"recommendation": "A, because the shard is the mechanical measure the claim named and FileRefusedValue rows sit in the same shard; the seat or maintainer can flip it in the PR body and changeset if B is ruled."
}
],
"security_findings": "none",
"out_of_scope_findings": [
"carrier: none · noted, not filed: packages/objectql/src/engine.ts private serveReferenceNames docblock (~L13860) names one floor case of five; private comment, does not ship; in PR Acceptance notes"
],
"body_amendments": "none",
"deviations": "Clause-② measured no: the expanded reference union already held z.record(z.string(), z.unknown()), which accepts the served value, so no verdict moves. dropped-refinements.baseline.json gained one row (data/ReferenceNameOnlyValue site id) because the build refused without it; the row mirrors data/ReferenceIdValue. objectql carries no changeset: 0 dist hits for the new comment against a positive control of 1."
}
closed completed by Fixes #29579; no other closing keyword in the body
State change: pm:dispatched removed from #29579. This was the last stay-behind tail of os-warren's seat-3 tenure.
Delivered:
ReferenceNameOnlyValueSchema / ReferenceNameOnlyValue (from @objectstack/spec/data) name the { id, name, readRefused: true } value served to a reader refused the target. The engine and the UI's @object-ui/fields both import it now.
The referenceNameVisible describe states the display-name source and lists all five floor cases.
The queue dropped the PR twice on the way in:
Type Check UI flagged the UI's local copy of the interface. Fixed by 505d409d.
Activity
objectstack-fleet commentedon Nov 2, 2026
triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U
Path: none
Triage: p1 ·
domain:spec·pm:queue· 2026-11-02T19:56Z⛔ Not a claim.
Read fresh. Three gaps in the
referenceNameVisibledescribe after PR feat(objectql): a referenceNameVisible lookup or user field names a target the reader is refused, on $expand (#29460) #29576:nameField, where the engine resolves the ADR-0079 display name;{ id, name, readRefused }value has no named schema.The value is served to callers who cannot read the target, so the published text must state exactly what is exposed. Declaring the served shape on the contract is a protocol addition, so p1. ⛔ The value is already served, but a named schema export, and
readRefusedas a declared key, still wait for the maintainer's approval of the names before merge. The PR body quotes that approval.Generated by Claude Code
objectstack-fleet commentedon Nov 2, 2026
domain:spec#3 · os-warren · session_01JQwxbahe4v7GBD94QeSnir
Claim: PM loop round 5 · 2026-11-02T21:26Z
Session:
session_01JQwxbahe4v7GBD94QeSnir(seat); dev = card threadsession_01JQwxbahxR9HAJnTs7UKhmnAccount:
os-warrenBranch:
claude/project-thread-z15khzWorktree: the card thread's own checkout of
objectstack-ai/objectstackDomain:
domain:specSeat:
domain:spec#3File surface:
packages/spec/src/data/field.zod.ts(thereferenceNameVisibledescribe only),packages/spec/src/data/field-value.zod.ts(one named schema for the served{ id, name, readRefused: true }, joined into the expanded lookup value union), their spec tests,packages/objectql/src/engine-reference-name-visible.ts(only to deriveReferenceNameOnlyValuefrom the spec schema, if the import edge is allowed), the regenerated reference / schema / api-surface / authorable-surface artifacts, root.changeset/; ⛔ notpackages/metadata-protocol/src/protocol.ts,packages/spec/src/api/protocol.zod.tsorpackages/spec/src/identity/protocol.ts(frozen by server seat 5 until 06:00 UTC on 3 November), ⛔ no engine behaviour change (stop on breach; explain in the report)Container & model:
M,mode:thread(platform exception: the seat container pushes only its mailbox branch),model: TIER_DEFAULT(build), reviewed atCONTRACT_REVIEW_TIER(published describe + a new schema export),effort: highasked; the thread runs at the project default effortClause-②: yes if the expanded lookup value union widens, otherwise the dev measures and declares
Metadata-protocol: added if a named schema export lands; the dev measures against the authorable-surface shards and declares
Responsibility: n/a — follow-up of PR #29576 (#29460) contract review should-fixes and the #29460 dev's open question 3
Thread-read: 6587041711
Premise: holds (read on
origin/main81cd9eb0: the describe atfield.zod.ts~L1755 namesnameField;ReferenceNameOnlyValueatengine-reference-name-visible.ts~L79 is a hand-written interface)Serial constraints cleared: PR #29576 merged 21:04Z. Open PR #29553 (spec seat 5, #29415) edits
field.zod.tsin disjoint hunks (~L1819, ~L2734 onward); the later lander mergesmain. Maintainer approval of the new export name and thereadRefusedkey is owed before merge (triage 6587041711); the seat carries it.Generated by Claude Code
objectstack-fleet commentedon Nov 2, 2026
domain:spec#3 · os-warren · session_01JQwxbahxR9HAJnTs7UKhmn
os-dev-report
{ "issue": 29579, "status": "done", "branch": "claude/project-thread-z15khz", "pr": "https://github.com/objectstack-ai/objectstack/pull/29623", "session": "session_01JQwxbahxR9HAJnTs7UKhmn", "premise_still_valid": true, "summary": "All three gaps held on origin/main 81cd9eb0 and are closed at head 0d181d41. (1) The referenceNameVisible JSDoc and describe now name the ADR-0079 D4 display name resolveRecordDisplayName answers (nameField, else displayNameField, else the derived title field). (2) They list all five Record # floor cases objectql servableNameField serves (FLS, maskingRule, formula hop, explicit pointer at a column neither title-typed nor autonumber, no usable field-level answer) plus the floor every reader gets for a missing or empty name. (3) New closed ReferenceNameOnlyValueSchema / ReferenceNameOnlyValue in field-value.zod.ts, joined into the expanded reference union before the open record member; the engine's hand interface is gone and the type is imported from @objectstack/spec/data. No engine behaviour change. Proposed names for maintainer approval before merge: ReferenceNameOnlyValueSchema, ReferenceNameOnlyValue, and readRefused as a declared key (in the PR 速读). Card assignee untouched; PR carries no assignee.", "tests": "At 0d181d41 against a rebuilt spec dist: spec vitest field-value.test.ts + field-reference-name-visible.test.ts + type-alias-convention.pin.test.ts + scripts/strictness-ledger.test.ts: Test Files 4 passed (4), Tests 69 passed (69). spec typecheck exit 0, objectql typecheck exit 0. objectql vitest whole package: Test Files 541 passed (541), Tests 10493 passed (10493). rest src/data-reference-name-visible.test.ts: Tests 23 passed (23) (first run hit Failed to resolve entry for @objectstack/plugin-security, a missing build, rerun after building its closure). Reverse verification (one-shot): ablation-replace changed the spec schema name z.string().min(1) to z.number() (anchor 1 to 0, blob e91212ba468a to e122c5983b7e), spec rebuilt exit 0, objectql typecheck exit 2 with engine-reference-name-visible.ts(147,26) TS2322 string not assignable to number; restored (blob equals HEAD), spec rebuilt, objectql typecheck exit 0. No ablation: no tested behaviour changed.", "gates": "dispatch-gates --commands --repo objectstack-ai/objectstack at 0d181d41: 107 derived; 106 exit 0; 1 NOT MEASURED: pnpm check:dual-build-cjs-loads exit 3 (needs every package built), left to CI. check-plugin-teardown-shape --self-test first exit 3 (shallow clone), exit 0 after git fetch origin 621a4876 (48 cases pass). --ran: 107 derived famil(ies) accounted for, 106 run, 1 NOT-MEASURED. spec check:generated: all 14 artifacts up to date. check-platform-checklist --changed-from origin/main: OK, 9 anchors judged, 0 lost. origin/main 5bd615eff merges clean (merge-tree exit 0). PR check-runs: in_progress at report time, CI families cited by the seat on ACCEPT.", "dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm", "mcp_calls": "0", "api_writes": "2 — fleet-write relay pr_create (objectstack-ai/objectstack#29623, 8902 bytes sent and stored identical); post-stamped issue comment on #29579 (this report). Plus git push of the branch (not a REST write).", "open_questions": [ { "question": "Metadata-protocol for a served, never-written value schema: the claim's measurement (authorable-surface shard) gains 3 rows, so the PR declares added and spec takes minor; AGENTS.md defines added as something an author can write, and this value is refused on write. Keep added?", "options": [ "A keep added (shard measurement, claim arm)", "B none (nothing an author can write; spec patch)" ], "recommendation": "A, because the shard is the mechanical measure the claim named and FileRefusedValue rows sit in the same shard; the seat or maintainer can flip it in the PR body and changeset if B is ruled." } ], "security_findings": "none", "out_of_scope_findings": [ "carrier: none · noted, not filed: packages/objectql/src/engine.ts private serveReferenceNames docblock (~L13860) names one floor case of five; private comment, does not ship; in PR Acceptance notes" ], "body_amendments": "none", "deviations": "Clause-② measured no: the expanded reference union already held z.record(z.string(), z.unknown()), which accepts the served value, so no verdict moves. dropped-refinements.baseline.json gained one row (data/ReferenceNameOnlyValue site id) because the build refused without it; the row mirrors data/ReferenceIdValue. objectql carries no changeset: 0 dist hits for the new comment against a positive control of 1." }Generated by Claude Code
objectstack-fleet commentedon Nov 3, 2026
domain:spec#3 · os-warren · session_01JQwxbahe4v7GBD94QeSnir
Landed · 2026-11-03T03:00Z
87956dcconmaincompletedbyFixes #29579; no other closing keyword in the bodyState change:
pm:dispatchedremoved from #29579. This was the last stay-behind tail of os-warren's seat-3 tenure.Delivered:
ReferenceNameOnlyValueSchema/ReferenceNameOnlyValue(from@objectstack/spec/data) name the{ id, name, readRefused: true }value served to a reader refused the target. The engine and the UI's@object-ui/fieldsboth import it now.referenceNameVisibledescribe states the display-name source and lists all five floor cases.The queue dropped the PR twice on the way in:
505d409d.70dd701e).Generated by Claude Code