fluid-core/Makefile
tegwick 55363905bc
Some checks failed
ci / build (push) Has been cancelled
Add the conformance suite, echo fixture and integration guide
Completes FLUID-WP-0007. The seven minimal-conformance requirements and
the mechanically checkable architectural invariants are asserted as
tests rather than claimed in a README, because a conformance claim
nobody re-checks is one that quietly stops being true. Only the
checkable subset of the invariants is asserted; pretending a test can
settle the rest would be worse than leaving them to review.

TestFirstVerticalSlice runs all eleven steps of Blueprint 50 with no
human steps: two revisions, explicit routing, telemetry, a cohort
dimension, detected pressure, a hypothesis, a candidate, a 90/10
experiment, fitness comparison, promotion, and a complete audit trail.
Requests per completed task fall from 5.65 to 1.00 against a 1.20
target. A companion test runs the loop twice and requires the same
verdict, since a loop whose conclusion depended on run order would be
measuring the harness rather than the interface.

The failure-containment matrix covers Blueprint 34 directly: the data
plane keeps serving with the evidence store closed, with telemetry
wedged against a sink that never returns, after a failed build, after an
experiment rollback, and with the adaptive concurrency limit saturated.

Fixes a real bug the suite exposed. Drain closed the emitter outright,
so every request after the first flush emitted into a dead emitter and
was silently lost -- the kind of fault that makes a later measurement
quietly wrong rather than loudly broken. Emitter.Flush now waits for
delivery without stopping it.

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 08:21:49 +02:00

54 lines
1.3 KiB
Makefile

# FLUID core — build, generation and conformance.
#
# The record types in internal/contract are generated from schemas/. Never edit
# them by hand: run `make generate`.
GO ?= go
PYTHON ?= python3
PKGS := ./...
.PHONY: all
all: generate build vet test validate
.PHONY: generate
generate: ## Regenerate Go types from schemas/
$(GO) run ./tools/schemagen
gofmt -w internal/contract
.PHONY: build
build:
$(GO) build $(PKGS)
.PHONY: vet
vet:
$(GO) vet $(PKGS)
.PHONY: test
test: validate
$(GO) test $(PKGS)
.PHONY: validate
validate: ## Validate spec-derived fixtures against the schemas
$(PYTHON) conformance/validate_schemas.py
.PHONY: check-generated
check-generated: ## Fail if generated code is stale relative to schemas/
@$(MAKE) --no-print-directory generate
@if ! git diff --quiet -- internal/contract; then \
echo "internal/contract is stale — run 'make generate' and commit the result"; \
git --no-pager diff --stat -- internal/contract; \
exit 1; \
fi
.PHONY: conformance
conformance: ## Assert every conformance requirement and architectural invariant
$(GO) test -count=1 ./conformance/...
.PHONY: clean
clean:
rm -rf bin internal/contract/*.broken
.PHONY: help
help:
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | \
awk 'BEGIN {FS = ":.*?## "}; {printf " \033[36m%-18s\033[0m %s\n", $$1, $$2}'