frontend-project-context 1.6.0 → 1.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/README.md +92 -46
  3. package/UPGRADING.md +22 -1
  4. package/docs/05-ACCEPTANCE-CONTRACT.md +20 -1
  5. package/docs/08-INSTALLATION-AND-DISTRIBUTION.md +44 -21
  6. package/docs/14-FORMAL-RELEASE-READINESS.md +9 -5
  7. package/docs/19-POST-1.3.1-AI-TAKEOVER-EVIDENCE-AND-UPGRADE-PLAN.md +5 -5
  8. package/docs/20-PHASE-A-AI-TAKEOVER-AND-HEALTH-CLOSURE-DESIGN.md +11 -11
  9. package/docs/22-PHASE-C-TARGET-UPGRADE-PROTOCOL-DESIGN.md +4 -4
  10. package/docs/23-ADAPTIVE-BOUNDED-TASK-CONTEXT-DESIGN.md +432 -0
  11. package/docs/24-A130-REAL-HOST-TARGET-PROJECT-COMPARISON.md +210 -0
  12. package/docs/25-REAL-PROJECT-SOURCE-OF-TRUTH-MAINTENANCE-DESIGN.md +409 -0
  13. package/docs/26-A130-QUALITY-CLOSURE-AND-ADAPTIVE-DELIVERY-REPAIR-DESIGN.md +609 -0
  14. package/docs/README.md +22 -6
  15. package/docs/USER-AND-AI-OPERATION-MANUAL.md +73 -30
  16. package/examples/README.md +4 -4
  17. package/examples/package.json +1 -1
  18. package/migration-manifest.json +30 -8
  19. package/package.json +2 -2
  20. package/schemas/adaptive-context-bundle.schema.json +70 -0
  21. package/schemas/capabilities.schema.json +20 -6
  22. package/schemas/context-query.schema.json +69 -0
  23. package/schemas/coverage-audit.schema.json +32 -0
  24. package/schemas/evidence-bundle.schema.json +2 -2
  25. package/schemas/host-promotion-evidence.schema.json +33 -0
  26. package/schemas/migration-manifest.schema.json +3 -3
  27. package/schemas/migration-plan.schema.json +2 -2
  28. package/schemas/projection-lock.schema.json +1 -1
  29. package/schemas/routing-index.schema.json +58 -0
  30. package/schemas/truth-reconciliation-input.schema.json +60 -0
  31. package/schemas/truth-reconciliation-review-bundle.schema.json +155 -0
  32. package/schemas/upgrade-assessment.schema.json +2 -2
  33. package/schemas/upgrade-result-bundle.schema.json +1 -1
  34. package/src/project-context/a130-evaluation.mjs +91 -0
  35. package/src/project-context/adaptive-context-schema.mjs +392 -0
  36. package/src/project-context/adaptive-context.mjs +547 -0
  37. package/src/project-context/ai-entry.mjs +9 -9
  38. package/src/project-context/assist.mjs +4 -2
  39. package/src/project-context/capabilities.mjs +18 -0
  40. package/src/project-context/checker.mjs +4 -3
  41. package/src/project-context/cli.mjs +40 -5
  42. package/src/project-context/contract-schema.mjs +1 -1
  43. package/src/project-context/discovery.mjs +7 -7
  44. package/src/project-context/exchange-schema.mjs +6 -5
  45. package/src/project-context/maintenance.mjs +2 -2
  46. package/src/project-context/migration-manifest.mjs +7 -5
  47. package/src/project-context/renderer.mjs +75 -1
  48. package/src/project-context/source-reader.mjs +63 -30
  49. package/src/project-context/task-context.mjs +14 -2
  50. package/src/project-context/truth-reconciliation-schema.mjs +488 -0
  51. package/src/project-context/truth-reconciliation.mjs +543 -0
  52. package/src/project-context/upgrade-schema.mjs +5 -1
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
- "$id": "urn:frontend-project-context:schema:capabilities:4",
3
+ "$id": "urn:frontend-project-context:schema:capabilities:7",
4
4
  "title": "Frontend Project Context Capabilities",
5
5
  "type": "object",
6
6
  "additionalProperties": false,
@@ -18,28 +18,32 @@
18
18
  "boundaries"
19
19
  ],
