Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
124 commits
Select commit Hold shift + click to select a range
35d2a2f
docs(udp-server): plan request buffer tests
josecelano Sep 7, 2026
d6f23a2
test(udp-server): cover available request capacity
josecelano Sep 7, 2026
511bc15
docs(udp-server): approve request buffer reclamation test
josecelano Sep 7, 2026
01a20a1
docs(udp-server): clarify request eviction policy
josecelano Sep 7, 2026
5ee739c
docs(udp-server): plan request buffer scenario fixture
josecelano Sep 7, 2026
a6212e3
test(udp-server): cover oldest request eviction
josecelano Sep 7, 2026
1c74697
docs(udp-server): plan request buffer fixture cleanup
josecelano Sep 7, 2026
331a2dd
test(udp-server): simplify request buffer fixture
josecelano Sep 7, 2026
5a0ed45
docs(udp-server): plan request buffer drop test
josecelano Sep 7, 2026
1660d0f
test(udp-server): cover request buffer cleanup
josecelano Sep 7, 2026
c7395c5
docs(udp-server): record request buffer race deferral
josecelano Sep 7, 2026
8897fd1
docs(udp-server): complete request buffer test plan
josecelano Sep 7, 2026
050d2ab
docs(udp-server): plan event classification tests
josecelano Sep 8, 2026
6dbbac4
test(udp-server): cover event error classification
josecelano Sep 8, 2026
5255fc3
docs(udp-server): plan event request-kind tests
josecelano Sep 8, 2026
2c33a11
test(udp-server): cover request-kind metrics
josecelano Sep 8, 2026
4834196
docs(udp-server): complete event test plan
josecelano Sep 8, 2026
e53bb02
docs(udp-server): plan parse error adapter tests
josecelano Sep 8, 2026
d974726
test(udp-server): cover parse error conversion
josecelano Sep 8, 2026
ce3bcc9
docs(udp-server): plan invalid request conversion test
josecelano Sep 8, 2026
7bd8f1d
test(udp-server): cover invalid request error
josecelano Sep 8, 2026
5400c11
docs(udp-server): complete parse error test plan
josecelano Sep 8, 2026
e3afddd
docs(udp-server): plan bound socket tests
josecelano Sep 8, 2026
10ac9d8
docs(udp-server): plan bound socket port test
josecelano Sep 8, 2026
9728939
test(udp-server): cover bound socket port
josecelano Sep 8, 2026
30fcba6
docs(udp-server): plan bound socket metadata test
josecelano Sep 8, 2026
5328002
test(udp-server): cover bound socket metadata
josecelano Sep 8, 2026
418bb94
docs(udp-server): complete bound socket test plan
josecelano Sep 8, 2026
21778f4
docs(udp-server): reconcile test plan progress
josecelano Sep 8, 2026
ef55023
docs(udp-server): plan handler dispatch test
josecelano Sep 9, 2026
84bf103
test(udp-server): cover sendable parse error routing
josecelano Sep 9, 2026
fa18cd0
test(udp-server): simplify parse error scenario
josecelano Sep 9, 2026
fec5e46
docs(issues): require test design reviews
josecelano Sep 9, 2026
54495c7
docs(agents): review test design in task reviews
josecelano Sep 9, 2026
fc7928f
test(udp-server): clarify parse error test intent
josecelano Sep 9, 2026
eb1b002
docs(testing): require prose-first test verification
josecelano Sep 9, 2026
2dafa81
docs(testing): format prose-first checklist
josecelano Sep 9, 2026
c0fc262
docs(udp-server): assess handler error routing
josecelano Sep 9, 2026
7b72363
docs(testing): distinguish unit and integration coverage
josecelano Sep 9, 2026
c19ae50
docs(udp-server): complete handler dispatch test plan
josecelano Sep 9, 2026
c41df9a
docs(udp-server): plan launcher tests
josecelano Sep 9, 2026
b8e078f
docs(udp-server): update performance evidence status
josecelano Sep 9, 2026
168d32f
test(udp-server): harden request buffer test cleanup
josecelano Sep 9, 2026
ed8fbdc
docs(review): record PR 2174 Copilot suggestions
josecelano Sep 9, 2026
c1d289f
test(udp-server): clarify launcher startup cleanup
josecelano Sep 9, 2026
32485ae
docs(udp-server): approve port zero admission test
josecelano Sep 9, 2026
441dd93
test(udp-server): cover port zero request admission
josecelano Sep 9, 2026
6884876
docs(udp-server): approve banned IP admission test
josecelano Sep 9, 2026
a300571
test(udp-server): cover banned request admission
josecelano Sep 9, 2026
2eab8d7
docs(udp-server): approve port zero test split
josecelano Sep 9, 2026
3aa8d15
docs(udp-server): approve banned request test split
josecelano Sep 9, 2026
a48ad3b
test(udp-server): split launcher admission contracts
josecelano Sep 9, 2026
c871342
docs(udp-server): complete launcher test plan
josecelano Sep 9, 2026
ee679c7
docs(udp-server): approve contract error test cleanup
josecelano Sep 10, 2026
4491bcc
test(udp-server): clarify empty datagram contract
josecelano Sep 10, 2026
06f896c
docs(testing): align helpers with test abstraction
josecelano Sep 10, 2026
017c1de
docs(udp-server): approve connect contract cleanup
josecelano Sep 10, 2026
5e3b06b
test(udp-server): clarify connect contract
josecelano Sep 10, 2026
ab4f916
docs(udp-server): complete contract test plan
josecelano Sep 10, 2026
8fa8785
docs(udp-server): approve error metric test cleanup
josecelano Sep 10, 2026
3c0ee96
test(udp-server): clarify error metric handler test
josecelano Sep 10, 2026
9394dc7
docs(udp-server): approve error metric label test
josecelano Sep 10, 2026
4fdaec8
test(udp-server): cover connect error metric label
josecelano Sep 10, 2026
4480808
docs(testing): document fixture expectation anti-pattern
josecelano Sep 10, 2026
87e4db5
test(udp-server): cover cookie error metric labels
josecelano Sep 10, 2026
bcde822
docs(udp-server): complete error metric test plan
josecelano Sep 10, 2026
b67b8be
docs(udp-server): finalize error metric test plan
josecelano Sep 10, 2026
98d5772
docs(testing): require separate unit coverage evidence
josecelano Sep 10, 2026
72ea463
docs(udp-server): complete container test cleanup review
josecelano Sep 11, 2026
b754de8
test(udp-server): cover container event publication
josecelano Sep 11, 2026
43f2784
docs(udp-server): record container coverage evidence
josecelano Sep 11, 2026
dd3f283
docs(udp-server): finalize container test plan
josecelano Sep 11, 2026
cea828e
docs(udp-server): track remaining unit test assessments
josecelano Sep 11, 2026
d287c15
docs(udp-server): plan receiver unit tests
josecelano Sep 11, 2026
ab12df8
docs(udp-server): complete receiver test cleanup review
josecelano Sep 11, 2026
7f43049
test(udp-server): cover received datagram adaptation
josecelano Sep 11, 2026
cbdd1b1
docs(testing): add test code smell review
josecelano Sep 11, 2026
0166788
docs(udp-server): record receiver coverage evidence
josecelano Sep 11, 2026
33c82cc
docs(udp-server): finalize receiver test plan
josecelano Sep 11, 2026
207f0a6
docs(udp-server): plan statistics event dispatch tests
josecelano Sep 11, 2026
c0a171c
docs(udp-server): complete statistics dispatch cleanup review
josecelano Sep 11, 2026
880eb20
docs(udp-server): record statistics dispatcher test ownership
josecelano Sep 11, 2026
a740a9a
docs(udp-server): record statistics dispatch coverage
josecelano Sep 11, 2026
8b819bc
docs(udp-server): finalize statistics dispatch plan
josecelano Sep 11, 2026
704b17c
docs(udp-server): plan banning event handler tests
josecelano Sep 11, 2026
26e665a
docs(udp-server): complete banning handler cleanup review
josecelano Sep 11, 2026
e6383ac
test(udp-server): cover banning event orchestration
josecelano Sep 11, 2026
5d6fbb7
docs(testing): clarify behavioral data visibility
josecelano Sep 11, 2026
878500d
docs(udp-server): record banning handler coverage
josecelano Sep 11, 2026
f26e05b
docs(udp-server): finalize banning handler test plan
josecelano Sep 11, 2026
b2cc149
docs(agents): fix task reviewer workflow numbering
josecelano Sep 11, 2026
1be6479
docs(udp-server): plan server states test review
josecelano Sep 11, 2026
94bbe29
docs(udp-server): finalize server states test plan
josecelano Sep 11, 2026
ae5b2ce
docs(udp-server): reopen server states plan for startup mappings
josecelano Sep 11, 2026
c4f17eb
test(udp-server): cover startup notification errors
josecelano Sep 11, 2026
6608d0c
docs(udp-server): document server states test ownership
josecelano Sep 11, 2026
91814d2
docs(udp-server): record server states coverage
josecelano Sep 11, 2026
a6b3c4f
docs(udp-server): finalize server states test plan
josecelano Sep 11, 2026
e2524ab
docs(udp-server): plan handler error tests
josecelano Sep 11, 2026
983dc24
test(udp-server): split error handler contracts
josecelano Sep 11, 2026
d649ca6
test(udp-server): cover error event public URL
josecelano Sep 11, 2026
69ada54
test(udp-server): simplify error handler test calls
josecelano Sep 11, 2026
f819afe
docs(issues): complete error handler test review
josecelano Sep 11, 2026
493a74e
test(udp-server): cover response processing average
josecelano Sep 11, 2026
e020ea5
test(udp-server): split processor port-zero contracts
josecelano Sep 11, 2026
aecec5a
docs(issues): record remaining udp server assessments
josecelano Sep 11, 2026
15d8914
docs(issues): record udp server mutation evidence
josecelano Sep 11, 2026
e535932
test(udp-server): simplify port-zero processor test
josecelano Sep 14, 2026
defe846
docs(issues): complete udp server test evidence
josecelano Sep 14, 2026
8901e68
style(udp-server): fix rustfmt import grouping
josecelano Sep 14, 2026
ae6238f
docs(issues): repair archived issue links in EPIC
josecelano Sep 14, 2026
8831ee9
docs(udp-server): correct formatting validation records
josecelano Sep 14, 2026
d948317
test(udp-server): assert retained tasks survive eviction
josecelano Sep 14, 2026
a08feba
test(udp-server): clarify inert admission test inputs
josecelano Sep 14, 2026
49a0f0c
test(udp-server): apply it_should naming convention
josecelano Sep 14, 2026
2312789
docs(udp-server): record table-form test rationale
josecelano Sep 14, 2026
2ab8362
chore(vscode): explain markdown format-on-save opt-out
josecelano Sep 14, 2026
4c43bf1
docs(review): track PR 2174 maintainer feedback
josecelano Sep 14, 2026
2c53718
docs(review): record PR 2174 feedback resolution
josecelano Sep 14, 2026
6cd30e1
test(udp-server): rename bare receiver test prefix
josecelano Sep 14, 2026
e19cab8
docs(udp-server): mark stable-rustfmt validation rows
josecelano Sep 14, 2026
885ffbe
docs(udp-server): record RawRequest derive decision
josecelano Sep 14, 2026
dc543e7
docs(review): cite fix commits by stable subject
josecelano Sep 14, 2026
40b1a6f
docs(review): record round five resolution
josecelano Sep 14, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 16 additions & 6 deletions .github/agents/task-reviewer.agent.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,22 +38,32 @@ pull request is opened.
- Acceptance criteria list
- Claimed implementation scope
2. Inspect relevant diffs/files and run focused checks as needed.
3. Validate each acceptance criterion explicitly as one of:
3. When changed tests are in scope, apply the `Test Design` checklist from
`.github/skills/dev/task-reviews/review-task/SKILL.md` to every changed test. Report each
violated item as a repository-convention finding with concrete remediation; do not pass the
review while a test fixture is a parameter bag or hides the causal state, production Act, or
independently specified expected result. Require recorded evidence of the mandatory prose-first
Arrange-Act-Assert comparison; do not pass a review when a changed test's code has not been
compared against its temporary prose specification, or when redundant prose remains without an
irreducible-context rationale. Assess helper quality by whether it gives a coherent action,
capability, or state a meaningful name and aligns the caller's abstraction level; do not flag a
helper solely because it has a single caller.
4. Validate each acceptance criterion explicitly as one of:
- `PASS` - implemented and verified
- `FAIL` - not implemented or incorrect
- `PENDING` - partial/unclear or missing evidence
4. If the issue spec contains checklist items, mark only verified `PASS` items as done.
5. Review the completion-review evidence. Require an issue-local
5. If the issue spec contains checklist items, mark only verified `PASS` items as done.
6. Review the completion-review evidence. Require an issue-local
`implementation-retrospective.md` when implementation revealed reusable
lessons, material design changes, or meaningful deviations from the original
plan. Otherwise require a concise issue progress-log entry explaining why no
retrospective was needed.
6. Confirm that mandatory manual scenarios were executed against the finished
7. Confirm that mandatory manual scenarios were executed against the finished
artifact and recorded in `manual-verification-evidence.md` with actual
commands or interactions, observed output, relevant logs, and conclusions.
Do not accept automated test or disposable-script output as manual evidence.
7. Report findings with concrete remediation guidance for all `FAIL` or `PENDING` items.
8. Return an overall status:
8. Report findings with concrete remediation guidance for all `FAIL` or `PENDING` items.
9. Return an overall status:
- `REVIEW PASSED` when all required criteria pass and no blocking issues remain.
- `REVIEW FAILED` when any required criterion fails or blocking issues remain.

