Skip to content

build(deps): bump actions/checkout from 4 to 7#1

Closed
dependabot[bot] wants to merge 1 commit into
masterfrom
dependabot/github_actions/actions/checkout-6
Closed

build(deps): bump actions/checkout from 4 to 7#1
dependabot[bot] wants to merge 1 commit into
masterfrom
dependabot/github_actions/actions/checkout-6

Conversation

@dependabot

@dependabot dependabot Bot commented on behalf of github Jun 14, 2026

Copy link
Copy Markdown

Bumps actions/checkout from 4 to 7.

Release notes

Sourced from actions/checkout's releases.

v7.0.0

What's Changed

New Contributors

Full Changelog: actions/checkout@v6.0.3...v7.0.0

v6.0.3

What's Changed

New Contributors

Full Changelog: actions/checkout@v6...v6.0.3

v6.0.2

What's Changed

Full Changelog: actions/checkout@v6.0.1...v6.0.2

v6.0.1

What's Changed

Full Changelog: actions/checkout@v6...v6.0.1

v6.0.0

What's Changed

... (truncated)

Changelog

Sourced from actions/checkout's changelog.

Changelog

v7.0.0

v6.0.3

v6.0.2

v6.0.1

v6.0.0

v5.0.1

v5.0.0

v4.3.1

v4.3.0

v4.2.2

v4.2.1

... (truncated)

Commits

@dependabot @github

dependabot Bot commented on behalf of github Jun 14, 2026

Copy link
Copy Markdown
Author

Labels

The following labels could not be found: ci, dependencies. Please create them before Dependabot can add them to a pull request.

Please fix the above issues or remove invalid values from dependabot.yml.

miningtheblocks added a commit that referenced this pull request Jun 17, 2026
…heckRevoked, password reset)

Cierra los 3 CRIT del bloque "identity" del Audit Round 2 — todos comparten
la ventana de 60min de account takeover que existía post-revocación.

