Skip to content

Search Projection Broker Smoke

This proof is local and disposable. It starts isolated PostgreSQL containers for Question Bank and Search plus an isolated NATS JetStream container. It does not use Compose, a caller-provided database, a Gateway route, or a default-route promotion.

Run from the repository root:

bash
SEARCH_PROJECTION_BROKER_SMOKE_CONFIRM=disposable-runtime \
  make test-search-projection-broker-live

The script builds the local question-bank-service and search-service binaries, enables their NATS transport only for that disposable runtime, and proves all of the following for question-bank-service / QUESTION:

  • A canonical owner write publishes a redacted copied-index envelope and Search indexes it.
  • A newer owner mutation published while Search is stopped is recovered after the durable subscriber restarts.
  • Replaying the exact old envelope is idempotent; replaying it with a new event id is recorded stale and cannot overwrite the newer index row.
  • A DELETE tombstone removes the copied row; replaying the prior UPSERT remains stale and cannot resurrect it.

Question Bank's lease, retry, terminal-dead state, and concurrent-claim behavior have separate unit and disposable PostgreSQL coverage:

bash
QUESTION_SEARCH_PROJECTION_OUTBOX_POSTGRES_CONFIRM=disposable-postgres \
  make test-question-search-projection-outbox-postgres

The existing SEARCH_REBUILD_WORKER_ENABLED=1 pull worker remains the reconciliation and rollback fallback. Course, exam, and document publishers are not enabled by this proof, and it does not authorize a Gateway or production default-route change.

Go-platform documentation is generated from repository Markdown.