SCP Core Spec
Version: v1.0 (Draft) Status: Draft Authoritative: Yes
Purpose
This document defines the normative lifecycle and state semantics of SCP.
It answers:
- how tasks move through the protocol
- how challenge and settlement interact
- what settlement candidate and finalized contexts mean
- what a conforming contract boundary must preserve
Task Lifecycle
The canonical task lifecycle is:
acceptedresolvingdispatchedverifyingawaiting_settlementcompletedchallengedrejectedtimed_out
These states define protocol meaning, not a particular process layout.
Challenge Lifecycle
The canonical challenge lifecycle is:
openedreviewingconfirmednot_confirmedapprovedclosed_without_penaltypenalty_recordedreopened
Challenge evidence must be replayable and linked to the relevant task, verification, and settlement context.
Settlement Lifecycle
The canonical settlement lifecycle is:
collectingverifying_inputscandidate_readyfinalizingfinalizedfailed
Settlement Candidate Context
Candidate context is used for:
- challenge opening
- settlement readiness
- fraud evidence linkage
Finalized Settlement Context
Finalized context is used for:
- reward finalization
- protocol audit
- payout preparation
- irreversible accounting references
Determinism and Replay
Determinism requires:
- fixed object semantics
- fixed sort and hash rules
- stable epoch mapping
- version-aware parameter resolution
- replayable evidence and accounting artifacts
Parameter resolution must be a deterministic function of:
epoch_idsemantic_versionpolicy_version
Epoch Model
Epoch is a stable window identifier used to group protocol events into a replayable control context.
It is not the prerequisite for raw data upload or for the mere existence of a task.
It primarily governs:
- settlement windows
- reward calculation windows
- payout batching windows
- local attribute candidate aggregation windows
- replay partitioning where batching matters
It does not primarily govern:
- raw data upload into Vault
- whether a task can be formed
- whether semantic resolution can begin
- whether a single authorized execution can start
Core Epoch Fields
An epoch definition should preserve at least:
epoch_idopen_atclose_atstatussemantic_version_setpolicy_version_set- settlement scope metadata
- reward scope metadata
- candidate aggregation scope metadata
Epoch States
The canonical epoch state model is:
openclosingclosed
At most one epoch should normally be open for a given governed scope.
Open Condition
A new epoch opens when:
- the previous epoch has reached
closed, or - the system is creating the initial bootstrap epoch
An open epoch is the active window for assigning later settlement, reward, and aggregation scope.
Closing Triggers
An open epoch should move to closing when one or more of the following occurs:
- the configured maximum time window is reached
- task, verification, settlement, or aggregation volume reaches the configured threshold
- governance or policy requires a window boundary, such as version transition or controlled maintenance
This is a mixed trigger model:
- time may close the window
- capacity may close the window
- governance may close the window
Close Condition
An epoch moves from closing to closed when:
- the settlement scope for that epoch is frozen
- the reward scope for that epoch is frozen
- the candidate aggregation scope for that epoch is frozen
- unresolved items have either been resolved for the current epoch or explicitly deferred under policy
Once an epoch is closed:
- new events must not be newly assigned to it
- replay should reconstruct the same epoch membership
- downstream reward, payout, and candidate aggregation can proceed against a stable window boundary
Layer-Level Norms
The protocol requires the following logical responsibilities:
- Application validates client intent and produces protocol-valid tasks
- Coordination orchestrates task progression and settlement handoff
- Semantic resolves meaning under
semantic_version - Data preserves canonical records and
Commitmentreferences - Execution performs authorized computation
- Verification validates correctness and integrity before settlement
- Settlement anchors verified state and publishes finalized accounting context
These are protocol roles. They do not mandate one process per role.
Seven Protocol Layers

