Replace the single stitch_ticket column in final_entities with a two-ticket
model (latest_ticket + active_ticket) in stitch_queue for optimistic
concurrency control. When picking up stitch work, active_ticket is set to
latest_ticket. Before writing results, the stitcher checks that latest_ticket
hasn't changed. This fully decouples stitching concurrency from final_entities.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@spotify.com>
Move the branch verification to a separate step right after checkout,
and gate all subsequent steps on its output. Removes the redundant
branch check from inside the changeset generation script.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@spotify.com>
All lockfiles in the repo use Yarn 4, so use `yarn --cwd <dir> dedupe`
uniformly instead of npx yarn-deduplicate for subdirectories.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@spotify.com>
Each step sets an output only if it actually modified files. The
dedupe step checks git diff after running to avoid staging unchanged
lockfiles. A final step commits and pushes only if either step
made changes.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@spotify.com>
Only dedupe each lockfile if it was actually changed by Dependabot.
Covers root (Yarn 4) and docs-ui/microsite (Yarn Classic) lockfiles.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@spotify.com>
* refactor(ui): rename CardOverlay to CardTrigger
Signed-off-by: Johan Persson <johanopersson@gmail.com>
* refactor(ui): replace Card overlay with visually-hidden trigger and focus ring
Signed-off-by: Johan Persson <johanopersson@gmail.com>
* feat(ui): implement hybrid click delegation for interactive cards
Signed-off-by: Johan Persson <johanopersson@gmail.com>
* docs(ui): add story for interactive scrollable card
Signed-off-by: Johan Persson <johanopersson@gmail.com>
* chore: add changeset for interactive card scroll fix
Signed-off-by: Johan Persson <johanopersson@gmail.com>
* fix(ui): fix bottom scroll shadow showing when CardBody has no overflow
The reversed scroll-driven animation used `both` fill mode, causing the
backwards fill to show opacity: 1 when no scroll timeline was active.
Replace with two stacked animations using `forwards` fill only.
Signed-off-by: Johan Persson <johanopersson@gmail.com>
* docs(ui): update InteractiveScrollable story to use onPress
Signed-off-by: Johan Persson <johanopersson@gmail.com>
* style: format Card.module.css
Signed-off-by: Johan Persson <johanopersson@gmail.com>
* fix(ui): guard against Text node target in Card click handler
Signed-off-by: Johan Persson <johanopersson@gmail.com>
* feat(ui): render Card as article element for better semantics
Signed-off-by: Johan Persson <johanopersson@gmail.com>
* chore(ui): update API report
Signed-off-by: Johan Persson <johanopersson@gmail.com>
* fix(ui): prevent synthetic click from double-bubbling and exclude onClick from Card types
Signed-off-by: Johan Persson <johanopersson@gmail.com>
---------
Signed-off-by: Johan Persson <johanopersson@gmail.com>