Expand Down
34 changes: 27 additions & 7 deletions .github/skills/dev/planning/create-issue/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -144,16 +144,36 @@ For testing or coverage-focused issue specs, also require:

- an issue-local, human-readable coverage-evidence document when coverage is measured;
- the exact reproducible coverage command and a statement of what paths and code types it includes;
- aggregate baseline/current values **and** per-file coverage plus prioritized uncovered functions,
regions, or behavior gaps; and
- separate aggregate/global and unit-only baseline/current tables, plus per-file coverage and
prioritized uncovered functions, regions, or behavior gaps. Aggregate/global coverage tracks all
selected test levels; unit-only coverage tracks the primary package-local objective. Do not infer
sufficient unit coverage from aggregate, integration, example, or end-to-end results. Record
integration-only results separately when they inform an ownership decision; and
- a policy to retain concise Markdown evidence rather than raw generated JSON, LCOV, or HTML
artifacts unless the artifact itself has a documented human-review purpose.

When the plan adds or changes tests, include a progressive test-development loop: make the smallest
behavior-focused increment, review its design and focused validation before the next test-producing
task, and stop for maintainer review after the final increment before final verification, commit, or
pull request. Direct test authors to the `write-unit-test` skill and the test refactoring-pattern
catalog when applicable.
For package-testing work, require a feasible focused unit test to be assessed before accepting
higher-level coverage as sufficient. Integration, example, root, or end-to-end coverage may retain
a distinct contract, but must not be used to decline a package-owned unit test that is deterministic
and readable at the unit boundary. A documented no-unit-test decision must state why the behavior
cannot be protected appropriately by a unit test or why the higher-level boundary is demonstrably
clearer and more maintainable.

