fix(project): Include @ui5/project version in build signature - #1550
Merged
Conversation
Add the @ui5/project package version to the project build signature so a
changed project package invalidates existing build caches.
getProjectSignature was synchronous and concatenated getPackageVersion()
directly into the hash key. getPackageVersion is async, so the Promise
coerced to the constant string "[object Promise]" and the version never
entered the hash. The same line also stringified taskRepository.getVersions()
without awaiting it, so JSON.stringify saw a Promise and produced "{}",
meaning the @ui5/builder and @ui5/fs versions had likewise never contributed
to the signature.
Make getProjectSignature async and await both lookups. Its only production
caller, ProjectBuildContext.create(), is already async and now awaits it.
Add a dedicated test for getBuildSignature.js covering the exact hash key
and asserting that changing either the @ui5/project version or the
taskRepository versions changes the signature, which the previous tests did
not exercise.
Correct statements in the incremental-build skill that had drifted from the current implementation: - Build signature: task-provided signatures are no longer "planned but not yet integrated". getProjectSignature() now folds in the aggregated task determineBuildSignature() contributions from TaskDefinitions.getBuildSignatures(), plus the effective @ui5/builder and @ui5/fs versions. - File watching: no longer exclusively @parcel/watcher. All three watchers subscribe through the new fileWatcher facade, which selects a native or polling backend (UI5_WATCH_MODE / container auto-detection). Add fileWatcher and pollingWatcher to the Component Map. - CacheManager: note there is no automatic eviction; cleanCache() -> dropAllRecords() (backing ui5 cache clean) is the only cleanup, with a deferred VACUUM.
Trim three passages in the incremental-build architecture doc that narrated past fixes or contrasted against prior behavior instead of stating the current architecture: the WatchHandler "instead of escalating to a fatal error" clause, the BuildServer.create() "closes a race ... would otherwise be missed" rationale (also removing an em-dash), and the SETTLING "they no longer park the banner" aside.
matz3
approved these changes
Aug 25, 2026
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.
Add the
@ui5/projectpackage version to the project build signature so achanged project package invalidates existing build caches.
getProjectSignaturewas synchronous and concatenatedgetPackageVersion()directly into the hash key. However,
getPackageVersionis async, so the Promisecoerced to the constant string
"[object Promise]"and the version neverentered the hash. The same line also stringified
taskRepository.getVersions()without awaiting it, so
JSON.stringifysaw a Promise and produced"{}",meaning the
@ui5/builderand@ui5/fsversions had likewise never contributedto the signature.
Make
getProjectSignatureasync and await both lookups. Its only productioncaller,
ProjectBuildContext.create(), is already async and now awaits it.Add a dedicated test for
getBuildSignature.jscovering the exact hash keyand asserting that changing either the
@ui5/projectversion or thetaskRepository versions changes the signature, which the previous tests did
not exercise.
Also update internal agent skills: