Skip to content

Platform pull-request gates

Pull requests to dev require the existing Pre-commit hooks, Python tests + coverage, MCP TypeScript tests + coverage, Dependency vulnerability scan, and Clean-install lab boot and teardown (DEP-008) contexts. Other established required quality and governance checks remain in the branch rule. The exact context names are recorded in .github/branch-protection-baseline.json; the live GitHub branch settings are the enforcement authority.

The dependency job fails on known Python findings in the generated CLI/runtime, API/web, and CI/build exports and on high or critical production dependency findings in the web and all MCP package locks. It also fails when a lock, install, or scanner fails. Trivy filesystem, image, and IaC scans and the OSV scan remain advisory because they cover mixed platform and intentionally vulnerable target assets. ADR-026 records the boundary and the format for any temporary platform exception. There are currently no such exceptions.

The clean-install job builds a wheel, installs it in an empty virtual environment, materializes a fresh project, and starts only the product-neutral materialization-envelope.sdl.yaml scenario from APTL's owned lab fixture pack. It checks native effects in the project's running container, stops the lab with volumes, and proves that the effective workspace project has no remaining containers, networks, or volumes. Anonymous volumes and ephemeral helper containers carry no project identity, so the job also records what the daemon holds before the lab starts and fails on any of either that teardown leaves behind. That comparison only observes; it deletes nothing.

The scenario carries one causal realization chain, so none of those checks can pass on a declaration alone: inline content moves the SSH daemon off its package default port, the declared service unit starts it, the declared listener binds the moved port, and that port is published on an exact loopback host binding. scripts/ci/assert_boot_realization.py reads the placed bytes inside the container, queries the service manager for the unit's enabled, active and result state, observes the live listener from outside the container's trust boundary, requires the exact published-port tuple and no wider one, opens a connection to it, and parses the persisted workflow with the RAES execution-state contract. docs/testing/boot-realization-coverage.md maps every concern APTL's realization envelope advertises to the tests that hold it, and names the concerns this small boot deliberately does not claim.

These checks support the generic installed-wheel materialization and lab lifecycle profile on a GitHub-hosted Ubuntu runner with local Docker. They do not qualify the full TechVault or LilRAE journey. Those qualifications are tracked in APTL #870 and #685, and OpenRAE/lilrae #4, #9, and #10.