When the plan adds or changes tests, include a progressive test-development loop: use the
`write-unit-test` skill; make the smallest behavior-focused increment; and, after it passes focused
validation, perform and record an explicit design review before maintainer review and commit. The
review must confirm the test exposes the one causal initial-state difference, its fixture owns only
incidental mechanics, and the production Act plus independently specified expected result remain
visible. Make the review enforceable with the mandatory prose-first Arrange-Act-Assert comparison:
write temporary prose for each section, refactor until the code expresses it, remove redundant prose,
and record the result in task evidence or a file-local plan. Complete this review for every
test-producing subtask before starting the next one. Stop for maintainer review after the final
increment before final verification, commit, or pull request. Direct test authors to the test
refactoring-pattern catalog when applicable. Require the test-design review to judge helper
boundaries by meaningful named actions and abstraction-level alignment, not caller count; a
single-use helper is valid when it hides only incidental mechanics. Use the independent Task
Reviewer for the final pre-PR review of the completed issue, not as a mandatory reviewer for every
subtask.

During implementation, create an ADR when an important architectural decision
emerges, even if the issue draft did not anticipate it. Link the ADR from the
Expand Down
23 changes: 23 additions & 0 deletions .github/skills/dev/task-reviews/review-task/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,29 @@ an issue/task is complete and ready to be pushed.
- [ ] Docs updates are present when behavior changed.
- [ ] New terms are added to `project-words.txt` when needed.

