Exclude forge contracts from runtime dependencies

This commit is contained in:
2026-11-01 19:25:15 +00:00
parent e5512d50b0
commit 7b5c1285a2
3 changed files with 27 additions and 2 deletions

View File

@@ -81,7 +81,12 @@ it adds no token-format restriction, remote permission requirement, or probe.
## 2. Protect the runtime boundary from the new forge contract — P2
Status: open.
Status: complete.
**Completed:** Added `forge` to the runtime dependency exclusions and covered
both direct and transitive forbidden dependencies with focused graph fixtures.
The complete checker test package and the actual compiled API/dependency check
passed; the current runtime dependency graph remains accepted.
**Evidence:** [dependency checker](../../internal/apicheck/main.go), especially
`forbiddenRuntimeDependency`, and the runtime boundary in

View File

@@ -281,7 +281,7 @@ func commandInternalRoot(path string) string {
func forbiddenRuntimeDependency(path string) bool {
for _, part := range strings.Split(strings.ToLower(path), "/") {
switch part {
case "orchestration", "orchestrator", "engine", "release", "process", "build", "builder", "gitea", "delivery", "cli":
case "orchestration", "orchestrator", "engine", "release", "process", "build", "builder", "gitea", "forge", "delivery", "cli":
return true
}
}

View File

@@ -10,6 +10,26 @@ import (
"testing"
)
func TestRuntimeFacadeCannotDependOnForge(t *testing.T) {
for _, indirect := range []bool{false, true} {
name := "direct"
dependency := modulePath + "/internal/forge"
packages := []listedPackage{{ImportPath: dependency}}
if indirect {
name = "transitive"
packages = append(packages, listedPackage{ImportPath: modulePath + "/internal/runtime", Imports: []string{dependency}})
dependency = modulePath + "/internal/runtime"
}
packages = append(packages, listedPackage{ImportPath: modulePath + "/buildinfo", Imports: []string{dependency}})
t.Run(name, func(t *testing.T) {
err := checkImportDirections(packages)
if err == nil || !strings.Contains(err.Error(), "buildinfo") || !strings.Contains(err.Error(), "/internal/forge") {
t.Fatalf("dependency check = %v, want excluded forge runtime dependency", err)
}
})
}
}
func TestExportedContractBoundaries(t *testing.T) {
tests := []struct {
name string