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
164
conformance/fixtures/json/hypothesis.json
Normal file
164
conformance/fixtures/json/hypothesis.json
Normal file
|
|
@ -0,0 +1,164 @@
|
|||
{
|
||||
"fluid_hypothesis": {
|
||||
"audit": {
|
||||
"decision_refs": [
|
||||
"D-2811"
|
||||
],
|
||||
"immutable_event_refs": [
|
||||
"EV-990218"
|
||||
]
|
||||
},
|
||||
"backend_requirements": {
|
||||
"required": false,
|
||||
"requirement_refs": []
|
||||
},
|
||||
"candidate_revision_refs": [
|
||||
"R-000221"
|
||||
],
|
||||
"complexity": {
|
||||
"expected_delta": {
|
||||
"cognitive_load": -0.2,
|
||||
"concept_count": 0,
|
||||
"operation_count": 1,
|
||||
"semantic_overlap": 0.1,
|
||||
"surface_area": 1
|
||||
},
|
||||
"score": 0.18
|
||||
},
|
||||
"created_at": "2026-09-04T12:00:00Z",
|
||||
"created_by": {
|
||||
"id": "fluid-daimon/customer-finance-api",
|
||||
"type": "daimon"
|
||||
},
|
||||
"economics": {
|
||||
"currency": "EUR",
|
||||
"estimated_experiment_cost": 18.0,
|
||||
"estimated_implementation_cost": 40.0,
|
||||
"expected_value_class": "MEDIUM"
|
||||
},
|
||||
"expected_outcomes": [
|
||||
{
|
||||
"baseline": 2.7,
|
||||
"cohort": "all",
|
||||
"direction": "lower",
|
||||
"metric": "requests_per_completed_task",
|
||||
"target": 1.2
|
||||
},
|
||||
{
|
||||
"baseline": 1.0,
|
||||
"cohort": "all",
|
||||
"direction": "lower",
|
||||
"metric": "client_side_sort_workarounds",
|
||||
"target": 0.2
|
||||
}
|
||||
],
|
||||
"experiment_refs": [
|
||||
"E-000093"
|
||||
],
|
||||
"explanation": {
|
||||
"claim": "Consumers treat \"latest invoice\" as a domain-level concept and the existing generic collection interface does not present that concept directly.\n",
|
||||
"reach": {
|
||||
"explains": [
|
||||
"P-1831",
|
||||
"P-1834"
|
||||
],
|
||||
"notes": "Medium reach: explains several related request patterns but not broader financial-context pressure.\n",
|
||||
"score": 0.42
|
||||
}
|
||||
},
|
||||
"failure_criteria": {
|
||||
"expression": "any hard guardrail violation OR adoption below 5% after 30 days when equally discoverable\n"
|
||||
},
|
||||
"fitness_dimensions": {
|
||||
"expected": {
|
||||
"client_utility": 0.7,
|
||||
"compatibility": 0.0,
|
||||
"correctness": 0.0,
|
||||
"discoverability": 0.65,
|
||||
"maintainability": -0.05,
|
||||
"operational_cost": 0.0,
|
||||
"performance": 0.1,
|
||||
"reliability": 0.0,
|
||||
"security": 0.0,
|
||||
"simplicity": -0.15
|
||||
}
|
||||
},
|
||||
"guardrails": [
|
||||
{
|
||||
"metric": "p95_latency_ms",
|
||||
"operator": "<=",
|
||||
"threshold": 315
|
||||
},
|
||||
{
|
||||
"metric": "authorization_scope_change",
|
||||
"operator": "==",
|
||||
"threshold": false
|
||||
},
|
||||
{
|
||||
"metric": "backend_query_count_delta",
|
||||
"operator": "<=",
|
||||
"threshold": 0
|
||||
}
|
||||
],
|
||||
"id": "H-000184",
|
||||
"interface_id": "customer-finance-api",
|
||||
"learning_value": {
|
||||
"notes": "Useful signal for whether first-class convenience resources improve agent and partner integration behavior.\n",
|
||||
"score": 0.56
|
||||
},
|
||||
"observation": {
|
||||
"affected_cohorts": [
|
||||
"partner-integrations",
|
||||
"coding-agents"
|
||||
],
|
||||
"evidence_refs": [
|
||||
"telemetry:invoice-pattern-2026w36",
|
||||
"feedback:F-9821"
|
||||
],
|
||||
"observation_window": {
|
||||
"end": "2026-09-01T00:00:00Z",
|
||||
"start": "2026-08-15T00:00:00Z"
|
||||
},
|
||||
"summary": "A significant consumer cohort retrieves invoice collections, sorts them by issue date, and discards all but the first item.\n"
|
||||
},
|
||||
"outcome": {
|
||||
"evidence_refs": [],
|
||||
"status": null,
|
||||
"summary": null
|
||||
},
|
||||
"pressure": {
|
||||
"classes": [
|
||||
"successful_but_inefficient_usage",
|
||||
"repeated_expectation_mismatch"
|
||||
],
|
||||
"confidence": 0.88,
|
||||
"severity": 0.61
|
||||
},
|
||||
"priority": {
|
||||
"decided_by": "optimization-policy-v3",
|
||||
"score": 0.71
|
||||
},
|
||||
"proposed_adaptation": {
|
||||
"candidate_contract": {
|
||||
"method": "GET",
|
||||
"path": "/customers/{id}/invoices/latest"
|
||||
},
|
||||
"class": "contract",
|
||||
"implementation_scope": "interface_only",
|
||||
"summary": "Add an explicit latest-invoice retrieval capability.\n"
|
||||
},
|
||||
"risk": {
|
||||
"level": "LOW",
|
||||
"reasons": [
|
||||
"read-only operation",
|
||||
"no authorization expansion"
|
||||
]
|
||||
},
|
||||
"schema_version": "0.1",
|
||||
"state": "PRIORITIZED",
|
||||
"success_criteria": {
|
||||
"expression": "requests_per_completed_task <= 1.2 AND no hard guardrail violation\n"
|
||||
},
|
||||
"title": "Provide direct latest-invoice capability"
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue