Commit Graph

268 Commits

Author SHA1 Message Date
8d7af3212b feat(private-dev-public-publish): fill skill body + review hardening v0.2.0
Second pass: filled the empty skeleton (When-to-use, Inputs, Steps, Failure
modes, Side effects, What-NOT) from the design archive
(.workshop/.archive/2026-05-29-skill-private-dev-public-publish.md). 0.1.0 -> 0.2.0.

Non-implementer subagent review found 3 findings, all fixed in this same increment:
- Step 5 dev->pub copy had no meta-exclusion -> would leak .wiki/.tasks/CLAUDE.md
  into the PUBLIC fork. Added explicit meta-exclude + .gitignore backstop +
  git-status check, plus a 4th failure mode for the leak.
- pub-folder origin was never established before Step 5 pushed to it -> Step 4 now
  clones the GitHub fork into pub (origin=fork, upstream=canonical).
- Step 3 "same base" was unmechanized -> clone fork, add gitea remote, push base.

Closes review task: all findings filed and resolved; no follow-ups needed.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-29 17:07:36 +03:00
a079c94a6e meta(private-dev-public-publish): close install + hermes-mapping + test-trigger baseline
- install: skill copied to ~/.claude/skills via install.ps1; confirmed visible in available-skills mid-session
- hermes-mapping: added entry mode:pending, intended auto/software-development (touches git/gh/Gitea-API, tokens, force-push, privacy → audit-gated)
- test-trigger: 4/4 positive fire skill, 3/3 negative route elsewhere (clean-context subagent proxy); zero false-positive, no findings
- review task remains blocked: skill body still empty skeleton, needs second-pass body-fill first

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-29 17:03:17 +03:00
69091868cb feat(skills): add private-dev-public-publish v0.1.0
Skeleton (header + empty body) promoted from
.workshop/.brainstorm/skill-private-dev-public-publish.md. Body filled in a
second pass. No install/push/hermes — handled by baseline tasks.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-29 16:57:36 +03:00
406d12fcf6 meta(tasks): create [private-dev-public-publish-review] in OpeItcLoc03/claude-skills 2026-05-29 09:45:58 +00:00
c1ab75de43 meta(tasks): create [private-dev-public-publish-test-trigger] in OpeItcLoc03/claude-skills 2026-05-29 09:45:39 +00:00
5db210ffa1 meta(tasks): create [private-dev-public-publish-hermes-mapping] in OpeItcLoc03/claude-skills 2026-05-29 09:45:29 +00:00
2842246b10 meta(tasks): create [private-dev-public-publish-install] in OpeItcLoc03/claude-skills 2026-05-29 09:45:22 +00:00
b065496deb fix(skills): meta-host-routing v0.3.0 — naming is meta-<project>, not <project>
v0.2.0 wrongly said the dedicated meta-host shares the project's name. Per
meta-out-of-repo design the convention is meta-<project> (e.g.
OpeItcLoc03/meta-yt-tools), so the bare <project> name stays free for a code
mirror. Fixed resolve step, example, and bootstrap instruction.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 13:33:52 +03:00
4355c34c18 feat(skills): meta-host-routing v0.2.0 — dedicated-host resolve + bootstrap
Resolve order now prefers a dedicated same-name Gitea meta-host (e.g.
OpeItcLoc03/yt-tools) over a shared host (.common). Adds Bootstrapping a
new meta-host section incl. the git add -f gotcha (global core.excludesFile
ignores .wiki/.tasks in fresh clones). yt-tools relocated to its own host
2026-05-27.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 13:33:51 +03:00
a19a23779a feat(skills): add meta-host-routing v0.1.0
Resolve where a project's meta lives before tasks_create/knowledge_ingest/
promotion. Github-hosted projects (or any 'not in cache' in projects-meta)
keep .tasks/.wiki in a sibling Gitea host repo (meta-out-of-repo design),
not in the github tree. Route MCP calls to the host, never guess.

