Apply this profile only to ZUnit v0.8.2 with Zsh 5.9.2. APG directly verified that exact pair in a disposable source-built environment. No version range is verified. ZUnit v0.8.2 with Zsh 5.3.1 is unsupported by the APG compatibility harness because the runner’s dependency probe did not complete. Every other pair is unverified and stops pending a fresh disposable compatibility run.
Own ZUnit runner, discovery, assertions, hooks, configuration, output,
fixtures, isolation, lifecycle, and structural judgment. Leave Zsh option,
expansion, startup, command-construction, and process semantics to
zsh-language-profile when independently material. Apply the highest justified
Green — routine, Yellow — caution, Orange — warning, or
Red — crisis / stop response. A level is an evidence requirement, not action
authority or maturity.
Do not use this profile for:
.zunit.yml, support/bootstrap scope, @setup and
@teardown, skips, risky tests, output mode, and cleanup ownership.run, assert $state
explicitly. Assert $output or $lines when output matters. ZUnit’s
numeric equals and textual same_as are not interchangeable. Prefer
$lines for multiline exactness because v0.8.2 comparison forwarding splits
newline-bearing arguments.zsh-language-profile. Implementation may keep
implementing-with-test-discipline primary; review may keep
reviewing-and-verifying-repository-work primary.These defaults apply mainly to maintained hand-written ZUnit tests. They are guidance, not automatic enforcement or architecture selection.
| Signal | Green — routine | Yellow — caution | Orange — warning | Red — crisis / stop |
|---|---|---|---|---|
| Test-file physical lines | <= 150 |
151–300 |
301–500 |
>= 501 |
| Tests per file | <= 8 |
9–15 |
16–24 |
>= 25 |
| Commands in one test body | <= 12 |
13–20 |
21–35 |
>= 36 |
| Setup/teardown/bootstrap span | <= 25 |
26–50 |
51–80 |
>= 81 |
| Helper function span | <= 20 |
21–35 |
36–50 |
>= 51 |
| Mutable shared fixture/state domains | <= 3 |
4–6 |
7–10 |
>= 11 |
| Cleanup-owned children/jobs | <= 1 |
2–3 |
4–5 |
>= 6 |
| Independent responsibilities | 1 |
2 |
3 |
>= 4 |
Count physical records after universal-newline decoding, including comments,
blank lines, heredoc payload, and a final unterminated segment. Count only
runner-recognized @test declarations under v0.8.2’s line-oriented discovery
grammar. A declaration-like heredoc line or duplicate identity is a discovery
defect to resolve, not a reason to inflate a valid count. Static counting must
not execute target tests.
For each test body, count Zsh grammar commands or compound-command starts; continuations count once, while comments, blanks, delimiter-only lines, and heredoc payload do not. Setup/teardown/bootstrap and helper spans use physical lines from the opening declaration through its closing delimiter, including comments, blanks, and heredoc payload; use the largest individual span.
Count independently mutable state or resource-owner domains visible across tests or lifecycle scopes, not aliases or per-test values recreated in an owned temporary directory. Count the maximum simultaneously alive children or jobs whose cleanup this test owner controls; any unowned or leaking child is semantic Red regardless of count. Responsibilities are independently changeable behavior families.
Validate exact first values when calibrating: 151 lines, 9 tests, 13 commands, 26 setup lines, 21 helper lines, 4 shared domains, 2 owned children, and 2 responsibilities are Yellow; 301, 16, 21, 51, 36, 7, 4, and 3 are Orange; 501, 25, 36, 81, 51, 11, 6, and 4 are Red.
Classify generated, vendored, fixture, snapshot, compatibility, migration, and data-driven artifacts before structural action. A coherent repository-accepted data matrix may receive a bounded line-count-only exception when executable structure remains reviewable. Semantic Red and every other signal remain.
An existing Red legacy test may receive the smallest safe fix when it adds no responsibility and no meaningful growth. A new responsibility in Red remains Red. An accepted bounded exception records scope, rationale, owner, evidence, refresh or expiry, validation, rollback, and why no semantic Red is hidden.
PATH. A missing or unresolved dependency,
runner, or discovery boundary is Red.run captures command status in $state, combined output in $output, and
split lines in $lines. A nonzero command does not itself fail the test. An
assertion-free materially required status is Red, even though the runner
reports an assertion-free test as risky.This profile was calibrated on 2026-07-21 from the MIT-licensed ZUnit v0.8.2 release, tagged source, documentation, runner, assertions, hooks, configuration, discovery, output, upstream tests, and historical CI; the MIT-licensed Revolver v0.2.4 tag; and official Zsh 5.3.1 and 5.9.2 releases. APG copies no upstream expression. The exact 5.9.2 pair passed the tagged upstream and APG compatibility suites; the exact 5.3.1 pair stopped at the runner dependency probe on the tested environment.
Refresh before a behavior-bearing correction, maturity review, or publication; when a project changes ZUnit, Zsh, Revolver, platform, runner, configuration, or output mode; or when discovery, assertion, hook, process, or cleanup semantics are disputed. Removal deletes the leaf, relative projection, catalog and capability-map entries, known-unmanaged handling, focused tests, and compatibility fixtures while preserving ADR, evaluation, and exit history.
The repository owns exact versions, platform, Revolver source, runner command, startup isolation, discovery roots, configuration, output mode, test names, helpers, fixtures, time limits, process policy, CI, coverage, artifact classification, accepted exceptions, authority, validation, and rollback.
Report the exact pair, platform and runner boundary, level, structural and semantic signals, discovery and assertion evidence, lifecycle and output behavior, upstream and focused results, cleanup and no-residue evidence, accepted exception, and rollback. Unsupported or unverified pairs report the stopped condition; they never become successful evidence.
Stop when the pair is outside the verified matrix; runner or discovery behavior is unresolved; a material status can false-pass; startup or host configuration would be mutated without isolation and authority; shared state is order-dependent; a child can leak or hang; protected data can enter output; untrusted input reaches dynamic shell evaluation; a destructive action lacks authority and rollback; unsupported behavior is represented as verified; or meaningful Red growth lacks decomposition or an accepted bounded exception.
equals for text or assuming multiline shorthand is exact.run fails a test without an explicit status assertion.