Repository navigation
build: a change to tools or tests runs the test projects it reaches - #274
Merged
Merged
Conversation
When every changed path is prose, .gitignore, or inside a solution project under tools/ or test/, ci-lanes answers suite=reach and the projects the change reaches: a project's own directory, what its items and imports name outside it, and what its references reach, plus test/Prose.slnf for prose. The legs write them as test/Reach.slnf and build and test that. Anything else, or anything unreadable, runs the whole solution. A test that reads another project by path declares it with <ReadsByPath>: the conventions the root, the oracle tests test/. TestReachTests holds the declarations against MSBuild's evaluation and the test sources' literals. .gitignore gets the class "ignore list", Linux alone. The gate refuses a reached suite with no projects, the pack or macOS. Decision 127 amends 113. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #268
Problem
Under decision 113 every lane built and tested the whole solution unless the change was prose throughout. #266, one
tool, its tests, docs and a line of
.gitignore, ran 12m55s on Linux and 13m32s on Windows in run 41215127177, andpacked and smoke-tested because
.gitignorewas unlisted. The tests that could notice it were the BashGuard tests andthe conventions.
Change
tools/CiLanes: a third suite,reach. When every changed path is prose,.gitignore, or inside a solution projectunder
tools/ortest/,selectanswerssuite=reachandprojects, the projects the change reaches: a projectreaches its own directory, what its items and imports name outside it (a linked source, a
ProjectReference), and,through each reference, what that project reaches; prose adds
test/Prose.slnf. Anything else, or any file itcannot read (the solution, a project file, the prose filter), runs the whole solution.
selectalways writesprojects([]outsidereach). Newci-lanes suite <path>...answers each path alone..gitignoregets the classignore list: Linux alone, narrowed to the conventions. No test reads it (theconventions list the index), and
dotnet packdoes not..gitattributesstays unlisted.reachonly beside no pack and no macOS leg, with one or more distincttools//test/projectfiles; it refuses
projectsbesideprose/fulland a missing or malformedprojects.dotnet.yml: the changes job exportsprojects; the test legs write it astest/Reach.slnf(gitignored) andrestore, build and test that when the suite is
reach.<ReadsByPath Include="..." />: the conventions declare the root, theoracle tests
test/(they find each claim's test among every test project's sources). Measured: no other testproject reads another by path.
TestReachTestsevaluates everytools/andtest/project with MSBuild and fails a build input thatwould not run its test project; scans test sources for literals naming another project, or a scan of
test//tools/,that the reader does not reach; and fails a narrowed suite without the conventions.
ReleaseWiringTestsholds thenew workflow step.
design/adr/0127, amending 0113;AGENTS.mdlistsci-lanes suite.This PR changes
tools/CiLanesand the workflow, so its own run is the whole solution on Linux and Windows with thepack, as before.
Tests
SelectionTests: rows for a tool-only change, a test-project-only change, a linked source, transitive reach through areferenced test project, the build: run parallel work in worktrunk worktrees beside the repository #266 shape (tool, tests, docs,
.gitignore),.gitignorealone,tools/Shared, a mixwith
src/, paths outside every solution project, an unreadable project file, andsuite. Each failed against113's selection first.
GateTests: a reached suite passes on Linux and on Linux and Windows; fails cancelled, skipped or failed legs, thepack, macOS, empty/out-of-place/duplicate projects, projects beside the other suites, and a malformed or missing
projects. The new rows failed against the old gate first.TestReachTestsandSelectionTestsfail), skipping referencerecursion, dropping the ignore-list class; removing the oracle tests' or the conventions'
ReadsByPath; a read oftools/PrHygieneadded to the BashGuard tests. Each failed the test that claims it, then passed when restored.test/Reach.slnfwritten as the leg writes it, from build: run parallel work in worktrunk worktrees beside the repository #266's paths, builds. The whole solution: 24128passed; the 12506 failures are all the SQL Server host (
SqlServer.cs:84,SqlServerFactHost.cs:29), whosecontainer does not start on this arm64 Mac without
TYPEKIT_MSSQL_IMAGE; CI's Linux leg runs them.🤖 Generated with Claude Code