select* resets its label to `default-selected` whenever its options
change identity. The access token dialog builds its options vector
inline, so picking an expiration re-rendered the dialog and the label
snapped back to "Never", although the form kept the picked value and
the token was created with it.
form-select* now passes the form value as `default-selected` when it
holds a non-blank string, so the reset lands on the picked option. The
caller's default still applies while the form value is blank.
Closes#11663
AI-assisted-by: claude-opus-5
Signed-off-by: chulgil <2044587+chulgil@users.noreply.github.com>
Co-authored-by: chulgil <2044587+chulgil@users.noreply.github.com>
Co-authored-by: Andrey Antukh <niwi@niwi.nz>
The summary step reads a filter from .github/scripts, which never
landed on this branch, so every run failed with exit code 2 even when
all tests passed. Add the filter and tolerate both a missing file and
a jq error.
Use `!cancelled()` instead of `always()` on the merge job, so it no
longer runs after cancel-in-progress killed the shards without
uploading their blobs.
Lower the JSON report retention to 7 days, the repository maximum.
Signed-off-by: David Barragán Merino <david.barragan@kaleidos.net>
select* resets its label to `default-selected` whenever its options
change identity. The access token dialog builds its options vector
inline, so picking an expiration re-rendered the dialog and the label
snapped back to "Never", although the form kept the picked value and
the token was created with it.
form-select* now passes the form value as `default-selected` when it
holds a non-blank string, so the reset lands on the picked option. The
caller's default still applies while the form value is blank.
Closes#11663
AI-assisted-by: claude-opus-5
Signed-off-by: chulgil <2044587+chulgil@users.noreply.github.com>
Co-authored-by: chulgil <2044587+chulgil@users.noreply.github.com>
Co-authored-by: Andrey Antukh <niwi@niwi.nz>
The summary step reads a filter from .github/scripts, which is absent
on branches predating it, so a missing file turned otherwise green
runs red. Tolerate both a missing filter and a jq error: a cosmetic
summary should never fail a run.
Use `!cancelled()` instead of `always()` on the merge job. With
`always()` it also ran when the run itself was cancelled by
cancel-in-progress, after the shards had been killed without uploading
their blobs, leaving the download step with nothing to match.
Lower the JSON report retention to 7 days, the repository maximum.
Requesting 30 was silently clamped and logged a warning on every run.
Signed-off-by: David Barragán Merino <david.barragan@kaleidos.net>
Adds a 3x entry to the export scale selector in the workspace design
sidebar and in the viewer inspect panel, so @3x assets can be exported
natively without resizing them in external tools.
Signed-off-by: Shreyash Agare <agareshreyash26@gmail.com>
Co-authored-by: Shreyash Agare <agareshreyash26@gmail.com>
Co-authored-by: Andrey Antukh <niwi@niwi.nz>
The repository defines an EPIC issue type, but the memory only
listed Bug, Enhancement, Feature, Task, Question and Docs. Add
the EPIC row with its type id and its mapping entry so umbrella
tracking issues are typed consistently.
AI-assisted-by: deepseek-v4.1-flash
* 🐛 Pass the base branch and the project when opening a PR
The create-pr skill resolves the target branch with
scripts/detect-target-branch in step 1 and then never passes it, so
gh opens the PR against the repository default. A branch cut from
staging therefore targets develop. mem:workflow/creating-prs also
requires --project "Main", which the skill's command omitted.
Two checks were missing as well. A branch behind its base produces a
verdict about a tree nobody will ship, because checks run against head
merged into base. A draft PR runs no checks at all, since every test
workflow is gated on the pull_request.draft flag, so the skill now
asks before opening one and states that cost.
Finally, the AI-assisted-by trailer belongs in the PR body: Penpot
squash-merges, so the landed commit message comes from the PR title
and body, and a trailer that lives only on branch commits disappears
at merge.
AI-assisted-by: claude-opus-5
Signed-off-by: Álvaro Tejero Cantero <alvorithm@teje.ro>
* ♻️ Drop the behind-the-base check and fix the trailer note
Review found both claims wrong. The behind-the-base check said the
checks would report on a tree nobody ships, but every test workflow
runs actions/checkout with no ref, so a pull_request event builds
refs/pull/N/merge, which is head already merged into base. Being
behind the base therefore changes nothing about the verdict, and the
check only forced a rebase for no gain.
The trailer note claimed a trailer on branch commits disappears at
merge. It does not: GitHub's squash body lists the commit messages,
and 91b433985a carries three AI-assisted-by lines from the two
commits of #11677. The paragraph now asks for the trailer in the body
as a courtesy to the reviewer, once per model, and says the commits
keep theirs.
AI-assisted-by: claude-opus-5
Signed-off-by: Álvaro Tejero Cantero <alvorithm@teje.ro>
---------
Signed-off-by: Álvaro Tejero Cantero <alvorithm@teje.ro>
* ⚡ Fetch only caller share-link in view-only bundle
Share-link callers now resolve a single row with a composite
(id, file-id) predicate instead of loading all sibling rows
and filtering in memory. Membership path keeps full query.
Related #11633
AI-assisted-by: muse-spark-1.3-contributor
Signed-off-by: makesomethingshit <junsoo1172@gmail.com>
* ⚡ Add DB-access regression test for share-link bundle
The share-link path must resolve the caller row with a composite
(id, file-id) single-row lookup and never run the full
file-id query. Keep cross-file replay coverage.
Related #11633
AI-assisted-by: muse-spark-1.3-contributor
Signed-off-by: makesomethingshit <junsoo1172@gmail.com>
---------
Signed-off-by: makesomethingshit <junsoo1172@gmail.com>
Co-authored-by: Andrey Antukh <niwi@niwi.nz>