### Test Design

When the reviewed changes add or modify tests, inspect each changed test against
`.github/skills/dev/testing/write-unit-test/SKILL.md` and report a finding for every unchecked
item below:

- [ ] The test's name states one observable behavior and relevant condition.
- [ ] Arrange makes the causal initial-state difference visible.
- [ ] Any builder or scenario fixture is named for that state and owns only incidental mechanics;
it is not a parameter bag mirroring the production call.
- [ ] Every helper names a coherent action, capability, or state and keeps the caller at one
abstraction level. Do not treat a single-use helper as a defect solely because it has one
caller; flag it only when it is vague, hides behavior, or mixes responsibilities.
- [ ] The production Act remains visible in the test body.
- [ ] Expected results are independently specified and assertions remain visible.
- [ ] The test does not duplicate a better-owned protocol, domain, integration, or end-to-end
contract.
- [ ] Execution is deterministic: no uncontrolled I/O, wall-clock dependency, sleep, polling, or
shared mutable state is introduced.
- [ ] The test evidence records a prose-first Arrange-Act-Assert comparison, or the reviewer
records why it was not applicable. The final code expresses the temporary prose; redundant
comments were removed and retained comments provide irreducible context.

### Spec Hygiene

- [ ] Only verified checklist items are marked done.
Expand Down
110 changes: 110 additions & 0 deletions .github/skills/dev/testing/write-unit-test/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,19 @@ Acceptable reasons to defer or avoid direct unit tests include:
If a feature is hard to test, treat that as design feedback first and improve testability when
practical.

### Coverage Attribution Is Unit-First

For package-owned behavior, treat unit-only coverage as the primary measurement and aggregate/global
coverage as a separate broad-progress measurement. An aggregate report can include unit,
integration, example, or end-to-end binaries; it cannot prove that a source seam has adequate unit
protection. Record unit-only and integration-only measurements separately when coverage informs a
test-boundary decision.

Do not reject a feasible focused unit test because an integration, example, or end-to-end test
already executes the behavior. Decline a unit test only when it cannot protect the behavior at an
appropriate boundary, or when a higher-level contract is demonstrably clearer and more maintainable;
record that rationale in the issue-local evidence.

### Lifecycle Fixture Design Review

When a test fixture manages a child process, asynchronous I/O, network
Expand Down Expand Up @@ -125,6 +138,102 @@ components, or derive an expected outcome using production code under test. For
constraints and example, see
[Scenario fixtures for causal initial state](../../../../../docs/testing/refactoring-patterns/scenario-fixtures-for-causal-initial-state.md).

### Reveal Behavioral Data; Hide Collaborator Mechanics

Trace every value that crosses from Arrange into the Act or Assert. Keep a value visible in the test
body when it selects the behavior under test, establishes a causal initial state, or independently
specifies an expected result. Its use in the Act or Assert must make that relationship readable.
Hide only ordinary valid collaborator-construction mechanics that do not vary the selected behavior,
such as locks, reference-counted handles, default dependency construction, or required repository
setup.

For example, a banning-handler gauge test keeps an `unrelated_client_ip` visible when it establishes
the pre-existing tracked-IP state, keeps the event's `cookie_error_client_ip` visible where it enters
the event context, and keeps `expected_distinct_client_ip_total` visible before the Act and in the
Assert. A state-named test context may hide its `Arc<RwLock<BanService>>` and `Repository` setup.
Do not hide the relevant IPs or expected total inside that context.

During review, ask: **“Can the reader follow every value that makes the Act behave differently or
sets the expected result from its Arrange origin to its Act/Assert use?”** If not, expose that value
or rename/refocus the scenario. Also ask: **“Does this value merely make an ordinary collaborator
valid?”** If yes, it belongs in focused setup rather than the test narrative.

### Name Coherent Actions at One Abstraction Level

Use a helper when it gives a coherent sequence of setup or transport actions a meaningful name and
keeps the caller at one readable abstraction level. A helper does **not** require multiple callers:
`start_ephemeral_udp_tracker()` can be justified by naming one complete ordinary setup action even
when one contract test currently uses it.

Judge a helper by semantic value, not reuse count. Keep it when its name expresses a capability or
state relevant to the test and it hides only incidental mechanics. Reject it when it merely moves
code away behind a vague name such as `setup()`, becomes a parameter bag, hides the causal state,
production Act, or expected result, or mixes unrelated responsibilities. See
[Named helpers for abstraction-level alignment](../../../../../docs/testing/refactoring-patterns/named-helpers-for-abstraction-level-alignment.md)
for selection criteria and examples.

### Anti-Pattern: Duplicated Fixture-Derived Expectations

Do not extract a second helper that manually reconstructs a representation already derived from a
fixture when that representation is not independently under test. For example, a test that passes a
`ConnectionContext` to production code should not separately hard-code every metric label expected
from that context merely to add one causal label such as `request_kind=connect`. The fixture and
expectation become coupled by hidden duplication: an unrelated fixture change makes the test fail
with stale expected details.

Instead, derive fixture-owned details from the exact fixture value used by the Act, and specify only
the test's causal input or independently asserted result in the test body. In the metric example,
create `LabelSet::from(connection_context.clone())` and visibly add `request_kind=connect`. Add a
separate focused test when conversion of the fixture into its derived representation is itself the
behavior under test.

