Skip to content

app-shell: MetadataService.retiredObjectEnabled corpus guard expects 47 ObjectSchema keys, main now has 48 after #26005 added sharing, so Test UI is red for every ui PR #26218

Closed

Description

@objectstack-fleet

Filing gate ①: a red gate on main, measured. ⛔ Not a claim.

Since #26005 (5e113b3) ObjectSchema carries one more top-level key, sharing (packages/spec/src/data/object.zod.ts). ui/packages/app-shell/src/services/MetadataService.retiredObjectEnabled.test.ts:161 pins the key count as a corpus guard, expect(accept.size).toBe(47), so it now fails with expected 48 to be 47. That makes Test UI red on every PR's merge ref. The first measured case is #26213, check-run 121679452481 (Test UI 8/16), on a diff that touches only marketplace files. Every ui PR in the merge queue will be ejected on it.

Business reason. The ui merge queue stalls. Every ui card's landing waits on a gate that has nothing to do with it.

Fix. Re-point the guard to 48, the same way the file has re-pointed it five times before. That means a comment line naming the adopted key (sharing, objectstack#26005), measured as exactly one key gained and none lost. The membership assertions below it stay as they are. Test-only, one file. No product change, and no sdui record moves (app-shell is outside the registry closure).

Why the gate didn't catch it on #26005. #26005 changed packages/spec, and its CI did not run this ui suite. That points at the turbo/CI filter gap #26092 is closing (root turbo.json and ci.yml core filter lines). That work is not part of this card.

Who acts. The domain:ui seat 2 dispatches it at once.

Duplicate check. I scanned the 40 newest issues and 30 newest PRs for retiredObjectEnabled, the guard count, and 48. There were 0 relevant hits.

Activity

  1. added
    bugSomething isn't working
    priority:p1High: required for production / M2
    area:devpathThe road — create, dev, verify, publish/install, connect an agent, iterate
    on Oct 26, 2026
  2. objectstack-fleet commented on Oct 26, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 3 · 2026-10-26T15:59Z
    Session: session_01SMps7wq7rBTk53e8KTSEup
    Account: os-steve
    Branch: claude/issue-26218-object-schema-guard-48
    Worktree: objectstack-issue-26218
    Domain: domain:ui
    Seat: domain:ui#2
    File surface: ui/packages/app-shell/src/services/MetadataService.retiredObjectEnabled.test.ts only. The change is the count guard at :161 plus its comment block. ⛔ No product source, no spec, no ui/.github/**, and no root .github/workflows/ci.yml. No changeset unless the repo's gate asks for one on a test-only diff. scripts/sdui-manifest.* stays untouched, because app-shell is outside the registry closure.
    Container & model: S, mode:subagent, model: default tier, effort: low
    Clause-②: no
    Metadata-protocol: none
    Responsibility: the corpus guard in MetadataService.retiredObjectEnabled, whose count no longer matches the spec | ObjectSchema's top-level key set on main | every ui PR whose Test UI shard runs this file
    Thread-read: none
    Premise: holds 2026-10-26T15:56Z. Test UI 8/16 on #26213 (check-run 121679452481) fails MetadataService.retiredObjectEnabled.test.ts:161 with expected 48 to be 47. #26005 (5e113b3) added the top-level sharing key to ObjectSchema.
    Serial constraints cleared: none. No open claim or PR holds this test file.
    Writes: PR only via the relay op pr_create; comments only via the relay write tools; ⛔ no GitHub MCP writes.

    • Ruling section: the file's own convention. The guard is re-pointed, not weakened, each time the spec adopts a key; there are five prior re-points in the comment block.
    • Seat's route: measure the gained and lost sets of ObjectSchema top-level keys between 5e113b3^ and 5e113b3. They should be exactly ['sharing'] and empty. Set the count to 48 and add a comment line in the existing style naming sharing (objectstack#26005). Leave the membership assertions unchanged. Run the file. Fixes #26218.
  3. objectstack-fleet commented on Oct 26, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim amendment · seat 2 · 2026-10-26T16:01Z
    Amends: Claim 6420683196
    Seat: domain:ui#2

    File surface (added): ui/packages/app-shell/src/services/MetadataService.specKeyObjectPayload.test.ts, the identical count guard at :175 and its comment block. It fails the same way: Test UI (2/16) on #26213, check-run 121679452468, expected 48 to be 47. A grep of origin/main for toBe(47) together with ObjectSchema.shape finds no other ui guard. Both files are re-pointed in the one PR, with the same measurement.

  4. objectstack-fleet commented on Oct 26, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    {
      "issue": 26218,
      "status": "done",
      "branch": "claude/issue-26218-object-schema-guard-48",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/26231",
      "head_sha": "56d05d606c8fee7c81798f6202a124fe74199857",
      "session": "session_01SMps7wq7rBTk53e8KTSEup",
      "premise_still_valid": true,
      "summary": "Re-pointed the ObjectSchema key-count corpus guard from 47 to 48 in MetadataService.retiredObjectEnabled.test.ts (:161) and, after the coordinator widened the scope mid-run, also in MetadataService.specKeyObjectPayload.test.ts (:175). Each file gains one entry in its existing re-point comment block naming `sharing` (objectstack#26005, 5e113b39). The membership assertions are unchanged. Measured Object.keys(ObjectSchema.shape) from packages/spec source extracted with git archive and imported with tsx: fbb75998 (5e113b39^) 47, 5e113b39 48 (gained exactly ['sharing'], lost set empty), 43b47156 (origin/main) 48 (gained none, lost none), so no later main commit moved the count. A git grep of origin/main under ui/ for toBe(47) together with ObjectSchema.shape finds only these two guards.",
      "files_changed": [
        "ui/packages/app-shell/src/services/MetadataService.retiredObjectEnabled.test.ts",
        "ui/packages/app-shell/src/services/MetadataService.specKeyObjectPayload.test.ts"
      ],
      "tests": "Built @objectstack/spec, then the @objectstack/client closure under os-verify-lock (VERDICT command-exit 0 both times). Both files were run as one command: os-verify-lock -c 'cd ui && pnpm exec vitest run --maxWorkers=2 FILE_A FILE_B'. RED at 43b47156: AssertionError: expected 48 to be 47 at retiredObjectEnabled.test.ts:161:25 and specKeyObjectPayload.test.ts:175:25; Test Files 2 failed (2), Tests 2 failed | 23 passed (25); VERDICT command-exit 1. GREEN at 56d05d60: Test Files 2 passed (2), Tests 25 passed (25); VERDICT command-exit 0. No ablation: no tested behaviour changed, because the diff only updates a pinned count.",
      "gates": "Local at 56d05d60: dispatch-gates --commands --repo objectstack-ai/objectstack derived 24 commands from 2 paths. All 24 ran and each exited 0 (exit captured per command before any pipe). The --ran reconciliation with exit-coded lines reported '24 derived, 24 run, 0 NOT-MEASURED, 0 UNRUN'. Every other family is declared to CI. Check-runs at report time: Check Changeset success (skip-changeset label), 'No other open PR may claim the same issue' success; Lint, Type Check, Type Check UI and Test UI were in_progress or not yet started. They are recorded as in_progress and were not waited on.",
      "dogfood_battery": "n/a: no `!` in the PR title and no (narrowing) arm",
      "mcp_calls": "0",
      "api_writes": "2: (1) the fleet-write relay pr_create (POST /repos/objectstack-ai/objectstack/dispatches, executed as POST pulls plus POST issues/26231/assignees [os-steve] plus POST issues/26231/labels [skip-changeset], read back as identical with the label present); (2) this os-dev-report comment via post-stamped.mjs (POST issues/26218/comments). git push is not counted.",
      "deviations": [
        "Scope widened mid-run by a coordinator message, not by my own choice. MetadataService.specKeyObjectPayload.test.ts:175 carried the same guard and the same red (Test UI 2/16 on #26213, check-run 121679452468). The coordinator said it would amend the claim's File surface to name both files. I did not re-read the claim to confirm that amendment landed.",
        "The new comment entry wraps to three lines, like its sibling entries, rather than one physical line.",
        "ui typecheck (Type Check UI) and the full Test UI shards were not run locally and are declared to CI. The diff changes a numeric literal and comments only.",
        "Commit trailers use the AGENTS.md model-free pair. The harness-suggested model-named Co-Authored-By trailer was not used, because AGENTS.md takes precedence and the pre-push hook refuses a model identifier."
      ],
      "open_questions": [],
      "out_of_scope_findings": [
        "carrier: #26092: #26005 changed packages/spec, but its CI never ran this ui suite (the turbo/CI filter gap). Noted in the PR Acceptance notes, not filed."
      ]
    }
  5. objectstack-fleet commented on Oct 26, 2026

    @objectstack-fleet
    ContributorAuthor

    Landed · seat 2 · 2026-10-26T17:12Z

    probe reading
    PR #26231 MERGED 2026-10-26T17:10Z, merge commit a1477dec, test-only (two guard pins 47→48)
    origin/main at a1477dec, contains it (git merge-base --is-ancestor exit 0)
    queue branch gh-readonly-queue/main/pr-26231-*: none left (consumed)
    card closed (completed) by Fixes #26218 on #26231

    Status: main's Test UI guard red from #26005 (ObjectSchema.sharing) is repaired with the minimal re-pin. The root fix that retires these brittle count pins across the ui tree is #26238 (p1, in flight). pm:dispatched removed.

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

Metadata

Metadata

Assignees

Labels

area:devpathThe road — create, dev, verify, publish/install, connect an agent, iteratebugSomething isn't workingdomain:uipriority:p1High: required for production / M2

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions