fluid-core/internal/contract/revision_descriptor_gen.go
tegwick 76912adef8
Some checks failed
ci / build (push) Failing after 1m6s
Generate contract types, pin fixtures to spec, add build and ADRs
Completes FLUID-WP-0002. The record types in internal/contract are
generated from schemas/ by a dependency-free generator; fixtures
transcribed from the spec's worked examples validate against those
schemas and round-trip through the generated types with
DisallowUnknownFields, so a spec change that misses the schemas fails
CI rather than drifting silently.

Adds identifier prefix helpers, Makefile, GitHub Actions, and five ADRs
recording the Go choice, out-of-process attachment, the wire contract as
boundary, the evidence store, and revision identity.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014KmVxhJ35tCo7rE7UnLwWu

Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 1116572@bnt-lap001
Assistant-Session: 8ba9bb93-a72a-4883-b189-2499cce5c400
2026-09-04 02:03:12 +02:00

215 lines
8.9 KiB
Go

// Code generated by tools/schemagen. DO NOT EDIT.
// Source: schemas/. Regenerate with `make generate`.
package contract
type RevisionContractType string
const (
RevisionContractTypeOpenapi RevisionContractType = "openapi"
RevisionContractTypeGraphql RevisionContractType = "graphql"
RevisionContractTypeProtobuf RevisionContractType = "protobuf"
RevisionContractTypeAsyncapi RevisionContractType = "asyncapi"
RevisionContractTypeJsonschema RevisionContractType = "jsonschema"
RevisionContractTypeCustom RevisionContractType = "custom"
)
// Valid reports whether v is a defined RevisionContractType.
func (v RevisionContractType) Valid() bool {
switch v {
case RevisionContractTypeOpenapi, RevisionContractTypeGraphql, RevisionContractTypeProtobuf, RevisionContractTypeAsyncapi, RevisionContractTypeJsonschema, RevisionContractTypeCustom:
return true
}
return false
}
type RevisionContract struct {
Digest Digest `json:"digest" yaml:"digest"`
// Where the contract artifact can be fetched.
Source string `json:"source,omitempty" yaml:"source,omitempty"`
Type RevisionContractType `json:"type" yaml:"type"`
}
// Which interface evolution intent governs this revision. Required: a revision with
// no governing intent cannot be audited.
type RevisionIntent struct {
Digest *Digest `json:"digest,omitempty" yaml:"digest,omitempty"`
Version string `json:"version" yaml:"version"`
}
type RevisionPolicyCompatibility string
const (
RevisionPolicyCompatibilityBackwardCompatible RevisionPolicyCompatibility = "backward_compatible"
RevisionPolicyCompatibilityForwardCompatible RevisionPolicyCompatibility = "forward_compatible"
RevisionPolicyCompatibilityAdditive RevisionPolicyCompatibility = "additive"
RevisionPolicyCompatibilityBehavioralChange RevisionPolicyCompatibility = "behavioral_change"
RevisionPolicyCompatibilityBreaking RevisionPolicyCompatibility = "breaking"
RevisionPolicyCompatibilityMigrationOnly RevisionPolicyCompatibility = "migration_only"
RevisionPolicyCompatibilityInternalOnly RevisionPolicyCompatibility = "internal_only"
)
// Valid reports whether v is a defined RevisionPolicyCompatibility.
func (v RevisionPolicyCompatibility) Valid() bool {
switch v {
case RevisionPolicyCompatibilityBackwardCompatible, RevisionPolicyCompatibilityForwardCompatible, RevisionPolicyCompatibilityAdditive, RevisionPolicyCompatibilityBehavioralChange, RevisionPolicyCompatibilityBreaking, RevisionPolicyCompatibilityMigrationOnly, RevisionPolicyCompatibilityInternalOnly:
return true
}
return false
}
type RevisionPolicyPolicyCheck string
const (
RevisionPolicyPolicyCheckPending RevisionPolicyPolicyCheck = "pending"
RevisionPolicyPolicyCheckPassed RevisionPolicyPolicyCheck = "passed"
RevisionPolicyPolicyCheckFailed RevisionPolicyPolicyCheck = "failed"
)
// Valid reports whether v is a defined RevisionPolicyPolicyCheck.
func (v RevisionPolicyPolicyCheck) Valid() bool {
switch v {
case RevisionPolicyPolicyCheckPending, RevisionPolicyPolicyCheckPassed, RevisionPolicyPolicyCheckFailed:
return true
}
return false
}
type RevisionPolicySecurityCheck string
const (
RevisionPolicySecurityCheckPending RevisionPolicySecurityCheck = "pending"
RevisionPolicySecurityCheckPassed RevisionPolicySecurityCheck = "passed"
RevisionPolicySecurityCheckFailed RevisionPolicySecurityCheck = "failed"
)
// Valid reports whether v is a defined RevisionPolicySecurityCheck.
func (v RevisionPolicySecurityCheck) Valid() bool {
switch v {
case RevisionPolicySecurityCheckPending, RevisionPolicySecurityCheckPassed, RevisionPolicySecurityCheckFailed:
return true
}
return false
}
type RevisionPolicy struct {
Compatibility RevisionPolicyCompatibility `json:"compatibility" yaml:"compatibility"`
PolicyCheck *RevisionPolicyPolicyCheck `json:"policy_check,omitempty" yaml:"policy_check,omitempty"`
RollbackTo *RevisionID `json:"rollback_to,omitempty" yaml:"rollback_to,omitempty"`
SecurityCheck RevisionPolicySecurityCheck `json:"security_check" yaml:"security_check"`
}
type RevisionRouting struct {
// Empty or absent means all cohorts are eligible.
EligibleCohorts []CohortID `json:"eligible_cohorts,omitempty" yaml:"eligible_cohorts,omitempty"`
// Ceiling the router enforces regardless of what a routing policy asks for.
MaxTrafficShare *UnitInterval `json:"max_traffic_share,omitempty" yaml:"max_traffic_share,omitempty"`
}
type RevisionRuntimeCircuitBreaker struct {
FailureThreshold *int64 `json:"failure_threshold,omitempty" yaml:"failure_threshold,omitempty"`
ResetAfterMS *int64 `json:"reset_after_ms,omitempty" yaml:"reset_after_ms,omitempty"`
}
type RevisionRuntimeRetry struct {
BackoffMS *int64 `json:"backoff_ms,omitempty" yaml:"backoff_ms,omitempty"`
MaxAttempts *int64 `json:"max_attempts,omitempty" yaml:"max_attempts,omitempty"`
RetryOn []string `json:"retry_on,omitempty" yaml:"retry_on,omitempty"`
}
// Out-of-process attachment: the adapter is an upstream reached over the network,
// so it may be implemented in any language.
type RevisionRuntime struct {
CircuitBreaker *RevisionRuntimeCircuitBreaker `json:"circuit_breaker,omitempty" yaml:"circuit_breaker,omitempty"`
Digest *Digest `json:"digest,omitempty" yaml:"digest,omitempty"`
Image string `json:"image,omitempty" yaml:"image,omitempty"`
Retry *RevisionRuntimeRetry `json:"retry,omitempty" yaml:"retry,omitempty"`
TimeoutMS *int64 `json:"timeout_ms,omitempty" yaml:"timeout_ms,omitempty"`
// Base URL of the adapter process serving this revision.
Upstream string `json:"upstream" yaml:"upstream"`
}
type RevisionSignatureAlgorithm string
const (
RevisionSignatureAlgorithmEd25519 RevisionSignatureAlgorithm = "ed25519"
)
// Valid reports whether v is a defined RevisionSignatureAlgorithm.
func (v RevisionSignatureAlgorithm) Valid() bool {
switch v {
case RevisionSignatureAlgorithmEd25519:
return true
}
return false
}
// The router accepts only signed published descriptors (ArchitectureBlueprint.md
// section 35). The signature covers the canonical form of this document with the
// signature member removed.
type RevisionSignature struct {
Algorithm RevisionSignatureAlgorithm `json:"algorithm" yaml:"algorithm"`
KeyID string `json:"key_id" yaml:"key_id"`
SignedAt *Timestamp `json:"signed_at,omitempty" yaml:"signed_at,omitempty"`
Value string `json:"value" yaml:"value"`
}
// The router refuses to route to created, failed or retired revisions
// (ArchitectureBlueprint.md section 5.3).
type RevisionState string
const (
RevisionStateCreated RevisionState = "created"
RevisionStateVerified RevisionState = "verified"
RevisionStateExperiment RevisionState = "experiment"
RevisionStateCandidate RevisionState = "candidate"
RevisionStateStable RevisionState = "stable"
RevisionStateDeprecated RevisionState = "deprecated"
RevisionStateRetired RevisionState = "retired"
)
// Valid reports whether v is a defined RevisionState.
func (v RevisionState) Valid() bool {
switch v {
case RevisionStateCreated, RevisionStateVerified, RevisionStateExperiment, RevisionStateCandidate, RevisionStateStable, RevisionStateDeprecated, RevisionStateRetired:
return true
}
return false
}
type Revision struct {
Contract RevisionContract `json:"contract" yaml:"contract"`
ID RevisionID `json:"id" yaml:"id"`
// Which interface evolution intent governs this revision. Required: a revision
// with no governing intent cannot be audited.
Intent RevisionIntent `json:"intent" yaml:"intent"`
Interface InterfaceID `json:"interface" yaml:"interface"`
Policy RevisionPolicy `json:"policy" yaml:"policy"`
Routing *RevisionRouting `json:"routing,omitempty" yaml:"routing,omitempty"`
// Out-of-process attachment: the adapter is an upstream reached over the network,
// so it may be implemented in any language.
Runtime RevisionRuntime `json:"runtime" yaml:"runtime"`
SchemaVersion SchemaVersion `json:"schema_version" yaml:"schema_version"`
// The router accepts only signed published descriptors (ArchitectureBlueprint.md
// section 35). The signature covers the canonical form of this document with the
// signature member removed.
Signature *RevisionSignature `json:"signature,omitempty" yaml:"signature,omitempty"`
// The router refuses to route to created, failed or retired revisions
// (ArchitectureBlueprint.md section 5.3).
State RevisionState `json:"state" yaml:"state"`
}
// The runtime-facing projection of a revision, deliberately small enough to be
// consumed deterministically by infrastructure (ArchitectureBlueprint.md section
// 36). This is a wire artifact: the gateway must be able to read it without any
// fluid-core library.
type RevisionDescriptorDocument struct {
Revision Revision `json:"revision" yaml:"revision"`
}