The public surface — 17 of the 28 registered routes — reads from a 29KB
TypeScript fixture and never touches the backend. `TECH_LOG_STUDIO_SOURCE`
only ever switched the Studio gateways; `publicContent` was wired to the
static adapter unconditionally, so no configuration could make the public
site show published content. This is the first half of closing that: the
contract and the switch, with the adapter still to come.
The generator now vendors both canonical contracts instead of one. They are
independent — different services on different schedules — so each carries
its own digest and operation list, and updating one leaves the other's drift
gate quiet.
`TECH_LOG_PUBLIC_SOURCE` is deliberately a second flag rather than a rename
of the Studio one. The combination that matters right now is exactly the one
a single flag cannot express: the authoring backend is live while the public
read API does not exist yet. production stays on MOCK for that reason —
pointing it at HTTP today would empty the live site — and moves when the
backend serves /api/v1/public.
Also records the compatibility evidence the registry gate wanted for the
Studio access change in fff5e6f. That gate has been failing since, which is
on me: the change was real and breaking, and it shipped without the note
explaining that route ids and schemas are untouched and only the access
classification moves.
366 lines
31 KiB
JSON
366 lines
31 KiB
JSON
{
|
|
"schemaVersion": 1,
|
|
"changes": [
|
|
{
|
|
"changeId": "FE-REG-ROUTE:$contract:allowedValues:contract-field-changed",
|
|
"versionBump": "TechLog route contract v1 replaces the starter and reference-resource route set.",
|
|
"migration": "Install the TechLog route definition, route runtime, schema registry, and release manifest atomically in the same release.",
|
|
"compatibilityWindow": "The deployed release consumes only its same-release registry snapshot and runtime chunks; no mixed route contract is supported.",
|
|
"rollback": "Roll back the atomic release to the pre-migration feature base 05e3d50ba01f01c27f257d2e9040c2bc413ea053.",
|
|
"owner": "tech-log-frontend"
|
|
},
|
|
{
|
|
"changeId": "FE-REG-ROUTE:$contract:breakingFields:contract-field-changed",
|
|
"versionBump": "TechLog route contract v1 replaces the starter and reference-resource route set.",
|
|
"migration": "Install the TechLog route definition, route runtime, schema registry, and release manifest atomically in the same release.",
|
|
"compatibilityWindow": "The deployed release consumes only its same-release registry snapshot and runtime chunks; no mixed route contract is supported.",
|
|
"rollback": "Roll back the atomic release to the pre-migration feature base 05e3d50ba01f01c27f257d2e9040c2bc413ea053.",
|
|
"owner": "tech-log-frontend"
|
|
},
|
|
{
|
|
"changeId": "FE-REG-ROUTE:$contract:fieldTypes:contract-field-changed",
|
|
"versionBump": "TechLog route contract v1 replaces the starter and reference-resource route set.",
|
|
"migration": "Install the TechLog route definition, route runtime, schema registry, and release manifest atomically in the same release.",
|
|
"compatibilityWindow": "The deployed release consumes only its same-release registry snapshot and runtime chunks; no mixed route contract is supported.",
|
|
"rollback": "Roll back the atomic release to the pre-migration feature base 05e3d50ba01f01c27f257d2e9040c2bc413ea053.",
|
|
"owner": "tech-log-frontend"
|
|
},
|
|
{
|
|
"changeId": "FE-REG-ROUTE:$contract:requiredFields:contract-field-changed",
|
|
"versionBump": "TechLog route contract v1 replaces the starter and reference-resource route set.",
|
|
"migration": "Install the TechLog route definition, route runtime, schema registry, and release manifest atomically in the same release.",
|
|
"compatibilityWindow": "The deployed release consumes only its same-release registry snapshot and runtime chunks; no mixed route contract is supported.",
|
|
"rollback": "Roll back the atomic release to the pre-migration feature base 05e3d50ba01f01c27f257d2e9040c2bc413ea053.",
|
|
"owner": "tech-log-frontend"
|
|
},
|
|
{
|
|
"changeId": "FE-REG-ROUTE:APP_HOME:*:removed",
|
|
"versionBump": "TechLog route contract v1 replaces the starter and reference-resource route set.",
|
|
"migration": "Install the TechLog route definition, route runtime, schema registry, and release manifest atomically in the same release.",
|
|
"compatibilityWindow": "The deployed release consumes only its same-release registry snapshot and runtime chunks; no mixed route contract is supported.",
|
|
"rollback": "Roll back the atomic release to the pre-migration feature base 05e3d50ba01f01c27f257d2e9040c2bc413ea053.",
|
|
"owner": "tech-log-frontend"
|
|
},
|
|
{
|
|
"changeId": "FE-REG-ROUTE:EXAMPLES_AUTH:*:removed",
|
|
"versionBump": "TechLog route contract v1 replaces the starter and reference-resource route set.",
|
|
"migration": "Install the TechLog route definition, route runtime, schema registry, and release manifest atomically in the same release.",
|
|
"compatibilityWindow": "The deployed release consumes only its same-release registry snapshot and runtime chunks; no mixed route contract is supported.",
|
|
"rollback": "Roll back the atomic release to the pre-migration feature base 05e3d50ba01f01c27f257d2e9040c2bc413ea053.",
|
|
"owner": "tech-log-frontend"
|
|
},
|
|
{
|
|
"changeId": "FE-REG-ROUTE:EXAMPLES_PLATFORM:*:removed",
|
|
"versionBump": "TechLog route contract v1 replaces the starter and reference-resource route set.",
|
|
"migration": "Install the TechLog route definition, route runtime, schema registry, and release manifest atomically in the same release.",
|
|
"compatibilityWindow": "The deployed release consumes only its same-release registry snapshot and runtime chunks; no mixed route contract is supported.",
|
|
"rollback": "Roll back the atomic release to the pre-migration feature base 05e3d50ba01f01c27f257d2e9040c2bc413ea053.",
|
|
"owner": "tech-log-frontend"
|
|
},
|
|
{
|
|
"changeId": "FE-REG-ROUTE:EXAMPLES_STATES:*:removed",
|
|
"versionBump": "TechLog route contract v1 replaces the starter and reference-resource route set.",
|
|
"migration": "Install the TechLog route definition, route runtime, schema registry, and release manifest atomically in the same release.",
|
|
"compatibilityWindow": "The deployed release consumes only its same-release registry snapshot and runtime chunks; no mixed route contract is supported.",
|
|
"rollback": "Roll back the atomic release to the pre-migration feature base 05e3d50ba01f01c27f257d2e9040c2bc413ea053.",
|
|
"owner": "tech-log-frontend"
|
|
},
|
|
{
|
|
"changeId": "FE-REG-ROUTE:EXAMPLES_UI:*:removed",
|
|
"versionBump": "TechLog route contract v1 replaces the starter and reference-resource route set.",
|
|
"migration": "Install the TechLog route definition, route runtime, schema registry, and release manifest atomically in the same release.",
|
|
"compatibilityWindow": "The deployed release consumes only its same-release registry snapshot and runtime chunks; no mixed route contract is supported.",
|
|
"rollback": "Roll back the atomic release to the pre-migration feature base 05e3d50ba01f01c27f257d2e9040c2bc413ea053.",
|
|
"owner": "tech-log-frontend"
|
|
},
|
|
{
|
|
"changeId": "FE-REG-ROUTE:REFERENCE_RESOURCE_DETAIL:*:removed",
|
|
"versionBump": "TechLog route contract v1 replaces the starter and reference-resource route set.",
|
|
"migration": "Install the TechLog route definition, route runtime, schema registry, and release manifest atomically in the same release.",
|
|
"compatibilityWindow": "The deployed release consumes only its same-release registry snapshot and runtime chunks; no mixed route contract is supported.",
|
|
"rollback": "Roll back the atomic release to the pre-migration feature base 05e3d50ba01f01c27f257d2e9040c2bc413ea053.",
|
|
"owner": "tech-log-frontend"
|
|
},
|
|
{
|
|
"changeId": "FE-REG-ROUTE:REFERENCE_RESOURCE_FORM:*:removed",
|
|
"versionBump": "TechLog route contract v1 replaces the starter and reference-resource route set.",
|
|
"migration": "Install the TechLog route definition, route runtime, schema registry, and release manifest atomically in the same release.",
|
|
"compatibilityWindow": "The deployed release consumes only its same-release registry snapshot and runtime chunks; no mixed route contract is supported.",
|
|
"rollback": "Roll back the atomic release to the pre-migration feature base 05e3d50ba01f01c27f257d2e9040c2bc413ea053.",
|
|
"owner": "tech-log-frontend"
|
|
},
|
|
{
|
|
"changeId": "FE-REG-ROUTE:REFERENCE_RESOURCE_LIST:*:removed",
|
|
"versionBump": "TechLog route contract v1 replaces the starter and reference-resource route set.",
|
|
"migration": "Install the TechLog route definition, route runtime, schema registry, and release manifest atomically in the same release.",
|
|
"compatibilityWindow": "The deployed release consumes only its same-release registry snapshot and runtime chunks; no mixed route contract is supported.",
|
|
"rollback": "Roll back the atomic release to the pre-migration feature base 05e3d50ba01f01c27f257d2e9040c2bc413ea053.",
|
|
"owner": "tech-log-frontend"
|
|
},
|
|
{
|
|
"changeId": "FE-REG-ROUTE:REFERENCE_RESOURCE_STATUS:*:removed",
|
|
"versionBump": "TechLog route contract v1 replaces the starter and reference-resource route set.",
|
|
"migration": "Install the TechLog route definition, route runtime, schema registry, and release manifest atomically in the same release.",
|
|
"compatibilityWindow": "The deployed release consumes only its same-release registry snapshot and runtime chunks; no mixed route contract is supported.",
|
|
"rollback": "Roll back the atomic release to the pre-migration feature base 05e3d50ba01f01c27f257d2e9040c2bc413ea053.",
|
|
"owner": "tech-log-frontend"
|
|
},
|
|
{
|
|
"changeId": "FE-REG-ROUTE-RUNTIME:APP_HOME:*:removed",
|
|
"versionBump": "TechLog route contract v1 replaces the starter and reference-resource route set.",
|
|
"migration": "Install the TechLog route definition, route runtime, schema registry, and release manifest atomically in the same release.",
|
|
"compatibilityWindow": "The deployed release consumes only its same-release registry snapshot and runtime chunks; no mixed route contract is supported.",
|
|
"rollback": "Roll back the atomic release to the pre-migration feature base 05e3d50ba01f01c27f257d2e9040c2bc413ea053.",
|
|
"owner": "tech-log-frontend"
|
|
},
|
|
{
|
|
"changeId": "FE-REG-ROUTE-RUNTIME:EXAMPLES_AUTH:*:removed",
|
|
"versionBump": "TechLog route contract v1 replaces the starter and reference-resource route set.",
|
|
"migration": "Install the TechLog route definition, route runtime, schema registry, and release manifest atomically in the same release.",
|
|
"compatibilityWindow": "The deployed release consumes only its same-release registry snapshot and runtime chunks; no mixed route contract is supported.",
|
|
"rollback": "Roll back the atomic release to the pre-migration feature base 05e3d50ba01f01c27f257d2e9040c2bc413ea053.",
|
|
"owner": "tech-log-frontend"
|
|
},
|
|
{
|
|
"changeId": "FE-REG-ROUTE-RUNTIME:EXAMPLES_PLATFORM:*:removed",
|
|
"versionBump": "TechLog route contract v1 replaces the starter and reference-resource route set.",
|
|
"migration": "Install the TechLog route definition, route runtime, schema registry, and release manifest atomically in the same release.",
|
|
"compatibilityWindow": "The deployed release consumes only its same-release registry snapshot and runtime chunks; no mixed route contract is supported.",
|
|
"rollback": "Roll back the atomic release to the pre-migration feature base 05e3d50ba01f01c27f257d2e9040c2bc413ea053.",
|
|
"owner": "tech-log-frontend"
|
|
},
|
|
{
|
|
"changeId": "FE-REG-ROUTE-RUNTIME:EXAMPLES_STATES:*:removed",
|
|
"versionBump": "TechLog route contract v1 replaces the starter and reference-resource route set.",
|
|
"migration": "Install the TechLog route definition, route runtime, schema registry, and release manifest atomically in the same release.",
|
|
"compatibilityWindow": "The deployed release consumes only its same-release registry snapshot and runtime chunks; no mixed route contract is supported.",
|
|
"rollback": "Roll back the atomic release to the pre-migration feature base 05e3d50ba01f01c27f257d2e9040c2bc413ea053.",
|
|
"owner": "tech-log-frontend"
|
|
},
|
|
{
|
|
"changeId": "FE-REG-ROUTE-RUNTIME:EXAMPLES_UI:*:removed",
|
|
"versionBump": "TechLog route contract v1 replaces the starter and reference-resource route set.",
|
|
"migration": "Install the TechLog route definition, route runtime, schema registry, and release manifest atomically in the same release.",
|
|
"compatibilityWindow": "The deployed release consumes only its same-release registry snapshot and runtime chunks; no mixed route contract is supported.",
|
|
"rollback": "Roll back the atomic release to the pre-migration feature base 05e3d50ba01f01c27f257d2e9040c2bc413ea053.",
|
|
"owner": "tech-log-frontend"
|
|
},
|
|
{
|
|
"changeId": "FE-REG-ROUTE-RUNTIME:NOT_FOUND:moduleId:field-changed",
|
|
"versionBump": "TechLog route contract v1 replaces the starter and reference-resource route set.",
|
|
"migration": "Install the TechLog route definition, route runtime, schema registry, and release manifest atomically in the same release.",
|
|
"compatibilityWindow": "The deployed release consumes only its same-release registry snapshot and runtime chunks; no mixed route contract is supported.",
|
|
"rollback": "Roll back the atomic release to the pre-migration feature base 05e3d50ba01f01c27f257d2e9040c2bc413ea053.",
|
|
"owner": "tech-log-frontend"
|
|
},
|
|
{
|
|
"changeId": "FE-REG-ROUTE-RUNTIME:REFERENCE_RESOURCE_DETAIL:*:removed",
|
|
"versionBump": "TechLog route contract v1 replaces the starter and reference-resource route set.",
|
|
"migration": "Install the TechLog route definition, route runtime, schema registry, and release manifest atomically in the same release.",
|
|
"compatibilityWindow": "The deployed release consumes only its same-release registry snapshot and runtime chunks; no mixed route contract is supported.",
|
|
"rollback": "Roll back the atomic release to the pre-migration feature base 05e3d50ba01f01c27f257d2e9040c2bc413ea053.",
|
|
"owner": "tech-log-frontend"
|
|
},
|
|
{
|
|
"changeId": "FE-REG-ROUTE-RUNTIME:REFERENCE_RESOURCE_FORM:*:removed",
|
|
"versionBump": "TechLog route contract v1 replaces the starter and reference-resource route set.",
|
|
"migration": "Install the TechLog route definition, route runtime, schema registry, and release manifest atomically in the same release.",
|
|
"compatibilityWindow": "The deployed release consumes only its same-release registry snapshot and runtime chunks; no mixed route contract is supported.",
|
|
"rollback": "Roll back the atomic release to the pre-migration feature base 05e3d50ba01f01c27f257d2e9040c2bc413ea053.",
|
|
"owner": "tech-log-frontend"
|
|
},
|
|
{
|
|
"changeId": "FE-REG-ROUTE-RUNTIME:REFERENCE_RESOURCE_LIST:*:removed",
|
|
"versionBump": "TechLog route contract v1 replaces the starter and reference-resource route set.",
|
|
"migration": "Install the TechLog route definition, route runtime, schema registry, and release manifest atomically in the same release.",
|
|
"compatibilityWindow": "The deployed release consumes only its same-release registry snapshot and runtime chunks; no mixed route contract is supported.",
|
|
"rollback": "Roll back the atomic release to the pre-migration feature base 05e3d50ba01f01c27f257d2e9040c2bc413ea053.",
|
|
"owner": "tech-log-frontend"
|
|
},
|
|
{
|
|
"changeId": "FE-REG-ROUTE-RUNTIME:REFERENCE_RESOURCE_STATUS:*:removed",
|
|
"versionBump": "TechLog route contract v1 replaces the starter and reference-resource route set.",
|
|
"migration": "Install the TechLog route definition, route runtime, schema registry, and release manifest atomically in the same release.",
|
|
"compatibilityWindow": "The deployed release consumes only its same-release registry snapshot and runtime chunks; no mixed route contract is supported.",
|
|
"rollback": "Roll back the atomic release to the pre-migration feature base 05e3d50ba01f01c27f257d2e9040c2bc413ea053.",
|
|
"owner": "tech-log-frontend"
|
|
},
|
|
{
|
|
"changeId": "FE-REG-ENV:API_CONTRACT_VERSION:*:removed",
|
|
"versionBump": "Runtime Config V2 (CONFIG_SCHEMA_VERSION 2.0) removes the scalar API contract version.",
|
|
"migration": "Release Manifest V2 contractSet replaces the scalar: the compiled external contract package set is canonicalized and digested, and boot compares it against the manifest.",
|
|
"compatibilityWindow": "The V1 config and V1 manifest readers stay in place for one release. A V1 document may still carry the scalar; a V2 document is rejected if it does.",
|
|
"rollback": "Restore the V1 writer in scripts/generate-build-manifest.ts and the scalar key in public/config.json; the V1 reader is still present.",
|
|
"owner": "frontend-platform"
|
|
},
|
|
{
|
|
"changeId": "FE-REG-QUERY:*:*:removed",
|
|
"versionBump": "Query invalidation composition moves from the legacy flat query registry to the bounded many-to-many invalidation graph.",
|
|
"migration": "Installed feature contracts now contribute topics, namespace identities, edges, and separate wire versions; bootstrap validates and indexes those contributions before constructing coordinators.",
|
|
"compatibilityWindow": "Cross-context envelopes remain opaque topic/version pairs and release cache epochs isolate mixed releases; no query keys or cached values cross contexts.",
|
|
"rollback": "Restore the flat QUERY_REGISTRY composition and its coordinator adapter together with the prior governance entry.",
|
|
"owner": "frontend-platform"
|
|
},
|
|
{
|
|
"changeId": "FE-REG-QUERY:$contract:allowedValues:contract-field-changed",
|
|
"versionBump": "Cross-context invalidation wire protocol starts at version 1.",
|
|
"migration": "Every installed query row declares invalidate-only; older tabs remain local-only.",
|
|
"compatibilityWindow": "Mixed releases are isolated by release cacheEpoch and never exchange query keys or values.",
|
|
"rollback": "Remove the coordinator composition and the two query registry fields.",
|
|
"owner": "frontend-platform"
|
|
},
|
|
{
|
|
"changeId": "FE-REG-QUERY:$contract:breakingFields:contract-field-changed",
|
|
"versionBump": "Cross-context invalidation wire protocol starts at version 1.",
|
|
"migration": "Every installed query row declares its opaque topic and transport policy.",
|
|
"compatibilityWindow": "A release cacheEpoch rejects messages from a different deployed contract.",
|
|
"rollback": "Remove the coordinator composition and restore the prior query registry contract.",
|
|
"owner": "frontend-platform"
|
|
},
|
|
{
|
|
"changeId": "FE-REG-QUERY:$contract:fieldTypes:contract-field-changed",
|
|
"versionBump": "Cross-context invalidation wire protocol starts at version 1.",
|
|
"migration": "The installed reference query row and all consumers were updated atomically.",
|
|
"compatibilityWindow": "Old clients do not consume the new fields; new clients validate them before boot.",
|
|
"rollback": "Restore the previous query registry field types and local-only invalidation.",
|
|
"owner": "frontend-platform"
|
|
},
|
|
{
|
|
"changeId": "FE-REG-QUERY:$contract:requiredFields:contract-field-changed",
|
|
"versionBump": "Cross-context invalidation wire protocol starts at version 1.",
|
|
"migration": "Missing topics now fail registry validation instead of silently degrading at runtime.",
|
|
"compatibilityWindow": "Only a fully built release consumes its own installed registry snapshot.",
|
|
"rollback": "Remove the newly required fields and cross-context composition together.",
|
|
"owner": "frontend-platform"
|
|
},
|
|
{
|
|
"changeId": "FE-REG-QUERY:$contract:uniqueFields:contract-field-changed",
|
|
"versionBump": "Cross-context invalidation wire protocol starts at version 1.",
|
|
"migration": "Existing query namespaces received unique registry-issued opaque topics.",
|
|
"compatibilityWindow": "Topics are scoped by release cacheEpoch, so mixed releases cannot collide.",
|
|
"rollback": "Drop invalidationTopic uniqueness after removing the transport consumer.",
|
|
"owner": "frontend-platform"
|
|
},
|
|
{
|
|
"changeId": "FE-REG-RELEASE:apiContractVersion:compatibilityRole:field-changed",
|
|
"versionBump": "The release token registry adds contractSetDigest and demotes apiContractVersion to a legacy V1 scalar.",
|
|
"migration": "compareReleaseToRuntime no longer sources the scalar from Runtime Config; when neither side declares it there is nothing to compare and contractSet verification owns contract coherence.",
|
|
"compatibilityWindow": "A V1 manifest still supplies apiContractVersion and is still compared against a V1 config that declares one.",
|
|
"rollback": "Restore the previous compatibilityRole text and remove the contractSetDigest token together with the V2 manifest writer.",
|
|
"owner": "frontend-platform"
|
|
},
|
|
{
|
|
"changeId": "FE-REG-STORAGE:$contract:allowedValues:contract-field-changed",
|
|
"versionBump": "Web Storage value codec contracts start at version 1.",
|
|
"migration": "Existing keys retain their physical schema version; values outside the selected codec are discarded.",
|
|
"compatibilityWindow": "Valid existing color-scheme and opaque-string records remain readable.",
|
|
"rollback": "Restore the previous registry contract; no physical key deletion is required.",
|
|
"owner": "frontend-platform"
|
|
},
|
|
{
|
|
"changeId": "FE-REG-STORAGE:$contract:breakingFields:contract-field-changed",
|
|
"versionBump": "Web Storage value codec contracts start at version 1.",
|
|
"migration": "Each existing row received an explicit codec; executable migration was never consumed and is now forbidden.",
|
|
"compatibilityWindow": "Schema-versioned physical keys and the envelope shape remain unchanged.",
|
|
"rollback": "Remove valueCodec enforcement and restore the prior metadata declaration.",
|
|
"owner": "frontend-platform"
|
|
},
|
|
{
|
|
"changeId": "FE-REG-STORAGE:$contract:fieldTypes:contract-field-changed",
|
|
"versionBump": "Web Storage value codec contracts start at version 1.",
|
|
"migration": "The dead function migration union was narrowed to the only implemented discard policy.",
|
|
"compatibilityWindow": "All installed definitions already used discard before this contract change.",
|
|
"rollback": "Restore the former type metadata without rewriting persisted records.",
|
|
"owner": "frontend-platform"
|
|
},
|
|
{
|
|
"changeId": "FE-REG-STORAGE:$contract:requiredFields:contract-field-changed",
|
|
"versionBump": "Web Storage value codec contracts start at version 1.",
|
|
"migration": "All installed storage rows now declare their closed value codec.",
|
|
"compatibilityWindow": "Existing valid envelopes continue to decode; invalid values fail closed.",
|
|
"rollback": "Remove the required codec field and runtime codec dispatch together.",
|
|
"owner": "frontend-platform"
|
|
},
|
|
{
|
|
"changeId": "FE-REG-ROUTE:TECH_LOG_STUDIO_HOME:access:field-changed",
|
|
"versionBump": "Studio routes move from access \"public\" to \"session-required\". Every route was registered public, so the router's auth gate was a no-op and a production build served the Studio shell to signed-out visitors.",
|
|
"migration": "None for callers. The route ids, paths, params, and search schemas are unchanged; only the access classification moves, and the SPA resolves it from the route's own layoutGroup rather than a per-route literal.",
|
|
"compatibilityWindow": "The deployed release consumes only its same-release registry snapshot; a signed-out visitor is redirected to the public shell instead of rendering Studio chrome.",
|
|
"rollback": "Roll back the atomic release to 93ce86e; the route contract derives access from layoutGroup in one expression, so the previous value returns with the release.",
|
|
"owner": "tech-log-frontend"
|
|
},
|
|
{
|
|
"changeId": "FE-REG-ROUTE:TECH_LOG_STUDIO_DOCUMENTS:access:field-changed",
|
|
"versionBump": "Studio routes move from access \"public\" to \"session-required\". Every route was registered public, so the router's auth gate was a no-op and a production build served the Studio shell to signed-out visitors.",
|
|
"migration": "None for callers. The route ids, paths, params, and search schemas are unchanged; only the access classification moves, and the SPA resolves it from the route's own layoutGroup rather than a per-route literal.",
|
|
"compatibilityWindow": "The deployed release consumes only its same-release registry snapshot; a signed-out visitor is redirected to the public shell instead of rendering Studio chrome.",
|
|
"rollback": "Roll back the atomic release to 93ce86e; the route contract derives access from layoutGroup in one expression, so the previous value returns with the release.",
|
|
"owner": "tech-log-frontend"
|
|
},
|
|
{
|
|
"changeId": "FE-REG-ROUTE:TECH_LOG_STUDIO_DOCUMENT_NEW:access:field-changed",
|
|
"versionBump": "Studio routes move from access \"public\" to \"session-required\". Every route was registered public, so the router's auth gate was a no-op and a production build served the Studio shell to signed-out visitors.",
|
|
"migration": "None for callers. The route ids, paths, params, and search schemas are unchanged; only the access classification moves, and the SPA resolves it from the route's own layoutGroup rather than a per-route literal.",
|
|
"compatibilityWindow": "The deployed release consumes only its same-release registry snapshot; a signed-out visitor is redirected to the public shell instead of rendering Studio chrome.",
|
|
"rollback": "Roll back the atomic release to 93ce86e; the route contract derives access from layoutGroup in one expression, so the previous value returns with the release.",
|
|
"owner": "tech-log-frontend"
|
|
},
|
|
{
|
|
"changeId": "FE-REG-ROUTE:TECH_LOG_STUDIO_DOCUMENT_EDIT:access:field-changed",
|
|
"versionBump": "Studio routes move from access \"public\" to \"session-required\". Every route was registered public, so the router's auth gate was a no-op and a production build served the Studio shell to signed-out visitors.",
|
|
"migration": "None for callers. The route ids, paths, params, and search schemas are unchanged; only the access classification moves, and the SPA resolves it from the route's own layoutGroup rather than a per-route literal.",
|
|
"compatibilityWindow": "The deployed release consumes only its same-release registry snapshot; a signed-out visitor is redirected to the public shell instead of rendering Studio chrome.",
|
|
"rollback": "Roll back the atomic release to 93ce86e; the route contract derives access from layoutGroup in one expression, so the previous value returns with the release.",
|
|
"owner": "tech-log-frontend"
|
|
},
|
|
{
|
|
"changeId": "FE-REG-ROUTE:TECH_LOG_STUDIO_DOCUMENT_VALIDATION:access:field-changed",
|
|
"versionBump": "Studio routes move from access \"public\" to \"session-required\". Every route was registered public, so the router's auth gate was a no-op and a production build served the Studio shell to signed-out visitors.",
|
|
"migration": "None for callers. The route ids, paths, params, and search schemas are unchanged; only the access classification moves, and the SPA resolves it from the route's own layoutGroup rather than a per-route literal.",
|
|
"compatibilityWindow": "The deployed release consumes only its same-release registry snapshot; a signed-out visitor is redirected to the public shell instead of rendering Studio chrome.",
|
|
"rollback": "Roll back the atomic release to 93ce86e; the route contract derives access from layoutGroup in one expression, so the previous value returns with the release.",
|
|
"owner": "tech-log-frontend"
|
|
},
|
|
{
|
|
"changeId": "FE-REG-ROUTE:TECH_LOG_STUDIO_DOCUMENT_PREVIEW:access:field-changed",
|
|
"versionBump": "Studio routes move from access \"public\" to \"session-required\". Every route was registered public, so the router's auth gate was a no-op and a production build served the Studio shell to signed-out visitors.",
|
|
"migration": "None for callers. The route ids, paths, params, and search schemas are unchanged; only the access classification moves, and the SPA resolves it from the route's own layoutGroup rather than a per-route literal.",
|
|
"compatibilityWindow": "The deployed release consumes only its same-release registry snapshot; a signed-out visitor is redirected to the public shell instead of rendering Studio chrome.",
|
|
"rollback": "Roll back the atomic release to 93ce86e; the route contract derives access from layoutGroup in one expression, so the previous value returns with the release.",
|
|
"owner": "tech-log-frontend"
|
|
},
|
|
{
|
|
"changeId": "FE-REG-ROUTE:TECH_LOG_STUDIO_DOCUMENT_PUBLISH:access:field-changed",
|
|
"versionBump": "Studio routes move from access \"public\" to \"session-required\". Every route was registered public, so the router's auth gate was a no-op and a production build served the Studio shell to signed-out visitors.",
|
|
"migration": "None for callers. The route ids, paths, params, and search schemas are unchanged; only the access classification moves, and the SPA resolves it from the route's own layoutGroup rather than a per-route literal.",
|
|
"compatibilityWindow": "The deployed release consumes only its same-release registry snapshot; a signed-out visitor is redirected to the public shell instead of rendering Studio chrome.",
|
|
"rollback": "Roll back the atomic release to 93ce86e; the route contract derives access from layoutGroup in one expression, so the previous value returns with the release.",
|
|
"owner": "tech-log-frontend"
|
|
},
|
|
{
|
|
"changeId": "FE-REG-ROUTE:TECH_LOG_STUDIO_PUBLICATIONS:access:field-changed",
|
|
"versionBump": "Studio routes move from access \"public\" to \"session-required\". Every route was registered public, so the router's auth gate was a no-op and a production build served the Studio shell to signed-out visitors.",
|
|
"migration": "None for callers. The route ids, paths, params, and search schemas are unchanged; only the access classification moves, and the SPA resolves it from the route's own layoutGroup rather than a per-route literal.",
|
|
"compatibilityWindow": "The deployed release consumes only its same-release registry snapshot; a signed-out visitor is redirected to the public shell instead of rendering Studio chrome.",
|
|
"rollback": "Roll back the atomic release to 93ce86e; the route contract derives access from layoutGroup in one expression, so the previous value returns with the release.",
|
|
"owner": "tech-log-frontend"
|
|
},
|
|
{
|
|
"changeId": "FE-REG-ROUTE:TECH_LOG_STUDIO_PUBLICATION_PREVIEW:access:field-changed",
|
|
"versionBump": "Studio routes move from access \"public\" to \"session-required\". Every route was registered public, so the router's auth gate was a no-op and a production build served the Studio shell to signed-out visitors.",
|
|
"migration": "None for callers. The route ids, paths, params, and search schemas are unchanged; only the access classification moves, and the SPA resolves it from the route's own layoutGroup rather than a per-route literal.",
|
|
"compatibilityWindow": "The deployed release consumes only its same-release registry snapshot; a signed-out visitor is redirected to the public shell instead of rendering Studio chrome.",
|
|
"rollback": "Roll back the atomic release to 93ce86e; the route contract derives access from layoutGroup in one expression, so the previous value returns with the release.",
|
|
"owner": "tech-log-frontend"
|
|
},
|
|
{
|
|
"changeId": "FE-REG-ROUTE:TECH_LOG_STUDIO_NOT_FOUND:access:field-changed",
|
|
"versionBump": "Studio routes move from access \"public\" to \"session-required\". Every route was registered public, so the router's auth gate was a no-op and a production build served the Studio shell to signed-out visitors.",
|
|
"migration": "None for callers. The route ids, paths, params, and search schemas are unchanged; only the access classification moves, and the SPA resolves it from the route's own layoutGroup rather than a per-route literal.",
|
|
"compatibilityWindow": "The deployed release consumes only its same-release registry snapshot; a signed-out visitor is redirected to the public shell instead of rendering Studio chrome.",
|
|
"rollback": "Roll back the atomic release to 93ce86e; the route contract derives access from layoutGroup in one expression, so the previous value returns with the release.",
|
|
"owner": "tech-log-frontend"
|
|
}
|
|
]
|
|
}
|