During prose-first review, ask: **“If this fixture changes, should this test fail?”** If no, derive
the incidental expectation from the fixture. If yes, keep the relevant fixture value and its
assertion visibly connected in the test prose; use a scenario or builder if several coordinated
values establish that causal state.

### Review Test-Code Smells Before Finishing

Before requesting maintainer review for a test-producing increment, inspect the final test against
these smells. A smell is a prompt to improve the design, not an automatic rule: keep the clearest
test when an alternative would weaken its behavioral contract or diagnostic value.

| Smell | Review question | Preferred response |
| ------------------------------- | --------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Complex Arrange | Can a reader name the causal initial state without reconstructing setup plumbing? | Use inline values, a readable builder, or a narrowly named scenario fixture. Keep causal input visible and move only coordinated incidental mechanics. |
| Hidden behavioral data coupling | Can the reader trace every causal input and expected value from Arrange into its Act or Assert use? | Keep behavior-selecting inputs, causal pre-existing state, and independent expected values visible; hide only ordinary collaborator construction. |
| Multiple assertions | Do the assertions specify one complete observable result or unrelated behaviors? | Use one higher-level semantic assertion when it preserves the full result and diagnostic clarity; otherwise split the test so each has one reason to fail. |
| Hidden fixture coupling | Would an unrelated fixture change fail this test? | Derive incidental expectations from the exact fixture used by the Act; keep independently specified causal values visible. |
| Hidden production Act | Can the reader identify the production behavior under test directly? | Keep the production invocation visible; do not move it into setup or assertion helpers. |
| Production-derived expectation | Is the expected result calculated by code that the test is meant to verify? | Construct the expected result independently; move only mechanical comparisons into a semantic assertion helper. |

Record material refactoring decisions from this review in the file-local plan or task evidence.

### Verify Intent with Prose-First AAA

Before considering any new or materially refactored test ready for maintainer review, make its
intent explicit and verify that the final code communicates it. This is mandatory for every
test-producing increment:

1. Write temporary normal-prose **Arrange**, **Act**, and **Assert** paragraphs above the test.
State the causal initial state, the production action, and independently specified observable
result; do not describe implementation mechanics without explaining their behavioral purpose.
2. Repeat each paragraph above the corresponding `// Arrange`, `// Act`, or `// Assert` code
section.
3. Compare the code with each paragraph. Refactor names, setup, builders, scenario fixtures, the
visible Act, or assertions until the code itself expresses the paragraph.
4. Remove prose that is redundant once the code communicates the intent. Retain only essential
context that cannot be expressed clearly in code without disproportionate complexity or a
misleading abstraction.
5. Record the completed prose-first comparison in the task evidence or file-local test plan before
maintainer review and commit.

The temporary prose is the test's specification, not permanent commentary. A parameter bag, an
opaque fixture, a hidden Act, or an assertion derived through production code is evidence that the
code has not yet expressed its specification. See
[Prose-first Arrange-Act-Assert verification](../../../../../docs/testing/refactoring-patterns/prose-first-arrange-act-assert-verification.md)
for a repository example.

## Phase 1: Basic Unit Test

### Naming Convention
Expand Down Expand Up @@ -305,6 +414,7 @@ establishes a reusable pattern for future tests.

- [ ] Test name uses `it_should_` prefix
- [ ] Test follows AAA pattern with comments (`// Arrange`, `// Act`, `// Assert`)
- [ ] Temporary prose-first AAA specification was compared with the code; redundant prose was removed
- [ ] No `std::time::SystemTime::now()` in production code — use the `CurrentClock` type alias instead
- [ ] No shared mutable state between tests
- [ ] Behaviour coverage is maximized with maintainable tests
Expand Down
6 changes: 6 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,12 @@
"[rust]": {
"editor.formatOnSave": true
},
"[markdown]": {
// Editor Markdown formatters conflict with the markdownlint rules enforced
// by `linter all` (for example table padding and hard-wrap style), so
// Markdown is formatted only by the lint gate, not on save.
"editor.formatOnSave": false
Comment thread
josecelano marked this conversation as resolved.
},
"[ignore]": {
"rust-analyzer.cargo.extraEnv": {
"RUSTFLAGS": "-Z profile -C codegen-units=1 -C inline-threshold=0 -C link-dead-code -C overflow-checks=off -C panic=abort -Z panic_abort_tests",
Expand Down
Loading
Loading