v1.0.5
Changelog
All notable changes to armada are documented in this file. The format follows
Keep a Changelog, and this project
adheres to Semantic Versioning.
Features
- single triage authority + consistency audit + regression suite (#131)
- single triage authority + consistency audit + regression suite
- armada-voyage-finish skill + armada release command (#130)
- add armada-voyage-finish
- add release-command module
Bug Fixes
- survive CI without committed armada.yaml or opencode.json
- survive CI without .opencode/ on disk
- re-render AGENTS.md from armada.yaml after rebase onto master
Chores
- sync master with origin
- PR-number fix for F1/F5 + voyage summary (#130)
- AGENTS.md voyage header re-title
Docs
- Path C — armada release
- F5 release-command entry
Tests
- release-command unit tests with mocked injection
- voyage-finish registry + scaffold e2e
Features
- single triage authority + consistency audit + regression suite (#131)
- single triage authority + consistency audit + regression suite
- armada-voyage-finish skill + armada release command (#130)
- add armada-voyage-finish
- add release-command module
Bug Fixes
- remove armada/armada.yaml from git add list
- survive CI without committed armada.yaml or opencode.json
- survive CI without .opencode/ on disk
- re-render AGENTS.md from armada.yaml after rebase onto master
Chores
- sync master with origin
- PR-number fix for F1/F5 + voyage summary (#130)
- AGENTS.md voyage header re-title
Docs
- Path C — armada release
- F5 release-command entry
Tests
- release-command unit tests with mocked injection
- voyage-finish registry + scaffold e2e
[Unreleased]
Added
- feat(triage): canonical voyage-vs-in-window + voyage-splitting doctrine (
docs/process/triage.md, new). In-window first, voyage by exception; risk-classified single-file fixes (no blanket in-window over trust boundaries); three-part independence test for splitting a broad request into separate voyages; loop-free decision tree. Every triage statement inAGENTS.md, the orchestrator prompt,.opencode/commands/, and docs now cites the canon — no restated policy. - feat(audit): holistic six-surface consistency audit (
docs/process/consistency-audit.md, new). Source instructions, generated artifacts vs manifest, docs, command docs, permissions, tests — 21 findings (F01-F21), zero "not checked" rows, all dispositioned. Restored 5 formerly-missing docs +docs/stability/(14+ dead refs re-pointed). - feat(regression):
tests/regression-triage.test.js— automated guards for triage canon, doc-link integrity, artifact consistency (yaml ↔ renderedopencode.json↔ agent frontmatter ↔BASE_PERMISSIONS↔DEFAULT_PLAYBOOK), PR-first/no-clobber/round-trip invariants, stale-term and phantom slash-command greps. - feat(permissions): hardened ledger + state boundaries in
buildTeam()— ledger edit globs derived fromDEFAULT_PLAYBOOK(custom ledger paths stay writable by their owners); dev roles explicitly deny every ledger kind + the ledgers dir; orchestrator'sarmada/state/active.jsonreads reconciled (no phantomfleet-status.md);default_agentsemantic equality (commodore→ orchestrator); phantom/armada-status//armada-fleetrefs removed.
Changed
- Orchestrator prompt hard rule 5 + "Voyage launch" defer to
docs/process/triage.mdas the sole triage authority and carry the split-broad-task rule. AGENTS.md,CONTRIBUTING.md,docs/contributor-guide.mdlink the triage canon instead of restating policy.- CLI entry one-liner in
AGENTS.mddrops removedping; README command table aligned to the 14 active commands +--version.
Fixed
- Four contract-named docs missing (restored),
docs/stability/directory missing (restored),docs/self-improvement.mdmissing (restored) — repo-wide dead-link grep now returns zero. - Stale
src/cli.jsfile:line refs in operator-guide/contributor-guide; undocumentedresume/reconcileexit 2; stale README/operator-guide command counts; TODO/armada-statusclaim.
Security
- Docs-align safe-bash overlay: the
SAFE_BASHread tier excludes content-emitters/write dumps (cat,echo,head,tail,env,printenvhad been listed as safe-read in prose) so shell-redirect/pipe exfiltration (cat .env > leak/cat .env | curl) prompts rather than executing. - Permission docs corrected to the real resolution model: bash/rule lookup is order / last-match, not most-specific-first —
SAFE_BASHmerges first inbuildTeam()so the agent's appended rules override on top. --yolograntsbash: "*" allowto orchestrator + qa only; read-only roles (security, adversary, architect, docs) stay bash-restricted under yolo.--headlessis scoped: it narrows only the orchestrator's bash to git + read-only inspection, never a blanket allow.external_directory: "deny"remains in both modes.
1.0.4 - 2026-08-07
Added
- feat(orchestrator): tighten no-trivial exception + 4-path permission matrix (#126). Hard rule + permission-boundary check guard the orchestrator against trivial delegation.
- feat(voyage): prefix tmux session names with
voyage-(#127). Defaultarmada voyagetmux sessions are now easy to spot intmux ls. Explicit--name <text>bypasses the prefix. - feat: safe-bash defaults for harmless commands (#128). Tiered
SAFE_BASHallowlist merged first inbuildTeam(): read-only commands (ls,cat,grep,git status, ...) allowed for every role; write commands only for dev roles. Yolo still flattens to*. - feat(attach-auto-spawn): tryAttachOrPrint helper + auto-attach tmux fallback (#129).
armada voyage attach <name>reattaches to a running tmux session; auto-attach falls back when an active session exists. - fix(voyage-cwd): absolute path in default prompt + lane cwd (#125).
armada/REQUIREMENTS.mdpaths in the default drive prompt are absolute;tmux new-session -c <absLane>puts the team in the worktree. - fix(questionnaire): strict custom model id format validation (#123, follow-up #124).
pickModelwhitelistsopencode-go/zen/<m>andopenrouter/<owner>/<m>; everything else re-prompts. Closes theparseInt-greediness gap and rejects bare catalog prefixes. - fix(cli): complete 1.0.4 version bump in
src/cli.js:62(#124).tests/cli.test.js:713now reads expected version frompackage.json(mirrorstests/version-flag.test.js:8), so future bumps don't require a test edit. - infra:
.devcontainer/(this release).typescript-node:24+ Chromium + agent-browser + opencode skill — reproducible workspace for QA/adversary e2e work.
Changed
src/cli.js:62reads version frompackage.json(was hardcoded to1.0.3).- Default
voyagetmux session name format changed:<laneBasename>->voyage-<laneBasename>. tests/version-flag.test.jsandtests/cli.test.jsnow source the expected version frompackage.json.
Fixed
--requirementsorchestrator trivial-delegation exception path tightened.pickModelno longer silently accepts arbitrary input viaparseIntgreediness.armada voyagenow boots into the worktree cwd (was relative path).
Security
- SAFE_BASH allowlist (read-only everywhere, write only for dev roles) closes the all-roles-write-bash exposure that yolo previously flattened.
Test Evidence
- 491/491 unit + CLI e2e tests pass.
- macos + ubuntu × node 20 + 22 CI green (per #124/#126/#128 merge logs).
- Manual
node:sqlitesession archaeology on the 100 most recent sessions confirmed the 7 voyage features landed without new defects introduced.
What's Changed
- docs(readme): clarify package install and updates by @rafmacalaba in #119
- docs: restore README product narrative by @rafmacalaba in #120
- chore: untrack generated armada ledgers by @rafmacalaba in #121
- fix(questionnaire): accept custom model IDs in pickModel by @rafmacalaba in #123
- chore(release): bump to 1.0.4 by @rafmacalaba in #124
- fix(voyage-cwd): absolute path in default prompt + lane cwd by @rafmacalaba in #125
- feat(orchestrator): tighten no-trivial exception + 4-path permission matrix by @rafmacalaba in #126
- feat: prefix tmux session names with voyage- by @rafmacalaba in #127
- feat: safe-bash defaults for harmless commands by @rafmacalaba in #128
- feat(attach-auto-spawn): tryAttachOrPrint helper — voyage attach and auto-attach tmux fallback by @rafmacalaba in #129
- feat: armada-voyage-finish skill + armada release command by @rafmacalaba in #130
- feat(triage): single triage authority + consistency audit + regression suite by @rafmacalaba in #131
- release 1.0.5 by @rafmacalaba in #132
Full Changelog: v1.0.3...v1.0.5