{"releases":[{"version":"0.1.0","date":"2025-03-01","summary":"MVP: health, version, status, ping, brains, offices demo."},{"version":"0.1.0","date":"2025-03-12","summary":"OpenAPI spec, rate-limit headers, locales, capabilities, schemas (Office/Hito), Link header, CORS, error catalog, this changelog endpoint."},{"version":"0.1.0","date":"2025-03-12","summary":"API versioning (apiVersion in root), GET /api/events SSE stream, GET /api/metrics observability, capabilities.apiVersioning, sse, metrics. X-Request-ID documented."},{"version":"0.1.0","date":"2025-03-12","summary":"GET/POST /api/graphql: GraphQL query interface (service, version, brains, offices). REST + GraphQL dual interface; capabilities.graphql: true."},{"version":"0.1.0","date":"2025-03-12","summary":"GET /.well-known/security.txt (RFC 9116), Server-Timing on GET /api/health (RFC 9530). capabilities.serverTiming, capabilities.securityTxt."},{"version":"0.1.0","date":"2025-03-12","summary":"RFC 7807 Problem Details for 404 (Accept: application/problem+json). GET /api/brains?fields=id,name (sparse fieldsets). capabilities.problemDetails, capabilities.sparseFieldsets."},{"version":"0.1.0","date":"2025-03-12","summary":"GET /api/offices?fields=id,name,hitos (sparse fieldsets). Content-Digest (RFC 9531) on GET /api/version. capabilities.contentDigest."},{"version":"0.1.0","date":"2025-03-12","summary":"Want-Digest: sha-256 on GET /api/health for Content-Digest. capabilities.wantDigest."},{"version":"0.1.0","date":"2025-03-12","summary":"GET /api/schemas/Problem (RFC 7807 JSON Schema). W3C Trace Context: echo traceparent/tracestate on /api/*. capabilities.traceContext."},{"version":"0.1.0","date":"2025-03-12","summary":"CORS Access-Control-Expose-Headers (ETag, Server-Timing, Content-Digest, traceparent, etc.). capabilities.exposeHeaders."},{"version":"0.1.0","date":"2025-03-12","summary":"Vary: Accept on 404 (content negotiation). schemaTypes: 22."},{"version":"0.1.0","date":"2025-03-12","summary":"GET /.well-known/openapi → /api/openapi (discovery). Prefer header (RFC 7240) documented for future writes. capabilities.preferHeader."},{"version":"0.1.0","date":"2025-03-12","summary":"CORS Access-Control-Allow-Headers on OPTIONS. GET /api/locales?fields=code,name (sparse fieldsets)."},{"version":"0.1.0","date":"2025-03-12","summary":"Cache-Control: no-store on GET /api/health and GET /api/status."},{"version":"0.1.0","date":"2025-03-12","summary":"GET /api/schemas/GraphQLResponse (GraphQL response schema). GET /api/audit stub (events: []). _links.audit, capabilities.auditStub. schemaTypes: 23."},{"version":"0.1.0","date":"2025-03-12","summary":"GET /api/schemas/AuditEvents. GET /api/limits ETag/304 (conditional requests). schemaTypes: 24."},{"version":"0.1.0","date":"2025-03-12","summary":"GET /api/health Vary: Want-Digest. GET /api/status Server-Timing (RFC 9530)."},{"version":"0.1.0","date":"2025-03-12","summary":"API Playground on /developers (Try the API). GET /.well-known/change-log → /api/changelog. GET /api Link rel=profile (RFC 6906) to ApiRoot schema. capabilities.profileLink, wellKnownChangeLog, apiPlayground."},{"version":"0.1.0","date":"2025-03-12","summary":"GET /api/usage stub (period, requestsUsed, requestsLimit) for future billing. Sunset header (RFC 8594) documented; capabilities.usageStub, sunsetHeader. Swagger Editor link on /developers."},{"version":"0.1.0","date":"2025-03-12","summary":"GET /api root and capabilities expose stability (stable). Schema ApiRoot and OpenAPI updated. capabilities.stability: true."},{"version":"0.1.0","date":"2025-03-12","summary":"GET /.well-known/api-discovery — JSON discovery (api, openapi, changelog, status, capabilities). _links.apiDiscovery, capabilities.wellKnownApiDiscovery."},{"version":"0.1.0","date":"2025-03-12","summary":"GET /api _links.docs, _links.developers. HSTS on /api/* when HTTPS (non-localhost). capabilities.hsts: true."},{"version":"0.1.0","date":"2025-03-12","summary":"GET /api root includes recommended (array of suggested first steps: capabilities, openapi, developers). Schema and OpenAPI updated. capabilities.recommended: true."},{"version":"0.1.0","date":"2025-03-12","summary":"GET /.well-known/api-discovery supports ETag and If-None-Match (304 Not Modified). Conditional requests for discovery endpoint."},{"version":"0.1.0","date":"2025-03-12","summary":"Permissions-Policy on /api/* (camera=(), microphone=(), geolocation=()). capabilities.permissionsPolicy: true."},{"version":"0.1.0","date":"2025-03-12","summary":"GET /api _links.support, _links.security (contact and security policy discovery)."},{"version":"0.1.0","date":"2025-03-12","summary":"Referrer-Policy: strict-origin-when-cross-origin on /api/*. capabilities.referrerPolicy: true."},{"version":"0.1.0","date":"2025-03-12","summary":"GET /api/schemas/Usage — JSON Schema for GET /api/usage response. schemaTypes: 25."},{"version":"0.1.0","date":"2025-03-12","summary":"GET /api _links.terms, _links.privacy (terms of service and privacy policy discovery)."},{"version":"0.1.0","date":"2025-03-12","summary":"GET /api _links.roadmap (product roadmap discovery)."},{"version":"0.1.0","date":"2025-03-12","summary":"GET /.well-known/api-discovery now includes support, security, terms, privacy, roadmap (absolute URLs). Aligned with GET /api _links."},{"version":"0.1.0","date":"2025-03-12","summary":"OpenAPI spec info.contact (absolute URL), info.license (name, url to terms). Machine-readable API metadata."},{"version":"0.1.0","date":"2025-03-12","summary":"GET /api _links.faq, _links.legal, _links.statusPage. GET /.well-known/api-discovery: docs, developers, faq, legal, statusPage (absolute URLs)."},{"version":"0.1.0","date":"2025-03-12","summary":"GET /api root includes conformsTo (array of standard URIs: OpenAPI 3.0, RFC 7807, RFC 5988). Schema and OpenAPI updated. capabilities.conformsTo: true."},{"version":"0.1.0","date":"2025-03-12","summary":"OpenAPI spec info.termsOfService (URL to terms). Standard API metadata for tooling and clients."},{"version":"0.1.0","date":"2025-03-12","summary":"GET /api/usage supports ETag and If-None-Match (304 Not Modified). Conditional requests for usage stub."},{"version":"0.1.0","date":"2025-03-12","summary":"OpenAPI spec externalDocs (url to /docs). Machine-readable link to human documentation."},{"version":"0.1.0","date":"2025-03-12","summary":"GET /api/health sends Link: rel=profile to /api/schemas/Health (RFC 6906). Schema discovery for health response."},{"version":"0.1.0","date":"2025-03-12","summary":"GET /api/status sends Link: rel=profile to /api/schemas/Status (RFC 6906). Schema discovery for status response."},{"version":"0.1.0","date":"2025-03-12","summary":"GET /api/version sends Link: rel=profile to /api/schemas/Version (RFC 6906). Schema discovery for version response."},{"version":"0.1.0","date":"2025-03-12","summary":"GET /api/capabilities sends Link: rel=profile to /api/schemas/Capabilities (RFC 6906). Schema discovery for capabilities response."},{"version":"0.1.0","date":"2025-03-12","summary":"GET /api/brains sends Link: rel=profile to /api/schemas/BrainsList (RFC 6906). Schema discovery for brains response."},{"version":"0.1.0","date":"2025-03-12","summary":"GET /api/offices and GET /api/locales send Link: rel=profile to OfficesList and Locales schemas (RFC 6906)."},{"version":"0.1.0","date":"2025-03-12","summary":"GET /api/legacy/health — deprecated alias; 301 to /api/health with Sunset (RFC 8594) and Link: rel=successor-version. Demonstrates deprecation lifecycle."},{"version":"0.1.0","date":"2025-03-12","summary":"GET /api/schemas returns _links (HATEOAS): self, describedby, schema:<type> for each schema. Link: rel=profile to SchemasList."},{"version":"0.1.0","date":"2025-03-12","summary":"GET /api/rate-limit-demo — always 429 with Retry-After (RFC 6585) for client backoff testing. capabilities.retryAfterOn429: true."},{"version":"0.1.0","date":"2025-03-12","summary":"All API responses send Date header (RFC 7231). GET /api/ping supports ETag and If-None-Match (304), Link: rel=profile to Ping schema."},{"version":"0.1.0","date":"2025-03-12","summary":"GET /api/ready — readiness probe (e.g. Kubernetes). Returns 200 with { ready, service }. capabilities.readinessProbe: true."},{"version":"0.1.0","date":"2025-03-12","summary":"Server-Timing (RFC 9530) on GET /api and GET /api/capabilities for discovery latency observability."},{"version":"0.1.0","date":"2025-03-12","summary":"GET /api/request-info — returns { method, path } for support; X-Request-ID in response headers. capabilities.requestInfo: true."},{"version":"0.1.0","date":"2025-03-12","summary":"GET /api/ready sends Link: rel=profile to Ready schema. GET /api/schemas/Ready — JSON Schema for readiness response. schemaTypes: 26."},{"version":"0.1.0","date":"2025-03-12","summary":"GET /api/request-info sends Link: rel=profile to RequestInfo schema. GET /api/schemas/RequestInfo. schemaTypes: 27."},{"version":"0.1.0","date":"2025-03-12","summary":"GET /api/offices supports ETag and If-None-Match (304). Fixed demo timestamp for cacheable response; Cache-Control with stale-while-revalidate."},{"version":"0.1.0","date":"2025-03-12","summary":"GET /api root _links: ready, requestInfo, rateLimitDemo for full HATEOAS discovery. GET /api/schemas returns _meta: { count, schemaVersion }."},{"version":"0.1.0","date":"2025-03-12","summary":"GET /api/brains, GET /api/locales, GET /api/offices return _meta: { count }. Server-Timing on brains and offices. List metadata for clients."},{"version":"0.1.0","date":"2025-03-12","summary":"List endpoints (brains, locales, offices) return _links (self, profile) in body for HATEOAS. Server-Timing on GET /api/locales. capabilities.listMeta: true."},{"version":"0.1.0","date":"2025-03-12","summary":"POST /api/bulk — stub returns 501 Not Implemented with _links.docs. capabilities.bulk: false. Root _links.bulk for discovery."},{"version":"0.1.0","date":"2025-03-12","summary":"GET /api/errors and GET /api/changelog return _meta (count) and _links (self, profile). Link: rel=profile to ErrorCatalog and Changelog schemas. Server-Timing on GET /api/schemas."},{"version":"0.1.0","date":"2025-03-12","summary":"GET /api/limits and GET /api/version return _links (self, profile) in body. Link: rel=profile and Server-Timing on both. Single-resource HATEOAS."},{"version":"0.1.0","date":"2025-03-12","summary":"GET /api/usage and GET /api/time return _links (self, profile). Link: rel=profile and Server-Timing on both. Stub and time endpoints HATEOAS."},{"version":"0.1.0","date":"2025-03-12","summary":"GET /api/health, status, ping, metrics, audit return _links (self, profile) in body. GET /api/metrics and audit send Link: rel=profile; Server-Timing on metrics. Full HATEOAS coverage."},{"version":"0.1.0","date":"2025-03-12","summary":"GET /api/capabilities, ready, request-info return _links in body. capabilities.hateoasBodyLinks: true. Server-Timing on request-info. All JSON responses HATEOAS."},{"version":"0.1.0","date":"2025-03-13","summary":"GET /api/observability — observability discovery: metrics, health, status, ready links; traceContext and serverTiming flags. capabilities.observability: true. GET /api/schemas/Observability. schemaTypes: 28."},{"version":"0.1.0","date":"2025-03-13","summary":"GET /api/openapi content negotiation: Accept: application/openapi+yaml or application/yaml returns YAML spec. Vary: Accept. capabilities.openapiYaml: true."},{"version":"0.1.0","date":"2025-03-13","summary":"GET /api/versions — API version lifecycle: versions (version, stability, apiRoot, sunset), _meta, _links. capabilities.apiVersionLifecycle: true. GET /api/schemas/ApiVersions. schemaTypes: 29."},{"version":"0.1.0","date":"2025-03-13","summary":"GET /api/conforms-to — standards discovery endpoint returning conformsTo URIs with _meta/_links. capabilities.conformsToEndpoint: true. GET /api/schemas/ConformsTo. schemaTypes: 30."},{"version":"0.1.0","date":"2025-03-13","summary":"GET /api/auth-methods — authentication methods discovery (id, description, current). capabilities.authMethods: true. GET /api/schemas/AuthMethods. schemaTypes: 31."},{"version":"0.1.0","date":"2025-03-13","summary":"GET /api/encoding — content encoding discovery (encodings: identity, gzip; default). capabilities.encodingDiscovery: true. GET /api/schemas/Encoding. schemaTypes: 32."},{"version":"0.1.0","date":"2025-03-13","summary":"GET /api/cors — CORS policy discovery (allowedOrigins, allowedMethods, allowPostOn, allowedHeaders, exposeHeaders, preflightMaxAge). capabilities.corsDiscovery: true. GET /api/schemas/Cors. schemaTypes: 33."},{"version":"0.1.0","date":"2025-03-13","summary":"GET /api/retry-policy — retry policy discovery (retryOn: 408, 429, 503; maxRetries, backoff). capabilities.retryPolicyDiscovery: true. GET /api/schemas/RetryPolicy. schemaTypes: 34."},{"version":"0.1.0","date":"2025-03-13","summary":"GET /api/media-types — media types discovery (accept, produce, defaultAccept, defaultProduce). capabilities.mediaTypesDiscovery: true. GET /api/schemas/MediaTypes. schemaTypes: 35."},{"version":"0.1.0","date":"2025-03-13","summary":"GET /api/well-known-paths — well-known URIs discovery (paths: security.txt, api-discovery, change-log, openapi). capabilities.wellKnownPathsDiscovery: true. GET /api/schemas/WellKnownPaths. schemaTypes: 36."},{"version":"0.1.0","date":"2025-03-13","summary":"GET /api/link-relations — link relation types discovery (rel: self, profile, describedby, feed, successor-version). capabilities.linkRelationsDiscovery: true. GET /api/schemas/LinkRelations. schemaTypes: 37."},{"version":"0.1.0","date":"2025-03-13","summary":"GET /api/size-limits — request/response size limits discovery (maxRequestPayloadBytes, maxUrlLength). capabilities.sizeLimitsDiscovery: true. GET /api/schemas/SizeLimits. schemaTypes: 38."},{"version":"0.1.0","date":"2025-03-13","summary":"GET /api/prefer — Prefer header (RFC 7240) discovery (return=minimal|representation, wait, respond-async). capabilities.preferDiscovery: true. GET /api/schemas/PreferDiscovery. schemaTypes: 39."},{"version":"0.1.0","date":"2025-03-13","summary":"GET /api/idempotency — Idempotency-Key header discovery (headerName, keyFormat, ttlSeconds, methods, supportedEndpoints). capabilities.idempotencyDiscovery: true. GET /api/schemas/IdempotencyDiscovery. schemaTypes: 40."},{"version":"0.1.0","date":"2025-03-13","summary":"GET /api/cache-policy — cache policy discovery (cacheable paths with maxAge/revalidate, noStore list, revalidation). capabilities.cachePolicyDiscovery: true. GET /api/schemas/CachePolicyDiscovery. schemaTypes: 41."},{"version":"0.1.0","date":"2025-03-13","summary":"GET /api/pagination — pagination policy discovery (style, defaultPageSize, maxPageSize, parameters, responseMeta). capabilities.paginationDiscovery: true. GET /api/schemas/PaginationDiscovery. schemaTypes: 42."},{"version":"0.1.0","date":"2025-03-13","summary":"GET /api/deprecation-policy — deprecation policy discovery (noticePeriodMonths, sunsetHeader RFC 8594, stabilityValues, changelog/versions). capabilities.deprecationPolicyDiscovery: true. GET /api/schemas/DeprecationPolicyDiscovery. schemaTypes: 43."},{"version":"0.1.0","date":"2025-03-13","summary":"GET /api/slo — SLO discovery (objectives: availability, latency_p99; statusPage, _links). capabilities.sloDiscovery: true. GET /api/schemas/SloDiscovery. schemaTypes: 44."},{"version":"0.1.0","date":"2025-03-13","summary":"GET /api/query-policy — query/filter/sort policy discovery (filter operators, sort, fields sparse fieldsets, applicableEndpoints). capabilities.queryPolicyDiscovery: true. GET /api/schemas/QueryPolicyDiscovery. schemaTypes: 45."},{"version":"0.1.0","date":"2025-03-13","summary":"GET /api/webhooks — webhook discovery stub (supported: false, planned: true; signatureAlgorithm, deliveryRetry). capabilities.webhooksDiscovery: true. GET /api/schemas/WebhooksDiscovery. schemaTypes: 46."},{"version":"0.1.0","date":"2025-03-13","summary":"GET /api/accept-policy — content negotiation discovery (Accept, Accept-Language, Accept-Encoding: default and supported). capabilities.acceptPolicyDiscovery: true. GET /api/schemas/AcceptPolicyDiscovery. schemaTypes: 47."},{"version":"0.1.0","date":"2025-03-13","summary":"GET /api/bulk-policy — bulk/batch operation policy discovery (supported: false, planned: true; maxOperationsPerRequest, request/response format). capabilities.bulkPolicyDiscovery: true. GET /api/schemas/BulkPolicyDiscovery. schemaTypes: 48."},{"version":"0.1.0","date":"2025-03-13","summary":"GET /api/errors-policy — error response policy discovery (RFC 7807, problemDetailsAccept, catalogLink, standardCodes, X-Request-ID). capabilities.errorsPolicyDiscovery: true. GET /api/schemas/ErrorsPolicyDiscovery. schemaTypes: 49."},{"version":"0.1.0","date":"2025-03-13","summary":"GET /api/timing-policy — Server-Timing (RFC 9530) policy discovery (enabled, endpoints, headerName, format). capabilities.timingPolicyDiscovery: true. GET /api/schemas/TimingPolicyDiscovery. schemaTypes: 50."},{"version":"0.1.0","date":"2025-03-13","summary":"GET /api/security-policy — security policy discovery (HSTS, CORS, security.txt RFC 9116, auth, Permissions-Policy, Referrer-Policy). capabilities.securityPolicyDiscovery: true. GET /api/schemas/SecurityPolicyDiscovery. schemaTypes: 51."},{"version":"0.1.0","date":"2025-03-13","summary":"GET /api/documentation — documentation discovery (resources: docs, developers, openapi, changelog, status; _links). capabilities.documentationDiscovery: true. GET /api/schemas/DocumentationDiscovery. schemaTypes: 52."},{"version":"0.1.0","date":"2025-03-13","summary":"GET /api/rate-limit-policy — rate limit policy discovery (RFC 9211 headers, on429 Retry-After, limits/retry-policy links). capabilities.rateLimitPolicyDiscovery: true. GET /api/schemas/RateLimitPolicyDiscovery. schemaTypes: 53."},{"version":"0.1.0","date":"2025-03-13","summary":"GET /api/conditional-requests — conditional requests policy discovery (ETag, If-None-Match, 304; endpoints list, cachePolicy link). capabilities.conditionalRequestsDiscovery: true. GET /api/schemas/ConditionalRequestsDiscovery. schemaTypes: 54."},{"version":"0.1.0","date":"2025-03-13","summary":"GET /api/resilience-policy — resilience policy discovery (suggested timeouts, failure semantics retryable/doNotRetry, circuit-breaker hints; links to retry-policy, slo, rate-limit-policy). capabilities.resiliencePolicyDiscovery: true. GET /api/schemas/ResiliencePolicyDiscovery. schemaTypes: 55."},{"version":"0.1.0","date":"2025-03-13","summary":"GET /api/consistency-policy — consistency policy discovery (model, readYourWrites, monotonicReads, staleReadsAllowed, cachingInteraction; links to cache-policy, conditional-requests, pagination). capabilities.consistencyPolicyDiscovery: true. GET /api/schemas/ConsistencyPolicyDiscovery. schemaTypes: 56."}],"_meta":{"count":92},"_links":{"self":{"href":"/api/changelog"},"profile":{"href":"/api/schemas/Changelog"}}}