Hygiene commit after consolidated brain-retro #6 follow-up. Captures live
runtime state where the fixes are now visibly working:
- STATUS.md regen reflects 917-test sentinel pass.
- episodes-2026-05.jsonl: +50 lines from this session's turns, including
state with source: llm + non-empty task_cost (A1 live evidence).
- pii-counters.json: counter increments from PII filter scans during retro.
- settings.json: linter-normalized hook order (no semantic change).
- .gitleaksignore: prior staged hash entry from parallel session.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Append-only journal capture during the factor-analysis bug-surface session.
Episodes contain live tests of the LLM classifier retry logic (10/10 LLM
success rate post-retry) and the prefilter Layer 1 gate on short prompts.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Эпизоды реальных сессий после hotfix — сторож пишет state + классификацию
на каждый промпт (verified: UUID-session state files). Данные для brain-retro
warn-only ревью.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Bug: gitleaks (rule `ru-phone-unmasked`) caught `79135191264` in 3 lines
of docs/observer/episodes-2026-05.jsonl during brain-retro #3 push
(963379c3). Stop-hook PII-filter was not masking bare-format Russian
phone numbers (without the `+` prefix).
Root cause:
const RU_PHONE = /\+7\d{10}/g; // requires literal '+7'
Free-text observer episodes captured phone `79135191264` in field-value
context (`call client 79135191264` / `phone 79135191264 in payload`),
slipping past the existing filter.
Fix:
const RU_PHONE = /(?:\+7|\b7)\d{10}/g;
The `\b7` branch catches bare format with a word-boundary on the left,
avoiding false-positives inside long digit sequences (timestamps, IDs,
hashes). False-positive guard verified via test:
'id 1796133619135191264999 not a phone' → unchanged.
TDD cycle:
- RED: 3 new tests + 1 sanitizeWithCount test (4 fails on bare phone)
- GREEN: regex extended, 24/24 file tests pass, 373/373 full tools
suite GREEN (0 regressions across 18 files).
Cleanup: applied sanitize() to docs/observer/episodes-2026-05.jsonl;
11 lines touched (3 phone-leak lines + 8 with other PII patterns).
gitleaks now finds 0 leaks in the file.
Pravila §5.2 (no PII in commits) + 152-FZ (phone is regulated PD).
Closes DO-PII-1 (see memory observer-pii-leak-2026-05-23).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Обновлены два места в ПИЛОТ.md:
- «Снимок снят» (line 11) — упоминание выкатки supplier group-sync fix.
- §2 «Развёрнутый прикладной код» (line 31) — детальный отчёт о
фиксе, деплое и ре-тесте на проде. Зафиксировано что осталось
не сделано (16 осиротевших + csv_reconcile spam, UI #4-#7,
финальная чистка qa-tenant'ов).
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Empty infrastructure per ADR-011 + Pravila §16.2. Hook + generators
wire up in subsequent tasks (B2 PII filter, B3 Stop-hook, B5 register
in settings.json, C4 STATUS generator).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>