Skip to content

"Encontrado" feature (#36) - #37

Open
vmlcode wants to merge 6 commits into
developfrom
main
Open

"Encontrado" feature (#36)#37
vmlcode wants to merge 6 commits into
developfrom
main

Conversation

@vmlcode

@vmlcode vmlcode commented Jul 17, 2026

Copy link
Copy Markdown
Owner

¿Qué hace este PR?

¿Por qué?

¿Cómo probarlo?

  • [ ]
  • [ ]

Checklist

  • Los tests existentes siguen pasando (./gradlew testDebugUnitTest / bun test)
  • Si toca el wire format o el protocolo de malla, se actualizó el lado complementario (Android ↔ backend)
  • Si toca /ingest o la firma Ed25519, se verificó el cascade de rechazo

vmlcode and others added 6 commits July 1, 2026 08:41
chore: remove Bun feedback documentation and add backend URL configur…
Release: promote develop → main
Release: promote develop → main (readme wording + launcher icon)
Release: promote develop → main (landing page + waitlist)
Copilot AI review requested due to automatic review settings July 17, 2026 18:50

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Este PR incorpora la feature “Encontrado” (found reports) al contrato compartido + backend + Android (nuevo frame firmado y su flujo de ingest/validación), a la vez que refuerza la canonicidad/estabilidad criptográfica (JSON canónico para hashing/firmas) y reubica la landing a guacamalla-landing/landing con build integrado en el backend/Docker.

Changes:

  • Agrega el found frame v1 (118 B firmado con dominio) y utilidades/geo para verificación + cálculo de proximidad.
  • Endurece hashing/firmas para soportar jsonb key-order normalization y añade piezas de control/ledger/CRL.
  • Migra y configura la landing fuera del workspace raíz y actualiza scripts/build/Docker para servir el SPA desde el backend.

Reviewed changes

Copilot reviewed 103 out of 182 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
packages/shared/src/types.ts Nuevos tipos: control/CRL/prevHash
packages/shared/src/shared.test.ts Test: hash estable con jsonb
packages/shared/src/mesh/index.ts Exporta control/found frames
packages/shared/src/mesh/foundFrame.test.ts Tests del found frame
packages/shared/src/mesh/constants.ts Constantes control/found v1
packages/shared/src/index.ts Re-export de módulos shared
packages/shared/src/geo.ts Haversine compartido
packages/shared/src/crypto.ts Hash canónico + prevHash
packages/shared/src/crl.test.ts Tests CRL rescatistas
packages/shared/src/control.test.ts Tests receipts/control
packages/shared/src/canonical.ts Serialización JSON canónica
package.json Scripts + landing path
guacamalla-landing/landing/vite.config.ts Config Vite SPA + proxy
guacamalla-landing/landing/tsconfig.json TS bundler config
guacamalla-landing/landing/src/styles.css Estilos/animaciones nuevas
guacamalla-landing/landing/src/main.tsx Entry React
guacamalla-landing/landing/src/lib/utils.ts cn() helper
guacamalla-landing/landing/src/lib/reveal.ts Hook reveal IO
guacamalla-landing/landing/src/lib/i18n.ts i18n con store global
guacamalla-landing/landing/src/hooks/use-mobile.tsx Hook isMobile
guacamalla-landing/landing/src/components/ui/tooltip.tsx UI tooltip
guacamalla-landing/landing/src/components/ui/toggle.tsx UI toggle
guacamalla-landing/landing/src/components/ui/toggle-group.tsx UI toggle group
guacamalla-landing/landing/src/components/ui/textarea.tsx UI textarea
guacamalla-landing/landing/src/components/ui/tabs.tsx UI tabs
guacamalla-landing/landing/src/components/ui/table.tsx UI table
guacamalla-landing/landing/src/components/ui/switch.tsx UI switch
guacamalla-landing/landing/src/components/ui/sonner.tsx UI toaster wrapper
guacamalla-landing/landing/src/components/ui/slider.tsx UI slider
guacamalla-landing/landing/src/components/ui/skeleton.tsx UI skeleton
guacamalla-landing/landing/src/components/ui/sheet.tsx UI sheet
guacamalla-landing/landing/src/components/ui/separator.tsx UI separator
guacamalla-landing/landing/src/components/ui/scroll-area.tsx UI scroll area
guacamalla-landing/landing/src/components/ui/resizable.tsx UI resizable panels
guacamalla-landing/landing/src/components/ui/radio-group.tsx UI radio group
guacamalla-landing/landing/src/components/ui/progress.tsx UI progress
guacamalla-landing/landing/src/components/ui/popover.tsx UI popover
guacamalla-landing/landing/src/components/ui/pagination.tsx UI pagination
guacamalla-landing/landing/src/components/ui/navigation-menu.tsx UI nav menu
guacamalla-landing/landing/src/components/ui/label.tsx UI label
guacamalla-landing/landing/src/components/ui/input.tsx UI input
guacamalla-landing/landing/src/components/ui/input-otp.tsx UI OTP input
guacamalla-landing/landing/src/components/ui/hover-card.tsx UI hover card
guacamalla-landing/landing/src/components/ui/form.tsx UI form helpers
guacamalla-landing/landing/src/components/ui/drawer.tsx UI drawer
guacamalla-landing/landing/src/components/ui/dialog.tsx UI dialog
guacamalla-landing/landing/src/components/ui/command.tsx UI command palette
guacamalla-landing/landing/src/components/ui/collapsible.tsx UI collapsible
guacamalla-landing/landing/src/components/ui/checkbox.tsx UI checkbox
guacamalla-landing/landing/src/components/ui/card.tsx UI card
guacamalla-landing/landing/src/components/ui/button.tsx UI button
guacamalla-landing/landing/src/components/ui/breadcrumb.tsx UI breadcrumb
guacamalla-landing/landing/src/components/ui/badge.tsx UI badge
guacamalla-landing/landing/src/components/ui/avatar.tsx UI avatar
guacamalla-landing/landing/src/components/ui/aspect-ratio.tsx UI aspect ratio
guacamalla-landing/landing/src/components/ui/alert.tsx UI alert
guacamalla-landing/landing/src/components/ui/alert-dialog.tsx UI alert dialog
guacamalla-landing/landing/src/components/ui/accordion.tsx UI accordion
guacamalla-landing/landing/src/components/site/Showcase.tsx Sección showcase
guacamalla-landing/landing/src/components/site/ProofPacket.tsx Sección proof packet
guacamalla-landing/landing/src/components/site/ProofBand.tsx Banda métricas
guacamalla-landing/landing/src/components/site/Nav.tsx Navbar + idioma
guacamalla-landing/landing/src/components/site/Logo.tsx Logo component
guacamalla-landing/landing/src/components/site/Hero.tsx Ajuste anchor scroll
guacamalla-landing/landing/src/components/site/Footer.tsx Footer
guacamalla-landing/landing/src/components/site/Asterisk.tsx SVG asterisk
guacamalla-landing/landing/src/components/site/Architecture.tsx Sección arquitectura
guacamalla-landing/landing/src/components/MagicRings.d.ts Tipos MagicRings
guacamalla-landing/landing/src/components/MagicRings.css Estilos MagicRings
guacamalla-landing/landing/src/App.tsx Layout landing
guacamalla-landing/landing/package.json Deps/scripts landing
guacamalla-landing/landing/index.html HTML base
guacamalla-landing/landing/eslint.config.js ESLint config
guacamalla-landing/landing/components.json shadcn config
guacamalla-landing/landing/bunfig.toml Bun supply-chain guard
guacamalla-landing/landing/AGENTS.md Instrucciones Lovable
guacamalla-landing/landing/.prettierrc Prettier config
guacamalla-landing/landing/.prettierignore Prettier ignores
guacamalla-landing/landing/.gitignore Git ignores
guacamalla-landing/landing/.env.example Env waitlist URL
guacamalla-landing/landing/.claude/settings.json Claude plugin settings
Dockerfile Build landing + backend
CHANGELOG.md Changelog “Encontrado”
backend/src/security/validation.ts Canal encontrado válido
backend/src/security/auth.ts Compare keys via SHA-256
backend/src/resolve/evidence.ts HMAC privado + path validation
backend/src/mesh/controlFrame.ts Decode/verify control frame
backend/src/ledger/store.ts Store ledger in-memory
backend/src/ledger/routes.ts Rutas ledger read + cursor
backend/src/index.ts CSP helmet + nuevas rutas
backend/src/found/processFound.ts Ingest found + proximidad
backend/src/found/processFound.test.ts Tests processFound
backend/src/dashboard/routes.ts Comentario CSP actualizado
backend/src/crypto/signer.ts Payload canónico al firmar
backend/src/crypto/keys.ts No clave efímera en prod
backend/src/control/replayStore.ts Replay guard in-memory
backend/src/control/replayRepo.ts Replay repo supabase/fallback
backend/src/channels/sanitize.ts Canonicaliza payload público
backend/src/channels/sanitize.test.ts Test coarsening encontrado
backend/package.json Fastify/plugins update
backend/.env.example Nuevas envs (found/CRL/resolve)
backend_final.md Doc /ingest foundFrames
app/expo-env.d.ts Stub expo env types
android/app/src/test/kotlin/net/guacamaya/ui/SignalRadarTest.kt Tests radar GPS/RSSI
android/app/src/test/kotlin/net/guacamaya/ui/BodyBearingSweepTest.kt Tests bearing sweep
android/app/src/test/kotlin/net/guacamaya/proto/FoundPayloadTest.kt Tests found payload
android/app/src/test/kotlin/net/guacamaya/proto/ChatFrameTest.kt Tests chat frame
android/app/src/test/kotlin/net/guacamaya/ble/RadioPolicyTest.kt Tests policy
android/app/src/test/kotlin/net/guacamaya/backend/OfficialRecordVerifierTest.kt Ajuste golden vector
android/app/src/test/kotlin/net/guacamaya/aware/NanSyncTest.kt Tests NAN digest/duty
android/app/src/main/kotlin/net/guacamaya/ui/SignalRadar.kt Lógica radar UI
android/app/src/main/kotlin/net/guacamaya/ui/MapViewModel.kt markFound + chat flows
android/app/src/main/kotlin/net/guacamaya/ui/BodyBearingSweep.kt Bearing sweep
android/app/src/main/kotlin/net/guacamaya/time/MeshClock.kt Clock offset GPS
android/app/src/main/kotlin/net/guacamaya/proto/ChatFrame.kt Chat codec/proto
android/app/src/main/kotlin/net/guacamaya/ingest/MuleCrlStore.kt Verifica/instala CRL
android/app/src/main/kotlin/net/guacamaya/ingest/IngestUploadWorker.kt Logs + inject control + found verdicts
android/app/src/main/kotlin/net/guacamaya/crypto/Signer.kt signMessage + derivePublicKey
android/app/src/main/kotlin/net/guacamaya/ble/RadioPolicy.kt Engine hysteresis
android/app/src/main/kotlin/net/guacamaya/ble/ChatRuntime.kt Runtime chat relay
android/app/src/main/kotlin/net/guacamaya/ble/ChatBroadcaster.kt BLE advertiser chat
android/app/src/main/kotlin/net/guacamaya/ble/Broadcaster.kt Params override
android/app/src/main/kotlin/net/guacamaya/backend/RecordJson.kt Doc canonical payload
android/app/src/main/kotlin/net/guacamaya/backend/OfficialRecordVerifier.kt Doc canonical payload
android/app/src/main/kotlin/net/guacamaya/backend/AlertsRepository.kt Pinned backend pubkey
android/app/src/main/kotlin/net/guacamaya/aware/NanSync.kt Digest/duty cycle
android/app/src/main/kotlin/net/guacamaya/aware/NanMessenger.kt Digest support + duty cycle
android/app/src/main/AndroidManifest.xml Move debug intents out
android/app/src/debug/AndroidManifest.xml Debug intent filters + permission
android/app/build.gradle.kts Minify/shrink + pubkey pin

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +89 to +94
function serializeEvent(event: unknown) {
// LedgerEvent contains Uint8Array fields (issuerPublicKey, payloadHash, proof
// bytes, optional eventSignature). JSON.stringify coerces Uint8Array to
// {"0":n,"1":n,...}; we want hex. Use the canonical wire form via toJsonValue.
return toJsonSerializable(event);
}
@railway-app
railway-app Bot temporarily deployed to intuitive-luck / production July 17, 2026 19:03 Inactive
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.

4 participants