- Go 100%
Copy the arsenal code-quality machinery into army: the split golangci-lint configuration (.linter/* merged into .golangci.yaml via task merge-linters, 70+ strict linters + formatters), custom ruleguard rules (one-field-per-line, ban untyped nil), standalone AST analyzers and developer fixers (scripts/), Woodpecker lint/test/coverage-store pipelines with the 85% coverage floor, the LINTER.md guide, MIT license, and the conceptual manifest (docs/principles-ru.md). AGENT.md carries the agent conventions (no direct master commits, no skip-ci, no flaky tests, embed-only test fixtures); the arsenal .issues/.follow-ups workflow is not active here yet. cmd/army is a minimal skeleton (version command, env-driven slog setup) written to the same lint-clean standard. Project-wide coverage: 90.2%. |
||
|---|---|---|
| .linter | ||
| .woodpecker | ||
| cmd | ||
| docs | ||
| ruleguard | ||
| scripts | ||
| .gitignore | ||
| .golangci.yaml | ||
| AGENT.md | ||
| go.mod | ||
| go.sum | ||
| LICENSE | ||
| LINTER.md | ||
| readme.go | ||
| README.md | ||
| readme_test.go | ||
| Taskfile.yaml | ||
Army
Army — repository for the fight for code quality. Army is a multi-agent system in which every unit of work is a self-sufficient, isolated task: its own context, its own tools whitelist, its own model, its own limits. No compaction, no shared state — data moves between tasks as independent copies through explicit input/output contracts.
The conceptual manifest — principles, architecture, mission cycles — lives in docs/principles-ru.md. This README tracks the implementation.
Status
Phase 0 (principles) is fixed. The repository currently carries the engineering foundation only — lint rules, CI pipelines, and the binary skeleton. Phase 1 (minimal core: task spec, profile registry, session log, provider, agent loop, planner, TUI) is the next milestone per the roadmap.
Installation
go install go.amidman.dev/army/cmd@latest
Usage
army <command> [args]
Commands:
| Command | Description | Exit codes |
|---|---|---|
version |
Print the army binary version | 0 |
Unknown or missing commands print usage to stderr and exit 2.
Logging is configured via environment variables: LOG_LEVEL
(error/warn/info/debug/disabled), LOG_JSON (bool), and
LOG_ADD_SOURCE (bool).
Engineering principles
This repository inherits its code-quality machinery from Arsenal:
- 70+ golangci-lint linters with strict defaults — see LINTER.md for the practical guide and
.linter/for the split configuration (license/linters/custom) merged into.golangci.yamlbytask merge-linters. - Custom ruleguard rules in
ruleguard/— one field per line in composite literals, no untyped nil in struct fields or function calls. - Standalone AST analyzers in
scripts/—lint-slicelayout(slice literal element-per-line),lint-unkeyed-struct(positional struct literals), plus developer fixersfix-untyped-nilandfix-one-field-per-line. - Tests never read static files from disk — everything is
go:embed-ed (see AGENT.md). - Flaky tests are defects, never retried away.
- Coverage floor of 85% enforced in CI on every PR.
Development
task lint # golangci-lint fmt + run
task license # check/fix license headers
task coverage # test with coverage + HTML report
task merge-linters # regenerate .golangci.yaml from .linter/*
task assert # license + lint + coverage
task install # build army into $GOBIN
CI runs via Woodpecker (.woodpecker/): lint on PRs and master
pushes, test with a hard 85% coverage floor on PRs, coverage
storage and badge updates on master.
Agent conventions live in AGENT.md.