Add evidence store, intent store and the fluid CLI
Some checks failed
ci / build (push) Has been cancelled

Completes FLUID-WP-0003. The evidence store is append-only at the
database, not by convention in Go: a trigger blocks UPDATE and DELETE on
fluid_events in both SQLite and Postgres, so the guarantee binds a psql
session and the CLI equally, not just callers who go through the Go API.
Records are derived summary state and may be superseded; the event log
stays the authority.

The intent store makes a recorded version immutable and content
addressed, since reassigning what governed a revision after the fact
would break the one audit question Blueprint 27 exists to answer. The
unfilled InterfaceEvolutionIntent template is rejected rather than
defaulted, because a template still listing every FLUID-N mode has not
been completed and defaulting it would pick a permissive authority by
accident.

The CLI reads the evidence store directly rather than through the
control-plane API, so an operator can reconstruct history when the
control plane is down.

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:
tegwick 2026-09-04 02:26:23 +02:00
parent 791e419973
commit d52dcc92a9
11 changed files with 1836 additions and 3 deletions

19
internal/evidence/sink.go Normal file
View file

@ -0,0 +1,19 @@
package evidence
import (
"context"
"github.com/tegwick/fluid-core/internal/contract"
)
// TelemetrySink adapts a Store to the runtime's telemetry sink.
//
// It is a separate type so the data plane depends on the narrow sink interface
// rather than on the whole evidence store: the gateway should not be able to
// read hypotheses.
type TelemetrySink struct{ Store Store }
// Write implements the runtime Sink interface.
func (s TelemetrySink) Write(ctx context.Context, ev contract.FluidTelemetry) error {
return s.Store.WriteTelemetry(ctx, ev)
}