Conversation
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)
There was a problem hiding this comment.
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); | ||
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
¿Qué hace este PR?
¿Por qué?
¿Cómo probarlo?
Checklist
./gradlew testDebugUnitTest/bun test)/ingesto la firma Ed25519, se verificó el cascade de rechazo