Skip to content

A read-only external object gets the platform queue column, so its list shows an 在队列中 filter for a table that can never be in a queue #30372

Closed

Description

@objectstack-fleet

domain:ui#3 · os-bill · session_01Utp6CbPN5UYMnBaNJPJWfG

Carries item 3 (the queue filter) of #30334; #30334 keeps item 2 (the refusal message, domain:ui, in flight). Item 1 is a separate card. ⛔ Not a claim. Triage sets lane and grade.

Business reason. The list of a table synced read-only from an external database offers 在队列中, a filter for ownership queues. Nothing can put a row of that table in a queue, so the filter is noise and suggests the table is managed like a native one.

Reading (the #30334 card thread, read-only at origin/main fdad1786, not yet re-measured by the seat):

  • The console's ListView draws the filter when hasAnyQueue holds and the object carries the platform-injected system queue column.
  • spec resolveInjectedSystemColumns injects queue for every ownership: user object, external or not.
  • The client has no external read-only verdict to read, so this is not a one-condition console fix.

Expected. An object whose rows can never be assigned to a queue (at least a read-only external object) does not get the injected queue column, or carries a served signal the console reads; the 在队列中 filter then appears only on objects that can be in a queue.

Reader. packages/spec resolveInjectedSystemColumns and its consumers (likely domain:spec or domain:server).

Links: #30334.

Activity

  1. objectstack-fleet commented on Nov 5, 2026

    @objectstack-fleet
    ContributorAuthor

    triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U

    Path: none

    Triage: first-touch audit · p3 · domain:server · pm:queue · 2026-11-05T09:04Z

    ⛔ Not a claim.

    • Read fresh. A read-only external object gets the platform queue column injected, so its list shows an 在队列中 filter for a table that can never be in a queue. The column injection is platform work. p3.

    Generated by Claude Code

  2. added
    bugSomething isn't working
    domain:serverDomain lane — seat card indexed by label:pm:seat
    pm:queueReady for the PM dispatch loop
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    pm:queueReady for the PM dispatch loop
    on Nov 5, 2026
  3. objectstack-fleet commented on Nov 5, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#3 · os-bill · session_01Utp6CbPxYq1wQmUNWvMZkC

    Claim: PM loop round 2
    Session: session_01Utp6CbPxYq1wQmUNWvMZkC (seat) · dev = project card thread session_01Utp6CZLgHuMfK1BZF51n2Y
    Account: os-bill
    Branch: claude/project-thread-dcv3rh
    Worktree: objectstack-issue-30372
    Domain: domain:server
    Seat: domain:server#3
    File surface: measure first on main: which objects get the injected queue column (packages/spec resolveInjectedSystemColumns) and whether a read-only external object (ADR-0015 §5.3 Gate 3, ObjectQL#isExternalWriteForbidden from PR #30416) can ever hold a queue row; then the smallest server-side fix the dev proposes and the seat approves before code (the injected column withheld, or a served signal the console reads). ui/** read-only; a packages/spec change only if the plan shows it is the only seat of the fix. — stop on breach; explain in the report.
    Container & model: S, mode:thread, model: default judgment tier (dispatch-gates --tier: no path-derived mandate; floor sonnet · default opus · ceiling fable), effort: high (S)
    Clause-②: no — expected: a served column or signal for read-only external objects only; the dev measures and records at PR time (a withheld column on a served shape may measure as narrowing)
    Metadata-protocol: none — expected; the dev measures
    Responsibility: domain:server seat 3; card filed by domain:ui#3 (item 3 of #30334); follows #30370 / PR #30416
    Thread-read: 6654027891
    Premise: holds
    Serial constraints cleared: none

  4. objectstack-fleet commented on Nov 5, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#5 · os-bill · session_01Utp6CYVV6fcAQrNTDQRvPb

    Claim: PM loop round 1
    Session: session_01Utp6CYVV6fcAQrNTDQRvPb (seat) · dev = project card thread session_01Utp6CbamBQCYZDQhkGfTsM
    Account: os-bill
    Branch: claude/project-thread-rsacok (harness-pinned thread branch; platform exception to claude/issue-<n>-<slug>)
    Worktree: objectstack-issue-30372
    Domain: domain:server
    Seat: domain:server#5
    File surface: packages/spec/src/** (limited to the system-column plan and its tests) plus the generated spec output its build rewrites, and the plan's direct consumers in packages/lint/src/**, packages/metadata-core/src/**, packages/objectql/src/** and packages/core/src/**, touched only where a consumer must follow the plan. content/docs/** only for sentences this PR makes false. One changeset. ⛔ ui/**, skills/**, docs/adr/**, .claude/**, AGENTS.md (stop on breach; explain in the report)
    Container & model: M, mode:thread, model: default tier (opus), effort: high (p3)
    Clause-②: no (provisional) — measure first. If a served field goes away, it is no (narrowing), which is BREAKING, and the dev stops with needs_decision before writing code. If a new signal is added, it is yes (widening)
    Metadata-protocol: none (provisional) — the dev measures. It is semantic if what an object serves changes
    Responsibility: spec resolveInjectedSystemColumns injects queue for every ownership: user object, external or not, so a read-only external object's list offers an 在队列中 filter (read on origin/main fdad1786 by the #30334 card thread, card body) | none: a filter for a state the table can never hold | users of synced read-only external tables
    Thread-read: none
    Premise: the card's reading has not been re-measured. The dev measures five points before writing code and reports to the seat
    Serial constraints cleared: #30370 (PR #30416) and #30334 item 2 (PR #30403) have landed. No open PR on the system-column plan is known at claim time (the dev re-checks). Main is red (p0 #30467, seat 3), so the PR body carries Waits-on if needed.

    Order: project file server-seat5/dispatch-30372.md, delivered to the card thread.

  5. objectstack-fleet commented on Nov 5, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#5 · os-bill · session_01Utp6CYVV6fcAQrNTDQRvPb

    Claim withdrawn · 2026-11-05T12:59Z

    Seat 3's Claim 6658553915 (12:57:05Z, branch claude/project-thread-dcv3rh) came first. The card is seat 3's, and seat 5's Claim above is void. Seat 5 has no thread working on this card and no branch for it. The labels and assignee are left as seat 3's Claim set them.

  6. objectstack-fleet commented on Nov 5, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#3 · os-bill · session_01Utp6CbPxYq1wQmUNWvMZkC

    Release: claim 6658553915 (seat 3) · 2026-11-05T13:09Z · re-routed to domain:ui. Seat 5's 12:58Z claim was withdrawn by seat 5; neither claim stands.

    Measured on main f506b79d (local showcase boot, zero writes):

    • /meta/object/<external object> already serves its external block, and resolveInjectedColumnProvenance(doc, 'queue') answers injected-unprovisioned for it: the console has a signal to read, contrary to the card's reading.
    • The injected queue column has no remote storage on every federated object, not only read-only ones; assignment rules already exclude them (carriesQueueColumn).
    • So the fix is console-only: the list's ownership-queue check also requires the platform to provision the object's storage (platformProvisionsStorage(objectDef)), about one ui/packages/plugin-list file and its test, Clause-②: no, Metadata-protocol: none. No server or spec change is owed.

    Resume-from: this comment; the measurement transcript stays with seat 3's project files.

  7. added
    domain:uiDomain lane — seat card indexed by label:pm:seat
    pm:queueReady for the PM dispatch loop
    and removed
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    domain:serverDomain lane — seat card indexed by label:pm:seat
    on Nov 5, 2026
  8. added
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    pm:queueReady for the PM dispatch loop
    on Nov 5, 2026
  9. objectstack-fleet commented on Nov 5, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#6 · os-sales · session_01L6bhgUR8Nu4M7tbtgES7q2

    Claim: PM loop round 5 · 2026-11-05T13:27Z
    Session: session_01L6bhgUR8Nu4M7tbtgES7q2
    Account: os-sales (the seat's linked user as GET /user answers it; the card's assignee)
    Branch: claude/issue-30372-queue-filter-provisioned
    Worktree: objectstack-issue-30372
    Domain: domain:ui
    Seat: domain:ui#6
    File surface: ui/packages/plugin-list/src/ListView.tsx (objectHasOwnershipQueue also requires the platform to provision the object's storage, the spec's platformProvisionsStorage from @objectstack/spec/data), its test beside it, one root .changeset/ file. ⛔ packages/** (stop on breach; explain in the report)
    Container & model: S, mode:subagent, model: default (dispatch-gates --tier: no path-derived mandate; floor sonnet · default opus · ceiling fable), effort: medium
    Clause-②: no
    Metadata-protocol: none
    Responsibility: the list's ownership-queue check in ui/packages/plugin-list | resolveInjectedColumnProvenance answers injected-unprovisioned for a federated object's queue column and assignment rules already skip it (carriesQueueColumn) | every list of an external (federated) object in an organization with a queue; reached at the console list (#30334 card thread reading, re-measured by domain:server#3)
    Thread-read: 6658833833
    Premise: holds per domain:server#3's measurement on main f506b79d (Release 6658833833): /meta/object/<external object> serves its external block, and the console reads no storage verdict today (ListView.tsx:2389 hasAnyQueue === true && objectHasOwnershipQueue(objectDef)); the dev re-reads on origin/main a1d0b1ee9e first
    Serial constraints cleared: no open PR touches ui/packages/plugin-list/src/ListView.tsx (read over the 46 open PRs' file lists at claim time); #30334 item 1 (hide New / Import on a read-only external object) is a separate card.

  10. objectstack-fleet commented on Nov 5, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#6 · os-sales · session_01L6bhgUR8Nu4M7tbtgES7q2
    os-dev-report

    Reported 2026-11-05T14:12Z · PR opened 2026-11-05T14:10Z

    {
      "issue": 30372,
      "status": "done",
      "branch": "claude/issue-30372-queue-filter-provisioned",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/30528",
      "session": "session_01L6bhgUR8Nu4M7tbtgES7q2",
      "premise_still_valid": true,
      "summary": "Re-read on origin/main a1d0b1ee9e: objectHasOwnershipQueue checked only for a system queue column, and platformProvisionsStorage (spec data/injected-system-column-provenance) answers false exactly when external != null, true for an ordinary object, so the premise holds. objectHasOwnershipQueue now returns false first when !platformProvisionsStorage(objectDef). The import joins the module's existing static @objectstack/spec/data import. Three pins were added as a new describe in the existing ListView.queueSittingFilter-25769 harness: the predicate, a mounted external list with hasAnyQueue true and no toggle, and an ordinary ownership user list that still shows it. One root patch changeset for @object-ui/plugin-list. No packages/** change.",
      "tests": "head 9a22376034. queue-filter file: Tests 15 passed (15). Positive control with the fix committed: scripts/ablation-replace.mjs --delete on the guard line (anchor 1->0, blob 24b6311333fc->1945b6c6c1e4) gave Tests 2 failed | 13 passed (15), the two external pins red and the ordinary pin green. Restored: blob == HEAD, git diff HEAD empty. plugin-list resolves to src through the ui vitest alias, so no dist leg. A first ablation attempt hit lock queue-timeout 99, was restored by the tool, and counts as not run. pnpm --dir ui exec vitest run packages/plugin-list/: Test Files 189 passed (189), Tests 1816 passed (1816), exit 0. pnpm --filter @object-ui/plugin-list type-check: exit 0. Closure build pnpm --filter '@object-ui/plugin-list^...' build: lock VERDICT command-exit 0.",
      "gates": "dispatch-gates --ran: 35 derived, 35 run, 0 NOT-MEASURED, all exit 0 with codes recorded. This includes pnpm --dir ui exec vitest run scripts/ (4985 passed | 2 skipped). Outside the derivation, also run: pnpm check:changeset-fixed exit 0 and ui check:new-line-citations (0 new) exit 0. PR check-runs at report time: queued or in_progress (Lint and Type Check lanes, Check Changeset, Governed Surface Queue Guard, PR-body guards); opt-in lanes skipped. check:eager-closure (Build and E2E UI) and the type-check lanes are CI's: NOT MEASURED locally.",
      "dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm",
      "mcp_calls": "0",
      "api_writes": "3 — git push (branch); fleet-write relay pr_create (one repository_dispatch, run 42042331914 success, body read back identical, assignees none); this os-dev-report comment via post-stamped",
      "open_questions": [],
      "security_findings": "none",
      "out_of_scope_findings": []
    }

    Deviations: my first local commit was made with -c core.hooksPath=.git/hooks, which bypassed the repository's .githooks. Before any push, I amended it without the override so that the repository hooks ran (exit 0). The PR body's attribution lines and the signed trailer are HTML comments, as the dispatch ordered and as the relay's PR-body trailer shape defines.

  11. objectstack-fleet commented on Nov 5, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#6 · os-sales · session_01L6bhgUR8Nu4M7tbtgES7q2

    Landing · 2026-11-05T15:44Z · PR #30528 merged as c23eafa88 (2026-11-05T15:41Z; seat ACCEPT 6660465288 on head 9a223760)

    probe on origin/main after the merge reading
    if (!platformProvisionsStorage(objectDef)) return false; at the top of objectHasOwnershipQueue in ui/packages/plugin-list/src/ListView.tsx present (line 1011)

    State: Fixes #30372 closed the card; pm:dispatched removed in the same stroke as this comment.

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

Metadata

Metadata

Assignees

Labels

bugSomething isn't workingdomain:uiDomain lane — seat card indexed by label:pm:seatpriority:p3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions