fix: relock apps in place so imported script changes reach them (#11789)

* fix: relock apps in place so imported script changes reach them

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix: requeue an app relock whose version was rewritten meanwhile

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix: relock every component of the version a superseded app relock requeues

Also share raw-app runnable dependency extraction between the worker and the dependency-map rebuild, and take no-key-update row locks, which still order against a deploy's UPDATE without blocking app_script inserts.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix: relock every component when an app relock runs on a newer version

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix: resolve a requeued app relock's components when it runs

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix: regenerate every lock when an app relock relocks every component

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Ruben Fiszel
2026-10-15 16:27:41 +02:00
committed by GitHub
co-authored by Claude Opus 5.5
parent f662828a30
commit aca7fed33d
14 changed files with 1079 additions and 275 deletions
+3 -13
View File
@@ -4661,7 +4661,9 @@ async fn clone_runnable(j: &mut PulledJob, db: &DB) -> error::Result<()> {
// A script gets its new version from the worker, once the generated lock is known
// to differ from the live version's: minting one here would deploy, and walk the
// importers of, a version whose lock turns out byte-identical to its parent's.
JobKind::Dependencies => *base_hash,
// An app is relocked in place: a raw app's bundle is stored under its version id,
// so a copy minted here could never be published.
JobKind::Dependencies | JobKind::AppDependencies => *base_hash,
JobKind::FlowDependencies => {
sqlx::query_scalar!(
"INSERT INTO flow_version
@@ -4679,18 +4681,6 @@ async fn clone_runnable(j: &mut PulledJob, db: &DB) -> error::Result<()> {
.fetch_one(db)
.await?
}
JobKind::AppDependencies => {
sqlx::query_scalar!(
"INSERT INTO app_version
(app_id, value, created_by, raw_app)
SELECT app_id, value, created_by, raw_app
FROM app_version WHERE id = $1
RETURNING id",
*base_hash
)
.fetch_one(db)
.await?
}
_ => *base_hash,
};