Snider
9d433f6b43
docs: add README with quick start and docs links
...
Co-Authored-By: Virgil <virgil@lethean.io>
2026-02-20 15:11:26 +00:00
Snider
12ad23610f
docs: graduate TODO/FINDINGS into production documentation
...
Co-Authored-By: Virgil <virgil@lethean.io>
2026-02-20 15:03:18 +00:00
Snider
9996754cc4
docs(todo): add commit hash to Phase 4 entries
...
Co-Authored-By: Virgil <virgil@lethean.io>
2026-02-20 06:28:59 +00:00
Snider
e20083d51b
feat(devkit): Phase 4 — vulnerability scanning, complexity analysis, coverage trending
...
- govulncheck JSON output parsing with structured VulnFinding types (13 tests)
- Cyclomatic complexity analysis via go/ast with configurable threshold (21 tests)
- Coverage snapshot persistence and regression detection with CoverageStore (19 tests)
53 new tests, 68 total devkit tests. All pass with -race.
Co-Authored-By: Virgil <virgil@lethean.io>
2026-02-20 06:28:37 +00:00
Snider
7aaa2154b6
test(release): Phase 3 — publisher integration, SDK generation, breaking change detection
...
Publisher integration tests (48 tests): dry-run verification for all 8 publishers
(GitHub, Docker, Homebrew, Scoop, AUR, Chocolatey, npm, LinuxKit), command building,
config parsing, repository detection, artifact handling, cross-publisher name
uniqueness, nil relCfg handling, checksum mapping, interface compliance.
SDK generation tests (38 tests): orchestration, generator registry, interface
compliance for all 4 languages (TypeScript, Python, Go, PHP), config defaults,
SetVersion, spec detection priority across all 8 common paths.
Breaking change detection tests (30 tests): oasdiff integration covering
add/remove endpoints, required/optional params, response type changes,
HTTP method removal, identical specs, multiple breaking changes, JSON format
support, error handling, DiffExitCode, DiffResult structure.
Co-Authored-By: Virgil <virgil@lethean.io>
2026-02-20 05:28:20 +00:00
Snider
50ad540241
feat(infra): Phase 2 — API client abstraction, retry logic, rate limiting
...
Extract shared APIClient from HCloudClient/HRobotClient/CloudNSClient with
configurable retry (exponential backoff + jitter), 429 rate-limit handling
(Retry-After header), and functional options (WithHTTPClient, WithRetry,
WithAuth, WithPrefix). 30 new client_test.go tests covering retry exhaustion,
rate-limit queuing, context cancellation, and integration with all 3 providers.
DigitalOcean: no code existed, removed stale doc references. 66 infra tests
pass, race-clean.
Co-Authored-By: Virgil <virgil@lethean.io>
2026-02-20 04:11:08 +00:00
Snider
c8615ce61e
docs(todo): mark Phase 1 complete — 438 ansible tests
...
All 5 steps done: SSH mock, command, file, service/package,
user/group/advanced, and error/become/facts/idempotency modules.
Co-Authored-By: Virgil <virgil@lethean.io>
2026-02-20 02:58:50 +00:00
Snider
8ab8643e88
test(ansible): Phase 1 Step 1.5 — error propagation, become, facts & idempotency
...
104 new tests covering cross-cutting concerns:
- Error propagation (68): getHosts, matchesTags, evaluateWhen,
templateString, applyFilter, resolveLoop, handleNotify, normalizeConditions
- Become/sudo (8): enable/disable, passwordless, default user
- Fact gathering (9): Ubuntu/CentOS/Alpine/Debian os-release parsing
- Idempotency (8): group exists, key present, docker compose up-to-date
Total ansible tests: 438. Phase 1 complete.
Co-Authored-By: Virgil <virgil@lethean.io>
2026-02-20 02:58:27 +00:00
Snider
ecd01b1efd
docs(todo): mark Phase 1 Step 1.4 complete ( 427929f)
...
Co-Authored-By: Virgil <virgil@lethean.io>
2026-02-20 02:53:00 +00:00
Snider
427929f0e9
test(ansible): Phase 1 Step 1.4 — user/group & advanced module tests
...
69 new tests for user (7), group (7), cron (5), authorized_key (7),
git (8), unarchive (8), uri (6), ufw (8), docker_compose (7), and
dispatch (6) modules. 9 module shims added to mock infrastructure.
Total ansible tests: 334, all passing.
Co-Authored-By: Virgil <virgil@lethean.io>
2026-02-20 02:52:42 +00:00
Snider
54974bd283
docs(todo): mark Phase 1 Step 1.3 complete ( 9638e77)
...
Co-Authored-By: Virgil <virgil@lethean.io>
2026-02-20 02:45:09 +00:00
Snider
9638e77f30
test(ansible): Phase 1 Step 1.3 — service & package module tests
...
56 new tests for service (12), systemd (4), apt (9), apt_key (6),
apt_repository (8), package (3), pip (8), and dispatch (7) modules.
Extended mock with 7 module shims for sshRunner interface.
Co-Authored-By: Virgil <virgil@lethean.io>
2026-02-20 02:44:50 +00:00
Snider
7e4e917272
docs(todo): mark Phase 1 Step 1.2 complete ( c7da9ad)
...
Co-Authored-By: Virgil <virgil@lethean.io>
2026-02-20 02:39:56 +00:00
Snider
acd87c263a
test(build): add builder detection and config tests
...
83 LOC docker, 224 LOC linuxkit, 234 LOC taskfile builder tests.
Tests cover Name(), Detect(), Build() and config parsing.
Co-Authored-By: Virgil <virgil@lethean.io>
2026-02-20 02:39:32 +00:00
Snider
c7da9ad16c
test(ansible): Phase 1 Step 1.2 — file operation module tests
...
54 new tests for copy/file/lineinfile/blockinfile/stat/template modules.
Extended mock_ssh_test.go with sshFileRunner interface and 6 module shims.
Fixed unsupported module test (copy→hostname now that copy is supported).
Total ansible tests: 208.
Co-Authored-By: Virgil <virgil@lethean.io>
2026-02-20 02:39:27 +00:00
Snider
fd46e82297
docs(todo): mark Phase 1 Steps 1.0-1.1 complete ( 3330e55)
...
Co-Authored-By: Virgil <virgil@lethean.io>
2026-02-20 02:32:15 +00:00
Snider
3330e55b2b
test(ansible): Phase 1 Steps 1.0-1.1 — SSH mock + command module tests
...
Step 1.0: MockSSHClient with command registry, file system simulation,
become state tracking, execution log, upload log, and assertion helpers.
Module shims via sshRunner interface for testability.
Step 1.1: 48 tests for command/shell/raw/script modules verifying:
- command uses Run(), shell uses RunScript()
- chdir wrapping, non-zero RC, SSH error propagation
- raw passes through without shell wrapping
- script reads local file content, sends via RunScript()
- Cross-module dispatch differentiation
- Template variable resolution in args
Co-Authored-By: Virgil <virgil@lethean.io>
2026-02-20 02:31:48 +00:00
Snider
17b9e32df2
docs: refine Phase 1 with 40-module audit and mock SSH strategy
...
Analysis found 40 modules in modules.go (1,434 LOC) with zero tests.
Broken into 5 steps: mock infrastructure, command execution (4),
file operations (6), service/package (7), advanced (10), plus
error propagation and become/sudo testing.
Co-Authored-By: Virgil <virgil@lethean.io>
2026-02-20 02:09:44 +00:00
Snider
b3954c808b
docs: mark Phase 0 as complete in TODO.md
...
All 6 Phase 0 items done:
- ansible/ tests (6e346cb )
- infra/ tests (6e346cb )
- build/ tests (5d22ed9 )
- release/ tests + linuxkit nil fix (5d22ed9 )
- Race condition tests (6e346cb )
- go vet clean (6e346cb )
Co-Authored-By: Virgil <virgil@lethean.io>
2026-02-20 01:59:04 +00:00
Snider
5d22ed97e6
test: complete Phase 0 build/ and release/ test coverage
...
build/:
- archive_test.go: round-trip tests for tar.gz/zip, multi-file archives
- signing_test.go: mock signer tests, path verification, error handling
release/:
- Fix nil pointer crash in linuxkit.go:50 (release.FS nil guard)
- linuxkit_test.go: nil FS test case for the crash fix
All 862 tests pass, go vet clean.
Co-Authored-By: Virgil <virgil@lethean.io>
2026-02-20 01:58:37 +00:00
Snider
7708f8fddd
docs(devops): update TODO.md Phase 0 completion status
...
Mark ansible/ and infra/ tests as done, race detection clean,
go vet fixed. Note pre-existing LinuxKit nil pointer crash.
Co-Authored-By: Virgil <virgil@lethean.io>
2026-02-20 01:38:18 +00:00
Snider
6e346cb2fd
test(devops): Phase 0 test coverage and hardening
...
- Fix go vet warnings across 4 files: update stale API calls in
container/linuxkit_test.go, container/state_test.go, and
devops/devops_test.go (removed io.Local arg from NewState/LoadState),
rewrite container/templates_test.go for package-level function API
- Add ansible/parser_test.go: 17 tests covering ParsePlaybook,
ParseInventory, ParseTasks, GetHosts, GetHostVars, isModule,
NormalizeModule (plays, vars, handlers, blocks, loops, roles, FQCN)
- Add ansible/types_test.go: RoleRef/Task UnmarshalYAML, Inventory
structure, Facts, TaskResult, KnownModules validation
- Add ansible/executor_test.go: executor logic (getHosts, matchesTags,
evaluateWhen, templateString, applyFilter, resolveLoop, templateArgs,
handleNotify, normalizeConditions, helper functions)
- Add infra/hetzner_test.go: HCloudClient/HRobotClient construction,
do() round-trip via httptest, API error handling, JSON serialisation
for HCloudServer, HCloudLoadBalancer, HRobotServer
- Add infra/cloudns_test.go: doRaw() round-trip via httptest, zone/record
JSON parsing, CRUD response validation, ACME challenge logic,
auth param verification, error handling
- Fix go.mod replace directive path (../go -> ../core)
- All tests pass, go vet clean, go test -race clean
Co-Authored-By: Virgil <virgil@lethean.io>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 01:36:03 +00:00
Snider
9b55b97b28
docs: add domain expert guide, task queue, and research notes
...
CLAUDE.md: architecture guide for ansible/build/infra/release (29K LOC)
TODO.md: 5-phase task queue (test coverage, ansible, infra, release, devkit)
FINDINGS.md: package inventory, test gaps, config ecosystem
Co-Authored-By: Virgil <virgil@lethean.io>
2026-02-20 00:59:01 +00:00
Claude
392ad68047
feat: extract devops packages from core/go
...
Build system, release automation, SDK generation, Ansible executor,
LinuxKit dev environments, container runtime, deployment, infra
metrics, and developer toolkit.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 15:21:39 +00:00