Investigation finding: SRE module mismatch не воспроизводится на DESKTOP-NSEF0UK.
Three yt-dlp installs coexist:
- Python313\Scripts\yt-dlp.exe (system pip, first on PATH)
- ~\.local\bin\yt-dlp.exe (uv tool install, Python 3.14.3)
- ~\pipx\venvs\yt-tools\Scripts\yt-dlp.exe (pipx-bundled, Python 3.12.13)
All three return --version exit 0. All three interpreters import `re` cleanly.
yt-listen shims в ~/.local/bin и в pipx venv — byte-identical (SHA256 match).
Smoke-test diagnosis «uv-managed cpython-3.12 corrupt» вероятно misdiagnosis —
реальный виновник скорее всего был corrupt _sre.pyd в Python313 system install
(первый на PATH). uv с тех пор bumped 3.12 → 3.14.3, что независимо могло
залечить состояние. SKILL.md "Locating binaries" уже даёт корректный
fallback chain (PATH → ~/.local/bin → legacy venv); добавлять
\$HOME\pipx\venvs\yt-tools\Scripts приоритетным не нужно.
Closed wontfix без SKILL change.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Symmetric to install-side --prune (e871c20). Removes
dist/<name>.skill files whose <name> is not in skills/*.
Design choices match install:
- Combined flag (build + prune in one run)
- Global scan, ignores -Names / positional filter
- Default off, print-and-delete, no confirmation
Bash wrinkle: when build.sh delegates to powershell.exe -File
build.ps1 (Windows-without-zip case), --prune is NOT forwarded.
Bash runs prune itself at the end of the script against the
shared dist/. Keeps the delegation surface narrow and the prune
logic single-sourced per shell.
[skip-tdd: wrapper] — same carve-out as install-side, smoke-test
evidence: fake dist/fake-stale-{sh,ps}.skill files created in real
dist/, ran build.{sh,ps1} --prune, verified fakes removed, real
caveman.skill etc. left intact.
Wiki .wiki/concepts/install-cross-platform.md extended:
- title broadened (Install → Install / Build)
- new "Build-side --prune" section
- scope note: dist-hermes/ is separate (managed by build-hermes.py)
Closes [install-ps1-build-prune-followup].
Closes 3/3 acceptance of [install-ps1]:
- (a) install.ps1 existed
- (b) --prune flag shipped in 6cf0e98
- (c) concept page now written
.wiki/concepts/install-cross-platform.md captures:
- why two scripts (PS for native-Win, sh for Linux/Mac)
- parity contract (shared invariants, flag-naming convention)
- --prune design choices and rejected alternatives
- scope boundary (install-side only; dist/.skill prune is separate)
Index + log updated per .wiki/CLAUDE.md schema.
STATUS.md: [install-ps1] ⚪ → 🟢, new ⚪ task
[install-ps1-build-prune-followup] filed for the analogous
flag on build.{sh,ps1}.
Empirical close: 1473-char description on using-vds-ops works
(7/7 smoke-test PASSED, listing shows full text, no fallback).
Memory note feedback_skill_description_length_limit.md was
paranoid — deleted from user memory (not in repo).
YAML colon-space gotcha memory kept (different concern, valid).
[using-synology-ops-disambiguation-uplift] ⚪ → 🟢
[using-synology-ops-review] ⚪ → 🟢
Reason: Synology NAS decommissioned permanently 2026-05-25.
Disambiguation between NAS and VDS for shared container names
(traefik etc.) is moot when only VDS exists. Review acceptance
criteria have no target — both the MCP endpoint and the host
fleet are gone.
Full skill retire (delete skills/using-synology-ops/, hermes
mapping entry, ~/.claude/skills/ install, MCP server registration,
dist-hermes rebuild) tracked as separate next-commit operation.
STATUS.md 1467 → 239 lines (-84%), 70 → 11 active blocks.
Archive: 21 → 57 done blocks (full snapshot, replaces prior partial).
Перемещено 36 done-блоков из STATUS.md в .archive/done-2026-05.md
(uses-yt-tools cluster, tdd-criteria rollout, bootstrap fixes,
session-handoff cluster, using-vds-ops/using-synology-ops promo,
interns-grep-audit, recommend-dont-menu, project-creation-lifecycle,
project-discipline-brainstorm-workspaces).
Один heading-emoji flip: [bootstrap-fix-tdd-recommend-template] ⚪ → 🟢
(ship-commit aac9088 2026-05-07 был авторитативным, ⚪ heading stale;
duplicate **Next action** spec block stripped at the same time).
[tasks-board-cleanup-2026-05] остаётся ⚪ в STATUS.md — по NB таски,
её закрытие идёт следующим batch'ем, не в этом же коммите.
Previous commit 75d70f3 flipped the heading and _Updated_ but the body
edit silently fell through (multi-block replace miss). The block still
read "Status: ready / Where I stopped: (not started)" with the original
Path A/B next-action list — inconsistent with the 🟢 heading.
Filling the close-note now: 2 done (cwd + .admin/29724d41), 1 skip
(.workshop — workspace-contract format mismatch), 4 deferred (not on
this machine).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
`(& git log -1 --format='%b')` in PowerShell collapses multi-line subprocess
output into string[]. The threshold check used `$body.Length` which on a
string[] returns the line count, not char count — so the body>200 condition
was effectively comparing "more than 200 lines", which is much harder to
meet. Files-count saves it in practice for big commits, but small-file
big-message commits were under-detected.
Fix: join the array back into a single string with `-join "`n"` before
measuring length. Verified via stdin-pipe smoke against current HEAD:
body chars now report 1255 (vs 29 before — the line count).
POSIX `.sh` variant unaffected — `$()` collapses output and `${#var}` is
char count.
Bump 0.3.0 → 0.3.1 PATCH (bugfix, no behavior contract change).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Hooks live in skills/session-handoff/hooks/:
- commit-detector.ps1 Windows/PowerShell
- commit-detector.sh POSIX (python3 for JSON parsing)
- README.md opt-in instructions, cross-platform settings.json
snippets, smoke procedure
Hook reads PostToolUse stdin, detects substantive `git commit` (prefix
not in meta/docs/style/chore + fix typo, AND body >200 chars OR files >3).
On hit, emits hookSpecificOutput.additionalContext so Claude Code
surfaces a system reminder next iteration. Silent skip on --amend, failed
commits, non-git cwd, trivial prefix, below thresholds.
install.sh deliberately does NOT mutate settings.json — opt-in via the
README hook config snippet, applied once per machine. SKILL.md body
mentions the hook as an optional alternative to the agent-side
behavioral heuristic.
Bump 0.2.1 -> 0.3.0 MINOR (new opt-in capability, backward-compatible —
SKILL keeps working without the hook).
Deferred (separate follow-ups if needed):
- live-hook e2e smoke (would interfere with current session commits)
- rebase/cherry-pick batch deduplication
Closes [session-handoff-posttooluse-hook] (partial: stdin smoke,
live-hook deferred).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Without an entry, scripts/build-hermes.py fails ("unmapped skill" — every
skill in skills/ must appear in mapping exactly once). Registered under
the pending block alongside using-yt-tools and using-vds-ops because the
skill has bidirectional file-system side effects (read/write
.tasks/NEXT_SESSION.md) and warrants a behavioral audit before promotion.
intended.category = productivity (mirrors using-tasks/setup-tasks —
workflow-state continuity primitive, not engineering toolchain).
Build now reports 28 skills (14 auto / 2 manual / 9 skip / 3 pending).
SKIPPED.md gains an entry under "Pending" with the intended block
preserved across MVP iterations.
Closes [session-handoff-hermes-mapping].
Promotion to mode: auto deferred to a separate post-audit task.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
CLAUDE.md.template gains `session handoff: read on start, write on end`
between `pull remote before work` and `follow project discipline`
(session-lifecycle clustering). Step 5.6 trigger->fulfiller table gains
the corresponding row (template ↔ table source-of-truth invariant).
Greenfield-bootstrap'ed projects now ship handoff trigger из коробки.
Existing projects unaffected — CLAUDE.md merge in Step 5 is idempotent
and respects user removals.
Bump 1.11.0 -> 1.12.0 MINOR (new canonical trigger = new capability,
backward-compatible). dist/project-bootstrap.skill rebuilt.
Closes [session-handoff-bootstrap-template-extend].
Unblocks [session-handoff-existing-projects-upgrade] Path B.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Add 3 routing-table rows for the new deterministic `grep_audit` intern
per .wiki/concepts/interns-grep-audit-design.md §Layer 3:
- grep_audit row — deterministic, no LLM call, zero cost
- bulk_text_read vs grep_audit boundary — Q&A vs contains-check
- always-ask uniform reminder — server opens file even sans LLM
Consistency adds: new Overview catalog row, Tool quick reference row,
prose note marking grep_audit as the catalog's first LLM-free intern.
Version 0.2.2 -> 0.3.0 (MINOR — new routing capability).
Closes [interns-grep-audit-skill-updates] on the .tasks board.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- skill-body-venv-invocation: venv activation documented in Prerequisites, step 0 added to flows, v0.2.2→0.2.3
- windows-powershell-path-doc-fix: README now covers both bash+PowerShell subshells, v0.1.5→0.1.6
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- [using-yt-tools-skill-body-venv-invocation]: SKILL.md Prereq/Steps не упоминает venv-activation / full-path invocation; concurrent сессия упёрлась в `yt-frames: command not found`.
- [using-yt-tools-windows-powershell-path-doc-fix]: prior fix покрыл только git-bash subshell, PowerShell subshell имеет ту же restart-after-winget проблему симметрично.
Origin: real-time observation в concurrent CC сессии после /reload-plugins (vitya@DESKTOP-NSEF0UK, 2026-05-20). Local-write workaround — gitea down.
[using-yt-tools-review] ⚪ → 🟢. Fresh-eyes subagent reviewer (no impl
priming) prošёл все 4 acceptance dimensions:
- Flow A PASS — URL OmJ-4B-mS-Y (Domain of Science, 11:06 en),
transcript header + paragraph segmentation OK, 3 frames at
4:23/4:41/8:16 visually consistent with chosen paragraphs.
- Flow B PASS — URL gCfzeONu3Mo (TED-Ed), 1 frame at 2:00, no
transcript dependency.
- Failure modes PASS — broken URL exit 1; --lang zz proxy для
no-captions exit 1 с available-langs hint; non-YouTube URL
«cannot extract video id».
- What NOT to do PASS — rules agent-side policy, CLI не
contradicts; --mode interval/scene flags существуют, но spec
явно их называет в prohibition (intentional).
3 nice-to-have findings зафайлены как ⚪ siblings:
- [using-yt-tools-empty-cache-dir-on-failure] — yt-transcript
mkdir до фетча captions, на abort оставляет пустую папку.
- [using-yt-tools-frames-multiline-stdout] — SKILL.md обещает
single-line EOF path, но yt-frames с N timestamps выдаёт N
строк «Wrote: <path>». Spec/CLI mismatch.
- [using-yt-tools-warning-mojibake] — yt-dlp warnings на Windows
console показывают «�» вместо unicode quotes (cp1251 vs UTF-8).
No blockers, no functional break. Закрытие по «findings зафайлены»
ветке review-acceptance.
Tasks_create через MCP сорвался на write-side (Gitea POST 404,
known bug cluster — preview OK, confirm fails); все 4 правки
сделаны через local-file edit.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>