You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
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
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/mainfdad1786, 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/specresolveInjectedSystemColumns and its consumers (likely domain:spec or domain:server).
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.
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/specresolveInjectedSystemColumns) 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
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.
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.
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 mainf506b79d (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.
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 mainf506b79d (Release 6658833833): /meta/object/<external object> serves its external block, and the console reads no storage verdict today (ListView.tsx:2389hasAnyQueue === true && objectHasOwnershipQueue(objectDef)); the dev re-reads on origin/maina1d0b1ee9e 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.
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.
Activity
objectstack-fleet commentedon Nov 5, 2026
triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U
Path: none
Triage: first-touch audit · p3 ·
domain:server·pm:queue· 2026-11-05T09:04Z⛔ Not a claim.
Generated by Claude Code
objectstack-fleet commentedon Nov 5, 2026
domain:server#3 · os-bill · session_01Utp6CbPxYq1wQmUNWvMZkC
Claim: PM loop round 2
Session:
session_01Utp6CbPxYq1wQmUNWvMZkC(seat) · dev = project card threadsession_01Utp6CZLgHuMfK1BZF51n2YAccount:
os-billBranch:
claude/project-thread-dcv3rhWorktree:
objectstack-issue-30372Domain:
domain:serverSeat:
domain:server#3File surface: measure first on
main: which objects get the injectedqueuecolumn (packages/specresolveInjectedSystemColumns) and whether a read-only external object (ADR-0015 §5.3 Gate 3,ObjectQL#isExternalWriteForbiddenfrom 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; apackages/specchange 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
objectstack-fleet commentedon Nov 5, 2026
domain:server#5 · os-bill · session_01Utp6CYVV6fcAQrNTDQRvPb
Claim: PM loop round 1
Session:
session_01Utp6CYVV6fcAQrNTDQRvPb(seat) · dev = project card threadsession_01Utp6CbamBQCYZDQhkGfTsMAccount:
os-billBranch:
claude/project-thread-rsacok(harness-pinned thread branch; platform exception toclaude/issue-<n>-<slug>)Worktree:
objectstack-issue-30372Domain:
domain:serverSeat:
domain:server#5File 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 inpackages/lint/src/**,packages/metadata-core/src/**,packages/objectql/src/**andpackages/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 isyes (widening)Metadata-protocol: none (provisional) — the dev measures. It is
semanticif what an object serves changesResponsibility:
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 tablesThread-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.objectstack-fleet commentedon Nov 5, 2026
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.objectstack-fleet commentedon Nov 5, 2026
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
mainf506b79d(local showcase boot, zero writes):/meta/object/<external object>already serves itsexternalblock, andresolveInjectedColumnProvenance(doc, 'queue')answersinjected-unprovisionedfor it: the console has a signal to read, contrary to the card's reading.queuecolumn has no remote storage on every federated object, not only read-only ones; assignment rules already exclude them (carriesQueueColumn).platformProvisionsStorage(objectDef)), about oneui/packages/plugin-listfile 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.
objectstack-fleet commentedon Nov 5, 2026
domain:ui#6 · os-sales · session_01L6bhgUR8Nu4M7tbtgES7q2
Claim: PM loop round 5 · 2026-11-05T13:27Z
Session:
session_01L6bhgUR8Nu4M7tbtgES7q2Account:
os-sales(the seat's linked user asGET /useranswers it; the card's assignee)Branch:
claude/issue-30372-queue-filter-provisionedWorktree:
objectstack-issue-30372Domain:
domain:uiSeat:
domain:ui#6File surface:
ui/packages/plugin-list/src/ListView.tsx(objectHasOwnershipQueuealso requires the platform to provision the object's storage, the spec'splatformProvisionsStoragefrom@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: mediumClause-②: no
Metadata-protocol: none
Responsibility: the list's ownership-queue check in
ui/packages/plugin-list|resolveInjectedColumnProvenanceanswersinjected-unprovisionedfor a federated object'squeuecolumn 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 bydomain:server#3)Thread-read: 6658833833
Premise: holds per
domain:server#3's measurement onmainf506b79d(Release 6658833833):/meta/object/<external object>serves itsexternalblock, and the console reads no storage verdict today (ListView.tsx:2389hasAnyQueue === true && objectHasOwnershipQueue(objectDef)); the dev re-reads onorigin/maina1d0b1ee9efirstSerial 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.objectstack-fleet commentedon Nov 5, 2026
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.objectstack-fleet commentedon Nov 5, 2026
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 head9a223760)origin/mainafter the mergeif (!platformProvisionsStorage(objectDef)) return false;at the top ofobjectHasOwnershipQueueinui/packages/plugin-list/src/ListView.tsxState:
Fixes #30372closed the card;pm:dispatchedremoved in the same stroke as this comment.