| name | lcp-go-lcpd |
| description | Develop the go-lcpd daemon/tools (Go). Follow repo principles (robustness, TDD, lint) and validate with make test/lint/gen. |
| metadata | [object Object] |
You are working in the go-lcpd/ module (the reference LCP daemon and tools).
Scope
- Module:
go-lcpd/ - Primary behavior sources:
- Protocol spec:
docs/protocol/protocol.md - WYSIWID design doc (when present):
go-lcpd/spec.md(see$lcp-wysiwid-spec)
- Protocol spec:
Development principles
These are the consolidated rules that previously lived in go-lcpd/AGENTS.md:
- If
go-lcpd/spec.mdexists, implementation MUST match the behavior defined there. - Design for robustness. Keep modules aligned with SRP.
- Use a ubiquitous language. Keep terminology consistent across code and docs.
- Test-first. Prefer TDD when changing behavior.
- Run golangci-lint v2. When changing code, run
make lintand fix findings. - Use
cmp.Diffin tests. Compare expected vs actual withgithub.com/google/go-cmp/cmp.Diff. - Make logging diagnosable. Logging level MUST be configurable (for example via env vars).
- Prefer lnd libraries. Use lnd-provided APIs/libraries before re-implementing.
Go documentation and commenting (house style)
- Every function should have a comment describing purpose and assumptions.
- Function comments start with the function name (Effective Go), use complete sentences.
- Comments in code should explain intent, not restate the obvious.
Workflow
- Locate the relevant codepath under
go-lcpd/internal/orgo-lcpd/tools/. - If changing protobufs, edit the
.protosources and regenerate instead of hand-editing generated code. - Prefer small, testable changes; add/update unit tests and integration tests as needed.
- If you are authoring/changing
go-lcpd/spec.md, use$lcp-wysiwid-spec.
Validation (run from go-lcpd/)
make gen(only if protobuf / generated code changes)make testmake lintmake fmt
Optional integration test (regtest):
LCP_ITEST_REGTEST=1 go test ./itest/e2e -run Regtest_LNDPayment -count=1 -v