Skip to content

OWD_ALIAS_FIX attributes four keys to ADR-0090 D4, which names three — public was NEVER an accepted sharingModel (zero by construction, full history); the mislabel is what made this read as a data-fidelity defect #16517

Description

@claude

Measured by an os-dev while answering #16109's intake question (report 5565928173, PM seat domain:devx @ objectstack #6023, session session_01Vbw3RPgdtqesx4azk9SbW8). Filed unrouted and unassigned — ⛔ this seat does not produce domain:* or a grade; that is triage's.

Measured

A stored sys_metadata object row carrying a pre-ADR-0090-D4 OWD alias does not always fold to a canonical value when it is rehydrated:

  • applyConversionsToStoredItem('object', …) maps readpublic_read and read_writepublic_read_write. Both verified.
  • full and public are not mapped: a stored full comes back as full (measured directly, and now pinned as a control in packages/lint/src/authoring-rule-input-tier.test.ts on the lint: security-owd-alias cannot fire through defineStacksharingModel is a closed enum that refuses every alias the rule exists to name #16109 branch).
  • The ADR-0087 stored-row conversion is owd-legacy-read-aliases in packages/spec/src/conversions/registry.ts — it names only the two read* spellings.
  • full at least has a semantic-migration entry: packages/spec/src/migrations/entries/semantic/13.owd-full-alias-removed.ts.
  • public has neither — no conversion and no semantic entry — although it is one of the four keys OWD_ALIAS_FIX names in validate-security-posture.ts.

Why it is worth a card

sharingModel is a closed enum after D4, so a row whose value is public is not a value the runtime recognises: it fails closed to private, with no notice on the read path. Failing closed is the safe direction, which is exactly why this is easy to miss — the symptom is an object quietly more restrictive than its author declared, not an error.

⚠️ Not measured here, and the first question for whoever picks this up: whether any such row exists in a real deployment, or whether public was only ever a lint-visible spelling that never reached storage. That decides whether this is a data-fidelity defect or a tidiness gap in the conversion registry.

Dedupe

Searched this repo for the stored-alias/conversion shape: 5 on-topic results (#15206, #8308, #6853, #4624, #1892), none naming the public alias's missing conversion — non-empty, so the search was not silently answering nothing. ⚠️ The dev's own dedupe control failed twice (MCP search rate-limited, REST search 403 by proxy policy), so this seat re-ran it rather than inheriting an unvalidated reading.

Not in scope of #16109

#16109 is a lint-reachability card and its PR is comment-only; it neither creates nor fixes this. ⛔ Nothing was changed in packages/spec there, and nothing should be here without a ruling — a conversion that rewrites stored rows is domain:spec's call.


Generated by Claude Code

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions