Skip to content

validation: reject mutable authority locator aliases in Rubin activation receipts #508

Description

@seonghobae

Finding

Draft #506 documents that Git branch names, PR numbers, check URLs, comments, and latest-release aliases are mutable locators and cannot substitute for digest-bound Rubin activation authority. The current is_mutable_authority_locator implementation is narrower than that contract: it rejects exact lowercase latest/main/master, refs/, and HTTP(S) prefixes, but analysis_engine::valid_identifier otherwise accepts non-control strings up to the identifier bound.

As a result, mutable aliases such as PR-504, pull/504, #504, github.com/ContextualWisdomLab/TEPP/pull/504, git://..., Latest, and release-latest can currently be serialized as generator/analysis/evidence/design authority identifiers. The production Rubin approval registry is intentionally empty, so this is not a current positive-authorization bypass. It is a pre-promotion contract defect: once a production pairing is introduced, the owner path must not be able to register a mutable locator while the checked-in contract claims such locators are inadmissible.

Required RED

Through the public bounded RubinProjectionActivationReceiptV1::from_json path, mutate an otherwise canonical receipt so an immutable-authority field contains representative branch/PR/release/URI aliases. Each payload must fail closed as InvalidEvidence, while ordinary immutable version/evidence identifiers remain accepted.

At minimum cover:

  • mixed-case/default-branch or latest aliases;
  • PR/pull/issue numeric aliases rather than only refs/pull/...;
  • GitHub host/path locators lacking an explicit HTTP scheme;
  • git:///ssh:// repository locators;
  • latest-release/release-latest aliases.

Minimal causal repair

Harden the activation-specific immutable-authority predicate, not the repository-wide generic identifier validator. Normalize only for locator classification, preserve the original identifier bytes for digest identity, and reject the bounded mutable patterns above. Do not broaden this into heuristic rejection of arbitrary scientific names containing words such as main or latest in the middle.

Keep the production approved-pairing registry empty. This repair must not add a positive Rubin projection state, change psychometric_core arithmetic, or weaken the existing evidence digest/snapshot/cutoff/owner-controlled AvailableTime/design/indicator checks.

Relationship

ADR 0034 remains Proposed / not implemented-main. The surviving vehicle must inherit the regression and causal repair before any predecessor is closed.

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

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions