docs: bootstrap .planning/ via /gsd-ingest-docs (2 docs) /home/parf/projects/work/repremium/.planning/PROJECT.md /home/parf/projects/work/repremium/.planning/REQUIREMENTS.md /home/parf/projects/work/repremium/.planning/ROADMAP.md /home/parf/projects/work/repremium/.planning/STATE.md /home/parf/projects/work/repremium/.planning/intel /home/parf/projects/work/repremium/.planning/INGEST-CONFLICTS.md /home/parf/projects/work/repremium/.ingest-manifest.yaml

This commit is contained in:
2026-05-15 15:16:30 +02:00
parent 555eb0543f
commit 89ca09ccec
12 changed files with 1637 additions and 0 deletions

View File

@@ -0,0 +1,227 @@
# Functional Requirements (synthesized from SPEC §4§7, acceptance §10)
The SPEC `Тз расширение фаза1.md` does not formally label itself as a PRD set,
but sections 47 describe user-visible / functional behavior and §10 lists
acceptance criteria. Per the orchestrator's instruction, these are extracted
here as requirements with IDs derived `REQ-{slug}`.
Source key:
- `SPEC §X``Тз расширение фаза1.md`, section X
- `DOC``README.md`
All requirements below are sourced from the SPEC; the DOC is a confirming
source unless noted otherwise.
---
## REQ-video-ring-buffer
- Source: `Тз расширение фаза1.md` §4.1
- Scope: Continuous video capture of the active tab
- Description: The extension MUST maintain an in-memory ring buffer containing
the most recent 30 seconds of video from the currently active browser tab.
- Acceptance criteria (from SPEC §10):
- Video buffer runs continuously on any tab.
- The buffer never holds more than 30 seconds of footage.
- The bundled `last_30sec.webm` from the exported archive plays back in a
browser.
- Technical bindings (see decisions.md):
- DEC-003 — `chrome.tabCapture.capture()` for acquisition
- DEC-003 — `video/webm; codecs=vp9` @ 400 000 bps, 2000 ms chunks
- DEC-009 — header chunk retained indefinitely
- Confirming source: `README.md` §"Использование" and §"Кольцевой буфер".
---
## REQ-rrweb-dom-buffer
- Source: `Тз расширение фаза1.md` §4.2
- Scope: DOM event recording
- Description: The extension MUST record DOM events via rrweb over a rolling
10-minute window from the active page, capped at 5 000 events.
- Acceptance criteria (from SPEC §10):
- rrweb records DOM events without errors on typical pages (forms, tables,
modal windows).
- Technical bindings:
- DEC-004 — rrweb library
- DEC-004 — `maskInputSelector` for `input[type=password]` and
`[data-sensitive="true"]`
- SPEC §8 — 5 000-event cap; oldest dropped on overflow
- SPEC §4.2 — 10-minute TTL purge every 60 s
- Confirming source: `README.md` §"Кольцевой буфер".
---
## REQ-user-event-log
- Source: `Тз расширение фаза1.md` §4.3
- Scope: User and runtime event logging
- Description: The extension MUST log user and runtime events over a rolling
10-minute window.
- Captured event types (SPEC §4.3):
- `click` — click on any element; records `target` selector and element text
- `input` — field value change (passwords excluded)
- `navigation``popstate`, `hashchange`, page transitions
- `js_error``window.onerror`, `window.onunhandledrejection`
- `network_error``fetch` / `XMLHttpRequest` with response code `>= 400`
- Log entry schema (SPEC §4.3, verbatim):
```json
{
"timestamp": 1716800000000,
"type": "click | input | navigation | error | network",
"target": "CSS-селектор элемента",
"value": "текст/значение (маскируется для паролей)",
"url": "текущий URL",
"meta": {}
}
```
- Acceptance criteria (from SPEC §10):
- Event log captures clicks, navigation, and network errors.
- Passwords do not appear in either the event log or rrweb snapshots.
- Confirming source: `README.md` §"Записываемые события".
---
## REQ-screenshot-on-export
- Source: `Тз расширение фаза1.md` §4.4, §5
- Scope: One-shot visual capture
- Description: At the moment the user clicks "Save archive", the extension MUST
capture a PNG screenshot of the active tab via `chrome.tabs.captureVisibleTab`
and include it as `screenshot.png` in the archive.
- Technical binding: DEC-008.
---
## REQ-popup-ui
- Source: `Тз расширение фаза1.md` §5
- Scope: User-facing trigger
- Description: The extension MUST expose a minimal popup with a single button
labeled "Сохранить отчёт об ошибке" and a sub-label "Последние 30 сек видео
+ 10 мин лога".
- Button state machine (SPEC §5):
- `idle` → `Сохраняю...` → `Готово! ✓` → `idle` (after 3 s)
- On-click behavior (SPEC §5):
1. Capture screenshot of active tab.
2. Request video buffer + event log from Service Worker.
3. Request rrweb snapshots from Content Script.
4. Assemble archive (see REQ-archive-layout).
5. Trigger download via `chrome.downloads.download()`.
6. Display "Готово! ✓" status.
- Confirming source: `README.md` §"Использование".
---
## REQ-archive-layout
- Source: `Тз расширение фаза1.md` §6
- Scope: ZIP archive structure
- Description: The archive MUST be named
`session_report_YYYY-MM-DD_HH-MM-SS.zip` and contain exactly:
```
session_report_2025-05-15_14-32-10.zip
├── video/
│ └── last_30sec.webm # склеенные чанки видеобуфера
├── rrweb/
│ └── session.json # массив DOM-событий rrweb
├── logs/
│ └── events.json # лог действий пользователя
├── screenshot.png # скриншот в момент сохранения
└── meta.json # метаданные сессии
```
- Acceptance criteria (from SPEC §10):
- Archive opens cleanly.
- `last_30sec.webm` plays back in a browser.
- Confirming source: `README.md` §"Структура архива" (byte-identical layout).
---
## REQ-meta-json-schema
- Source: `Тз расширение фаза1.md` §6
- Scope: Archive metadata
- Description: `meta.json` inside the archive MUST conform to the schema:
```json
{
"timestamp": "2025-05-15T14:32:10Z",
"url": "https://...",
"userAgent": "Chrome/...",
"extensionVersion": "1.0.0",
"videoBufferSeconds": 30,
"logDurationMinutes": 10,
"totalEvents": 143
}
```
- Fields are required (SPEC does not mark any optional).
---
## REQ-manifest-permissions
- Source: `Тз расширение фаза1.md` §7
- Scope: Browser permission surface
- Description: The extension MUST declare exactly the permission set in DEC-011
and MUST request user gesture for `tabCapture` on first activation.
- Acceptance criteria (from SPEC §10):
- Extension installs in Chrome without errors.
---
## REQ-archive-export-latency
- Source: `Тз расширение фаза1.md` §10 (acceptance)
- Scope: Performance — archive delivery
- Description: From the moment the user clicks the export button, the ZIP
archive MUST land in the "Downloads" folder in under 5 seconds.
- Confirming source: `README.md` §"Критерии приёмки Фазы 1".
---
## REQ-password-confidentiality
- Source: `Тз расширение фаза1.md` §4.2, §4.3, §8, §10
- Scope: Sensitive data handling
- Description: Passwords MUST NOT appear in either rrweb snapshots or the user
event log. Masking MUST be enforced by:
- rrweb `maskInputSelector` covering `input[type=password]` and
`[data-sensitive="true"]`
- the event logger explicitly filtering value capture for password fields
- Acceptance criteria (from SPEC §10):
- Passwords do not leak into either output stream.
- Confirming source: `README.md` §"Маскирование чувствительных данных".
---
## REQ-install-clean
- Source: `Тз расширение фаза1.md` §10
- Scope: Installability
- Description: The extension MUST install in Chrome without errors via the
unpacked-extension load flow.
- Confirming source: `README.md` §"Установка расширения в Chrome".
---
## Phase 1 Acceptance Criteria (full list, SPEC §10 verbatim)
For traceability, all SPEC §10 acceptance criteria are listed here once. Each
is also referenced from one or more REQ-* entries above.
1. The extension installs in Chrome without errors. → REQ-install-clean,
REQ-manifest-permissions
2. The video buffer runs continuously on any tab. → REQ-video-ring-buffer
3. The buffer always contains no more than 30 seconds of video. →
REQ-video-ring-buffer
4. rrweb records DOM events without errors on typical pages (forms, tables,
modal windows). → REQ-rrweb-dom-buffer
5. The event log captures clicks, navigation, and network errors. →
REQ-user-event-log
6. On button press, the archive is downloaded to "Downloads" in < 5 seconds. →
REQ-archive-export-latency
7. The archive opens; `last_30sec.webm` plays back in a browser. →
REQ-archive-layout, REQ-video-ring-buffer
8. Passwords do not appear in the log or rrweb snapshots. →
REQ-password-confidentiality
9. Extension RAM consumption does not exceed 50 MB in the background. → see
`constraints.md` CON-ram-ceiling (NFR, not a functional REQ).