Codified after an agent started writing yt-tools tasks into the github repo
instead of recalling yt-tools meta lives in .common.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 13:33:51 +03:00
9e37c3082d meta(tasks): create [meta-host-routing-review] in OpeItcLoc03/claude-skills 2026-05-27 06:51:49 +00:00
ef1fd8732f meta(tasks): create [meta-host-routing-test-trigger] in OpeItcLoc03/claude-skills 2026-05-27 06:51:35 +00:00
63ea6d7d30 meta(tasks): create [meta-host-routing-hermes-mapping] in OpeItcLoc03/claude-skills 2026-05-27 06:51:27 +00:00
3aa10c8b17 meta(tasks): create [meta-host-routing-install] in OpeItcLoc03/claude-skills 2026-05-27 06:51:20 +00:00
957f4ab091 docs(using-yt-tools): align deprecation stub with shipped plugin install path (v0.4.1)
Stub claimed the plugin's SessionStart hook runs `pipx install yt-tools` (PyPI install). v1 retargeted to plugin-only distribution 2026-05-26 — the hook actually runs `pipx install --force "$CLAUDE_PLUGIN_ROOT[full]"` from the plugin's local clone (PyPI release deferred post-v1). Aligned 3 doc locations:

- frontmatter description (line 4) — describes local-clone install with [full]-default + core fallback.
- "Why the move" § (lines 17-20) — same alignment.
- "How to install the replacement" § (lines 31-35) — same alignment.
- "Source pointers" PyPI link (line 54) — qualifier "(deferred post-v1; not yet published)".

Frontmatter version bumped 0.4.0 → 0.4.1 (PATCH — docs-only, no behavior change). Stub still declares no trigger phrases — remains inert under invoke-by-name to avoid double-activation with the plugin's skill.

Closes part of yt-tools-distrib-docs-sync-pypi-deferred (R4 location 4-of-4).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 10:15:46 +03:00
d83c1c9fec chore(using-yt-tools): deprecate — migrated to OpeItcLoc03/yt-tools plugin (v0.4.0)
This skill is no longer maintained in claude-skills. The canonical source
is now skills/using-yt-tools/SKILL.md inside the OpeItcLoc03/yt-tools
plugin repository, distributed via the OpeItcLoc03/claude-plugins
marketplace.

Replaces the v0.3.2 fully-Russian SKILL body (~250 lines, 3 flows incl.
Locating binaries probe chain + Invoke pattern + Failure modes table) with
a short English deprecation stub.

Frontmatter changes:
- version: 0.3.2 → 0.4.0 (breaking — content reduced to stub, source
  location moved; pre-1.0 convention: minor bumps cover breaking moves)
- description: full English deprecation notice with install command for the
  plugin replacement; intentionally drops all trigger phrases so this stub
  cannot double-activate alongside the plugin's bundled skill once the user
  has installed the plugin.

Body: brief pointer prose — why the move, how to install the plugin
replacement, what to do with this directory after the plugin install
succeeds (delete it), and source pointers to the new repos and design doc.

The plugin distribution is the new source-of-truth: bug fixes, new flows,
trigger updates ship there. This stub will be removed once enough downstream
users have migrated (no fixed timeline; tracked in the yt-tools-distribution
review umbrella).
2026-05-26 08:25:18 +03:00
96112ed000 meta(tasks): close [using-yt-tools-listen-path-shim-investigate] as wontfix
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>
2026-05-25 21:27:26 +03:00
e62769209d test(using-yt-tools): behavioral smoke for yt-listen extension (8/8 + E2E partial — follow-ups filed)
Closes test-trigger task. Per-task .md has full result tables.

Behavioral (4 pos + 3 neg-route + 1 W-NOT-do) — 8/8 green, no follow-ups.
E2E real subprocess (yt-listen URL --timestamps 0:30 --duration 10s):
- 3 artefacts written, content checks 5/5 green (BPM 113.5, Key G# Minor,
  chord G#→D#, RMS 0.14/0.22, centroid 2882 Hz; PNG 1024x384 mel+log+viridis)
- 2 gaps surfaced (NOT skill-defect, scope of follow-ups):
  * naming divergence (audio_*/spectrogram_* vs spec clip_*/spectrum_*)
    → OpeItcLoc03/common :: yt-listen-naming-align (8a67ea3)
  * default Invoke pattern hits broken yt-dlp shim (SRE module mismatch)
    → OpeItcLoc03/claude-skills :: using-yt-tools-listen-path-shim-investigate (9e652a5)

STATUS.md residue cleanup: stale "Next action" continuation lines +
Blocker line removed from the now-🟢 block.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-25 15:38:14 +03:00
8ce0102c17 meta(tasks): close [using-yt-tools-listen-test-trigger] in OpeItcLoc03/claude-skills 2026-05-25 12:36:06 +00:00
9e652a5c19 meta(tasks): create [using-yt-tools-listen-path-shim-investigate] in OpeItcLoc03/claude-skills 2026-05-25 12:35:52 +00:00
1dc286ce9f feat(using-yt-tools): add yt-listen support (audio/FFT) v0.3.2 2026-05-25 13:38:34 +03:00
ffeb95b9cc feat(build): add --prune flag to build.{sh,ps1} [skip-tdd: wrapper]
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].
2026-05-25 13:38:34 +03:00
01993eac45 meta(tasks): close [using-yt-tools-listen-skill-update] in OpeItcLoc03/claude-skills 2026-05-25 10:38:20 +00:00
e871c20272 docs(install): .wiki concept page for install-cross-platform parity
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}.
2026-05-25 13:11:10 +03:00
7ca5a5ad3c feat(install): add --prune flag to install.{ps1,sh} [skip-tdd: wrapper]
For each <name>/ dir in $target that has no matching skills/<name>/,
remove it. Catches stale installs after skill rename/retire
(motivating case: using-synology-ops just removed but install dir
lingered until manual rm).

