Repository navigation
spec: add an optional change feed (GET /changes) for index-time federation (#96) - #108
Open
kperry-godaddy wants to merge 1 commit into
Open
kperry-godaddy wants to merge 1 commit into
kperry-godaddy wants to merge 1 commit into
Conversation
…ation (ards-project#96) New §5.5 defines an ordered, cursor-driven, replayable feed of the identifiers a registry added, updated, or removed. The feed carries no entry content: a consumer fetches each entry from the identifier's publisher domain (§5.1) and confirms every delete there, so the trust rules are unchanged from crawling and mutually subscribed registries converge without a hop list. Cursors are opaque; delivery is at-least-once, latest change per identifier; the retention window must contain every held identifier, so a new consumer replays it once with no snapshot endpoint and no 410 mid-replay. Optional, 501 like Explore. Also: the §5 intro names the new layer; §5.2 gains a change-feed subscription pipeline bullet; §5.4 gains a paragraph naming query-time and index-time federation; Appendix B gains 410 CURSOR_EXPIRED and names 501 NOT_IMPLEMENTED; D.3 lists the endpoint. The OpenAPI definition gains /changes and a 410 response; ard-change.schema.json defines the page and change objects and ard.cddl restates them. ADR-0011 records the decision, the alternatives, and what was deliberately left out. Identifier forms whose authority is not a publisher domain, and the conformance tooling for producers and consumers, are left to follow-up PRs. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
kperry-godaddy
requested review from
evalstate,
mindpower and
rvguha
as code owners
October 12, 2026 19:13
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Normative text for the change feed proposed in #96. One optional endpoint,
GET /changes: an ordered, cursor-driven, replayable feed of the identifiers a registry added, updated, or removed, and nothing else. A consumer fetches each entry from the identifier's authority (the<publisher>domain, resolved as §5.1 directs) and confirms every delete there. The feed says what exists and what changed; the authority says what the entry says.What changes
spec/ard.mdfederation: nonekeeps its meaning.410 CURSOR_EXPIREDand names501 NOT_IMPLEMENTED(Explore already returns 501 without a code).GET /changesamong the OpenAPI-defined interfaces. D.4 is untouched: conformance tooling is a follow-up PR.spec/schemas/ard.openapi.yaml:/changespath (cursor,limit; 200/400/401/410/429/501/500), aChangeFeedResponseschema referencing the new JSON Schema the same waySearchResultItemreferencesard-entry.schema.json, and a410CursorExpiredresponse.info.versionleft for the publishing commit.spec/schemas/ard-change.schema.json(new):Cursor,Change,ChangeFeedResponse. Validated against the 2020-12 metaschema and against the §5.5.2 example plus negative cases.spec/schemas/ard.cddl:cursor,change,changes-response.adr/0011-index-time-federation-change-feed.md(new): context, decision, why identifiers rather than entries, alternatives, exclusions, consequences. Numbered after the merged ADR-0010; renumber if Add direct catalog entry lookup by identifier #74 lands first.Decisions taken on the open questions in #96
{cursor, op, time, identifier}; the change object is closed (additionalProperties: false).501, as for Explore; a registry operated as an upstream for other registries SHOULD implement it. One sentence; easy to drop if the group prefers plain optional.410,retentionomitted) or by re-emitting an identifier's latest change before it ages out. Floor: SHOULDP7D. Cursor older than the window →410 CURSOR_EXPIRED→ staged replay; the live index is never emptied.deleteis never applied while the authority cannot be reached; how long an entry then survives is the same question §5.2 leaves open for crawled entries, and the text says so rather than inventing a lifetime here.Deliberately not in this PR
digest,origin, hop path,reason, filters, push transports, publisher-served feeds, a DNS record for the feed (recorded in the ADR with the condition for adding each).auto(hop limit, partial-answer marker).Checks
$ref(internal and to both JSON Schema files) resolves.op, extra properties, bad cursors, bad durations, and >1000 changes are rejected.Closes nothing on its own; tracks #96. Related: #63, #87, #88, #94, PR #74.
🤖 Generated with Claude Code