feat: 기능 추가 과정중
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"snapshotDigest": "e8448e46bc65326e9b2eb23cdce0870242faedb7a354942389c4a95b0e392d90",
|
||||
"snapshotDigest": "67f1ad2bf35d04470a7fba1a5ae8f98608b5d70b70887e383692b1e2d6127752",
|
||||
"owner": "frontend-platform",
|
||||
"reason": "RP-10 initial approved executable registry baseline",
|
||||
"approvedAt": "2026-07-26T07:53:45.969Z"
|
||||
"reason": "Typed Web Storage codecs and query invalidation topic protocol",
|
||||
"approvedAt": "2026-07-27T16:41:15.888Z"
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
{
|
||||
"registryId": "FE-REG-ROUTE",
|
||||
"owner": "feature-frontend-routing-release-recovery-runtime",
|
||||
"source": "src/features/installed-feature-contracts.js",
|
||||
"source": "src/features/installed-feature-contracts.ts",
|
||||
"rowCount": 9,
|
||||
"contract": {
|
||||
"requiredFields": [
|
||||
@@ -218,7 +218,7 @@
|
||||
{
|
||||
"registryId": "FE-REG-ROUTE-RUNTIME",
|
||||
"owner": "feature-frontend-routing-release-recovery-runtime",
|
||||
"source": "src/features/installed-feature-contracts.js",
|
||||
"source": "src/features/installed-feature-contracts.ts",
|
||||
"rowCount": 9,
|
||||
"contract": {
|
||||
"requiredFields": [
|
||||
@@ -323,7 +323,7 @@
|
||||
{
|
||||
"registryId": "FE-REG-API",
|
||||
"owner": "feature-frontend-api-client-response-envelope-contract",
|
||||
"source": "src/features/installed-feature-contracts.js",
|
||||
"source": "src/features/installed-feature-contracts.ts",
|
||||
"rowCount": 3,
|
||||
"contract": {
|
||||
"requiredFields": [
|
||||
@@ -451,7 +451,7 @@
|
||||
{
|
||||
"registryId": "FE-REG-SCHEMA",
|
||||
"owner": "feature-frontend-contract-schema-registry",
|
||||
"source": "src/features/installed-feature-contracts.js",
|
||||
"source": "src/features/installed-feature-contracts.ts",
|
||||
"rowCount": 8,
|
||||
"contract": {
|
||||
"requiredFields": [
|
||||
@@ -543,7 +543,7 @@
|
||||
{
|
||||
"registryId": "FE-REG-ENV",
|
||||
"owner": "feature-frontend-env-runtime-config-contract",
|
||||
"source": "src/contracts/env.js",
|
||||
"source": "src/contracts/env.ts",
|
||||
"rowCount": 14,
|
||||
"contract": {
|
||||
"requiredFields": [
|
||||
@@ -669,7 +669,7 @@
|
||||
{
|
||||
"registryId": "FE-REG-STORAGE",
|
||||
"owner": "feature-frontend-storage-registry-contract",
|
||||
"source": "src/contracts/storage-keys.js",
|
||||
"source": "src/contracts/storage-keys.ts",
|
||||
"rowCount": 4,
|
||||
"contract": {
|
||||
"requiredFields": [
|
||||
@@ -678,6 +678,7 @@
|
||||
"backend",
|
||||
"classification",
|
||||
"schemaVersion",
|
||||
"valueCodec",
|
||||
"ttl",
|
||||
"migration",
|
||||
"quotaFallback"
|
||||
@@ -688,8 +689,9 @@
|
||||
"backend": "string",
|
||||
"classification": "string",
|
||||
"schemaVersion": "integer",
|
||||
"valueCodec": "string",
|
||||
"ttl": "integer|string|null",
|
||||
"migration": "string|function",
|
||||
"migration": "string",
|
||||
"quotaFallback": "string"
|
||||
},
|
||||
"uniqueFields": [
|
||||
@@ -701,7 +703,6 @@
|
||||
"memory",
|
||||
"sessionStorage",
|
||||
"localStorage",
|
||||
"indexedDB",
|
||||
"disabled",
|
||||
"forbidden"
|
||||
],
|
||||
@@ -710,6 +711,14 @@
|
||||
"opaque-cache",
|
||||
"sensitive-forbidden"
|
||||
],
|
||||
"valueCodec": [
|
||||
"color-scheme-v1",
|
||||
"opaque-string-v1",
|
||||
"none"
|
||||
],
|
||||
"migration": [
|
||||
"discard"
|
||||
],
|
||||
"quotaFallback": [
|
||||
"memory",
|
||||
"no-persist",
|
||||
@@ -724,6 +733,7 @@
|
||||
"backend",
|
||||
"classification",
|
||||
"schemaVersion",
|
||||
"valueCodec",
|
||||
"migration"
|
||||
]
|
||||
},
|
||||
@@ -738,7 +748,8 @@
|
||||
"quotaFallback": "feature-disable",
|
||||
"schemaVersion": 1,
|
||||
"scope": "auth",
|
||||
"ttl": null
|
||||
"ttl": null,
|
||||
"valueCodec": "none"
|
||||
},
|
||||
"CHUNK_RELOAD_GUARD": {
|
||||
"backend": "sessionStorage",
|
||||
@@ -750,7 +761,8 @@
|
||||
"quotaFallback": "no-persist",
|
||||
"schemaVersion": 1,
|
||||
"scope": "release",
|
||||
"ttl": "session"
|
||||
"ttl": "session",
|
||||
"valueCodec": "opaque-string-v1"
|
||||
},
|
||||
"COLOR_SCHEME": {
|
||||
"backend": "localStorage",
|
||||
@@ -762,7 +774,8 @@
|
||||
"quotaFallback": "memory",
|
||||
"schemaVersion": 1,
|
||||
"scope": "preference",
|
||||
"ttl": null
|
||||
"ttl": null,
|
||||
"valueCodec": "color-scheme-v1"
|
||||
},
|
||||
"QUERY_PERSISTENCE": {
|
||||
"backend": "disabled",
|
||||
@@ -774,14 +787,15 @@
|
||||
"quotaFallback": "feature-disable",
|
||||
"schemaVersion": 1,
|
||||
"scope": "cache",
|
||||
"ttl": null
|
||||
"ttl": null,
|
||||
"valueCodec": "none"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"registryId": "FE-REG-ERROR",
|
||||
"owner": "feature-frontend-error-classification-boundary-contract",
|
||||
"source": "src/contracts/errors.js",
|
||||
"source": "src/contracts/errors.ts",
|
||||
"rowCount": 31,
|
||||
"contract": {
|
||||
"requiredFields": [
|
||||
@@ -1393,7 +1407,7 @@
|
||||
{
|
||||
"registryId": "FE-REG-QUERY",
|
||||
"owner": "feature-frontend-server-state-caching-contract",
|
||||
"source": "src/features/installed-feature-contracts.js",
|
||||
"source": "src/features/installed-feature-contracts.ts",
|
||||
"rowCount": 1,
|
||||
"contract": {
|
||||
"requiredFields": [
|
||||
@@ -1401,6 +1415,8 @@
|
||||
"serialization",
|
||||
"identity",
|
||||
"invalidation",
|
||||
"invalidationTopic",
|
||||
"crossContext",
|
||||
"version",
|
||||
"persistence"
|
||||
],
|
||||
@@ -1409,13 +1425,19 @@
|
||||
"serialization": "string",
|
||||
"identity": "string",
|
||||
"invalidation": "string",
|
||||
"invalidationTopic": "string",
|
||||
"crossContext": "string",
|
||||
"version": "integer",
|
||||
"persistence": "string"
|
||||
},
|
||||
"uniqueFields": [
|
||||
"namespace"
|
||||
"namespace",
|
||||
"invalidationTopic"
|
||||
],
|
||||
"allowedValues": {
|
||||
"crossContext": [
|
||||
"invalidate-only"
|
||||
],
|
||||
"persistence": [
|
||||
"disabled"
|
||||
]
|
||||
@@ -1426,14 +1448,18 @@
|
||||
"namespace",
|
||||
"serialization",
|
||||
"identity",
|
||||
"invalidationTopic",
|
||||
"crossContext",
|
||||
"version",
|
||||
"persistence"
|
||||
]
|
||||
},
|
||||
"rows": {
|
||||
"REFERENCE_RESOURCE": {
|
||||
"crossContext": "invalidate-only",
|
||||
"identity": "no-pii-token-or-raw-url",
|
||||
"invalidation": "reference resource namespace after successful mutation",
|
||||
"invalidationTopic": "qinv.01k10f7m3w9p6r2c8v5n4x",
|
||||
"namespace": [
|
||||
"reference-resource",
|
||||
1
|
||||
@@ -1447,7 +1473,7 @@
|
||||
{
|
||||
"registryId": "FE-REG-TELEMETRY",
|
||||
"owner": "feature-frontend-diagnostics-telemetry-runtime",
|
||||
"source": "src/contracts/telemetry.js",
|
||||
"source": "src/contracts/telemetry.ts",
|
||||
"rowCount": 5,
|
||||
"contract": {
|
||||
"requiredFields": [
|
||||
@@ -1629,7 +1655,7 @@
|
||||
{
|
||||
"registryId": "FE-REG-RELEASE",
|
||||
"owner": "feature-frontend-release-cache-rollback-contract",
|
||||
"source": "src/contracts/release-tokens.js",
|
||||
"source": "src/contracts/release-tokens.ts",
|
||||
"rowCount": 8,
|
||||
"contract": {
|
||||
"requiredFields": [
|
||||
|
||||
@@ -1,4 +1,77 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"changes": []
|
||||
"changes": [
|
||||
{
|
||||
"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-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"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
"registries": [
|
||||
{
|
||||
"registryId": "FE-REG-ROUTE",
|
||||
"path": "src/features/installed-feature-contracts.js",
|
||||
"path": "src/features/installed-feature-contracts.ts",
|
||||
"exportName": "ROUTE_REGISTRY",
|
||||
"owner": "feature-frontend-routing-release-recovery-runtime",
|
||||
"keyField": "routeId",
|
||||
@@ -92,7 +92,7 @@
|
||||
},
|
||||
{
|
||||
"registryId": "FE-REG-ROUTE-RUNTIME",
|
||||
"path": "src/features/installed-feature-contracts.js",
|
||||
"path": "src/features/installed-feature-contracts.ts",
|
||||
"exportName": "ROUTE_RUNTIME_CONTRACT",
|
||||
"owner": "feature-frontend-routing-release-recovery-runtime",
|
||||
"keyField": "routeId",
|
||||
@@ -141,7 +141,7 @@
|
||||
},
|
||||
{
|
||||
"registryId": "FE-REG-API",
|
||||
"path": "src/features/installed-feature-contracts.js",
|
||||
"path": "src/features/installed-feature-contracts.ts",
|
||||
"exportName": "API_OPERATIONS",
|
||||
"owner": "feature-frontend-api-client-response-envelope-contract",
|
||||
"keyField": "operationId",
|
||||
@@ -209,7 +209,7 @@
|
||||
},
|
||||
{
|
||||
"registryId": "FE-REG-SCHEMA",
|
||||
"path": "src/features/installed-feature-contracts.js",
|
||||
"path": "src/features/installed-feature-contracts.ts",
|
||||
"exportName": "SCHEMA_REGISTRY",
|
||||
"owner": "feature-frontend-contract-schema-registry",
|
||||
"keyField": "schemaId",
|
||||
@@ -241,7 +241,7 @@
|
||||
},
|
||||
{
|
||||
"registryId": "FE-REG-ENV",
|
||||
"path": "src/contracts/env.js",
|
||||
"path": "src/contracts/env.ts",
|
||||
"exportName": "ENV_REGISTRY",
|
||||
"owner": "feature-frontend-env-runtime-config-contract",
|
||||
"requiredFields": ["phase", "classification", "required", "defaultValue"],
|
||||
@@ -262,11 +262,11 @@
|
||||
},
|
||||
"consumers": [
|
||||
{
|
||||
"path": "src/bootstrap/runtime-config-schema.js",
|
||||
"path": "src/bootstrap/runtime-config-schema.ts",
|
||||
"token": "APP_ENV"
|
||||
},
|
||||
{
|
||||
"path": "src/contracts/env.js",
|
||||
"path": "src/contracts/env.ts",
|
||||
"token": "getBuildConfig"
|
||||
}
|
||||
],
|
||||
@@ -274,7 +274,7 @@
|
||||
},
|
||||
{
|
||||
"registryId": "FE-REG-STORAGE",
|
||||
"path": "src/contracts/storage-keys.js",
|
||||
"path": "src/contracts/storage-keys.ts",
|
||||
"exportName": "STORAGE_REGISTRY",
|
||||
"owner": "feature-frontend-storage-registry-contract",
|
||||
"keyField": "logicalName",
|
||||
@@ -284,6 +284,7 @@
|
||||
"backend",
|
||||
"classification",
|
||||
"schemaVersion",
|
||||
"valueCodec",
|
||||
"ttl",
|
||||
"migration",
|
||||
"quotaFallback"
|
||||
@@ -294,8 +295,9 @@
|
||||
"backend": "string",
|
||||
"classification": "string",
|
||||
"schemaVersion": "integer",
|
||||
"valueCodec": "string",
|
||||
"ttl": "integer|string|null",
|
||||
"migration": "string|function",
|
||||
"migration": "string",
|
||||
"quotaFallback": "string"
|
||||
},
|
||||
"uniqueFields": ["logicalName", "physicalKey"],
|
||||
@@ -304,7 +306,6 @@
|
||||
"memory",
|
||||
"sessionStorage",
|
||||
"localStorage",
|
||||
"indexedDB",
|
||||
"disabled",
|
||||
"forbidden"
|
||||
],
|
||||
@@ -313,6 +314,12 @@
|
||||
"opaque-cache",
|
||||
"sensitive-forbidden"
|
||||
],
|
||||
"valueCodec": [
|
||||
"color-scheme-v1",
|
||||
"opaque-string-v1",
|
||||
"none"
|
||||
],
|
||||
"migration": ["discard"],
|
||||
"quotaFallback": ["memory", "no-persist", "feature-disable"]
|
||||
},
|
||||
"consumerIdentityField": "logicalName",
|
||||
@@ -324,12 +331,13 @@
|
||||
"backend",
|
||||
"classification",
|
||||
"schemaVersion",
|
||||
"valueCodec",
|
||||
"migration"
|
||||
]
|
||||
},
|
||||
{
|
||||
"registryId": "FE-REG-ERROR",
|
||||
"path": "src/contracts/errors.js",
|
||||
"path": "src/contracts/errors.ts",
|
||||
"exportName": "ERROR_REGISTRY",
|
||||
"owner": "feature-frontend-error-classification-boundary-contract",
|
||||
"keyField": "kind",
|
||||
@@ -365,7 +373,7 @@
|
||||
},
|
||||
"consumers": [
|
||||
{
|
||||
"path": "src/adapters/http/client.js",
|
||||
"path": "src/adapters/http/client.ts",
|
||||
"token": "failure("
|
||||
}
|
||||
],
|
||||
@@ -373,7 +381,7 @@
|
||||
},
|
||||
{
|
||||
"registryId": "FE-REG-QUERY",
|
||||
"path": "src/features/installed-feature-contracts.js",
|
||||
"path": "src/features/installed-feature-contracts.ts",
|
||||
"exportName": "QUERY_REGISTRY",
|
||||
"owner": "feature-frontend-server-state-caching-contract",
|
||||
"requiredFields": [
|
||||
@@ -381,6 +389,8 @@
|
||||
"serialization",
|
||||
"identity",
|
||||
"invalidation",
|
||||
"invalidationTopic",
|
||||
"crossContext",
|
||||
"version",
|
||||
"persistence"
|
||||
],
|
||||
@@ -389,16 +399,19 @@
|
||||
"serialization": "string",
|
||||
"identity": "string",
|
||||
"invalidation": "string",
|
||||
"invalidationTopic": "string",
|
||||
"crossContext": "string",
|
||||
"version": "integer",
|
||||
"persistence": "string"
|
||||
},
|
||||
"uniqueFields": ["namespace"],
|
||||
"uniqueFields": ["namespace", "invalidationTopic"],
|
||||
"allowedValues": {
|
||||
"crossContext": ["invalidate-only"],
|
||||
"persistence": ["disabled"]
|
||||
},
|
||||
"consumers": [
|
||||
{
|
||||
"path": "src/features/reference-feature/contracts/reference-feature-contract.js",
|
||||
"path": "src/features/reference-feature/contracts/reference-feature-contract.ts",
|
||||
"token": "referenceQueryKeys"
|
||||
}
|
||||
],
|
||||
@@ -406,13 +419,15 @@
|
||||
"namespace",
|
||||
"serialization",
|
||||
"identity",
|
||||
"invalidationTopic",
|
||||
"crossContext",
|
||||
"version",
|
||||
"persistence"
|
||||
]
|
||||
},
|
||||
{
|
||||
"registryId": "FE-REG-TELEMETRY",
|
||||
"path": "src/contracts/telemetry.js",
|
||||
"path": "src/contracts/telemetry.ts",
|
||||
"exportName": "TELEMETRY_REGISTRY",
|
||||
"owner": "feature-frontend-diagnostics-telemetry-runtime",
|
||||
"keyField": "eventName",
|
||||
@@ -440,7 +455,7 @@
|
||||
},
|
||||
"consumers": [
|
||||
{
|
||||
"path": "scripts/check-diagnostics.mjs",
|
||||
"path": "scripts/check-diagnostics.ts",
|
||||
"token": "TELEMETRY_REGISTRY"
|
||||
}
|
||||
],
|
||||
@@ -453,7 +468,7 @@
|
||||
},
|
||||
{
|
||||
"registryId": "FE-REG-RELEASE",
|
||||
"path": "src/contracts/release-tokens.js",
|
||||
"path": "src/contracts/release-tokens.ts",
|
||||
"exportName": "RELEASE_TOKEN_REGISTRY",
|
||||
"owner": "feature-frontend-release-cache-rollback-contract",
|
||||
"keyField": "token",
|
||||
@@ -466,7 +481,7 @@
|
||||
"uniqueFields": ["token"],
|
||||
"consumers": [
|
||||
{
|
||||
"path": "src/bootstrap/load-release-manifest.js",
|
||||
"path": "src/bootstrap/load-release-manifest.ts",
|
||||
"token": "assetManifestHash"
|
||||
}
|
||||
],
|
||||
|
||||
Reference in New Issue
Block a user