Skip to content

packages/components/metadata/*.component.yml is read by nothing — unpublished, ungated, and ObjectGrid's still claims a virtual_scroll feature that has no implementation #4659

Description

@yinlianghui

Observation-class finding, recorded while unwinding the objectstack#7176 retirement chain (#4649 / PR #4657), which edited one of these files. Unassigned, no pm:queue; grade it in triage.

What was measured

packages/components/metadata/ holds seven *.component.yml files (ObjectGrid, ObjectForm, Page, Chart, Menu, GridLayout, FilterBuilder) describing each component's props, events and features. On current main:

  • Nothing imports or reads them. No source file, no script under scripts/, no workflow references component.yml or the metadata/ directory.
  • They are not published. packages/components/package.json has "files": ["dist", "README.md", "CHANGELOG.md", "LICENSE"], so the directory never leaves the repo.
  • No gate compares them to anything. In particular nothing checks a declared prop against the zod schema or the renderer, which is the check that would give the files a job.

So they are hand-maintained documentation with no reader and no consistency guarantee — and the guarantee is the part that matters, because they drift silently.

The drift that is already there

ObjectGrid.component.yml ends with:

features:
  remote_data: true
  virtual_scroll: true
  inline_edit: true
  view_zod_aligned: true

packages/plugin-grid — the package that implements object-grid — contains zero references to virtualScroll, virtual_scroll or any virtualization. The claim was already false before objectstack#7176 retired the upstream list.virtualScroll key; the retirement just removed any prospect of it becoming true. PR #4657 deleted this file's striped / bordered prop declarations (the ADR-0049-style dead keys the domain:spec seat flagged) but deliberately left the features: block alone: it is a different vocabulary, and a capability claim nobody reads is a different question from an authorable key.

view_zod_aligned: true is the same shape of claim — an alignment assertion with no gate behind it.

Why this is worth a card rather than a shrug

Two honest dispositions, and they point opposite ways, which is exactly why it should be decided rather than drifted:

  1. Delete the directory. Seven unread files that can contradict the code at no cost are worse than nothing — an agent or contributor reading virtual_scroll: true learns something false about the grid.
  2. Give them a reader. If the intent was a published component catalog (a designer palette, docs generation, an MCP capability manifest), wire it up and gate prop-name parity against the zod schemas — then the files pay for their maintenance and the drift above becomes a red test.

What should not persist is the current state, where the files look authoritative and are neither. Startup-focus reading favours (1) unless a consumer is actually planned, since a declared surface with no pull is expansion nobody asked for.

Verification pointers

  • grep -rn "component.yml\|components/metadata" scripts/ .github/workflows/ packages/*/src — no hits.
  • grep -rn "virtualScroll\|virtual_scroll" packages/plugin-grid/ — no hits.

