diff --git a/CLAUDE.md b/CLAUDE.md index 4c62ef5..f5b0258 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -4,7 +4,7 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co ## What This Is -SCM integration and data collection library for the Lethean ecosystem (`forge.lthn.ai/core/go-scm`). Provides Forgejo/Gitea API clients, an AgentCI pipeline for automated PR lifecycle, pluggable data collectors, and workspace management (repos registry, manifests with ed25519 signing, marketplace, plugin system). +SCM integration and data collection library for the Lethean ecosystem (`dappco.re/go/core/scm`). Provides Forgejo/Gitea API clients, an AgentCI pipeline for automated PR lifecycle, pluggable data collectors, and workspace management (repos registry, manifests with ed25519 signing, marketplace, plugin system). Virgil orchestrates tasks via Forgejo issues. Pick up tasks in issue order, mark complete, commit and push. @@ -65,14 +65,14 @@ Each subsystem has different test infrastructure — see `docs/development.md` f - **UK English**: colour, organisation, centre, licence (noun), authorise, behaviour - **Tests**: testify assert/require, table-driven preferred, `_Good`/`_Bad`/`_Ugly` suffix naming -- **Imports**: stdlib → `forge.lthn.ai/...` → third-party, each group separated by blank line -- **Errors**: `coreerr.E("package.Func", "context", err)` via `coreerr "forge.lthn.ai/core/go-log"` — no bare `fmt.Errorf` or `errors.New` +- **Imports**: stdlib → `dappco.re/...` → third-party, each group separated by blank line +- **Errors**: `coreerr.E("package.Func", "context", err)` via `coreerr "dappco.re/go/core/log"` — no bare `fmt.Errorf` or `errors.New` - **Conventional commits**: `feat(forge):`, `fix(gitea):`, `test(collect):`, `docs(agentci):`, `refactor(collect):`, `chore:` - **Co-Author trailer**: `Co-Authored-By: Virgil ` - **Licence**: EUPL-1.2 ## Forge -- **Repo**: `forge.lthn.ai/core/go-scm` +- **Repo**: `dappco.re/go/core/scm` - **Push via SSH**: `git push origin main` (remote: `ssh://git@forge.lthn.ai:2223/core/go-scm.git`) - **CI**: Forgejo Actions — runs tests with race detector and coverage on push to main/dev and PRs to main diff --git a/README.md b/README.md index 8e61046..1526694 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -[![Go Reference](https://pkg.go.dev/badge/forge.lthn.ai/core/go-scm.svg)](https://pkg.go.dev/forge.lthn.ai/core/go-scm) +[![Go Reference](https://pkg.go.dev/badge/dappco.re/go/core/scm.svg)](https://pkg.go.dev/dappco.re/go/core/scm) [![License: EUPL-1.2](https://img.shields.io/badge/License-EUPL--1.2-blue.svg)](LICENSE.md) [![Go Version](https://img.shields.io/badge/Go-1.26-00ADD8?style=flat&logo=go)](go.mod) @@ -6,7 +6,7 @@ SCM integration, AgentCI dispatch automation, and data collection for the Lethean ecosystem. Provides a Forgejo API client and a Gitea client for the public mirror, multi-repo git operations with parallel status checks, the Clotho Protocol orchestrator for dual-run agent verification, a PR automation pipeline (poll → dispatch → journal) driven by epic issue task lists, and pluggable data collectors for BitcoinTalk, GitHub, market data, and research papers. -**Module**: `forge.lthn.ai/core/go-scm` +**Module**: `dappco.re/go/core/scm` **Licence**: EUPL-1.2 **Language**: Go 1.25 @@ -14,9 +14,9 @@ SCM integration, AgentCI dispatch automation, and data collection for the Lethea ```go import ( - "forge.lthn.ai/core/go-scm/forge" - "forge.lthn.ai/core/go-scm/git" - "forge.lthn.ai/core/go-scm/jobrunner" + "dappco.re/go/core/scm/forge" + "dappco.re/go/core/scm/git" + "dappco.re/go/core/scm/jobrunner" ) // Forgejo client diff --git a/agentci/clotho.go b/agentci/clotho.go index 2bec8ee..41ce261 100644 --- a/agentci/clotho.go +++ b/agentci/clotho.go @@ -4,7 +4,7 @@ import ( "context" "strings" - "forge.lthn.ai/core/go-scm/jobrunner" + "dappco.re/go/core/scm/jobrunner" ) // RunMode determines the execution strategy for a dispatched task. diff --git a/agentci/config.go b/agentci/config.go index d8d80b0..a7386b2 100644 --- a/agentci/config.go +++ b/agentci/config.go @@ -5,7 +5,7 @@ import ( "fmt" "forge.lthn.ai/core/config" - coreerr "forge.lthn.ai/core/go-log" + coreerr "dappco.re/go/core/log" ) // AgentConfig represents a single agent machine in the config file. diff --git a/agentci/config_test.go b/agentci/config_test.go index c023772..034ff09 100644 --- a/agentci/config_test.go +++ b/agentci/config_test.go @@ -4,7 +4,7 @@ import ( "testing" "forge.lthn.ai/core/config" - "forge.lthn.ai/core/go-io" + "dappco.re/go/core/io" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) diff --git a/agentci/security.go b/agentci/security.go index 1bb32a3..52c106c 100644 --- a/agentci/security.go +++ b/agentci/security.go @@ -6,7 +6,7 @@ import ( "regexp" "strings" - coreerr "forge.lthn.ai/core/go-log" + coreerr "dappco.re/go/core/log" ) var safeNameRegex = regexp.MustCompile(`^[a-zA-Z0-9\-\_\.]+$`) diff --git a/cmd/collect/cmd.go b/cmd/collect/cmd.go index ebf9c60..8f7e43c 100644 --- a/cmd/collect/cmd.go +++ b/cmd/collect/cmd.go @@ -4,9 +4,9 @@ import ( "fmt" "forge.lthn.ai/core/cli/pkg/cli" - "forge.lthn.ai/core/go-scm/collect" - "forge.lthn.ai/core/go-i18n" - "forge.lthn.ai/core/go-io" + "dappco.re/go/core/scm/collect" + "dappco.re/go/core/i18n" + "dappco.re/go/core/io" ) func init() { diff --git a/cmd/collect/cmd_bitcointalk.go b/cmd/collect/cmd_bitcointalk.go index 1bcbd1f..0bab644 100644 --- a/cmd/collect/cmd_bitcointalk.go +++ b/cmd/collect/cmd_bitcointalk.go @@ -5,8 +5,8 @@ import ( "strings" "forge.lthn.ai/core/cli/pkg/cli" - "forge.lthn.ai/core/go-scm/collect" - "forge.lthn.ai/core/go-i18n" + "dappco.re/go/core/scm/collect" + "dappco.re/go/core/i18n" ) // BitcoinTalk command flags diff --git a/cmd/collect/cmd_dispatch.go b/cmd/collect/cmd_dispatch.go index 79d42cd..9467e7f 100644 --- a/cmd/collect/cmd_dispatch.go +++ b/cmd/collect/cmd_dispatch.go @@ -5,8 +5,8 @@ import ( "time" "forge.lthn.ai/core/cli/pkg/cli" - collectpkg "forge.lthn.ai/core/go-scm/collect" - "forge.lthn.ai/core/go-i18n" + collectpkg "dappco.re/go/core/scm/collect" + "dappco.re/go/core/i18n" ) // addDispatchCommand adds the 'dispatch' subcommand to the collect parent. diff --git a/cmd/collect/cmd_excavate.go b/cmd/collect/cmd_excavate.go index 511f119..a9bf038 100644 --- a/cmd/collect/cmd_excavate.go +++ b/cmd/collect/cmd_excavate.go @@ -5,8 +5,8 @@ import ( "fmt" "forge.lthn.ai/core/cli/pkg/cli" - "forge.lthn.ai/core/go-scm/collect" - "forge.lthn.ai/core/go-i18n" + "dappco.re/go/core/scm/collect" + "dappco.re/go/core/i18n" ) // Excavate command flags diff --git a/cmd/collect/cmd_github.go b/cmd/collect/cmd_github.go index e814b56..22c1f7d 100644 --- a/cmd/collect/cmd_github.go +++ b/cmd/collect/cmd_github.go @@ -5,8 +5,8 @@ import ( "strings" "forge.lthn.ai/core/cli/pkg/cli" - "forge.lthn.ai/core/go-scm/collect" - "forge.lthn.ai/core/go-i18n" + "dappco.re/go/core/scm/collect" + "dappco.re/go/core/i18n" ) // GitHub command flags diff --git a/cmd/collect/cmd_market.go b/cmd/collect/cmd_market.go index d471e0e..9a8fd47 100644 --- a/cmd/collect/cmd_market.go +++ b/cmd/collect/cmd_market.go @@ -4,8 +4,8 @@ import ( "context" "forge.lthn.ai/core/cli/pkg/cli" - "forge.lthn.ai/core/go-scm/collect" - "forge.lthn.ai/core/go-i18n" + "dappco.re/go/core/scm/collect" + "dappco.re/go/core/i18n" ) // Market command flags diff --git a/cmd/collect/cmd_papers.go b/cmd/collect/cmd_papers.go index 61f08c4..ef270ba 100644 --- a/cmd/collect/cmd_papers.go +++ b/cmd/collect/cmd_papers.go @@ -4,8 +4,8 @@ import ( "context" "forge.lthn.ai/core/cli/pkg/cli" - "forge.lthn.ai/core/go-scm/collect" - "forge.lthn.ai/core/go-i18n" + "dappco.re/go/core/scm/collect" + "dappco.re/go/core/i18n" ) // Papers command flags diff --git a/cmd/collect/cmd_process.go b/cmd/collect/cmd_process.go index 8a5b001..8ac116f 100644 --- a/cmd/collect/cmd_process.go +++ b/cmd/collect/cmd_process.go @@ -4,8 +4,8 @@ import ( "context" "forge.lthn.ai/core/cli/pkg/cli" - "forge.lthn.ai/core/go-scm/collect" - "forge.lthn.ai/core/go-i18n" + "dappco.re/go/core/scm/collect" + "dappco.re/go/core/i18n" ) // addProcessCommand adds the 'process' subcommand to the collect parent. diff --git a/cmd/forge/cmd_auth.go b/cmd/forge/cmd_auth.go index 421b595..a707bf5 100644 --- a/cmd/forge/cmd_auth.go +++ b/cmd/forge/cmd_auth.go @@ -4,7 +4,7 @@ import ( "fmt" "forge.lthn.ai/core/cli/pkg/cli" - fg "forge.lthn.ai/core/go-scm/forge" + fg "dappco.re/go/core/scm/forge" ) // Auth command flags. diff --git a/cmd/forge/cmd_config.go b/cmd/forge/cmd_config.go index 5cd0301..94c5679 100644 --- a/cmd/forge/cmd_config.go +++ b/cmd/forge/cmd_config.go @@ -4,7 +4,7 @@ import ( "fmt" "forge.lthn.ai/core/cli/pkg/cli" - fg "forge.lthn.ai/core/go-scm/forge" + fg "dappco.re/go/core/scm/forge" ) // Config command flags. diff --git a/cmd/forge/cmd_issues.go b/cmd/forge/cmd_issues.go index 5ace0d3..108d237 100644 --- a/cmd/forge/cmd_issues.go +++ b/cmd/forge/cmd_issues.go @@ -7,7 +7,7 @@ import ( forgejo "codeberg.org/mvdkleijn/forgejo-sdk/forgejo/v2" "forge.lthn.ai/core/cli/pkg/cli" - fg "forge.lthn.ai/core/go-scm/forge" + fg "dappco.re/go/core/scm/forge" ) // Issues command flags. diff --git a/cmd/forge/cmd_labels.go b/cmd/forge/cmd_labels.go index 591fb72..745ab61 100644 --- a/cmd/forge/cmd_labels.go +++ b/cmd/forge/cmd_labels.go @@ -6,7 +6,7 @@ import ( forgejo "codeberg.org/mvdkleijn/forgejo-sdk/forgejo/v2" "forge.lthn.ai/core/cli/pkg/cli" - fg "forge.lthn.ai/core/go-scm/forge" + fg "dappco.re/go/core/scm/forge" ) // Labels command flags. diff --git a/cmd/forge/cmd_migrate.go b/cmd/forge/cmd_migrate.go index b372f46..8f8a8bb 100644 --- a/cmd/forge/cmd_migrate.go +++ b/cmd/forge/cmd_migrate.go @@ -6,7 +6,7 @@ import ( forgejo "codeberg.org/mvdkleijn/forgejo-sdk/forgejo/v2" "forge.lthn.ai/core/cli/pkg/cli" - fg "forge.lthn.ai/core/go-scm/forge" + fg "dappco.re/go/core/scm/forge" ) // Migrate command flags. diff --git a/cmd/forge/cmd_orgs.go b/cmd/forge/cmd_orgs.go index a0d95ff..27389a3 100644 --- a/cmd/forge/cmd_orgs.go +++ b/cmd/forge/cmd_orgs.go @@ -4,7 +4,7 @@ import ( "fmt" "forge.lthn.ai/core/cli/pkg/cli" - fg "forge.lthn.ai/core/go-scm/forge" + fg "dappco.re/go/core/scm/forge" ) // addOrgsCommand adds the 'orgs' subcommand for listing organisations. diff --git a/cmd/forge/cmd_prs.go b/cmd/forge/cmd_prs.go index 93841ff..e32db77 100644 --- a/cmd/forge/cmd_prs.go +++ b/cmd/forge/cmd_prs.go @@ -7,7 +7,7 @@ import ( forgejo "codeberg.org/mvdkleijn/forgejo-sdk/forgejo/v2" "forge.lthn.ai/core/cli/pkg/cli" - fg "forge.lthn.ai/core/go-scm/forge" + fg "dappco.re/go/core/scm/forge" ) // PRs command flags. diff --git a/cmd/forge/cmd_repos.go b/cmd/forge/cmd_repos.go index 5052739..71cb2a9 100644 --- a/cmd/forge/cmd_repos.go +++ b/cmd/forge/cmd_repos.go @@ -6,7 +6,7 @@ import ( forgejo "codeberg.org/mvdkleijn/forgejo-sdk/forgejo/v2" "forge.lthn.ai/core/cli/pkg/cli" - fg "forge.lthn.ai/core/go-scm/forge" + fg "dappco.re/go/core/scm/forge" ) // Repos command flags. diff --git a/cmd/forge/cmd_status.go b/cmd/forge/cmd_status.go index 7d318e9..4777894 100644 --- a/cmd/forge/cmd_status.go +++ b/cmd/forge/cmd_status.go @@ -4,7 +4,7 @@ import ( "fmt" "forge.lthn.ai/core/cli/pkg/cli" - fg "forge.lthn.ai/core/go-scm/forge" + fg "dappco.re/go/core/scm/forge" ) // addStatusCommand adds the 'status' subcommand for instance info. diff --git a/cmd/forge/cmd_sync.go b/cmd/forge/cmd_sync.go index ab12798..390d8c9 100644 --- a/cmd/forge/cmd_sync.go +++ b/cmd/forge/cmd_sync.go @@ -10,8 +10,8 @@ import ( forgejo "codeberg.org/mvdkleijn/forgejo-sdk/forgejo/v2" "forge.lthn.ai/core/cli/pkg/cli" - coreerr "forge.lthn.ai/core/go-log" - fg "forge.lthn.ai/core/go-scm/forge" + coreerr "dappco.re/go/core/log" + fg "dappco.re/go/core/scm/forge" ) // Sync command flags. diff --git a/cmd/gitea/cmd_config.go b/cmd/gitea/cmd_config.go index 59c021b..69f07f3 100644 --- a/cmd/gitea/cmd_config.go +++ b/cmd/gitea/cmd_config.go @@ -4,7 +4,7 @@ import ( "fmt" "forge.lthn.ai/core/cli/pkg/cli" - gt "forge.lthn.ai/core/go-scm/gitea" + gt "dappco.re/go/core/scm/gitea" ) // Config command flags. diff --git a/cmd/gitea/cmd_issues.go b/cmd/gitea/cmd_issues.go index 672dc6f..a4fd5e2 100644 --- a/cmd/gitea/cmd_issues.go +++ b/cmd/gitea/cmd_issues.go @@ -7,7 +7,7 @@ import ( "code.gitea.io/sdk/gitea" "forge.lthn.ai/core/cli/pkg/cli" - gt "forge.lthn.ai/core/go-scm/gitea" + gt "dappco.re/go/core/scm/gitea" ) // Issues command flags. diff --git a/cmd/gitea/cmd_mirror.go b/cmd/gitea/cmd_mirror.go index a150d74..e108686 100644 --- a/cmd/gitea/cmd_mirror.go +++ b/cmd/gitea/cmd_mirror.go @@ -6,7 +6,7 @@ import ( "strings" "forge.lthn.ai/core/cli/pkg/cli" - gt "forge.lthn.ai/core/go-scm/gitea" + gt "dappco.re/go/core/scm/gitea" ) // Mirror command flags. diff --git a/cmd/gitea/cmd_prs.go b/cmd/gitea/cmd_prs.go index 303892f..00e059e 100644 --- a/cmd/gitea/cmd_prs.go +++ b/cmd/gitea/cmd_prs.go @@ -7,7 +7,7 @@ import ( sdk "code.gitea.io/sdk/gitea" "forge.lthn.ai/core/cli/pkg/cli" - gt "forge.lthn.ai/core/go-scm/gitea" + gt "dappco.re/go/core/scm/gitea" ) // PRs command flags. diff --git a/cmd/gitea/cmd_repos.go b/cmd/gitea/cmd_repos.go index 1954d63..892bdfe 100644 --- a/cmd/gitea/cmd_repos.go +++ b/cmd/gitea/cmd_repos.go @@ -4,7 +4,7 @@ import ( "fmt" "forge.lthn.ai/core/cli/pkg/cli" - gt "forge.lthn.ai/core/go-scm/gitea" + gt "dappco.re/go/core/scm/gitea" ) // Repos command flags. diff --git a/cmd/gitea/cmd_sync.go b/cmd/gitea/cmd_sync.go index 6a3e4a4..b9b4c8f 100644 --- a/cmd/gitea/cmd_sync.go +++ b/cmd/gitea/cmd_sync.go @@ -10,8 +10,8 @@ import ( "code.gitea.io/sdk/gitea" "forge.lthn.ai/core/cli/pkg/cli" - coreerr "forge.lthn.ai/core/go-log" - gt "forge.lthn.ai/core/go-scm/gitea" + coreerr "dappco.re/go/core/log" + gt "dappco.re/go/core/scm/gitea" ) // Sync command flags. diff --git a/cmd/scm/cmd_compile.go b/cmd/scm/cmd_compile.go index 1e5333f..e5cce30 100644 --- a/cmd/scm/cmd_compile.go +++ b/cmd/scm/cmd_compile.go @@ -7,8 +7,8 @@ import ( "strings" "forge.lthn.ai/core/cli/pkg/cli" - "forge.lthn.ai/core/go-io" - "forge.lthn.ai/core/go-scm/manifest" + "dappco.re/go/core/io" + "dappco.re/go/core/scm/manifest" ) func addCompileCommand(parent *cli.Command) { diff --git a/cmd/scm/cmd_export.go b/cmd/scm/cmd_export.go index dd4286c..79da671 100644 --- a/cmd/scm/cmd_export.go +++ b/cmd/scm/cmd_export.go @@ -4,8 +4,8 @@ import ( "fmt" "forge.lthn.ai/core/cli/pkg/cli" - "forge.lthn.ai/core/go-io" - "forge.lthn.ai/core/go-scm/manifest" + "dappco.re/go/core/io" + "dappco.re/go/core/scm/manifest" ) func addExportCommand(parent *cli.Command) { diff --git a/cmd/scm/cmd_index.go b/cmd/scm/cmd_index.go index 2f1db2f..dd8784b 100644 --- a/cmd/scm/cmd_index.go +++ b/cmd/scm/cmd_index.go @@ -5,7 +5,7 @@ import ( "path/filepath" "forge.lthn.ai/core/cli/pkg/cli" - "forge.lthn.ai/core/go-scm/marketplace" + "dappco.re/go/core/scm/marketplace" ) func addIndexCommand(parent *cli.Command) { diff --git a/collect/bitcointalk.go b/collect/bitcointalk.go index 59f548e..8c189d6 100644 --- a/collect/bitcointalk.go +++ b/collect/bitcointalk.go @@ -9,7 +9,7 @@ import ( "strings" "time" - core "forge.lthn.ai/core/go-log" + core "dappco.re/go/core/log" "golang.org/x/net/html" ) diff --git a/collect/bitcointalk_http_test.go b/collect/bitcointalk_http_test.go index 1455df7..61a7a08 100644 --- a/collect/bitcointalk_http_test.go +++ b/collect/bitcointalk_http_test.go @@ -8,7 +8,7 @@ import ( "strings" "testing" - "forge.lthn.ai/core/go-io" + "dappco.re/go/core/io" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) diff --git a/collect/bitcointalk_test.go b/collect/bitcointalk_test.go index a93fea3..1418f09 100644 --- a/collect/bitcointalk_test.go +++ b/collect/bitcointalk_test.go @@ -4,7 +4,7 @@ import ( "context" "testing" - "forge.lthn.ai/core/go-io" + "dappco.re/go/core/io" "github.com/stretchr/testify/assert" ) diff --git a/collect/collect.go b/collect/collect.go index 842c5e6..d1acd04 100644 --- a/collect/collect.go +++ b/collect/collect.go @@ -8,7 +8,7 @@ import ( "context" "path/filepath" - "forge.lthn.ai/core/go-io" + "dappco.re/go/core/io" ) // Collector is the interface all collection sources implement. diff --git a/collect/collect_test.go b/collect/collect_test.go index 33d54b1..f8e473a 100644 --- a/collect/collect_test.go +++ b/collect/collect_test.go @@ -3,7 +3,7 @@ package collect import ( "testing" - "forge.lthn.ai/core/go-io" + "dappco.re/go/core/io" "github.com/stretchr/testify/assert" ) diff --git a/collect/coverage_boost_test.go b/collect/coverage_boost_test.go index 179e28d..70bae86 100644 --- a/collect/coverage_boost_test.go +++ b/collect/coverage_boost_test.go @@ -8,7 +8,7 @@ import ( "testing" "time" - "forge.lthn.ai/core/go-io" + "dappco.re/go/core/io" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) diff --git a/collect/coverage_phase2_test.go b/collect/coverage_phase2_test.go index c246c89..68b5469 100644 --- a/collect/coverage_phase2_test.go +++ b/collect/coverage_phase2_test.go @@ -12,7 +12,7 @@ import ( "testing" "time" - "forge.lthn.ai/core/go-io" + "dappco.re/go/core/io" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) diff --git a/collect/excavate.go b/collect/excavate.go index 17e730f..e491ba3 100644 --- a/collect/excavate.go +++ b/collect/excavate.go @@ -5,7 +5,7 @@ import ( "fmt" "time" - core "forge.lthn.ai/core/go-log" + core "dappco.re/go/core/log" ) // Excavator runs multiple collectors as a coordinated operation. diff --git a/collect/excavate_extra_test.go b/collect/excavate_extra_test.go index ff59f4c..dfc3001 100644 --- a/collect/excavate_extra_test.go +++ b/collect/excavate_extra_test.go @@ -5,7 +5,7 @@ import ( "testing" "time" - "forge.lthn.ai/core/go-io" + "dappco.re/go/core/io" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) diff --git a/collect/excavate_test.go b/collect/excavate_test.go index bc0d177..0bebb30 100644 --- a/collect/excavate_test.go +++ b/collect/excavate_test.go @@ -5,7 +5,7 @@ import ( "fmt" "testing" - "forge.lthn.ai/core/go-io" + "dappco.re/go/core/io" "github.com/stretchr/testify/assert" ) diff --git a/collect/github.go b/collect/github.go index a5904b7..cad8fa7 100644 --- a/collect/github.go +++ b/collect/github.go @@ -9,7 +9,7 @@ import ( "strings" "time" - core "forge.lthn.ai/core/go-log" + core "dappco.re/go/core/log" ) // ghIssue represents a GitHub issue or pull request as returned by the gh CLI. diff --git a/collect/github_test.go b/collect/github_test.go index 20bfdf3..afa5273 100644 --- a/collect/github_test.go +++ b/collect/github_test.go @@ -5,7 +5,7 @@ import ( "testing" "time" - "forge.lthn.ai/core/go-io" + "dappco.re/go/core/io" "github.com/stretchr/testify/assert" ) diff --git a/collect/market.go b/collect/market.go index b4ead38..e38e162 100644 --- a/collect/market.go +++ b/collect/market.go @@ -9,7 +9,7 @@ import ( "strings" "time" - core "forge.lthn.ai/core/go-log" + core "dappco.re/go/core/log" ) // coinGeckoBaseURL is the base URL for the CoinGecko API. diff --git a/collect/market_extra_test.go b/collect/market_extra_test.go index ea9e648..bbbcac2 100644 --- a/collect/market_extra_test.go +++ b/collect/market_extra_test.go @@ -7,7 +7,7 @@ import ( "net/http/httptest" "testing" - "forge.lthn.ai/core/go-io" + "dappco.re/go/core/io" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) diff --git a/collect/market_test.go b/collect/market_test.go index 90d59da..c945a5f 100644 --- a/collect/market_test.go +++ b/collect/market_test.go @@ -7,7 +7,7 @@ import ( "net/http/httptest" "testing" - "forge.lthn.ai/core/go-io" + "dappco.re/go/core/io" "github.com/stretchr/testify/assert" ) diff --git a/collect/papers.go b/collect/papers.go index 4081eba..bfbf663 100644 --- a/collect/papers.go +++ b/collect/papers.go @@ -10,7 +10,7 @@ import ( "path/filepath" "strings" - core "forge.lthn.ai/core/go-log" + core "dappco.re/go/core/log" "golang.org/x/net/html" ) diff --git a/collect/papers_http_test.go b/collect/papers_http_test.go index 2341507..b755413 100644 --- a/collect/papers_http_test.go +++ b/collect/papers_http_test.go @@ -7,7 +7,7 @@ import ( "strings" "testing" - "forge.lthn.ai/core/go-io" + "dappco.re/go/core/io" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "golang.org/x/net/html" diff --git a/collect/papers_test.go b/collect/papers_test.go index 347c008..4279e4f 100644 --- a/collect/papers_test.go +++ b/collect/papers_test.go @@ -4,7 +4,7 @@ import ( "context" "testing" - "forge.lthn.ai/core/go-io" + "dappco.re/go/core/io" "github.com/stretchr/testify/assert" ) diff --git a/collect/process.go b/collect/process.go index 247b3ac..c0fb8d2 100644 --- a/collect/process.go +++ b/collect/process.go @@ -9,7 +9,7 @@ import ( "slices" "strings" - core "forge.lthn.ai/core/go-log" + core "dappco.re/go/core/log" "golang.org/x/net/html" ) diff --git a/collect/process_extra_test.go b/collect/process_extra_test.go index 9cf049d..75dcd40 100644 --- a/collect/process_extra_test.go +++ b/collect/process_extra_test.go @@ -4,7 +4,7 @@ import ( "context" "testing" - "forge.lthn.ai/core/go-io" + "dappco.re/go/core/io" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) diff --git a/collect/process_test.go b/collect/process_test.go index 1b3f568..6753f10 100644 --- a/collect/process_test.go +++ b/collect/process_test.go @@ -4,7 +4,7 @@ import ( "context" "testing" - "forge.lthn.ai/core/go-io" + "dappco.re/go/core/io" "github.com/stretchr/testify/assert" ) diff --git a/collect/ratelimit.go b/collect/ratelimit.go index 7a28895..5fc4969 100644 --- a/collect/ratelimit.go +++ b/collect/ratelimit.go @@ -10,7 +10,7 @@ import ( "sync" "time" - core "forge.lthn.ai/core/go-log" + core "dappco.re/go/core/log" ) // RateLimiter tracks per-source rate limiting to avoid overwhelming APIs. diff --git a/collect/state.go b/collect/state.go index b71a816..08e2b95 100644 --- a/collect/state.go +++ b/collect/state.go @@ -5,8 +5,8 @@ import ( "sync" "time" - core "forge.lthn.ai/core/go-log" - "forge.lthn.ai/core/go-io" + core "dappco.re/go/core/log" + "dappco.re/go/core/io" ) // State tracks collection progress for incremental runs. diff --git a/collect/state_extra_test.go b/collect/state_extra_test.go index 38d8827..72e3278 100644 --- a/collect/state_extra_test.go +++ b/collect/state_extra_test.go @@ -3,7 +3,7 @@ package collect import ( "testing" - "forge.lthn.ai/core/go-io" + "dappco.re/go/core/io" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) diff --git a/collect/state_test.go b/collect/state_test.go index 6a6052e..2b514ce 100644 --- a/collect/state_test.go +++ b/collect/state_test.go @@ -4,7 +4,7 @@ import ( "testing" "time" - "forge.lthn.ai/core/go-io" + "dappco.re/go/core/io" "github.com/stretchr/testify/assert" ) diff --git a/docs/development.md b/docs/development.md index 6f8a62f..86225ed 100644 --- a/docs/development.md +++ b/docs/development.md @@ -21,7 +21,7 @@ description: How to build, test, and contribute to go-scm. ``` go-scm/ -+-- go.mod Module definition (forge.lthn.ai/core/go-scm) ++-- go.mod Module definition (dappco.re/go/core/scm) +-- forge/ Forgejo API client + tests +-- gitea/ Gitea API client + tests +-- git/ Multi-repo git operations + tests diff --git a/docs/index.md b/docs/index.md index 0e014e4..b6f9c65 100644 --- a/docs/index.md +++ b/docs/index.md @@ -7,7 +7,7 @@ description: SCM integration, AgentCI automation, and data collection for the Le `go-scm` provides source control management integration for the Lethean ecosystem. It wraps the Forgejo and Gitea APIs behind ergonomic Go clients, runs an automated PR pipeline for AI agent workflows, collects data from external sources, and manages multi-repo workspaces via a declarative registry. -**Module path:** `forge.lthn.ai/core/go-scm` +**Module path:** `dappco.re/go/core/scm` **Go version:** 1.26 **Licence:** EUPL-1.2 @@ -16,7 +16,7 @@ description: SCM integration, AgentCI automation, and data collection for the Le ### Forgejo API Client ```go -import "forge.lthn.ai/core/go-scm/forge" +import "dappco.re/go/core/scm/forge" // Create a client from config file / env / flags client, err := forge.NewFromConfig("", "") @@ -35,7 +35,7 @@ for repo, err := range client.ListOrgReposIter("core") { ### Multi-Repo Git Status ```go -import "forge.lthn.ai/core/go-scm/git" +import "dappco.re/go/core/scm/git" statuses := git.Status(ctx, git.StatusOptions{ Paths: []string{"/home/dev/core/go-scm", "/home/dev/core/go-ai"}, @@ -53,9 +53,9 @@ for _, s := range statuses { ```go import ( - "forge.lthn.ai/core/go-scm/jobrunner" - "forge.lthn.ai/core/go-scm/jobrunner/forgejo" - "forge.lthn.ai/core/go-scm/jobrunner/handlers" + "dappco.re/go/core/scm/jobrunner" + "dappco.re/go/core/scm/jobrunner/forgejo" + "dappco.re/go/core/scm/jobrunner/handlers" ) source := forgejo.New(forgejo.Config{Repos: []string{"core/go-scm"}}, forgeClient) @@ -74,7 +74,7 @@ poller.Run(ctx) ### Data Collection ```go -import "forge.lthn.ai/core/go-scm/collect" +import "dappco.re/go/core/scm/collect" cfg := collect.NewConfig("/tmp/collected") excavator := &collect.Excavator{ @@ -118,9 +118,9 @@ result, err := excavator.Run(ctx, cfg) | `code.gitea.io/sdk/gitea` | Gitea API SDK | | `forge.lthn.ai/core/cli` | CLI framework (Cobra, TUI) | | `forge.lthn.ai/core/config` | Layered config (`~/.core/config.yaml`) | -| `forge.lthn.ai/core/go-io` | Filesystem abstraction (Medium, Sandbox, Store) | -| `forge.lthn.ai/core/go-log` | Structured logging and contextual error helper | -| `forge.lthn.ai/core/go-i18n` | Internationalisation | +| `dappco.re/go/core/io` | Filesystem abstraction (Medium, Sandbox, Store) | +| `dappco.re/go/core/log` | Structured logging and contextual error helper | +| `dappco.re/go/core/i18n` | Internationalisation | | `github.com/stretchr/testify` | Test assertions | | `golang.org/x/net` | HTML parsing for collectors | | `gopkg.in/yaml.v3` | YAML parsing for manifests and registries | diff --git a/docs/plans/2026-03-15-manifest-core-json.md b/docs/plans/2026-03-15-manifest-core-json.md index a05d6a5..35226e3 100644 --- a/docs/plans/2026-03-15-manifest-core-json.md +++ b/docs/plans/2026-03-15-manifest-core-json.md @@ -39,7 +39,7 @@ import ( "encoding/json" "testing" - io "forge.lthn.ai/core/go-io" + io "dappco.re/go/core/io" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) @@ -127,7 +127,7 @@ import ( "path/filepath" "time" - io "forge.lthn.ai/core/go-io" + io "dappco.re/go/core/io" ) // CompiledManifest is the core.json distribution format. @@ -217,7 +217,7 @@ package marketplace import ( "testing" - io "forge.lthn.ai/core/go-io" + io "dappco.re/go/core/io" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) @@ -318,8 +318,8 @@ import ( "fmt" "sort" - io "forge.lthn.ai/core/go-io" - "forge.lthn.ai/core/go-scm/manifest" + io "dappco.re/go/core/io" + "dappco.re/go/core/scm/manifest" ) // IndexOptions controls how the index is built. diff --git a/forge/client.go b/forge/client.go index 30ff566..2ee2bb9 100644 --- a/forge/client.go +++ b/forge/client.go @@ -11,7 +11,7 @@ package forge import ( forgejo "codeberg.org/mvdkleijn/forgejo-sdk/forgejo/v2" - "forge.lthn.ai/core/go-log" + "dappco.re/go/core/log" ) // Client wraps the Forgejo SDK client with config-based auth. diff --git a/forge/config.go b/forge/config.go index eb33bfd..1e97bda 100644 --- a/forge/config.go +++ b/forge/config.go @@ -4,7 +4,7 @@ import ( "os" "forge.lthn.ai/core/config" - "forge.lthn.ai/core/go-log" + "dappco.re/go/core/log" ) const ( diff --git a/forge/issues.go b/forge/issues.go index 7a71699..664e140 100644 --- a/forge/issues.go +++ b/forge/issues.go @@ -5,7 +5,7 @@ import ( forgejo "codeberg.org/mvdkleijn/forgejo-sdk/forgejo/v2" - "forge.lthn.ai/core/go-log" + "dappco.re/go/core/log" ) // ListIssuesOpts configures issue listing. diff --git a/forge/labels.go b/forge/labels.go index 77a7b85..063cb46 100644 --- a/forge/labels.go +++ b/forge/labels.go @@ -5,7 +5,7 @@ import ( forgejo "codeberg.org/mvdkleijn/forgejo-sdk/forgejo/v2" - "forge.lthn.ai/core/go-log" + "dappco.re/go/core/log" ) // ListOrgLabels returns all labels for repos in the given organisation. diff --git a/forge/meta.go b/forge/meta.go index 97869d2..0cece76 100644 --- a/forge/meta.go +++ b/forge/meta.go @@ -5,7 +5,7 @@ import ( forgejo "codeberg.org/mvdkleijn/forgejo-sdk/forgejo/v2" - "forge.lthn.ai/core/go-log" + "dappco.re/go/core/log" ) // PRMeta holds structural signals from a pull request, diff --git a/forge/orgs.go b/forge/orgs.go index 10bdee0..db20323 100644 --- a/forge/orgs.go +++ b/forge/orgs.go @@ -3,7 +3,7 @@ package forge import ( forgejo "codeberg.org/mvdkleijn/forgejo-sdk/forgejo/v2" - "forge.lthn.ai/core/go-log" + "dappco.re/go/core/log" ) // ListMyOrgs returns all organisations for the authenticated user. diff --git a/forge/prs.go b/forge/prs.go index 41141ee..070662f 100644 --- a/forge/prs.go +++ b/forge/prs.go @@ -8,7 +8,7 @@ import ( forgejo "codeberg.org/mvdkleijn/forgejo-sdk/forgejo/v2" - "forge.lthn.ai/core/go-log" + "dappco.re/go/core/log" ) // MergePullRequest merges a pull request with the given method ("squash", "rebase", "merge"). diff --git a/forge/repos.go b/forge/repos.go index 19d6ce2..d894aee 100644 --- a/forge/repos.go +++ b/forge/repos.go @@ -5,7 +5,7 @@ import ( forgejo "codeberg.org/mvdkleijn/forgejo-sdk/forgejo/v2" - "forge.lthn.ai/core/go-log" + "dappco.re/go/core/log" ) // ListOrgRepos returns all repositories for the given organisation. diff --git a/forge/webhooks.go b/forge/webhooks.go index 233e4a5..464c690 100644 --- a/forge/webhooks.go +++ b/forge/webhooks.go @@ -3,7 +3,7 @@ package forge import ( forgejo "codeberg.org/mvdkleijn/forgejo-sdk/forgejo/v2" - "forge.lthn.ai/core/go-log" + "dappco.re/go/core/log" ) // CreateRepoWebhook creates a webhook on a repository. diff --git a/gitea/client.go b/gitea/client.go index 8e23a87..6d752ab 100644 --- a/gitea/client.go +++ b/gitea/client.go @@ -11,7 +11,7 @@ package gitea import ( "code.gitea.io/sdk/gitea" - "forge.lthn.ai/core/go-log" + "dappco.re/go/core/log" ) // Client wraps the Gitea SDK client with config-based auth. diff --git a/gitea/config.go b/gitea/config.go index 7ff3fe3..80d4127 100644 --- a/gitea/config.go +++ b/gitea/config.go @@ -4,7 +4,7 @@ import ( "os" "forge.lthn.ai/core/config" - "forge.lthn.ai/core/go-log" + "dappco.re/go/core/log" ) const ( diff --git a/gitea/issues.go b/gitea/issues.go index 3e3193e..611b912 100644 --- a/gitea/issues.go +++ b/gitea/issues.go @@ -5,7 +5,7 @@ import ( "code.gitea.io/sdk/gitea" - "forge.lthn.ai/core/go-log" + "dappco.re/go/core/log" ) // ListIssuesOpts configures issue listing. diff --git a/gitea/meta.go b/gitea/meta.go index c4b60c2..a050ef8 100644 --- a/gitea/meta.go +++ b/gitea/meta.go @@ -5,7 +5,7 @@ import ( "code.gitea.io/sdk/gitea" - "forge.lthn.ai/core/go-log" + "dappco.re/go/core/log" ) // PRMeta holds structural signals from a pull request, diff --git a/gitea/repos.go b/gitea/repos.go index eefc348..ad3bfba 100644 --- a/gitea/repos.go +++ b/gitea/repos.go @@ -5,7 +5,7 @@ import ( "code.gitea.io/sdk/gitea" - "forge.lthn.ai/core/go-log" + "dappco.re/go/core/log" ) // ListOrgRepos returns all repositories for the given organisation. diff --git a/go.mod b/go.mod index 797e4b9..9e7770a 100644 --- a/go.mod +++ b/go.mod @@ -1,4 +1,4 @@ -module forge.lthn.ai/core/go-scm +module dappco.re/go/core/scm go 1.26.0 @@ -6,13 +6,13 @@ require ( code.gitea.io/sdk/gitea v0.23.2 codeberg.org/mvdkleijn/forgejo-sdk/forgejo/v2 v2.2.0 dappco.re/go/core v0.4.7 - forge.lthn.ai/core/api v0.1.5 + dappco.re/go/core/api v0.1.5 + dappco.re/go/core/i18n v0.1.7 + dappco.re/go/core/io v0.1.7 + dappco.re/go/core/log v0.0.4 + dappco.re/go/core/ws v0.2.5 forge.lthn.ai/core/cli v0.3.7 forge.lthn.ai/core/config v0.1.8 - forge.lthn.ai/core/go-i18n v0.1.7 - forge.lthn.ai/core/go-io v0.1.7 - forge.lthn.ai/core/go-log v0.0.4 - forge.lthn.ai/core/go-ws v0.2.5 github.com/gin-gonic/gin v1.12.0 github.com/stretchr/testify v1.11.1 golang.org/x/net v0.52.0 @@ -20,8 +20,11 @@ require ( ) require ( - forge.lthn.ai/core/go v0.3.3 // indirect - forge.lthn.ai/core/go-inference v0.1.6 // indirect + forge.lthn.ai/core/go v0.3.2 // indirect + forge.lthn.ai/core/go-i18n v0.1.7 // indirect + forge.lthn.ai/core/go-inference v0.1.7 // indirect + forge.lthn.ai/core/go-io v0.1.5 // indirect + forge.lthn.ai/core/go-log v0.0.4 // indirect github.com/42wim/httpsig v1.2.3 // indirect github.com/99designs/gqlgen v0.17.88 // indirect github.com/KyleBanks/depth v1.2.1 // indirect @@ -152,3 +155,15 @@ require ( modernc.org/memory v1.11.0 // indirect modernc.org/sqlite v1.47.0 // indirect ) + +replace ( + dappco.re/go/core => ../go + dappco.re/go/core/api => ../api + dappco.re/go/core/i18n => ../go-i18n + dappco.re/go/core/io => ../go-io + dappco.re/go/core/log => ../go-log + dappco.re/go/core/ws => ../go-ws + forge.lthn.ai/core/cli => ../cli + forge.lthn.ai/core/config => ../config + forge.lthn.ai/core/go-inference => ../go-inference +) diff --git a/go.sum b/go.sum index df3d4f4..a9b9f9c 100644 --- a/go.sum +++ b/go.sum @@ -2,26 +2,14 @@ code.gitea.io/sdk/gitea v0.23.2 h1:iJB1FDmLegwfwjX8gotBDHdPSbk/ZR8V9VmEJaVsJYg= code.gitea.io/sdk/gitea v0.23.2/go.mod h1:yyF5+GhljqvA30sRDreoyHILruNiy4ASufugzYg0VHM= codeberg.org/mvdkleijn/forgejo-sdk/forgejo/v2 v2.2.0 h1:HTCWpzyWQOHDWt3LzI6/d2jvUDsw/vgGRWm/8BTvcqI= codeberg.org/mvdkleijn/forgejo-sdk/forgejo/v2 v2.2.0/go.mod h1:ZglEEDj+qkxYUb+SQIeqGtFxQrbaMYqIOgahNKb7uxs= -dappco.re/go/core v0.4.7 h1:KmIA/2lo6rl1NMtLrKqCWfMlUqpDZYH3q0/d10dTtGA= -dappco.re/go/core v0.4.7/go.mod h1:f2/tBZ3+3IqDrg2F5F598llv0nmb/4gJVCFzM5geE4A= -forge.lthn.ai/core/api v0.1.5 h1:NwZrcOyBjaiz5/cn0n0tnlMUodi8Or6FHMx59C7Kv2o= -forge.lthn.ai/core/api v0.1.5/go.mod h1:PBnaWyOVXSOGy+0x2XAPUFMYJxQ2CNhppia/D06ZPII= -forge.lthn.ai/core/cli v0.3.7 h1:1GrbaGg0wDGHr6+klSbbGyN/9sSbHvFbdySJznymhwg= -forge.lthn.ai/core/cli v0.3.7/go.mod h1:DBUppJkA9P45ZFGgI2B8VXw1rAZxamHoI/KG7fRvTNs= -forge.lthn.ai/core/config v0.1.8 h1:xP2hys7T94QGVF/OTh84/Zr5Dm/dL/0vzjht8zi+LOg= -forge.lthn.ai/core/config v0.1.8/go.mod h1:8epZrkwoCt+5ayrqdinOUU/+w6UoxOyv9ZrdgVOgYfQ= -forge.lthn.ai/core/go v0.3.3 h1:kYYZ2nRYy0/Be3cyuLJspRjLqTMxpckVyhb/7Sw2gd0= -forge.lthn.ai/core/go v0.3.3/go.mod h1:Cp4ac25pghvO2iqOu59t1GyngTKVOzKB5/VPdhRi9CQ= +forge.lthn.ai/core/go v0.3.2 h1:VB9pW6ggqBhe438cjfE2iSI5Lg+62MmRbaOFglZM+nQ= +forge.lthn.ai/core/go v0.3.2/go.mod h1:f7/zb3Labn4ARfwTq5Bi2AFHY+uxyPHozO+hLb54eFo= forge.lthn.ai/core/go-i18n v0.1.7 h1:aHkAoc3W8fw3RPNvw/UszQbjyFWXHszzbZgty3SwyAA= forge.lthn.ai/core/go-i18n v0.1.7/go.mod h1:0VDjwtY99NSj2iqwrI09h5GUsJeM9s48MLkr+/Dn4G8= -forge.lthn.ai/core/go-inference v0.1.6 h1:ce42zC0zO8PuISUyAukAN1NACEdWp5wF1mRgnh5+58E= -forge.lthn.ai/core/go-inference v0.1.6/go.mod h1:jfWz+IJX55wAH98+ic6FEqqGB6/P31CHlg7VY7pxREw= -forge.lthn.ai/core/go-io v0.1.7 h1:Tdb6sqh+zz1lsGJaNX9RFWM6MJ/RhSAyxfulLXrJsbk= -forge.lthn.ai/core/go-io v0.1.7/go.mod h1:8lRLFk4Dnp5cR/Cyzh9WclD5566TbpdRgwcH7UZLWn4= +forge.lthn.ai/core/go-io v0.1.5 h1:+XJ1YhaGGFLGtcNbPtVlndTjk+pO0Ydi2hRDj5/cHOM= +forge.lthn.ai/core/go-io v0.1.5/go.mod h1:FRtXSsi8W+U9vewCU+LBAqqbIj3wjXA4dBdSv3SAtWI= forge.lthn.ai/core/go-log v0.0.4 h1:KTuCEPgFmuM8KJfnyQ8vPOU1Jg654W74h8IJvfQMfv0= forge.lthn.ai/core/go-log v0.0.4/go.mod h1:r14MXKOD3LF/sI8XUJQhRk/SZHBE7jAFVuCfgkXoZPw= -forge.lthn.ai/core/go-ws v0.2.5 h1:ZIV7Yrv01R/xpJUogA5vrfP9yB9li1w7EV3eZFMt8h0= -forge.lthn.ai/core/go-ws v0.2.5/go.mod h1:C3riJyLLcV6QhLvYlq3P/XkGTsN598qQeGBoLdoHBU4= github.com/42wim/httpsig v1.2.3 h1:xb0YyWhkYj57SPtfSttIobJUPJZB9as1nsfo7KWVcEs= github.com/42wim/httpsig v1.2.3/go.mod h1:nZq9OlYKDrUBhptd77IHx4/sZZD+IxTBADvAPI9G/EM= github.com/99designs/gqlgen v0.17.88 h1:neMQDgehMwT1vYIOx/w5ZYPUU/iMNAJzRO44I5Intoc= diff --git a/jobrunner/forgejo/signals.go b/jobrunner/forgejo/signals.go index 9f1e1ee..48faa79 100644 --- a/jobrunner/forgejo/signals.go +++ b/jobrunner/forgejo/signals.go @@ -6,7 +6,7 @@ import ( forgejosdk "codeberg.org/mvdkleijn/forgejo-sdk/forgejo/v2" - "forge.lthn.ai/core/go-scm/jobrunner" + "dappco.re/go/core/scm/jobrunner" ) // epicChildRe matches checklist items: - [ ] #42 or - [x] #42 diff --git a/jobrunner/forgejo/source.go b/jobrunner/forgejo/source.go index 33fa3df..61f8970 100644 --- a/jobrunner/forgejo/source.go +++ b/jobrunner/forgejo/source.go @@ -5,9 +5,9 @@ import ( "fmt" "strings" - "forge.lthn.ai/core/go-scm/forge" - "forge.lthn.ai/core/go-scm/jobrunner" - "forge.lthn.ai/core/go-log" + "dappco.re/go/core/scm/forge" + "dappco.re/go/core/scm/jobrunner" + "dappco.re/go/core/log" ) // Config configures a ForgejoSource. diff --git a/jobrunner/forgejo/source_test.go b/jobrunner/forgejo/source_test.go index 5721201..965e765 100644 --- a/jobrunner/forgejo/source_test.go +++ b/jobrunner/forgejo/source_test.go @@ -11,8 +11,8 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "forge.lthn.ai/core/go-scm/forge" - "forge.lthn.ai/core/go-scm/jobrunner" + "dappco.re/go/core/scm/forge" + "dappco.re/go/core/scm/jobrunner" ) // withVersion wraps an HTTP handler to serve the Forgejo /api/v1/version diff --git a/jobrunner/handlers/completion.go b/jobrunner/handlers/completion.go index 67598d0..0c9b40e 100644 --- a/jobrunner/handlers/completion.go +++ b/jobrunner/handlers/completion.go @@ -5,9 +5,9 @@ import ( "fmt" "time" - coreerr "forge.lthn.ai/core/go-log" - "forge.lthn.ai/core/go-scm/forge" - "forge.lthn.ai/core/go-scm/jobrunner" + coreerr "dappco.re/go/core/log" + "dappco.re/go/core/scm/forge" + "dappco.re/go/core/scm/jobrunner" ) const ( diff --git a/jobrunner/handlers/dispatch.go b/jobrunner/handlers/dispatch.go index 0ea7372..fbd83e2 100644 --- a/jobrunner/handlers/dispatch.go +++ b/jobrunner/handlers/dispatch.go @@ -8,10 +8,10 @@ import ( "path/filepath" "time" - coreerr "forge.lthn.ai/core/go-log" - "forge.lthn.ai/core/go-scm/agentci" - "forge.lthn.ai/core/go-scm/forge" - "forge.lthn.ai/core/go-scm/jobrunner" + coreerr "dappco.re/go/core/log" + "dappco.re/go/core/scm/agentci" + "dappco.re/go/core/scm/forge" + "dappco.re/go/core/scm/jobrunner" ) const ( diff --git a/jobrunner/handlers/dispatch_test.go b/jobrunner/handlers/dispatch_test.go index 8456d38..f981207 100644 --- a/jobrunner/handlers/dispatch_test.go +++ b/jobrunner/handlers/dispatch_test.go @@ -7,8 +7,8 @@ import ( "net/http/httptest" "testing" - "forge.lthn.ai/core/go-scm/agentci" - "forge.lthn.ai/core/go-scm/jobrunner" + "dappco.re/go/core/scm/agentci" + "dappco.re/go/core/scm/jobrunner" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) diff --git a/jobrunner/handlers/enable_auto_merge.go b/jobrunner/handlers/enable_auto_merge.go index dc919e7..7ab4d30 100644 --- a/jobrunner/handlers/enable_auto_merge.go +++ b/jobrunner/handlers/enable_auto_merge.go @@ -5,8 +5,8 @@ import ( "fmt" "time" - "forge.lthn.ai/core/go-scm/forge" - "forge.lthn.ai/core/go-scm/jobrunner" + "dappco.re/go/core/scm/forge" + "dappco.re/go/core/scm/jobrunner" ) // EnableAutoMergeHandler merges a PR that is ready using squash strategy. diff --git a/jobrunner/handlers/enable_auto_merge_test.go b/jobrunner/handlers/enable_auto_merge_test.go index a85130e..9a5feac 100644 --- a/jobrunner/handlers/enable_auto_merge_test.go +++ b/jobrunner/handlers/enable_auto_merge_test.go @@ -10,7 +10,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "forge.lthn.ai/core/go-scm/jobrunner" + "dappco.re/go/core/scm/jobrunner" ) func TestEnableAutoMerge_Match_Good(t *testing.T) { diff --git a/jobrunner/handlers/publish_draft.go b/jobrunner/handlers/publish_draft.go index 3604e9a..202726b 100644 --- a/jobrunner/handlers/publish_draft.go +++ b/jobrunner/handlers/publish_draft.go @@ -5,8 +5,8 @@ import ( "fmt" "time" - "forge.lthn.ai/core/go-scm/forge" - "forge.lthn.ai/core/go-scm/jobrunner" + "dappco.re/go/core/scm/forge" + "dappco.re/go/core/scm/jobrunner" ) // PublishDraftHandler marks a draft PR as ready for review once its checks pass. diff --git a/jobrunner/handlers/publish_draft_test.go b/jobrunner/handlers/publish_draft_test.go index dd76e81..eb4c5f9 100644 --- a/jobrunner/handlers/publish_draft_test.go +++ b/jobrunner/handlers/publish_draft_test.go @@ -10,7 +10,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "forge.lthn.ai/core/go-scm/jobrunner" + "dappco.re/go/core/scm/jobrunner" ) func TestPublishDraft_Match_Good(t *testing.T) { diff --git a/jobrunner/handlers/resolve_threads.go b/jobrunner/handlers/resolve_threads.go index 4abbc6e..19f8480 100644 --- a/jobrunner/handlers/resolve_threads.go +++ b/jobrunner/handlers/resolve_threads.go @@ -7,9 +7,9 @@ import ( forgejosdk "codeberg.org/mvdkleijn/forgejo-sdk/forgejo/v2" - coreerr "forge.lthn.ai/core/go-log" - "forge.lthn.ai/core/go-scm/forge" - "forge.lthn.ai/core/go-scm/jobrunner" + coreerr "dappco.re/go/core/log" + "dappco.re/go/core/scm/forge" + "dappco.re/go/core/scm/jobrunner" ) // DismissReviewsHandler dismisses stale "request changes" reviews on a PR. diff --git a/jobrunner/handlers/resolve_threads_test.go b/jobrunner/handlers/resolve_threads_test.go index 4b09208..ec9dfd6 100644 --- a/jobrunner/handlers/resolve_threads_test.go +++ b/jobrunner/handlers/resolve_threads_test.go @@ -10,7 +10,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "forge.lthn.ai/core/go-scm/jobrunner" + "dappco.re/go/core/scm/jobrunner" ) func TestDismissReviews_Match_Good(t *testing.T) { diff --git a/jobrunner/handlers/send_fix_command.go b/jobrunner/handlers/send_fix_command.go index bfb7202..5b65eab 100644 --- a/jobrunner/handlers/send_fix_command.go +++ b/jobrunner/handlers/send_fix_command.go @@ -5,8 +5,8 @@ import ( "fmt" "time" - "forge.lthn.ai/core/go-scm/forge" - "forge.lthn.ai/core/go-scm/jobrunner" + "dappco.re/go/core/scm/forge" + "dappco.re/go/core/scm/jobrunner" ) // SendFixCommandHandler posts a comment on a PR asking for conflict or diff --git a/jobrunner/handlers/send_fix_command_test.go b/jobrunner/handlers/send_fix_command_test.go index 871c739..54e5cbd 100644 --- a/jobrunner/handlers/send_fix_command_test.go +++ b/jobrunner/handlers/send_fix_command_test.go @@ -10,7 +10,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "forge.lthn.ai/core/go-scm/jobrunner" + "dappco.re/go/core/scm/jobrunner" ) func TestSendFixCommand_Match_Good_Conflicting(t *testing.T) { diff --git a/jobrunner/handlers/testhelper_test.go b/jobrunner/handlers/testhelper_test.go index 277591c..20d966b 100644 --- a/jobrunner/handlers/testhelper_test.go +++ b/jobrunner/handlers/testhelper_test.go @@ -7,7 +7,7 @@ import ( "github.com/stretchr/testify/require" - "forge.lthn.ai/core/go-scm/forge" + "dappco.re/go/core/scm/forge" ) // forgejoVersionResponse is the JSON response for /api/v1/version. diff --git a/jobrunner/handlers/tick_parent.go b/jobrunner/handlers/tick_parent.go index 6ed0b26..2d4bb74 100644 --- a/jobrunner/handlers/tick_parent.go +++ b/jobrunner/handlers/tick_parent.go @@ -8,9 +8,9 @@ import ( forgejosdk "codeberg.org/mvdkleijn/forgejo-sdk/forgejo/v2" - coreerr "forge.lthn.ai/core/go-log" - "forge.lthn.ai/core/go-scm/forge" - "forge.lthn.ai/core/go-scm/jobrunner" + coreerr "dappco.re/go/core/log" + "dappco.re/go/core/scm/forge" + "dappco.re/go/core/scm/jobrunner" ) // TickParentHandler ticks a child checkbox in the parent epic issue body diff --git a/jobrunner/handlers/tick_parent_test.go b/jobrunner/handlers/tick_parent_test.go index 4a8fd78..836ecdf 100644 --- a/jobrunner/handlers/tick_parent_test.go +++ b/jobrunner/handlers/tick_parent_test.go @@ -12,7 +12,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "forge.lthn.ai/core/go-scm/jobrunner" + "dappco.re/go/core/scm/jobrunner" ) func TestTickParent_Match_Good(t *testing.T) { diff --git a/jobrunner/journal.go b/jobrunner/journal.go index db037dc..2e3976b 100644 --- a/jobrunner/journal.go +++ b/jobrunner/journal.go @@ -8,8 +8,8 @@ import ( "strings" "sync" - coreerr "forge.lthn.ai/core/go-log" - coreio "forge.lthn.ai/core/go-io" + coreerr "dappco.re/go/core/log" + coreio "dappco.re/go/core/io" ) // validPathComponent matches safe repo owner/name characters (alphanumeric, hyphen, underscore, dot). diff --git a/jobrunner/poller.go b/jobrunner/poller.go index 56c311f..302c563 100644 --- a/jobrunner/poller.go +++ b/jobrunner/poller.go @@ -5,7 +5,7 @@ import ( "sync" "time" - "forge.lthn.ai/core/go-log" + "dappco.re/go/core/log" ) // PollerConfig configures a Poller. diff --git a/manifest/compile.go b/manifest/compile.go index a15cfe7..d9f00ea 100644 --- a/manifest/compile.go +++ b/manifest/compile.go @@ -6,8 +6,8 @@ import ( "path/filepath" "time" - coreerr "forge.lthn.ai/core/go-log" - "forge.lthn.ai/core/go-io" + coreerr "dappco.re/go/core/log" + "dappco.re/go/core/io" ) // CompiledManifest is the distribution-ready form of a manifest, written as diff --git a/manifest/compile_test.go b/manifest/compile_test.go index 99363a1..09cdaa0 100644 --- a/manifest/compile_test.go +++ b/manifest/compile_test.go @@ -6,7 +6,7 @@ import ( "encoding/json" "testing" - "forge.lthn.ai/core/go-io" + "dappco.re/go/core/io" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) diff --git a/manifest/loader.go b/manifest/loader.go index 5f943c4..b454690 100644 --- a/manifest/loader.go +++ b/manifest/loader.go @@ -4,8 +4,8 @@ import ( "crypto/ed25519" "path/filepath" - coreerr "forge.lthn.ai/core/go-log" - "forge.lthn.ai/core/go-io" + coreerr "dappco.re/go/core/log" + "dappco.re/go/core/io" "gopkg.in/yaml.v3" ) diff --git a/manifest/loader_test.go b/manifest/loader_test.go index b961ae9..ed40706 100644 --- a/manifest/loader_test.go +++ b/manifest/loader_test.go @@ -4,7 +4,7 @@ import ( "crypto/ed25519" "testing" - "forge.lthn.ai/core/go-io" + "dappco.re/go/core/io" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) diff --git a/manifest/manifest.go b/manifest/manifest.go index 7611220..f0eede9 100644 --- a/manifest/manifest.go +++ b/manifest/manifest.go @@ -1,7 +1,7 @@ package manifest import ( - coreerr "forge.lthn.ai/core/go-log" + coreerr "dappco.re/go/core/log" "gopkg.in/yaml.v3" ) diff --git a/manifest/sign.go b/manifest/sign.go index 3edb94c..7eb922f 100644 --- a/manifest/sign.go +++ b/manifest/sign.go @@ -4,7 +4,7 @@ import ( "crypto/ed25519" "encoding/base64" - coreerr "forge.lthn.ai/core/go-log" + coreerr "dappco.re/go/core/log" "gopkg.in/yaml.v3" ) diff --git a/marketplace/builder.go b/marketplace/builder.go index 586bce5..c85f182 100644 --- a/marketplace/builder.go +++ b/marketplace/builder.go @@ -7,9 +7,9 @@ import ( "path/filepath" "sort" - coreerr "forge.lthn.ai/core/go-log" - coreio "forge.lthn.ai/core/go-io" - "forge.lthn.ai/core/go-scm/manifest" + coreerr "dappco.re/go/core/log" + coreio "dappco.re/go/core/io" + "dappco.re/go/core/scm/manifest" ) // IndexVersion is the current marketplace index format version. diff --git a/marketplace/builder_test.go b/marketplace/builder_test.go index 13e237e..baf3121 100644 --- a/marketplace/builder_test.go +++ b/marketplace/builder_test.go @@ -6,7 +6,7 @@ import ( "path/filepath" "testing" - "forge.lthn.ai/core/go-scm/manifest" + "dappco.re/go/core/scm/manifest" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) diff --git a/marketplace/discovery.go b/marketplace/discovery.go index edb92ab..e9e8d89 100644 --- a/marketplace/discovery.go +++ b/marketplace/discovery.go @@ -5,9 +5,9 @@ import ( "os" "path/filepath" - coreerr "forge.lthn.ai/core/go-log" - coreio "forge.lthn.ai/core/go-io" - "forge.lthn.ai/core/go-scm/manifest" + coreerr "dappco.re/go/core/log" + coreio "dappco.re/go/core/io" + "dappco.re/go/core/scm/manifest" "gopkg.in/yaml.v3" ) diff --git a/marketplace/installer.go b/marketplace/installer.go index e581bba..50a9686 100644 --- a/marketplace/installer.go +++ b/marketplace/installer.go @@ -9,10 +9,10 @@ import ( "strings" "time" - coreerr "forge.lthn.ai/core/go-log" - "forge.lthn.ai/core/go-io" - "forge.lthn.ai/core/go-scm/manifest" - "forge.lthn.ai/core/go-io/store" + coreerr "dappco.re/go/core/log" + "dappco.re/go/core/io" + "dappco.re/go/core/scm/manifest" + "dappco.re/go/core/io/store" ) const storeGroup = "_modules" diff --git a/marketplace/installer_test.go b/marketplace/installer_test.go index 772d18d..358e69a 100644 --- a/marketplace/installer_test.go +++ b/marketplace/installer_test.go @@ -9,9 +9,9 @@ import ( "path/filepath" "testing" - "forge.lthn.ai/core/go-io" - "forge.lthn.ai/core/go-scm/manifest" - "forge.lthn.ai/core/go-io/store" + "dappco.re/go/core/io" + "dappco.re/go/core/scm/manifest" + "dappco.re/go/core/io/store" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) diff --git a/marketplace/marketplace.go b/marketplace/marketplace.go index 4cb455c..c97fe39 100644 --- a/marketplace/marketplace.go +++ b/marketplace/marketplace.go @@ -4,7 +4,7 @@ import ( "encoding/json" "strings" - coreerr "forge.lthn.ai/core/go-log" + coreerr "dappco.re/go/core/log" ) // Module is a marketplace entry pointing to a module's Git repo. diff --git a/pkg/api/provider.go b/pkg/api/provider.go index 11d8b52..77475c9 100644 --- a/pkg/api/provider.go +++ b/pkg/api/provider.go @@ -11,13 +11,13 @@ import ( "encoding/hex" "net/http" - "forge.lthn.ai/core/api" - "forge.lthn.ai/core/api/pkg/provider" - "forge.lthn.ai/core/go-io" - "forge.lthn.ai/core/go-scm/manifest" - "forge.lthn.ai/core/go-scm/marketplace" - "forge.lthn.ai/core/go-scm/repos" - "forge.lthn.ai/core/go-ws" + "dappco.re/go/core/api" + "dappco.re/go/core/api/pkg/provider" + "dappco.re/go/core/io" + "dappco.re/go/core/scm/manifest" + "dappco.re/go/core/scm/marketplace" + "dappco.re/go/core/scm/repos" + "dappco.re/go/core/ws" "github.com/gin-gonic/gin" ) diff --git a/pkg/api/provider_handlers_test.go b/pkg/api/provider_handlers_test.go index a4590d6..80fb970 100644 --- a/pkg/api/provider_handlers_test.go +++ b/pkg/api/provider_handlers_test.go @@ -8,9 +8,9 @@ import ( "net/http/httptest" "testing" - goapi "forge.lthn.ai/core/api" - "forge.lthn.ai/core/go-scm/marketplace" - scmapi "forge.lthn.ai/core/go-scm/pkg/api" + goapi "dappco.re/go/core/api" + "dappco.re/go/core/scm/marketplace" + scmapi "dappco.re/go/core/scm/pkg/api" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) diff --git a/pkg/api/provider_test.go b/pkg/api/provider_test.go index 643cdce..7e72509 100644 --- a/pkg/api/provider_test.go +++ b/pkg/api/provider_test.go @@ -8,9 +8,9 @@ import ( "net/http/httptest" "testing" - goapi "forge.lthn.ai/core/api" - "forge.lthn.ai/core/go-scm/marketplace" - scmapi "forge.lthn.ai/core/go-scm/pkg/api" + goapi "dappco.re/go/core/api" + "dappco.re/go/core/scm/marketplace" + scmapi "dappco.re/go/core/scm/pkg/api" "github.com/gin-gonic/gin" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" diff --git a/plugin/installer.go b/plugin/installer.go index 4171977..d98c59c 100644 --- a/plugin/installer.go +++ b/plugin/installer.go @@ -8,8 +8,8 @@ import ( "strings" "time" - coreerr "forge.lthn.ai/core/go-log" - "forge.lthn.ai/core/go-io" + coreerr "dappco.re/go/core/log" + "dappco.re/go/core/io" ) // Installer handles plugin installation from GitHub. diff --git a/plugin/installer_test.go b/plugin/installer_test.go index 62a8b4f..4b57611 100644 --- a/plugin/installer_test.go +++ b/plugin/installer_test.go @@ -4,7 +4,7 @@ import ( "context" "testing" - "forge.lthn.ai/core/go-io" + "dappco.re/go/core/io" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) diff --git a/plugin/loader.go b/plugin/loader.go index c9a00fd..3362886 100644 --- a/plugin/loader.go +++ b/plugin/loader.go @@ -3,8 +3,8 @@ package plugin import ( "path/filepath" - coreerr "forge.lthn.ai/core/go-log" - "forge.lthn.ai/core/go-io" + coreerr "dappco.re/go/core/log" + "dappco.re/go/core/io" ) // Loader loads plugins from the filesystem. diff --git a/plugin/loader_test.go b/plugin/loader_test.go index a6875b1..109ff46 100644 --- a/plugin/loader_test.go +++ b/plugin/loader_test.go @@ -3,7 +3,7 @@ package plugin import ( "testing" - "forge.lthn.ai/core/go-io" + "dappco.re/go/core/io" "github.com/stretchr/testify/assert" ) diff --git a/plugin/manifest.go b/plugin/manifest.go index 65b1945..4e87c6f 100644 --- a/plugin/manifest.go +++ b/plugin/manifest.go @@ -3,8 +3,8 @@ package plugin import ( "encoding/json" - coreerr "forge.lthn.ai/core/go-log" - "forge.lthn.ai/core/go-io" + coreerr "dappco.re/go/core/log" + "dappco.re/go/core/io" ) // Manifest represents a plugin.json manifest file. diff --git a/plugin/manifest_test.go b/plugin/manifest_test.go index be1cc4a..c400ead 100644 --- a/plugin/manifest_test.go +++ b/plugin/manifest_test.go @@ -3,7 +3,7 @@ package plugin import ( "testing" - "forge.lthn.ai/core/go-io" + "dappco.re/go/core/io" "github.com/stretchr/testify/assert" ) diff --git a/plugin/registry.go b/plugin/registry.go index 8fb64d3..f81a025 100644 --- a/plugin/registry.go +++ b/plugin/registry.go @@ -6,8 +6,8 @@ import ( "path/filepath" "slices" - coreerr "forge.lthn.ai/core/go-log" - "forge.lthn.ai/core/go-io" + coreerr "dappco.re/go/core/log" + "dappco.re/go/core/io" ) const registryFilename = "registry.json" diff --git a/plugin/registry_test.go b/plugin/registry_test.go index 3984d0e..bf3047b 100644 --- a/plugin/registry_test.go +++ b/plugin/registry_test.go @@ -3,7 +3,7 @@ package plugin import ( "testing" - "forge.lthn.ai/core/go-io" + "dappco.re/go/core/io" "github.com/stretchr/testify/assert" ) diff --git a/repos/gitstate.go b/repos/gitstate.go index d08aba7..15d8436 100644 --- a/repos/gitstate.go +++ b/repos/gitstate.go @@ -4,8 +4,8 @@ import ( "path/filepath" "time" - coreerr "forge.lthn.ai/core/go-log" - "forge.lthn.ai/core/go-io" + coreerr "dappco.re/go/core/log" + "dappco.re/go/core/io" "gopkg.in/yaml.v3" ) diff --git a/repos/gitstate_test.go b/repos/gitstate_test.go index 424f220..c06c406 100644 --- a/repos/gitstate_test.go +++ b/repos/gitstate_test.go @@ -4,7 +4,7 @@ import ( "testing" "time" - "forge.lthn.ai/core/go-io" + "dappco.re/go/core/io" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) diff --git a/repos/kbconfig.go b/repos/kbconfig.go index 49b393b..fd8ed3a 100644 --- a/repos/kbconfig.go +++ b/repos/kbconfig.go @@ -4,8 +4,8 @@ import ( "fmt" "path/filepath" - coreerr "forge.lthn.ai/core/go-log" - "forge.lthn.ai/core/go-io" + coreerr "dappco.re/go/core/log" + "dappco.re/go/core/io" "gopkg.in/yaml.v3" ) diff --git a/repos/kbconfig_test.go b/repos/kbconfig_test.go index db72a5d..121842c 100644 --- a/repos/kbconfig_test.go +++ b/repos/kbconfig_test.go @@ -3,7 +3,7 @@ package repos import ( "testing" - "forge.lthn.ai/core/go-io" + "dappco.re/go/core/io" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) diff --git a/repos/registry.go b/repos/registry.go index 88f5808..f6af2f7 100644 --- a/repos/registry.go +++ b/repos/registry.go @@ -8,8 +8,8 @@ import ( "path/filepath" "strings" - coreerr "forge.lthn.ai/core/go-log" - "forge.lthn.ai/core/go-io" + coreerr "dappco.re/go/core/log" + "dappco.re/go/core/io" "gopkg.in/yaml.v3" ) diff --git a/repos/registry_test.go b/repos/registry_test.go index 264dc9d..6aaf1eb 100644 --- a/repos/registry_test.go +++ b/repos/registry_test.go @@ -3,7 +3,7 @@ package repos import ( "testing" - "forge.lthn.ai/core/go-io" + "dappco.re/go/core/io" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) diff --git a/repos/workconfig.go b/repos/workconfig.go index a7a1b58..7452245 100644 --- a/repos/workconfig.go +++ b/repos/workconfig.go @@ -4,8 +4,8 @@ import ( "path/filepath" "time" - coreerr "forge.lthn.ai/core/go-log" - "forge.lthn.ai/core/go-io" + coreerr "dappco.re/go/core/log" + "dappco.re/go/core/io" "gopkg.in/yaml.v3" ) diff --git a/repos/workconfig_test.go b/repos/workconfig_test.go index 329762f..7d19025 100644 --- a/repos/workconfig_test.go +++ b/repos/workconfig_test.go @@ -4,7 +4,7 @@ import ( "testing" "time" - "forge.lthn.ai/core/go-io" + "dappco.re/go/core/io" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" )