Filing gate: ① a product defect with a measured reach:, finding class (b) (a violated declared contract), plus the release-text exception: the sentence ships in every refusal. Filed by the domain:cli execution seat (#6024, session session_01VvcEokUG1tvVxkceYfR5XB) from the #20679 dev's report on PR #20817 (out_of_scope_findings[0]). ⛔ Filed bare: routing and grading belong to triage. ⛔ Not a claim.
What happens
A write to a packaged flow's locked base is refused with 403 NOT_OVERRIDABLE and this sentence (packages/metadata-protocol/src/protocol.ts, saveMetaItem's package door, about :16134 at origin/main d2b188fb):
Metadata item 'flow/NAME' is provided by a code package and the type has not opted into per-org overlay writes (allowOrgOverride=false). Edit the source artifact and redeploy, or set OS_METADATA_WRITABLE to grant a runtime escape hatch. See docs/adr/0005-metadata-customization-overlay.md.
The contract it violates
ADR-0126 §2 (docs/adr/0126-packaged-metadata-customization-model.md:143-147), Regime C, which is the regime of behavioral types (flow among them):
the packaged base is locked — in-place edit refused loudly at the write door, the refusal naming the sanctioned path; each packaged behavioral artifact carries an enable/disable switch … customization is authoring an ordinary sibling artifact (clone or from scratch; new machine name mandatory …
and the same ADR at :424-425: "a locked base that refuses loudly with the sanctioned path in the refusal message is the shape that keeps AI-written metadata from guessing".
For a packaged flow, the sanctioned paths are the clone under a new name (§7.1; POST /api/v1/automation/:name/clone, served since PR #20779) and the enable/disable switch (§7.2; POST /api/v1/automation/:name/toggle, operator-gated per §5). The sentence names neither. It prescribes a code edit and redeploy, which an administrator of an installed package cannot do, and a runtime escape hatch that ADR-0131 D6 (managed definitions are sealed) and the maintainer's #20761 ruling (5904938166) both narrow. It also cites ADR-0005, not ADR-0126.
Seam: adr:ADR-0126 §2 refusal-names-the-sanctioned-path → runtime:packages/metadata-protocol/src/protocol.ts saveMetaItem / deleteMetaItem package doors (NOT_OVERRIDABLE), relayed by packages/runtime/src/domains/automation.ts once PR #20817 lands.
Not decided here
Dedupe (closed included)
Semantic search in objectstack-ai/objectstack, open and closed:
- "packaged flow refusal NOT_OVERRIDABLE sentence should name clone sanctioned path instead of redeploy OS_METADATA_WRITABLE": 22 hits.
- "NOT_OVERRIDABLE refusal message OS_METADATA_WRITABLE escape hatch packaged flow edit source redeploy": 24 hits.
Neither query has a hit about this sentence. The nearest are #15206 (open: the sealing rework), #12156 / #12157 (closed: the clone and switch doors themselves) and #19874 (closed: a different refusal naming an unavailable remedy).
Dedupe words: packaged flow refusal sanctioned path · NOT_OVERRIDABLE clone prescription · OS_METADATA_WRITABLE refusal sealed · Regime C refusal message
Generated by Claude Code
Filing gate: ① a product defect with a measured
reach:, finding class (b) (a violated declared contract), plus the release-text exception: the sentence ships in every refusal. Filed by thedomain:cliexecution seat (#6024, sessionsession_01VvcEokUG1tvVxkceYfR5XB) from the #20679 dev's report on PR #20817 (out_of_scope_findings[0]). ⛔ Filed bare: routing and grading belong to triage. ⛔ Not a claim.What happens
A write to a packaged flow's locked base is refused with
403 NOT_OVERRIDABLEand this sentence (packages/metadata-protocol/src/protocol.ts,saveMetaItem's package door, about:16134atorigin/maind2b188fb):reach:PUT /api/v1/meta/flow/:nameon the showcase's packaged flow answers exactly this. This is the checklist itemaccess-security.packaged-flow-write-door-parity's control leg, measured by the access-security.packaged-flow-write-door-parity clauses 2 and 3 fail on main — detail withheld pending maintainer #20679 dev over a booted showcase at PR fix(runtime,metadata-protocol): the /automation write doors keep the packaged-base lock the /meta door keeps (#20679) #20817's headf5ea00604.PUT/DELETE /api/v1/automation/:name, andPOST /api/v1/automationonto a packaged name.The contract it violates
ADR-0126 §2 (
docs/adr/0126-packaged-metadata-customization-model.md:143-147), Regime C, which is the regime of behavioral types (flowamong them):and the same ADR at
:424-425: "a locked base that refuses loudly with the sanctioned path in the refusal message is the shape that keeps AI-written metadata from guessing".For a packaged flow, the sanctioned paths are the clone under a new name (§7.1;
POST /api/v1/automation/:name/clone, served since PR #20779) and the enable/disable switch (§7.2;POST /api/v1/automation/:name/toggle, operator-gated per §5). The sentence names neither. It prescribes a code edit and redeploy, which an administrator of an installed package cannot do, and a runtime escape hatch that ADR-0131 D6 (managed definitions are sealed) and the maintainer's #20761 ruling (5904938166) both narrow. It also cites ADR-0005, not ADR-0126.Seam:
adr:ADR-0126 §2 refusal-names-the-sanctioned-path → runtime:packages/metadata-protocol/src/protocol.ts saveMetaItem / deleteMetaItem package doors (NOT_OVERRIDABLE), relayed bypackages/runtime/src/domains/automation.tsonce PR #20817 lands.Not decided here
OS_METADATA_WRITABLEsentence survives for sealed managed content at all. That is feat(metadata-core,metadata-protocol,objectql,plugin-security): thesys_metadatafamily goes tenant-less; the per-organization overlay axis retires; managed content is sealed (ADR-0131 D6/D7/D13) #15206's territory (ADR-0131 D6/D7/D13, open), which may rewrite this door.Dedupe (closed included)
Semantic search in
objectstack-ai/objectstack, open and closed:Neither query has a hit about this sentence. The nearest are #15206 (open: the sealing rework), #12156 / #12157 (closed: the clone and switch doors themselves) and #19874 (closed: a different refusal naming an unavailable remedy).
Dedupe words:
packaged flow refusal sanctioned path·NOT_OVERRIDABLE clone prescription·OS_METADATA_WRITABLE refusal sealed·Regime C refusal messageGenerated by Claude Code