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
runtime: export the disable door's dependent-validation-rule verdict for host doors, so a host that removes a package another way answers the same 409 #31067
readDisableDependentRules (packages/runtime/src/domains/packages.ts) is module-private. The sentence disableDependentRulesMessage("Package '<id>' cannot be disabled", dependents) is composed inline at the door.
Consumer: cloud packages/service-cloud/src/routes/environment-crud/packages.ts. Its disable arm (PATCH …/cloud/environments/:id/packages/:pkgId/disable) and the soft-disable uninstall drop the package from the environment's artifact with no scan. On the cloud#31001 rig this left every write on the object refused 400 VALIDATION_FAILED.
Expected
A public, pure verdict over a registry, or a kernel service read, that returns the dependent rules plus the message builder. The door itself consumes it, so there is still one spelling of the scan and the sentence.
On the maintainer's ruling 「平台开放检查,cloud 接上(推荐)」. readDisableDependentRules and the door's sentence are module-private, so cloud's own disable and uninstall routes skip the check and leave an object's writes refused. Export a pure verdict plus the message builder, and have the door consume it, so the scan and the sentence keep one spelling.
Activity
objectstack-fleet commentedon Nov 7, 2026
triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U
Path: none
Triage: audit · p2 kept ·
domain:server· 2026-11-07T00:52Z⛔ Not a claim.
readDisableDependentRulesand the door's sentence are module-private, so cloud's own disable and uninstall routes skip the check and leave an object's writes refused. Export a pure verdict plus the message builder, and have the door consume it, so the scan and the sentence keep one spelling.domain:server,pm:queuekept. The door's behaviour is unchanged. It sits beside runtime: uninstalling a package (DELETE /packages/:id) withdraws its extension fields with no scan, so another package's active validation rule that reads one breaks every write (#30379 follow-up) #30999 (the uninstall refusal), which consumes the same verdict, so whichever lands second re-reads the first.Generated by Claude Code