20
20
  "properties": {
21
- "schemaVersion": { "const": 4 },
21
+ "schemaVersion": { "const": 7 },
22
22
  "package": {
23
23
  "type": "object",
24
24
  "additionalProperties": false,
25
25
  "required": ["name", "version"],
26
26
  "properties": {
27
27
  "name": { "const": "frontend-project-context" },
28
- "version": { "const": "1.6.0" }
28
+ "version": { "const": "1.7.0" }
29
29
  }
30
30
  },
31
- "exchangeProtocolVersion": { "const": 4 },
31
+ "exchangeProtocolVersion": { "const": 7 },
32
32
  "schemas": {
33
33
  "type": "object",
34
34
  "additionalProperties": false,
35
35
  "required": [
36
36
  "actionPlan",
37
+ "adaptiveContextBundle",
37
38
  "assistBundle",
38
39
  "capabilities",
39
40
  "contract",
41
+ "contextQuery",
42
+ "coverageAudit",
40
43
  "dashboardViewModel",
41
44
  "evidenceBundle",
42
45
  "evidenceInput",
46
+ "hostPromotionEvidence",
43
47
  "integrationReviewBundle",
44
48
  "projectionLock",
45
49
  "projectionLockReadable",
@@ -51,21 +55,28 @@
51
55
  "migrationManifest",
52
56
  "migrationPlan",
53
57
  "reviewBundle",
58
+ "routingIndex",
54
59
  "sourceLock",
55
60
  "stageContextBundle",
56
61
  "stageReceipt",
57
62
  "taskContextPlan",
63
+ "truthReconciliationInput",
64
+ "truthReconciliationReviewBundle",
58
65
  "upgradeAssessment",
59
66
  "upgradeResultBundle"
60
67
  ],
61
68
  "properties": {
62
69
  "actionPlan": { "const": 2 },
70
+ "adaptiveContextBundle": { "const": 2 },
63
71
  "assistBundle": { "const": 1 },
64
- "capabilities": { "const": 4 },
72
+ "capabilities": { "const": 7 },
65
73
  "contract": { "const": 2 },
74
+ "contextQuery": { "const": 2 },
75
+ "coverageAudit": { "const": 1 },
66
76
  "dashboardViewModel": { "type": "integer" },
67
77
  "evidenceBundle": { "const": 1 },
68
78
  "evidenceInput": { "const": 1 },
79
+ "hostPromotionEvidence": { "const": 1 },
69
80
  "integrationReviewBundle": { "const": 1 },
70
81
  "projectionLock": { "const": 2 },
71
82
  "projectionLockReadable": { "const": [1, 2] },
@@ -73,14 +84,17 @@
73
84
  "projectionRenderer": { "type": "integer" },
74
85
  "proposal": { "const": 1 },
75
86
  "projectStatus": { "const": 1 },
76
- "aiEntryRenderer": { "const": 1 },
87
+ "aiEntryRenderer": { "const": 3 },
77
88
  "migrationManifest": { "const": 2 },
78
89
  "migrationPlan": { "const": 1 },
79
90
  "reviewBundle": { "const": 2 },
91
+ "routingIndex": { "const": 2 },
80
92
  "sourceLock": { "const": 1 },
81
93
  "stageContextBundle": { "const": 1 },
82
94
  "stageReceipt": { "const": 1 },
83
95
  "taskContextPlan": { "const": 1 },
96
+ "truthReconciliationInput": { "const": 2 },
97
+ "truthReconciliationReviewBundle": { "const": 2 },
84
98
  "upgradeAssessment": { "const": 1 },
85
99
  "upgradeResultBundle": { "const": 1 }
86
100
  }
@@ -0,0 +1,69 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "urn:frontend-project-context:schema:context-query:2",
4
+ "title": "Frontend Project Context Query",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "required": ["schemaVersion", "kind", "projectId", "snapshots", "task", "level", "freshness", "budget", "expansion"],
8
+ "properties": {
9
+ "schemaVersion": { "const": 2 },
10
+ "kind": { "const": "context-query" },
11
+ "projectId": { "$ref": "#/$defs/id" },
12
+ "snapshots": { "$ref": "#/$defs/snapshots" },
13
+ "task": {
14
+ "type": "object", "additionalProperties": false,
15
+ "required": ["text", "paths", "topics", "itemIds", "changedPaths"],
16
+ "properties": {
17
+ "text": { "type": "string", "minLength": 1 },
18
+ "paths": { "$ref": "#/$defs/nonEmptyPaths" },
19
+ "topics": { "$ref": "#/$defs/texts" },
20
+ "itemIds": { "$ref": "#/$defs/ids" },
21
+ "changedPaths": { "$ref": "#/$defs/paths" }
22
+ }
23
+ },
24
+ "level": { "enum": ["initial", "expanded", "complete"] },
25
+ "freshness": { "enum": ["snapshot-and-signal-bound", "strict-current"] },
26
+ "budget": {
27
+ "type": "object", "additionalProperties": false, "required": ["audit", "delivery", "readTargets"],
28
+ "properties": {
29
+ "audit": { "$ref": "#/$defs/auditBudget" },
30
+ "delivery": { "$ref": "#/$defs/deliveryBudget" },
31
+ "readTargets": { "$ref": "#/$defs/readBudget" }
32
+ }
33
+ },
34
+ "expansion": {
35
+ "oneOf": [
36
+ { "type": "null" },
37
+ {
38
+ "type": "object", "additionalProperties": false,
39
+ "required": ["previousBundleDigest", "requestedItemIds", "requestedSubjects", "requestedSourceIds"],
40
+ "properties": {
41
+ "previousBundleDigest": { "$ref": "#/$defs/digest" },
42
+ "requestedItemIds": { "$ref": "#/$defs/ids" },
43
+ "requestedSubjects": { "$ref": "#/$defs/ids" },
44
+ "requestedSourceIds": { "$ref": "#/$defs/ids" }
45
+ }
46
+ }
47
+ ]
48
+ }
49
+ },
50
+ "allOf": [
51
+ { "if": { "properties": { "level": { "const": "expanded" } } }, "then": { "properties": { "expansion": { "type": "object" } } } },
52
+ { "if": { "properties": { "level": { "enum": ["initial", "complete"] } } }, "then": { "properties": { "expansion": { "type": "null" } } } }
53
+ ],
54
+ "$defs": {
55
+ "id": { "type": "string", "pattern": "^[a-z0-9]+(?:[.-][a-z0-9]+)*$" },
56
+ "digest": { "type": "string", "pattern": "^sha256:[a-f0-9]{64}$" },
57
+ "ids": { "type": "array", "uniqueItems": true, "items": { "$ref": "#/$defs/id" } },
58
+ "paths": { "type": "array", "uniqueItems": true, "items": { "type": "string", "minLength": 1 } },
59
+ "nonEmptyPaths": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "type": "string", "minLength": 1 } },
60
+ "texts": { "type": "array", "uniqueItems": true, "items": { "type": "string", "minLength": 1 } },
61
+ "snapshots": {
62
+ "type": "object", "additionalProperties": false, "required": ["contract", "sourcesLock", "projectionsLock"],
63
+ "properties": { "contract": { "$ref": "#/$defs/digest" }, "sourcesLock": { "$ref": "#/$defs/digest" }, "projectionsLock": { "$ref": "#/$defs/digest" } }
64
+ },
65
+ "auditBudget": { "type": "object", "additionalProperties": false, "required": ["targetUtf8Bytes", "maxUtf8Bytes"], "properties": { "targetUtf8Bytes": { "type": "integer", "minimum": 1 }, "maxUtf8Bytes": { "type": "integer", "minimum": 1 } } },
66
+ "deliveryBudget": { "type": "object", "additionalProperties": false, "required": ["completeBelowUtf8Bytes", "maxUtf8Bytes"], "properties": { "completeBelowUtf8Bytes": { "type": "integer", "minimum": 1 }, "maxUtf8Bytes": { "type": "integer", "minimum": 1 } } },
67
+ "readBudget": { "type": "object", "additionalProperties": false, "required": ["target", "max"], "properties": { "target": { "type": "integer", "minimum": 1 }, "max": { "type": "integer", "minimum": 1 } } }
68
+ }
69
+ }
@@ -0,0 +1,32 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "urn:frontend-project-context:schema:coverage-audit:1",
4
+ "title": "Frontend Project Context Coverage Audit",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "required": ["schemaVersion", "kind", "project", "snapshots", "profile", "registrationCoverage", "categories", "guarantee", "auditDigest"],
8
+ "properties": {
9
+ "schemaVersion": { "const": 1 },
10
+ "kind": { "const": "coverage-audit" },
11
+ "project": { "type": "object", "additionalProperties": false, "required": ["id", "name"], "properties": { "id": { "type": "string" }, "name": { "type": "string" } } },
12
+ "snapshots": { "$ref": "context-query.schema.json#/$defs/snapshots" },
13
+ "profile": { "type": ["object", "null"] },
14
+ "registrationCoverage": { "enum": ["not-declared", "review-required", "closed-for-declared-scope"] },
15
+ "categories": {
16
+ "type": "object",
17
+ "additionalProperties": false,
18
+ "required": ["registered", "excluded-approved", "review-required", "outside-declared-coverage"],
19
+ "properties": {
20
+ "registered": { "$ref": "#/$defs/candidates" },
21
+ "excluded-approved": { "$ref": "#/$defs/candidates" },
22
+ "review-required": { "$ref": "#/$defs/candidates" },
23
+ "outside-declared-coverage": { "$ref": "#/$defs/candidates" }
24
+ }
25
+ },
26
+ "guarantee": { "const": "declared-scope-only-never-all-project-truth" },
27
+ "auditDigest": { "type": "string", "pattern": "^sha256:[a-f0-9]{64}$" }
28
+ },
29
+ "$defs": {
30
+ "candidates": { "type": "array", "items": { "type": "object", "required": ["path", "origin"], "properties": { "path": { "type": "string" }, "origin": { "type": "string" }, "proposedSourceId": { "type": "string" } } } }
31
+ }
32
+ }
@@ -14,8 +14,8 @@
14
14
  "required": ["name", "version", "exchangeProtocolVersion"],
