Why this rule
Even with tests present, an agent needs to know how to run them. A discoverable command closes the agent’s work loop — run, observe, fix, repeat — without guessing. When a test command is missing, the agent either skips verification entirely or attempts to infer the command, risking a wrong invocation. Neither outcome is acceptable for an agent that is supposed to be self-correcting.AE-AUTO-001 only applies when at least one code language is active in the repo. A docs-only or config-only repo is not evaluated.
What triggers it
Charter checks whether a test or verification command is discoverable from the repo’s tracked files. A command is considered discoverable if any of the following signals exist:
For languages with a well-known conventional test command, no task runner is required:
The finding fires when none of these signals exist for an active language.
Examples
- Failing
- Passing
A TypeScript project with source files and tests in place, but no An agent reading this repo has no reliable way to invoke the test suite → flagged Medium.
test script in package.json and no task runner configured:package.json
How to fix
Add a task runner target that runs your tests. Charter reads the task runner file — no extra Charter configuration is needed.1
Choose a task runner
If you already have a
Makefile, package.json, or moon.yml, add a test target there. If you have none, mise.toml tasks are the lowest-friction option for multi-language repos.2
Wire up the test command
The target just needs to invoke your existing test command:
3
Verify discoverability
Run
charter explain AE-AUTO-001 to confirm Charter now recognizes the command.Score impact
Medium (−4 per finding). No hard cap — caps are reserved for raw-secret and Blocker findings. See Scoring and caps.
Edge cases
Go and Rust — no task runner required
Go and Rust — no task runner required
Single-language Go and Rust repos are never penalized for lacking a
Makefile or other task runner. Their toolchain is the contract.Python — pytest config required
Python — pytest config required
Conventional Python detection requires a pytest config file (
pytest.ini, tox.ini, or [tool.pytest.ini_options] in pyproject.toml). The mere presence of .py files is not enough, because python alone is not a zero-config test command.No active language
No active language
When no language is active (docs/config/tooling-only repos), AE-AUTO-001 does not fire. See AE-TEST-001 for how active language detection works.
Related rules
AE-TEST-001
Checks that test files actually exist — a prerequisite for this rule to be meaningful.
AE-ENV-001
Reproducible toolchain — required for the discoverable test command to work reliably.