Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 11 additions & 4 deletions .claude/skills/release/references/hotfix.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,21 +18,28 @@ Use for critical production bugs, security vulnerabilities, or data loss issues
git checkout -b hotfix/v0.6.4 v0.6.3
```

### 2. Implement the Fix
### 2. Implement the Fix and Update CHANGELOG

Apply the fix directly on the hotfix branch. Keep it minimal — only the targeted change.

**Always update `CHANGELOG.md`** in the same commit or as a follow-up commit on the hotfix branch — not as a separate PR afterwards. The changelog entry must be present before tagging.

```bash
git add <files>
git commit -m "fix: <description>"
# Update CHANGELOG.md, then:
git add CHANGELOG.md
git commit -m "chore: update CHANGELOG for v0.6.4"
git push -u origin hotfix/v0.6.4
```

### 3. Wait for CI
### 3. Open a PR to Main and Wait for CI

**MANDATORY before tagging.** The CI workflow runs on `hotfix/*` branches.
**Open a PR targeting `main` before tagging.** CI runs on the PR — do not tag until it passes.

```bash
gh pr create --base main --title "fix: hotfix v0.6.4" \
--body "Hotfix release v0.6.4. Cherry-picks <description> onto v0.6.3."
gh run list --branch hotfix/v0.6.4 --workflow=ci.yml --limit 1
gh run watch <run-id>
```
Expand Down Expand Up @@ -75,7 +82,7 @@ gh pr create --base develop --title "fix: forward-port hotfix v0.6.4" \

Merge once CI passes. If the cherry-pick has conflicts (develop has diverged significantly), resolve them before pushing.

**Auto-generated files (appcasts):** The `update-appcast.yml` workflow updates `Docs/appcast.xml` and `Docs/appcast-beta.xml` on main automatically after each release. These changes are never automatically forward-ported. After every release — stable or hotfix — create a forward-port PR that includes the updated appcast files.
**Auto-generated files (appcasts):** The `update-appcast.yml` workflow updates `Docs/appcast.xml` and `Docs/appcast-beta.xml` on main automatically after each release. These changes are never automatically forward-ported. After every release — stable or hotfix — create a forward-port PR that includes the updated appcast files AND any CHANGELOG changes from the hotfix branch.

## What NOT to Do

Expand Down
8 changes: 0 additions & 8 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -453,14 +453,6 @@ jobs:
TermQ-${{ steps.version.outputs.VERSION }}.zip.sig
checksums.txt

- name: Trigger appcast update
env:
GH_TOKEN: ${{ secrets.APPCAST_TOKEN }}
run: |
echo "Triggering appcast update workflow..."
gh workflow run update-appcast.yml
echo "✅ Appcast update triggered"

- name: Cleanup keychain
if: always()
run: |
Expand Down
11 changes: 8 additions & 3 deletions .github/workflows/update-appcast.yml
Original file line number Diff line number Diff line change
@@ -1,11 +1,15 @@
name: Update Appcast

on:
release:
types: [published]
workflow_run:
workflows: ["Release"]
types: [completed]
workflow_dispatch:
# Allow manual trigger to regenerate appcast

# Only update appcast when the Release workflow succeeds
# (workflow_dispatch always proceeds — used for manual regeneration)

permissions:
contents: write
pull-requests: write
Expand All @@ -14,6 +18,7 @@ jobs:
update-appcast:
name: Update Appcast
runs-on: ubuntu-latest
if: github.event_name == 'workflow_dispatch' || github.event.workflow_run.conclusion == 'success'

steps:
- name: Checkout
Expand Down Expand Up @@ -52,7 +57,7 @@ jobs:
git config user.email "github-actions[bot]@users.noreply.github.com"

BRANCH="hotfix/appcast-update"
RELEASE_TAG="${{ github.event.release.tag_name || 'manual' }}"
RELEASE_TAG="${{ github.event.workflow_run.head_branch || 'manual' }}"

git checkout -B "$BRANCH"
git add Docs/appcast.xml Docs/appcast-beta.xml
Expand Down
2 changes: 2 additions & 0 deletions Sources/TermQ/Resources/ar.lproj/Localizable.strings
Original file line number Diff line number Diff line change
Expand Up @@ -717,6 +717,8 @@
"harnesses.uninstall.help" = "إلغاء تثبيت هذا الـ harness";
"harnesses.uninstall.alert.title %@" = "إلغاء تثبيت \"%@\"؟";
"harnesses.uninstall.alert.message" = "سيؤدي هذا إلى إزالة الـ harness من نظامك.";
"harnesses.uninstall.alert.message.local" = "سيؤدي هذا إلى إزالة harness من YNH. لن يتم حذف ملفاتك المصدر المحلية.";
"harnesses.uninstall.alert.message.untracked" = "لا يوجد لهذا harness أي سجل تثبيت في YNH. سيتم حذفه مباشرةً من القرص.";
"harnesses.uninstall.alert.worktrees %ld" = "هذا الـ harness مرتبط بـ %ld مستودع(ات) عمل — ستُمسح تلك الارتباطات.";
"harnesses.uninstall.alert.terminals %ld" = "%ld محطة (محطات) طرفية تُشغّل هذا الـ harness حاليًا.";
"harnesses.uninstall.alert.confirm" = "إلغاء التثبيت";
Expand Down
2 changes: 2 additions & 0 deletions Sources/TermQ/Resources/ca.lproj/Localizable.strings
Original file line number Diff line number Diff line change
Expand Up @@ -717,6 +717,8 @@
"harnesses.uninstall.help" = "Desinstal·la aquest harness";
"harnesses.uninstall.alert.title %@" = "Desinstal·lar \"%@\"?";
"harnesses.uninstall.alert.message" = "Això eliminarà el harness del vostre sistema.";
"harnesses.uninstall.alert.message.local" = "Això eliminarà el harness de YNH. Els vostres fitxers font locals no s'eliminaran.";
"harnesses.uninstall.alert.message.untracked" = "Aquest harness no té cap registre d'instal·lació a YNH. S'eliminarà directament del disc.";
"harnesses.uninstall.alert.worktrees %ld" = "Aquest harness està vinculat a %ld arbre(s) de treball — aquestes associacions s'esboraran.";
"harnesses.uninstall.alert.terminals %ld" = "%ld terminal(s) estan executant aquest harness ara mateix.";
"harnesses.uninstall.alert.confirm" = "Desinstal·la";
Expand Down
2 changes: 2 additions & 0 deletions Sources/TermQ/Resources/cs.lproj/Localizable.strings
Original file line number Diff line number Diff line change
Expand Up @@ -717,6 +717,8 @@
"harnesses.uninstall.help" = "Odinstalovat tento harness";
"harnesses.uninstall.alert.title %@" = "Odinstalovat \"%@\"?";
"harnesses.uninstall.alert.message" = "Tím se harness odebere z vašeho systému.";
"harnesses.uninstall.alert.message.local" = "Tím se odstraní harness z YNH. Vaše místní zdrojové soubory nebudou smazány.";
"harnesses.uninstall.alert.message.untracked" = "Tento harness nemá žádný záznam o instalaci v YNH. Bude odstraněn přímo z disku.";
"harnesses.uninstall.alert.worktrees %ld" = "Tento harness je propojen s %ld pracovním stromem (stromy) — tato propojení budou vymazána.";
"harnesses.uninstall.alert.terminals %ld" = "%ld terminál(ů) aktuálně spouští tento harness.";
"harnesses.uninstall.alert.confirm" = "Odinstalovat";
Expand Down
2 changes: 2 additions & 0 deletions Sources/TermQ/Resources/da.lproj/Localizable.strings
Original file line number Diff line number Diff line change
Expand Up @@ -717,6 +717,8 @@
"harnesses.uninstall.help" = "Afinstaller denne harness";
"harnesses.uninstall.alert.title %@" = "Afinstaller \"%@\"?";
"harnesses.uninstall.alert.message" = "Dette fjerner harness fra dit system.";
"harnesses.uninstall.alert.message.local" = "Dette fjerner harness fra YNH. Dine lokale kildefiler slettes ikke.";
"harnesses.uninstall.alert.message.untracked" = "Denne harness har ingen YNH-installationspost. Den slettes direkte fra disken.";
"harnesses.uninstall.alert.worktrees %ld" = "Denne harness er knyttet til %ld worktree(s) — disse tilknytninger ryddes.";
"harnesses.uninstall.alert.terminals %ld" = "%ld terminal(er) kører i øjeblikket denne harness.";
"harnesses.uninstall.alert.confirm" = "Afinstaller";
Expand Down
2 changes: 2 additions & 0 deletions Sources/TermQ/Resources/de.lproj/Localizable.strings
Original file line number Diff line number Diff line change
Expand Up @@ -717,6 +717,8 @@
"harnesses.uninstall.help" = "Diesen Harness deinstallieren";
"harnesses.uninstall.alert.title %@" = "\"%@\" deinstallieren?";
"harnesses.uninstall.alert.message" = "Dadurch wird der Harness von Ihrem System entfernt.";
"harnesses.uninstall.alert.message.local" = "Dadurch wird der Harness aus YNH entfernt. Ihre lokalen Quelldateien werden nicht gelöscht.";
"harnesses.uninstall.alert.message.untracked" = "Dieser Harness hat keinen YNH-Installationseintrag. Er wird direkt von der Festplatte gelöscht.";
"harnesses.uninstall.alert.worktrees %ld" = "Dieser Harness ist mit %ld Worktree(s) verknüpft — diese Verknüpfungen werden aufgehoben.";
"harnesses.uninstall.alert.terminals %ld" = "%ld Terminal(s) führen diesen Harness gerade aus.";
"harnesses.uninstall.alert.confirm" = "Deinstallieren";
Expand Down
2 changes: 2 additions & 0 deletions Sources/TermQ/Resources/el.lproj/Localizable.strings
Original file line number Diff line number Diff line change
Expand Up @@ -717,6 +717,8 @@
"harnesses.uninstall.help" = "Απεγκατάσταση αυτού του harness";
"harnesses.uninstall.alert.title %@" = "Απεγκατάσταση \"%@\";";
"harnesses.uninstall.alert.message" = "Αυτό θα αφαιρέσει το harness από το σύστημά σας.";
"harnesses.uninstall.alert.message.local" = "Αυτό θα αφαιρέσει το harness από το YNH. Τα τοπικά αρχεία πηγαίου κώδικα δεν θα διαγραφούν.";
"harnesses.uninstall.alert.message.untracked" = "Αυτό το harness δεν έχει εγγραφή εγκατάστασης στο YNH. Θα διαγραφεί απευθείας από τον δίσκο.";
"harnesses.uninstall.alert.worktrees %ld" = "Αυτό το harness είναι συνδεδεμένο με %ld worktree(s) — αυτές οι συσχετίσεις θα διαγραφούν.";
"harnesses.uninstall.alert.terminals %ld" = "%ld τερματικό(ά) εκτελεί αυτήν τη στιγμή αυτό το harness.";
"harnesses.uninstall.alert.confirm" = "Απεγκατάσταση";
Expand Down
2 changes: 2 additions & 0 deletions Sources/TermQ/Resources/en-AU.lproj/Localizable.strings
Original file line number Diff line number Diff line change
Expand Up @@ -715,6 +715,8 @@
"harnesses.uninstall.help" = "Uninstall this harness";
"harnesses.uninstall.alert.title %@" = "Uninstall \"%@\"?";
"harnesses.uninstall.alert.message" = "This will remove the harness from your system.";
"harnesses.uninstall.alert.message.local" = "This will remove the harness from YNH. Your local source files will not be deleted.";
"harnesses.uninstall.alert.message.untracked" = "This harness has no YNH install record. It will be deleted directly from disk.";
"harnesses.uninstall.alert.worktrees %ld" = "This harness is linked to %ld worktree(s) — those associations will be cleared.";
"harnesses.uninstall.alert.terminals %ld" = "%ld terminal(s) are currently running this harness.";
"harnesses.uninstall.alert.confirm" = "Uninstall";
Expand Down
2 changes: 2 additions & 0 deletions Sources/TermQ/Resources/en-GB.lproj/Localizable.strings
Original file line number Diff line number Diff line change
Expand Up @@ -715,6 +715,8 @@
"harnesses.uninstall.help" = "Uninstall this harness";
"harnesses.uninstall.alert.title %@" = "Uninstall \"%@\"?";
"harnesses.uninstall.alert.message" = "This will remove the harness from your system.";
"harnesses.uninstall.alert.message.local" = "This will remove the harness from YNH. Your local source files will not be deleted.";
"harnesses.uninstall.alert.message.untracked" = "This harness has no YNH install record. It will be deleted directly from disk.";
"harnesses.uninstall.alert.worktrees %ld" = "This harness is linked to %ld worktree(s) — those associations will be cleared.";
"harnesses.uninstall.alert.terminals %ld" = "%ld terminal(s) are currently running this harness.";
"harnesses.uninstall.alert.confirm" = "Uninstall";
Expand Down
2 changes: 2 additions & 0 deletions Sources/TermQ/Resources/en.lproj/Localizable.strings
Original file line number Diff line number Diff line change
Expand Up @@ -765,6 +765,8 @@
"harnesses.uninstall.help" = "Uninstall this harness";
"harnesses.uninstall.alert.title %@" = "Uninstall \"%@\"?";
"harnesses.uninstall.alert.message" = "This will remove the harness from your system.";
"harnesses.uninstall.alert.message.local" = "This will remove the harness from YNH. Your local source files will not be deleted.";
"harnesses.uninstall.alert.message.untracked" = "This harness has no YNH install record. It will be deleted directly from disk.";
"harnesses.uninstall.alert.worktrees %ld" = "This harness is linked to %ld worktree(s) — those associations will be cleared.";
"harnesses.uninstall.alert.terminals %ld" = "%ld terminal(s) are currently running this harness.";
"harnesses.uninstall.alert.confirm" = "Uninstall";
Expand Down
2 changes: 2 additions & 0 deletions Sources/TermQ/Resources/es-419.lproj/Localizable.strings
Original file line number Diff line number Diff line change
Expand Up @@ -717,6 +717,8 @@
"harnesses.uninstall.help" = "Desinstalar este harness";
"harnesses.uninstall.alert.title %@" = "¿Desinstalar \"%@\"?";
"harnesses.uninstall.alert.message" = "Esto eliminará el harness de tu sistema.";
"harnesses.uninstall.alert.message.local" = "Esto eliminará el harness de YNH. Tus archivos fuente locales no se eliminarán.";
"harnesses.uninstall.alert.message.untracked" = "Este harness no tiene ningún registro de instalación en YNH. Se eliminará directamente del disco.";
"harnesses.uninstall.alert.worktrees %ld" = "Este harness está vinculado a %ld árbol(es) de trabajo — esas asociaciones se eliminarán.";
"harnesses.uninstall.alert.terminals %ld" = "%ld terminal(es) están ejecutando este harness actualmente.";
"harnesses.uninstall.alert.confirm" = "Desinstalar";
Expand Down
2 changes: 2 additions & 0 deletions Sources/TermQ/Resources/es.lproj/Localizable.strings
Original file line number Diff line number Diff line change
Expand Up @@ -717,6 +717,8 @@
"harnesses.uninstall.help" = "Desinstalar este harness";
"harnesses.uninstall.alert.title %@" = "¿Desinstalar \"%@\"?";
"harnesses.uninstall.alert.message" = "Esto eliminará el harness de tu sistema.";
"harnesses.uninstall.alert.message.local" = "Esto eliminará el harness de YNH. Sus archivos fuente locales no se eliminarán.";
"harnesses.uninstall.alert.message.untracked" = "Este harness no tiene ningún registro de instalación en YNH. Se eliminará directamente del disco.";
"harnesses.uninstall.alert.worktrees %ld" = "Este harness está vinculado a %ld árbol(es) de trabajo — esas asociaciones se eliminarán.";
"harnesses.uninstall.alert.terminals %ld" = "%ld terminal(es) están ejecutando este harness actualmente.";
"harnesses.uninstall.alert.confirm" = "Desinstalar";
Expand Down
2 changes: 2 additions & 0 deletions Sources/TermQ/Resources/fi.lproj/Localizable.strings
Original file line number Diff line number Diff line change
Expand Up @@ -723,6 +723,8 @@
"harnesses.uninstall.help" = "Poista tämän harnessin asennus";
"harnesses.uninstall.alert.title %@" = "Poistetaanko \"%@\"?";
"harnesses.uninstall.alert.message" = "Tämä poistaa harnessin järjestelmästäsi.";
"harnesses.uninstall.alert.message.local" = "Tämä poistaa harnessin YNH:sta. Paikallisia lähdetiedostojasi ei poisteta.";
"harnesses.uninstall.alert.message.untracked" = "Tällä harnessilla ei ole YNH-asennustietuetta. Se poistetaan suoraan levyltä.";
"harnesses.uninstall.alert.worktrees %ld" = "Tämä harness on linkitetty %ld työtree(hen/hin) — nämä yhteydet poistetaan.";
"harnesses.uninstall.alert.terminals %ld" = "%ld pääte(ttä) käyttää tällä hetkellä tätä harnessia.";
"harnesses.uninstall.alert.confirm" = "Poista asennus";
Expand Down
2 changes: 2 additions & 0 deletions Sources/TermQ/Resources/fr-CA.lproj/Localizable.strings
Original file line number Diff line number Diff line change
Expand Up @@ -723,6 +723,8 @@
"harnesses.uninstall.help" = "Désinstaller ce harnais";
"harnesses.uninstall.alert.title %@" = "Désinstaller \"%@\" ?";
"harnesses.uninstall.alert.message" = "Le harnais sera supprimé de votre système.";
"harnesses.uninstall.alert.message.local" = "Cela supprimera le harness de YNH. Vos fichiers sources locaux ne seront pas supprimés.";
"harnesses.uninstall.alert.message.untracked" = "Ce harness n'a aucun enregistrement d'installation dans YNH. Il sera supprimé directement du disque.";
"harnesses.uninstall.alert.worktrees %ld" = "Ce harnais est lié à %ld arbre(s) de travail — ces associations seront supprimées.";
"harnesses.uninstall.alert.terminals %ld" = "%ld terminal(s) exécutent actuellement ce harnais.";
"harnesses.uninstall.alert.confirm" = "Désinstaller";
Expand Down
2 changes: 2 additions & 0 deletions Sources/TermQ/Resources/fr.lproj/Localizable.strings
Original file line number Diff line number Diff line change
Expand Up @@ -723,6 +723,8 @@
"harnesses.uninstall.help" = "Désinstaller ce harnais";
"harnesses.uninstall.alert.title %@" = "Désinstaller \"%@\" ?";
"harnesses.uninstall.alert.message" = "Le harnais sera supprimé de votre système.";
"harnesses.uninstall.alert.message.local" = "Cela supprimera le harness de YNH. Vos fichiers sources locaux ne seront pas supprimés.";
"harnesses.uninstall.alert.message.untracked" = "Ce harness n'a aucun enregistrement d'installation dans YNH. Il sera supprimé directement du disque.";
"harnesses.uninstall.alert.worktrees %ld" = "Ce harnais est lié à %ld arbre(s) de travail — ces associations seront supprimées.";
"harnesses.uninstall.alert.terminals %ld" = "%ld terminal(s) exécutent actuellement ce harnais.";
"harnesses.uninstall.alert.confirm" = "Désinstaller";
Expand Down
2 changes: 2 additions & 0 deletions Sources/TermQ/Resources/he.lproj/Localizable.strings
Original file line number Diff line number Diff line change
Expand Up @@ -723,6 +723,8 @@
"harnesses.uninstall.help" = "הסר את ה-harness הזה";
"harnesses.uninstall.alert.title %@" = "להסיר את \"%@\"?";
"harnesses.uninstall.alert.message" = "פעולה זו תסיר את ה-harness מהמערכת שלך.";
"harnesses.uninstall.alert.message.local" = "פעולה זו תסיר את ה-harness מ-YNH. הקבצים המקומיים שלך לא יימחקו.";
"harnesses.uninstall.alert.message.untracked" = "ל-harness זה אין רשומת התקנה ב-YNH. הוא יימחק ישירות מהדיסק.";
"harnesses.uninstall.alert.worktrees %ld" = "ה-harness הזה מקושר ל-%ld worktree(s) — הקשרים הללו יימחקו.";
"harnesses.uninstall.alert.terminals %ld" = "%ld מסוף(ים) מריצים כעת את ה-harness הזה.";
"harnesses.uninstall.alert.confirm" = "הסר התקנה";
Expand Down
2 changes: 2 additions & 0 deletions Sources/TermQ/Resources/hi.lproj/Localizable.strings
Original file line number Diff line number Diff line change
Expand Up @@ -723,6 +723,8 @@
"harnesses.uninstall.help" = "इस harness को अनइंस्टॉल करें";
"harnesses.uninstall.alert.title %@" = "\"%@\" को अनइंस्टॉल करें?";
"harnesses.uninstall.alert.message" = "यह आपके सिस्टम से harness को हटा देगा।";
"harnesses.uninstall.alert.message.local" = "यह YNH से harness को हटा देगा। आपकी स्थानीय स्रोत फ़ाइलें हटाई नहीं जाएंगी।";
"harnesses.uninstall.alert.message.untracked" = "इस harness का YNH में कोई इंस्टॉल रिकॉर्ड नहीं है। इसे सीधे डिस्क से हटाया जाएगा।";
"harnesses.uninstall.alert.worktrees %ld" = "यह harness %ld worktree(s) से जुड़ा है — वे संबद्धताएं साफ़ कर दी जाएंगी।";
"harnesses.uninstall.alert.terminals %ld" = "%ld टर्मिनल वर्तमान में इस harness को चला रहे हैं।";
"harnesses.uninstall.alert.confirm" = "अनइंस्टॉल करें";
Expand Down
2 changes: 2 additions & 0 deletions Sources/TermQ/Resources/hr.lproj/Localizable.strings
Original file line number Diff line number Diff line change
Expand Up @@ -723,6 +723,8 @@
"harnesses.uninstall.help" = "Deinstaliraj ovaj harness";
"harnesses.uninstall.alert.title %@" = "Deinstalirati \"%@\"?";
"harnesses.uninstall.alert.message" = "Time će se harness ukloniti s vašeg sustava.";
"harnesses.uninstall.alert.message.local" = "Ovo će ukloniti harness iz YNH-a. Vaše lokalne izvorne datoteke neće biti izbrisane.";
"harnesses.uninstall.alert.message.untracked" = "Ovaj harness nema zapisa o instalaciji u YNH-u. Bit će izbrisan izravno s diska.";
"harnesses.uninstall.alert.worktrees %ld" = "Ovaj harness je povezan s %ld worktree(om/ovima) — te će asocijacije biti obrisane.";
"harnesses.uninstall.alert.terminals %ld" = "%ld terminal(a) trenutno izvodi ovaj harness.";
"harnesses.uninstall.alert.confirm" = "Deinstaliraj";
Expand Down
2 changes: 2 additions & 0 deletions Sources/TermQ/Resources/hu.lproj/Localizable.strings
Original file line number Diff line number Diff line change
Expand Up @@ -723,6 +723,8 @@
"harnesses.uninstall.help" = "Ez a harness eltávolítása";
"harnesses.uninstall.alert.title %@" = "Eltávolítja: \"%@\"?";
"harnesses.uninstall.alert.message" = "Ez eltávolítja a harness-t a rendszeréből.";
"harnesses.uninstall.alert.message.local" = "Ez eltávolítja a harness-t a YNH-ból. A helyi forrásfájlok nem törlődnek.";
"harnesses.uninstall.alert.message.untracked" = "Ennek a harness-nek nincs YNH-telepítési bejegyzése. Közvetlenül a lemezről törlődik.";
"harnesses.uninstall.alert.worktrees %ld" = "Ez a harness %ld munkafahoz van csatolva — ezek a kapcsolatok törlődnek.";
"harnesses.uninstall.alert.terminals %ld" = "%ld terminál jelenleg ezt a harness-t futtatja.";
"harnesses.uninstall.alert.confirm" = "Eltávolítás";
Expand Down
2 changes: 2 additions & 0 deletions Sources/TermQ/Resources/id.lproj/Localizable.strings
Original file line number Diff line number Diff line change
Expand Up @@ -717,6 +717,8 @@
"harnesses.uninstall.help" = "Hapus instalasi harness ini";
"harnesses.uninstall.alert.title %@" = "Hapus instalasi \"%@\"?";
"harnesses.uninstall.alert.message" = "Ini akan menghapus harness dari sistem Anda.";
"harnesses.uninstall.alert.message.local" = "Ini akan menghapus harness dari YNH. File sumber lokal Anda tidak akan dihapus.";
"harnesses.uninstall.alert.message.untracked" = "Harness ini tidak memiliki catatan instalasi YNH. Harness akan dihapus langsung dari disk.";
"harnesses.uninstall.alert.worktrees %ld" = "Harness ini terhubung ke %ld worktree — asosiasi tersebut akan dihapus.";
"harnesses.uninstall.alert.terminals %ld" = "%ld terminal sedang menjalankan harness ini.";
"harnesses.uninstall.alert.confirm" = "Hapus Instalasi";
Expand Down
Loading
Loading