@@ -31,9 +31,8 @@ Choose the branch deliberately:
3131- ** Open PR but independent validation is requested:** create a branch from the
3232 PR head and clearly state that the test branch depends on the unmerged PR.
3333
34- Never force-delete a branch based only on its name. Verify the PR state and a
35- clean worktree first. A squash-merged branch may require ` git branch -D `
36- because Git cannot infer ancestry even though GitHub confirms the merge.
34+ Verify merge state and a clean worktree before deleting a branch. Squash-merged
35+ branches may require ` git branch -D ` because Git cannot infer ancestry.
3736
3837## 2. Reconstruct the Behavioral Contract
3938
@@ -54,9 +53,6 @@ For a regression, distinguish:
5453- Why existing tests did not catch the gap.
5554- Which observable separates the regression from a legitimate success case.
5655
57- Do not accept a PR description as the sole source of truth. Compare it with the
58- code, issue reproduction, logs/events, and live behavior when available.
59-
6056## 3. Audit Existing Coverage and Harness Primitives
6157
6258Search before adding helpers:
@@ -85,8 +81,8 @@ Classify current coverage:
8581| Integration/E2E | Real process/protocol/package/UI wiring |
8682| Release checklist | Which user-facing behaviors count as signed off |
8783
88- Reuse public ItE2E primitives. Add a shared helper only when multiple suites
89- need the same operation or the helper itself provides a more precise oracle.
84+ Add a shared helper only when multiple suites need it or it provides a more
85+ precise oracle.
9086
9187## 4. Build the Behavior Matrix
9288
@@ -104,8 +100,8 @@ Start with the regression, then add only risk-driven controls:
1041006 . ** Compatibility:** alternate shell, agent, policy, or language mode only when
105101 the changed code is shared with it.
106102
107- Avoid combinatorial matrices. Each case must correspond to a plausible failure
108- mode introduced or exposed by the target PR.
103+ Each case must correspond to a plausible failure mode introduced or exposed by
104+ the target PR.
109105
110106For every case, identify both the immediate trigger and the downstream effect.
111107For example, proving a failure event exists is insufficient when the user
@@ -139,19 +135,13 @@ Describe 'Feature: <behavior>' -Tag 'Feature' -Skip:(-not $script:Ready) {
139135
140136Implementation rules:
141137
142- - Start event listeners before triggering the behavior.
143- - Scope event predicates by stable IDs; do not accept unrelated startup events.
144- - Use ` Wait-WtEvent ` , ` Test-Until ` , or assertion helpers for positive outcomes.
145- - For negative outcomes, first prove the command/action completed, then observe
146- a short bounded window and assert the forbidden event/state is absent.
147- - Use unique command text when the product intentionally deduplicates repeated
148- requests.
149- - Use fresh applications or explicit state cleanup when one case can leave an
150- agent turn, setting, pane, or listener active.
151- - Put cleanup in ` finally ` /` AfterAll ` .
152- - Keep model-semantic tests separate from deterministic routing tests. If model
153- variance is accepted, skip only the semantic assertion after proving the
154- deterministic pipeline succeeded.
138+ - Start listeners before the action; scope predicates by stable IDs and poll for
139+ positive outcomes.
140+ - For a negative case, first prove the action completed, then use a bounded
141+ observation window.
142+ - Use unique inputs when the product deduplicates, isolate state between cases,
143+ and clean up in ` finally ` /` AfterAll ` .
144+ - Keep model-semantic assertions separate from deterministic pipeline checks.
155145
156146## 6. Wire the Release Checklist
157147
@@ -226,40 +216,19 @@ regressions or the PR changes common harness/product infrastructure.
226216
227217## 8. Prove the Correct Build Ran
228218
229- Build and deploy according to the changed area. For WTA + Terminal changes:
230-
231- 1 . Build WTA with the explicit target matching the package architecture:
232- ` --target x86_64-pc-windows-msvc ` for x64 or
233- ` --target aarch64-pc-windows-msvc ` for ARM64. Package deployment prefers the
234- explicit-target artifact.
235- 2 . Build the C++ package after WTA.
236- 3 . Deploy/redeploy the package and select it with ` ITE2E_PACKAGE ` or
237- ` -Package Dev ` .
238- 4 . Verify package version/path, runtime logs, or a changed observable.
239-
240- Do not infer deployment success from compilation alone. A stale packaged
241- ` wta.exe ` , generated shell-integration script, profile reference, or AppX
242- staging directory can make a new test exercise old code.
219+ Build and deploy the changed area. For WTA changes, build the explicit target
220+ matching the package architecture before the C++ package, deploy it, select it
221+ with ` ITE2E_PACKAGE ` or ` -Package Dev ` , and verify a runtime version, path, log,
222+ or changed observable. Compilation alone does not prove the deployed package
223+ contains the new ` wta.exe ` or generated shell integration.
243224
244225## 9. Deliver the Test PR
245226
246- Before committing:
247-
248- ``` powershell
249- git -c core.whitespace=cr-at-eol diff --check
250- git status --short --branch
251- ```
227+ Before committing, run ` git -c core.whitespace=cr-at-eol diff --check ` .
252228
253229The PR description must include:
254230
255- - Target PR and issue.
256- - Missing integration boundary now covered.
257- - Positive, negative, and compatibility cases added.
258- - New checklist IDs and proof they become ` [x] ` .
259- - Exact targeted and regression test totals.
260- - Every skip with its reason.
231+ - Target PR/issue and the integration boundary added.
232+ - Cases and checklist IDs.
233+ - Targeted/regression totals and skip reasons.
261234- Package/build tested.
262-
263- Do not claim complete regression coverage if environment-dependent suites were
264- not run. Distinguish deterministic passes from accepted model variance and
265- unavailable prerequisites.
0 commit comments