Consider a generic change-URI metadata/augmentation language (Change API)
Nobody has claimed this yet.
- Dominant language
- Go
- Stars
- 225
- Forks
- 11
- Avg merge
- 3d 8h
- Merged PRs (30d)
- 61
Description
Context
In #197, the extension fakes inject failures via an ad-hoc sq-fake=<token>
marker embedded in a change URI, parsed by the test-only core/fakemarker
package (Token([]string) / TokenInChanges([]entity.Change)).
Reviewing that PR, @sbalabanov raised two related design questions:
- Should we build a generic augmentation / metadata language into change
URIs, usable by these fakes and similar tooling — rather than a
fake-specific marker convention? - The marker lookup (
TokenInChanges) arguably belongs on the Change API
(entity.Change) rather than living in a test-only helper.
This issue captures that idea as a follow-up so #197 can land as-is (the marker
stays test-only there).
Design considerations
A generic change-URI metadata facility would need to reconcile with the
strict provider change-ID parsers, which today reject anything that isn't a
canonical resource identifier:
submitqueue/entity/github/change_id.go— requires a full 40-char lowercase
hex head SHA; a?key=valuequery string would not parse.submitqueue/entity/phabricator/change_id.go— fixedphab://form.submitqueue/extension/changeprovider/github/validate.go— rejects
unexpected schemes.
Open questions:
- Scope — is URI-attached metadata a production capability, or strictly a
test/example affordance? Putting parsing onentity.Changecouples the
production type to the convention; keeping it incore/fakemarkerkeeps the
separation the fakes deliberately maintain ("never production"). - Shape — RFC-3986 query params (
?k=v) vs. fragment vs. a dedicated
sidecar field onChange. Query params collide with the strict parsers
above; a typed field avoids string-encoding entirely. - Generality — a neutral
key → valueaccessor (e.g.
Change.URIParam(key)) thatfakemarkerlayerssq-fakesemantics on top
of, vs. a richer metadata model.
References
- PR #197 — fake implementations with error injection
- Threads: the
core/fakemarker.godiscussion in #197.
Filed as a follow-up per the #197 review discussion. Not blocking.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by reading the Change API and the referenced parsers: submitqueue/entity/github/change_id.go, submitqueue/entity/phabricator/change_id.go, and submitqueue/extension/changeprovider/github/validate.go. Review PR #197 and the core/fakemarker discussion before comparing query parameters, fragments, and a typed Change field. Done means resolving the scope, shape, and generality questions and documenting or implementing the chosen design without breaking strict change-ID validation.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- go
- Domain
- backend-api-design
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Quiet
- Clarity
- Needs clarification
- Newbie friendliness
- 25/100