The seven layers remain a core protocol abstraction in SCP.
They define semantic boundaries between responsibilities, not a mandatory deployment topology.
1. Application Layer
Purpose:
- validate client intent
- validate caller identity and authorization context
- produce protocol-valid
TaskEnvelopeobjects
Protocol inputs:
- caller context
- authorization context
- query intent
- requested policy scope
Protocol outputs:
TaskEnvelope- client-visible acceptance or rejection status
- protocol-visible validation errors
Protocol invariants:
- deterministic rejection for invalid input
- no private plaintext leakage through intake responses
- no task admission without required replay tuple context
2. Coordination Layer
Purpose:
- orchestrate task progression
- manage handoff between semantic, execution, verification, and settlement stages
- track canonical protocol state transitions
Protocol inputs:
- admitted tasks
- semantic context
- execution results
- verification decisions
- challenge events
Protocol outputs:
- execution assignments
- tracked task state
- settlement submissions
- challenge openings or state transitions
Protocol invariants:
- no bypass around verification before settlement finalization
- no out-of-order state transitions
- no hidden transition that escapes protocol audit
3. Semantic Layer
Purpose:
- resolve canonical meaning under
semantic_version - bind tasks to registry-compatible semantic references
- determine compatibility before execution proceeds
Protocol inputs:
- canonicalized semantic candidates
- registry state
semantic_version
Protocol outputs:
SemanticResolutionResult- compatibility decisions
- registry-compatible references
Protocol invariants:
- deterministic semantic interpretation
- monotonic
Scope - no execution on unresolved or incompatible semantic context
4. Data Layer
Purpose:
- preserve canonical private records
- expose authorized record material for execution
- maintain cryptographic linkage through
Commitmentreferences
Protocol inputs:
- canonical records
- authorization context
- execution-bound access requests
- key context where applicable
Protocol outputs:
- encrypted storage objects
Commitmentreferences- authorized record material
Protocol invariants:
Commitment = SHA256(Serialize(CR))- no plaintext escape outside authorized Vault or TEE boundaries
- auditable access linkage between task, authorization, and record usage
5. Execution Layer
Purpose:
- perform authorized computation
- produce deterministic, proof-linked execution output
- preserve auditable data access context
Protocol inputs:
ExecutionAssignment- semantic context
- epoch context
- authorized record material
Protocol outputs:
ExecutionResultBundle- transcript references
- proof references where required
Protocol invariants:
- deterministic execution under equal inputs and replay tuple
- no unauthorized cross-Vault access
- no result admitted without auditable execution context
6. Verification Layer
Purpose:
- validate correctness and integrity before settlement
- accept, reject, or challenge execution output
- preserve replayable evidence
Protocol inputs:
- result bundles
- proof references
- replay context
- evidence inputs
Protocol outputs:
VerificationDecision- evidence references
- accepted, challenged, or rejected verdicts
Protocol invariants:
- no settlement finalization without accepted verification
- challenge evidence must be replayable
- verification must not rewrite execution history
7. Settlement Layer
Purpose:
- anchor verified state
- assemble root context
- publish candidate and finalized accounting context
Protocol inputs:
- accepted verification outputs
- root inputs
- settlement metadata
- challenge state relevant to finalization
Protocol outputs:
- settlement candidate context
- finalized settlement context
- settlement events
SettlementRoot
Protocol invariants:
- deterministic root composition
- append-only finalized history
- candidate context may support challenge opening, while finalized context is required for irreversible accounting references
Domain Model

Domain is the semantic namespace and governance boundary within which canonical meaning is defined.
It exists so that:
- semantic interpretation has a stable namespace
- canonical attributes have an explicit ownership boundary
- compatibility and deprecation are governed within a declared semantic scope
Domain Layering
The protocol recognizes the following semantic layering:
global domain: shared protocol-wide semantic governance boundarydomain family: a higher-level namespace grouping related domainsconcrete domain: the direct namespace in which canonical attributes are registered and resolved- optional
sub-domain: a narrower namespace where policy explicitly allows finer partitioning
Implementations may realize these layers differently, but protocol semantics must preserve the same hierarchy.
Domain Responsibilities
A domain is responsible for:
- defining the namespace in which canonical attributes live
- constraining compatibility and evolution under
semantic_version - determining whether cross-domain references are allowed, rejected, or mediated
- providing the semantic boundary against which resolution and governance decisions are evaluated
Core Domain Fields
A protocol-visible domain definition should preserve at least:
domain_idparent_domain_idwhere applicabledomain_versionsemantic_versionstatus
Domain Status
The canonical domain status model is:
proposedregisteredactivedeprecatedretired
Only active domains, and deprecated domains where compatibility policy allows, may participate in new semantic resolution.
Canonical Attribute Model

