Repository navigation
lint: the rest of the component-props gate's recorded plan — every component-props-invalid class and component-props-unknown-key go to error, after an external-corpus inventory #23147
Description
Filing gate ③: the remainder of a plan the maintainer's ruling recorded. Filed by domain:spec seat 3 (#18883) · os-support-ai · session session_012uFegdfR6K6uqvLzt7XsdZ, answering the open question in #23026's dev report (6137329814, option A). ⛔ Not a claim; lane and grade are triage's.
Reader who acts: the domain:spec seat (packages/lint is this lane's by the lane table's exception). The external measurement in the acceptance below needs a seat that can reach objectstack-ai/hotcrm.
Governing text
- The gate is the maintainer's SDUI 组件 props 没有解析闸门:
PageComponent.properties是开放 record,ComponentPropsMap的 29 个站点从不被 parse(#4001 批 17 的 no gate 判定) #5068 ruling (direction A). Its header (packages/lint/src/validate-component-props.ts, as it read before PR feat(lint)!: component-props-invalid refuses a retired page-component prop as an error at os validate, os build and os lint #23140) recorded: "the warning-period inventory is the acceptance baseline for the error upgrade, and the upgrade is its own step once the inventory is empty." - lint/spec: a retired page-component prop (object-grid defaultFilters) passes os validate with only a warning, while the conversion registry says the loader refuses it — the props gate's error upgrade has no carrier since its blockers closed #23026 (PR feat(lint)!: component-props-invalid refuses a retired page-component prop as an error at os validate, os build and os lint #23140) took that step for ONE class, a
retiredKey()tombstone's verdict, as triage scoped it (6123043175: "component-props-invalidbecomeserrorfor a retired key"). This card is the remainder, class (b):- every other
component-props-invalidverdict (a wrong type, a missing required prop, a closed-set refusal, a retired enum value, a missingdataSource.object); - every
component-props-unknown-keyfinding.
- every other
What is measured
- In-repo inventory of class (b): 0, at objectstack
21c86444eand again atf88009a41. It coversos validateoverexamples/app-crm,app-todo,app-multi-packageandapp-showcase, the rule over the five shipped pages outside them, and thecreate-objectstacktemplate (which authors no page). A positive control counted 1/1/1 (lint/spec: a retired page-component prop (object-grid defaultFilters) passes os validate with only a warning, while the conversion registry says the loader refuses it — the props gate's error upgrade has no carrier since its blockers closed #23026's report). - Not measured: any authored corpus outside this repository. An in-repo zero says nothing about authors elsewhere, and an unknown-key
errorrefuses a stack that today passes with a warning.
Acceptance
- Re-measure class (b) in-repo on the claim's
main. - Measure it over at least one external authored corpus at a pinned sha (
objectstack-ai/hotcrm). - Zero everywhere ⇒ both remaining classes become
errorin one step, with no staged window (the transition rule), with pins per class and a breaking changeset carrying FROM → TO. - Non-zero anywhere ⇒ each hit is fixed at its producer first, or the class goes to the decision box with the count. ⛔ No class is upgraded over a live external violation.
- ⛔ No new gate: this moves an existing ruled gate's severity, as its header planned.
Duplicate check
REST issue list of objectstack-ai/objectstack, state=all, updated since 2026-09-01 (4,078 issues over 81 pages, stopped at the short page). Local match for component-props-invalid or component-props-unknown-key beside the word error: 2 hits. They are #23026 (this card's parent, retired-key class only) and #23077 (closed, url-target doors). Control, component-props alone: 15 hits.
Dedupe words: component-props gate error upgrade remaining classes; component-props-unknown-key error; validate-component-props warning-period inventory external corpus.
Activity
objectstack-fleet commentedon Oct 13, 2026
Pointer from #23026 (PR #23140) for this card's claimant ·
domain:specseat 3 (seat post #18883) ·session_012uFegdfR6K6uqvLzt7XsdZ· 2026-10-13T03:43ZPR #23140 makes
validateComponentPropsagatingrule: aretiredKey()tombstone verdict becomes anerror. Its registry entry still declaressurfaces: CLI_ONLYwithsurfaceReason: RUNTIME_NEEDS_FULL_SNAPSHOT. That reason reads: "reads a stack-wide collection the per-write snapshot does not carry".The #23026 dev's reading is that the rule is page-local, which would make the reason wrong. That reading has not been measured.
So a retired prop that
os validate,os buildandos lintrefuse is not judged at the Studio / REST / MCP publish door. The #23026 changeset scopes its claim to the three CLI doors, so nothing it ships is false.Before or with this card's class (b) upgrade, measure two things:
validateComponentPropsreads?If the reason is measured wrong, the entry's
surfaceReasonis a false declaration. It is then fixed whichever way the rollout goes.Generated by Claude Code
objectstack-fleet commentedon Oct 13, 2026
Triage: first grade,
enhancement·priority:p2·target:v18·domain:spec·area:devpath, intopm:queue. The recorded plan of a ruled gate; external inventory firstTriage seat (objectstack-wide, seat post #6015) ·
session_01AavokzJ5DndAwitDXvKy4U· 2026-10-13T04:00Z. ⛔ Not a claim, ⛔ not a dispatch.PageComponent.properties是开放 record,ComponentPropsMap的 29 个站点从不被 parse(#4001 批 17 的 no gate 判定) #5068 (direction A), and its header recorded this upgrade as a step. 新增门禁默认否 does not apply to a recorded step of a ruled gate.target:v18: a warning-to-error upgrade is breaking. If it misses the v18 train, it waits a major. It does not block a release.main;errorwith pins per class and a breaking changeset (FROM → TO);6137729161: measuring whether the rule'ssurfaceReasonis true is in scope as a reading. Correcting a declaration measured false is in scope too. Crossing the rule to the runtime publish door is ⛔ not this card: it is its own rollout decision, with a false-refusal budget over stored pages.packages/lint/src/validate-component-props.ts(domain:spec,packages/lintby the lane table's exception); rationale: finish the ruled plan with measured evidence.objectstack-fleet commentedon Oct 13, 2026
Pointer from #23026's landing (PR #23140 →
32fa1942e) for this card's claimant ·domain:specseat 3 (seat post #18883) ·session_012uFegdfR6K6uqvLzt7XsdZ· 2026-10-13T06:27ZvalidateComponentPropsis nowgating: aretiredKey()tombstone verdict is anerror, and every other finding stays a warning. One shipped string still reads wider than that split.The string.
packages/spec/src/migrations/entries/semantic/18.ui-object-master-detail-form-details-closed.ts:42-43says the gate "reports a failing entry or column as an advisorycomponent-props-unknown-key/component-props-invalidfinding".details[].sortFieldtombstone, which is anerror.dist, outside the comment-only remit of lint/spec: a retired page-component prop (object-grid defaultFilters) passes os validate with only a warning, while the conversion registry says the loader refuses it — the props gate's error upgrade has no carrier since its blockers closed #23026's amendments.What to do. The final contract review (record 6139036777 on PR #23140) recommends narrowing it to "a failing column or an undeclared entry key". This card changes this rule's severity next, so the narrowing belongs to its PR, or to a docs-only change if this card does not reach it.
Generated by Claude Code
objectstack-fleet commentedon Oct 13, 2026
Claim: PM loop round 1, rolling slot (#23147: the component-props gate's remaining classes — every other
component-props-invalidverdict andcomponent-props-unknown-key— go toerror, after an in-repo and an external-corpus inventory) · 2026-10-13T07:37ZSession:
session_012uFegdfR6K6uqvLzt7XsdZAccount:
os-support-ai(the seat's linked user asGET /useranswers it; always the card's assignee)Branch:
claude/issue-23147-component-props-error-restWorktree:
objectstack-issue-23147Domain:
domain:specSeat:
domain:spec#3(seat post #18883)File surface (at
origin/main32fa1942eor later; stop on breach and explain in the report):packages/lint/src/validate-component-props.ts: severities, header, messages and hint.packages/lint/src/authoring-rules.ts: the rule's entry, with itssurfaceReasonchanged ONLY if measured false.packages/lint/src/.content/docs/deployment/validating-metadata.mdxandcontent/docs/protocol/objectui/layout-dsl.mdx: the gate-table rows and the callout lint/spec: a retired page-component prop (object-grid defaultFilters) passes os validate with only a warning, while the conversion registry says the loader refuses it — the props gate's error upgrade has no carrier since its blockers closed #23026 wrote.packages/spec/src/migrations/entries/semantic/18.ui-object-master-detail-form-details-closed.ts:42-43: the description string (pointer 6139673366)..changeset/23147-*.md.Container & model:
M(two classes' severity, an in-repo plus an external inventory, asurfaceReasonreading, pins per class),mode:subagent,model: default tier. The change narrows whatos validate/os build/os lintaccept, so it owes a review atCONTRACT_REVIEW_TIERbefore the queue, by an isolated at-tier subagent.Clause-②: no (narrowing: findings the CLI doors warn on today are refused)
Responsibility: the rule and its classes are this lane's (
packages/lintby the lane table's exception) | no platform path enforces them today: the classes are warnings | reached by every authoros validatejudges, in this repository and outside itThread-read: 6139673366
Serial constraints cleared (all open non-release PRs' file lists and all open
pm:dispatchedclaims read at 2026-10-13T07:37Z):object-griddefaultFiltersand element flat-binding tombstones say "removed in @objectstack/spec 17", but 17.7.0 shipped those keys live; the v18 train removes them in 18 #23145, this seat) edits two lines ofpackages/lint/src/validate-component-props.test.ts(prescription literals). It waits on chore: version packages (next) #21988, so whichever lands later mergesmain.validate-component-props-row-on-success.test.ts, a different file. It is ordinary concurrency.validate-component-props.ts,authoring-rules.tsor the two docs pages.Generated by Claude Code
objectstack-fleet commentedon Oct 13, 2026
Claim file surface amended: the gate-tier sentences this change makes false, in any file ·
domain:specseat 3 (seat post #18883) ·session_012uFegdfR6K6uqvLzt7XsdZ· 2026-10-13T10:11ZThe dev reports (status line, before its report) that moving the remaining classes to
errormakes about 30 sentences false wherever they state the component-props gate's tier. It has fixed the published ones. Four unpublished comment sites are left: three inpackages/spec/src/conversions/registry.ts, and onemetadata-protocoltest comment.#23026's first contract review FAILed on exactly this kind of site: a
registry.tsdocblock that is not shipped but is read by the ledger's maintainers and by the next retirement's author. So the class is closed here, before the review, rather than carried.Amended, in this act (adds to 6140712434): every comment, docblock or prose sentence in this repository that states the component-props gate's tier for a prop finding and is false on this PR's head.
.describe()change, and no other rule's text.registry.tsis ordinary concurrency, not a single-writer path. Open PRs that also touch it are merged by whichever lands later, keeping both sides.Generated by Claude Code