15
15
  "properties": {
16
16
  "name": { "const": "frontend-project-context" },
17
- "version": { "const": "1.6.0" },
18
- "exchangeProtocolVersion": { "const": 3 }
17
+ "version": { "const": "1.7.0" },
18
+ "exchangeProtocolVersion": { "const": 6 }
19
19
  }
20
20
  },
21
21
  "capability": { "enum": ["setup", "takeover", "maintenance", "staged-context", "upgrade", "other-protocol"] },
@@ -0,0 +1,33 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "urn:frontend-project-context:schema:host-promotion-evidence:1",
4
+ "title": "Frontend Project Context Host Promotion Evidence",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "required": ["schemaVersion", "kind", "taskId", "stage", "baseRevision", "candidateRevision", "codeSnapshotDigest", "sourceSnapshotDigest", "artifactDigest", "changedPaths", "projectSnapshots", "acceptanceSuiteDigest", "verificationResults"],
8
+ "properties": {
9
+ "schemaVersion": { "const": 1 },
10
+ "kind": { "const": "host-promotion-evidence" },
11
+ "taskId": { "$ref": "#/$defs/id" },
12
+ "stage": { "enum": ["qa", "preproduction", "production", "withdrawn", "rollback"] },
13
+ "baseRevision": { "$ref": "#/$defs/text" },
14
+ "candidateRevision": { "$ref": "#/$defs/text" },
15
+ "codeSnapshotDigest": { "$ref": "#/$defs/digest" },
16
+ "sourceSnapshotDigest": { "$ref": "#/$defs/digest" },
17
+ "artifactDigest": { "$ref": "#/$defs/digest" },
18
+ "changedPaths": { "$ref": "#/$defs/paths" },
19
+ "projectSnapshots": { "$ref": "#/$defs/snapshots" },
20
+ "acceptanceSuiteDigest": { "$ref": "#/$defs/digest" },
21
+ "verificationResults": { "type": "array", "uniqueItems": true, "items": { "$ref": "#/$defs/verification" } },
22
+ "integration": { "type": "boolean", "default": false },
23
+ "equivalentToCodeSnapshotDigest": { "$ref": "#/$defs/digest" }
24
+ },
25
+ "$defs": {
26
+ "id": { "type": "string", "pattern": "^[a-z0-9]+(?:[.-][a-z0-9]+)*$" },
27
+ "text": { "type": "string", "minLength": 1 },
28
+ "digest": { "type": "string", "pattern": "^sha256:[a-f0-9]{64}$" },
29
+ "paths": { "type": "array", "uniqueItems": true, "items": { "type": "string", "minLength": 1 } },
30
+ "snapshots": { "type": "object", "additionalProperties": false, "required": ["contract", "sourcesLock", "projectionsLock"], "properties": { "contract": { "$ref": "#/$defs/digest" }, "sourcesLock": { "$ref": "#/$defs/digest" }, "projectionsLock": { "$ref": "#/$defs/digest" } } },
31
+ "verification": { "type": "object", "additionalProperties": false, "required": ["id", "status"], "properties": { "id": { "$ref": "#/$defs/id" }, "status": { "enum": ["passed", "failed", "skipped", "observed"] } } }
32
+ }
33
+ }
@@ -7,12 +7,12 @@
7
7
  "required": ["schemaVersion", "package", "upgradeFrom", "stores", "renderers", "protocols", "paths", "builtInMigrations", "consumerChanges", "acceptanceCommands", "rollback", "externalEffects", "manifestDigest"],
