2026-02-19 18:28:36 +00:00
|
|
|
# FINDINGS.md — go-agentic Research & Discovery
|
|
|
|
|
|
|
|
|
|
## 2026-02-19: Split from go-ai (Virgil)
|
|
|
|
|
|
|
|
|
|
### Origin
|
|
|
|
|
|
|
|
|
|
Extracted from `forge.lthn.ai/core/go-ai/agentic/`. Zero internal go-ai dependencies — cleanest split candidate.
|
|
|
|
|
|
|
|
|
|
### What Was Extracted
|
|
|
|
|
|
|
|
|
|
- 14 Go files (~1,968 LOC excluding tests)
|
|
|
|
|
- 5 test files (allowance, client, completion, config, context)
|
|
|
|
|
- 1 embedded prompt template (commit.md)
|
|
|
|
|
|
|
|
|
|
### Key Finding: Completely Independent
|
|
|
|
|
|
|
|
|
|
agentic/ imports only:
|
|
|
|
|
- `forge.lthn.ai/core/go` (framework, io, log)
|
|
|
|
|
- `gopkg.in/yaml.v3`
|
|
|
|
|
- Standard library
|
|
|
|
|
|
|
|
|
|
No coupling to ml/, rag/, mcp/, or any other go-ai package. This is a pure CLI service that spawns claude subprocess and manages task/allowance state.
|
2026-02-20 00:59:58 +00:00
|
|
|
|
|
|
|
|
## 2026-02-20: Phase 1 Test Coverage (Charon)
|
|
|
|
|
|
|
|
|
|
### Coverage: 70.1% -> 85.6%
|
|
|
|
|
|
|
|
|
|
Added 7 new test files (130+ tests total, all passing):
|
|
|
|
|
|
|
|
|
|
| File | Purpose |
|
|
|
|
|
|------|---------|
|
|
|
|
|
| `lifecycle_test.go` | Full claim -> process -> complete integration; fail/cancel flows; concurrent agents |
|
|
|
|
|
| `allowance_edge_test.go` | Boundary tests: exact limit, one-over, zero allowance, warning threshold table |
|
|
|
|
|
| `allowance_error_test.go` | Mock `errorStore` to cover all error paths in RecordUsage/Check/ResetAgent |
|
|
|
|
|
| `embed_test.go` | Prompt() hit/miss + trimming |
|
|
|
|
|
| `service_test.go` | DefaultServiceOptions, TaskPrompt Set/GetTaskID, TaskCommit fields |
|
|
|
|
|
| `completion_git_test.go` | Real git repos: AutoCommit, CreateBranch, CommitAndSync, GetDiff, HasUncommittedChanges |
|
|
|
|
|
| `context_git_test.go` | findRelatedCode in git repos: keyword search, 10-file limit, truncation |
|
|
|
|
|
|
|
|
|
|
### Remaining uncovered (intentionally skipped)
|
|
|
|
|
|
|
|
|
|
- `service.go` (NewService, OnStartup, handleTask, doCommit, doPrompt) — 0%
|
|
|
|
|
These require `framework.Core` DI container and spawn a `claude` subprocess.
|
|
|
|
|
Testing would need either a full Core bootstrap or an interface extraction.
|
|
|
|
|
Recommended for Phase 4 when CLI integration lands.
|
|
|
|
|
|
|
|
|
|
- `completion.go` CreatePR — 14.3%
|
|
|
|
|
Requires `gh` CLI installed and authenticated. Not suitable for unit tests.
|
|
|
|
|
|
|
|
|
|
### Key Discovery: MemoryStore Copy Semantics
|
|
|
|
|
|
|
|
|
|
MemoryStore correctly copies values on Set/Get (defensive copies prevent aliasing).
|
|
|
|
|
Tests confirm mutations to the original struct after SetAllowance do not affect stored data.
|
|
|
|
|
|
|
|
|
|
### Key Discovery: AllowanceService Check Priority
|
|
|
|
|
|
|
|
|
|
The check order is: model allowlist -> daily tokens -> daily jobs -> concurrent jobs -> global model budget.
|
|
|
|
|
When multiple limits are exceeded simultaneously, the first in this order is reported as the reason.
|