Activity

  1. self-assigned this
    on Aug 15, 2026
  2. yinlianghui commented on Aug 15, 2026

    @yinlianghui
    CollaboratorAuthor

    Findings triage + claim (grade, delegated adjudication, and dispatch in one round; veto window open — PM session session_01RnQd8iMMUwXQEV1crFmQiQ). Branch: claude/issue-4659-component-yml-retirement.

    Adjudicated: Option 1 — delete the directory (all seven files). Basis is the established no-consumer retirement family (the CloudOperations ruling and its four-sibling extension under the family rule): these files are a strictly weaker case than that precedent — unread, unpublished (excluded by the package's files allowlist), ungated, and one is actively false (virtual_scroll: true against a plugin-grid with zero virtualization references). Option 2 (give them a reader) is new product surface with no measured pull — the same expansion the family ruling declines by default; if a component catalog is ever wanted, designing it against a real consumer beats resurrecting drifted YAML. The dev re-verifies the zero-reference face (the card's own grep pointers), deletes, and records the false-claim evidence in the PR body as the urgency limb. packages/components src/ untouched ⇒ changeset per the presence gate's verdict. PR will be Fixes #4659.


    Generated by Claude Code

  3. yinlianghui commented on Aug 15, 2026

    @yinlianghui
    CollaboratorAuthor

    <!-- os-dev-report -->

    {
      "issue": 4659,
      "status": "done",
      "branch": "claude/issue-4659-component-yml-retirement",
      "pr": "https://github.com/objectstack-ai/objectui/pull/4732",
      "premise_still_valid": true,
      "summary": "Deleted packages/components/metadata/ (seven *.component.yml files: ObjectGrid, ObjectForm, Page, Chart, Menu, GridLayout, FilterBuilder) per the delegated adjudication on the issue. Confirmed all three mechanism assumptions before deleting: zero functional references anywhere in the repo (the card's own pointers plus an expanded sweep over apps/*/src, examples/, content/, READMEs, and tsconfig/eslint globs -- the sole broader hit was a prose mention of the filename inside an already-existing unreleased changeset documenting a past edit, not a functional dependency), unpublished (packages/components/package.json files allowlist excludes metadata/), and ObjectGrid.component.yml's virtual_scroll: true claim is false (zero virtualScroll/virtual_scroll references in packages/plugin-grid). Pushed a draft PR with the false-claim evidence recorded as the urgency limb; did not build a reader for these files.",
      "tests": "At final commit dfceccd96 (matches pushed HEAD, quoted via git rev-parse --short HEAD): pnpm --filter '@object-ui/components^...' build -> dependency closure clean; pnpm exec vitest run --maxWorkers=2 packages/components/ (root-relative invocation per AGENTS.md) -> Test Files 130 passed (130), Tests 1116 passed (1116); pnpm --filter @object-ui/components type-check -> clean (tsc --noEmit && tsc -p tsconfig.test.json); pnpm --filter @object-ui/components lint -> 0 errors, 920 pre-existing warnings in src/ui/** (Shadcn no-touch zone), none related to this change; node scripts/check-control-bytes.mjs -> OK (scanned 4248 tracked text files); node scripts/check-doc-links.mjs -> links valid across 13 scan roots; node scripts/check-changeset-presence.mjs -> '0 of them under the src/ of a package the release covers ... No source of a released package changed in this range, so no changeset is owed.' Re-ran the changeset-presence gate a second time after the final commit to confirm the verdict held at dfceccd96.",
      "open_questions": [],
      "out_of_scope_findings": [],
      "premise_verification": {
        "zero_references": "CONFIRMED - grep -rn component.yml|components/metadata scripts/ .github/workflows/ packages/*/src apps/*/src examples/ -> no hits. Expanded sweep over content/, READMEs, tsconfig/eslint configs -> no functional hits; only broader match was prose in .changeset/lucky-pumas-repeat.md (unreleased, documents the prior objectstack#7176/PR #4657 edit, not a live dependency).",
        "unpublished": "CONFIRMED - packages/components/package.json files: [dist, README.md, CHANGELOG.md, LICENSE] (metadata/ excluded).",
        "virtual_scroll_false_claim": "CONFIRMED - grep -rn virtualScroll|virtual_scroll packages/plugin-grid/ -> no hits, while ObjectGrid.component.yml declared virtual_scroll: true."
      },
      "changeset": {
        "decision": "not added",
        "basis": "node scripts/check-changeset-presence.mjs verdict: 7 files changed, 0 under src/ of a released package -> no changeset owed. metadata/ sits outside src/."
      },
      "head_sha": "dfceccd96",
      "changed_files": [
        "packages/components/metadata/Chart.component.yml (deleted)",
        "packages/components/metadata/FilterBuilder.component.yml (deleted)",
        "packages/components/metadata/GridLayout.component.yml (deleted)",
        "packages/components/metadata/Menu.component.yml (deleted)",
        "packages/components/metadata/ObjectForm.component.yml (deleted)",
        "packages/components/metadata/ObjectGrid.component.yml (deleted)",
        "packages/components/metadata/Page.component.yml (deleted)"
      ]
    }

    Generated by Claude Code


    Generated by Claude Code

  4. yinlianghui commented on Aug 15, 2026

    @yinlianghui
    CollaboratorAuthor

    os-dev-report (marker correction — the previous comment's <!-- --> wrapper was HTML-entity-encoded by this tool path and may not read as the literal marker; no edit-comment tool is available to fix it in place, so posting the corrected version below. Same report, same content.)

    {
      "issue": 4659,
      "status": "done",
      "branch": "claude/issue-4659-component-yml-retirement",
      "pr": "https://github.com/objectstack-ai/objectui/pull/4732",
      "premise_still_valid": true,
      "summary": "Deleted packages/components/metadata/ (seven *.component.yml files: ObjectGrid, ObjectForm, Page, Chart, Menu, GridLayout, FilterBuilder) per the delegated adjudication on the issue. Confirmed all three mechanism assumptions before deleting: zero functional references anywhere in the repo (the card's own pointers plus an expanded sweep over apps/*/src, examples/, content/, READMEs, and tsconfig/eslint globs -- the sole broader hit was a prose mention of the filename inside an already-existing unreleased changeset documenting a past edit, not a functional dependency), unpublished (packages/components/package.json files allowlist excludes metadata/), and ObjectGrid.component.yml's virtual_scroll: true claim is false (zero virtualScroll/virtual_scroll references in packages/plugin-grid). Pushed a draft PR with the false-claim evidence recorded as the urgency limb; did not build a reader for these files.",
      "tests": "At final commit dfceccd96 (matches pushed HEAD, quoted via git rev-parse --short HEAD): pnpm --filter '@object-ui/components^...' build -> dependency closure clean; pnpm exec vitest run --maxWorkers=2 packages/components/ (root-relative invocation per AGENTS.md) -> Test Files 130 passed (130), Tests 1116 passed (1116); pnpm --filter @object-ui/components type-check -> clean (tsc --noEmit && tsc -p tsconfig.test.json); pnpm --filter @object-ui/components lint -> 0 errors, 920 pre-existing warnings in src/ui/** (Shadcn no-touch zone), none related to this change; node scripts/check-control-bytes.mjs -> OK (scanned 4248 tracked text files); node scripts/check-doc-links.mjs -> links valid across 13 scan roots; node scripts/check-changeset-presence.mjs -> '0 of them under the src/ of a package the release covers ... No source of a released package changed in this range, so no changeset is owed.' Re-ran the changeset-presence gate a second time after the final commit to confirm the verdict held at dfceccd96.",
      "open_questions": [],
      "out_of_scope_findings": [],
      "premise_verification": {
        "zero_references": "CONFIRMED - grep -rn component.yml|components/metadata scripts/ .github/workflows/ packages/*/src apps/*/src examples/ -> no hits. Expanded sweep over content/, READMEs, tsconfig/eslint configs -> no functional hits; only broader match was prose in .changeset/lucky-pumas-repeat.md (unreleased, documents the prior objectstack#7176/PR #4657 edit, not a live dependency).",
        "unpublished": "CONFIRMED - packages/components/package.json files: [dist, README.md, CHANGELOG.md, LICENSE] (metadata/ excluded).",
        "virtual_scroll_false_claim": "CONFIRMED - grep -rn virtualScroll|virtual_scroll packages/plugin-grid/ -> no hits, while ObjectGrid.component.yml declared virtual_scroll: true."
      },
      "changeset": {
        "decision": "not added",
        "basis": "node scripts/check-changeset-presence.mjs verdict: 7 files changed, 0 under src/ of a released package -> no changeset owed. metadata/ sits outside src/."
      },
      "head_sha": "dfceccd96",
      "changed_files": [
        "packages/components/metadata/Chart.component.yml (deleted)",
        "packages/components/metadata/FilterBuilder.component.yml (deleted)",
        "packages/components/metadata/GridLayout.component.yml (deleted)",
        "packages/components/metadata/Menu.component.yml (deleted)",
        "packages/components/metadata/ObjectForm.component.yml (deleted)",
        "packages/components/metadata/ObjectGrid.component.yml (deleted)",
        "packages/components/metadata/Page.component.yml (deleted)"
      ]
    }

    Generated by Claude Code


    Generated by Claude Code

  5. added a commit that references this issue on Aug 17, 2026
    baa89a1
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions