Before running validation for a production behavior change, verify that the
diff contains:
-
Inspect the changed-file scope and preserve unrelated user changes.
-
Apply the Coverage Gate before treating validation as complete.
-
For every new case ID, refresh origin/main, check scripts/case_test.sh,
tests/test_client.c, tests/test_server.c, and their Git history. Require
no previous allocation and confirm the registry range matches the owning
protocol layer or module.
-
Query all open pull requests targeting main and inspect the exact
published head SHA for each pull request other than the current one. Require
the candidate numeric token to be absent from the three selector files.
Follow the complete fail-closed procedure in the validation specification;
an incomplete query is not proof that an ID is free.
-
During development, use a focused registered CUnit test for fast feedback:
XQC_TEST_NAME=<test-name> ./scripts/validate.sh test
-
For feature-gated paths, select the feature by manifest key:
./scripts/validate.sh test --feature <feature>
The script reads feature flags and feature unit tests from
harness/spec/harness-manifest.yml. Do not add feature-specific script
branches when manifest data is sufficient.
-
Before creating or updating a code pull request, clear the focused-test
selector and run the complete unit suite:
unset XQC_TEST_NAME
./scripts/validate.sh test
-
Require the emitted CUnit summary to show Ran == Total and Failed == 0.
Record the result as <Ran>/<Total> CUnit tests; CTest 1/1 alone is not
complete-unit-suite evidence.
-
Run targeted client-to-server commands only when the relevant blocks can be
executed directly and recorded without the legacy full case_test.sh suite.
Use XQC_BUILD_DIR=build ./scripts/validate.sh full only when explicitly
requested or when the change owner accepts the full-suite cost.
-
Require the complete unit suite to pass. For endpoint-visible behavior,
report targeted case results when available; otherwise report the case-test
gap instead of claiming local regression is complete.
-
Repeat the open-PR reservation scan for each new case ID after the tests
pass and immediately before PR submission or update. Record the snapshot
time, candidate IDs, number of heads checked, current PR exclusion, and
result.
-
Verify that include/xquic/xqc_configure.h and other generated artifacts
did not enter the source diff.
-
Report the changed scope, CUnit <Ran>/<Total> and failed counts, paired
unit-test names, endpoint coverage or gap status, paired case IDs and
namespaces when new cases are added, reservation snapshot, exact commands,
and results in ignored local evidence.
-
Summarize those current-head results in the repository
pull-request template. List
only each executed case ID and its concise behavior, then mark local
regression Complete or name concise failed/gap cases. Do not copy commands, test
function names, logs, namespace ranges, or reservation snapshots into the
PR body. Missing, stale, focused-only, or failed local evidence still does
not pass the gate.
-
After the PR or updated head is published, scan again with the current PR
included. On a duplicate, the lowest PR number keeps the ID; every later PR
must return to draft, mark local regression incomplete, reallocate, and
rerun this workflow.
Documentation-only changes may use link, format, and command-syntax checks
instead of inventing runtime tests. Validation-tooling changes require the
closest deterministic self-checks. State why runtime coverage is not
applicable.