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
lint: page sorts naming an unknown field get no reader on element dataSource.sort / app page record.sort, and stay warning elsewhere while the door answers 400 #30093
Filed from PR #30084 (card #30023, lint judges stored sorts), contract review PASS at c745679c, 2026-11-04. ⛔ Not a claim. Triage sets the grade.
Business reason: the existence check on stored page sorts is uneven, and older than #30084.
validate-page-field-bindings reads a block's sort and interfaceConfig.sort, but only at warning.
Nothing reads an element's dataSource.sort or an app page's record.sort for an unknown field name.
Either way the page publishes green, and its first read answers 400 INVALID_SORT at the list door. The author learns of the problem from a broken page instead of from os validate or the publish door.
Reader who acts: packages/lint owner (validate-page-field-bindings.ts, validate-sortable-fields.ts).
What to do
Add page-field-unknown readers for element dataSource.sort, parentDataSource.sort and app page record.sort, bound to the same object the renderer reads (dataSource.object ?? block prop, and interfaceConfig.source ?? page.object).
Decide the severity of an unknown sort field on every page slot. The door answers 400, so error matches the read. A warning-to-error move is a narrowing and owes its ADR-0087 disposition.
Read fresh. A page sort that names an unknown field has no reader on an element's dataSource.sort or an app page's record.sort, and it stays a warning elsewhere. So the page publishes green and its first read answers 400. p2.
Claim: PM loop round 2
Session: session_01Utp6CbPxYq1wQmUNWvMZkC (seat) · dev = project card thread session_01Utp6CYvKbGaAgjBLQdkwPB
Account: os-bill
Branch: claude/project-thread-ru7gx5
Worktree: objectstack-issue-30093
Domain: domain:server
Seat: domain:server#3
File surface: packages/lint/src/validate-page-field-bindings.ts, packages/lint/src/validate-sortable-fields.ts, their tests, one door-level test in packages/metadata-protocol, one changeset — stop on breach; explain in the report.
Container & model: M, mode:thread, model: default judgment tier (dispatch-gates --tier: no path-derived mandate; floor sonnet · default opus · ceiling fable), effort: high (M)
Clause-②: no (narrowing) — an unknown sort field on a page slot moves from silent or warning to error; owes one contract-review-tier review before the queue.
Metadata-protocol: narrowed
Responsibility: packages/lint page-field readers miss element dataSource.sort / app page record.sort | the list door answers 400 INVALID_SORT at read, too late for the author | any page author; measured beside #30084
Thread-read: 6632471866
Premise: holds
Serial constraints cleared: #30095 (same suite) held serial behind this card by this seat; #30005 (PR #30231, same package, different files) in flight on this seat — merge main before the PR.
{
"issue": 30093,
"status": "done",
"branch": "claude/project-thread-ru7gx5",
"pr": "https://github.com/objectstack-ai/objectstack/pull/30270",
"session": "session_01Utp6CYvKbGaAgjBLQdkwPB",
"head": "df13535218c10a428edd8c6c4d62a6f123b9ddc4",
"premise_still_valid": true,
"summary": "Every stored page sort slot (element dataSource.sort, a related list's sort and parentDataSource.sort, each PAGE_BLOCK_SORT_OBJECT_PROP block's own sort, interfaceConfig.sort, an app page's record.sort) is now asked existence (page-field-unknown, error), provenance (page-field-unprovisioned, warning) and sortability (sort-field-unsortable, unchanged) by validateSortableFields, bound to the object each slot's renderer reads. That member already declares page in runtimeTypes, so the page publish door refuses the save 422 INVALID_METADATA; validatePageFieldBindings (CLI only) no longer reads a page sort, so each slot has one reader. Narrowing: changeset minor on @objectstack/lint with BREAKING banner and adr-0087 not-required (no-migration-prescription).",
"tests": "lint: Test Files 193/193, Tests 8001/8001; lint typecheck exit 0. metadata-protocol: Test Files 312 passed 4 skipped, Tests 22360 passed 26 skipped; typecheck exit 0. New: sortable suite #30093 describe (7 cases, rule+path+severity on all nine slots), page-field-bindings two cases reworked, door describe #30093 (5 refusals 422 INVALID_METADATA + control). Reverse verification: lint sources restored to origin/main -> 8 failed/122 passed; lint rebuilt from them -> door 5 failed/1 passed (control green); restored with git checkout HEAD, status clean.",
"gates": "dispatch-gates --commands (58 families, tree df135352) all exit 0 after full turbo build; --ran: 58 derived, 58 run, 0 NOT-MEASURED, 0 UNRUN. pnpm lint exit 0. CI check-runs: in_progress at report time.",
"dogfood_battery": "df135352 · VERDICT command-exit 1 · Test Files 1 failed 418 passed 3 skipped (422) · Tests 1 failed 3487 passed 36 skipped · failure: permission-set-clone-door.dogfood.test.ts 'a platform set ... copies into its shipping package's pair' (422, permission my_member_baseline grants on sys_comment not defined) — pre-existing main-red: main 6f095b9c Dogfood Regression Gate (2/3) job 127024968149 fails the same test; this diff touches no permission/object/clone path.",
"mcp_calls": "0",
"api_writes": "2 — relay pr_create (POST /repos/objectstack-ai/objectstack/pulls via fleet-write run 41967303603, draft, no assignees, body read back identical 11659 B); this os-dev-report comment (POST /repos/objectstack-ai/objectstack/issues/30093/comments via post-stamped). Plus 2 git pushes (WIP 077b387c, then merge df135352).",
"open_questions": [],
"security_findings": "none",
"out_of_scope_findings": [
"carrier: seat · noted, not filed — packages/lint/src/reference-integrity-suite.ts (validateSortableFields member note) and packages/lint/src/authoring-rules.ts (page crossing note) still say the page crossing judges a page sort by the sortability projection alone; outside the claimed file surface, left as is.",
"carrier: seat · main-red, not this card — dogfood permission-set-clone-door 'platform set copies into its shipping package's pair' red on main 6f095b9c."
]
}
Claim amendment · 2026-11-05T04:36Z · file surface widened for the patch round on PR #30270.
Added: content/docs/deployment/validating-metadata.mdx (§5 still lists a record:related_list's sort under the advisory page-bindings rule; after this PR an unknown page sort field is page-field-unknown at error and a 422 at the page publish door), and comment-only edits in packages/lint/src/reference-integrity-suite.ts and packages/lint/src/authoring-rules.ts (they still say page traversal judges sortability only).
Reason: contract review on head df135352 (FAIL, record 6649790600 on the PR) found Skills-docs: none false (M1) and the two comments stale (S1); both are fixed here rather than carried.
Unchanged: Clause-②: no (narrowing), Metadata-protocol: narrowed, branch claude/project-thread-ru7gx5.
Activity
objectstack-fleet commentedon Nov 4, 2026
triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U
Path: none
Triage: first-touch audit · p2 ·
domain:server·pm:queue· 2026-11-04T13:55Z⛔ Not a claim.
dataSource.sortor an app page'srecord.sort, and it stays a warning elsewhere. So the page publishes green and its first read answers 400. p2.Generated by Claude Code
objectstack-fleet commentedon Nov 5, 2026
domain:server#3 · os-bill · session_01Utp6CbPxYq1wQmUNWvMZkC
Claim: PM loop round 2
Session:
session_01Utp6CbPxYq1wQmUNWvMZkC(seat) · dev = project card threadsession_01Utp6CYvKbGaAgjBLQdkwPBAccount:
os-billBranch:
claude/project-thread-ru7gx5Worktree:
objectstack-issue-30093Domain:
domain:serverSeat:
domain:server#3File surface:
packages/lint/src/validate-page-field-bindings.ts,packages/lint/src/validate-sortable-fields.ts, their tests, one door-level test inpackages/metadata-protocol, one changeset — stop on breach; explain in the report.Container & model:
M,mode:thread,model: default judgment tier (dispatch-gates --tier: no path-derived mandate; floor sonnet · default opus · ceiling fable),effort: high (M)Clause-②: no (narrowing) — an unknown sort field on a page slot moves from silent or warning to error; owes one contract-review-tier review before the queue.
Metadata-protocol: narrowed
Responsibility:
packages/lint page-field readers miss element dataSource.sort / app page record.sort | the list door answers 400 INVALID_SORT at read, too late for the author | any page author; measured beside #30084Thread-read: 6632471866
Premise: holds
Serial constraints cleared:
#30095 (same suite) held serial behind this card by this seat; #30005 (PR #30231, same package, different files) in flight on this seat — merge main before the PR.objectstack-fleet commentedon Nov 5, 2026
domain:server#3 · os-bill · session_01Utp6CYvKbGaAgjBLQdkwPB
os-dev-report
{ "issue": 30093, "status": "done", "branch": "claude/project-thread-ru7gx5", "pr": "https://github.com/objectstack-ai/objectstack/pull/30270", "session": "session_01Utp6CYvKbGaAgjBLQdkwPB", "head": "df13535218c10a428edd8c6c4d62a6f123b9ddc4", "premise_still_valid": true, "summary": "Every stored page sort slot (element dataSource.sort, a related list's sort and parentDataSource.sort, each PAGE_BLOCK_SORT_OBJECT_PROP block's own sort, interfaceConfig.sort, an app page's record.sort) is now asked existence (page-field-unknown, error), provenance (page-field-unprovisioned, warning) and sortability (sort-field-unsortable, unchanged) by validateSortableFields, bound to the object each slot's renderer reads. That member already declares page in runtimeTypes, so the page publish door refuses the save 422 INVALID_METADATA; validatePageFieldBindings (CLI only) no longer reads a page sort, so each slot has one reader. Narrowing: changeset minor on @objectstack/lint with BREAKING banner and adr-0087 not-required (no-migration-prescription).", "tests": "lint: Test Files 193/193, Tests 8001/8001; lint typecheck exit 0. metadata-protocol: Test Files 312 passed 4 skipped, Tests 22360 passed 26 skipped; typecheck exit 0. New: sortable suite #30093 describe (7 cases, rule+path+severity on all nine slots), page-field-bindings two cases reworked, door describe #30093 (5 refusals 422 INVALID_METADATA + control). Reverse verification: lint sources restored to origin/main -> 8 failed/122 passed; lint rebuilt from them -> door 5 failed/1 passed (control green); restored with git checkout HEAD, status clean.", "gates": "dispatch-gates --commands (58 families, tree df135352) all exit 0 after full turbo build; --ran: 58 derived, 58 run, 0 NOT-MEASURED, 0 UNRUN. pnpm lint exit 0. CI check-runs: in_progress at report time.", "dogfood_battery": "df135352 · VERDICT command-exit 1 · Test Files 1 failed 418 passed 3 skipped (422) · Tests 1 failed 3487 passed 36 skipped · failure: permission-set-clone-door.dogfood.test.ts 'a platform set ... copies into its shipping package's pair' (422, permission my_member_baseline grants on sys_comment not defined) — pre-existing main-red: main 6f095b9c Dogfood Regression Gate (2/3) job 127024968149 fails the same test; this diff touches no permission/object/clone path.", "mcp_calls": "0", "api_writes": "2 — relay pr_create (POST /repos/objectstack-ai/objectstack/pulls via fleet-write run 41967303603, draft, no assignees, body read back identical 11659 B); this os-dev-report comment (POST /repos/objectstack-ai/objectstack/issues/30093/comments via post-stamped). Plus 2 git pushes (WIP 077b387c, then merge df135352).", "open_questions": [], "security_findings": "none", "out_of_scope_findings": [ "carrier: seat · noted, not filed — packages/lint/src/reference-integrity-suite.ts (validateSortableFields member note) and packages/lint/src/authoring-rules.ts (page crossing note) still say the page crossing judges a page sort by the sortability projection alone; outside the claimed file surface, left as is.", "carrier: seat · main-red, not this card — dogfood permission-set-clone-door 'platform set copies into its shipping package's pair' red on main 6f095b9c." ] }Report taken 2026-11-05T04:22Z.
Generated by Claude Code
objectstack-fleet commentedon Nov 5, 2026
domain:server#3 · os-bill · session_01Utp6CbPxYq1wQmUNWvMZkC
Claim amendment · 2026-11-05T04:36Z · file surface widened for the patch round on PR #30270.
content/docs/deployment/validating-metadata.mdx(§5 still lists arecord:related_list'ssortunder the advisory page-bindings rule; after this PR an unknown page sort field ispage-field-unknownat error and a 422 at the page publish door), and comment-only edits inpackages/lint/src/reference-integrity-suite.tsandpackages/lint/src/authoring-rules.ts(they still say page traversal judges sortability only).df135352(FAIL, record 6649790600 on the PR) foundSkills-docs: nonefalse (M1) and the two comments stale (S1); both are fixed here rather than carried.Clause-②: no (narrowing),Metadata-protocol: narrowed, branchclaude/project-thread-ru7gx5.