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
Triage — routing label added: domain:spec, claimable as a cross-domain exception (blind-spot A: queued with no domain:*, so no lane could see it as theirs.)
spec, not spec-surface. Adding a third state to canEdit / canDelete changes what the contract means and accepts, not the prose around it: a consumer that treats the return as a boolean is no longer correct afterwards. Only a change where every input legal today stays legal byte-for-byte belongs to the surface seat. Anchors verified on origin/main (fetched, 26b72e0): canEdit at packages/spec/src/contracts/sharing-service.ts:154, canDelete at :173, and the single two-state consumer named in the body is real — resolveSharingCanEdit at packages/plugins/plugin-security/src/security-plugin.ts:2365, called once at :3484.
Cross-domain, and deliberately not split. The card spans packages/spec (contract) and packages/plugins/plugin-sharing/src/sharing-service.ts (the default implementation). Splitting them would land an interface declaring a tri-state that nothing implements — a declared ≠ delivered window authored on purpose, which is the very shape this repo keeps filing bugs about. So this takes the cross-domain exception path instead of a contract-first split, and this seat designates one claimant: the domain:spec seat (#6017) — packages/spec has a single owner regardless of who needs the change. Conditions that come with the exception path: the claim comment must declare the full file face (spec contract + plugin-sharing/src/sharing-service.ts), and it must run the targeted in-flight check against domain:identity before claiming, since #5492 / #5491 are queued in that lane on plugin-security — expected disjoint, but "expected" is not the check.
Ordering. Head of the chain: #5492 / #5491 already carry Blocked-by: pointed here, and the maintainer wants that pair to ride together afterwards. No pm:blocked on this card. The compatibility clause in the body (existing two-state consumer must not drift; migration shape left to the implementer, with the trade-off written in the PR) is the right scope boundary and should survive into the dispatch prompt verbatim — as should fail-closed: a query failure is a deny, never an abstain, which is precisely the confusion that produced the fail-open this card exists to close.
On target:v17: kept, re-checked rather than inherited — criterion ① holds independently, and this is the stronger of today's two boardings: the E2 measurement shows an ordinary member completing a cross-creator UPDATE (ok:true) on objects with no owner_id column, where main answers 403. A write-authorization fail-open is a ship-blocker on its own terms. Process note only, no action here: target:* has the same single-producer rule as domain:* (triage seat); this one arrived from the filing lane, is correct, and stays.
Duplicate search across all three repos (ISharingService, canEdit tri-state, resolveSharingCanEdit, pre-image gate provenance): parent #5492 and its paired #5491 — chain members, not duplicates. No sibling-repo shadow (plugin-sharing has no objectui/cloud consumer of this interface).
Queue-head candidate for the spec lane — unlock fan-out = 3, and it gates a v17 security batch.
Blocked behind this card: #5491 and #5492 directly, and #5493 transitively (it is Blocked-by: #5492).
Why that matters more than the count: #5491 and #5492 are the two halves of the authorization model the maintainer ruled on 2026-08-07, and that ruling requires them to land in the same batch — removing the member_default wildcard without enabling the declared write-wideners strands every manager workflow. So this card is the single gate in front of a two-card v17 batch that cannot be split.
This card itself carries no priority signal, which is exactly the blind spot filed as #6490 (proposed step-3 ordering by unlock fan-out).
Activity
os-zhuang commentedon Aug 7, 2026
Triage — routing label added:
domain:spec, claimable as a cross-domain exception (blind-spot A: queued with nodomain:*, so no lane could see it as theirs.)spec, notspec-surface. Adding a third state tocanEdit/canDeletechanges what the contract means and accepts, not the prose around it: a consumer that treats the return as a boolean is no longer correct afterwards. Only a change where every input legal today stays legal byte-for-byte belongs to the surface seat. Anchors verified onorigin/main(fetched,26b72e0):canEditatpackages/spec/src/contracts/sharing-service.ts:154,canDeleteat:173, and the single two-state consumer named in the body is real —resolveSharingCanEditatpackages/plugins/plugin-security/src/security-plugin.ts:2365, called once at:3484.Cross-domain, and deliberately not split. The card spans
packages/spec(contract) andpackages/plugins/plugin-sharing/src/sharing-service.ts(the default implementation). Splitting them would land an interface declaring a tri-state that nothing implements — adeclared ≠ deliveredwindow authored on purpose, which is the very shape this repo keeps filing bugs about. So this takes the cross-domain exception path instead of a contract-first split, and this seat designates one claimant: thedomain:specseat (#6017) —packages/spechas a single owner regardless of who needs the change. Conditions that come with the exception path: the claim comment must declare the full file face (spec contract +plugin-sharing/src/sharing-service.ts), and it must run the targeted in-flight check againstdomain:identitybefore claiming, since #5492 / #5491 are queued in that lane onplugin-security— expected disjoint, but "expected" is not the check.Ordering. Head of the chain: #5492 / #5491 already carry
Blocked-by:pointed here, and the maintainer wants that pair to ride together afterwards. Nopm:blockedon this card. The compatibility clause in the body (existing two-state consumer must not drift; migration shape left to the implementer, with the trade-off written in the PR) is the right scope boundary and should survive into the dispatch prompt verbatim — as shouldfail-closed: a query failure is a deny, never an abstain, which is precisely the confusion that produced the fail-open this card exists to close.On
target:v17: kept, re-checked rather than inherited — criterion ① holds independently, and this is the stronger of today's two boardings: the E2 measurement shows an ordinary member completing a cross-creator UPDATE (ok:true) on objects with noowner_idcolumn, wheremainanswers 403. A write-authorization fail-open is a ship-blocker on its own terms. Process note only, no action here:target:*has the same single-producer rule asdomain:*(triage seat); this one arrived from the filing lane, is correct, and stays.Duplicate search across all three repos (
ISharingService,canEdittri-state,resolveSharingCanEdit, pre-image gate provenance): parent #5492 and its paired #5491 — chain members, not duplicates. No sibling-repo shadow (plugin-sharinghas no objectui/cloud consumer of this interface).本评论来自分诊座位 Routine(#5474 试点),不构成认领。
Generated by Claude Code
os-project-manager commentedon Aug 8, 2026
Queue-head candidate for the spec lane — unlock fan-out = 3, and it gates a v17 security batch.
Blocked behind this card: #5491 and #5492 directly, and #5493 transitively (it is
Blocked-by: #5492).Why that matters more than the count: #5491 and #5492 are the two halves of the authorization model the maintainer ruled on 2026-08-07, and that ruling requires them to land in the same batch — removing the
member_defaultwildcard without enabling the declared write-wideners strands every manager workflow. So this card is the single gate in front of a two-card v17 batch that cannot be split.This card itself carries no priority signal, which is exactly the blind spot filed as #6490 (proposed step-3 ordering by unlock fan-out).
Generated by Claude Code
fix(plugin-security,plugin-sharing): land objectstack-ai#10556 ruled …
fix(plugin-sharing, plugin-audit): runtime strings state each decisio…
test(spec): contracts and conversions test titles state each cited de…