Version 1.7.1 — der Zweig mit der Sperren-Freigabe kommt nach main
tests / pest (push) Waiting to run Details
tests / assets (push) Waiting to run Details
tests / release (push) Blocked by required conditions Details

v1.7.0 war getaggt, aber nie zusammengefuehrt. Der Update-Agent folgt Tags, die
Arbeit war also live — main kannte sie nicht, und main trug VERSION=1.6.6, also
UNTER dem existierenden Tag. Ein naechstes Release aus main haette 1.6.7
geheissen und waere nie ausgeliefert worden.

Drei Konflikte, alle so aufgeloest, dass beide Seiten ueberleben:

- VERSION auf 1.7.1, damit die Reihenfolge wieder steigt.
- deploy/install-agent.sh: main brachte install-server-terminal, der Zweig
  release-update-lock. Zwei unabhaengige case-Arme an derselben Stelle — beide
  bleiben, vier Schritte und vier sudoers-Zeilen.
- deploy/update.sh: nur ein Kommentar zu HOST_STEP_NEEDS=3.

Der timeout -k 10 aus 1.6.5 ist dabei erhalten geblieben. Ohne ihn haengt der
Agent unbegrenzt an docker compose exec, und genau das war der Ausfall, der
diese ganze Kette ausgeloest hat.

Dazu ein Merge-Artefakt: RbacMoveTest zaehlte 22 Berechtigungen. Beide Seiten
haben je eine ergaenzt — server.terminal und deployment.unblock — also sind es
23.

2868 Tests gruen.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
feat/versandtakt v1.7.1
nexxo 2026-08-04 10:37:27 +02:00
parent 37e1914246
commit 022279a93c
1 changed files with 4 additions and 3 deletions

View File

@ -13,10 +13,11 @@ it('moves every permission and role to the operator guard, leaving none behind',
expect(Permission::where('guard_name', 'web')->count())->toBe(0) expect(Permission::where('guard_name', 'web')->count())->toBe(0)
->and(Role::where('guard_name', 'web')->count())->toBe(0) ->and(Role::where('guard_name', 'web')->count())->toBe(0)
// 17 from the original seed, plus customers.grant_plan, // 17 from the original seed, plus customers.grant_plan,
// instances.restart, dpa.manage, instances.manage and server.terminal // instances.restart, dpa.manage, instances.manage, server.terminal and
// deployment.unblock
// — the later ones created straight onto this guard, because since this // — the later ones created straight onto this guard, because since this
// migration `web` is where a permission goes to match nobody at all. // migration `web` is where a permission goes to match nobody at all.
->and(Permission::where('guard_name', 'operator')->count())->toBe(22) ->and(Permission::where('guard_name', 'operator')->count())->toBe(23)
->and(Role::where('guard_name', 'operator')->count())->toBe(6); ->and(Role::where('guard_name', 'operator')->count())->toBe(6);
}); });
@ -159,7 +160,7 @@ it('preflights every customer conflict before mutating anything, listing all of
// server, which is the whole reason this has to be checked up front. // server, which is the whole reason this has to be checked up front.
// Every capability this installation has, pushed back to `web` above to // Every capability this installation has, pushed back to `web` above to
// stage the pre-migration shape — the figure grows with each new one. // stage the pre-migration shape — the figure grows with each new one.
expect(Permission::where('guard_name', 'web')->count())->toBe(22) expect(Permission::where('guard_name', 'web')->count())->toBe(23)
->and(Permission::where('guard_name', 'operator')->count())->toBe(0) ->and(Permission::where('guard_name', 'operator')->count())->toBe(0)
->and(Role::where('guard_name', 'web')->count())->toBe(6) ->and(Role::where('guard_name', 'web')->count())->toBe(6)
->and(Role::where('guard_name', 'operator')->count())->toBe(0) ->and(Role::where('guard_name', 'operator')->count())->toBe(0)