1. Wallet hot-swap fix en claimGemNFT + submitGemClaim.

   Antes ambas funciones leían walletAddress del body del request → bypaseaban
   el cooldown de 24h de setUserWallet. Durante un takeover (atacante con
   token válido), podía claimear NFTs / submit gem claims a SU wallet aunque
   setUserWallet siguiera bloqueado por cooldown.

   Ahora ambas leen walletAddress server-side desde users/{uid}.walletAddress.
   La única vía para setear/cambiar wallet pasa por setUserWallet (cooldown
   + validación de formato). request.data.walletAddress se ignora silenciosamente
   por backwards-compat con clientes pre-Commit-B; el web claim form sigue
   mostrando el campo pero queda como TODO sacarlo (debe leer userSnap).
   (Agente #1 HIGH-4 + Agente #6 + Agente #8)

2. assertFreshToken helper + aplicación en 3 operaciones financieras.

   El runtime de Firebase Functions decodea el JWT pero NO chequea
   tokensValidAfterTime. Sin esto, un token robado o post-revoke sigue
   válido hasta el TTL JWT (~60min). El helper compara auth_time del token
   contra user.tokensValidAfterTime via Admin SDK (mismo patrón que
   requireAdminFresh). Bonus: chequea user.disabled (ban via Console).

   Aplicado en: claimGemNFT, createCryptoPayment, submitGemClaim.
   submitGemClaim usa la forma onRequest equivalente: verifyIdToken(token, true).
   NO aplicado a mineCube (hot path, ~100 calls/sesión); daño con token
   revocado acotado a picks remanentes.
   (Agente #6 CRIT)

3. requestPasswordReset Cloud Function reemplaza sendPasswordResetEmail directo.

   Antes el cliente llamaba Firebase Auth SDK Web → email genérico de Firebase,
   sin revoke de tokens (account takeover playbook clásico) y sin notify al
   user real durante un reset iniciado por atacante con email comprometido.

   Nueva función:
   - Anti-enumeration: rate-limit 3/hora por email + retorno OK siempre.
   - revokeRefreshTokens(uid) ANTES de mandar el link → todas las sesiones
     existentes invalidadas. User real re-loguea con la new password OK
     (token nuevo con auth_time > tokensValidAfterTime). Atacante con
     sesiones activas las pierde.
   - Email branded con texto explícito "tus sesiones fueron cerradas; si no
     fuiste vos ignorá este email — tu password actual sigue OK".

   Login.js actualizado para usar callRequestPasswordReset en lugar del Web
   SDK directo. sendPasswordResetEmail removido de imports.
   (Agente #6 CRIT)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
miningtheblocks added a commit that referenced this pull request Jun 17, 2026
…rkGemRedeemed, payment checkpoint)

Cierra los 3 CRIT del bloque crypto/economy del Audit Round 2 — todos
relacionados con pérdida monetaria silenciosa.

1. effectiveSeed = HMAC(SERVER_SEED, "mtb-seed-v1|serverId|ep:N") en helpers.

   Antes el SERVER_SEED era global: si se filtra (vía malware en máquina
   dev + firebase-tools.json + gcloud secrets versions access), un atacante
   podía pre-calcular TODAS las posiciones de gemas tier-1 ($100k) en TODOS
   los servers presentes Y futuros — leak retroactivo + futuro permanente.

   Con effectiveSeed derivado per (serverId, episodeNumber): un leak del
   SERVER_SEED actual solo compromete las posiciones de los servers
   activos en ese momento. Plan de rotación futura: bumpear el prefix
   "mtb-seed-v1|" a "v2|" + introducir SERVER_SEED_v2 → nuevos servers
   usan v2, los in-flight terminan con v1 (preservando determinismo).

   Backwards-compat: si episodeNumber es null/undefined, se devuelve el
   rootSeed sin derivar — tests existentes (24 passing) pasan sin cambio.
   mineCube siempre pasa episodeNumber explícito.
   (Agente #1 HIGH-12 + Agente #11 CRIT-11-05)

2. runCryptoPaymentProcessing usa checkpoint persistido.

   Antes: ventana fija de 200 bloques hacia atrás (~6.6 min Polygon). Si
   el scheduler se atrasaba (publicnode.com outage, GCF cold start lento,
   function timeout retry), pagos USDC legítimos quedaban fuera de la
   ventana → user paga $15 USDC, doc pendingCryptoPayments expira a los
   30min sin acreditar, soporte humano para reconciliar.

   Ahora: runtime/cryptoPaymentCheckpoint persiste lastBlockProcessed.
   Cada run lee desde checkpoint+1 hasta safeBlock. Si una query RPC falla
   en cualquiera de los 2 contratos USDC, NO se avanza el checkpoint —
   próximo run reintenta el rango (processedTxs/{txHash} previene
   doble-crédito). Cap defensivo de 5000 bloques (~3h) para evitar
   queries gigantes tras un outage largo (los pagos fuera del cap quedan
   en logs para investigación).
   (Agente #8 CRIT)

3. markGemRedeemed Cloud Function para evitar double-pay.

   Antes: el admin pagaba en cash (Stripe/wire/crypto a wallet del user)
   y marcaba la gema como redeemed a mano via Firebase Console. Si el
   admin se olvidaba — o si el user re-submitGemClaim antes de la marca
   — el admin podía pagar 2× la misma gema (hasta $100k tier-1).

   Ahora: callable admin-only que (1) busca la gema por code via
   collectionGroup, (2) TX atómica idempotente que rechaza si ya
   redeemed/minted, (3) registra paymentRef + adminNote + redeemedBy,
   (4) marca el gemClaim asociado (si vino del web claim form),
   (5) audit log en adminActions con código + ownerUid + paymentRef.

   Requiere requireAdminFresh (claim admin verificado fresh via Admin SDK,
   no del token cacheado). No expuesto en src/firebase/functions.js —
   admins lo invocan via script o admin UI futura.
   (Agente #8 CRIT-5)

Tests: 24/24 helpers tests pasan sin cambio. assertFreshToken de Commit B
+ checkRevoked de submitGemClaim ya cubren auth de las funciones tocadas.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
miningtheblocks added a commit that referenced this pull request Jun 17, 2026
Cierra 6 hallazgos críticos pendientes pre-launch. Cambios localizados, sin
refactor estructural.

1. activityFeed TTL `expiresAt` (Agente #12 + #11 HIGH-11-40).
   writeActivity ahora agrega expiresAt = now + 7d. Firestore TTL Console
   borrará docs viejos automáticamente (después de activar la policy —
   pendiente operacional en RUNBOOK).
   Pre-fix: feed crecía infinito → cost amplification + PII histórica.

2. mineCube docId `${K}_${cubeNumber}` (Agente #1 CRIT-1).
   Pre-fix: `mined/${cubeNumber}` colisionaba entre layers. K=100 mina N=5;
   cuando K decrementa a 99 y otro user mina N=5 en K=99, el docId "5"
   colisiona → data mixing.
   Pre-launch: 0 mines reales en producción → forward-only safe.

3. processPendingMints audit log en adminActions (Agente #6 HIGH).
   La invocación manual del cron de mints no quedaba en adminActions, solo
   en Cloud Logging (retención 30d). Para forensic post-incidente esencial.

4. Override global de console.log REMOVIDO (Agente #4 CRIT-FE-06).
   Pre-fix: console.log = wrapper que filtraba un warning de expo-gl.
   Anti-pattern: HMR re-importa el módulo → wrappea otra vez → cadena
   infinita de wrappers. Plus dead code en prod (babel strippea console.log).

5. miningAnimations dead state REMOVIDO (Agente #5).
   const [miningAnimations, setMiningAnimations] = useState(new Map())
   declarado pero setMiningAnimations nunca se llamaba. 3 sites
   referenciaban este state muerto: useEffect cleanup forEach (no-op,
   removido), render loop check hasActiveAnimations (siempre false), comments
   documentan migración a useRef si vuelve la necesidad.

6. getFaceRange() lee del cache faceRangesRef (Agente #5 CRIT-4).
   Pre-fix: iteraba 240k cubeNumbers por call. JSX lo llamaba en cada
   re-render = 15-60×/seg × 240k = 14M iter/seg = stutter Android low-end.
   Fix: cache hit primero (faceRangesRef ya populated por
   recomputeFaceRanges en buildLayer). Loop solo en cache miss.

Bonus: setCorsHeaders unused import removido (post Commit K).

Tests: helpers OK, lint clean, parse OK.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@dependabot dependabot Bot changed the title Bump actions/checkout from 4 to 6 build(deps): bump actions/checkout from 4 to 6 Jun 17, 2026
@dependabot dependabot Bot force-pushed the dependabot/github_actions/actions/checkout-6 branch 2 times, most recently from c875f40 to 4a87720 Compare June 18, 2026 03:15
miningtheblocks added a commit that referenced this pull request Jun 23, 2026
Doc en RUNBOOK de las copias offline del keystore release v2 hechas el
2026-06-23:
- Copia #1: Hitachi sda /run/media/code/datos/keystore-backup-2026-06-23/
- Copia #2: USB Kingston DT 101 G2 (DataTraveler, extraído físicamente)
- Copia #3: off-site (pendiente)

Test recovery EXITOSO 2026-06-23: descifrado con password de Bitwarden,
SHA-256 raw matches 36785fb2...af9f6f64. Próximo test recovery 2027-Q1.

Pre-fix: 1 keystore + 1 .gpg, ambos en el MISMO disco sdb (PNY SSD). Disk
failure = bricked release line forever (mismo modo del v1 perdido).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@dependabot dependabot Bot changed the title build(deps): bump actions/checkout from 4 to 6 build(deps): bump actions/checkout from 4 to 7 Jun 24, 2026
Bumps [actions/checkout](https://github.com/actions/checkout) from 4 to 7.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](actions/checkout@v4...v7)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
@dependabot dependabot Bot force-pushed the dependabot/github_actions/actions/checkout-6 branch from 4a87720 to 3813227 Compare June 24, 2026 00:34
miningtheblocks added a commit that referenced this pull request Jun 25, 2026
Causa raíz (regresión vieja, nunca detectada):
  El fix de seguridad CRIT-1 (Round 2 Agente #1) cambió el docId del backend
  de `${cubeNumber}` a `${K}_${cubeNumber}` para evitar colisiones de mined
  entre capas. functions/index.js:896. El frontend nunca se adaptó —
  `cubeNumberToFaceGrid(id)` hace `Number("99_12345") = NaN` → retorna null
  → el listener skipea TODOS los docs previos.

  Resultado: en cold start `minedCubes` quedaba en `new Set()`. Por eso:
    - Long-press abría el modal en cubos ya minados (findClosestVisibleNumber
      no skipeaba porque minedCubes.has(apiId) era false).
    - La API rebotaba con "already mined" (backend SÍ sabía).
    - Tras "already mined", el flujo manual hacía setMinedCubes(prev=>s.add(apiId))
      con apiId NUMÉRICO, eso disparaba el useEffect retry y pintaba el patch
      "espontáneamente" del cubo recién intentado.
    - Los minados de días atrás nunca aparecían porque nunca pasaban por el
      flujo manual; solo viven en Firestore con docId "K_N" que el listener
      ignoraba.

Fix (DynamicCube201.js:1935):
  - Parsear `ch.doc.id`: si contiene "_" usar split y tomar la N; si no, fallback
    al formato viejo (sólo N) para backward-compat.
  - `idsToAdd.push(n)` con número puro en lugar del docId completo, para que
    `minedCubes` sea consistente con el formato del flujo manual.

No tocamos backend ni rules — el formato K_N es correcto y necesario por CRIT-1.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@dependabot @github

dependabot Bot commented on behalf of github Jul 1, 2026

Copy link
Copy Markdown
Author

Superseded by #32.

@dependabot dependabot Bot closed this Jul 1, 2026
@dependabot dependabot Bot deleted the dependabot/github_actions/actions/checkout-6 branch July 1, 2026 15:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants