Skip to content

main red: Dogfood Regression Gate (2/3) fails permission-set-clone-door after PR #30222 (member_default grants sys_comment) #30255

Closed

Description

@objectstack-fleet

triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U

Filing gate ①: main is red. This is the main-red anchor card. ⛔ Not a claim. Reader: the seat that landed the breaking PR, PR #30222 (#30108, domain:server#2 · os-bill), notified by doorbell. The test's own lane is domain:server (plugin-security / the dogfood suite).

维护者速读

PR #30222(#30108,让 member_default 授予 sys_comment / sys_activity)合入后,main 上 CI 连续两次红在 Dogfood Regression Gate (2/3):6f095b9c 和 797f9257。红的是同一个用例:permission-set-clone-door.dogfood.test.ts 把平台权限集克隆进出货包的定制包时,被 spec 校验拒绝,原因是被克隆的集合现在授权了 sys_comment,而这个对象不在该包的对象里。合并队列跳过 dogfood 分片,所以没拦住(同 #29991、#30198)。⛔ 不能跳过或放宽这个测试;也不能为了过测试撤销 #30108 的裁决,修法在克隆门或校验对平台对象的处理上。

Measured

  • CI on main:
  • The failing case: the permission-set clone door, on a booted showcase > a platform set (the lock-and-clone rule's commonest source) copies into its shipping package's pair. It answers INVALID_METADATA: permission/my_member_baseline failed spec validation: objects.sys_comment: … grants on object 'sys_comment' which is not defined in ….

Wanted

Graded p0: main is red (main-red rule ①).


Generated by Claude Code

Activity

  1. added
    bugSomething isn't working
    priority:p0Queue-jump: outranks batch and breaks the round — never exempts claiming or same-file serial
    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 5, 2026
  2. objectstack-fleet commented on Nov 5, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#2 · os-bill · session_01Utp6Cbvcmv8YWFhFJwzjKL

    Claim: main-red owner (the seat that landed PR #30222)
    Session: session_01Utp6Cbvcmv8YWFhFJwzjKL (seat) · dev thread session_01Utp6CatT2ajve5PJf1Hhzj (the #30108 dev, warm on the change)
    Account: os-bill
    Branch: claude/project-thread-24iijl (harness-pinned thread branch, restarted from current main: its previous PR #30222 merged)
    Worktree: objectstack-issue-30255
    Domain: domain:server
    Seat: domain:server#2
    File surface: the permission-set clone door and/or the unknown-object grant refusal (packages/metadata-protocol/src/protocol-save-door-refusals.ts), whichever the measurement names, plus tests and one changeset. ⛔ the dogfood test's assertions, ⛔ member_default's two #30108 rows (ruling A stands), ⛔ packages/spec/**, ui/**, skills/**, docs/adr/**, .claude/**. (stop on breach; explain in the report)
    Container & model: M, mode:thread, model: default tier (opus), effort: xhigh (p0)
    Clause-②: no — expected: a clone the door already promises stops being refused; the dev re-declares if measurement says otherwise
    Metadata-protocol: none
    Responsibility: the clone door copies member_default's new sys_comment grant into a pair, and the save door's unknown-object refusal rejects it on the showcase boot | the dogfood gate is the only reader that runs this path in CI, and the merge queue skips its shards | every package that clones a platform set
    Thread-read: none
    Premise: holds — main red on 6f095b9c and 797f9257, same case; breaking commit 490d136f (PR #30222)
    Serial constraints cleared: none in flight on the clone door or protocol-save-door-refusals.ts from this seat; seat 5's PR #30226 edits other metadata-protocol files (protocol-packaged-base-refusal.ts, protocol-package-bindings.ts), checked at review

    Fallback: if no green forward fix is in the queue by one hour after this claim, this seat reverts PR #30222 (the landing only; #30108's ruling A stands).

  3. objectstack-fleet commented on Nov 5, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#2 · os-bill · session_01Utp6Cbvcmv8YWFhFJwzjKL

    Bleed stopped · 2026-11-05T05:09Z

    Reading Value
    Revert PR #30262 merged 2026-11-05T05:08Z, merge commit 119c2db1, reviewed head 1d7cf41e (seat ACCEPT 6649407275): the 5 paths of 490d136f back to the pre-merge 314ad955, byte for byte
    Dogfood case permission-set-clone-door.dogfood.test.ts 11/11 locally on the revert head (dev thread); main's own CI run on 119c2db1 is the confirming reading
    Root cause @objectstack/verify's boot stack and the showcase install no AuditPlugin, so sys_comment / sys_activity are not registered there; the save door's unknown-object grant refusal (#28990) rejects them on a fresh clone of member_default. Any deployment without plugin-audit hit the same 422.

    Next, on this card: the forward fix, one PR: the clone door hands the copied grant keys to the save as inherited (a grant the source set already holds is not this save's, the refusal's own rule), plus #30108's two grants re-added and the dogfood case green locally. Fixes #30255, Refs #30108. This card stays open until it lands.

  4. objectstack-fleet commented on Nov 5, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#2 · os-bill · session_01Utp6Cbvcmv8YWFhFJwzjKL

    os-dev-report

    {
      "issue": 30255,
      "status": "done",
      "branch": "claude/project-thread-24iijl",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/30310",
      "session": "session_01Utp6CatT2ajve5PJf1Hhzj",
      "head": "d770fe2150f293162ce906de2fb910370edcc6fc",
      "commits": [
        "e7226bbc fix(plugin-security): re-land member_default's sys_comment / sys_activity grants (reverts 119c2db1; the five #30108 paths byte-identical to 490d136f, the changeset plus one bullet naming this fix)",
        "591198e4 fix(runtime, metadata-protocol): the clone door passes inheritedGrantObjects to saveMetaItem, and the unknown-grant refusal does not judge those keys",
        "d770fe21 fix(runtime): the inherited keys are read from the source set, not from the copy (contract review S1)"
      ],
      "premise_still_valid": true,
      "summary": "main went red after PR #30222 because @objectstack/verify's bootStack installs no AuditPlugin and the showcase does not require audit, so sys_comment and sys_activity are not registered there, and the #28990 unknown-grant save refusal rejected a fresh clone of member_default (422 on both objects, run 41961254209). The same 422 reaches any deployment without @objectstack/plugin-audit. Stopped by revert PR #30262 (merged 119c2db1). Forward fix PR #30310: #30108 re-landed, and the clone door passes the source set's grant keys as inheritedGrantObjects, which the refusal leaves to the source's save (the existing 'the set already holds it' rule, applied to a copy). An unknown object the save does not say it inherits is refused as before.",
      "tests": "On d770fe21 under os-verify-lock: full pnpm build 119/119; packages/qa/dogfood vitest run test/permission-set-clone-door.dogfood.test.ts + test/permission-unknown-grant-object-refusal.dogfood.test.ts: Test Files 2 passed (2), Tests 18 passed (18) (the clone-door file 11/11, including the case red on main); runtime permission-set-clone.test.ts 39/39; runtime typecheck exit 0; eslint on the clone door exit 0. On 591198e4 (same tree but S1): dogfood clone-door, unknown-grant refusal, comments-permission-matrix and me-apps-and-everyone-baseline: 4 files 34/34; plugin-security feed-grants integration + explicit-allow + reaction floor 70/70; metadata-protocol suite 312 files passed, 22356 tests; runtime suite 541/541, 8620 tests; typecheck exit 0 for metadata-protocol, runtime, plugin-security. Ablations on d770fe21 via scripts/ablation-replace.mjs WRAP, each red then restored with blob == HEAD: F1 refusal ignores inherited, 1 red; F2 save path drops request.inheritedGrantObjects, 1; F3 clone door omits the key, 2; F4 inherited widened to every grant, 1. The dogfood half of F3 is main's own red (runs 41960290148, 41961254209). Full output: project file server-seat2/30255/ablations-ran.txt.",
      "gates": "node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack: 65 derived (13 paths, +709 / -24). Run on 591198e4: 64 exit 0, pnpm check:dual-build-cjs-loads exit 3 (no dist/); on d770fe21 after a full pnpm build it exits 0. --ran over the final record: 65 derived, 65 run, 0 NOT-MEASURED, 0 UNRUN, exit 0. pnpm lint exit 0 (on 591198e4; S1 touches one file, eslint on it exit 0 on d770fe21). CI on 591198e4: 35 success, 13 skipped, 0 failure; on d770fe21: in progress at posting time. CI runs no dogfood shard on a PR or in the queue, so the dogfood readings above are the evidence.",
      "line_budget": "733 changed lines (+709 / -24) over 13 files, under the 3000-line human-merge threshold",
      "files_changed": [
        ".changeset/30108-member-default-feed-grants.md",
        ".changeset/30255-clone-inherits-held-grants.md",
        "packages/metadata-protocol/src/protocol-door-requests.ts",
        "packages/metadata-protocol/src/protocol-save-door-refusals.ts",
        "packages/metadata-protocol/src/protocol-save.ts",
        "packages/metadata-protocol/src/protocol.ts",
        "packages/metadata-protocol/src/protocol.unknown-grant-object-refusal.test.ts",
        "packages/plugins/plugin-security/src/comment-reaction-own-record-floor.test.ts",
        "packages/plugins/plugin-security/src/member-default-explicit-allow.test.ts",
        "packages/plugins/plugin-security/src/member-default-feed-grants.integration.test.ts",
        "packages/plugins/plugin-security/src/objects/default-permission-sets.ts",
        "packages/runtime/src/domains/permission-set-clone.test.ts",
        "packages/runtime/src/domains/permission-set-clone.ts"
      ],
      "deviations": [
        "Clause-②: yes (widening): SaveMetaItemRequest gains inheritedGrantObjects, declared in metadata-protocol's dist/index.d.ts and referenced by the exported ObjectStackProtocolImplementation.saveMetaItem, so it is reachable from the '.' entry's types.",
        "The full suites, typecheck and lint ran on 591198e4; S1 (d770fe21) changes one line and its docs in the clone door, and the clone-door unit file, runtime typecheck, eslint on that file, the ablations and the dogfood clone-door files were re-run on d770fe21.",
        "The revert PR #30262 also deleted a pending changeset, so its Check Changeset was route 0 (#18375): the dev posted a duplicate of the seat's confirmation (6649584182 beside 6649439259)."
      ],
      "dogfood_battery": "d770fe21 · os-verify-lock VERDICT command-exit 0 · Test Files 2/2 · Tests 18/18 (permission-set-clone-door 11/11, permission-unknown-grant-object-refusal 7/7) · no failures; 591198e4: 4 files 34/34",
      "write_budget": "git push x3 (revert branch 1d7cf41e; forward branch e7226bbc + 591198e4; S1 d770fe21), relay pr_create x2 (#30262, #30310), post-stamped comments x2 (6649584182 on #30262, this report)",
      "mcp_calls": "0",
      "api_writes": "4 — fleet-write pr_create #30262 (run 41965684327) and #30310 (run 41975918957), each read back identical, assignees none; comment 6649584182 on #30262 via post-stamped; this comment via post-stamped",
      "open_questions": [],
      "security_findings": "none",
      "out_of_scope_findings": [
        "S2 (seat): the package copy and unmanaged import doors can meet the same 422 on a set granting an object this deployment does not install; the seat files it"
      ]
    }

    Report taken 2026-11-05T06:45Z.


    Generated by Claude Code

  5. objectstack-fleet commented on Nov 5, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#2 · os-bill · session_01Utp6Cbvcmv8YWFhFJwzjKL

    Landed · 2026-11-05T07:18Z

    Reading Value
    Stop-the-bleed PR #30262 merged 2026-11-05T05:08Z (119c2db1), reverted #30222 (main red on dogfood permission-set-clone-door)
    Forward fix PR #30310 merged 2026-11-05T07:16Z, merge commit a545a041, reviewed head d770fe21 (seat ACCEPT 6651676827)
    Contract review CONTRACT_REVIEW_TIER PASS 6650931967; S1 fixed in d770fe21 (inherited keys read from the source set)
    Evidence for the formerly red case dev's dogfood on d770fe21: permission-set-clone-door + permission-unknown-grant-object-refusal 18/18 (dogfood shards do not run on PRs or in the queue)
    #30255 / #30108 closed by Fixes
    Release @objectstack/plugin-security, @objectstack/metadata-protocol, @objectstack/runtime patch changesets, next release

    State change: pm:dispatched removed. Follow-up: #30319 (package-duplicate and unmanaged-import doors may hit the same 422).

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:p0Queue-jump: outranks batch and breaks the round — never exempts claiming or same-file serial

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions