diff --git a/CHANGELOG.md b/CHANGELOG.md
index ed71648..86d7cc0 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,12 @@
# Changelog - project.linkedcorp.net
+## [2.13.2] - 2026-10-14
+### Changed
+- Contraseñas (solo este módulo): borrar una credencial o un grupo ahora dice "Destruir" en vez
+ de "Eliminar", con una advertencia fuerte (franja roja, texto en mayúsculas) de que la
+ destrucción es permanente e irreversible. El registro de auditoría ya guardaba quién y cuándo
+ borró cada una (sin el contenido), sin cambios ahí.
+
## [2.13.1] - 2026-10-14
### Fixed
- ComboBox y Flyout (menu de 3 puntos): el panel desplegable se quedaba cortado por el borde
diff --git a/VERSION b/VERSION
index 94f15e9..0e83a9a 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-2.13.1
+2.13.2
diff --git a/backend/package.json b/backend/package.json
index 2b809ac..9c744c1 100644
--- a/backend/package.json
+++ b/backend/package.json
@@ -1,6 +1,6 @@
{
"name": "project-linkedcorp-backend",
- "version": "2.13.1",
+ "version": "2.13.2",
"private": true,
"type": "module",
"main": "src/server.js",
diff --git a/frontend/package.json b/frontend/package.json
index 01b6d14..322e707 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -1,7 +1,7 @@
{
"name": "project-linkedcorp-frontend",
"private": true,
- "version": "2.13.1",
+ "version": "2.13.2",
"type": "module",
"scripts": {
"dev": "vite",
diff --git a/frontend/src/i18n/messages.js b/frontend/src/i18n/messages.js
index df33d63..fcfd27a 100644
--- a/frontend/src/i18n/messages.js
+++ b/frontend/src/i18n/messages.js
@@ -234,6 +234,10 @@ export const messages = {
vault_share_placeholder: 'Elegir usuario',
vault_share_empty: 'No compartida con nadie.',
vault_shared_by: 'Compartida por',
+ vault_destroy: 'Destruir',
+ vault_confirm_destroy_title: 'Destrucción irreversible',
+ vault_confirm_destroy_entry_msg: 'Vas a DESTRUIR esta credencial de forma permanente. No hay papelera ni copia de respaldo -- una vez confirmado, no hay forma de recuperarla.',
+ vault_confirm_destroy_group_msg: 'Vas a DESTRUIR este grupo de forma permanente. No hay papelera ni copia de respaldo -- una vez confirmado, no hay forma de recuperarlo. Las credenciales que contiene no se destruyen, quedan sin grupo.',
notes_title: 'Notas',
notes_placeholder: 'Escribe un apunte rápido...',
notes_empty: 'No tienes notas todavía.',
@@ -589,6 +593,10 @@ export const messages = {
vault_share_placeholder: 'Choose a user',
vault_share_empty: 'Not shared with anyone.',
vault_shared_by: 'Shared by',
+ vault_destroy: 'Destroy',
+ vault_confirm_destroy_title: 'Irreversible destruction',
+ vault_confirm_destroy_entry_msg: 'You are about to permanently DESTROY this credential. There is no trash bin or backup copy -- once confirmed, there is no way to recover it.',
+ vault_confirm_destroy_group_msg: 'You are about to permanently DESTROY this group. There is no trash bin or backup copy -- once confirmed, there is no way to recover it. Its credentials are not destroyed, they stay ungrouped.',
notes_title: 'Notes',
notes_placeholder: 'Write a quick note...',
notes_empty: 'You don\'t have any notes yet.',
diff --git a/frontend/src/pages/Contrasenas/ContrasenasPage.jsx b/frontend/src/pages/Contrasenas/ContrasenasPage.jsx
index 8f9795c..0e5c69f 100644
--- a/frontend/src/pages/Contrasenas/ContrasenasPage.jsx
+++ b/frontend/src/pages/Contrasenas/ContrasenasPage.jsx
@@ -272,13 +272,13 @@ export default function ContrasenasPage() {
function confirmDelete(entry) {
openDialog({
- tone: 'warning',
- title: t('common_confirm_delete_title'),
- message: t('common_confirm_delete_msg'),
+ tone: 'error',
+ title: t('vault_confirm_destroy_title'),
+ message: t('vault_confirm_destroy_entry_msg'),
actions: [
{ label: t('common_cancel'), variant: 'standard' },
{
- label: t('common_delete'), variant: 'danger',
+ label: t('vault_destroy'), variant: 'danger',
onClick: () => runAction(async () => {
await deleteVaultEntry(entry.id);
await Promise.all([loadEntries(), loadGroups()]);
@@ -343,13 +343,13 @@ export default function ContrasenasPage() {
function confirmDeleteGroup(group) {
openDialog({
- tone: 'warning',
- title: t('common_confirm_delete_title'),
- message: t('vault_group_delete_confirm_msg'),
+ tone: 'error',
+ title: t('vault_confirm_destroy_title'),
+ message: t('vault_confirm_destroy_group_msg'),
actions: [
{ label: t('common_cancel'), variant: 'standard' },
{
- label: t('common_delete'), variant: 'danger',
+ label: t('vault_destroy'), variant: 'danger',
onClick: () => runAction(async () => {
await deleteVaultGroup(group.id);
if (activeGroupId === group.id) setActiveGroupId(null);
@@ -446,7 +446,7 @@ export default function ContrasenasPage() {
)}>
openEditGroup(group)}>{t('common_edit')}
- confirmDeleteGroup(group)}>{t('common_delete')}
+ confirmDeleteGroup(group)}>{t('vault_destroy')}
@@ -463,7 +463,7 @@ export default function ContrasenasPage() {
(
)}>
- confirmDelete(entry)}>{t('common_delete')}
+ confirmDelete(entry)}>{t('vault_destroy')}
) : (