airvzxf / airvzxf/moodle-quiz-extractor

feat(diagnostics): two-tier diagnostic ring buffer + safe report

Ouverte
#39 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub
enhancement
Langage dominant
TypeScript
Étoiles
0
Forks
0
Métriques de merge des PR
Aucune PR mergée en 30 j

Description

## Resumen

Diagnóstico two-tier de solo código, sin contenido del usuario:

- Ring buffer 200 por pestaña en `storage.session` (TTL 30 min),
reusando exactamente el patrón de `PopupSessionStore`/`JobStore`.
- Eventos con schema Zod cerrado: `{ stage, code, questionNumber? }`.
Sin timestamp, sin tabId, sin URL, sin título, sin mensaje, sin jobId.
Sin strings libres (enums cerrados de stage y códigos `MQX-*`).
- Background estampa timestamp y deriva tabId del `sender.tab`.
Mutaciones serializadas por pestaña (cola por tabId).
- Safe report: solo {schemaVersion, generatorVersion, manifestVersion,
counts por stage/código, secuencia {stage, code}} SIN timestamp
exacto, SIN tabId, SIN originHash, SIN título. Doble gate de
canarios antes de serializar.
- Pestaña 'Diagnóstico' del popup habilitada. UI: botón 'Ver reporte
(safe, local)' que llama al background y muestra el snapshot.
- Sin red: el reporte vive solo en el popup (no se envía a ningún
servidor). Cero permisos nuevos, cero telemetría.

## Módulos

### `src/diagnostics/diagnostics-types.ts` (NUEVO)
Enums cerrados para stage y códigos (subset curado de `MQX`).

### `src/diagnostics/logger.ts` (NUEVO)
`RingBufferLogger` puro, ring 200, snapshot inmutable.

### `src/diagnostics/safe-report.ts` (NUEVO)
`buildSafeReport(snapshot, generatorVersion, manifestVersion)`
aplica Zod + canary-gate.

### `src/background/diagnostics-store.ts` (NUEVO)
`DiagnosticsStore` espejado de `PopupSessionStore`, clave
`mqx:diag:`, TTL 30 min.

### `src/messaging/runtime-messages.ts` (extendido)
+3 schemas: `logEvent`, `collectDiagnostics`, `safeReportResult`.
Retro-compatibles (`safeParse`).

### `src/entrypoints/background.ts`
Handlers `logEvent` (background-only, no devuelve nada) y
`collectDiagnostics` (devuelve SafeReport).

### `src/entrypoints/content.ts`
Emite eventos code-only en extract / parse / fill / blocked.

### `src/entrypoints/popup.html`
Habilita `#tab-diagnostics`; sustituye placeholder por UI real.

### `src/popup/main.ts`
`wireDiagnostics()` + botón 'Ver reporte (safe, local)'.

### Tests (NUEVOS)
- `tests/unit/diagnostics-types.spec.ts`
- `tests/unit/logger.spec.ts`
- `tests/unit/safe-report.spec.ts`
- `tests/unit/diagnostics-store.spec.ts`
- `tests/security/diagnostics-redaction.spec.ts`

## Validación

- `pnpm compile`: limpio.
- `pnpm test`: verde.
- `pnpm lint:ext`: solo los 2 warnings `DANGEROUS_EVAL` preexistentes.
- `pnpm redact`: limpio.
- Smoke manual: ver 'Ver reporte' tras un extract; verificar que el
snapshot solo contiene códigos.

Guide de contribution

Aucun guide de contribution indexé pour ce dépôt

Évaluation

Cette issue n'a pas encore été évaluée.

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.