Commit graph

61 commits

Author SHA1 Message Date
Snider
520d0f5728 fix: tidy deps after dappco.re migration
Some checks are pending
Security Scan / security (push) Waiting to run
Test / test (push) Waiting to run
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-04 16:25:15 +01:00
Snider
c823c46bb2 fix: migrate module paths from forge.lthn.ai to dappco.re
Some checks are pending
Security Scan / security (push) Waiting to run
Test / test (push) Waiting to run
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-04 16:21:13 +01:00
Virgil
56bd30d3d2 fix(node): add load-or-create identity helper and TTL-aware deduplication
Some checks failed
Security Scan / security (push) Has been cancelled
Test / test (push) Has been cancelled
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-03 05:10:11 +00:00
Virgil
3eeaf90d38 fix(node): enforce private key file permissions
All checks were successful
Security Scan / security (push) Successful in 9s
Test / test (push) Successful in 1m24s
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-01 09:52:42 +00:00
Virgil
d5a962996b fix(peer): allow empty peer names
All checks were successful
Security Scan / security (push) Successful in 10s
Test / test (push) Successful in 1m23s
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-01 06:35:43 +00:00
Virgil
572970d255 fix(peer): reject empty peer names
Some checks failed
Security Scan / security (push) Successful in 12s
Test / test (push) Failing after 46s
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-01 06:27:20 +00:00
Virgil
ee623a7343 feat(node): persist peer allowlist
Some checks failed
Security Scan / security (push) Successful in 9s
Test / test (push) Failing after 55s
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-01 06:03:11 +00:00
Virgil
8d1caa3a59 fix(node): support timestamped remote log queries
All checks were successful
Security Scan / security (push) Successful in 8s
Test / test (push) Successful in 3m38s
Expose a Since-aware remote log helper on the controller and plumb the filter through the worker's miner log lookup so the payload field is honoured end-to-end.

Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-01 05:39:56 +00:00
727b5fdb8d Merge pull request '[agent/claude] Migrate module path to dappco.re/go/core/p2p. Update go.mod ...' (#5) from agent/migrate-module-path-to-dappco-re-go-core into main
All checks were successful
Security Scan / security (push) Successful in 9s
Test / test (push) Successful in 57s
2026-03-22 02:07:18 +00:00
Snider
6fd3fe1cd2 refactor(node): migrate module path to dappco.re/go/core/p2p
All checks were successful
Security Scan / security (pull_request) Successful in 8s
Test / test (pull_request) Successful in 2m2s
Update go.mod module line from forge.lthn.ai/core/go-p2p to
dappco.re/go/core/p2p. Migrate core dependency paths: go-log to
dappco.re/go/core/log v0.1.0, go-io to dappco.re/go/core/io v0.2.0.
Update all .go import paths across 18 source files. Borg, Poindexter,
and Enchantrix dependencies remain on forge.lthn.ai as they have not
been migrated upstream.

Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-22 02:06:51 +00:00
Snider
23994a66ac chore: sync dependencies for v0.1.7
Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-17 17:54:07 +00:00
Snider
eaa919af89 chore: sync dependencies for v0.1.6
Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-17 17:50:23 +00:00
3f1f9a7d60 Merge pull request '[agent/claude:opus] Fix CodeRabbit findings. Verify each against current code, f...' (#4) from agent/fix-coderabbit-findings--verify-each-aga into main
All checks were successful
Security Scan / security (push) Successful in 10s
Test / test (push) Successful in 1m11s
2026-03-17 16:24:04 +00:00
Snider
b334cb4909 fix(bundle): document why os.OpenFile is used instead of coreio in extractTarball
All checks were successful
Security Scan / security (pull_request) Successful in 9s
Test / test (pull_request) Successful in 1m25s
The coreio abstraction hardcodes file permissions (0644) and has no
OpenFile equivalent. os.OpenFile is needed here to preserve tar header
mode bits — executable binaries require 0755.

Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-17 16:23:35 +00:00
36f0582bfc Merge pull request '[agent/claude:opus] DX audit and fix. 1) Review CLAUDE.md — update any outdate...' (#3) from agent/dx-audit-and-fix--1--review-claude-md into main
All checks were successful
Security Scan / security (push) Successful in 7s
Test / test (push) Successful in 1m16s
2026-03-17 08:40:16 +00:00
Snider
3ea407c115 fix(node): DX audit — document conventions, wrap raw errors
All checks were successful
Security Scan / security (pull_request) Successful in 8s
Test / test (pull_request) Successful in 1m14s
Add coreerr.E() and coreio.Local conventions to CLAUDE.md coding
standards. Wrap two raw os.OpenFile/io.Copy errors in extractTarball
with coreerr.E for consistent error context.

Coverage: logging 86%, node 86%, levin 87%, ueps 92%.
No fmt.Errorf or os.ReadFile/os.WriteFile in production code.

Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-17 08:39:36 +00:00
Snider
bc47006152 chore: sync dependencies for v0.1.5
All checks were successful
Security Scan / security (push) Successful in 7s
Test / test (push) Successful in 1m56s
Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-16 22:18:29 +00:00
Snider
66bc0b862f refactor: replace fmt.Errorf/os.* with go-log/go-io conventions
All checks were successful
Security Scan / security (push) Successful in 9s
Test / test (push) Successful in 2m7s
Replace all fmt.Errorf and errors.New in production code with
coreerr.E("caller.Method", "message", err) from go-log. Replace
os.ReadFile/os.WriteFile/os.MkdirAll/os.Remove with coreio.Local
equivalents from go-io. Test files left untouched.

Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-16 20:38:55 +00:00
Snider
c2d2d5d126 chore: sync go.mod dependencies
Some checks failed
Security Scan / security (push) Successful in 8s
Test / test (push) Failing after 1m16s
Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-15 15:28:59 +00:00
Snider
6da95f3ed4 chore: add .core/ and .idea/ to .gitignore
All checks were successful
Security Scan / security (push) Successful in 6s
Test / test (push) Successful in 57s
2026-03-15 10:17:50 +00:00
Snider
39049106c1 docs: add CLAUDE.md project instructions
All checks were successful
Security Scan / security (push) Successful in 9s
Test / test (push) Successful in 56s
Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-13 13:38:02 +00:00
Snider
e24df2c9fa docs: add human-friendly documentation
All checks were successful
Security Scan / security (push) Successful in 7s
Test / test (push) Successful in 55s
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 13:02:39 +00:00
Snider
2561c6615d fix: improve UEPS reader error handling and test coverage
All checks were successful
Security Scan / security (push) Successful in 8s
Test / test (push) Successful in 1m26s
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 08:32:59 +00:00
Snider
fe04cf93aa fix: improve UEPS packet validation and worker error handling
Some checks are pending
Security Scan / security (push) Waiting to run
Test / test (push) Waiting to run
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 08:30:59 +00:00
Snider
9ad643df90 chore: add .core/ build and release configs
All checks were successful
Security Scan / security (push) Successful in 10s
Test / test (push) Successful in 50s
Add go-devops build system configuration for standardised
build, test, and release workflows across the Go ecosystem.

Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-06 18:52:37 +00:00
Snider
94000593c5 chore: remove boilerplate Taskfile
All checks were successful
Security Scan / security (push) Successful in 8s
Test / test (push) Successful in 1m59s
All tasks (test, build, lint, fmt, vet, cov) are handled natively
by `core go` commands. Taskfile was redundant wrapper.

Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-06 14:45:49 +00:00
8f049dd29c Merge pull request 'chore: Go 1.26 modernization' (#2) from chore/go-1.26-modernization into main
All checks were successful
Security Scan / security (push) Successful in 14s
Test / test (push) Successful in 1m11s
2026-02-24 18:01:44 +00:00
Claude
030834905e
chore: use slices.Sorted(maps.Keys()) for ordered iteration
All checks were successful
Security Scan / security (pull_request) Successful in 14s
Test / test (pull_request) Successful in 2m5s
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 16:14:50 +00:00
Claude
564b1860f9
chore: use min()/max() builtins (Go 1.21+)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 16:13:44 +00:00
Claude
2ac2974ec2
chore: extract repeated sentinel errors to package vars
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 16:13:09 +00:00
Claude
bee4e23a75
chore: fmt.Errorf(static) → errors.New
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 16:11:41 +00:00
Snider
c447855415 chore: add Go repo norms (badges, contributing, lint, taskfile, editorconfig)
All checks were successful
Security Scan / security (push) Successful in 13s
Test / test (push) Successful in 1m19s
Co-Authored-By: Virgil <virgil@lethean.io>
2026-02-23 06:45:43 +00:00
Snider
50a6e12cf4 feat: modernise to Go 1.26 iterators and stdlib helpers
All checks were successful
Security Scan / security (push) Successful in 14s
Test / test (push) Successful in 2m51s
Add Peers, AllowedPublicKeys, ConnectedPeers, PeersByScore iterators
on PeerManager. Add Handlers on Dispatcher, Connections on Transport.
Use slices.Collect, maps.Keys/Values, slices.SortFunc internally.

Co-Authored-By: Gemini <noreply@google.com>
Co-Authored-By: Virgil <virgil@lethean.io>
2026-02-23 06:07:49 +00:00
Claude
e3a8d5b2d8
ci: add Forgejo Actions test and security scan workflows
Some checks failed
Security Scan / security (push) Successful in 11s
Test / test (push) Failing after 29s
Uses reusable workflows from core/go-devops for Go testing
(with race detector and coverage) and security scanning
(govulncheck, gitleaks, trivy).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 03:28:08 +00:00
Claude
df56e7569e
chore: migrate Snider deps from github.com to forge.lthn.ai
Update Borg, Poindexter, and Enchantrix dependency paths from
github.com/Snider/ to forge.lthn.ai/Snider/ across go.mod and imports.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-22 21:42:39 +00:00
Snider
ca04a88e35 refactor: apply go fix modernizers for Go 1.26
Automated fixes: interface{} → any, range-over-int, t.Context(),
wg.Go(), strings.SplitSeq, strings.Builder, slices.Contains,
maps helpers, min/max builtins.

Co-Authored-By: Virgil <virgil@lethean.io>
2026-02-22 21:00:16 +00:00
Snider
fe6667f1b1 chore: bump go directive to 1.26.0
Co-Authored-By: Virgil <virgil@lethean.io>
2026-02-22 20:34:57 +00:00
Claude
f80166251b
feat(levin): connection with framed TCP packet I/O
Co-Authored-By: Charon <charon@lethean.io>
2026-02-20 19:29:41 +00:00
Claude
101ef37985
feat(levin): portable storage section encode/decode
Co-Authored-By: Charon <charon@lethean.io>
2026-02-20 19:27:31 +00:00
Claude
abc88f5c7a
feat(levin): portable storage varint encode/decode
Co-Authored-By: Charon <charon@lethean.io>
2026-02-20 19:23:28 +00:00
Claude
7089e0990c
feat(levin): header encode/decode (33-byte Levin packet framing)
Co-Authored-By: Charon <charon@lethean.io>
2026-02-20 19:23:24 +00:00
Snider
712fe326ff docs: add README with quick start and docs links
Co-Authored-By: Virgil <virgil@lethean.io>
2026-02-20 15:11:19 +00:00
Snider
6cf51fe8b0 Merge remote-tracking branch 'origin/main'
# Conflicts:
#	FINDINGS.md
#	TODO.md
2026-02-20 15:02:56 +00:00
Snider
3dd204705a docs: graduate TODO/FINDINGS into production documentation
Replace internal task tracking (TODO.md, FINDINGS.md) with structured
documentation in docs/. Trim CLAUDE.md to agent instructions only.

Co-Authored-By: Virgil <virgil@lethean.io>
2026-02-20 15:01:55 +00:00
Claude
3ce0ce0455
docs: mark Phase 5 complete in TODO.md with commit hash
Co-Authored-By: Charon <developers@lethean.io>
2026-02-20 11:53:57 +00:00
Claude
bf4ea4b215
test: add Phase 5 integration tests, benchmarks, and bufpool tests
- Full integration test: two nodes on localhost exercising identity
  creation, handshake, encrypted message exchange, UEPS packet routing
  via dispatcher, and graceful shutdown
- Benchmarks: identity key generation, ECDH shared secret derivation,
  KD-tree peer scoring (10/100/1000 peers), message serialisation,
  SMSG encrypt/decrypt, challenge-response, UEPS marshal/unmarshal
- bufpool.go tests: buffer reuse verification, oversized buffer
  discard, concurrent access, MarshalJSON correctness and safety
- Coverage: node/ 72.1% -> 87.5%, ueps/ 88.5% -> 93.1%

Co-Authored-By: Charon <developers@lethean.io>
2026-02-20 11:53:26 +00:00
Snider
c437fb3246 test: Phase 5 — integration tests, benchmarks, bufpool tests
- Integration: two-node localhost handshake + encrypted message exchange
  + controller ping/pong + UEPS packet routing via dispatcher + threat
  circuit breaker + graceful shutdown (3 test functions)
- Benchmarks: 13 benchmarks across node/ and ueps/ — identity keygen,
  ECDH shared secret, message serialise, SMSG encrypt/decrypt, HMAC
  challenge sign/verify, KD-tree peer scoring, UEPS marshal/unmarshal,
  bufpool throughput, challenge generation
- bufpool: 9 tests — get/put round-trip, buffer reuse, large buffer
  eviction, concurrent access (race-safe), buffer independence,
  MarshalJSON correctness + concurrency

Co-Authored-By: Virgil <virgil@lethean.io>
2026-02-20 06:09:21 +00:00
Claude
1ded31f61b
test(ueps): cover writeTLV error paths and ReadAndVerify edge cases
Push coverage from 88.5% to 93.1% by testing:
- writeTLV failures at each Write call (tag, length, value)
- ReadAndVerify io.ReadAll failure after 0xFF tag
- writeTLV and ReadAndVerify now at 100% function coverage

Co-Authored-By: Charon <charon@lethean.io>
2026-02-20 03:13:42 +00:00
Claude
ac70d879a1
test(node): push coverage from 72.4% to 87.4%
Add comprehensive tests for previously uncovered controller, worker,
peer, bundle, transport, identity and message functions:

- Controller: StartRemoteMiner, StopRemoteMiner, GetRemoteLogs (0% -> 80%+),
  ConnectToPeer success path, handleResponse edge cases, PingPeer no-identity
- Worker: handleStartMiner with config/profile/errors (9% -> 91%),
  handleStopMiner success/failure (20% -> 90%), handleGetLogs with
  limits/not-found (14% -> 93%), handleDeploy miner/full bundles (24% -> 89%),
  HandleMessage unknown type and integration via WebSocket, handleGetStats
  with miner manager and no-identity
- Peer: safeKeyPrefix all branches (40% -> 100%), validatePeerName direct,
  scheduleSave timer firing (35% -> 94%), saveNow/Close dirty data,
  edge cases for Record*/Update*/Select* with non-existent peers
- Bundle: extractTarball path traversal/symlink/directory/empty,
  ExtractMinerBundle checksum mismatch, CreateMinerBundle errors,
  ReadBundle invalid JSON, StreamBundle empty bundle
- Transport: Broadcast with sender exclusion (0% -> 83%), Start/Stop
  lifecycle (0% -> 83%), CheckOrigin validation, ConnectedPeers
- Identity: DeriveSharedSecret/GetIdentity without identity, Delete no files
- Message: nil payload, ParsePayload nil, NewErrorMessage

Co-Authored-By: Charon <charon@lethean.io>
2026-02-20 02:33:54 +00:00
Claude
276445515e
docs: mark Phase 4 complete in TODO.md and FINDINGS.md
Update task checklist with commit a60dfdf, resolve known issues #1 and
#5 (dispatcher stub and threat score semantics), add Phase 4 design
decisions to FINDINGS.md.

Co-Authored-By: Charon <developers@lethean.io>
2026-02-20 00:24:57 +00:00