Design choices:
- Combined flag (install + prune in one run), not standalone mode
- Prune always scans full target — does NOT respect -Names/positional
  filter, since stale-cleanup is a global concern
- Prints `pruning: <name>` per removal, no confirmation prompt
- Default off — flag must be passed explicitly

[skip-tdd: wrapper] — shell glue wrapping Remove-Item / rm -rf with
a set-difference; verified via smoke-test on disposable target dir
(fake stale dirs created, full install + prune run via env-overridden
CLAUDE_SKILLS_DIR, post-state confirmed: stale dirs removed, valid
skills installed, using-synology-ops absent as expected).

Closes 1/3 of [install-ps1] acceptance (the --prune flag). The
remaining doc .wiki/concepts/install-cross-platform.md is deferred
to a follow-up commit.
2026-05-25 13:11:10 +03:00
ce1e04ea30 meta(tasks): create [using-yt-tools-listen-test-trigger] in OpeItcLoc03/claude-skills 2026-05-25 09:51:38 +00:00
f841ed197e meta(tasks): create [using-yt-tools-listen-skill-update] in OpeItcLoc03/claude-skills 2026-05-25 09:51:08 +00:00
d1688f36b8 meta(tasks): close using-vds-ops-description-length-investigate
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).
2026-05-25 08:09:03 +03:00
1987746715 meta(handoff): regen NEXT_SESSION post board-cleanup + synology retire 2026-05-25 07:35:33 +03:00
3f8262b98e feat(retire): drop using-synology-ops skill — NAS decommissioned
Synology NAS permanently retired 2026-05-25. Removing dead-code:

- skills/using-synology-ops/ — source deleted
- dist-hermes/mcp/using-synology-ops/ — built artifact deleted
- hermes/mapping.yaml — entry removed
- skills/using-vds-ops/SKILL.md — stripped NAS-disambiguation
  clause from description + "Mirror of using-synology-ops" line
  from body; bumped 0.1.0 → 0.1.1 PATCH (wording cleanup post-
  retirement, no capability change)

Out of repo (user-config side, manual follow-up):
- ~/.claude/skills/using-synology-ops/ install dir
- ~/.claude.json mcp.synology-ops server entry (dead URL +
  bearer token, must drop)
- C:/Users/vitya/projects/synology-ops-mcp/ source repo —
  separate decision, out of this scope
2026-05-25 07:33:29 +03:00
c62d6c3391 meta(tasks): close 2 synology-ops tasks as wontfix
[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.
2026-05-25 07:30:45 +03:00
3810945b59 meta(tasks): archive done batch 2026-05 → .archive/done-2026-05.md
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'ем, не в этом же коммите.
2026-05-25 07:20:18 +03:00
a62a7ea908 meta(handoff): regen NEXT_SESSION post real e2e smoke [v0.3.3] 2026-05-25 06:55:10 +03:00
f1be677b0a fix(session-handoff): hook command literal path [v0.3.3]
PostToolUse hook in `~/.claude/settings.json` was using
`$env:USERPROFILE` (PowerShell syntax), but Claude Code on
Windows runs hook commands through git-bash. Bash treats `$env`
as an empty variable, leaving `":USERPROFILE\..."` as the literal
`-File` argument — PowerShell fails with "invalid filename
format" and the hook never fires.

Install snippet in hooks/README.md now uses literal absolute
path `C:\Users\<you>\.claude\...` with a "Why literal path"
section explaining why `$env:VAR` / `%VAR%` / `~` all break
through the bash-harness chain on Windows.

Retracts the v0.3.0 "live-hook e2e smoke done" closure — that
result was from synthetic replay through the PowerShell tool,
which bypassed the broken harness chain. Real e2e verification
requires this fix plus a CC restart, then a substantive commit
to observe `additionalContext` surface.
2026-05-25 06:54:15 +03:00
ef6fad727c meta(handoff): regen NEXT_SESSION post live-hook smoke + dist-hermes sync 2026-05-25 00:36:58 +03:00
bcb500bcf5 build(dist-hermes): rebuild from source (wiki 1.1.0, projects-meta 1.2.0) 2026-05-25 00:28:54 +03:00
790f1f41b8 docs(session-handoff): pwsh/powershell choice + restart-after-edit caveat [v0.3.2]
Two findings from live-hook e2e smoke 2026-05-25 on this Windows machine:

(1) README snippet was pwsh-only — PS 7 Core isn't on stock Windows. PS 5.1
(`powershell`) is always present and the hook script runs cleanly under both.
README now leads with `powershell` and notes the `pwsh` swap for PS 7+ users.

(2) Missing caveat that hooks load at Claude Code session start — mid-session
edits to ~/.claude/settings.json don't activate the hook until CC restart.
Without this note user would think the hook is broken after applying the
snippet (standalone smoke would pass but live in-session wouldn't fire).
Added explicit restart instruction + verification recipe.

Also: dist/session-handoff.skill now tracked (was missing since promotion —
inconsistent with other dist/*.skill artifacts that ship in repo).

PATCH bump 0.3.1 → 0.3.2 (docs-only, no behavioral change in hook or skill).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-25 00:24:23 +03:00
e5839bd072 feat(wiki): document session-handoff skill design rationale
Capture the design decisions behind the session-handoff skill in a dedicated
`.wiki/concepts/session-handoff-skill-design.md` page, indexed and logged per
Karpathy LLM Wiki conventions. Covers the problem statement (cold-start fog
between CC sessions), the sliding-overwrite contract for `.tasks/NEXT_SESSION.md`,
the phrase whitelist + anti-pattern guards + ambiguity-asks-not-guesses rule,
the substantive-commit heuristic (prefix exclude AND (body>200 OR files>3) +
first-non-trivial-commit-always exception), the opt-in PostToolUse hook that
replaces agent-side memory with harness-side determinism, the orient+ask read
mode default, project scope guarantee, the five-section handoff content contract,
secret-detect abort, staleness-7d query, mid-task capture, precedent comparison
against using-tasks / MEMORY.md / log.md / Karpathy diary, and the closure
record of cluster 7/7 (install / hermes-mapping / bootstrap-template-extend /
posttooluse-hook / existing-projects-upgrade / test-trigger / review). Source
buffer: `~/projects/.workshop/.archive/2026-05-24-session-handoff-skill.md`
Round 1 design + Round 2 Q1–Q10 resolution.

Also serves as the live-hook e2e smoke artifact for the deferred follow-up from
`[session-handoff-posttooluse-hook]` — substantive commit (feat: prefix, body
well above 200 chars) should trigger the PostToolUse `commit-detector.ps1` hook
just enabled in `~/.claude/settings.json` and emit `hookSpecificOutput.additionalContext`
on the next agent turn.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-25 00:20:17 +03:00
269318dfe5 meta(handoff): regen NEXT_SESSION for cluster 7/7 done [dogfood]
Sliding overwrite после cluster milestone. Manual write по explicit user
direction — substantive-commit hook бы пропустил (предыдущий commit
2673efb prefix meta: в skip-list). Pattern «cluster-milestone regen» —
valid use case вне auto-trigger threshold.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-25 00:14:25 +03:00
2673efb0e7 meta(tasks): close session-handoff cluster 7/7 [test-trigger + review]
Cluster done end-to-end. Test-trigger smoke 15/15 в новой CC сессии:
6 whitelist → write-mode, 4 antipatterns → skip, ambiguity → ASK,
read-mode R1 orient+ask + R2 staleness query, hook H1/H2/H3 + first-commit
exception все matched. Review 6/6 acceptance dimensions ✓ via smoke,
0 findings. Skill v0.3.1 ships unchanged. Caveat: primed-session smoke
(same precedent as using-yt-tools-trigger-smoke-clean-session).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-25 00:13:44 +03:00
36e6259f25 chore(handoff): sliding overwrite NEXT_SESSION.md at session close
End-of-session write-mode invocation (trigger phrase "закрываем сессию").
Updates dogfood handoff with:
- self-referential commit 5f6e4e7 in Recent
- .admin push status (was pending → done)
- new Open трек row for unresolved dist-hermes drift
- guard against committing that drift without owner

Sliding contract — no .archive/handoff-*.md, history via git log.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-25 00:02:56 +03:00
5f6e4e7ed1 feat(handoff): create NEXT_SESSION.md from cluster-5 session [dogfood]
First real session-handoff write-mode invocation — building the skill
and immediately eating own dogfood. Captures handoff for the session
that will pick up [session-handoff-test-trigger] (the last blocker for
[session-handoff-review]).

Sections per SKILL.md spec: Recent commits (8 local + 1 cross-repo),
Open треки (5), Спроси user'а (3), Не делать (5 preemptive guards),
Memory updates (3). Sliding overwrite — history via git log.

Validates:
- Read mode trigger-line discovery (CLAUDE.md now has it)
- Write mode composition (.tasks/STATUS.md + git log + decisions)
- Project-scope invariant (только cwd, никаких других mutations)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-24 23:56:05 +03:00
b3ba22f4aa meta(tasks): fill close-note for [session-handoff-existing-projects-upgrade]
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>
2026-05-24 23:44:48 +03:00
75d70f3a4c wiki(claude): add session-handoff trigger line + close existing-projects-upgrade
claude-skills/CLAUDE.md gains `session handoff: read on start, write on end`
between `pull remote before work` and `follow project discipline` — mirrors
the canonical project-bootstrap template (v1.12.0) and .admin/CLAUDE.md.

Existing-projects-upgrade partial close (2/7):
- ✓ cwd (this commit)
- ✓ .admin/  (separate repo commit 29724d41, NOT pushed)
- ⏭ .workshop  skip (workspace-contract prose, flat trigger doesn't fit)
- ⏭ victor/books, pilorama98.ru, pilonuxt, OpeItcLoc03/common, board-viewer
  deferred — not on this machine, per-machine upgrade in respective sessions

Closes [session-handoff-existing-projects-upgrade] (partial — pattern mirrors
using-yt-tools-test-trigger split-out).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-24 23:43:55 +03:00
d089df7e9f fix(session-handoff): PowerShell hook body char count [v0.3.1]
`(& 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>
2026-05-24 23:41:26 +03:00
cc6c321b57 feat(session-handoff): add PostToolUse commit-detector hook [v0.3.0]
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>
2026-05-24 23:36:04 +03:00
1c0d040347 chore(dist-hermes): rebuild project-bootstrap for v1.12.0
Follow-up to 01bc714 — skills/project-bootstrap/ shipped v1.12.0
(template + Step 5.6 table row) but dist-hermes/ regen was forgotten.
Surfaced when build-hermes ran for the session-handoff mapping task.

Per project-discipline Rule 3 ("rebuild packaged artifact in same or
next commit"), shipping the regen now to keep dist-hermes/ coherent
with skills/.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-24 23:15:12 +03:00
358ba143eb meta(hermes): register session-handoff (mode: pending, intended: auto/productivity)
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>
2026-05-24 23:14:11 +03:00
01bc7147c9 feat(project-bootstrap): canonical template + Step 5.6 add session-handoff trigger [v1.12.0]
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>
2026-05-24 23:10:03 +03:00
90c5be7c88 fix(skills): session-handoff yaml desc, double-quote [v0.2.1]
Bare-scalar description contained `: ` (colon-space) inside backticks
(`Триггер-строка CLAUDE.md ` + literal trigger-line containing `: `).
Strict YAML parser treated the inner `: ` as nested mapping → description
field dropped → harness fallback to H1 → skill listing showed
"session-handoff: session-handoff" (trigger phrases non-functional).

Fix: wrap entire description in double-quotes. Shrink 650→462 chars
(865→555 bytes) by moving substantive-commit heuristic, sliding-overwrite
detail, and project-scope clause to body Steps/Side/Failure sections
(already documented there). All 6 session-end triggers + 4 skip phrases
+ trigger-line preserved verbatim.

Bump 0.2.0 → 0.2.1 PATCH (frontmatter wording, no behavior change).
Closes [session-handoff-install]; unblocks [session-handoff-test-trigger].

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-24 21:56:30 +03:00