8
8
  "properties": {
9
9
  "schemaVersion": {"const": 2},
10
- "package": {"type": "object", "additionalProperties": false, "required": ["name", "version"], "properties": {"name": {"const": "frontend-project-context"}, "version": {"const": "1.6.0"}}},
11
- "upgradeFrom": {"const": ["1.3.1", "1.4.0", "1.5.0"]},
10
+ "package": {"type": "object", "additionalProperties": false, "required": ["name", "version"], "properties": {"name": {"const": "frontend-project-context"}, "version": {"const": "1.7.0"}}},
11
+ "upgradeFrom": {"const": ["1.3.1", "1.4.0", "1.5.0", "1.6.0"]},
12
12
  "stores": {"type": "object", "additionalProperties": false, "required": ["contract", "projectionLock", "proposal", "sourceLock"], "properties": {"contract": {"$ref": "#/$defs/versionMatrix"}, "projectionLock": {"$ref": "#/$defs/versionMatrix"}, "proposal": {"$ref": "#/$defs/versionMatrix"}, "sourceLock": {"$ref": "#/$defs/versionMatrix"}}},
13
13
  "renderers": {"type": "object", "additionalProperties": false, "required": ["aiEntry", "projection"], "properties": {"aiEntry": {"$ref": "#/$defs/versionTarget"}, "projection": {"$ref": "#/$defs/versionTarget"}}},
14
14
  "protocols": {"type": "object", "additionalProperties": {"$ref": "#/$defs/versionTarget"}},
15
- "paths": {"type": "array", "minItems": 3, "maxItems": 3, "items": {"type": "object", "additionalProperties": false, "required": ["fromVersion", "classification", "migrationIds", "requiresHumanReview", "rollbackClass", "acceptance"], "properties": {"fromVersion": {"enum": ["1.3.1", "1.4.0", "1.5.0"]}, "classification": {"enum": ["package-only", "republish-ai-entry", "republish-projection", "built-in-store-migration", "invalidate-ephemeral-protocol"]}, "migrationIds": {"$ref": "#/$defs/strings"}, "requiresHumanReview": {"type": "boolean"}, "rollbackClass": {"$ref": "#/$defs/rollbackClass"}, "acceptance": {"$ref": "#/$defs/strings"}}}},
15
+ "paths": {"type": "array", "minItems": 4, "maxItems": 4, "items": {"type": "object", "additionalProperties": false, "required": ["fromVersion", "classification", "migrationIds", "requiresHumanReview", "rollbackClass", "acceptance"], "properties": {"fromVersion": {"enum": ["1.3.1", "1.4.0", "1.5.0", "1.6.0"]}, "classification": {"enum": ["package-only", "republish-ai-entry", "republish-projection", "built-in-store-migration", "invalidate-ephemeral-protocol"]}, "migrationIds": {"$ref": "#/$defs/strings"}, "requiresHumanReview": {"type": "boolean"}, "rollbackClass": {"$ref": "#/$defs/rollbackClass"}, "acceptance": {"$ref": "#/$defs/strings"}}}},
16
16
  "builtInMigrations": {"type": "array", "items": {"type": "object", "additionalProperties": false, "required": ["id", "kind", "input", "targetType", "writes", "rollbackClass", "reverseMigrationId"], "properties": {"id": {"type": "string"}, "kind": {"enum": ["package-only", "republish-ai-entry", "republish-projection", "built-in-store-migration", "invalidate-ephemeral-protocol"]}, "input": {"type": "object", "additionalProperties": false, "required": ["schemaVersions", "beforeDigestRequired"], "properties": {"schemaVersions": {"type": "array", "items": {"type": "integer", "minimum": 1}}, "beforeDigestRequired": {"type": "boolean"}}}, "targetType": {"enum": ["none", "ai-entry", "projection", "store", "ephemeral-protocol"]}, "writes": {"type": "boolean"}, "rollbackClass": {"$ref": "#/$defs/rollbackClass"}, "reverseMigrationId": {"type": ["string", "null"]}}}},
17
17
  "consumerChanges": {"type": "object", "additionalProperties": {"type": "object", "additionalProperties": false, "required": ["state", "reason"], "properties": {"state": {"enum": ["preserve", "regenerate", "invalidate"]}, "reason": {"type": "string"}}}},
18
18
  "acceptanceCommands": {"$ref": "#/$defs/strings"},
@@ -8,8 +8,8 @@
8
8
  "properties": {
9
9
  "schemaVersion": {"const": 1},
10
10
  "kind": {"const": "target-upgrade-plan"},
11
- "fromVersion": {"enum": ["1.3.1", "1.4.0", "1.5.0"]},
12
- "targetVersion": {"const": "1.6.0"},
11
+ "fromVersion": {"enum": ["1.3.1", "1.4.0", "1.5.0", "1.6.0"]},
12
+ "targetVersion": {"const": "1.7.0"},
13
13
  "manifestDigest": {"$ref": "#/$defs/digest"},
14
14
  "assessmentDigest": {"$ref": "#/$defs/digest"},
15
15
  "snapshots": {"anyOf": [{"type": "null"}, {"$ref": "#/$defs/snapshots"}]},
@@ -33,7 +33,7 @@
33
33
  "properties": {
34
34
  "path": { "type": "string" }, "target": { "const": "ai-entry" }, "ownership": { "const": "region" },
35
35
  "regionId": { "const": "project-context-ai-entry" }, "regionDigest": { "$ref": "#/$defs/digest" },
36
- "rendererVersion": { "const": 1 }, "createdFile": { "type": "boolean" }
36
+ "rendererVersion": { "enum": [1, 2, 3] }, "createdFile": { "type": "boolean" }
37
37
  }
38
38
  },
39
39
  "schema1": {
@@ -0,0 +1,58 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "urn:frontend-project-context:schema:routing-index:2",
4
+ "title": "Frontend Project Context Routing Index",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "required": ["schemaVersion", "kind", "projectId", "selectorVersion", "snapshots", "items", "sources", "indexDigest"],
8
+ "properties": {
9
+ "schemaVersion": { "const": 2 },
10
+ "kind": { "const": "routing-index" },
11
+ "projectId": { "type": "string" },
12
+ "selectorVersion": { "const": 2 },
13
+ "snapshots": { "$ref": "context-query.schema.json#/$defs/snapshots" },
14
+ "items": {
15
+ "type": "array",
16
+ "items": {
17
+ "type": "object",
18
+ "additionalProperties": false,
19
+ "required": ["id", "kind", "subject", "scope", "sourceIds", "terms", "itemDigest"],
20
+ "properties": {
21
+ "id": { "type": "string" },
22
+ "kind": { "enum": ["fact", "policy", "reference", "validation-description"] },
23
+ "subject": { "type": "string" },
24
+ "scope": { "$ref": "#/$defs/scope" },
25
+ "sourceIds": { "type": "array", "uniqueItems": true, "items": { "type": "string" } },
26
+ "terms": { "type": "array", "uniqueItems": true, "items": { "type": "string" } },
27
+ "itemDigest": { "type": "string" }
28
+ }
29
+ }
30
+ },
31
+ "sources": {
32
+ "type": "array",
33
+ "items": {
34
+ "type": "object",
35
+ "additionalProperties": false,
36
+ "required": ["id", "kind", "locator", "itemIds", "sourceDigest"],
37
+ "properties": {
38
+ "id": { "type": "string" },
39
+ "kind": { "type": "string" },
40
+ "locator": { "$ref": "#/$defs/locator" },
41
+ "itemIds": { "type": "array", "uniqueItems": true, "items": { "type": "string" } },
42
+ "sourceDigest": { "type": "string" }
43
+ }
44
+ }
45
+ },
46
+ "indexDigest": { "type": "string", "pattern": "^sha256:[a-f0-9]{64}$" }
47
+ },
48
+ "$defs": {
49
+ "scope": { "oneOf": [
50
+ { "type": "object", "additionalProperties": false, "required": ["kind"], "properties": { "kind": { "const": "project" } } },
51
+ { "type": "object", "additionalProperties": false, "required": ["kind", "path"], "properties": { "kind": { "enum": ["path-prefix", "file"] }, "path": { "type": "string", "minLength": 1 } } }
52
+ ] },
53
+ "locator": { "oneOf": [
54
+ { "type": "object", "additionalProperties": false, "required": ["path"], "properties": { "path": { "type": "string", "minLength": 1 }, "pointer": { "type": "string" } } },
55
+ { "type": "object", "additionalProperties": false, "required": ["reference"], "properties": { "reference": { "type": "string", "minLength": 1 } } }
56
+ ] }
57
+ }
58
+ }
@@ -0,0 +1,60 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "urn:frontend-project-context:schema:truth-reconciliation-input:2",
4
+ "title": "Frontend Project Context Truth Reconciliation Input",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "required": ["schemaVersion", "kind", "projectId", "current", "task", "candidates", "globalFindings", "resolutionAttempt"],
8
+ "properties": {
9
+ "schemaVersion": { "const": 2 },
10
+ "kind": { "const": "truth-reconciliation-input" },
11
+ "projectId": { "$ref": "#/$defs/id" },
12
+ "current": { "$ref": "#/$defs/current" },
13
+ "task": { "$ref": "#/$defs/task" },
14
+ "candidates": { "type": "array", "uniqueItems": true, "items": { "$ref": "#/$defs/candidate" } },
15
+ "globalFindings": { "type": "array", "uniqueItems": true, "items": { "$ref": "#/$defs/globalFinding" } },
16
+ "resolutionAttempt": { "oneOf": [{ "type": "null" }, { "$ref": "#/$defs/resolutionAttempt" }] }
17
+ },
18
+ "$defs": {
19
+ "id": { "type": "string", "pattern": "^[a-z0-9]+(?:[.-][a-z0-9]+)*$" },
20
+ "text": { "type": "string", "minLength": 1 },
21
+ "digest": { "type": "string", "pattern": "^sha256:[a-f0-9]{64}$" },
22
+ "ids": { "type": "array", "uniqueItems": true, "items": { "$ref": "#/$defs/id" } },
23
+ "paths": { "type": "array", "uniqueItems": true, "items": { "type": "string", "minLength": 1 } },
24
+ "snapshots": { "type": "object", "additionalProperties": false, "required": ["contract", "sourcesLock", "projectionsLock"], "properties": { "contract": { "$ref": "#/$defs/digest" }, "sourcesLock": { "$ref": "#/$defs/digest" }, "projectionsLock": { "$ref": "#/$defs/digest" } } },
25
+ "scope": {
26
+ "oneOf": [
27
+ { "type": "object", "additionalProperties": false, "required": ["kind"], "properties": { "kind": { "const": "project" } } },
28
+ { "type": "object", "additionalProperties": false, "required": ["kind", "path"], "properties": { "kind": { "enum": ["path-prefix", "file"] }, "path": { "type": "string", "minLength": 1 } } }
29
+ ]
30
+ },
31
+ "scopes": { "type": "array", "uniqueItems": true, "items": { "$ref": "#/$defs/scope" } },
32
+ "itemKind": { "enum": ["fact", "policy", "reference", "validation-description"] },
33
+ "classification": { "enum": ["duplicate", "compatible-compose", "scope-split", "supersede", "semantic-conflict", "implementation-only"] },
34
+ "current": {
35
+ "type": "object",
36
+ "additionalProperties": false,
37
+ "required": ["revision", "projectSnapshots", "sources", "items"],
38
+ "properties": {
39
+ "revision": { "$ref": "#/$defs/text" },
40
+ "projectSnapshots": { "$ref": "#/$defs/snapshots" },
41
+ "sources": {
42
+ "type": "array", "uniqueItems": true,
43
+ "items": { "type": "object", "additionalProperties": false, "required": ["id", "digest"], "properties": { "id": { "$ref": "#/$defs/id" }, "digest": { "$ref": "#/$defs/digest" } } }
44
+ },
45
+ "items": {
46
+ "type": "array", "uniqueItems": true,
47
+ "items": { "type": "object", "additionalProperties": false, "required": ["id", "digest", "subject", "kind", "scope"], "properties": { "id": { "$ref": "#/$defs/id" }, "digest": { "$ref": "#/$defs/digest" }, "subject": { "$ref": "#/$defs/id" }, "kind": { "$ref": "#/$defs/itemKind" }, "scope": { "$ref": "#/$defs/scope" } } }
48
+ }
49
+ }
50
+ },
51
+ "task": { "type": "object", "additionalProperties": false, "required": ["id", "paths"], "properties": { "id": { "$ref": "#/$defs/id" }, "paths": { "$ref": "#/$defs/paths" } } },
52
+ "sourceChange": { "type": "object", "additionalProperties": false, "required": ["sourceId", "expectedDigest", "candidateDigest", "affectedItemIds", "subjects", "scopes", "classification"], "properties": { "sourceId": { "$ref": "#/$defs/id" }, "expectedDigest": { "$ref": "#/$defs/digest" }, "candidateDigest": { "$ref": "#/$defs/digest" }, "affectedItemIds": { "$ref": "#/$defs/ids" }, "subjects": { "$ref": "#/$defs/ids" }, "scopes": { "$ref": "#/$defs/scopes" }, "classification": { "$ref": "#/$defs/classification" } } },
53
+ "itemChange": { "type": "object", "additionalProperties": false, "required": ["itemId", "expectedDigest", "candidateDigest", "sourceIds", "subject", "kind", "scope", "classification"], "properties": { "itemId": { "$ref": "#/$defs/id" }, "expectedDigest": { "$ref": "#/$defs/digest" }, "candidateDigest": { "$ref": "#/$defs/digest" }, "sourceIds": { "$ref": "#/$defs/ids" }, "subject": { "$ref": "#/$defs/id" }, "kind": { "$ref": "#/$defs/itemKind" }, "scope": { "$ref": "#/$defs/scope" }, "classification": { "$ref": "#/$defs/classification" } } },
54
+ "candidate": { "type": "object", "additionalProperties": false, "required": ["id", "taskId", "lifecycle", "targetStage", "baseRevision", "expectedProjectSnapshots", "currentCodeSnapshotDigest", "currentSourceSnapshotDigest", "currentArtifactDigest", "currentAcceptanceSuiteDigest", "changedPaths", "sourceChanges", "itemChanges", "decisionCandidateIds", "promotionEvidence"], "properties": { "id": { "$ref": "#/$defs/id" }, "taskId": { "$ref": "#/$defs/id" }, "lifecycle": { "enum": ["active", "released", "withdrawn", "rolled-back"] }, "targetStage": { "enum": ["development", "qa", "preproduction", "production"] }, "baseRevision": { "$ref": "#/$defs/text" }, "expectedProjectSnapshots": { "$ref": "#/$defs/snapshots" }, "currentCodeSnapshotDigest": { "$ref": "#/$defs/digest" }, "currentSourceSnapshotDigest": { "$ref": "#/$defs/digest" }, "currentArtifactDigest": { "$ref": "#/$defs/digest" }, "currentAcceptanceSuiteDigest": { "$ref": "#/$defs/digest" }, "changedPaths": { "$ref": "#/$defs/paths" }, "sourceChanges": { "type": "array", "uniqueItems": true, "items": { "$ref": "#/$defs/sourceChange" } }, "itemChanges": { "type": "array", "uniqueItems": true, "items": { "$ref": "#/$defs/itemChange" } }, "decisionCandidateIds": { "$ref": "#/$defs/ids" }, "promotionEvidence": { "type": "array", "uniqueItems": true, "items": { "$ref": "host-promotion-evidence.schema.json" } } } },
55
+ "globalFinding": { "type": "object", "additionalProperties": false, "required": ["code", "severity", "sourceIds", "itemIds", "subjects", "scopes", "itemKinds"], "properties": { "code": { "$ref": "#/$defs/id" }, "severity": { "enum": ["attention", "conflict", "blocked"] }, "sourceIds": { "$ref": "#/$defs/ids" }, "itemIds": { "$ref": "#/$defs/ids" }, "subjects": { "$ref": "#/$defs/ids" }, "scopes": { "$ref": "#/$defs/scopes" }, "itemKinds": { "type": "array", "uniqueItems": true, "items": { "$ref": "#/$defs/itemKind" } } } },
56
+ "resolutionKind": { "enum": ["keep-current-baseline", "accept-branch-change", "compose-compatible-changes", "split-scope-or-override", "replace-or-deprecate-source", "fix-source-and-rerun", "refresh-promotion-evidence", "defer-scoped-conflict", "external-implementation-fix-required"] },
57
+ "resolutionDecision": { "type": "object", "additionalProperties": false, "required": ["findingDigest", "resolutionKind", "humanInputs"], "properties": { "findingDigest": { "$ref": "#/$defs/digest" }, "resolutionKind": { "$ref": "#/$defs/resolutionKind" }, "humanInputs": { "type": "object" }, "externalAction": { "type": "object", "additionalProperties": false, "required": ["kind", "completed", "evidenceDigests"], "properties": { "kind": { "$ref": "#/$defs/text" }, "completed": { "type": "boolean" }, "evidenceDigests": { "type": "array", "uniqueItems": true, "items": { "$ref": "#/$defs/digest" } } } } } },
58
+ "resolutionAttempt": { "type": "object", "additionalProperties": false, "required": ["previousReviewDigest", "decisions", "projectContextStatus"], "properties": { "previousReviewDigest": { "$ref": "#/$defs/digest" }, "decisions": { "type": "array", "uniqueItems": true, "items": { "$ref": "#/$defs/resolutionDecision" } }, "projectContextStatus": { "enum": ["clean", "attention", "conflict", "invalid", "partial"] } } }
59
+ }
60
+ }
@@ -0,0 +1,155 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "urn:frontend-project-context:schema:truth-reconciliation-review-bundle:2",
4
+ "title": "Frontend Project Context Truth Reconciliation Review Bundle",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "required": ["schemaVersion", "kind", "project", "current", "task", "inputDigest", "summary", "candidateOutcomes", "collisionGroups", "findings", "resolutionOutcomes", "guarantees", "boundaries", "bundleDigest"],
8
+ "properties": {
9
+ "schemaVersion": { "const": 2 },
10
+ "kind": { "const": "truth-reconciliation-review-bundle" },
11
+ "project": { "$ref": "#/$defs/project" },
12
+ "current": { "$ref": "#/$defs/current" },
13
+ "task": { "$ref": "#/$defs/task" },
14
+ "inputDigest": { "$ref": "#/$defs/digest" },
15
+ "summary": { "$ref": "#/$defs/summary" },
16
+ "candidateOutcomes": { "type": "array", "items": { "$ref": "#/$defs/candidateOutcome" } },
17
+ "collisionGroups": { "type": "array", "items": { "$ref": "#/$defs/collisionGroup" } },
18
+ "findings": { "type": "array", "items": { "$ref": "#/$defs/finding" } },
19
+ "resolutionOutcomes": { "type": "array", "items": { "$ref": "#/$defs/resolutionOutcome" } },
20
+ "guarantees": { "$ref": "#/$defs/guarantees" },
21
+ "boundaries": { "$ref": "#/$defs/boundaries" },
22
+ "bundleDigest": { "$ref": "#/$defs/digest" }
23
+ },
24
+ "$defs": {
25
+ "id": { "type": "string", "pattern": "^[a-z0-9]+(?:[.-][a-z0-9]+)*$" },
26
+ "text": { "type": "string", "minLength": 1 },
27
+ "digest": { "type": "string", "pattern": "^sha256:[a-f0-9]{64}$" },
28
+ "nullableDigest": { "oneOf": [{ "$ref": "#/$defs/digest" }, { "type": "null" }] },
29
+ "nullableText": { "oneOf": [{ "$ref": "#/$defs/text" }, { "type": "null" }] },
30
+ "ids": { "type": "array", "uniqueItems": true, "items": { "$ref": "#/$defs/id" } },
31
+ "paths": { "type": "array", "uniqueItems": true, "items": { "type": "string", "minLength": 1 } },
32
+ "scope": {
33
+ "oneOf": [
34
+ { "type": "object", "additionalProperties": false, "required": ["kind"], "properties": { "kind": { "const": "project" } } },
35
+ { "type": "object", "additionalProperties": false, "required": ["kind", "path"], "properties": { "kind": { "enum": ["path-prefix", "file"] }, "path": { "type": "string", "minLength": 1 } } }
36
+ ]
37
+ },
38
+ "scopes": { "type": "array", "uniqueItems": true, "items": { "$ref": "#/$defs/scope" } },
39
+ "snapshots": {
40
+ "type": "object", "additionalProperties": false,
41
+ "required": ["contract", "sourcesLock", "projectionsLock"],
42
+ "properties": { "contract": { "$ref": "#/$defs/digest" }, "sourcesLock": { "$ref": "#/$defs/digest" }, "projectionsLock": { "$ref": "#/$defs/digest" } }
43
+ },
44
+ "project": {
45
+ "type": "object", "additionalProperties": false, "required": ["id", "name"],
46
+ "properties": { "id": { "$ref": "#/$defs/id" }, "name": { "$ref": "#/$defs/text" } }
47
+ },
48
+ "current": {
49
+ "type": "object", "additionalProperties": false, "required": ["revision", "projectSnapshots"],
50
+ "properties": { "revision": { "$ref": "#/$defs/text" }, "projectSnapshots": { "$ref": "#/$defs/snapshots" } }
51
+ },
52
+ "task": {
53
+ "type": "object", "additionalProperties": false, "required": ["id", "paths"],
54
+ "properties": { "id": { "$ref": "#/$defs/id" }, "paths": { "$ref": "#/$defs/paths" } }
55
+ },
56
+ "summary": {
57
+ "type": "object", "additionalProperties": false,
58
+ "required": ["candidates", "eligibleCandidates", "collisionGroups", "findings", "taskHealth", "globalHealth", "existingDelivery"],
59
+ "properties": {
60
+ "candidates": { "type": "integer", "minimum": 0 },
61
+ "eligibleCandidates": { "type": "integer", "minimum": 0 },
62
+ "collisionGroups": { "type": "integer", "minimum": 0 },
63
+ "findings": { "type": "integer", "minimum": 0 },
64
+ "taskHealth": { "enum": ["ready", "blocked"] },
65
+ "globalHealth": { "enum": ["clean", "attention"] },
66
+ "existingDelivery": { "const": "not-blocked" }
67
+ }
68
+ },
69
+ "promotionEvidence": {
70
+ "type": "object", "additionalProperties": false,
71
+ "required": ["assurance", "currentEvidenceCount", "staleEvidenceCount", "localQaReusable", "integrationVerified"],
72
+ "properties": {
73
+ "assurance": { "const": "host-asserted" },
74
+ "currentEvidenceCount": { "type": "integer", "minimum": 0 },
75
+ "staleEvidenceCount": { "type": "integer", "minimum": 0 },
76
+ "localQaReusable": { "type": "boolean" },
77
+ "integrationVerified": { "type": "boolean" }
78
+ }
79
+ },
80
+ "candidateOutcome": {
81
+ "type": "object", "additionalProperties": false,
82
+ "required": ["candidateId", "lifecycle", "baseline", "promotionEvidence", "decisionCandidates", "eligibleForReconciliation"],
83
+ "properties": {
84
+ "candidateId": { "$ref": "#/$defs/id" },
85
+ "lifecycle": { "enum": ["active", "released", "withdrawn", "rolled-back"] },
86
+ "baseline": { "enum": ["current", "stale"] },
87
+ "promotionEvidence": { "$ref": "#/$defs/promotionEvidence" },
88
+ "decisionCandidates": { "enum": ["authority-free-candidates", "discarded-not-promoted"] },
89
+ "eligibleForReconciliation": { "type": "boolean" }
90
+ }
91
+ },
92
+ "resolutionKind": { "enum": ["keep-current-baseline", "accept-branch-change", "compose-compatible-changes", "split-scope-or-override", "replace-or-deprecate-source", "fix-source-and-rerun", "refresh-promotion-evidence", "defer-scoped-conflict", "external-implementation-fix-required"] },
93
+ "collisionGroup": {
94
+ "type": "object", "additionalProperties": false,
95
+ "required": ["kind", "key", "classification", "candidateIds", "candidateDigests", "affectedSourceIds", "affectedItemIds", "affectedSubjects", "affectedScopes", "resolutionKinds", "promoted"],
96
+ "properties": {
97
+ "kind": { "enum": ["source", "item", "subject"] },
98
+ "key": { "$ref": "#/$defs/id" },
99
+ "classification": { "enum": ["duplicate", "compatible-compose", "scope-split", "supersede", "semantic-conflict", "implementation-only"] },
100
+ "candidateIds": { "$ref": "#/$defs/ids" },
101
+ "candidateDigests": { "type": "array", "uniqueItems": true, "items": { "$ref": "#/$defs/digest" } },
102
+ "affectedSourceIds": { "$ref": "#/$defs/ids" },
103
+ "affectedItemIds": { "$ref": "#/$defs/ids" },
104
+ "affectedSubjects": { "$ref": "#/$defs/ids" },
105
+ "affectedScopes": { "$ref": "#/$defs/scopes" },
106
+ "resolutionKinds": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "$ref": "#/$defs/resolutionKind" } },
107
+ "promoted": { "const": false }
108
+ }
109
+ },
110
+ "baseline": {
111
+ "type": "object", "additionalProperties": false,
112
+ "required": ["expectedDigest", "actualDigest", "expectedLabel", "actualLabel"],
113
+ "properties": { "expectedDigest": { "$ref": "#/$defs/nullableDigest" }, "actualDigest": { "$ref": "#/$defs/nullableDigest" }, "expectedLabel": { "$ref": "#/$defs/nullableText" }, "actualLabel": { "$ref": "#/$defs/nullableText" } }
114
+ },
115
+ "invocation": {
116
+ "type": "object", "additionalProperties": false, "required": ["command", "args"],
117
+ "properties": { "command": { "$ref": "#/$defs/id" }, "args": { "type": "array", "items": { "type": "string" } } }
118
+ },
119
+ "externalAction": { "type": "object", "additionalProperties": false, "required": ["kind"], "properties": { "kind": { "type": "string" }, "affectedSourceIds": { "$ref": "#/$defs/ids" }, "affectedItemIds": { "$ref": "#/$defs/ids" }, "affectedPaths": { "$ref": "#/$defs/paths" } } },
120
+ "recoveryPreview": { "type": "object", "additionalProperties": false, "required": ["resolutionKind"], "properties": { "resolutionKind": { "$ref": "#/$defs/resolutionKind" }, "invocation": { "$ref": "#/$defs/invocation" }, "externalAction": { "$ref": "#/$defs/externalAction" }, "requiredHumanInputs": { "type": "array", "items": { "type": "string" } } } },
121
+ "resolutionContract": { "type": "object", "additionalProperties": false, "required": ["resolutionState", "resolutionKinds", "requiredHumanInputs", "nextActions", "requiredPostResolutionEvidence", "completionCriteria", "recomputeFromCurrentBaseline"], "properties": { "resolutionState": { "enum": ["needs-human-decision", "contract-action-required", "external-fix-required", "revalidation-required", "resolved", "deferred-open"] }, "resolutionKinds": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "$ref": "#/$defs/resolutionKind" } }, "requiredHumanInputs": { "type": "array", "uniqueItems": true, "items": { "type": "string" } }, "nextActions": { "type": "array", "minItems": 1, "items": { "$ref": "#/$defs/recoveryPreview" } }, "requiredPostResolutionEvidence": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "type": "string" } }, "completionCriteria": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "type": "string" } }, "recomputeFromCurrentBaseline": { "const": true } } },
122
+ "finding": {
123
+ "type": "object", "additionalProperties": false,
124
+ "required": ["code", "severity", "affectedSourceIds", "affectedItemIds", "affectedSubjects", "affectedScopes", "baseline", "blocksTask", "blocksExistingDelivery", "resolutionKinds", "recoveryPreviews", "humanRoles", "validateAfterResolution", "recomputeFromCurrentBaseline", "findingDigest", "resolutionContract"],
125
+ "properties": {
126
+ "code": { "$ref": "#/$defs/id" },
127
+ "severity": { "enum": ["attention", "conflict", "blocked"] },
128
+ "affectedSourceIds": { "$ref": "#/$defs/ids" },
129
+ "affectedItemIds": { "$ref": "#/$defs/ids" },
130
+ "affectedSubjects": { "$ref": "#/$defs/ids" },
131
+ "affectedScopes": { "$ref": "#/$defs/scopes" },
132
+ "baseline": { "$ref": "#/$defs/baseline" },
133
+ "blocksTask": { "type": "boolean" },
134
+ "blocksExistingDelivery": { "const": false },
135
+ "resolutionKinds": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "$ref": "#/$defs/resolutionKind" } },
136
+ "recoveryPreviews": { "type": "array", "minItems": 1, "items": { "$ref": "#/$defs/recoveryPreview" } },
137
+ "humanRoles": { "$ref": "#/$defs/ids" },
138
+ "validateAfterResolution": { "$ref": "#/$defs/ids" },
139
+ "recomputeFromCurrentBaseline": { "const": true },
140
+ "findingDigest": { "$ref": "#/$defs/digest" },
141
+ "resolutionContract": { "$ref": "#/$defs/resolutionContract" }
142
+ }
143
+ },
144
+ "resolutionOutcome": { "type": "object", "additionalProperties": false, "required": ["findingDigest", "resolutionKind", "resolutionState", "outcome", "completionCriteriaMet", "recomputedFromCurrentBaseline"], "properties": { "findingDigest": { "$ref": "#/$defs/digest" }, "resolutionKind": { "$ref": "#/$defs/resolutionKind" }, "resolutionState": { "enum": ["revalidation-required", "external-fix-required", "resolved", "deferred-open"] }, "outcome": { "enum": ["open", "deferred", "resolved", "rejected"] }, "completionCriteriaMet": { "type": "array", "uniqueItems": true, "items": { "type": "string" } }, "recomputedFromCurrentBaseline": { "const": true } } },
145
+ "guarantees": {
146
+ "type": "object", "additionalProperties": false, "required": ["projectContextVerified", "hostAsserted", "humanDecided"],
147
+ "properties": { "projectContextVerified": { "$ref": "#/$defs/ids" }, "hostAsserted": { "$ref": "#/$defs/ids" }, "humanDecided": { "$ref": "#/$defs/ids" } }
148
+ },
149
+ "boundaries": {
150
+ "type": "object", "additionalProperties": false,
151
+ "required": ["readOnly", "git", "ciClient", "network", "provider", "taskExecution", "automaticApproval", "automaticPromotion", "persistentQueue", "blocksExistingDelivery"],
152
+ "properties": { "readOnly": { "const": true }, "git": { "const": false }, "ciClient": { "const": false }, "network": { "const": false }, "provider": { "const": false }, "taskExecution": { "const": false }, "automaticApproval": { "const": false }, "automaticPromotion": { "const": false }, "persistentQueue": { "const": false }, "blocksExistingDelivery": { "const": false } }
153
+ }
154
+ }
155
+ }
@@ -9,8 +9,8 @@
9
9
  "schemaVersion": {"const": 1},
10
10
  "kind": {"const": "upgrade-assessment"},
11
11
  "product": {"type": "object", "additionalProperties": false, "required": ["name"], "properties": {"name": {"const": "frontend-project-context"}}},
12
- "fromVersion": {"enum": ["1.3.1", "1.4.0", "1.5.0"]},
13
- "targetVersion": {"const": "1.6.0"},
12
+ "fromVersion": {"enum": ["1.3.1", "1.4.0", "1.5.0", "1.6.0"]},
13
+ "targetVersion": {"const": "1.7.0"},
14
14
  "fromVersionEvidence": {"const": "host-asserted"},
15
15
  "manifestSchemaVersion": {"const": 2},
16
16
  "manifestDigest": {"$ref": "#/$defs/digest"},