Skip to content

test(e2e): retire ingot behavior tests — they live in the ingot repo now - #18

Merged
frrist merged 4 commits into
mainfrom
retire-ingot-e2e
Jul 14, 2026
Merged

test(e2e): retire ingot behavior tests — they live in the ingot repo now#18
frrist merged 4 commits into
mainfrom
retire-ingot-e2e

Conversation

@frrist

@frrist frrist commented Jul 13, 2026

Copy link
Copy Markdown
Member

Stacked on #17 (which stacks on #10). Hold merge until the ingot-side e2e PR is green — this is the final step of the test-dependency inversion.

  • Deletes tests/e2e/ingot_{versity,native,eviction}_test.go — ported to ingot testing/forge_*_test.go, where the conformance baseline and the binary under test are the same commit by construction.
  • The upload/retrieve smoke now asserts ingot boots to healthy in every storage permutation — smelt keeps guarding the system definition (topology, config, keys), the ingot repo owns behavior.
  • go.mod drops the fil-forge/ingot and versity/versitygw pins — smelt no longer depends on any service repo.
  • Docs: DEVELOPING.md gains a "Service repos own their e2e tests (smelt as SDK)" section (the pattern for piri/sprue/etc. teams, with a one-e2e-run-per-host caveat for CleanupLeaked); CLAUDE.md's stale "no CI" section now describes the actual workflows.

Verified: go vet -tags e2e ./..., live TestUploadAndRetrieve/default (ingot health guard exercised, PASS 78s).

🤖 Generated with Claude Code

frrist and others added 3 commits July 13, 2026 15:10
Run ingot as a first-class smelt system and validate it live against the
real stack (sprue + piri + indexing-service + postgres).

systems/ingot/: compose.yml (ingot daemon ghcr.io/fil-forge/ingot:main +
postgres:16-alpine; forge mode; goose migrations at startup on a fresh
DB) and config/config.yaml (S3 IAM, Postgres DSN, sprue/indexer
endpoints, mounted space key). INGOT_IMAGE overrides the image;
documented in .env alongside the other services.

pkg/stack: IngotEndpoint(), Exec/Logs support; pkg/workspace registers
ingot for SMELT_WORKSPACE=1 local-source rebuilds; pkg/generate adds the
ingot agent key.

github.com/fil-forge/ingot is pinned in go.mod (v0.0.0, ingot's release
tag at current main), so the e2e tests' ingot/testing import compiles
from a plain checkout — the parent go.work is only needed to rebuild
ingot from local source.

Forge e2e tests (tests/e2e/ingot_*.go):

- TestIngotNativeProvision: ingot self-provisions its space (guppy-free:
  ingot login + space generate --provision-to), then runs the versity
  Smoke suite over forge mode.
- TestIngotVersityConformance: the gate — runs the same group universe
  as ingot's own smoke_test.go partition (Smoke + CopyObject +
  DeleteObjects) plus Multipart against an in-process baseline and
  forge, asserting exact two-sided per-case parity: forge-only failures
  are regressions, forge-only passes are build divergences (mirroring
  the suite's "unexpectedly passed; promote it" ratchet) — both fail by
  name. The load-sensitive CompleteMultipartUpload_racey_success is
  logged, never gated. Last run vs published images: forge 158/262 vs
  baseline 157/262.
- TestIngotForgeReadAfterEviction: the appliance read tier — PUT, wipe
  /data/spool, GET re-fetches the body from piri via LocalLocator +
  /content/retrieve (512 KiB round-tripped).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…gin helper

Groundwork for service repos owning their own forge e2e tests with smelt
as the orchestration SDK (ingot first):

- WithServiceConfig(service, path) bind-mounts a test-provided config
  file over the service's in-container config path (registered per
  service in pkg/workspace; ingot -> /etc/ingot/config.yaml). Lets a
  service repo exercise config changes without a smelt release. A file
  bind nested inside the base compose's config-dir mount shadows just
  that file. Verified live: override visible in-container, ingot healthy.
- WithIngotImage completes the per-service image override set (compose
  already read INGOT_IMAGE).
- guppy.LoginViaEmail exports the blocking-CLI-vs-email-clicker race the
  e2e tests previously each hand-rolled; smelt's ingot tests now use it.
- RenderOverride gains a configs argument and merges multiple mounts per
  service; unit tests added.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The forge-mode ingot e2e (versity conformance gate, native provision,
read-after-eviction) moved to ingot testing/forge_*_test.go, which
imports smelt/pkg/stack as a test SDK and injects its working-tree
binary — validating an ingot change no longer requires a smelt PR, and
the conformance baseline can never be version-skewed from the binary
under test.

Smelt keeps guarding what it owns — the ingot *system definition*: the
upload/retrieve smoke now asserts ingot boots to healthy in every
storage permutation. go.mod drops the ingot and versitygw pins entirely
(smelt no longer depends on any service repo). Docs describe the
inversion as the pattern for other service teams, and the stale 'no CI'
section now reflects the actual workflows.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@frrist
frrist force-pushed the retire-ingot-e2e branch from 6467e0d to 544b8bf Compare July 14, 2026 17:49
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@frrist
frrist force-pushed the retire-ingot-e2e branch from 544b8bf to d2d111a Compare July 14, 2026 18:04
@frrist
frrist changed the base branch from ingot-sdk-extensions to main July 14, 2026 20:10
@frrist
frrist merged commit f2ecac5 into main Jul 14, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant