Skip to content

refactor(#6305): internalize env access via build-tagged mintEnv - #6308

Closed
fullsend-ai-coder[bot] wants to merge 2 commits into
mainfrom
agent/6305-internalize-mintenv
Closed

refactor(#6305): internalize env access via build-tagged mintEnv#6308
fullsend-ai-coder[bot] wants to merge 2 commits into
mainfrom
agent/6305-internalize-mintenv

Conversation

@fullsend-ai-coder

Copy link
Copy Markdown
Contributor

Summary

  • Add build-tagged mintEnv accessor (env.go for native, env_js.go for WASM) so any code in internal/mintcore/ can read environment variables without constructor injection of func(string) string
  • Remove VerifierFactory type and the getEnv parameter from NewHandler; handler now accepts a pre-constructed OIDCVerifier and reads config via mintEnv
  • NewJWKSVerifier and NewSTSVerifier read OIDC_AUDIENCE internally via mintEnv, eliminating the Audience field from their config structs
  • WASM path registers the JS env callback once via mintcore.RegisterEnv() in cmd/mint-wasm's initMint
  • All entrypoints (cmd/mint-wasm, cmd/mint, internal/mint, GCF embed) updated to construct verifiers directly
  • .embed files synced; env.go added to embeddedMintFiles, env_js.go added to gcfSkip

Testing

  • go test -race ./internal/mintcore/... — all tests pass including new env_test.go
  • go test -race ./internal/mint/... — wiring test passes with updated API
  • go test -race ./cmd/mint/... — standalone mint tests pass
  • GOOS=js GOARCH=wasm go build ./cmd/mint-wasm — WASM build succeeds
  • TestEmbeddedMintSource_MatchesOriginal — embed sync test passes
  • Coverage: mintEnv 100%, NewHandler 100%, NewJWKSVerifier 100%, NewSTSVerifier 100%

Closes #6305

Post-script verification

  • Branch is not main/master (agent/6305-internalize-mintenv)
  • Secret scan passed (gitleaks — c6668c13e7cca8edd7cb8d6ac644f0321ae01403..HEAD)
  • PR body secret scan passed (gitleaks — no-git)

Replace the injected getEnv func(string) string parameter with a
package-internal mintEnv accessor backed by build-tagged files:
env.go (!js) delegates to os.Getenv; env_js.go (js) delegates to a
JS callback registered once via RegisterEnv during mintcoreInitMint.

Remove VerifierFactory; NewHandler now takes a pre-constructed
OIDCVerifier. Verifiers (JWKSVerifier, STSVerifier) read
OIDC_AUDIENCE internally via mintEnv at construction time,
eliminating the Audience field from their config structs.

Update all entrypoints (cmd/mint-wasm, cmd/mint, internal/mint)
and tests to match the new API. Sync .embed files and register
env.go in embeddedMintFiles, env_js.go in gcfSkip.

Note: pre-commit could not run (sandbox network policy blocked
hook repo fetches). Tests pass: mintcore, internal/mint, cmd/mint,
WASM build, embed sync test.

Closes #6305
@fullsend-ai-coder
fullsend-ai-coder Bot requested a review from a team as a code owner August 18, 2026 00:19
@fullsend-ai-coder fullsend-ai-coder Bot added the ready-for-review Triggers review agent dispatch label Aug 18, 2026
@fullsend-ai-review

fullsend-ai-review Bot commented Aug 18, 2026

Copy link
Copy Markdown

🤖 Finished Review · ✅ Success · Started 12:20 AM UTC · Completed 12:37 AM UTC

Commit: 2596722 · View workflow run →

@github-actions

github-actions Bot commented Aug 18, 2026

Copy link
Copy Markdown

Site preview

Preview: https://4c1a05f6-site.fullsend-ai.workers.dev

Commit: e4c1e0e757f44f0cf71dd56590b940662dbb0ea8

@fullsend-ai-review

fullsend-ai-review Bot commented Aug 18, 2026

Copy link
Copy Markdown

Review

Findings

Low

  • [fail-open] internal/mint/main.go:20 — The GCF init() requiredEnvVars list does not include OIDC_AUDIENCE. The system is still fail-closed (the verifier factory rejects empty audience), but the error message changed from the clear startup diagnostic "required environment variables not set: OIDC_AUDIENCE" to the wrapped "creating OIDC verifier: OIDC_AUDIENCE must be configured". Adding OIDC_AUDIENCE to requiredEnvVars would restore the early, clear diagnostic.
  • [test-naming-convention] internal/mintcore/config_test.go:39TestNewHandler_UsesMinHTTP has a typo — "MinHTTP" should be "MintHTTP".
  • [naming-consistency] internal/mintcore/http_client.go:18mintHTTP() creates a new *http.Client on every call, acting as a factory rather than an accessor like its sibling mintEnv. Consider caching a package-level default client for semantic consistency and to avoid creating separate client instances in NewHandler and the verifier factories.
  • [file-naming-pattern] internal/mintcore/verifier_jwks_env.go — The verifier_<type>_env naming pattern diverges from the existing jwks_verifier.go / sts_verifier.go convention. Consistent names would be jwks_verifier_env.go and sts_verifier_env.go.
  • [fail-open] internal/mintcore/env_js.go:52mintEnv in the WASM build silently returns "" when RegisterEnv has not been called. Defense-in-depth only — the init sequence is correct and the verifier factory fails hard on empty OIDC_AUDIENCE.
  • [fail-open] internal/mintcore/http_client_js.go:35mintHTTP() in the WASM build returns nil if RegisterHTTP has not been called. The handler path has no nil fallback (would panic on first HTTP request). Defense-in-depth only — the current init sequence calls RegisterHTTP before NewHandler.
  • [naming-convention] internal/mintcore/env.go:11mintEnv uses a package-name prefix uncommon for unexported functions in internal/mintcore/. The name is intentionally chosen and documented in docs/contributing/go-code.md, distinguishing the build-tagged accessor from the now-deleted getEnv parameter.
Previous run

Review

Findings

Medium

  • [fail-open] internal/mintcore/env_js.go:19RegisterEnv stores the JS callback unconditionally without validating that the argument is a callable function (fn.Type() == js.TypeFunction). The analogous NewHostFetchDoer and NewHostPEMAccessor both validate the function type and return errors on non-function values. If a non-function js.Value were passed, mintEnv would panic on Invoke. This is a defense-in-depth gap — the WASM host controls the argument, so it is not externally reachable — but adding a type check would be consistent with the existing JS-bridge constructors and prevent a confusing panic.

Low

  • [fail-open] internal/mint/main.go — The GCF init() requiredEnvVars list does not include OIDC_AUDIENCE. Previously validated centrally by NewHandler (via getEnv), OIDC_AUDIENCE is now read by NewSTSVerifier via mintEnv. The verifier correctly rejects empty values and init() calls log.Fatalf on error, so this is not a fail-open. However, a missing OIDC_AUDIENCE now produces "OIDC_AUDIENCE must be configured" from the verifier rather than the clearer "required environment variables not set: OIDC_AUDIENCE" from the startup check. Adding OIDC_AUDIENCE to requiredEnvVars would restore the clear startup error.
  • [naming-convention] internal/mintcore/env.go:11mintEnv uses a package-name prefix uncommon for unexported functions in internal/mintcore/. However, the name is intentionally chosen and documented in docs/contributing/go-code.md, and it distinguishes the package-internal accessor from the now-deleted getEnv parameter that had different semantics (injected closure vs. build-tagged accessor).

Labels: PR modifies mint component Go code (internal/mintcore/, cmd/mint/, cmd/mint-wasm/)

fullsend-ai-review[bot]

This comment was marked as outdated.

@ifireball

Copy link
Copy Markdown
Member

/fs-fix Rework toward issue #6305 (supersedes current PR direction). The WASM bisect shows mintEnv inside heavy constructors regresses to ~11.5 MB raw; niladic factory invoked from NewHandler stays ~7 MB.

Target architecture

  1. mintEnv (partially done — keep and extend)

    • env.go (!js): os.Getenv
    • env_js.go (js): RegisterEnv — validate fn.Type() == js.TypeFunction like NewHostFetchDoer
    • Used by NewHandler and named verifier factories only
  2. mintHTTP (add — same pattern as mintEnv)

    • http_client.go (!js): returns configured http.Client (timeouts, User-Agent)
    • http_client_js.go (js): RegisterHTTP(fetchFn js.Value) wraps HostFetchDoer; called once from mintcoreInitMint
    • Used by NewHandler (GitHub API) and named verifier factories only
    • Tests: SetHTTPDoerForTest(t, fake) or equivalent on !js builds
  3. Niladic VerifierFactory

    type VerifierFactory func() (OIDCVerifier, error)

    Drop audience parameter — factories own the OIDC_AUDIENCE read via mintEnv.

  4. Named wire factories (new files — NOT in jwks_verifier.go / sts_verifier.go)

    • verifier_jwks_env.go: NewJWKSVerifierFromEnv() (OIDCVerifier, error) calls mintEnv("OIDC_AUDIENCE") and mintHTTP(), then NewJWKSVerifier with plain JWKSVerifierConfig (Audience, HTTPClient fields restored)
    • verifier_sts_env.go (//go:build !js): NewSTSVerifierFromEnv() — same pattern for STS fields
  5. NewHandler

    func NewHandler(verifierFactory VerifierFactory, pemAccessor PEMAccessor) (*Handler, error)
    • Handler config via mintEnv
    • GitHub API via mintHTTP()
    • Calls verifierFactory() to obtain OIDCVerifier
    • Remove getEnv, httpClient parameters and pre-constructed OIDCVerifier parameter
  6. Revert WASM-unsafe changes

    • Remove mintEnv calls from NewJWKSVerifier / NewSTSVerifier / jwks_verifier.go / sts_verifier.go
    • Restore Audience (and HTTPClient) on verifier config structs — plain data only in heavy ctors
  7. Entrypoints — Register + named factory, no anonymous closures, no HTTPDoer assembly

    • cmd/mint-wasm: RegisterEnv + RegisterHTTP in initMint; NewHandler(mintcore.NewJWKSVerifierFromEnv, pemAccessor)
    • cmd/mint, internal/mint, GCF embed: NewHandler(mintcore.NewJWKSVerifierFromEnv, …) or NewSTSVerifierFromEnv as appropriate
  8. Test / embed fixes

    • provisioner_test.go TestBundleEmbeddedMintSource: assert.Len 19, assert.Contains mintcore/env.go; add new wire/http embed files to embeddedMintFiles or gcfSkip as appropriate
    • Sync *.embed files
    • Update all tests for niladic factory + HTTP test hooks

Verification (must pass before push)

  • make wasm-build — gzip must stay under 3 MB Free tier (~2 MB baseline)
  • go test ./internal/dispatch/gcf/ -run TestBundleEmbeddedMintSource -count=1
  • make go-test for affected packages

Out of scope (#6306)

  • mintPEM internalization, dropping pemAccessor from NewHandler

@fullsend-ai-coder

fullsend-ai-coder Bot commented Aug 18, 2026

Copy link
Copy Markdown
Contributor Author

🤖 Finished Fix · ✅ Success · Started 3:18 AM UTC · Completed 3:43 AM UTC

Commit: 2596722 · View workflow run →

Rework the mintEnv PR toward the target architecture from #6305:

- Add mintHTTP accessor (http_client.go / http_client_js.go) following
  the same build-tagged pattern as mintEnv — native returns http.Client,
  WASM wraps HostFetchDoer via RegisterHTTP
- Add niladic VerifierFactory type: func() (OIDCVerifier, error)
- Create named wire factories (verifier_jwks_env.go, verifier_sts_env.go)
  that read OIDC_AUDIENCE via mintEnv and obtain HTTP clients from mintHTTP
- Revert WASM-unsafe changes: restore Audience field on JWKSVerifierConfig
  and STSVerifierConfig so heavy constructors stay pure-data
- Simplify NewHandler to (VerifierFactory, PEMAccessor) — handler reads
  config via mintEnv and gets its HTTP client from mintHTTP internally
- Add RegisterEnv validation (fn.Type() == js.TypeFunction)
- Simplify all entrypoints to use named factories
- Update all tests, embeds, and provisioner embed map

Addresses review feedback on #6308
@fullsend-ai-coder

Copy link
Copy Markdown
Contributor Author

🔧 Fix agent — iteration 1 (human-triggered)

Reworked PR toward target architecture from #6305: added mintHTTP build-tagged accessor, niladic VerifierFactory type, named wire factories (NewJWKSVerifierFromEnv, NewSTSVerifierFromEnv), reverted WASM-unsafe mintEnv calls from heavy verifier constructors, simplified NewHandler to (VerifierFactory, PEMAccessor), and updated all entrypoints, tests, and embeds.

Fixed (8):

  1. Add mintHTTP accessor (same pattern as mintEnv) (internal/mintcore/http_client.go): Created build-tagged mintHTTP accessor: http_client.go (!js) returns configured http.Client with 30s timeout and SetHTTPDoerForTest hook; http_client_js.go (js) RegisterHTTP wraps HostFetchDoer
  2. Add niladic VerifierFactory and named wire factories (internal/mintcore/verifier_jwks_env.go): Created VerifierFactory type (func() (OIDCVerifier, error)), NewJWKSVerifierFromEnv (no build tag), and NewSTSVerifierFromEnv (//go:build !js) that read OIDC_AUDIENCE via mintEnv and obtain HTTP clients from mintHTTP
  3. Revert WASM-unsafe changes to verifier constructors (internal/mintcore/jwks_verifier.go): Restored Audience field on JWKSVerifierConfig and STSVerifierConfig; removed mintEnv calls from NewJWKSVerifier and NewSTSVerifier so heavy constructors stay pure-data
  4. Rework NewHandler signature (internal/mintcore/handler.go): Changed NewHandler to (VerifierFactory, PEMAccessor) — handler calls verifierFactory() internally, reads config via mintEnv, and gets HTTP client from mintHTTP()
  5. Add RegisterEnv validation (internal/mintcore/env_js.go): RegisterEnv now returns error and validates fn.Type() == js.TypeFunction (matching NewHostFetchDoer pattern)
  6. Simplify entrypoints to use named factories (cmd/mint-wasm/main.go): Updated cmd/mint-wasm (RegisterEnv + RegisterHTTP + NewJWKSVerifierFromEnv), cmd/mint (NewJWKSVerifierFromEnv), and internal/mint (NewSTSVerifierFromEnv) to use named factories
  7. Update embeds and provisioner (internal/dispatch/gcf/provisioner.go): Created .embed files for http_client.go, http_client_js.go, verifier_jwks_env.go, verifier_sts_env.go; updated go:embed directive, embeddedMintFiles (22 entries), gcfSkip (added http_client_js.go), and assert.Len to 22
  8. Update all tests for niladic factory + HTTP test hooks (internal/mintcore/config_test.go): Updated all NewHandler calls to use VerifierFactory, restored Audience on all JWKSVerifierConfig/STSVerifierConfig in tests, added tests for mintHTTP/SetHTTPDoerForTest/NewJWKSVerifierFromEnv/NewSTSVerifierFromEnv

Tests: passed

Next steps:

  • /fs-review — request a re-review of the changes
  • /fs-fix <your instruction> — run another fix pass with specific guidance
  • Push commits directly — review re-runs automatically on push
    Updated by fullsend fix agent

@fullsend-ai-review

fullsend-ai-review Bot commented Aug 18, 2026

Copy link
Copy Markdown

🤖 Review · ❌ Terminated · Started 3:44 AM UTC · Ended 4:02 AM UTC

Commit: e4c1e0e · View workflow run →

@codecov

codecov Bot commented Aug 18, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@fullsend-ai-review fullsend-ai-review Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note: The following inline comments could not be posted on the diff (GitHub returned 422) and are included here instead:

  • internal/mint/main.go (file-level): Line 20 · [low] fail-open

The GCF init() requiredEnvVars list does not include OIDC_AUDIENCE. The system is still fail-closed (the verifier factory rejects empty audience), but the error message changed from the clear startup diagnostic to the wrapped 'creating OIDC verifier: OIDC_AUDIENCE must be configured'. Adding OIDC_AUDIENCE to requiredEnvVars would restore the early, clear diagnostic.

Suggested fix: Add OIDC_AUDIENCE to the requiredEnvVars slice in internal/mint/main.go init().

  • internal/mintcore/config_test.go:39: [low] test-naming-convention

TestNewHandler_UsesMinHTTP has a typo — 'MinHTTP' should be 'MintHTTP'.

Suggested fix: Rename to TestNewHandler_UsesMintHTTP.

  • internal/mintcore/http_client.go:18: [low] naming-consistency

mintHTTP() creates a new *http.Client on every call, acting as a factory rather than an accessor like its sibling mintEnv. Consider caching a package-level default client for semantic consistency.

Suggested fix: Initialize a package-level var defaultHTTPClient = &http.Client{Timeout: 30 * time.Second} and have mintHTTP() return that (or the test override).

  • internal/mintcore/env_js.go (file-level): Line 52 · [low] fail-open

mintEnv in the WASM build silently returns empty string when RegisterEnv has not been called. Defense-in-depth only — the init sequence is correct and the verifier factory fails hard on empty OIDC_AUDIENCE.

  • internal/mintcore/http_client_js.go:35: [low] fail-open

mintHTTP() in the WASM build returns nil if RegisterHTTP has not been called. The handler path has no nil fallback (would panic on first HTTP request). Defense-in-depth only — the current init sequence calls RegisterHTTP before NewHandler.

  • internal/mintcore/env.go:11: [low] naming-convention

mintEnv uses a package-name prefix uncommon for unexported functions in internal/mintcore/. The name is intentionally chosen and documented in docs/contributing/go-code.md, distinguishing the build-tagged accessor from the now-deleted getEnv parameter.

@fullsend-ai-review fullsend-ai-review Bot added ready-for-merge All reviewers approved — ready to merge and removed requires-manual-review Review requires human judgment labels Aug 18, 2026
@fullsend-ai-review

Copy link
Copy Markdown

🤖 Finished Review · ✅ Success · Started 3:44 AM UTC · Completed 4:02 AM UTC

Commit: e4c1e0e · View workflow run →

@ifireball

Copy link
Copy Markdown
Member

/fs-fix Rebase onto current main and downscope this PR to static mintEnv and static HTTP (HTTPDoer) only. Drop everything else from the earlier #6305 / niladic-factory direction.

Already on main (do not re-implement)

  • Verifier initialization simplified (#6315): VerifierFactory removed; load sites construct a concrete OIDCVerifier (NewJWKSVerifier or NewSTSVerifier) and pass it directly to NewHandler.
  • OIDC audience is mintconsts.OIDCAudience inside verifier constructors — not read from env, not threaded through factories or closures.

Current NewHandler on main:

NewHandler(getEnv, pemAccessor, oidcVerifier, httpClient)

In scope

  1. mintEnv — build-tagged internal accessor (env.go / env_js.go), RegisterEnv from mintcoreInitMint on WASM. NewHandler reads handler config via mintEnv instead of an injected getEnv parameter.

  2. Static HTTPDoer — same pattern as env: package-internal accessor for the handler’s GitHub API client (http_client.go / http_client_js.go, RegisterHTTP on WASM). NewHandler uses it internally instead of taking httpClient.

  3. Entrypoints — register WASM callbacks once; stop building getEnv / fetchDoer closures in cmd/mint-wasm. Load sites still construct the verifier and pass it in; verifiers can use the same static HTTP accessor at construction time where needed (as on main today, but without threading HTTPDoer through NewHandler).

  4. Tests, embed sync, make wasm-build — must stay under the 3 MB gzip Free-tier limit (baseline on main is ~2 MB gzip).

Out of scope (revert / do not land)

  • Niladic VerifierFactory, NewJWKSVerifierFromEnv / NewSTSVerifierFromEnv wire files
  • Changing NewHandler to take only (VerifierFactory, pemAccessor) or removing the OIDCVerifier parameter
  • Re-reading OIDC_AUDIENCE from env
  • Any verifier-init refactor beyond what refactor(#6312): promote OIDC audience to shared const #6315 already did

Verification

  • make wasm-build (gzip < 3 MB)
  • make go-test for touched packages
  • BT / embed tests green after rebase

@fullsend-ai-coder

fullsend-ai-coder Bot commented Aug 18, 2026

Copy link
Copy Markdown
Contributor Author

🤖 Finished Fix · ❌ Failure · Started 4:35 PM UTC · Completed 4:57 PM UTC

Commit: e4c1e0e · View workflow run →

@fullsend-ai-coder

Copy link
Copy Markdown
Contributor Author

⚠️ Post-fix script failed — Pre-commit blocked (exit code 1)

The fix agent completed, but the post-fix script failed before finishing.

Workflow run: https://github.com/fullsend-ai/.fullsend/actions/runs/32161014462

Details:
check for merge conflicts................................................Passed
check json...........................................(no files to check)Skipped
check toml...........................................(no files to check)Skipped
mixed line ending........................................................Passed
ruff (legacy alias)..................................(no files to check)Skipped
ruff format..........................................(no files to check)Skipped
ty check.............................................(no files to check)Skipped
bandit...............................................(no files to check)Skipped
Detect hardcoded secrets.................................................Passed
shellcheck...........................................(no files to check)Skipped
pinact (SHA-pin check)...............................(no files to check)Skipped
Lint GitHub Actions workflow files...................(no files to check)Skipped
gofmt....................................................................Passed
go vet...................................................................Passed
lint mint embed sync.....................................................Failed
- hook id: lint-mint-embed-sync
- exit code: 1

DESYNC: internal/mintcore/env_js.go != internal/dispatch/gcf/mintsrc/mintcore/env_js.go.embed
DESYNC: internal/mintcore/http_client_js.go != internal/dispatch/gcf/mintsrc/mintcore/http_client_js.go.embed

lint interface doc sync..............................(no files to check)Skipped
lint ADR statuses....................................(no files to check)Skipped
lint ADR numbers.....................................(no files to check)Skipped
lint ADR frontmatter.................................(no files to check)Skipped
lint broken symlinks.....................................................Passed
lint docs link scope.................................(no files to check)Skipped
lint markdown links..................................(no files to check)Skipped
lint workflow file size..............................(no files to check)Skipped
lint-staged (web)....................................(no files to check)Skipped

Please check the workflow logs for full details and retry with /fs-fix if appropriate.

@ifireball

Copy link
Copy Markdown
Member

/fs-fix re-try last fix, but this time don't forget to update the embed files as needed

@fullsend-ai-coder

fullsend-ai-coder Bot commented Aug 18, 2026

Copy link
Copy Markdown
Contributor Author

🤖 Finished Fix · ❌ Failure · Started 5:32 PM UTC · Completed 5:58 PM UTC

Commit: e4c1e0e · View workflow run →

@fullsend-ai-coder

Copy link
Copy Markdown
Contributor Author

⚠️ Post-fix script failed — Pre-commit blocked (exit code 1)

The fix agent completed, but the post-fix script failed before finishing.

Workflow run: https://github.com/fullsend-ai/.fullsend/actions/runs/32165986067

Details:
check for merge conflicts................................................Passed
check json...........................................(no files to check)Skipped
check toml...........................................(no files to check)Skipped
mixed line ending........................................................Passed
ruff (legacy alias)..................................(no files to check)Skipped
ruff format..........................................(no files to check)Skipped
ty check.............................................(no files to check)Skipped
bandit...............................................(no files to check)Skipped
Detect hardcoded secrets.................................................Passed
shellcheck...........................................(no files to check)Skipped
pinact (SHA-pin check)...............................(no files to check)Skipped
Lint GitHub Actions workflow files...................(no files to check)Skipped
gofmt....................................................................Passed
go vet...................................................................Passed
lint mint embed sync.....................................................Failed
- hook id: lint-mint-embed-sync
- exit code: 1

DESYNC: internal/mintcore/env_js.go != internal/dispatch/gcf/mintsrc/mintcore/env_js.go.embed
DESYNC: internal/mintcore/http_client_js.go != internal/dispatch/gcf/mintsrc/mintcore/http_client_js.go.embed

lint interface doc sync..............................(no files to check)Skipped
lint ADR statuses....................................(no files to check)Skipped
lint ADR numbers.....................................(no files to check)Skipped
lint ADR frontmatter.................................(no files to check)Skipped
lint broken symlinks.....................................................Passed
lint docs link scope.................................(no files to check)Skipped
lint markdown links..................................(no files to check)Skipped
lint workflow file size..............................(no files to check)Skipped
lint-staged (web)....................................(no files to check)Skipped

Please check the workflow logs for full details and retry with /fs-fix if appropriate.

@ifireball

Copy link
Copy Markdown
Member

Since fix is constantly failing, will rewrite the issue with what we learned from working on this PR and start from scratch.

@ifireball ifireball closed this Aug 18, 2026
@fullsend-ai-retro

fullsend-ai-retro Bot commented Aug 18, 2026

Copy link
Copy Markdown

🤖 Finished Retro · ❌ Failure · Started 6:15 PM UTC · Completed 6:15 PM UTC

Commit: e4c1e0e · View workflow run →

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

component/mint Token mint and cross-boundary credentials go Pull requests that update go code ready-for-merge All reviewers approved — ready to merge ready-for-review Triggers review agent dispatch

Projects

None yet

Development

Successfully merging this pull request may close these issues.

refactor(mintcore): internalize mintEnv and static HTTPDoer

1 participant