chore: trim duplication and dead code ahead of v0.9.0 - #375

Merged
bussyjd merged 2 commits into
mainfrom
claude/optimize-architecture-v0.9.0-MscZ0
Apr 24, 2026
Merged

chore: trim duplication and dead code ahead of v0.9.0#375
bussyjd merged 2 commits into
mainfrom
claude/optimize-architecture-v0.9.0-MscZ0

Conversation

@bussyjd

Copy link
Copy Markdown
Contributor

Summary

Architecture pass targeted at production readiness for v0.9.0. Collapses near-identical blocks into small shared helpers, leans on the stdlib where we were re-implementing it, and drops code that has no callers. Behaviour is unchanged — no user-visible flag, API, RBAC, or controller semantic is touched.

Net: -233 LOC across 9 files (107 insertions / 340 deletions). go build ./..., go test ./..., and go vet ./... all stay clean.

What changed

  • cmd/obol/main.go — the four kubectl / helm / helmfile / k9s passthrough subcommands were copy-paste of each other. Folded into a single passthroughCommand(cfg, tool, extraEnv) helper; helmfile still gets its extra HELMFILE_FILE_PATH env var. ~120 LOC removed.
  • internal/serviceoffercontroller
    • Dropped the trivial statusFor pointer pass-through, containsFinalizer / hasStringInSlice (use stdlib slices.Contains), and newBigInt (use big.Int.SetString directly).
    • removeFinalizer now uses slices.DeleteFunc instead of an in-place filter loop.
    • Collapsed mergeBuyerConfig / mergeBuyerAuths / removeBuyerUpstream onto a single mergeBuyerCM helper + a 2-entry loop for the teardown path. Also swaps json.MarshalIndent (unused whitespace in a ConfigMap value) for json.Marshal.
    • Deleted the unused buildMiddleware, ownerRef, and ownerRefFor render helpers (flagged by staticcheck -unused).
  • internal/x402/buyer/proxy.go — the core-route wiring (/healthz, /status, /admin/*, /metrics, OpenAI-compat) was registered identically in both NewProxy and syncCompatibilityRoutesLocked. Extracted registerCoreRoutes so there's one source of truth. Also simplified normalizeRemoteModel — the for-loop + switch now reduces to a fixed-point strings.TrimPrefix pair.
  • internal/stack/stack.go — three sequential os.Stats for .stack-id / .stack-backend / k3d.yaml became a single loop over the filenames.
  • internal/testutil/eip712_signer.go — removed dead chainName helper.

Why these and not others

I deliberately kept the surface area small. Several additional ideas (port-forward helper in openclaw.go vs sell.go, LiteLLM config patching vs remove path in internal/model/model.go, registration helper extraction in cmd/obol/sell.go) have structural similarities but non-trivial semantic differences (exit-code handling, error flow, TLS init order). Rolling those in would require behavior review I'd rather split into separate PRs so each diff stays reviewable.

Test plan

  • go build ./...
  • go vet ./... (clean)
  • go test ./... — all packages pass, including internal/serviceoffercontroller (purchase lifecycle tests updated to use slices.Contains) and internal/x402/buyer (proxy core-route registration and normalizeRemoteModel unchanged externally)
  • Integration: go test -tags integration -v -timeout 15m ./internal/openclaw/ against a live cluster (reviewer to run on Mac host; CI covers unit path)
  • Smoke on a running stack: obol kubectl get nodes, obol helm list -A, obol stack up → verify sell http / buy.py buy happy path (touches the mergeBuyerCM path)

https://claude.ai/code/session_019YQ7b8bunKhCbEFUKcfSd3


Generated by Claude Code

Collapses several near-identical blocks into small shared helpers and drops
code that has no callers. Behaviour is unchanged; tests and go vet stay green.
- cmd/obol/main.go: fold the kubectl/helm/helmfile/k9s passthroughs into a
single passthroughCommand helper (~120 LOC removed).
- internal/serviceoffercontroller: drop trivial statusFor/containsFinalizer/
newBigInt/hasStringInSlice helpers in favour of stdlib (slices.Contains,
slices.DeleteFunc, big.Int.SetString); collapse mergeBuyerConfig/
mergeBuyerAuths/removeBuyerUpstream onto one mergeBuyerCM helper; delete
the unused buildMiddleware/ownerRef/ownerRefFor render helpers.
- internal/x402/buyer/proxy.go: lift the duplicated core-route wiring into
registerCoreRoutes and simplify normalizeRemoteModel's prefix stripping.
- internal/stack/stack.go: loop over the three legacy config-file paths
instead of repeating os.Stat three times.
- internal/testutil/eip712_signer.go: drop the unused chainName helper.
Net -233 LOC, with go build ./... and go test ./... clean.
@bussyjd
bussyjd merged commit 1ad1923 into mainApr 24, 2026
6 checks passed
@OisinKyne
OisinKyne deleted the claude/optimize-architecture-v0.9.0-MscZ0 branch May 1, 2026 16:11
Sign up for freeto 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.

3 participants

@bussyjd@OisinKyne@claude
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

chore: trim duplication and dead code ahead of v0.9.0 - #375

Merged
bussyjd merged 2 commits into
mainfrom
claude/optimize-architecture-v0.9.0-MscZ0
Apr 24, 2026
Merged

chore: trim duplication and dead code ahead of v0.9.0#375
bussyjd merged 2 commits into
mainfrom
claude/optimize-architecture-v0.9.0-MscZ0

Conversation

@bussyjd

Copy link
Copy Markdown
Contributor

Summary

Architecture pass targeted at production readiness for v0.9.0. Collapses near-identical blocks into small shared helpers, leans on the stdlib where we were re-implementing it, and drops code that has no callers. Behaviour is unchanged — no user-visible flag, API, RBAC, or controller semantic is touched.

Net: -233 LOC across 9 files (107 insertions / 340 deletions). go build ./..., go test ./..., and go vet ./... all stay clean.

What changed

  • cmd/obol/main.go — the four kubectl / helm / helmfile / k9s passthrough subcommands were copy-paste of each other. Folded into a single passthroughCommand(cfg, tool, extraEnv) helper; helmfile still gets its extra HELMFILE_FILE_PATH env var. ~120 LOC removed.
  • internal/serviceoffercontroller
    • Dropped the trivial statusFor pointer pass-through, containsFinalizer / hasStringInSlice (use stdlib slices.Contains), and newBigInt (use big.Int.SetString directly).
    • removeFinalizer now uses slices.DeleteFunc instead of an in-place filter loop.
    • Collapsed mergeBuyerConfig / mergeBuyerAuths / removeBuyerUpstream onto a single mergeBuyerCM helper + a 2-entry loop for the teardown path. Also swaps json.MarshalIndent (unused whitespace in a ConfigMap value) for json.Marshal.
    • Deleted the unused buildMiddleware, ownerRef, and ownerRefFor render helpers (flagged by staticcheck -unused).
  • internal/x402/buyer/proxy.go — the core-route wiring (/healthz, /status, /admin/*, /metrics, OpenAI-compat) was registered identically in both NewProxy and syncCompatibilityRoutesLocked. Extracted registerCoreRoutes so there's one source of truth. Also simplified normalizeRemoteModel — the for-loop + switch now reduces to a fixed-point strings.TrimPrefix pair.
  • internal/stack/stack.go — three sequential os.Stats for .stack-id / .stack-backend / k3d.yaml became a single loop over the filenames.
  • internal/testutil/eip712_signer.go — removed dead chainName helper.

Why these and not others

I deliberately kept the surface area small. Several additional ideas (port-forward helper in openclaw.go vs sell.go, LiteLLM config patching vs remove path in internal/model/model.go, registration helper extraction in cmd/obol/sell.go) have structural similarities but non-trivial semantic differences (exit-code handling, error flow, TLS init order). Rolling those in would require behavior review I'd rather split into separate PRs so each diff stays reviewable.

Test plan

  • go build ./...
  • go vet ./... (clean)
  • go test ./... — all packages pass, including internal/serviceoffercontroller (purchase lifecycle tests updated to use slices.Contains) and internal/x402/buyer (proxy core-route registration and normalizeRemoteModel unchanged externally)
  • Integration: go test -tags integration -v -timeout 15m ./internal/openclaw/ against a live cluster (reviewer to run on Mac host; CI covers unit path)
  • Smoke on a running stack: obol kubectl get nodes, obol helm list -A, obol stack up → verify sell http / buy.py buy happy path (touches the mergeBuyerCM path)

https://claude.ai/code/session_019YQ7b8bunKhCbEFUKcfSd3


Generated by Claude Code

Collapses several near-identical blocks into small shared helpers and drops
code that has no callers. Behaviour is unchanged; tests and go vet stay green.
- cmd/obol/main.go: fold the kubectl/helm/helmfile/k9s passthroughs into a
single passthroughCommand helper (~120 LOC removed).
- internal/serviceoffercontroller: drop trivial statusFor/containsFinalizer/
newBigInt/hasStringInSlice helpers in favour of stdlib (slices.Contains,
slices.DeleteFunc, big.Int.SetString); collapse mergeBuyerConfig/
mergeBuyerAuths/removeBuyerUpstream onto one mergeBuyerCM helper; delete
the unused buildMiddleware/ownerRef/ownerRefFor render helpers.
- internal/x402/buyer/proxy.go: lift the duplicated core-route wiring into
registerCoreRoutes and simplify normalizeRemoteModel's prefix stripping.
- internal/stack/stack.go: loop over the three legacy config-file paths
instead of repeating os.Stat three times.
- internal/testutil/eip712_signer.go: drop the unused chainName helper.
Net -233 LOC, with go build ./... and go test ./... clean.
@bussyjd
bussyjd merged commit 1ad1923 into mainApr 24, 2026
6 checks passed
@OisinKyne
OisinKyne deleted the claude/optimize-architecture-v0.9.0-MscZ0 branch May 1, 2026 16:11
Sign up for freeto 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.

3 participants

@bussyjd@OisinKyne@claude
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

chore: trim duplication and dead code ahead of v0.9.0 - #375

Merged
bussyjd merged 2 commits into
mainfrom
claude/optimize-architecture-v0.9.0-MscZ0
Apr 24, 2026
Merged

chore: trim duplication and dead code ahead of v0.9.0#375
bussyjd merged 2 commits into
mainfrom
claude/optimize-architecture-v0.9.0-MscZ0

Conversation

@bussyjd

Copy link
Copy Markdown
Contributor

Summary

Architecture pass targeted at production readiness for v0.9.0. Collapses near-identical blocks into small shared helpers, leans on the stdlib where we were re-implementing it, and drops code that has no callers. Behaviour is unchanged — no user-visible flag, API, RBAC, or controller semantic is touched.

Net: -233 LOC across 9 files (107 insertions / 340 deletions). go build ./..., go test ./..., and go vet ./... all stay clean.

What changed

  • cmd/obol/main.go — the four kubectl / helm / helmfile / k9s passthrough subcommands were copy-paste of each other. Folded into a single passthroughCommand(cfg, tool, extraEnv) helper; helmfile still gets its extra HELMFILE_FILE_PATH env var. ~120 LOC removed.
  • internal/serviceoffercontroller
    • Dropped the trivial statusFor pointer pass-through, containsFinalizer / hasStringInSlice (use stdlib slices.Contains), and newBigInt (use big.Int.SetString directly).
    • removeFinalizer now uses slices.DeleteFunc instead of an in-place filter loop.
    • Collapsed mergeBuyerConfig / mergeBuyerAuths / removeBuyerUpstream onto a single mergeBuyerCM helper + a 2-entry loop for the teardown path. Also swaps json.MarshalIndent (unused whitespace in a ConfigMap value) for json.Marshal.
    • Deleted the unused buildMiddleware, ownerRef, and ownerRefFor render helpers (flagged by staticcheck -unused).
  • internal/x402/buyer/proxy.go — the core-route wiring (/healthz, /status, /admin/*, /metrics, OpenAI-compat) was registered identically in both NewProxy and syncCompatibilityRoutesLocked. Extracted registerCoreRoutes so there's one source of truth. Also simplified normalizeRemoteModel — the for-loop + switch now reduces to a fixed-point strings.TrimPrefix pair.
  • internal/stack/stack.go — three sequential os.Stats for .stack-id / .stack-backend / k3d.yaml became a single loop over the filenames.
  • internal/testutil/eip712_signer.go — removed dead chainName helper.

Why these and not others

I deliberately kept the surface area small. Several additional ideas (port-forward helper in openclaw.go vs sell.go, LiteLLM config patching vs remove path in internal/model/model.go, registration helper extraction in cmd/obol/sell.go) have structural similarities but non-trivial semantic differences (exit-code handling, error flow, TLS init order). Rolling those in would require behavior review I'd rather split into separate PRs so each diff stays reviewable.

Test plan

  • go build ./...
  • go vet ./... (clean)
  • go test ./... — all packages pass, including internal/serviceoffercontroller (purchase lifecycle tests updated to use slices.Contains) and internal/x402/buyer (proxy core-route registration and normalizeRemoteModel unchanged externally)
  • Integration: go test -tags integration -v -timeout 15m ./internal/openclaw/ against a live cluster (reviewer to run on Mac host; CI covers unit path)
  • Smoke on a running stack: obol kubectl get nodes, obol helm list -A, obol stack up → verify sell http / buy.py buy happy path (touches the mergeBuyerCM path)

https://claude.ai/code/session_019YQ7b8bunKhCbEFUKcfSd3


Generated by Claude Code

Collapses several near-identical blocks into small shared helpers and drops
code that has no callers. Behaviour is unchanged; tests and go vet stay green.
- cmd/obol/main.go: fold the kubectl/helm/helmfile/k9s passthroughs into a
single passthroughCommand helper (~120 LOC removed).
- internal/serviceoffercontroller: drop trivial statusFor/containsFinalizer/
newBigInt/hasStringInSlice helpers in favour of stdlib (slices.Contains,
slices.DeleteFunc, big.Int.SetString); collapse mergeBuyerConfig/
mergeBuyerAuths/removeBuyerUpstream onto one mergeBuyerCM helper; delete
the unused buildMiddleware/ownerRef/ownerRefFor render helpers.
- internal/x402/buyer/proxy.go: lift the duplicated core-route wiring into
registerCoreRoutes and simplify normalizeRemoteModel's prefix stripping.
- internal/stack/stack.go: loop over the three legacy config-file paths
instead of repeating os.Stat three times.
- internal/testutil/eip712_signer.go: drop the unused chainName helper.
Net -233 LOC, with go build ./... and go test ./... clean.
@bussyjd
bussyjd merged commit 1ad1923 into mainApr 24, 2026
6 checks passed
@OisinKyne
OisinKyne deleted the claude/optimize-architecture-v0.9.0-MscZ0 branch May 1, 2026 16:11
Sign up for freeto 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.

3 participants

@bussyjd@OisinKyne@claude
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

chore: trim duplication and dead code ahead of v0.9.0 - #375

Merged
bussyjd merged 2 commits into
mainfrom
claude/optimize-architecture-v0.9.0-MscZ0
Apr 24, 2026
Merged

chore: trim duplication and dead code ahead of v0.9.0#375
bussyjd merged 2 commits into
mainfrom
claude/optimize-architecture-v0.9.0-MscZ0

Conversation

@bussyjd

Copy link
Copy Markdown
Contributor

Summary

Architecture pass targeted at production readiness for v0.9.0. Collapses near-identical blocks into small shared helpers, leans on the stdlib where we were re-implementing it, and drops code that has no callers. Behaviour is unchanged — no user-visible flag, API, RBAC, or controller semantic is touched.

Net: -233 LOC across 9 files (107 insertions / 340 deletions). go build ./..., go test ./..., and go vet ./... all stay clean.

What changed

  • cmd/obol/main.go — the four kubectl / helm / helmfile / k9s passthrough subcommands were copy-paste of each other. Folded into a single passthroughCommand(cfg, tool, extraEnv) helper; helmfile still gets its extra HELMFILE_FILE_PATH env var. ~120 LOC removed.
  • internal/serviceoffercontroller
    • Dropped the trivial statusFor pointer pass-through, containsFinalizer / hasStringInSlice (use stdlib slices.Contains), and newBigInt (use big.Int.SetString directly).
    • removeFinalizer now uses slices.DeleteFunc instead of an in-place filter loop.
    • Collapsed mergeBuyerConfig / mergeBuyerAuths / removeBuyerUpstream onto a single mergeBuyerCM helper + a 2-entry loop for the teardown path. Also swaps json.MarshalIndent (unused whitespace in a ConfigMap value) for json.Marshal.
    • Deleted the unused buildMiddleware, ownerRef, and ownerRefFor render helpers (flagged by staticcheck -unused).
  • internal/x402/buyer/proxy.go — the core-route wiring (/healthz, /status, /admin/*, /metrics, OpenAI-compat) was registered identically in both NewProxy and syncCompatibilityRoutesLocked. Extracted registerCoreRoutes so there's one source of truth. Also simplified normalizeRemoteModel — the for-loop + switch now reduces to a fixed-point strings.TrimPrefix pair.
  • internal/stack/stack.go — three sequential os.Stats for .stack-id / .stack-backend / k3d.yaml became a single loop over the filenames.
  • internal/testutil/eip712_signer.go — removed dead chainName helper.

Why these and not others

I deliberately kept the surface area small. Several additional ideas (port-forward helper in openclaw.go vs sell.go, LiteLLM config patching vs remove path in internal/model/model.go, registration helper extraction in cmd/obol/sell.go) have structural similarities but non-trivial semantic differences (exit-code handling, error flow, TLS init order). Rolling those in would require behavior review I'd rather split into separate PRs so each diff stays reviewable.

Test plan

  • go build ./...
  • go vet ./... (clean)
  • go test ./... — all packages pass, including internal/serviceoffercontroller (purchase lifecycle tests updated to use slices.Contains) and internal/x402/buyer (proxy core-route registration and normalizeRemoteModel unchanged externally)
  • Integration: go test -tags integration -v -timeout 15m ./internal/openclaw/ against a live cluster (reviewer to run on Mac host; CI covers unit path)
  • Smoke on a running stack: obol kubectl get nodes, obol helm list -A, obol stack up → verify sell http / buy.py buy happy path (touches the mergeBuyerCM path)

https://claude.ai/code/session_019YQ7b8bunKhCbEFUKcfSd3


Generated by Claude Code

Collapses several near-identical blocks into small shared helpers and drops
code that has no callers. Behaviour is unchanged; tests and go vet stay green.
- cmd/obol/main.go: fold the kubectl/helm/helmfile/k9s passthroughs into a
single passthroughCommand helper (~120 LOC removed).
- internal/serviceoffercontroller: drop trivial statusFor/containsFinalizer/
newBigInt/hasStringInSlice helpers in favour of stdlib (slices.Contains,
slices.DeleteFunc, big.Int.SetString); collapse mergeBuyerConfig/
mergeBuyerAuths/removeBuyerUpstream onto one mergeBuyerCM helper; delete
the unused buildMiddleware/ownerRef/ownerRefFor render helpers.
- internal/x402/buyer/proxy.go: lift the duplicated core-route wiring into
registerCoreRoutes and simplify normalizeRemoteModel's prefix stripping.
- internal/stack/stack.go: loop over the three legacy config-file paths
instead of repeating os.Stat three times.
- internal/testutil/eip712_signer.go: drop the unused chainName helper.
Net -233 LOC, with go build ./... and go test ./... clean.
@bussyjd
bussyjd merged commit 1ad1923 into mainApr 24, 2026
6 checks passed
@OisinKyne
OisinKyne deleted the claude/optimize-architecture-v0.9.0-MscZ0 branch May 1, 2026 16:11
Sign up for freeto 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.

3 participants

@bussyjd@OisinKyne@claude
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

chore: trim duplication and dead code ahead of v0.9.0 - #375

Merged
bussyjd merged 2 commits into
mainfrom
claude/optimize-architecture-v0.9.0-MscZ0
Apr 24, 2026
Merged

chore: trim duplication and dead code ahead of v0.9.0#375
bussyjd merged 2 commits into
mainfrom
claude/optimize-architecture-v0.9.0-MscZ0

Conversation

@bussyjd

Copy link
Copy Markdown
Contributor

Summary

Architecture pass targeted at production readiness for v0.9.0. Collapses near-identical blocks into small shared helpers, leans on the stdlib where we were re-implementing it, and drops code that has no callers. Behaviour is unchanged — no user-visible flag, API, RBAC, or controller semantic is touched.

Net: -233 LOC across 9 files (107 insertions / 340 deletions). go build ./..., go test ./..., and go vet ./... all stay clean.

What changed

  • cmd/obol/main.go — the four kubectl / helm / helmfile / k9s passthrough subcommands were copy-paste of each other. Folded into a single passthroughCommand(cfg, tool, extraEnv) helper; helmfile still gets its extra HELMFILE_FILE_PATH env var. ~120 LOC removed.
  • internal/serviceoffercontroller
    • Dropped the trivial statusFor pointer pass-through, containsFinalizer / hasStringInSlice (use stdlib slices.Contains), and newBigInt (use big.Int.SetString directly).
    • removeFinalizer now uses slices.DeleteFunc instead of an in-place filter loop.
    • Collapsed mergeBuyerConfig / mergeBuyerAuths / removeBuyerUpstream onto a single mergeBuyerCM helper + a 2-entry loop for the teardown path. Also swaps json.MarshalIndent (unused whitespace in a ConfigMap value) for json.Marshal.
    • Deleted the unused buildMiddleware, ownerRef, and ownerRefFor render helpers (flagged by staticcheck -unused).
  • internal/x402/buyer/proxy.go — the core-route wiring (/healthz, /status, /admin/*, /metrics, OpenAI-compat) was registered identically in both NewProxy and syncCompatibilityRoutesLocked. Extracted registerCoreRoutes so there's one source of truth. Also simplified normalizeRemoteModel — the for-loop + switch now reduces to a fixed-point strings.TrimPrefix pair.
  • internal/stack/stack.go — three sequential os.Stats for .stack-id / .stack-backend / k3d.yaml became a single loop over the filenames.
  • internal/testutil/eip712_signer.go — removed dead chainName helper.

Why these and not others

I deliberately kept the surface area small. Several additional ideas (port-forward helper in openclaw.go vs sell.go, LiteLLM config patching vs remove path in internal/model/model.go, registration helper extraction in cmd/obol/sell.go) have structural similarities but non-trivial semantic differences (exit-code handling, error flow, TLS init order). Rolling those in would require behavior review I'd rather split into separate PRs so each diff stays reviewable.

Test plan

  • go build ./...
  • go vet ./... (clean)
  • go test ./... — all packages pass, including internal/serviceoffercontroller (purchase lifecycle tests updated to use slices.Contains) and internal/x402/buyer (proxy core-route registration and normalizeRemoteModel unchanged externally)
  • Integration: go test -tags integration -v -timeout 15m ./internal/openclaw/ against a live cluster (reviewer to run on Mac host; CI covers unit path)
  • Smoke on a running stack: obol kubectl get nodes, obol helm list -A, obol stack up → verify sell http / buy.py buy happy path (touches the mergeBuyerCM path)

https://claude.ai/code/session_019YQ7b8bunKhCbEFUKcfSd3


Generated by Claude Code

Collapses several near-identical blocks into small shared helpers and drops
code that has no callers. Behaviour is unchanged; tests and go vet stay green.
- cmd/obol/main.go: fold the kubectl/helm/helmfile/k9s passthroughs into a
single passthroughCommand helper (~120 LOC removed).
- internal/serviceoffercontroller: drop trivial statusFor/containsFinalizer/
newBigInt/hasStringInSlice helpers in favour of stdlib (slices.Contains,
slices.DeleteFunc, big.Int.SetString); collapse mergeBuyerConfig/
mergeBuyerAuths/removeBuyerUpstream onto one mergeBuyerCM helper; delete
the unused buildMiddleware/ownerRef/ownerRefFor render helpers.
- internal/x402/buyer/proxy.go: lift the duplicated core-route wiring into
registerCoreRoutes and simplify normalizeRemoteModel's prefix stripping.
- internal/stack/stack.go: loop over the three legacy config-file paths
instead of repeating os.Stat three times.
- internal/testutil/eip712_signer.go: drop the unused chainName helper.
Net -233 LOC, with go build ./... and go test ./... clean.
@bussyjd
bussyjd merged commit 1ad1923 into mainApr 24, 2026
6 checks passed
@OisinKyne
OisinKyne deleted the claude/optimize-architecture-v0.9.0-MscZ0 branch May 1, 2026 16:11
Sign up for freeto 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.

3 participants

@bussyjd@OisinKyne@claude
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

chore: trim duplication and dead code ahead of v0.9.0 - #375

Merged
bussyjd merged 2 commits into
mainfrom
claude/optimize-architecture-v0.9.0-MscZ0
Apr 24, 2026
Merged

chore: trim duplication and dead code ahead of v0.9.0#375
bussyjd merged 2 commits into
mainfrom
claude/optimize-architecture-v0.9.0-MscZ0

Conversation

@bussyjd

Copy link
Copy Markdown
Contributor

Summary

Architecture pass targeted at production readiness for v0.9.0. Collapses near-identical blocks into small shared helpers, leans on the stdlib where we were re-implementing it, and drops code that has no callers. Behaviour is unchanged — no user-visible flag, API, RBAC, or controller semantic is touched.

Net: -233 LOC across 9 files (107 insertions / 340 deletions). go build ./..., go test ./..., and go vet ./... all stay clean.

What changed

  • cmd/obol/main.go — the four kubectl / helm / helmfile / k9s passthrough subcommands were copy-paste of each other. Folded into a single passthroughCommand(cfg, tool, extraEnv) helper; helmfile still gets its extra HELMFILE_FILE_PATH env var. ~120 LOC removed.
  • internal/serviceoffercontroller
    • Dropped the trivial statusFor pointer pass-through, containsFinalizer / hasStringInSlice (use stdlib slices.Contains), and newBigInt (use big.Int.SetString directly).
    • removeFinalizer now uses slices.DeleteFunc instead of an in-place filter loop.
    • Collapsed mergeBuyerConfig / mergeBuyerAuths / removeBuyerUpstream onto a single mergeBuyerCM helper + a 2-entry loop for the teardown path. Also swaps json.MarshalIndent (unused whitespace in a ConfigMap value) for json.Marshal.
    • Deleted the unused buildMiddleware, ownerRef, and ownerRefFor render helpers (flagged by staticcheck -unused).
  • internal/x402/buyer/proxy.go — the core-route wiring (/healthz, /status, /admin/*, /metrics, OpenAI-compat) was registered identically in both NewProxy and syncCompatibilityRoutesLocked. Extracted registerCoreRoutes so there's one source of truth. Also simplified normalizeRemoteModel — the for-loop + switch now reduces to a fixed-point strings.TrimPrefix pair.
  • internal/stack/stack.go — three sequential os.Stats for .stack-id / .stack-backend / k3d.yaml became a single loop over the filenames.
  • internal/testutil/eip712_signer.go — removed dead chainName helper.

Why these and not others

I deliberately kept the surface area small. Several additional ideas (port-forward helper in openclaw.go vs sell.go, LiteLLM config patching vs remove path in internal/model/model.go, registration helper extraction in cmd/obol/sell.go) have structural similarities but non-trivial semantic differences (exit-code handling, error flow, TLS init order). Rolling those in would require behavior review I'd rather split into separate PRs so each diff stays reviewable.

Test plan

  • go build ./...
  • go vet ./... (clean)
  • go test ./... — all packages pass, including internal/serviceoffercontroller (purchase lifecycle tests updated to use slices.Contains) and internal/x402/buyer (proxy core-route registration and normalizeRemoteModel unchanged externally)
  • Integration: go test -tags integration -v -timeout 15m ./internal/openclaw/ against a live cluster (reviewer to run on Mac host; CI covers unit path)
  • Smoke on a running stack: obol kubectl get nodes, obol helm list -A, obol stack up → verify sell http / buy.py buy happy path (touches the mergeBuyerCM path)

https://claude.ai/code/session_019YQ7b8bunKhCbEFUKcfSd3


Generated by Claude Code

Collapses several near-identical blocks into small shared helpers and drops
code that has no callers. Behaviour is unchanged; tests and go vet stay green.
- cmd/obol/main.go: fold the kubectl/helm/helmfile/k9s passthroughs into a
single passthroughCommand helper (~120 LOC removed).
- internal/serviceoffercontroller: drop trivial statusFor/containsFinalizer/
newBigInt/hasStringInSlice helpers in favour of stdlib (slices.Contains,
slices.DeleteFunc, big.Int.SetString); collapse mergeBuyerConfig/
mergeBuyerAuths/removeBuyerUpstream onto one mergeBuyerCM helper; delete
the unused buildMiddleware/ownerRef/ownerRefFor render helpers.
- internal/x402/buyer/proxy.go: lift the duplicated core-route wiring into
registerCoreRoutes and simplify normalizeRemoteModel's prefix stripping.
- internal/stack/stack.go: loop over the three legacy config-file paths
instead of repeating os.Stat three times.
- internal/testutil/eip712_signer.go: drop the unused chainName helper.
Net -233 LOC, with go build ./... and go test ./... clean.
@bussyjd
bussyjd merged commit 1ad1923 into mainApr 24, 2026
6 checks passed
@OisinKyne
OisinKyne deleted the claude/optimize-architecture-v0.9.0-MscZ0 branch May 1, 2026 16:11
Sign up for freeto 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.

3 participants

@bussyjd@OisinKyne@claude
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

chore: trim duplication and dead code ahead of v0.9.0 - #375

Merged
bussyjd merged 2 commits into
mainfrom
claude/optimize-architecture-v0.9.0-MscZ0
Apr 24, 2026
Merged

chore: trim duplication and dead code ahead of v0.9.0#375
bussyjd merged 2 commits into
mainfrom
claude/optimize-architecture-v0.9.0-MscZ0

Conversation

@bussyjd

Copy link
Copy Markdown
Contributor

Summary

Architecture pass targeted at production readiness for v0.9.0. Collapses near-identical blocks into small shared helpers, leans on the stdlib where we were re-implementing it, and drops code that has no callers. Behaviour is unchanged — no user-visible flag, API, RBAC, or controller semantic is touched.

Net: -233 LOC across 9 files (107 insertions / 340 deletions). go build ./..., go test ./..., and go vet ./... all stay clean.

What changed

  • cmd/obol/main.go — the four kubectl / helm / helmfile / k9s passthrough subcommands were copy-paste of each other. Folded into a single passthroughCommand(cfg, tool, extraEnv) helper; helmfile still gets its extra HELMFILE_FILE_PATH env var. ~120 LOC removed.
  • internal/serviceoffercontroller
    • Dropped the trivial statusFor pointer pass-through, containsFinalizer / hasStringInSlice (use stdlib slices.Contains), and newBigInt (use big.Int.SetString directly).
    • removeFinalizer now uses slices.DeleteFunc instead of an in-place filter loop.
    • Collapsed mergeBuyerConfig / mergeBuyerAuths / removeBuyerUpstream onto a single mergeBuyerCM helper + a 2-entry loop for the teardown path. Also swaps json.MarshalIndent (unused whitespace in a ConfigMap value) for json.Marshal.
    • Deleted the unused buildMiddleware, ownerRef, and ownerRefFor render helpers (flagged by staticcheck -unused).
  • internal/x402/buyer/proxy.go — the core-route wiring (/healthz, /status, /admin/*, /metrics, OpenAI-compat) was registered identically in both NewProxy and syncCompatibilityRoutesLocked. Extracted registerCoreRoutes so there's one source of truth. Also simplified normalizeRemoteModel — the for-loop + switch now reduces to a fixed-point strings.TrimPrefix pair.
  • internal/stack/stack.go — three sequential os.Stats for .stack-id / .stack-backend / k3d.yaml became a single loop over the filenames.
  • internal/testutil/eip712_signer.go — removed dead chainName helper.

Why these and not others

I deliberately kept the surface area small. Several additional ideas (port-forward helper in openclaw.go vs sell.go, LiteLLM config patching vs remove path in internal/model/model.go, registration helper extraction in cmd/obol/sell.go) have structural similarities but non-trivial semantic differences (exit-code handling, error flow, TLS init order). Rolling those in would require behavior review I'd rather split into separate PRs so each diff stays reviewable.

Test plan

  • go build ./...
  • go vet ./... (clean)
  • go test ./... — all packages pass, including internal/serviceoffercontroller (purchase lifecycle tests updated to use slices.Contains) and internal/x402/buyer (proxy core-route registration and normalizeRemoteModel unchanged externally)
  • Integration: go test -tags integration -v -timeout 15m ./internal/openclaw/ against a live cluster (reviewer to run on Mac host; CI covers unit path)
  • Smoke on a running stack: obol kubectl get nodes, obol helm list -A, obol stack up → verify sell http / buy.py buy happy path (touches the mergeBuyerCM path)

https://claude.ai/code/session_019YQ7b8bunKhCbEFUKcfSd3


Generated by Claude Code

Collapses several near-identical blocks into small shared helpers and drops
code that has no callers. Behaviour is unchanged; tests and go vet stay green.
- cmd/obol/main.go: fold the kubectl/helm/helmfile/k9s passthroughs into a
single passthroughCommand helper (~120 LOC removed).
- internal/serviceoffercontroller: drop trivial statusFor/containsFinalizer/
newBigInt/hasStringInSlice helpers in favour of stdlib (slices.Contains,
slices.DeleteFunc, big.Int.SetString); collapse mergeBuyerConfig/
mergeBuyerAuths/removeBuyerUpstream onto one mergeBuyerCM helper; delete
the unused buildMiddleware/ownerRef/ownerRefFor render helpers.
- internal/x402/buyer/proxy.go: lift the duplicated core-route wiring into
registerCoreRoutes and simplify normalizeRemoteModel's prefix stripping.
- internal/stack/stack.go: loop over the three legacy config-file paths
instead of repeating os.Stat three times.
- internal/testutil/eip712_signer.go: drop the unused chainName helper.
Net -233 LOC, with go build ./... and go test ./... clean.
@bussyjd
bussyjd merged commit 1ad1923 into mainApr 24, 2026
6 checks passed
@OisinKyne
OisinKyne deleted the claude/optimize-architecture-v0.9.0-MscZ0 branch May 1, 2026 16:11
Sign up for freeto 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.

3 participants

@bussyjd@OisinKyne@claude
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

chore: trim duplication and dead code ahead of v0.9.0 - #375

Merged
bussyjd merged 2 commits into
mainfrom
claude/optimize-architecture-v0.9.0-MscZ0
Apr 24, 2026
Merged

chore: trim duplication and dead code ahead of v0.9.0#375
bussyjd merged 2 commits into
mainfrom
claude/optimize-architecture-v0.9.0-MscZ0

Conversation

@bussyjd

Copy link
Copy Markdown
Contributor

Summary

Architecture pass targeted at production readiness for v0.9.0. Collapses near-identical blocks into small shared helpers, leans on the stdlib where we were re-implementing it, and drops code that has no callers. Behaviour is unchanged — no user-visible flag, API, RBAC, or controller semantic is touched.

Net: -233 LOC across 9 files (107 insertions / 340 deletions). go build ./..., go test ./..., and go vet ./... all stay clean.

What changed

  • cmd/obol/main.go — the four kubectl / helm / helmfile / k9s passthrough subcommands were copy-paste of each other. Folded into a single passthroughCommand(cfg, tool, extraEnv) helper; helmfile still gets its extra HELMFILE_FILE_PATH env var. ~120 LOC removed.
  • internal/serviceoffercontroller
    • Dropped the trivial statusFor pointer pass-through, containsFinalizer / hasStringInSlice (use stdlib slices.Contains), and newBigInt (use big.Int.SetString directly).
    • removeFinalizer now uses slices.DeleteFunc instead of an in-place filter loop.
    • Collapsed mergeBuyerConfig / mergeBuyerAuths / removeBuyerUpstream onto a single mergeBuyerCM helper + a 2-entry loop for the teardown path. Also swaps json.MarshalIndent (unused whitespace in a ConfigMap value) for json.Marshal.
    • Deleted the unused buildMiddleware, ownerRef, and ownerRefFor render helpers (flagged by staticcheck -unused).
  • internal/x402/buyer/proxy.go — the core-route wiring (/healthz, /status, /admin/*, /metrics, OpenAI-compat) was registered identically in both NewProxy and syncCompatibilityRoutesLocked. Extracted registerCoreRoutes so there's one source of truth. Also simplified normalizeRemoteModel — the for-loop + switch now reduces to a fixed-point strings.TrimPrefix pair.
  • internal/stack/stack.go — three sequential os.Stats for .stack-id / .stack-backend / k3d.yaml became a single loop over the filenames.
  • internal/testutil/eip712_signer.go — removed dead chainName helper.

Why these and not others

I deliberately kept the surface area small. Several additional ideas (port-forward helper in openclaw.go vs sell.go, LiteLLM config patching vs remove path in internal/model/model.go, registration helper extraction in cmd/obol/sell.go) have structural similarities but non-trivial semantic differences (exit-code handling, error flow, TLS init order). Rolling those in would require behavior review I'd rather split into separate PRs so each diff stays reviewable.

Test plan

  • go build ./...
  • go vet ./... (clean)
  • go test ./... — all packages pass, including internal/serviceoffercontroller (purchase lifecycle tests updated to use slices.Contains) and internal/x402/buyer (proxy core-route registration and normalizeRemoteModel unchanged externally)
  • Integration: go test -tags integration -v -timeout 15m ./internal/openclaw/ against a live cluster (reviewer to run on Mac host; CI covers unit path)
  • Smoke on a running stack: obol kubectl get nodes, obol helm list -A, obol stack up → verify sell http / buy.py buy happy path (touches the mergeBuyerCM path)

https://claude.ai/code/session_019YQ7b8bunKhCbEFUKcfSd3


Generated by Claude Code

Collapses several near-identical blocks into small shared helpers and drops
code that has no callers. Behaviour is unchanged; tests and go vet stay green.
- cmd/obol/main.go: fold the kubectl/helm/helmfile/k9s passthroughs into a
single passthroughCommand helper (~120 LOC removed).
- internal/serviceoffercontroller: drop trivial statusFor/containsFinalizer/
newBigInt/hasStringInSlice helpers in favour of stdlib (slices.Contains,
slices.DeleteFunc, big.Int.SetString); collapse mergeBuyerConfig/
mergeBuyerAuths/removeBuyerUpstream onto one mergeBuyerCM helper; delete
the unused buildMiddleware/ownerRef/ownerRefFor render helpers.
- internal/x402/buyer/proxy.go: lift the duplicated core-route wiring into
registerCoreRoutes and simplify normalizeRemoteModel's prefix stripping.
- internal/stack/stack.go: loop over the three legacy config-file paths
instead of repeating os.Stat three times.
- internal/testutil/eip712_signer.go: drop the unused chainName helper.
Net -233 LOC, with go build ./... and go test ./... clean.
@bussyjd
bussyjd merged commit 1ad1923 into mainApr 24, 2026
6 checks passed
@OisinKyne
OisinKyne deleted the claude/optimize-architecture-v0.9.0-MscZ0 branch May 1, 2026 16:11
Sign up for freeto 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.

3 participants

@bussyjd@OisinKyne@claude