test(e2e): retire ingot behavior tests — they live in the ingot repo now - #18
Merged
Conversation
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>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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.
tests/e2e/ingot_{versity,native,eviction}_test.go— ported to ingottesting/forge_*_test.go, where the conformance baseline and the binary under test are the same commit by construction.go.moddrops thefil-forge/ingotandversity/versitygwpins — smelt no longer depends on any service repo.CleanupLeaked); CLAUDE.md's stale "no CI" section now describes the actual workflows.Verified:
go vet -tags e2e ./..., liveTestUploadAndRetrieve/default(ingot health guard exercised, PASS 78s).🤖 Generated with Claude Code