No description
Find a file
amidman 14569d90ad chore: initial commit — engineering foundation from arsenal
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%.
2026-08-18 11:59:39 +04:00
.linter chore: initial commit — engineering foundation from arsenal 2026-08-18 11:59:39 +04:00
.woodpecker chore: initial commit — engineering foundation from arsenal 2026-08-18 11:59:39 +04:00
cmd chore: initial commit — engineering foundation from arsenal 2026-08-18 11:59:39 +04:00
docs chore: initial commit — engineering foundation from arsenal 2026-08-18 11:59:39 +04:00
ruleguard chore: initial commit — engineering foundation from arsenal 2026-08-18 11:59:39 +04:00
scripts chore: initial commit — engineering foundation from arsenal 2026-08-18 11:59:39 +04:00
.gitignore chore: initial commit — engineering foundation from arsenal 2026-08-18 11:59:39 +04:00
.golangci.yaml chore: initial commit — engineering foundation from arsenal 2026-08-18 11:59:39 +04:00
AGENT.md chore: initial commit — engineering foundation from arsenal 2026-08-18 11:59:39 +04:00
go.mod chore: initial commit — engineering foundation from arsenal 2026-08-18 11:59:39 +04:00
go.sum chore: initial commit — engineering foundation from arsenal 2026-08-18 11:59:39 +04:00
LICENSE chore: initial commit — engineering foundation from arsenal 2026-08-18 11:59:39 +04:00
LINTER.md chore: initial commit — engineering foundation from arsenal 2026-08-18 11:59:39 +04:00
readme.go chore: initial commit — engineering foundation from arsenal 2026-08-18 11:59:39 +04:00
README.md chore: initial commit — engineering foundation from arsenal 2026-08-18 11:59:39 +04:00
readme_test.go chore: initial commit — engineering foundation from arsenal 2026-08-18 11:59:39 +04:00
Taskfile.yaml chore: initial commit — engineering foundation from arsenal 2026-08-18 11:59:39 +04:00

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.yaml by task 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 fixers fix-untyped-nil and fix-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.