Skip to content

ci: unify validation commands and test reports - #568

Draft
yeongseon wants to merge 14 commits into
mainfrom
ci/standardize-verification-evidence
Draft

yeongseon wants to merge 14 commits into
mainfrom
ci/standardize-verification-evidence

Conversation

@yeongseon

@yeongseon yeongseon commented Oct 22, 2026 •

Copy link
Copy Markdown
Owner

Summary

Standardize local and CI validation and generate redacted test reports, including worker-signature and schema checks.

Changes

  • Add canonical Makefile commands and keep check-all as an alias for verify.
  • Reuse Python verification helpers for offline tests, pinned schema integrity, worker registration, Functions host/Azurite integration, and wheel checks.
  • Fail when schema pins change unexpectedly or when required tests cannot run.
  • Generate separate lane summaries and use the same runner in CI without changing release or security gates.
  • Update contributor and developer documentation.

Validation

  • Local: make doctor, make check, make test, workflow lint, build, docs, integration, make verify, report and clean passed on Python 3.11.15.
  • Tests: 723 passed, 97.04% coverage. Integration covered 77 worker checks and one real host smoke; make verify reported 804 passes.
  • Missing Azure E2E configuration correctly returned INCOMPLETE.
  • Not run: remote matrix variants and real Azure certification.

Related Issues

Closes #566

@yeongseon

Copy link
Copy Markdown
Owner Author

Applied B1–B5 in 2865a7a, 8b0cdfb and 59cc649. Regression-first credential/symlink/binary/timeout tests; make check now records check/summary.json and redacted logs even on prerequisite failure; maintenance avoids hatch run; synthetic summaries isolated. Full suite: 97.04% coverage, Ruff and strict mypy/workflow lints pass. Clean venv mirrors: Python 3.12/3.13/3.14 full tests + worker lanes; Python 3.11 quality/schema-hash/build/docs; minimum dependencies and SDK spike pass; real func+Azurite host on 3.11/3.12 pass. Makefile overlap with security PR is confined to separate target blocks. LSP tool cannot inspect this sibling checkout (request cwd restriction); strict mypy passed instead.

@yeongseon
yeongseon marked this pull request as draft October 24, 2026 02:13
@yeongseon yeongseon changed the title ci: standardize canonical verification commands and evidence ci: unify validation commands and test reports Oct 26, 2026
@yeongseon

Copy link
Copy Markdown
Owner Author

Do not merge this draft as the implementation of #566. Current main already independently landed #586 (SDK 2.x fail-on-skip guard), #587 (expanded fail-closed Bandit), and #588 (idempotent bootstrap/typecheck/doctor fixes). The remaining #566 work should be small PRs from current main, without the custom lane summary/status/report framework excluded by the issue. This draft is not a substitute for the remaining interpreter-correct Makefile commands, JUnit/coverage always-upload, and fail-closed host/Azure lanes. Leaving closure to the maintainer.

@yeongseon

Copy link
Copy Markdown
Owner Author

This draft is superseded by focused work on current main: #586 added fail-closed spike guards, #587 expanded and validated Bandit scope, #588 made bootstrap/check/doctor thin and fail-closed, and #601 adds always-uploaded JUnit/coverage evidence. Remaining #566 acceptance includes canonical Makefile execution in each CI matrix cell, local test-results output, worker/host/Azure prerequisite guards and retained host logs. The custom reporting/orchestration framework in this draft is out of scope of #566. Leaving this superseded draft open for the maintainer; it will not be merged.

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

Credential-redaction gaps can expose secrets in uploaded reports, and local diagnostics can inspect the wrong Python environment.

3 open issues
What changed in this PR

This PR standardizes local and CI validation for the library, introducing shared verification helpers and saved test evidence.

Changes:

  • Defines canonical Makefile commands and makes check-all an alias of verify.
  • Adds fail-closed verification for tests, schema integrity, worker compatibility, host integration, and installed wheels.
  • Adds CI artifact uploads, regression tests, and contributor documentation.
File Description
tools/​verification.py Coordinates verification lanes and result summaries.
tools/​verification_wheel.py Checks freshly built wheel imports and schemas.
tools/​verification_process.py Manages subprocess cleanup and redacted logs.
tools/​verification_host.py Runs managed Functions host and Azurite smoke checks.
tools/​verification_evidence.py Collects, redacts, and publishes verification evidence.
tools/​verification_environment.py Checks prerequisites and cleans generated artifacts.
tools/​verification_contracts.py Checks schema hashes without rewriting pins.
tools/​__init__.py Makes verification helpers importable as a package.
tests/​test_verification_review.py Tests redaction, readiness, and maintenance behavior.
tests/​test_verification_evidence.py Tests evidence classification and runner behavior.
tests/​test_verification_commands.py Tests command contracts and failure evidence.
tests/​test_verification_ci.py Checks workflow and Makefile integration contracts.
tests/​conftest.py Isolates job summaries during verification tests.
pyproject.toml Includes helpers in quality checks and updates runners.
Makefile Defines canonical validation and maintenance commands.
docs/​testing.md Explains offline tests and integration lanes.
docs/​METADATA_SPEC.md Updates schema-check command documentation.
docs/​development.md Documents commands and evidence semantics.
docs/​contributing.md Updates the required local verification guidance.
docs/​agent-playbook.md Aligns agent guidance with canonical commands.
CONTRIBUTING.md Documents setup, validation, and saved evidence.
AGENTS.md Updates repository validation guidance.
.gitignore Excludes generated test evidence.
.github/​workflows/​worker-nightly.yml Uses the worker runner and uploads evidence.
.github/​workflows/​security.yml Installs dependencies on the selected interpreter.
.github/​workflows/​publish-pypi.yml Uses the shared test runner and uploads results.
.github/​workflows/​e2e-azure.yml Uses the Azure runner and uploads its reports.
.github/​workflows/​ci-test.yml Integrates shared verification and artifact uploads.

Review effort: Balanced

_SECRET_ENV_NAME = re.compile(
r"(?i)secret|token|password|connection|string|accountkey|functions.key|api.?key|sas"
)
_TEXT_SUFFIXES = frozenset({".log", ".txt", ".xml", ".json", ".md"})
Comment on lines +92 to +93
if isinstance(value, dict):
return {redact(str(key)): redact_json(item) for key, item in value.items()}
Comment thread Makefile
else
RUN := $(PYTHON)
endif
MAINTENANCE_PYTHON ?= $(shell for p in "$$VIRTUAL_ENV/bin/python" "$(VENV_DIR)/bin/python" python3.11 python3 python; do if "$$p" -c 'import sys; sys.exit(not (3,11) <= sys.version_info[:2] < (3,15))' 2>/dev/null; then command -v "$$p"; break; fi; done)
@yeongseon

Copy link
Copy Markdown
Owner Author

The remaining #566 scope is now completed by merged #607, alongside prior #586/#587/#588/#601/#603. #566 is closed. This superseded draft remains open for the maintainer as instructed and must not merge.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

ci: make validation lanes fail closed and keep a thin command contract

2 participants