[agent/claude] Reference implementation: migrate core/agent to use Core pri... #7

Closed
Virgil wants to merge 0 commits from agent/reference-implementation--migrate-core-a into dev
Member

Task

Reference implementation: migrate core/agent to use Core primitives instead of separate go-io/go-log packages.

WHAT TO CHANGE (23 files in pkg/):

  1. Replace coreio "dappco.re/go/core/io" and coreio "forge.lthn.ai/core/go-io" imports with Core's built-in Fs.

    • Add a package-level var fs = &core.Fs{} (root "/" = unrestricted, same as coreio.Local)
    • coreio.Local.Read(path) returns (string, error) → fs.Read(path) returns core.Result
    • coreio.Local.Write(path, content)fs.Write(path, content) returns core.Result
    • coreio.Local.EnsureDir(path)fs.EnsureDir(path) returns core.Result
    • coreio.Local.List(path)fs.List(path) returns core.Result (Value is []os.DirEntry)
    • coreio.Local.IsFile(path)fs.IsFile(path) returns bool (same)
    • coreio.Local.Delete(path)fs.Delete(path) returns core.Result
  2. Replace coreerr "dappco.re/go/core/log" and coreerr "forge.lthn.ai/core/go-log" with Core's built-in error and logging.

    • coreerr.E("op", "msg", err)core.E("op", "msg", err) (identical signature, package-level function)
    • coreerr.Error("msg", kvs...)core.Error("msg", kvs...) (package-level default logger)
    • coreerr.Info(...)core.Info(...)
    • coreerr.Warn(...)core.Warn(...)
  3. Result pattern: Every coreio.Local.Read(path) that returned (string, error) now returns core.Result.
    Convert: data, err := coreio.Local.Read(p); if err != nil {r := fs.Read(p); if !r.OK {
    Then: datar.Value.(string)
    For List: entries, err := coreio.Local.List(p)r := fs.List(p); entries := r.Value.([]os.DirEntry)

  4. Add usage-example comments (AX convention) to all public types and functions. The comment shows HOW with real values, not just WHAT:

    // PrepSubsystem provides agentic MCP tools for workspace orchestration.
    //
    //  sub := agentic.NewPrep()
    //  sub.RegisterTools(server)
    
  5. Remove go-io and go-log from go.mod requires. Only dappco.re/go/core should remain.

IMPORTANT: The import for Core is core "dappco.re/go/core". The Fs struct is core.Fs{}. The E function is core.E().

After changes: go build ./... and go vet ./... must pass.

This is the REFERENCE IMPLEMENTATION for how all Core ecosystem packages should migrate. Make it exemplary.

Agent: claude
Commits: 4
Branch: agent/reference-implementation--migrate-core-a


Auto-created by core-agent dispatch system.
Co-Authored-By: Virgil virgil@lethean.io

## Task Reference implementation: migrate core/agent to use Core primitives instead of separate go-io/go-log packages. WHAT TO CHANGE (23 files in pkg/): 1. Replace `coreio "dappco.re/go/core/io"` and `coreio "forge.lthn.ai/core/go-io"` imports with Core's built-in Fs. - Add a package-level `var fs = &core.Fs{}` (root "/" = unrestricted, same as coreio.Local) - `coreio.Local.Read(path)` returns (string, error) → `fs.Read(path)` returns core.Result - `coreio.Local.Write(path, content)` → `fs.Write(path, content)` returns core.Result - `coreio.Local.EnsureDir(path)` → `fs.EnsureDir(path)` returns core.Result - `coreio.Local.List(path)` → `fs.List(path)` returns core.Result (Value is []os.DirEntry) - `coreio.Local.IsFile(path)` → `fs.IsFile(path)` returns bool (same) - `coreio.Local.Delete(path)` → `fs.Delete(path)` returns core.Result 2. Replace `coreerr "dappco.re/go/core/log"` and `coreerr "forge.lthn.ai/core/go-log"` with Core's built-in error and logging. - `coreerr.E("op", "msg", err)` → `core.E("op", "msg", err)` (identical signature, package-level function) - `coreerr.Error("msg", kvs...)` → `core.Error("msg", kvs...)` (package-level default logger) - `coreerr.Info(...)` → `core.Info(...)` - `coreerr.Warn(...)` → `core.Warn(...)` 3. Result pattern: Every `coreio.Local.Read(path)` that returned `(string, error)` now returns `core.Result`. Convert: `data, err := coreio.Local.Read(p); if err != nil {` → `r := fs.Read(p); if !r.OK {` Then: `data` → `r.Value.(string)` For List: `entries, err := coreio.Local.List(p)` → `r := fs.List(p); entries := r.Value.([]os.DirEntry)` 4. Add usage-example comments (AX convention) to all public types and functions. The comment shows HOW with real values, not just WHAT: ```go // PrepSubsystem provides agentic MCP tools for workspace orchestration. // // sub := agentic.NewPrep() // sub.RegisterTools(server) ``` 5. Remove go-io and go-log from go.mod requires. Only dappco.re/go/core should remain. IMPORTANT: The import for Core is `core "dappco.re/go/core"`. The Fs struct is `core.Fs{}`. The E function is `core.E()`. After changes: `go build ./...` and `go vet ./...` must pass. This is the REFERENCE IMPLEMENTATION for how all Core ecosystem packages should migrate. Make it exemplary. **Agent:** claude **Commits:** 4 **Branch:** `agent/reference-implementation--migrate-core-a` --- Auto-created by core-agent dispatch system. Co-Authored-By: Virgil <virgil@lethean.io>
Virgil added 4 commits 2026-03-22 03:47:23 +00:00
Replace separate go-io (coreio) and go-log (coreerr) packages with
Core's built-in Fs and error/logging functions. This is the reference
implementation for how all Core ecosystem packages should migrate.

Changes:
- coreio.Local.Read/Write/EnsureDir/Delete/IsFile → core.Fs methods
- coreerr.E() → core.E(), coreerr.Info/Warn/Error → core.Info/Warn/Error
- (value, error) return pattern → core.Result pattern (r.OK, r.Value)
- go-io and go-log moved from direct to indirect deps in go.mod
- Added AX usage-example comments on key public types
- Added newFs("/") helper for unrestricted filesystem access

Co-Authored-By: Virgil <virgil@lethean.io>
Co-Authored-By: Virgil <virgil@lethean.io>
- Fix import ordering in verify.go and remote_client.go (stdlib before third-party)
- Convert os.MkdirAll to fs.EnsureDir in prep.go
- Preserve underlying error in !r.OK branches (writeStatus, writePlan, planDelete, planList, resume)

Co-Authored-By: Virgil <virgil@lethean.io>
Remove duplicated newFs() from brain package — use agentic.LocalFs() instead.
Inline agentName() wrapper — call agentic.AgentName() directly.

Co-Authored-By: Virgil <virgil@lethean.io>
Author
Member

Verification Failed

Command: go test ./...

# dappco.re/go/agent/pkg/setup
pkg/setup/config.go:88:13: undefined: lib.RenderFile
pkg/setup/config.go:131:13: undefined: lib.RenderFile
pkg/setup/setup.go:120:16: undefined: lib.ListDirTemplates
pkg/setup/setup.go:129:13: undefined: lib.ExtractDir
# dappco.re/go/agent/pkg/monitor [dappco.re/go/agent/pkg/monitor.test]
pkg/monitor/monitor_test.go:391:25: mon.lastCompletedCount undefined (type *Subsystem has no field or method lastCompletedCount)
pkg/monitor/monitor_test.go:473:14: mon.lastCompletedCount undefined (type *Subsystem has no field or method lastCompletedCount)
# dappco.re/go/agent/pkg/brain [dappco.re/go/agent/pkg/brain.test]
pkg/brain/bridge_test.go:49:26: cannot use hub (variable of type *"dappco.re/go/core/ws".Hub) as *"forge.lthn.ai/core/go-ws".Hub value in argument to ide.NewBridge
?   	dappco.re/go/agent/cmd	[no test files]
ok  	dappco.re/go/agent/pkg/agentic	0.225s
FAIL	dappco.re/go/agent/pkg/brain [build failed]
?   	dappco.re/go/agent/pkg/lib	[no test files]
FAIL	dappco.re/go/agent/pkg/monitor [build failed]
FAIL	dappco.re/go/agent/pkg/setup [build failed]
FAIL

Exit code: 1

## Verification Failed **Command:** `go test ./...` ``` # dappco.re/go/agent/pkg/setup pkg/setup/config.go:88:13: undefined: lib.RenderFile pkg/setup/config.go:131:13: undefined: lib.RenderFile pkg/setup/setup.go:120:16: undefined: lib.ListDirTemplates pkg/setup/setup.go:129:13: undefined: lib.ExtractDir # dappco.re/go/agent/pkg/monitor [dappco.re/go/agent/pkg/monitor.test] pkg/monitor/monitor_test.go:391:25: mon.lastCompletedCount undefined (type *Subsystem has no field or method lastCompletedCount) pkg/monitor/monitor_test.go:473:14: mon.lastCompletedCount undefined (type *Subsystem has no field or method lastCompletedCount) # dappco.re/go/agent/pkg/brain [dappco.re/go/agent/pkg/brain.test] pkg/brain/bridge_test.go:49:26: cannot use hub (variable of type *"dappco.re/go/core/ws".Hub) as *"forge.lthn.ai/core/go-ws".Hub value in argument to ide.NewBridge ? dappco.re/go/agent/cmd [no test files] ok dappco.re/go/agent/pkg/agentic 0.225s FAIL dappco.re/go/agent/pkg/brain [build failed] ? dappco.re/go/agent/pkg/lib [no test files] FAIL dappco.re/go/agent/pkg/monitor [build failed] FAIL dappco.re/go/agent/pkg/setup [build failed] FAIL ``` **Exit code:** 1
Author
Member

Verification Failed

Command: go test ./...

# dappco.re/go/agent/pkg/setup
pkg/setup/config.go:88:13: undefined: lib.RenderFile
pkg/setup/config.go:131:13: undefined: lib.RenderFile
pkg/setup/setup.go:120:16: undefined: lib.ListDirTemplates
pkg/setup/setup.go:129:13: undefined: lib.ExtractDir
# dappco.re/go/agent/pkg/monitor [dappco.re/go/agent/pkg/monitor.test]
pkg/monitor/monitor_test.go:391:25: mon.lastCompletedCount undefined (type *Subsystem has no field or method lastCompletedCount)
pkg/monitor/monitor_test.go:473:14: mon.lastCompletedCount undefined (type *Subsystem has no field or method lastCompletedCount)
?   	dappco.re/go/agent/cmd	[no test files]
# dappco.re/go/agent/pkg/brain [dappco.re/go/agent/pkg/brain.test]
pkg/brain/bridge_test.go:49:26: cannot use hub (variable of type *"dappco.re/go/core/ws".Hub) as *"forge.lthn.ai/core/go-ws".Hub value in argument to ide.NewBridge
ok  	dappco.re/go/agent/pkg/agentic	0.231s
FAIL	dappco.re/go/agent/pkg/brain [build failed]
?   	dappco.re/go/agent/pkg/lib	[no test files]
FAIL	dappco.re/go/agent/pkg/monitor [build failed]
FAIL	dappco.re/go/agent/pkg/setup [build failed]
FAIL

Exit code: 1

## Verification Failed **Command:** `go test ./...` ``` # dappco.re/go/agent/pkg/setup pkg/setup/config.go:88:13: undefined: lib.RenderFile pkg/setup/config.go:131:13: undefined: lib.RenderFile pkg/setup/setup.go:120:16: undefined: lib.ListDirTemplates pkg/setup/setup.go:129:13: undefined: lib.ExtractDir # dappco.re/go/agent/pkg/monitor [dappco.re/go/agent/pkg/monitor.test] pkg/monitor/monitor_test.go:391:25: mon.lastCompletedCount undefined (type *Subsystem has no field or method lastCompletedCount) pkg/monitor/monitor_test.go:473:14: mon.lastCompletedCount undefined (type *Subsystem has no field or method lastCompletedCount) ? dappco.re/go/agent/cmd [no test files] # dappco.re/go/agent/pkg/brain [dappco.re/go/agent/pkg/brain.test] pkg/brain/bridge_test.go:49:26: cannot use hub (variable of type *"dappco.re/go/core/ws".Hub) as *"forge.lthn.ai/core/go-ws".Hub value in argument to ide.NewBridge ok dappco.re/go/agent/pkg/agentic 0.231s FAIL dappco.re/go/agent/pkg/brain [build failed] ? dappco.re/go/agent/pkg/lib [no test files] FAIL dappco.re/go/agent/pkg/monitor [build failed] FAIL dappco.re/go/agent/pkg/setup [build failed] FAIL ``` **Exit code:** 1
Virgil added the
needs-review
label 2026-03-22 03:47:28 +00:00
Author
Member

Needs Review

Tests failed after rebase. Auto-merge gave up after retry.

Labelled needs-review for human attention.

## Needs Review Tests failed after rebase. Auto-merge gave up after retry. Labelled `needs-review` for human attention.
Virgil closed this pull request 2026-03-24 11:12:03 +00:00

Pull request closed

Sign in to join this conversation.
No description provided.