Repository navigation
Conversation
Restructures the Lifecycle Object around the operation-scoped deprecation/sunset model from discussion #5's April 2026+ comments (the root-level, document-wide draft from earlier in the thread is superseded) and places it under `features` on the Operation Object, consistent with the Standardized API Feature (SAF) concept being defined in OAI/OpenAPI-Specification#5310 and #5350. Fills in the Introduction, Relationship to the OpenAPI Specification, Definitions (Lifecycle Object, Sunset Object), a new informative Header Mapping section (field -> Deprecation/Sunset/Link header mapping per RFC 9745, RFC 8594, RFC 8288), Appendix A revision history, and a new informative Appendix B on AI agent/MCP tooling usage. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YAmP3nFaRwCARS7JygrV7r
Align lifecycle.md with SAF framing, using discussion #5 example data
minor changes
…ample - Declare the SAF via the root `features` map (OAS PR #5447) and place the Lifecycle Object in a dedicated Operation Object `lifecycle` field - Add a complete OAS 3.3 example using `externalLinks` from the Docs Links proposal alongside the Lifecycle Object - Fix stale listPets_v2 reference in Appendix B Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Align lifecycle SAF with OAS #5447 features and add external links example
Swap `migration`, `replacement`, and `sunset.policy` for a single `lifecycle.externalLinks` array of External Documentation Objects, per the OAS Docs Links proposal. `kind` is required and uses IANA link relation names (`deprecation`, `successor-version`, `sunset`), so each link maps directly to a `Link` header; other kinds are documentation only. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Replace named lifecycle link fields with an externalLinks array
The schema was a stub (`properties: {}` with `additionalProperties: false`)
that rejected every non-empty Lifecycle Object. It now validates the
Lifecycle, Sunset, and External Documentation Objects, requiring `kind` on
each `lifecycle.externalLinks` entry and rejecting the removed `migration`,
`replacement`, and `sunset.policy` fields.
Removes the unused Schema Object `$dynamicAnchor` hook and the matching
spec text, since the Lifecycle Object contains no Schema Objects.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Define the Lifecycle Object schema and add pass/fail tests
Define `deprecated` as the authoritative deprecation signal. Operations with `lifecycle` SHOULD set `deprecated: true`; if `deprecated` is absent or false, tools MUST treat the operation as not deprecated and MUST NOT generate headers or present it as deprecated from the Lifecycle Object. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Make deprecated take precedence over the Lifecycle Object
karenetheridge
requested changes
Oct 29, 2026
| type: string | ||
| url: | ||
| type: string | ||
| format: uri |
Member
There was a problem hiding this comment.
For consistency, this should be uri-reference.
Author
There was a problem hiding this comment.
Changed to uri-reference in 0c10911, and added a pass fixture with a relative url (tests/schema/pass/relative-link-url.yaml). Thanks!
For consistency with the OAS schema, allow URI references, which are resolved against the document's base URI. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Author
|
@karenetheridge thanks for the review — I switched |
spec.openapis.org/oas/v3.3.0.html is not published yet, so the link check fails. Link the SAF section to the v3.3-dev source and the Operation and External Documentation Objects to the latest published OAS. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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.
Summary
This PR brings the Lifecycle Specification in line with the SAF mechanism merged in OAI/OpenAPI-Specification#5447. It builds the Lifecycle Object on the Docs Links proposal, and replaces the stub schema with a real one. It supersedes #15.
SAF framing (operation-scoped, per discussion #5)
Deprecation(RFC 9745),Sunset(RFC 8594), andLinkheaders, and an informative appendix on AI agent / MCP use.Alignment with OAS #5447
featuresmap (features: { security: 1.0.0, lifecycle: 1.0.0 }). The spec notes thatsecuritymust be listed explicitly oncefeaturesis set.lifecyclefield, not in an operation-levelfeatures. This avoids reusing the rootfeaturesname with a different type.Adopting
externalLinks(Docs Links proposal)migration,replacement, andsunset.policyare replaced by a singlelifecycle.externalLinksarray of External Documentation Objects.kindis required on each entry.deprecation,successor-version, andsunsetare IANA link relation names, so each link maps directly toLink: <url>; rel="<kind>". Other kinds (for examplechangelog) are documentation only.lifecycle.externalLinks; general docs stay in the operation's ownexternalLinks.deprecatedtakes precedencedeprecatedis the authoritative signal. An operation withlifecycleSHOULD setdeprecated: true. Ifdeprecatedis absent orfalse, tools MUST treat the operation as not deprecated and ignorelifecycle: no headers, no deprecation annotations.deprecated: truewithoutlifecycleworks as before, so APIs can adopt the SAF gradually.Schema
properties: {}+additionalProperties: false) rejected every non-empty Lifecycle Object. The new schema validates the Lifecycle, Sunset, and External Documentation Objects, and requireskindinlifecycle.externalLinks.Open questions for the SIG
lifecyclethe right name for the Operation Object field?lifecycle: 1.1.0.sunset.date>=date; the compatibility[TODO]is unfilled.Test plan
oai-spec-test tests/schema— 24 passed, 100% schema coverageyarn validate-markdown(not run locally)