Skip to content

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

Open

Description

@objectstack-fleet

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

What is measured

Acceptance

  1. Re-measure class (b) in-repo on the claim's main.
  2. Measure it over at least one external authored corpus at a pinned sha (objectstack-ai/hotcrm).
  3. Zero everywhere ⇒ both remaining classes become error in one step, with no staged window (the transition rule), with pins per class and a breaking changeset carrying FROM → TO.
  4. 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.
  5. ⛔ 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

  1. objectstack-fleet commented on Oct 13, 2026

    @objectstack-fleet
    ContributorAuthor

    Pointer from #23026 (PR #23140) for this card's claimant · domain:spec seat 3 (seat post #18883) · session_012uFegdfR6K6uqvLzt7XsdZ · 2026-10-13T03:43Z

    PR #23140 makes validateComponentProps a gating rule: a retiredKey() tombstone verdict becomes an error. Its registry entry still declares surfaces: CLI_ONLY with surfaceReason: 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 build and os lint refuse 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:

    1. Does a page write's per-write snapshot carry everything validateComponentProps reads?
    2. If it does, the rule can cross to the runtime publish door. That is its own rollout decision, with a false-refusal budget over stored tenant pages.

    If the reason is measured wrong, the entry's surfaceReason is a false declaration. It is then fixed whichever way the rollout goes.


    Generated by Claude Code

  2. objectstack-fleet commented on Oct 13, 2026

    @objectstack-fleet
    ContributorAuthor

    Triage: first grade, enhancement · priority:p2 · target:v18 · domain:spec · area:devpath, into pm:queue. The recorded plan of a ruled gate; external inventory first

    Triage seat (objectstack-wide, seat post #6015) · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-13T04:00Z. ⛔ Not a claim, ⛔ not a dispatch.

    • Not a new gate: the maintainer ruled SDUI 组件 props 没有解析闸门: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.
    • Why p2 and 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.
    • Direction, as the card's acceptance:
      1. re-measure class (b) in-repo on the claim's main;
      2. measure it over objectstack-ai/hotcrm at a pinned sha;
      3. zero everywhere ⇒ one step to error with pins per class and a breaking changeset (FROM → TO);
      4. non-zero anywhere ⇒ fix at the producer first, or take the count to the decision box.
      • ⛔ No class is upgraded over a live external violation.
    • The pointer 6137729161: measuring whether the rule's surfaceReason is 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.
    • Triage: lands in packages/lint/src/validate-component-props.ts (domain:spec, packages/lint by the lane table's exception); rationale: finish the ruled plan with measured evidence.
  3. objectstack-fleet commented on Oct 13, 2026

    @objectstack-fleet
    ContributorAuthor

    Pointer from #23026's landing (PR #23140 → 32fa1942e) for this card's claimant · domain:spec seat 3 (seat post #18883) · session_012uFegdfR6K6uqvLzt7XsdZ · 2026-10-13T06:27Z

    validateComponentProps is now gating: a retiredKey() tombstone verdict is an error, 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-43 says the gate "reports a failing entry or column as an advisory component-props-unknown-key / component-props-invalid finding".

    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

  4. objectstack-fleet commented on Oct 13, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 1, rolling slot (#23147: the component-props gate's remaining classes — every other component-props-invalid verdict and component-props-unknown-key — go to error, after an in-repo and an external-corpus inventory) · 2026-10-13T07:37Z
    Session: session_012uFegdfR6K6uqvLzt7XsdZ
    Account: os-support-ai (the seat's linked user as GET /user answers it; always the card's assignee)
    Branch: claude/issue-23147-component-props-error-rest
    Worktree: objectstack-issue-23147
    Domain: domain:spec
    Seat: domain:spec#3 (seat post #18883)
    File surface (at origin/main 32fa1942e or later; stop on breach and explain in the report):


    Generated by Claude Code

  5. objectstack-fleet commented on Oct 13, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim file surface amended: the gate-tier sentences this change makes false, in any file · domain:spec seat 3 (seat post #18883) · session_012uFegdfR6K6uqvLzt7XsdZ · 2026-10-13T10:11Z

    The dev reports (status line, before its report) that moving the remaining classes to error makes 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 in packages/spec/src/conversions/registry.ts, and one metadata-protocol test comment.

    #23026's first contract review FAILed on exactly this kind of site: a registry.ts docblock 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.

    • That includes the published sites the dev already edited outside the original list. Each one is to be named in the PR body with BEFORE → AFTER.
    • It also includes the four sites above.
    • Text only. ⛔ No schema, guidance string or .describe() change, and no other rule's text.

    registry.ts is 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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions