Skip to content

chore(cleanup): remove dead code and relocate test-only seams#491

Merged
SantiagoDePolonia merged 1 commit into
mainfrom
chore/deadcode
Jul 6, 2026
Merged

chore(cleanup): remove dead code and relocate test-only seams#491
SantiagoDePolonia merged 1 commit into
mainfrom
chore/deadcode

Conversation

@SantiagoDePolonia

@SantiagoDePolonia SantiagoDePolonia commented Jul 6, 2026

Copy link
Copy Markdown
Contributor

Summary

Systematic dead-code sweep driven by golang.org/x/tools/cmd/deadcode (both from the cmd/ binaries and with -test) and staticcheck -checks U1000 (including test files). Net −2,148 lines across 54 files. After this PR, deadcode -test ./... reports only the intentionally-public ext extension API, and staticcheck U1000 is clean.

No user-visible behavior changes: everything removed was unreachable from the production binaries, and every test that covered live logic through a removed wrapper was migrated to the production variant instead of deleted.

What's removed

Dead streaming-cache reconstruction subsystem (~1,500 lines). internal/responsecache still carried the pre-redesign machinery that parsed cached SSE events and rebuilt synthetic streams (stream_cache_chat.go, stream_cache_responses.go, and the dead half of stream_cache.go). Production replays raw SSE bytes verbatim (writeCachedResponse); nothing called reconstructStreamingResponse/renderCached*Stream outside ~475 lines of tests that tested only the dead code. Both deleted.

Dead thin wrappers — deleted, with test call sites migrated to the live variants they delegated to:

  • workflows.NewCompilerNewCompilerWithFeatureCaps (~23 sites)
  • dashboard.NewNewWithBasePath("/")
  • gateway.ResolveRequestModel + server resolveRequestModelResolveRequestModelWithAuthorizer
  • DetermineBatchExecutionSelection / ...WithAuthorizer...WithAuthorizerAndInputFileResolver
  • ensureTranslatedRequestWorkflow...WithAuthorizer
  • doOpenAICompatibleFileIDRequest...WithPreparer
  • batchrewrite RecordPreparation/CleanupFileFromRouter/CleanupSupersededFile* — the guardrails test harness now mirrors production orchestration via the live RecordResult/CleanupFile

Dead functions plus their dead tests: observability.GetMetrics/HealthCheck (+ PrometheusMetrics), core.HasNonTextContent, core.NormalizeModelSelector, the four DecodedBatchItemRequest accessors, BatchItemModelSelector (its table tests retargeted onto the live BatchItemRequestedModelSelector), auditlog.DefaultConfig, conversationstore.WithUnboundedRetention, responsecache's GuardrailsHashFromContext/WithGuardrailsHash/ShouldSkipExactCache/ShouldSkipAllCache, and the unused MockEmbedder test type.

Production-dead but test-used seams moved into test files (so the shipped binary no longer carries them, without churning ~250 test call sites): server's NewHandler/newHandler/AuthMiddleware/WorkflowResolution(WithResolver)/GetProviderType/handleStreamingResponse into a new internal/server/seams_test.go; plus vecstore_map.govecstore_map_test.go, modelcache.NewRedisModelCacheWithStore, failover.NewResolver, admin.WithGuardrailsRegistry, and providers.derivedEnvNames.

Deliberately kept (still flagged by deadcode, not dead)

  • ext/registry.go package-level wrappers and Registry mutators — the documented public extension API for external embedders; static analysis can't see out-of-repo consumers.
  • The 19 provider NewWithHTTPClient constructors — pinned by the -tags=contract suite and by cross-provider production delegation (opencodego embeds anthropic; OpenAI-compatible providers embed openai).
  • Cross-package test seams for live logic: cache.MapStore, llmclient.DefaultConfig, observability.ResetMetrics, NewResponseCacheMiddlewareWithStore, and the memory-store retention options.

Verification

  • go build ./..., full go test ./...: 61 packages ok, 0 failures (pre-commit also ran make test-race and make lint).
  • go vet -tags=contract ./tests/contract/ and -tags=integration ./tests/integration/... compile clean.
  • deadcode ./cmd/... down from 129 flagged functions to 41 (all in the deliberate-keep list above); deadcode -test ./... down from 12 to the 4 ext API functions.

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Bug Fixes

    • Admin dashboard links and assets now respect the configured base path, improving deployments under subpaths.
    • Request model resolution and workflow handling were streamlined to better align with authorization-aware behavior.
    • Cache bypass behavior was simplified, including clearer handling for no-store requests.
  • Refactor

    • Several legacy helper entry points were removed in favor of a smaller, more consistent public surface.
    • Supporting tests were updated to cover the new initialization and routing behavior.

Systematic dead-code sweep driven by golang.org/x/tools/cmd/deadcode
(binary and -test modes) and staticcheck U1000. Net -2,148 lines.

Removed:
- The unused responsecache stream-reconstruction subsystem
  (stream_cache_chat.go, stream_cache_responses.go, and the dead half of
  stream_cache.go), superseded by verbatim raw-SSE replay, plus the
  tests that only exercised it.
- Dead thin wrappers, migrating their test call sites to the live
  variants: workflows.NewCompiler, dashboard.New,
  gateway.ResolveRequestModel, server resolveRequestModel,
  DetermineBatchExecutionSelection(WithAuthorizer),
  ensureTranslatedRequestWorkflow, doOpenAICompatibleFileIDRequest, and
  the batchrewrite RecordPreparation/CleanupSuperseded* family (the
  guardrails harness now mirrors production via RecordResult/CleanupFile).
- Dead functions together with their dead tests:
  observability.GetMetrics/HealthCheck, core.HasNonTextContent,
  core.NormalizeModelSelector, the DecodedBatchItemRequest accessors,
  BatchItemModelSelector, auditlog.DefaultConfig,
  conversationstore.WithUnboundedRetention, responsecache guardrails-hash
  and cache-skip wrappers, and the unused MockEmbedder test type.

Relocated production-dead but test-used seams into test files:
server NewHandler/newHandler/AuthMiddleware/WorkflowResolution(
WithResolver)/GetProviderType/handleStreamingResponse (new
seams_test.go), vecstore_map.go, NewRedisModelCacheWithStore,
failover.NewResolver, admin.WithGuardrailsRegistry, derivedEnvNames.

Deliberately kept: the ext package public extension API, the provider
NewWithHTTPClient constructor family (contract tests and cross-provider
delegation), and cross-package test seams (cache.MapStore,
llmclient.DefaultConfig, ResetMetrics, NewResponseCacheMiddlewareWithStore,
memory-store retention options).

deadcode -test now reports only the intentional ext API; staticcheck
U1000 (including tests) is clean; all packages pass, and contract/
integration suites compile under their build tags.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Jul 6, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

📝 Walkthrough

Walkthrough

This PR removes numerous legacy convenience/wrapper functions across the codebase in favor of their explicit, more parameterized counterparts (e.g., authorizer-aware, feature-cap-aware, base-path-aware variants). Callers and tests are updated to use the new explicit APIs, and several unused helper functions and streaming-cache reconstruction logic are deleted.

Changes

Wrapper API Removal and Caller Migration

Layer / File(s) Summary
Dashboard handler simplification
internal/admin/dashboard/dashboard.go, internal/admin/dashboard/dashboard_test.go, internal/server/http_test.go, tests/e2e/setup_test.go
Removes New(); all callers switch to NewWithBasePath("/"); adds a test validating base-path-prefixed generated URLs.
Workflow compiler feature caps
internal/workflows/compiler.go, internal/workflows/compiler_test.go, internal/workflows/service_test.go, internal/admin/handler_guardrails_test.go, internal/admin/handler_workflows_test.go
Removes NewCompiler; all call sites migrate to NewCompilerWithFeatureCaps(registry, core.DefaultWorkflowFeatures()).
Batch/model selector and resolution API narrowing
internal/core/batch_semantic.go, internal/core/batch_semantic_test.go, internal/core/semantic_canonical.go, internal/core/semantic_canonical_test.go, internal/core/semantic.go, internal/gateway/request_model_resolution.go, internal/gateway/batch_selection.go, internal/server/request_model_resolution.go, internal/server/request_model_resolution_test.go, internal/server/workflow_policy_test.go, internal/gateway/edge_cases_test.go
Removes DecodedBatchItemRequest typed accessors, ModelSelector, BatchItemModelSelector, NormalizeModelSelector, ResolveRequestModel, batch-selection wrappers; adds RequestedModelSelector/BatchItemRequestedModelSelector; requires explicit context/authorizer arguments in remaining functions.
Server auth/handler wrapper removal with test seams
internal/server/auth.go, internal/server/handlers.go, internal/server/model_validation.go, internal/server/model_validation_test.go, internal/server/workflow_helpers.go, internal/server/workflow_helpers_test.go, internal/server/translated_inference_service.go, internal/server/seams_test.go
Removes AuthMiddleware, NewHandler, WorkflowResolution/WorkflowResolutionWithResolver, GetProviderType, ensureTranslatedRequestWorkflow, handleStreamingResponse from production code; adds equivalent test-only helpers in a new seams_test.go.
Cache, guardrails, observability, provider, and cache-stream cleanup
internal/batchrewrite/helpers.go, internal/batchrewrite/helpers_test.go, internal/guardrails/provider_harness_test.go, internal/cache/modelcache/redis.go, internal/cache/modelcache/redis_test.go, internal/core/chat_content.go, internal/core/chat_content_test.go, internal/admin/handler.go, internal/conversationstore/store_memory.go, internal/failover/resolver.go, internal/failover/resolver_test.go, internal/observability/metrics.go, internal/observability/metrics_test.go, internal/providers/config.go, internal/providers/config_test.go, internal/providers/file_adapter_openai_compat.go, internal/providers/file_adapter_openai_compat_test.go, internal/responsecache/semantic.go, internal/responsecache/semantic_test.go, internal/responsecache/stream_cache*.go, internal/auditlog/auditlog.go
Removes superseded-file cleanup helpers, RecordPreparation, NewRedisModelCacheWithStore (moved to tests), HasNonTextContent, WithGuardrailsRegistry, WithUnboundedRetention, PrometheusMetrics/GetMetrics/HealthCheck, providerEnvNames (moved to tests), generic file-ID request wrapper, guardrails context helpers, ShouldSkipExactCache/ShouldSkipAllCache (replaced with unexported helper); deletes streaming SSE reconstruction/cache-builder code and corresponding tests.

Estimated code review effort: 4 (Complex) | ~60 minutes

Possibly related PRs

  • ENTERPILOT/GoModel#215: Both PRs touch admin dashboard handler construction/rendering in dashboard.go/dashboard_test.go, with base-path-related URL handling.
  • ENTERPILOT/GoModel#449: Both PRs modify GuardedProvider.CreateBatch batch rewrite bookkeeping and file cleanup calls in provider_harness_test.go.

Poem

A hop, a skip, a wrapper gone,
Explicit paths now carry on.
No more shortcuts hiding near—
Just clean, direct code paths here.
🐇 Thump-thump goes my happy tail,
Old helpers swept, the new ones prevail!

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately summarizes the main change: dead code cleanup and moving test-only seams into test files.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch chore/deadcode

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@codecov-commenter

Copy link
Copy Markdown

⚠️ Please install the 'codecov app svg image' to ensure uploads and comments are reliably processed by Codecov.

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@internal/admin/dashboard/dashboard_test.go`:
- Around line 13-21: The test name is stale after the constructor rename:
TestNew now only covers NewWithBasePath, so rename the test to match the actual
API it exercises. Update the test identifier in dashboard_test.go from TestNew
to something aligned with NewWithBasePath, and keep the assertions against
NewWithBasePath and its returned handler/error behavior.

In `@internal/workflows/service_test.go`:
- Line 364: Create a shared package-level test helper for the repeated compiler
setup in service_test.go, since NewCompilerWithFeatureCaps(nil,
core.DefaultWorkflowFeatures()) is duplicated across many test cases. Add a
small helper such as newDefaultTestCompiler() near the other test utilities, and
replace each direct construction at the Service test call sites with that
helper. Keep the helper returning the same Compiler value so all tests continue
using the default workflow features consistently.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: f1866e84-4ca0-4553-95b0-1dc721e52a59

📥 Commits

Reviewing files that changed from the base of the PR and between 92db958 and b4dc659.

📒 Files selected for processing (54)
  • internal/admin/dashboard/dashboard.go
  • internal/admin/dashboard/dashboard_test.go
  • internal/admin/handler.go
  • internal/admin/handler_guardrails_test.go
  • internal/admin/handler_workflows_test.go
  • internal/auditlog/auditlog.go
  • internal/batchrewrite/helpers.go
  • internal/batchrewrite/helpers_test.go
  • internal/cache/modelcache/redis.go
  • internal/cache/modelcache/redis_test.go
  • internal/conversationstore/store_memory.go
  • internal/core/batch_semantic.go
  • internal/core/batch_semantic_test.go
  • internal/core/chat_content.go
  • internal/core/chat_content_test.go
  • internal/core/semantic.go
  • internal/core/semantic_canonical.go
  • internal/core/semantic_canonical_test.go
  • internal/embedding/embedding_test.go
  • internal/failover/resolver.go
  • internal/failover/resolver_test.go
  • internal/gateway/batch_selection.go
  • internal/gateway/edge_cases_test.go
  • internal/gateway/request_model_resolution.go
  • internal/guardrails/provider_harness_test.go
  • internal/observability/metrics.go
  • internal/observability/metrics_test.go
  • internal/providers/config.go
  • internal/providers/config_test.go
  • internal/providers/file_adapter_openai_compat.go
  • internal/providers/file_adapter_openai_compat_test.go
  • internal/responsecache/handle_request_test.go
  • internal/responsecache/semantic.go
  • internal/responsecache/semantic_test.go
  • internal/responsecache/stream_cache.go
  • internal/responsecache/stream_cache_chat.go
  • internal/responsecache/stream_cache_responses.go
  • internal/responsecache/vecstore_map_test.go
  • internal/server/auth.go
  • internal/server/handlers.go
  • internal/server/http_test.go
  • internal/server/model_validation.go
  • internal/server/model_validation_test.go
  • internal/server/request_model_resolution.go
  • internal/server/request_model_resolution_test.go
  • internal/server/seams_test.go
  • internal/server/translated_inference_service.go
  • internal/server/workflow_helpers.go
  • internal/server/workflow_helpers_test.go
  • internal/server/workflow_policy_test.go
  • internal/workflows/compiler.go
  • internal/workflows/compiler_test.go
  • internal/workflows/service_test.go
  • tests/e2e/setup_test.go
💤 Files with no reviewable changes (26)
  • internal/server/request_model_resolution.go
  • internal/responsecache/stream_cache_chat.go
  • internal/responsecache/stream_cache_responses.go
  • internal/providers/config.go
  • internal/auditlog/auditlog.go
  • internal/cache/modelcache/redis.go
  • internal/server/workflow_helpers.go
  • internal/admin/handler.go
  • internal/server/translated_inference_service.go
  • internal/core/chat_content.go
  • internal/providers/file_adapter_openai_compat.go
  • internal/core/semantic_canonical.go
  • internal/gateway/batch_selection.go
  • internal/gateway/request_model_resolution.go
  • internal/core/semantic_canonical_test.go
  • internal/embedding/embedding_test.go
  • internal/workflows/compiler.go
  • internal/batchrewrite/helpers_test.go
  • internal/core/batch_semantic.go
  • internal/observability/metrics_test.go
  • internal/observability/metrics.go
  • internal/server/model_validation_test.go
  • internal/batchrewrite/helpers.go
  • internal/core/chat_content_test.go
  • internal/responsecache/handle_request_test.go
  • internal/responsecache/stream_cache.go

Comment on lines 13 to 21
func TestNew(t *testing.T) {
h, err := New()
h, err := NewWithBasePath("/")
if err != nil {
t.Fatalf("New() returned error: %v", err)
t.Fatalf("NewWithBasePath() returned error: %v", err)
}
if h == nil {
t.Fatal("New() returned nil handler")
t.Fatalf("NewWithBasePath() returned nil handler")
}
}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Stale test name after constructor rename.

TestNew now exercises NewWithBasePath exclusively, but the test name still references the removed New() constructor.

♻️ Suggested rename
-func TestNew(t *testing.T) {
+func TestNewWithBasePath(t *testing.T) {
 	h, err := NewWithBasePath("/")
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
func TestNew(t *testing.T) {
h, err := New()
h, err := NewWithBasePath("/")
if err != nil {
t.Fatalf("New() returned error: %v", err)
t.Fatalf("NewWithBasePath() returned error: %v", err)
}
if h == nil {
t.Fatal("New() returned nil handler")
t.Fatalf("NewWithBasePath() returned nil handler")
}
}
func TestNewWithBasePath(t *testing.T) {
h, err := NewWithBasePath("/")
if err != nil {
t.Fatalf("NewWithBasePath() returned error: %v", err)
}
if h == nil {
t.Fatalf("NewWithBasePath() returned nil handler")
}
}
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@internal/admin/dashboard/dashboard_test.go` around lines 13 - 21, The test
name is stale after the constructor rename: TestNew now only covers
NewWithBasePath, so rename the test to match the actual API it exercises. Update
the test identifier in dashboard_test.go from TestNew to something aligned with
NewWithBasePath, and keep the assertions against NewWithBasePath and its
returned handler/error behavior.

}

service, err := NewService(store, NewCompiler(nil))
service, err := NewService(store, NewCompilerWithFeatureCaps(nil, core.DefaultWorkflowFeatures()))

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Consider extracting a shared test helper for the repeated compiler construction.

NewCompilerWithFeatureCaps(nil, core.DefaultWorkflowFeatures()) is repeated verbatim ~16 times across this file. A small package-level test helper would reduce duplication and centralize future updates.

♻️ Suggested helper
func newDefaultTestCompiler() Compiler {
	return NewCompilerWithFeatureCaps(nil, core.DefaultWorkflowFeatures())
}

Then replace call sites, e.g.:

-	service, err := NewService(store, NewCompilerWithFeatureCaps(nil, core.DefaultWorkflowFeatures()))
+	service, err := NewService(store, newDefaultTestCompiler())

Also applies to: 396-396, 453-453, 509-509, 556-556, 590-590, 808-808, 933-933, 1005-1005, 1046-1046, 1092-1092, 1127-1127, 1214-1214, 1269-1269, 1327-1327, 1394-1394, 1452-1452

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@internal/workflows/service_test.go` at line 364, Create a shared
package-level test helper for the repeated compiler setup in service_test.go,
since NewCompilerWithFeatureCaps(nil, core.DefaultWorkflowFeatures()) is
duplicated across many test cases. Add a small helper such as
newDefaultTestCompiler() near the other test utilities, and replace each direct
construction at the Service test call sites with that helper. Keep the helper
returning the same Compiler value so all tests continue using the default
workflow features consistently.

@greptile-apps

greptile-apps Bot commented Jul 6, 2026

Copy link
Copy Markdown

Confidence Score: 5/5

Safe to merge with low risk.

The changes are primarily deletion of unreachable wrappers and relocation of test-only seams. Tests now target the production implementations. Reviewed the affected response cache, workflow/model resolution, and batch cleanup paths and found no current behavioral bug introduced by the diff.

No files require special attention.

T-Rex T-Rex Logs

What T-Rex did

  • The Go module was built across all packages and completed with exit code 0, validating the full compile contract.
  • The initial targeted run including the e2e package produced exit code 1 due to build constraints, and a rerun excluding the e2e package subsequently completed successfully.
  • Sanitized targeted tests excluding the e2e package were run and completed with exit code 0, confirming coverage without the gated e2e set.
  • Provider tests under internal/providers were executed and completed with exit code 0.
  • Contract tests were executed with the contract tag and completed with exit code 0.

View all artifacts

T-Rex Ran code and verified through T-Rex

Sequence Diagram

%%{init: {'theme': 'neutral'}}%%
sequenceDiagram
participant Test as Tests / test-only seams
participant Prod as Production entry points
participant Gateway as Gateway orchestration
participant Provider as Provider / cache storage

Test->>Prod: Call live constructors and authorizer-aware helpers
Prod->>Gateway: Resolve workflow/model/batch selection
Gateway->>Provider: Execute translated, native batch, or cache replay path
Provider-->>Gateway: Return upstream response / cached SSE bytes
Gateway-->>Prod: Persist metadata and cleanup rewritten batch files
Prod-->>Test: Exercise production behavior without shipping seam wrappers
Loading
%%{init: {'theme': 'base', 'themeVariables': {"darkMode": true, "background": "#0d1117", "primaryColor": "#21262d", "primaryTextColor": "#e6edf3", "primaryBorderColor": "#8b949e", "lineColor": "#8b949e", "textColor": "#e6edf3", "edgeLabelBackground": "#161b22", "actorBkg": "#21262d", "actorBorder": "#8b949e", "actorTextColor": "#e6edf3", "actorLineColor": "#8b949e", "signalColor": "#8b949e", "signalTextColor": "#e6edf3", "noteBkgColor": "#373320", "noteBorderColor": "#d4a72c", "noteTextColor": "#f0e6c0", "labelBoxBkgColor": "#21262d", "labelBoxBorderColor": "#8b949e", "labelTextColor": "#e6edf3", "loopTextColor": "#e6edf3", "activationBkgColor": "#30363d", "activationBorderColor": "#8b949e"}}}%%
sequenceDiagram
participant Test as Tests / test-only seams
participant Prod as Production entry points
participant Gateway as Gateway orchestration
participant Provider as Provider / cache storage

Test->>Prod: Call live constructors and authorizer-aware helpers
Prod->>Gateway: Resolve workflow/model/batch selection
Gateway->>Provider: Execute translated, native batch, or cache replay path
Provider-->>Gateway: Return upstream response / cached SSE bytes
Gateway-->>Prod: Persist metadata and cleanup rewritten batch files
Prod-->>Test: Exercise production behavior without shipping seam wrappers
Loading

Reviews (1): Last reviewed commit: "chore(cleanup): remove dead code and rel..." | Re-trigger Greptile

@SantiagoDePolonia SantiagoDePolonia merged commit 9adb553 into main Jul 6, 2026
21 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.

2 participants