preflight key-health probe needs an injected seam (DeployTrainService deps)
Los mantenedores suelen responder en 1 día
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Aptitud para principiantes
- 55/100
- Tipo de issue
- Refactorización
- Claridad
- Bien especificado
- Estado de actividad
- Activo
- Stack tecnológico
- typescript
- Área
- backend
Línea de trabajo
Read DeployTrainService and its preflight dependency definitions, then follow preflightPublish to see how it invokes checkPublishKeyHealth. Update the dependency wiring and the test in tests/unit/deploy-train-service.test.ts to inject a fake probe. Done means that test makes no outbound requests, no suite module-mocks the probe, and production preflight still uses the real check.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Context
#771 added checkPublishKeyHealth to the publish preflight: before the build train runs, the signing key is probed on-chain (getAccessKey against the registry namespace account) so a rotated or exhausted key surfaces as a named preflight error instead of a silent UNKNOWN_TRANSACTION broadcast.
The probe constructs its own Near client (near-signer.ts) and reaches the real registry RPC from inside runPublishTrain — outside every injected seam the train otherwise routes through (RegistryStore, SignerService, fetchConfig).
The breakage it causes
tests/unit/deploy-train-service.test.ts > routes registry reads and signing through the injected tags exercises exactly that train path, so it inherits the probe's real network:
- CI: the hermetic-test guard blocks the outbound fetch → the test times out at 15s (run 41781431180, Framework tests).
- Local: no guard → a real mainnet RPC answers
ed25519: is not a publish key(the fixture's key is empty) →PublishTrainErrorkindpreflight.
Either way the test's actual subject — "registry reads and signing route through the injected layers" — never gets exercised hermetically.
Short-term (already shipped in #772, commit 1c75ba61)
The test stubs the module function:
vi.mock("../../src/services/auth/near-signer", () => ({
...actual,
checkPublishKeyHealth: vi.fn(async () => ({ ok: true })),
}));
That makes the suite green but leaves the probe as a module-level side door: any future train test that forgets this mock inherits a real RPC call.
The proper fix
Route the probe through DeployTrainService deps like every other outbound concern:
PreflightDeps(or the train's deps) gainscheckPublishKeyHealth— default implementationnear-signer's, injectable in tests.preflightPublishcalls it through the deps instead of importing the function directly.deploy-train-service.test.tsdrops the near-signer module mock for the probe and injects a fake through the layer instead (keep the mock only forresolveSigningStrategyif still needed).- The smoke/custody/relay paths that call the real preflight keep the real implementation (no behavior change anywhere in production).
Acceptance
deploy-train-service.test.tsruns with zero outbound network (the hermetic guard stays silent for that file).- No module-level
vi.mockofnear-signer'scheckPublishKeyHealthanywhere in the suite. - Production behavior unchanged: the probe still runs pre-train on real deploys, still soft-fails on an unreachable RPC.
References
- Introduced by #771 (preflight publish-key verification).
- Surfaced by #772 (the relayer bring-up PR whose CI first ran the test hermetically).
- The hermetic-test guard convention: stub the fetch seam / inject the fetch parameter (see the guard's own error message).
- Lenguaje dominante
- TypeScript
- Estrellas
- 5
- Forks
- 4
- Merge medio
- 9 h 33 min
- PR fusionados (30 d)
- 213
Preparar el entorno
- Incluye un Dockerfile o un archivo de Docker Compose
- Sin plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de NEARBuilders/everything-dev
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
NEARBuilders/everything-dev#802 ·
Los mantenedores suelen responder en 1 día
-
unwrapDatabaseError masks real DB errors with TypeError: Cannot convert object to primitive valuePosiblemente ocupada @elliotBraem la tomó hace 1 día. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 74/100
NEARBuilders/everything-dev#798 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
NEARBuilders/everything-dev#696 ·
Los mantenedores suelen responder en 1 día
-
NEAR Builders project-creation prompt: agent should return the project URL, not just the slugAbierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 66/100
NEARBuilders/everything-dev#686 ·
Los mantenedores suelen responder en 1 día
-
auth getContext output omits nearAccountId (plugins re-declare it locally)Posiblemente ocupada @elliotBraem la tomó hace 1 día. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
NEARBuilders/everything-dev#678 ·
Los mantenedores suelen responder en 1 día
Todos los issues de NEARBuilders/everything-dev
Issues similares
-
The sample email preview's ResizeObserver is never disconnected and keeps raising errors after leaving SettingsPosiblemente ocupada Un pull request vinculado a esta issue está abierto o ya se fusionó. Abiertobug
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
Los mantenedores suelen responder en 1 día
-
area:ui bug effort:S priority:P2
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
Los mantenedores suelen responder en 1 día
-
Typo in WSL project description on Projects pagePosiblemente ocupada @akhil9tiet la tomó hoy. Abierto
Dificultad 1/5 Menos de una hora Aptitud para principiantes 75/100
microsoft/opensource.microsoft.com#1066 · 1 comentario ·
-
ArcGIS Maps SDK for JavaScript c-carousel calcite-design-tokens enhancement impact - p3 - not time sensitive needs triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
Esri/calcite-design-system#15565 ·
Los mantenedores suelen responder en 1 día
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
linkwarden/linkwarden#1891 ·
Los mantenedores suelen responder en 1 día