spec: finalize wealth-ledger SDD migration
Specs security / security (push) Successful in 8s
Specs verify / verify (push) Successful in 11s
Conventional commits / commits (pull_request) Successful in 12s
Specs security / security (pull_request) Successful in 7s
Specs verify / verify (pull_request) Successful in 11s
Specs security / security (push) Successful in 8s
Specs verify / verify (push) Successful in 11s
Conventional commits / commits (pull_request) Successful in 12s
Specs security / security (pull_request) Successful in 7s
Specs verify / verify (pull_request) Successful in 11s
This commit is contained in:
+54
@@ -0,0 +1,54 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "reconcile-hourly-investment-sync/investment-resource-envelope.schema.json",
|
||||
"title": "Target investment resource envelope",
|
||||
"description": "Target cross-system semantics only; the backend-generated OpenAPI remains the executable HTTP contract.",
|
||||
"type": "object",
|
||||
"required": ["data", "meta"],
|
||||
"properties": {
|
||||
"data": {
|
||||
"description": "The last confirmed complete result, an allowed incomplete ledger first-load result, or null when no complete result is available."
|
||||
},
|
||||
"meta": { "$ref": "#/$defs/resourceMeta" },
|
||||
"sync": { "$ref": "#/$defs/hourlyWalk" }
|
||||
},
|
||||
"$defs": {
|
||||
"resourceMeta": {
|
||||
"type": "object",
|
||||
"required": ["freshness", "completeness", "lastSuccessfulAt", "lastAttempt", "availability"],
|
||||
"properties": {
|
||||
"freshness": { "enum": ["fresh", "stale", "unknown"] },
|
||||
"completeness": { "enum": ["complete", "incomplete"] },
|
||||
"lastSuccessfulAt": { "type": ["string", "null"], "format": "date-time" },
|
||||
"lastAttempt": { "$ref": "#/$defs/attempt" },
|
||||
"availability": { "enum": ["available", "initial-loading", "temporarily-unavailable", "connection-unavailable"] }
|
||||
}
|
||||
},
|
||||
"attempt": {
|
||||
"type": "object",
|
||||
"required": ["state", "startedAt", "finishedAt", "problems"],
|
||||
"properties": {
|
||||
"state": { "enum": ["none", "running", "succeeded", "partial", "failed"] },
|
||||
"startedAt": { "type": ["string", "null"], "format": "date-time" },
|
||||
"finishedAt": { "type": ["string", "null"], "format": "date-time" },
|
||||
"problems": { "type": "array", "items": { "$ref": "#/$defs/problemSection" } }
|
||||
}
|
||||
},
|
||||
"hourlyWalk": {
|
||||
"description": "Present only on Accounts; absent from other resource envelopes.",
|
||||
"oneOf": [
|
||||
{ "type": "null" },
|
||||
{ "$ref": "#/$defs/attempt" }
|
||||
]
|
||||
},
|
||||
"problemSection": {
|
||||
"type": "object",
|
||||
"required": ["section", "accountId", "errorCode"],
|
||||
"properties": {
|
||||
"section": { "enum": ["membership", "portfolio", "operations", "events"] },
|
||||
"accountId": { "type": ["string", "null"] },
|
||||
"errorCode": { "type": ["string", "null"] }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user