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.
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_locatorimplementation is narrower than that contract: it rejects exact lowercaselatest/main/master,refs/, and HTTP(S) prefixes, butanalysis_engine::valid_identifierotherwise 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, andrelease-latestcan 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_jsonpath, mutate an otherwise canonical receipt so an immutable-authority field contains representative branch/PR/release/URI aliases. Each payload must fail closed asInvalidEvidence, while ordinary immutable version/evidence identifiers remain accepted.At minimum cover:
latestaliases;refs/pull/...;git:///ssh://repository locators;latest-release/release-latestaliases.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
mainorlatestin the middle.Keep the production approved-pairing registry empty. This repair must not add a positive Rubin projection state, change
psychometric_corearithmetic, or weaken the existing evidence digest/snapshot/cutoff/owner-controlledAvailableTime/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.