object — Additional properties rejected
| Field | Required at this level | Type | Description and constraints |
|---|---|---|---|
schemaVersion |
Yes | Constant decision-pack-v2 |
— |
organizationId |
Yes | string |
Pattern: ^[a-zA-Z0-9][a-zA-Z0-9:_-]{2,159}$ |
packId |
Yes | string |
Pattern: ^decisionpack_[a-f0-9]{32}$ |
sequence |
Yes | string |
Pattern: ^[1-9][0-9]{0,17}$ |
resourceVersion |
Yes | string |
Pattern: ^0x[0-9a-f]{64}$ |
createdAt |
Yes | string |
Format: date-time; Pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$ |
recordedAt |
Yes | string |
Format: date-time; Pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$ |
state |
Yes | string |
Allowed: DRAFT, READY_FOR_REVIEW, DECISION_RECORDED, FOLLOW_UP_DUE, CLOSED, SUPERSEDED |
scope |
Yes | Constant RESEARCH_CANDIDATE_REVIEW |
— |
coverage |
Yes | Constant PARTIAL |
— |
question |
Yes | string |
Min length: 3; Max length: 2000 |
project |
Yes | object |
Additional properties rejected |
project.projectId |
Yes | string |
Pattern: ^project_[0-9a-f]{32}$ |
project.observationSequence |
Yes | string |
Pattern: ^[1-9][0-9]{0,17}$ |
project.resourceVersion |
Yes | string |
Pattern: ^0x[0-9a-f]{64}$ |
healthReport |
Yes | At least one of: object; null |
— |
healthReport.anyOf[1].question |
Yes | string |
Min length: 3; Max length: 2000 |
healthReport.anyOf[1].relation |
Yes | Constant SUPPORTING_EVIDENCE_ONLY |
— |
healthReport.anyOf[1].runId |
Yes | string |
Pattern: ^[a-zA-Z0-9][a-zA-Z0-9:_-]{2,159}$ |
healthReport.anyOf[1].resultVersion |
Yes | string |
Pattern: ^0x[0-9a-f]{64}$ |
healthReport.anyOf[1].captureHash |
Yes | string |
Pattern: ^0x[0-9a-f]{64}$ |
healthReport.anyOf[1].sourceCutoff |
Yes | string |
Format: date-time; Pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$ |
healthReport.anyOf[1].status |
Yes | string |
Allowed: PARTIAL, ABSTAINED |
assumptions |
Yes | object |
Additional properties rejected |
assumptions.version |
Yes | string |
Pattern: ^0x[0-9a-f]{64}$ |
assumptions.items |
Yes | Array of string |
Max items: 10 |
references |
Yes | object |
Additional properties rejected |
references.baselineStudy |
Yes | object |
Additional properties rejected |
references.baselineStudy.kind |
Yes | Constant RESEARCH_TRIAL |
— |
references.baselineStudy.runId |
Yes | string |
Pattern: ^[a-zA-Z0-9][a-zA-Z0-9:_-]{2,159}$ |
references.baselineStudy.protocolHash |
Yes | string |
Pattern: ^0x[0-9a-f]{64}$ |
references.baselineStudy.trialKey |
Yes | string |
Allowed: baseline, alternative-1, alternative-2, alternative-3 |
references.baselineStudy.inputHash |
Yes | string |
Pattern: ^0x[0-9a-f]{64}$ |
references.baselineStudy.artifactHash |
Yes | At least one of: string; null |
— |
references.baselineStudy.state |
Yes | string |
Allowed: QUEUED, RUNNING, COMPLETED, FAILED, CANCELLED |
references.baselineStudy.recordedAt |
Yes | At least one of: string; null |
— |
references.baselineStudy.failureCode |
Yes | At least one of: string; null |
— |
references.alternativeStudies |
Yes | Array of object |
Max items: 3 |
references.alternativeStudies[].kind |
Yes | Constant RESEARCH_TRIAL |
— |
references.alternativeStudies[].runId |
Yes | string |
Pattern: ^[a-zA-Z0-9][a-zA-Z0-9:_-]{2,159}$ |
references.alternativeStudies[].protocolHash |
Yes | string |
Pattern: ^0x[0-9a-f]{64}$ |
references.alternativeStudies[].trialKey |
Yes | string |
Allowed: baseline, alternative-1, alternative-2, alternative-3 |
references.alternativeStudies[].inputHash |
Yes | string |
Pattern: ^0x[0-9a-f]{64}$ |
references.alternativeStudies[].artifactHash |
Yes | At least one of: string; null |
— |
references.alternativeStudies[].state |
Yes | string |
Allowed: QUEUED, RUNNING, COMPLETED, FAILED, CANCELLED |
references.alternativeStudies[].recordedAt |
Yes | At least one of: string; null |
— |
references.alternativeStudies[].failureCode |
Yes | At least one of: string; null |
— |
references.proposalReview |
Yes | At least one of: object; null |
— |
references.proposalReview.anyOf[1].kind |
Yes | Constant CANDIDATE_REVIEW |
— |
references.proposalReview.anyOf[1].runId |
Yes | string |
Pattern: ^[a-zA-Z0-9][a-zA-Z0-9:_-]{2,159}$ |
references.proposalReview.anyOf[1].resultVersion |
Yes | string |
Pattern: ^0x[0-9a-f]{64}$ |
references.proposalReview.anyOf[1].captureHash |
Yes | string |
Pattern: ^0x[0-9a-f]{64}$ |
references.proposalReview.anyOf[1].contentHash |
Yes | string |
Pattern: ^0x[0-9a-f]{64}$ |
references.proposalReview.anyOf[1].reviewedPackResourceVersion |
Yes | string |
Pattern: ^0x[0-9a-f]{64}$ |
references.proposalReview.anyOf[1].sourceCutoff |
Yes | string |
Format: date-time; Pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$ |
references.proposalReview.anyOf[1].status |
Yes | Constant PARTIAL |
— |
references.proposalReview.anyOf[1].relation |
Yes | Constant ANALYSIS_REVIEW_ONLY |
— |
references.treasuryProjection |
Yes | null |
— |
references.commercialOrder |
Yes | null |
— |
unsupportedReferences |
Yes | At least one of: Array of No value allowed; Array of No value allowed | — |
decision |
Yes | At least one of: object; null |
— |
decision.anyOf[1].choice |
Yes | string |
Allowed: DO_NOTHING, REQUEST_MORE_EVIDENCE, TAKE_TO_SEPARATE_APPROVAL |
decision.anyOf[1].rationale |
Yes | string |
Min length: 1; Max length: 4000 |
decision.anyOf[1].recordedBy |
Yes | string |
Format: uuid; Pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ |
decision.anyOf[1].recordedAt |
Yes | string |
Format: date-time; Pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$ |
decision.anyOf[1].followUpAt |
Yes | At least one of: string; null |
— |
closure |
Yes | At least one of: object; null |
— |
closure.anyOf[1].note |
Yes | string |
Min length: 1; Max length: 4000 |
closure.anyOf[1].recordedBy |
Yes | string |
Format: uuid; Pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ |
closure.anyOf[1].recordedAt |
Yes | string |
Format: date-time; Pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$ |
supersededBy |
Yes | At least one of: string; null |
— |
financialAuthority |
Yes | Constant false |
— |
publicationAuthority |
Yes | Constant false |
— |
contentHash |
Yes | string |
Pattern: ^0x[0-9a-f]{64}$ |
sourceAssociation |
Yes | object |
Additional properties rejected |
sourceAssociation.relation |
Yes | Constant USER_SELECTED_RESEARCH_CONTEXT |
— |
sourceAssociation.assertedBy |
Yes | string |
Format: uuid; Pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ |
sourceAssociation.assertedAt |
Yes | string |
Format: date-time; Pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$ |
sourceAssociation.ownershipVerified |
Yes | Constant false |
— |
sourceAssociation.quoteUnitsVerified |
Yes | Constant false |
— |
research |
Yes | object |
Additional properties rejected |
research.runId |
Yes | string |
Pattern: ^[a-zA-Z0-9][a-zA-Z0-9:_-]{2,159}$ |
research.resultVersion |
Yes | string |
Pattern: ^0x[0-9a-f]{64}$ |
research.protocolHash |
Yes | string |
Pattern: ^0x[0-9a-f]{64}$ |
research.sourceCutoff |
Yes | string |
Format: date-time; Pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$ |
research.issuerIntent |
Yes | object |
Additional properties rejected |
research.issuerIntent.id |
Yes | string |
Pattern: ^[a-zA-Z0-9][a-zA-Z0-9:_-]{2,159}$ |
research.issuerIntent.resourceVersion |
Yes | string |
Pattern: ^0x[0-9a-f]{64}$ |
research.issuerIntent.artifactHash |
Yes | string |
Pattern: ^0x[0-9a-f]{64}$ |
research.question |
Yes | string |
Min length: 3; Max length: 2000 |
research.relation |
Yes | Constant SUPPORTING_EVIDENCE_ONLY |
— |
research.objective |
Yes | object |
Additional properties rejected |
research.objective.metric |
Yes | string |
Allowed: ENDING_VALUE_P50, MINIMUM_DEPTH_P5, GAS_COST_P50, DRAWDOWN_P95, RESERVE_BREACH_PROBABILITY |
research.objective.direction |
Yes | string |
Allowed: MAXIMIZE, MINIMIZE |
research.comparisonStatus |
Yes | string |
Allowed: BASELINE_UNAVAILABLE, COMPLETE, PARTIAL |
research.quote |
Yes | object |
Additional properties rejected |
research.quote.symbol |
Yes | string |
Max length: 256 |
research.quote.assetId |
Yes | null |
— |
research.quote.decimals |
Yes | null |
— |
research.quote.unit |
Yes | Constant ISSUER_INTENT_QUOTE_ATOMIC |
— |
research.limitations |
Yes | Array of string |
Min items: 6; Max items: 6 |
research.trials |
Yes | Array of object |
Min items: 1; Max items: 4 |
research.trials[].reference |
Yes | object |
Additional properties rejected |
research.trials[].reference.kind |
Yes | Constant RESEARCH_TRIAL |
— |
research.trials[].reference.runId |
Yes | string |
Pattern: ^[a-zA-Z0-9][a-zA-Z0-9:_-]{2,159}$ |
research.trials[].reference.protocolHash |
Yes | string |
Pattern: ^0x[0-9a-f]{64}$ |
research.trials[].reference.trialKey |
Yes | string |
Allowed: baseline, alternative-1, alternative-2, alternative-3 |
research.trials[].reference.inputHash |
Yes | string |
Pattern: ^0x[0-9a-f]{64}$ |
research.trials[].reference.artifactHash |
Yes | At least one of: string; null |
— |
research.trials[].reference.state |
Yes | string |
Allowed: QUEUED, RUNNING, COMPLETED, FAILED, CANCELLED |
research.trials[].reference.recordedAt |
Yes | At least one of: string; null |
— |
research.trials[].reference.failureCode |
Yes | At least one of: string; null |
— |
research.trials[].label |
Yes | string |
Min length: 1; Max length: 160 |
research.trials[].comparisonStatus |
Yes | string |
Allowed: PENDING, FAILED, CANCELLED, INVALID, INCOMPATIBLE, BASELINE_UNAVAILABLE, COMPARABLE |
research.trials[].reasons |
Yes | Array of string |
Max items: 16 |
research.trials[].warningCount |
Yes | integer |
Minimum: 0; Maximum: 64 |
research.trials[].selected |
Yes | At least one of: object; null |
— |
research.trials[].selected.anyOf[1].variant |
Yes | string |
Allowed: CURRENT, RECOMMENDED, CONSERVATIVE, CAPITAL_EFFICIENT, EMERGENCY |
research.trials[].selected.anyOf[1].eligible |
Yes | boolean |
— |
research.trials[].selected.anyOf[1].ineligibilityReasons |
Yes | Array of string |
Max items: 4 |
candidate |
Yes | object |
Additional properties rejected |
candidate.selectedVariant |
Yes | string |
Allowed: CURRENT, RECOMMENDED, CONSERVATIVE, CAPITAL_EFFICIENT, EMERGENCY |
candidate.capitalPlan |
Yes | object |
Additional properties rejected |
candidate.capitalPlan.kind |
Yes | string |
Allowed: CURRENT, RECOMMENDED, CONSERVATIVE, CAPITAL_EFFICIENT, EMERGENCY |
candidate.capitalPlan.requiredCapitalQuote |
Yes | string |
Pattern: ^-?(0|[1-9][0-9]{0,77})$ |
candidate.capitalPlan.deployableCapitalQuote |
Yes | string |
Pattern: ^-?(0|[1-9][0-9]{0,77})$ |
candidate.capitalPlan.stableReserveQuote |
Yes | string |
Pattern: ^-?(0|[1-9][0-9]{0,77})$ |
candidate.capitalPlan.emergencyReserveQuote |
Yes | string |
Pattern: ^-?(0|[1-9][0-9]{0,77})$ |
candidate.capitalPlan.rangeWidthPips |
Yes | integer |
Minimum: 0; Maximum: 1000000 |
candidate.capitalPlan.expectedSlippagePips |
Yes | integer |
Minimum: 0; Maximum: 1000000 |
candidate.capitalPlan.expectedFeeIncomeLowQuote |
Yes | string |
Pattern: ^-?(0|[1-9][0-9]{0,77})$ |
candidate.capitalPlan.expectedFeeIncomeHighQuote |
Yes | string |
Pattern: ^-?(0|[1-9][0-9]{0,77})$ |
candidate.capitalPlan.inventoryExposurePips |
Yes | integer |
Minimum: 0; Maximum: 1000000 |
candidate.capitalPlan.maximumDailyTurnoverPips |
Yes | integer |
Minimum: 0; Maximum: 1000000 |
candidate.capitalPlan.satisfiesIntent |
Yes | boolean |
— |
candidate.capitalPlan.reasons |
Yes | Array of string |
Max items: 64 |
candidate.baselineEligible |
Yes | boolean |
— |
candidate.status |
Yes | string |
Allowed: BLOCKED_BASELINE_UNAVAILABLE, BLOCKED_BASELINE_INELIGIBLE, INCOMPLETE_ALTERNATIVES, INELIGIBLE_IN_ALTERNATIVES, ELIGIBLE_IN_CAPTURED_SCENARIOS |
candidate.rankingScope |
Yes | Constant WITHIN_SCENARIO_VARIANTS |
— |
Nested required fields apply when their parent object or matching union branch is present. Named types link to their complete schema.
Exact definition: #/components/schemas/ResearchCandidateDecisionPack in the OpenAPI contract.