Skip to content

test(plugin-security): the delegated-admin own-name posture "ground truth" case boots one rig per state inside a single it, times out at 5 s in the merge queue and ejects unrelated PRs #31919

Closed

Description

@objectstack-fleet

domain:server#1 · os-steve · session_01ADHkmPF1skfu2kx89BEXZi

Filing gate: ④ CI node. It was routed to seat 1 because this seat holds the file's history (#31707, ADR-0090 D12). It is not a claim.
Business reason: merge-group run 42609535314 timed out at the default 5000 ms in packages/plugins/plugin-security/src/delegated-admin-own-name-set.posture.test.ts, in the case "posture 'single' > ground truth: the delegate reads the subject exactly in the states where it is a user the delegate may read". The timeout ejected unrelated PR #31864, which then had to be re-queued (comment 6739499314). One slow case costs every PR batched with it, across every seat.
Reader: seat domain:server#1.
Dedupe: no open or closed card names this file's ground-truth case. The sibling describe in the same file ("the N states get, at every door, …") was already split per state for this exact reason; its comment says so.
class: b · type: Bug (test)
Grade: p1. A merge-queue ejection hits every lane.

维护者速读

合并队列里有一个测试在一个用例里为每种状态各启动一套环境,负载高时超过 5 秒就超时,把不相关的 PR 一起踢出队列。这张卡把它拆成每种状态一个用例,不靠加长超时。

What to build

  • Split the ground-truth it into one it per state (it.each over [...STATES, CONTROL]) under each posture, as the sibling describe already does. Each state gets its own time budget and its own failure line. The assertion per state stays byte-identical in meaning.
  • ⛔ Raising the timeout is not the fix. Use it only if a single state alone measures near the budget, and if so, record the measured time in the PR.
  • Scan the rest of the file, and the other *.posture.test.ts files in plugin-security, for the same shape (a loop that boots a rig per iteration inside one it), and split those too. List each one in the PR.

Acceptance

  • The file's case count goes up; no assertion is weakened or removed. Show it with a before/after list of assertion targets.
  • The plugin-security suite is green. Give per-case timings for the split cases on a local run.
  • Clause-②: yes (no contract change), Metadata-protocol: none, skip-changeset (test only).

Activity

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

    @objectstack-fleet
    ContributorAuthor

    domain:server#1 · os-steve · session_01ADHkmPF1skfu2kx89BEXZi

    Claim: PM loop round 1 · #31919 · 2026-11-09T12:01Z · bug (p1; merge-queue ejection of unrelated PRs)
    Session: session_01ADHkmPF1skfu2kx89BEXZi
    Account: os-steve
    Branch: claude/project-thread-wyi85j (the card thread's harness-pinned branch, base main 6a8f415; platform exception to claude/issue-N-slug)
    Worktree: objectstack-issue-31919
    Domain: domain:server
    Seat: domain:server#1
    File surface: packages/plugins/plugin-security/src/delegated-admin-own-name-set.posture.test.ts, plus any other plugin-security *.posture.test.ts with the same rig-per-iteration-in-one-it shape, reported first (stop on breach; explain in the report)
    Container & model: S, mode:thread, model: default tier, effort: medium
    Clause-②: yes (test only, no contract change)
    Metadata-protocol: none
    Ruling-ref: none (the shape #31707 already used for the sibling block, commit 7200f54)
    Responsibility: one it boots a rig per subject state and spends the 5 s default budget under queue load · reached by every PR batched with it in the merge queue
    Thread-read: none
    Premise: holds (read at 6a8f4151: the ground-truth case loops the states inside one it)
    Serial constraints cleared: none known; open PRs on the file are re-checked in step 0.
    Order: standard order + server-seat1/31919-delta.md (project files).

  3. objectstack-fleet commented on Nov 9, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#1 · os-steve · session_01ADHkmSzW7smpTAzJNeCnD2
    os-dev-report

    {
      "issue": 31919,
      "status": "done",
      "branch": "claude/project-thread-wyi85j",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/31935",
      "session": "session_01ADHkmSzW7smpTAzJNeCnD2",
      "premise_still_valid": true,
      "summary": "Split the ground-truth case of the delegated-answer posture describe (one it booting a rig per state for 5 states) into a describe keeping the old title with it.each over [...STATES, CONTROL], following 7200f540. Three CONTROL cases in the same file with the same rig-per-iteration shape (removal by two administrators, tenant move per end over two states, tenant re-naming over two grants) got the same split. No assertion changed; case count 202 -> 226. No other plugin-security posture file has the shape.",
      "tests": "head 2a121acf. File alone 5x on base 6a8f4151 (3 workers, JSON reporter, under lock): 5/5 green, 202 cases; old case max ground truth 797/706/558 ms (group/isolated/single), moves-FROM 767 ms, re-naming 528 ms, removal 340 ms. File alone 5x on head: 5/5 green, 226 cases, 0 failures; slowest split case 360 ms, ground-truth states 104-237 ms. No local repro of the 5 s timeout (shard load). plugin-security suite --maxWorkers=2: Test Files 252 passed (252), Tests 6092 passed | 45 skipped (6137), VERDICT command-exit 0. plugin-security typecheck: VERDICT command-exit 0, check:test-typecheck OK 0 errors. eslint packages/plugins/plugin-security --no-inline-config (root eslint, package lint spelling): exit 0. No ablation: no tested behaviour changed, no negative pin added or moved.",
      "gates": "dispatch-gates --commands --repo objectstack-ai/objectstack on head 2a121acf: 53 commands, all 53 exit 0 (list in PR body Verification). --ran reconciliation: 53 derived, 53 run, 0 NOT-MEASURED, 0 UNRUN, exit 0. Prereqs: teardown fixture fetched, full turbo build of ./packages/** (81/81). CI check-runs: in_progress at report time (not waited, per contract).",
      "dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm",
      "mcp_calls": "1 — mcp__github__pull_request_read (get, read-back of PR 31935); no write tool",
      "api_writes": "2 — fleet-write relay pr_create (PR 31935, label skip-changeset, read-back 9239 bytes sent = stored); this os-dev-report comment via post-stamped.mjs. Plus git push (not REST).",
      "open_questions": [],
      "security_findings": "none",
      "out_of_scope_findings": [],
      "files_changed": ["packages/plugins/plugin-security/src/delegated-admin-own-name-set.posture.test.ts"],
      "line_budget": "+22 / -18, 1 file, under the 3000-line human-merge threshold",
      "deviations": ["Base and head per-case timings measured with 5 runs of the file each (delta asked 5x on head; base 5x added for before/after).", "Package has no own `pnpm lint` script; ran the root eslint over the package dir with --no-inline-config, exit 0."]
    }

    Stamped 2026-11-09T12:43Z.

  4. added a commit that references this issue on Nov 10, 2026
    758c0b4
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:serverDomain lane — seat card indexed by label:pm:seatpriority: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