CanonicalAttribute is a protocol object representing a standardized semantic attribute within a declared domain.
It is not free-floating. Every canonical attribute belongs to a domain.
Canonical Attribute Identity
Protocol identity should preserve at least:
attribute_iddomain_idsemantic_version
Where lifecycle or compatibility matters, the object should also preserve:
scopestatuseffective_fromdeprecated_fromwhere applicableretired_fromwhere applicablesupersedesor replacement reference where applicable
Canonical Attribute Rules
The protocol requires:
- every canonical attribute to belong to exactly one declared domain at a given semantic point
- attribute compatibility to be interpreted relative to domain and
semantic_version - replacement to be explicit rather than implicit when an attribute is superseded
- semantic resolution to determine domain before selecting canonical attribute meaning
Canonical Attribute Lifecycle
The canonical lifecycle is:
proposedregisteredactivedeprecatedretiredsuperseded
Lifecycle Meaning
proposed: recognized by governance workflow but not protocol-usableregistered: recorded in the namespace but not yet active for the target semantic windowactive: eligible for semantic resolution and new task usedeprecated: still compatibility-visible but not preferred for new semantic authoringretired: not eligible for new task resolutionsuperseded: replaced by an explicit successor attribute under governed compatibility rules
Lifecycle Rules
The protocol requires:
- only
active, and policy-permitteddeprecated, attributes may resolve for new task admission retiredattributes must not be selected for new task resolution- lifecycle transitions to be bound to declared semantic governance and
semantic_version supersededattributes to point explicitly to the replacement path where one exists- equal task input and equal
semantic_versionto produce equal attribute resolution outcomes
Canonical Attribute Resolution Flow
For protocol purposes, canonical attribute resolution follows this logical flow:
- determine the target domain from task scope, semantic references, and policy context
- validate that the domain is eligible under the requested
semantic_version - identify candidate canonical attributes within that domain
- reject candidates whose lifecycle state is not resolution-eligible
- apply compatibility and replacement rules
- produce deterministic semantic references in
SemanticResolutionResult
Resolution Consequences
The protocol requires:
- unresolved domain or attribute state to block progression into execution
- ambiguous domain or attribute mapping to be rejected rather than guessed
- domain retirement or attribute retirement to affect only the semantic windows governed by the relevant versioning rules
- replay of the same task under the same semantic inputs to reconstruct the same domain and canonical attribute selection
Semantic Attribute Layers
For protocol design purposes, semantic objects may appear in three related layers:
CanonicalAttribute, which defines protocol-recognized semantic truthQueryAttribute, which defines governed query projections for audience selection, retrieval, and related query workLocalAttribute, which remains inside a Vault or local semantic boundary until policy allows further projection or promotion
These layers are related, but they do not have the same purpose.
Layer Responsibilities
The protocol expects the layers to remain distinct:
- canonical attributes answer what a record means under protocol truth
- query attributes answer which governed query signals may be projected for cross-Vault retrieval, audience selection, or related governed query workflows
- local attributes answer which unresolved or local-only semantics may remain private while still supporting future evolution
Layer Ordering
The normal semantic ordering is:
- local or raw semantic material may first appear inside a Vault
- canonical resolution may determine stable protocol meaning for the task
- query projections may be derived from canonical or policy-permitted local material for governed retrieval workflows
This means a field may be useful for query, but still remain canonical-first in semantic meaning.
Query Attribute Model
QueryAttribute is a governed semantic object representing a query-safe projection derived from protected records for audience selection, eligibility filtering, retrieval, or related governed query work.
It is not a replacement for CanonicalAttribute, and it does not redefine protocol truth.
Query Attribute Identity
Protocol identity should preserve at least:
query_attribute_iddomain_idsemantic_version
Where governance, privacy, or compatibility matters, the object should also preserve:
statusderivation_rule_refquery_granularityprivacy_classallowed_usage_scope
Query Attribute Rules
The protocol requires:
- every query attribute to belong to a declared domain or governed query namespace
- query projections to be derived under explicit policy rather than inferred silently
- query attributes to remain distinguishable from canonical semantic truth
- query projection compatibility to remain version-aware under
semantic_version - reconstructable raw private values not to be emitted merely because a query projection exists
Query Attribute Lifecycle
The canonical lifecycle is:
proposedregisteredactiverestricteddeprecatedretired
Lifecycle meaning:
proposed: recognized for governance review but not query-usableregistered: defined in the namespace but not yet active for the target query windowactive: eligible for governed query projection and retrieval workflowsrestricted: query-usable only under narrower policy or actor scopedeprecated: still compatibility-visible but not preferred for new query designretired: no longer eligible for new projection or query use
Query Projection Constraints
The protocol requires:
- projection to occur downstream from Vault privacy boundaries
- query-safe projections to preserve auditable linkage back to source commitments or protected records
- query indexes to carry only the minimum governed signal needed for retrieval
- audience-selection or campaign-eligibility work not to rely on silently changing query semantics
- replay under the same semantic and policy inputs to reconstruct the same query interpretation
Local Attribute Pool
LocalAttribute is a local semantic artifact that has not yet been admitted as a protocol-recognized canonical attribute.
It may exist inside a Vault or local semantic boundary, but it is not by itself a cross-protocol semantic truth.
Local Pool Purpose
The local attribute pool exists so that implementations can:
- accumulate unresolved or locally meaningful attributes
- measure frequency, stability, and mapping confidence over time
- produce privacy-preserving candidate signals for later promotion
Local Pool Rules
The protocol requires:
- local attributes to remain local until promotion preconditions are met
- raw private values or reconstructable sensitive semantic material not to be emitted directly for cross-Vault aggregation
- local pool records to preserve enough metadata to support later audit and promotion review
Minimum Local Signals
A local pool entry should preserve at least:
- local attribute identifier
- candidate domain hint
- local occurrence frequency
- local stability indicators across epochs
- mapping confidence against existing canonical attributes where applicable
- privacy-safe feature summary or evidence summary
Cross-Vault Candidate Aggregation
The protocol allows local pools to contribute to a cross-Vault candidate pool, but only through privacy-preserving candidate summaries.
Aggregation Window
The default promotion aggregation window is:
- every
10epochs for regular candidate formation
Policy may allow:
- every
5epochs for high-activity domains - exceptional governance-triggered proposal outside the normal window
Per-epoch local accumulation is allowed, but per-epoch global promotion is not the default protocol path.
Aggregation Output
Cross-Vault aggregation must produce:
LocalAttributeCandidatesummaries- candidate domain binding
- coverage, frequency, and stability indicators
- compatibility, conflict, or alias signals relative to existing canonical attributes
It must not directly produce an active canonical attribute.
Aggregation Constraints
The protocol requires:
- cross-Vault aggregation to exchange candidate summaries rather than raw private local attributes
- candidate formation to be auditable at the evidence-summary level
- aggregation to remain downstream from Vault privacy boundaries
Promotion to Canonical Attribute
The canonical promotion path is:
local attributelocal attribute poolLocalAttributeCandidateproposed canonical attributeregisteredactive
Promotion Preconditions
A candidate should not be promoted unless protocol policy confirms at least:
- sufficient cross-Vault coverage or justified governance exception
- stability across the required epoch window
- clear domain binding
- no unresolved conflict with existing canonical attributes, or an explicit alias/replacement declaration
- replayable evidence summary supporting the promotion decision
Promotion Consequences
The protocol requires:
- local attributes to remain local when promotion thresholds are not met
- candidate aggregation to be a proposal mechanism, not an automatic semantic truth generator
- new canonical attributes to enter the normal lifecycle of
proposed -> registered -> active - conflict resolution to be governed explicitly rather than inferred silently
Contract Boundary
Conforming implementations must expose protocol coverage for at least:
- task and semantic messages
- execution and verification messages
- settlement messages
- reward records
- payout instructions and events
The current canonical source of truth is the Markdown specification set. Machine-readable schema artifacts are implementation deliverables defined by SCS.
Canonical Error Families
Protocol-visible error families include:
SCHEMA_*VERSION_*AUTH_*POLICY_*EXECUTION_*PROOF_*VERIFY_*SETTLEMENT_*REWARD_*PAYOUT_*GOVERNANCE_*INTERNAL_*