Generate contract types, pin fixtures to spec, add build and ADRs
Some checks failed
ci / build (push) Failing after 1m6s
Some checks failed
ci / build (push) Failing after 1m6s
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
This commit is contained in:
parent
fbbf56df7a
commit
76912adef8
44 changed files with 4010 additions and 7 deletions
100
internal/contract/backend_requirement_gen.go
Normal file
100
internal/contract/backend_requirement_gen.go
Normal file
|
|
@ -0,0 +1,100 @@
|
|||
// Code generated by tools/schemagen. DO NOT EDIT.
|
||||
// Source: schemas/. Regenerate with `make generate`.
|
||||
|
||||
package contract
|
||||
|
||||
type FluidBackendRequirementCapability struct {
|
||||
Description string `json:"description" yaml:"description"`
|
||||
Title string `json:"title" yaml:"title"`
|
||||
}
|
||||
|
||||
type FluidBackendRequirementDispositionState string
|
||||
|
||||
const (
|
||||
FluidBackendRequirementDispositionStateOPEN FluidBackendRequirementDispositionState = "OPEN"
|
||||
FluidBackendRequirementDispositionStateACCEPTED FluidBackendRequirementDispositionState = "ACCEPTED"
|
||||
FluidBackendRequirementDispositionStatePLANNED FluidBackendRequirementDispositionState = "PLANNED"
|
||||
FluidBackendRequirementDispositionStateAVAILABLE FluidBackendRequirementDispositionState = "AVAILABLE"
|
||||
FluidBackendRequirementDispositionStatePARTIALLYAVAILABLE FluidBackendRequirementDispositionState = "PARTIALLY_AVAILABLE"
|
||||
FluidBackendRequirementDispositionStateOUTOFSCOPE FluidBackendRequirementDispositionState = "OUT_OF_SCOPE"
|
||||
FluidBackendRequirementDispositionStateREJECTED FluidBackendRequirementDispositionState = "REJECTED"
|
||||
FluidBackendRequirementDispositionStateSUPERSEDED FluidBackendRequirementDispositionState = "SUPERSEDED"
|
||||
)
|
||||
|
||||
// Valid reports whether v is a defined FluidBackendRequirementDispositionState.
|
||||
func (v FluidBackendRequirementDispositionState) Valid() bool {
|
||||
switch v {
|
||||
case FluidBackendRequirementDispositionStateOPEN, FluidBackendRequirementDispositionStateACCEPTED, FluidBackendRequirementDispositionStatePLANNED, FluidBackendRequirementDispositionStateAVAILABLE, FluidBackendRequirementDispositionStatePARTIALLYAVAILABLE, FluidBackendRequirementDispositionStateOUTOFSCOPE, FluidBackendRequirementDispositionStateREJECTED, FluidBackendRequirementDispositionStateSUPERSEDED:
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
// The backend decides. Repeated OUT_OF_SCOPE feeds boundary learning
|
||||
// (ArchitectureBlueprint.md section 22).
|
||||
type FluidBackendRequirementDisposition struct {
|
||||
Reason *string `json:"reason,omitempty" yaml:"reason,omitempty"`
|
||||
State FluidBackendRequirementDispositionState `json:"state" yaml:"state"`
|
||||
TargetRef *string `json:"target_ref,omitempty" yaml:"target_ref,omitempty"`
|
||||
}
|
||||
|
||||
type FluidBackendRequirementExpectedUsage struct {
|
||||
RequestsPerDay *int64 `json:"requests_per_day,omitempty" yaml:"requests_per_day,omitempty"`
|
||||
}
|
||||
|
||||
type FluidBackendRequirementQuality struct {
|
||||
Availability *UnitInterval `json:"availability,omitempty" yaml:"availability,omitempty"`
|
||||
P95LatencyMS *float64 `json:"p95_latency_ms,omitempty" yaml:"p95_latency_ms,omitempty"`
|
||||
}
|
||||
|
||||
type FluidBackendRequirementSecurity struct {
|
||||
AuthorizationScope string `json:"authorization_scope,omitempty" yaml:"authorization_scope,omitempty"`
|
||||
TenantIsolation string `json:"tenant_isolation,omitempty" yaml:"tenant_isolation,omitempty"`
|
||||
}
|
||||
|
||||
type FluidBackendRequirementSemantics struct {
|
||||
Consistency string `json:"consistency,omitempty" yaml:"consistency,omitempty"`
|
||||
RequiredFields []string `json:"required_fields,omitempty" yaml:"required_fields,omitempty"`
|
||||
}
|
||||
|
||||
type FluidBackendRequirementUrgency string
|
||||
|
||||
const (
|
||||
FluidBackendRequirementUrgencyLOW FluidBackendRequirementUrgency = "LOW"
|
||||
FluidBackendRequirementUrgencyMEDIUM FluidBackendRequirementUrgency = "MEDIUM"
|
||||
FluidBackendRequirementUrgencyHIGH FluidBackendRequirementUrgency = "HIGH"
|
||||
)
|
||||
|
||||
// Valid reports whether v is a defined FluidBackendRequirementUrgency.
|
||||
func (v FluidBackendRequirementUrgency) Valid() bool {
|
||||
switch v {
|
||||
case FluidBackendRequirementUrgencyLOW, FluidBackendRequirementUrgencyMEDIUM, FluidBackendRequirementUrgencyHIGH:
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
type FluidBackendRequirement struct {
|
||||
BackendService string `json:"backend_service" yaml:"backend_service"`
|
||||
Capability FluidBackendRequirementCapability `json:"capability" yaml:"capability"`
|
||||
|
||||
// The backend decides. Repeated OUT_OF_SCOPE feeds boundary learning
|
||||
// (ArchitectureBlueprint.md section 22).
|
||||
Disposition FluidBackendRequirementDisposition `json:"disposition" yaml:"disposition"`
|
||||
ExpectedUsage *FluidBackendRequirementExpectedUsage `json:"expected_usage,omitempty" yaml:"expected_usage,omitempty"`
|
||||
ID BackendRequirementID `json:"id" yaml:"id"`
|
||||
OriginatingHypothesis *HypothesisID `json:"originating_hypothesis,omitempty" yaml:"originating_hypothesis,omitempty"`
|
||||
OriginatingInterface InterfaceID `json:"originating_interface" yaml:"originating_interface"`
|
||||
OriginatingRevision *RevisionID `json:"originating_revision,omitempty" yaml:"originating_revision,omitempty"`
|
||||
Quality *FluidBackendRequirementQuality `json:"quality,omitempty" yaml:"quality,omitempty"`
|
||||
SchemaVersion SchemaVersion `json:"schema_version" yaml:"schema_version"`
|
||||
Security *FluidBackendRequirementSecurity `json:"security,omitempty" yaml:"security,omitempty"`
|
||||
Semantics *FluidBackendRequirementSemantics `json:"semantics,omitempty" yaml:"semantics,omitempty"`
|
||||
Urgency *FluidBackendRequirementUrgency `json:"urgency,omitempty" yaml:"urgency,omitempty"`
|
||||
}
|
||||
|
||||
// Capability the interface needs but has no authority to build. FLUID escalates
|
||||
// rather than crossing the boundary (FluidAPIStandards.md section 30).
|
||||
type BackendRequirementDocument struct {
|
||||
FluidBackendRequirement FluidBackendRequirement `json:"fluid_backend_requirement" yaml:"fluid_backend_requirement"`
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue