62d8fd0f5b
Merge pull request '[agent/codex] API contract extraction. Read CLAUDE.md. For every exported ...' ( #10 ) from agent/api-contract-extraction--read-claude-md into dev
Security Scan / security (push) Successful in 10s
Test / test (push) Successful in 1m2s
2026-03-23 15:03:50 +00:00
Virgil
86dc04258a
docs(ratelimit): extract api contract
...
Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-23 15:03:29 +00:00
a24fa5bad3
Merge pull request '[agent/codex] Security attack vector mapping. Read CLAUDE.md. Map every ex...' ( #7 ) from agent/security-attack-vector-mapping--read-cla into dev
Security Scan / security (push) Successful in 9s
Test / test (push) Successful in 1m5s
2026-03-23 13:29:34 +00:00
Virgil
22ab4edc86
docs(ratelimit): map external attack vectors
...
Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-23 13:29:15 +00:00
d82736204e
Merge pull request '[agent/codex] Fix ALL findings from issue #3 . Read CLAUDE.md first. Token ...' ( #4 ) from agent/deep-audit-per-issue--3--read-claude-md into dev
Security Scan / security (push) Successful in 8s
Test / test (push) Successful in 1m23s
2026-03-23 07:26:48 +00:00
Virgil
d1c90b937d
fix(ratelimit): harden audit edge cases
...
Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-23 07:26:15 +00:00
0db35c4ce9
Merge pull request '[agent/claude] Update go.mod require lines from forge.lthn.ai to dappco.re ...' ( #2 ) from agent/update-go-mod-require-lines-from-forge-l into main
Security Scan / security (push) Successful in 7s
Test / test (push) Successful in 2m20s
2026-03-22 01:34:41 +00:00
Snider
d4d9d7a798
chore(ratelimit): migrate dependencies from forge.lthn.ai to dappco.re
...
Security Scan / security (pull_request) Successful in 7s
Test / test (pull_request) Successful in 2m17s
Update go.mod require lines and .go import paths:
- forge.lthn.ai/core/go-io v0.1.7 → dappco.re/go/core/io v0.2.0
- forge.lthn.ai/core/go-log v0.0.4 → dappco.re/go/core/log v0.1.0
Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-22 01:34:23 +00:00
Snider
d7655561b8
Merge remote-tracking branch 'github/dev'
Security Scan / security (push) Successful in 10s
Test / test (push) Successful in 2m19s
2026-03-22 00:57:19 +00:00
Snider
f5a83d774d
Merge remote-tracking branch 'origin/main'
2026-03-22 00:57:18 +00:00
Snider
b45262132b
chore: sync dependencies for v0.1.11
...
Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-17 17:55:05 +00:00
Snider
92fe978b1a
chore: sync dependencies for v0.1.10
...
Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-17 17:47:34 +00:00
Snider
d3a47eaecc
ci: add Core ecosystem CI workflow with CodeRabbit auto-fix
...
Uses dAppCore/build actions for test, auto-fix on CodeRabbit changes,
and auto-merge on CodeRabbit approval.
Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-17 14:05:50 +00:00
5ad481d30d
Merge pull request '[agent/claude:opus] DX audit and fix. 1) Review CLAUDE.md — update any outdate...' ( #1 ) from agent/dx-audit-and-fix--1--review-claude-md into main
Security Scan / security (push) Successful in 8s
Test / test (push) Successful in 1m1s
2026-03-17 08:57:20 +00:00
Snider
a003e532f7
fix(ratelimit): update CLAUDE.md and raise test coverage to 95%
...
Security Scan / security (pull_request) Successful in 7s
Test / test (pull_request) Successful in 1m10s
- Update error format docs: fmt.Errorf → coreerr.E from go-log
- Update dependencies list: add go-io and go-log
- Add tests for SQLite error paths (trigger-based exec errors,
schema corruption, closed DB, load/persist via limiter)
- Add tests for Iter early break, NewWithConfig HOME error,
MigrateYAMLToSQLite save-error paths
- Coverage: 87.8% → 95.0%
Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-17 08:56:53 +00:00
Snider
e6a3ba9810
chore: sync dependencies for v0.1.9
...
Security Scan / security (push) Successful in 9s
Test / test (push) Successful in 2m33s
Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-16 22:20:29 +00:00
Snider
4bb1cb96d4
refactor(ratelimit): replace all fmt.Errorf with coreerr.E from go-log
...
Security Scan / security (push) Successful in 8s
Test / test (push) Successful in 1m7s
Replace all 41 remaining fmt.Errorf calls in production code (ratelimit.go
and sqlite.go) with coreerr.E() from forge.lthn.ai/core/go-log. Promotes
go-log from indirect to direct dependency in go.mod.
Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-16 20:38:06 +00:00
Snider
ee6c5aa69d
refactor(ratelimit): replace os.ReadFile/WriteFile/MkdirAll with go-io
...
Security Scan / security (push) Successful in 8s
Test / test (push) Successful in 2m24s
Swap all direct os I/O calls for coreio.Local equivalents:
- os.ReadFile → coreio.Local.Read (returns string; []byte cast at call sites)
- os.WriteFile + os.MkdirAll → coreio.Local.Write (creates parent dirs internally)
Affected: Load(), Persist(), MigrateYAMLToSQLite(). go.mod gains
forge.lthn.ai/core/go-io v0.1.2 as a direct dependency.
Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-16 18:31:35 +00:00
Snider
b0b686bd3f
chore: sync go.mod dependencies
...
Security Scan / security (push) Successful in 9s
Test / test (push) Successful in 2m22s
Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-15 15:36:21 +00:00
Snider
25da438ca0
chore: add .core/ and .idea/ to .gitignore
Security Scan / security (push) Successful in 10s
Test / test (push) Successful in 2m8s
2026-03-15 10:17:50 +00:00
Snider
9cddfe46b7
docs: add CLAUDE.md project instructions
...
Security Scan / security (push) Successful in 7s
Test / test (push) Successful in 56s
Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-13 13:38:02 +00:00
Snider
9572425e89
docs: add human-friendly documentation
...
Security Scan / security (push) Successful in 6s
Test / test (push) Successful in 45s
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 13:02:40 +00:00
Snider
ae2cb96d38
test: add error handling and iterator coverage tests
...
Security Scan / security (push) Successful in 9s
Test / test (push) Successful in 2m1s
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 08:33:00 +00:00
Snider
79448bf3f3
fix: improve error handling and test coverage
...
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:03 +00:00
Snider
2eb0559ecb
chore: add .core/ build and release configs
...
Security Scan / security (push) Successful in 8s
Test / test (push) Successful in 2m10s
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
d17d7b7076
chore: remove boilerplate Taskfile
...
Security Scan / security (push) Successful in 7s
Test / test (push) Successful in 2m9s
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
Snider
ade9766d65
fix: skip permission tests when running as root (CI/Docker)
...
Security Scan / security (push) Successful in 15s
Test / test (push) Successful in 3m16s
Co-Authored-By: Virgil <virgil@lethean.io>
2026-02-23 07:04:58 +00:00
Snider
3bcb8ff741
chore: add Go repo norms (badges, contributing, lint, taskfile, editorconfig)
...
Security Scan / security (push) Successful in 13s
Test / test (push) Failing after 2m50s
Co-Authored-By: Virgil <virgil@lethean.io>
2026-02-23 06:45:45 +00:00
Snider
70b611e2a7
chore: refresh go.sum after upstream tag updates
...
Security Scan / security (push) Waiting to run
Test / test (push) Waiting to run
Co-Authored-By: Virgil <virgil@lethean.io>
2026-02-23 06:35:19 +00:00
Snider
d74811f2d0
feat: modernise to Go 1.26 — slices.DeleteFunc, iterators, range
...
Security Scan / security (push) Successful in 7s
Test / test (push) Failing after 40s
- Use slices.DeleteFunc in prune() for cleaner time-window filtering
- Add Models() iter.Seq[string] and Iter() iter.Seq2[string, ModelStats]
- Use range over int in benchmarks and tests
- Update docs example to modern range syntax
Co-Authored-By: Gemini <noreply@google.com>
Co-Authored-By: Virgil <virgil@lethean.io>
2026-02-23 05:14:19 +00:00
Claude
852e634dc0
ci: add Forgejo Actions test and security scan workflows
...
Test / test (push) Failing after 50s
Security Scan / security (push) Failing after 10m32s
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
6d9075a3f2
chore: sync workspace dependency versions
...
Run go work sync to align dependency versions across workspace.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-22 21:41:59 +00:00
Snider
2246fea10f
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:17 +00:00
Snider
0afcf0fb64
chore: bump go directive to 1.26.0
...
Co-Authored-By: Virgil <virgil@lethean.io>
2026-02-22 20:33:48 +00:00
Snider
2acc17b4ec
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
cde6443e4c
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
Snider
1afb1d636a
feat(persist): Phase 2 — SQLite backend with WAL mode
...
Add multi-process safe SQLite persistence using modernc.org/sqlite (pure
Go, no CGO). Follows the go-store pattern: single connection,
WAL journal mode, 5-second busy timeout.
New files:
- sqlite.go: sqliteStore with schema (quotas, requests, tokens, daily
tables), saveQuotas/loadQuotas, saveState/loadState, close methods
- sqlite_test.go: 25 tests covering basic round-trips, integration,
concurrency (10 goroutines, race-clean), migration, corrupt DB recovery
Wiring:
- Backend field added to Config ("yaml" default, "sqlite" option)
- Persist() and Load() dispatch to correct backend
- NewWithSQLite() and NewWithSQLiteConfig() convenience constructors
- Close() method for cleanup (no-op for YAML)
- MigrateYAMLToSQLite() helper for upgrading existing YAML state
All existing YAML tests pass unchanged (backward compatible).
Co-Authored-By: Virgil <virgil@lethean.io>
2026-02-20 07:50:48 +00:00
Snider
ab49f2207e
docs: flesh out Phase 2 SQLite migration task specs
...
Detailed schema design, API changes, test matrix, and migration helper
following go-store's SQLite pattern (modernc.org/sqlite, WAL mode).
Co-Authored-By: Virgil <virgil@lethean.io>
2026-02-20 07:38:09 +00:00
Snider
db958f293a
test: expand race coverage and benchmarks
...
Add 4 concurrent race tests: multi-model (5 models), Persist+Load
filesystem race, AllStats+RecordUsage, WaitForCapacity+RecordUsage.
Add 4 benchmarks: CanSendWithPrune, Stats, AllStats, Persist.
Total: 80 tests, 7 benchmarks, all pass under go test -race.
Co-Authored-By: Virgil <virgil@lethean.io>
2026-02-20 04:30:54 +00:00
Claude
3c63b1022a
feat(ratelimit): generalise beyond Gemini with provider profiles and push coverage to 95%
...
Phase 0: Rewrite test suite with testify (77.1% -> 95.1% coverage).
Add boundary tests, concurrent access tests, benchmarks, error path
coverage for Load/Persist, Reset, Stats, and CountTokens.
Phase 1: Extract hardcoded Gemini quotas into provider-agnostic config.
Add Provider type, DefaultProfiles(), NewWithConfig(), SetQuota(), and
AddProvider(). Pre-configured profiles for Gemini, OpenAI, Anthropic,
and Local. New() retains exact backward compatibility via delegation.
Co-Authored-By: Charon <developers@lethean.io>
2026-02-20 01:07:57 +00:00
Snider
666deed718
docs: enrich TODO.md with Phase 0 hardening tasks
...
Add Phase 0: race condition tests, concurrent CanSend/RecordUsage,
sliding window edge cases, YAML persistence recovery, benchmarks.
Co-Authored-By: Virgil <virgil@lethean.io>
2026-02-20 00:28:45 +00:00
Virgil
fb531af79a
docs: add TODO.md and FINDINGS.md for fleet delegation
...
Co-Authored-By: Virgil <virgil@lethean.io>
2026-02-19 21:36:13 +00:00
Snider
9b53632e3d
fix: add yaml.v3 dependency
...
Co-Authored-By: Virgil <virgil@lethean.io>
2026-02-19 16:10:06 +00:00
Snider
fa1a6fc030
feat: extract go-ratelimit from core/go pkg/ratelimit
...
Token counting, model quotas, sliding window rate limiter.
Zero external dependencies (stdlib only).
Module: forge.lthn.ai/core/go-ratelimit
Co-Authored-By: Virgil <virgil@lethean.io>
2026-02-19 16:09:13 +00:00