Conversation
OvesN
force-pushed
the
dev/veronikao/eval-observer-native-comparison
branch
from
September 1, 2026 20:03
8216c14 to
0281b11
Compare
OvesN
force-pushed
the
dev/veronikao/eval-observer-timestamp-invalidation
branch
from
September 2, 2026 01:40
72b1ac1 to
1ffaeaf
Compare
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
OvesN
force-pushed
the
dev/veronikao/eval-observer-timestamp-invalidation
branch
from
September 2, 2026 03:06
1ffaeaf to
5827473
Compare
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Batch short benchmark operations, rely on natural glob timestamp changes, and report three-launch OrchardCore and Roslyn results against fresh reevaluation. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> # Conflicts: # src/Build.UnitTests/Definition/ProjectEvaluationContext_Tests.cs
Remove unreachable admission scaffolding, preserve filesystem provider provenance, tighten fail-closed validation, and align the real-world benchmark documentation. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.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.
Purpose
Stacked on #9 (
dev/veronikao/eval-observer-native-comparison).This PR adds an analysis-only filesystem timestamp invalidation prototype over the evaluation observations captured by #9. It asks whether validating the observed filesystem state is cheap enough to justify further persistent-cache work.
It does not add cache lookup, cache admission, serialization, persistence, evaluated-project materialization, concurrency, eviction, or result reuse.
Current mechanism
After a successful evaluation, the prototype builds a snapshot from observed:
Each entry stores its canonical path, consumed timestamp, required file/directory existence predicates, and observation source. The snapshot also stores every path component checked for reparse points.
Capture fails closed for incomplete or conflicting observations, failed filesystem operations, unsupported providers or metadata/enumerations, missing traversal evidence, unstable project sources, non-canonical paths, and reparse-point traversal.
A reuse check first revalidates every stored path component for reparse points, then compares each stored timestamp and typed existence predicate. A mismatch returns
Changed; an I/O or malformed-snapshot failure returnsFailed. Only a complete match returnsValid.This remains timestamp-based validation: timestamp-preserving content changes and the validation-to-materialization race are not solved. Environment variables, global properties, toolset selection, SDK resolution, Registry/process state, and other non-filesystem inputs require separate cache-key fields or versioned dependency contracts. SDK-resolver filesystem dependencies are intentionally deferred to the resolver contract.
Decision gate
The continuation target is complete unchanged validation below 10% of fresh evaluation time on real projects. Current-head performance must be measured with normal, non-reparse checkout paths; this description intentionally makes no stale performance claim. Missing the target means optimizing metadata probes before considering persistence.
Run the benchmark
Use disposable, restored checkouts in ordinary directories (not symlinks or junctions):
e3f8acb327a95f1dec6e75cefccaef2ad5eefb450f82fdec3c901702ec7fc3f0e9a813330a903ec9From this PR checkout:
Open:
C:\benchmark-results\evaluation-timestamp\normal\net11.0\results\MSBuild.Benchmarks.RealWorldEvaluationFilesystemTimestampBenchmark-report-github.mdThe decision row is
ValidValidation; compare its mean withFreshEvaluationfor each project. Full stale-mutation commands and interpretation are indocumentation/specs/proposed/evaluation-filesystem-timestamp-invalidation-prototype-report.md.