Commit Graph

69 Commits

Author SHA1 Message Date
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
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
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
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
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
30330df63a feat(skills): session-handoff body filled, bump 0.1.0 -> 0.2.0
MINOR bump — skeleton (v0.1.0) gets functional 6-section body. Source: .workshop/.archive/2026-05-24-session-handoff-skill.md (Round 1 design + Round 2 resolved Q1-Q10).

Body sections: When to use (read/write triggers + skip patterns), Inputs (read/write), Steps (read 5 + write 5), Failure modes (incl. secret-detection abort), Side effects (sliding overwrite + git-tracked, no global state), What NOT to do (no auto-execute, no append-with-archive, no cross-project, no SessionEnd-hook dependency).

Still skeleton from claude-skills/ POV: no install.sh run, no push, no hermes/mapping.yaml entry — those remain in baseline tasks (session-handoff-install / -hermes-mapping / -test-trigger / -bootstrap-template-extend / -review umbrella).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-24 21:44:32 +03:00
eb9e9823ba feat(skills): add session-handoff v0.1.0
Promoted from .workshop/.brainstorm/session-handoff-skill.md (Round 1 design + Round 2 resolved 2026-05-24, Q1-Q10).

Skeleton only — header + empty 6-section body. Body filled in second pass from .workshop/.archive/2026-05-24-session-handoff-skill.md.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-24 21:44:32 +03:00
0accdccaac feat(using-interns): add grep_audit routing [v0.3.0]
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>
2026-05-22 08:02:57 +03:00
52922a6ce4 using-interns v0.2.2: proactive offer trigger
Скил активируется при распознавании task-shape (3+ файлов /
>400 строк / transcript distill), не только на явной фразе.
Без этого описанный workflow «Identify candidate → ask» не
запускался у агента до явной просьбы пользователя.
2026-05-21 23:31:51 +03:00
93a37f9aa5 feat(setup-wiki, using-wiki): add contradictions/ and open-questions/ as canonical page types
Extends Karpathy LLM Wiki canon with two new artifact types alongside
existing entities/concepts/packages/sources. Inspired by community
discussion that highlighted explicit tracking of surfaced tensions and
unanswered questions as missing aggregation points in the canonical
layout — they currently get scattered into concepts/ or lost in log.md.

Scope is schema-level only — no new ingest behaviour prescribed. Policy
on when to escalate an inline `> **Противоречие:**` flag into a
contradictions/<slug>.md page (and the analogous flow for
open-questions) stays the user's call.

setup-wiki [v1.0.0 → v1.1.0, MINOR — additive page types]:
- Discovery (Phase 1) now requires 6 content dirs for `noop` mode
- Phase 2 plan blocks list new dirs in greenfield + migrate
- CLAUDE.md schema template gains two page-type entries with status
  enums (contradictions: open|resolved|accepted-divergence;
  open-questions: open|answered|obsolete)
- index.md template gains two empty sections
- Phase 4a .gitkeep list, Phase 4b mkdir + touch, Phase 5 verify count
  (four → six dirs), Phase 6 report count all updated
- README.md layout tree + content-dirs sentence

using-wiki [v1.0.0 → v1.1.0, MINOR — additive type values]:
- Prerequisites: four → six content directories
- Page frontmatter type enum: + contradiction | open-question
- Per-type frontmatter extensions documented (status + affects/touches)
- File naming patterns: + contradictions/<slug>.md, open-questions/<slug>.md
- index.md sections-by-type list updated
- README.md mirrors SKILL.md changes

dist/: setup-wiki.skill + using-wiki.skill rebuilt.

project-bootstrap inline reference block intentionally untouched — it's
labelled "Reference (for context only — setup-wiki is the source of
truth)" and drift-tolerant by design.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-21 21:36:28 +03:00
ef3d38e79d feat(setup-interns, using-interns): secrets at ~/.config/projects-secrets/
Aligns claude-skills with secrets-out-of-common etap-1 migration: the
canonical home for plain-text local-dev secrets is now ~/.config/projects-secrets/,
outside any git tree.

setup-interns [v0.3.0 → v0.4.0, MINOR — write target changed]:
- Phase 1 drops gitignore-sanity check (no longer needed)
- Phase 2 plan block drops Gitignore line
- Phase 3 backs up ~/.config/projects-secrets/interns.env if present
- Phase 5 writes ~/.config/projects-secrets/interns.env (mkdir -p ahead)
- Phase 6 cwd documentation: secrets path no longer relative to cwd; uses
  INTERNS_SECRETS_PATH env var (or ~/.config default) — independent
- Common-mistakes drops "missing gitignore rule" entry

using-interns [v0.2.0 → v0.2.1, PATCH — wording]:
- Always-ask paths section reflects new canonical secrets home
- Prerequisites text updates setup-interns write target

interns-design.md (wiki concept): path refs updated for ASCII layer
  diagram, Layer 1 example block, Phase 5 description, comparison
  table, and final cross-cutting note. **/projects-secrets/** added
  to always-ask documentation pattern.

dist/: setup-interns.skill + using-interns.skill rebuilt.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-21 14:22:51 +03:00
49f653256c feat(skills): add using-vds-ops v0.1.0 (promoted from OpeItcLoc03/vds-ops-mcp .wiki/concepts/vds-ops-mcp-design.md §6)
Skeleton only — header + empty 6-section body. Mirror of using-synology-ops
for the Rusonyx VDS docker stack. Body fill-in is a follow-up pass.

Baseline tasks created in OpeItcLoc03/claude-skills:
- using-vds-ops-install
- using-vds-ops-hermes-mapping (mode=pending, MCP tools touched)
- using-vds-ops-test-trigger
- using-vds-ops-review (umbrella, blocked-by impl)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-21 08:46:29 +03:00
7475d4d413 fix(using-yt-tools): add pipx-shim probe + anti-recreate-venv guard v0.3.1
Bug surfaced in field: agent in another session probed only legacy venv
location, found empty (post-pipx-migration), then took install-hint
verbatim and started recreating the venv we just deleted — destructive
cleanup paradox.

Three fixes:
- Add `~/.local/bin/yt-frames.exe` as known location #2 in probe chain
  (between PATH and legacy venv). pipx is now recommended install per
  yt-tools README; shim lives there.
- Rewrite install-hint to pipx-first (pip install --user pipx; pipx
  ensurepath; pipx install --editable ~/projects/.common/lib/yt-tools).
- Add explicit 'NOT to do' rule: do NOT recreate deleted venv if
  pipx-shim exists. Empty .venv/ + present pipx-shim means PATH issue
  (run pipx ensurepath + restart shell), not missing package.

Failure-modes table updated to reflect three-step probe chain and the
recreate-venv anti-pattern.
2026-05-20 15:09:42 +03:00
b827d06d9b fix(using-yt-tools): resolve binaries via venv/winget fallback v0.3.0
Skill no longer aborts on bare `Get-Command yt-frames` miss — binaries
installed in project-local venv or winget cache (Gyan.FFmpeg_*) are
valid install sites, just not on PATH for fresh shells.

New Step 0 in both flows: probe PATH first, then known install
locations (venv Scripts/bin, winget Gyan.FFmpeg_*/ffmpeg-*-full_build/bin);
abort only if both empty. PATH-prepend pattern documented (full-path
to yt-frames.exe is insufficient — child yt-dlp/ffmpeg need prepend
too).

Failure modes table updated: removed 'restart CC session' advice —
agent can't restart itself, and resolve-fallback makes it unnecessary.

MINOR bump per project-discipline (behaviour change in resolve logic).
2026-05-20 14:55:57 +03:00
971bcd9155 fix(using-yt-tools): document venv activation or full-path CLI invocation v0.2.2→0.2.3
Prerequisites: explicit table with two options (activate venv vs full-path).
Steps: added step 0 (venv activation) to both Flow A and Flow B.
Acceptance: agent can now invoke CLI without "command not found" error.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 14:43:37 +03:00
b2c1a213b3 fix(using-yt-tools): describe per-CLI stdout contract [v0.2.1→0.2.2]
Closes finding [using-yt-tools-frames-multiline-stdout]: the previous
"Last line каждого CLI's stdout — absolute path артефакта" wording matched
yt-transcript / yt-watch reality but quietly misled callers about yt-frames,
which emits one ``Wrote: <abs path>`` line per extracted frame (designed
that way per ``yt_tools/frames.py`` docstring so streaming consumers don't
have to parse a trailing summary; ``tests/test_cli_smoke.py:81`` enforces
the prefix).

Chose spec-fix over code-fix: changing yt-frames to bare paths would break
the existing piping/scraping contract — bigger surface than the docs typo
this finding actually is. SKILL.md now spells out per-CLI stdout shape and
notes warnings/errors go to stderr.

PATCH (wording clarification, no behavior change).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 13:35:51 +03:00
9fdd48b605 fix(using-yt-tools): tighten SKILL.md v0.2.0→0.2.1
- description: 860→340 chars (remove implementation fluff)
- timestamps: add bare seconds example (123 → 2:03)
- stdout: clarify "CLI designed for single-line EOF"
- cache: add cumulative warning (20 videos = 1-4 GB)
- failure modes: add malformed URL to yt-dlp failures

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 13:06:38 +03:00
4956beba5f feat(using-yt-tools): SKILL.md body fill (2 flows) [0.1.0 → 0.2.0]
Fill the v0.1.0 stub body. Description rewritten to document two distinct flows
(was iterative-only, even though triggers already listed targeted-frames phrases):

- Flow A — iterative-watch (transcript → pick anchors → frames): for "what's
  in this video / summary / о чём ролик / video summary / youtube transcript"
- Flow B — targeted-frames (frames only, no transcript): for "посмотри 1:23 /
  покажи кадр на N / что показано на N" — user already named timestamps,
  transcript fetch would be pure waste

Body sections filled (6): When/Prereq/Inputs/Steps/Failure/Side/NOT — Flow A
and Flow B distinguished throughout. Failure modes table covers missing CLI,
missing yt-dlp/ffmpeg (with Windows winget+PATH note), network/private/age-
gated, subs-disabled. What NOT to do explicitly forbids the "always-iterative"
trap that the v0.1.0 description implicitly invited.

Bump version 0.1.0 → 0.2.0 (MINOR — documents new capability set). Description
744 chars (under 900-char soft budget; well below ~1024 hard limit). Installed
to ~/.claude/skills/using-yt-tools/ via scripts/install.ps1 — harness skill-
listing renders full description, not truncated to H1.

STATUS.md: closes new [using-yt-tools-skill-body-fill] 🟢 (filed+closed
in-place since this is one body-fill task, not a multi-session workstream).
[using-yt-tools-review] stays 🔵 — body-fill blocker removed, but still
blocked on [using-yt-tools-trigger-smoke-clean-session] (needs fresh CC
session). Caveat recorded: body-fill was done by implementer instead of the
'fresh agent' the review-task originally specified — explicit user approval.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 12:39:40 +03:00
bd0a116399 feat(skills): add using-yt-tools v0.1.0 (promoted from .workshop/.brainstorm/yt-tools.md) 2026-05-20 09:27:21 +03:00
02db589034 feat(skills): using-synology-ops 0.1.1→0.1.2 — fill body
Filled all sections from source docs:
- ~/projects/.workshop/.archive/2026-05-12-using-synology-ops-skill.md
- ~/projects/.wiki/concepts/synology-ops-mcp-design.md

Sections: When to use (triggers), Inputs, Steps (4 flows),
Failure modes, Side effects, What NOT to do (mistakes + red flags).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-12 20:39:48 +03:00
f14b579429 fix(skills): using-synology-ops 0.1.0→0.1.1 — extend skip-rule with non-NAS hosts
Behavioral fire-test of trigger phrases (10 parallel general-purpose subagents,
each phrase as isolated user message, META: skills_invoked= parsed) revealed
one false-positive: «restart-loop in books-pipeline» fired the skill despite
books-pipeline not being a NAS-hosted container — static-pass prediction
confirmed (implicit NAS-context discriminator, LLM keyed on `restart-loop`
without host check).

Tuning: extended skip-rule with non-NAS hosts examples
(`books-pipeline`, `vps-*` etc. — only the 6 listed above are NAS-hosted).
Description 941 chars / 1024 limit. PATCH bump (fix only, no new triggers).
Retest of NEG#3 → PASS (subagent quoted new skip-rule). Final 10/10.

Closes [using-synology-ops-test-trigger]; unblocks [using-synology-ops-review]
(ready, baseline tasks all 🟢, but body still <пусто> stub — separate debt).

dist-hermes/mcp/using-synology-ops/SKILL.md regenerated via build-hermes.py.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-12 20:39:48 +03:00
9ae4253ca0 feat(skills): add using-synology-ops v0.1.0 (promoted from .workshop/.brainstorm/using-synology-ops-skill.md) 2026-05-12 19:30:16 +03:00
6d503b16dc feat(skills): project-bootstrap@1.11.0 — .gitignore meta-isolation block
Step 1 now ships agent meta-paths inversions (`!.claude/`, `!.tasks/`,
`!.wiki/`, `!.brainstorm/`, `!.archive/`, `!.mcp/`, `!.mcp.json`,
`!MEMORY.md`) so own greenfield/upgrade projects re-enable visibility
against the global `core.excludesFile` cutter (`~/.config/git/ignore`)
that hides obvyaska from forks of upstream open-source. Without it any
fresh bootstrap landed an empty first commit on machines with the global
configured: setup-wiki/setup-tasks/Step 5 created .wiki/.tasks/CLAUDE.md
but git ignored them.

Two cases handled in Step 1:
- no .gitignore → write template (block included unconditionally)
- existing .gitignore → marker-based (`# AI обвеска — слой 2:`)
  append-if-missing; idempotent on re-run

Smoke-tested in %TEMP%\test-bootstrap-meta-iso: all 3 acceptance
criteria pass + negative control (strip block → global hides) +
idempotency (re-run with marker present skips). Source concept:
workshop wiki concepts/meta-out-of-repo.md. Closes board task
[meta-isolation-bootstrap-skill-update].

MINOR bump (1.10.1 → 1.11.0) — new feature, backward-compat.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-10 14:27:59 +03:00
1e15a5319d feat(skills): multi-owner v2.x sweep — using-projects-meta v1.2.0 + setup-projects-meta v1.1.0
- using-projects-meta 1.1.0 → 1.2.0: examples qualified (`victor/books`, `OpeItcLoc03/claude-skills`), `target_project` description rewrites _meta → `agenda` literal + bare-name reject; new common-mistake row; cross-ref to `concepts/projects-meta-multi-owner`.
- setup-projects-meta 1.0.1 → 1.1.0: auth.toml template now reflects v2.x schema (`gitea_owners`, `agenda_tasks_repo` qualified, optional `gitea_aggregate_skip_owners`); added schema-notes block with backwards-compat for legacy `gitea_user`-only installs.
- closes [update-using-projects-meta-qualified-names] + [update-setup-projects-meta-auth-toml] (last 2 of 14 multi-owner umbrella blockers).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-09 20:53:57 +03:00
627a183b3e feat(update-claude-skills): add update skill + scripts [v0.1.0]
New skill and cross-platform scripts that automate the full uplift cycle:
git pull → conditionally rebuild MCP servers → install skills → version
diff → reload hints. Claude-Code-only (Hermes uses hermes-installer-skill).

- scripts/update.sh: bash version (Linux/macOS/git-bash)
- scripts/update.ps1: PowerShell version (Windows)
- skills/update-claude-skills/SKILL.md: thin wrapper, detects platform
- hermes/mapping.yaml: mode: skip (Claude-Code-only)
- dist/update-claude-skills.skill: built archive
- .tasks/STATUS.md: task marked done

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-07 14:04:27 +03:00
90d066bb7f fix(setup-interns): clone common monorepo, not nonexistent interns-mcp repo
The interns-mcp source lives inside the `OpeItcLoc03/common` monorepo
(at ~/projects/.common/), not as a separate `interns-mcp` repo on Gitea.
The previous commit incorrectly wrote `git clone .../interns-mcp`.

Now the clone-fallback correctly:
- If ~/projects/.common/.git exists but lib/interns-mcp/ is missing:
  git -C ~/projects/.common pull --ff-only (stale clone, needs fresh subdirs)
- If ~/projects/.common/ is absent:
  git clone .../common.git ~/projects/.common (fresh clone of monorepo)
- Added "wrong repo" to Common mistakes section
- Added monorepo scope note to Out of scope section

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-07 13:24:31 +03:00
54ba5caf5a fix(setup-interns): absolute paths + gitea clone fallback [v0.3.0]
- Replace all `<project-root>/.common/...` with `~/projects/.common/...`
  (POSIX-absolute paths, mirroring setup-projects-meta after the
  using-projects-meta-fix-paths fix). The cwd-relative form broke
  when Claude was launched from System32 or another non-project dir.
- Add git clone fallback: when `interns-mcp` source is absent, clone
  from `https://git.kzntsv.site/OpeItcLoc03/interns-mcp` instead of
  stopping with "initialize first". Mirrors setup-projects-meta Phase 4.
- Remove "source must be in place" from Out of scope (now handled).
- Fix MCP registration cwd to `~/projects` (base dir containing .common/).
- Bump version 0.2.0 → 0.3.0 (MINOR — new capability: clone fallback).

Closes [setup-interns-fix-paths] + [setup-interns-clone-fallback].

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-07 13:17:57 +03:00
aac9088091 fix(project-bootstrap): v1.10.1 — add missing tdd-criteria + recommend-dont-menu to CLAUDE.md template + prose
Bug: v1.10.0 bump + Step 5.6 map added these 2 canonical triggers, but the
CLAUDE.md template literal (lines 339-342) and corresponding prose paragraphs
were not updated. Symptoms: upgrade-mode on repos missing these 2 triggers
detected "already canon" and skipped insertion, leaving gaps.

Fix:
- Template: added `follow tdd-criteria` after `follow project discipline`,
  added `recommend, don't menu` after `delegate to interns when allowed`
- Prose: added 2 new paragraphs describing each trigger with install hints
- Version: 1.10.0 → 1.10.1 (PATCH — completing what 1.10.0 claimed)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-07 12:05:35 +03:00
94b4c441e6 fix(tdd-criteria): review findings — v0.1.0→v0.2.0
- Remove session-authorship trigger loophole (applies to ALL code changes)
- Add composite-tasks paragraph (criterion applies per artefact, not per task)
- Add refactoring carve-out (existing passing tests sufficient, no new tests)
- Expand file-extension list (go, rs, java, rb, ex, swift, kt, cs, php)
- Clarify wrapper line-count (non-blank non-comment lines)
- Add spike-survivor fallback (TODO/GitHub issue if no .tasks/)
- Fix "чужая schema" → "foreign schema" in algorithm + design doc
- Define TDD procedurally (red→green→refactor) in Default mode section
- Sync design doc with same changes
- Rebuild dist + dist-hermes + reinstall

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-07 10:12:59 +03:00
e566df4303 feat(project-bootstrap): add tdd-criteria to canonical triggers [v1.10.0]
- Add "follow tdd-criteria" to assets/CLAUDE.md.template
- Add row to Step 5.6 trigger→fulfiller map
- Bump 1.9.0 → 1.10.0 (MINOR — new canonical trigger)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-07 09:08:43 +03:00
954f8ba2d7 feat(skills): tdd-criteria skill v0.1.0 [TDD-default + 4 carve-outs + 4 anti-loophole rules incl. test-immutability]
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-07 08:23:52 +03:00
b0d2d5169a feat(using-tasks): pre-close coverage gate + local-first recommendations [v1.1.0]
Part A — Pre-close coverage gate. ### Task completion now lists acceptance
criteria from the per-task file before setting 🟢; missing evidence → ask
the user. New section ### Post-commit task closure prompt: after a feat:/fix:
commit the agent asks "эта работа закрывает таску <slug>?" so shipped code
doesn't sit under stale  blocks (cf. extend-project-discipline-brainstorm-
workspaces / project-creation-lifecycle-skill, both shipped before close).

Part B — Local-first recommendations at session-start / "what next" triggers.
cwd-project board (🔴🟡) leads; cross-project urgents are at most one
footnote line. Explicit "по всем проектам" flips the order. Pairs with
using-projects-meta's local-first read rule.

Bump 1.0.0 → 1.1.0 (MINOR — adds two new operation types; task block
suggested PATCH but Rule 3 grades these as capability additions). Closes
[using-tasks-close-coverage-gate] (next commit).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-06 23:49:09 +03:00
011a8b42f2 feat(recommend-dont-menu): add skill + integrate into project-bootstrap [v0.1.0 / v1.9.0]
- Add `recommend-dont-menu` skill: overrides superpowers:brainstorming
  to give single argued recommendations instead of menus
- Integrate into project-bootstrap:
  - Add "recommend, don't menu" trigger to CLAUDE.md template
  - Add row to Step 5.6 trigger→fulfiller table
- Bump project-bootstrap 1.8.0 → 1.9.0 (MINOR — adds trigger)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-06 22:49:56 +03:00
215afddfa7 feat(project-discipline): add Rule 5 — transit-zone workspaces
Artifacts go to .brainstorm/ or global wiki only via explicit user
direction, never auto-promote by analogy. Fixes gap where brainstorm
outputs in meeting-room/. were incorrectly promoted to .wiki/concepts/
without user command.
Version 0.1.0 → 0.1.1 (MINOR — adds rule).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-06 22:36:02 +03:00
23431c5e4a feat(project-bootstrap): add greenfield-full mode with remote create
Three modes now: greenfield-full (new + remote), add-remote, upgrade.
Step 0: detect git/remote/empty state for mode selection.
Step 1.5: Gitea API repo create + push.
Step 8: projects-meta sync for visibility.
Version 1.7.0 → 1.8.0 (MINOR).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-06 22:34:39 +03:00
81af7825b6 feat(interns): add repo_read routing to using-interns + Node/repomix checks to setup-interns [v0.2.0]
using-interns: overview table 2→3 interns, routing hints for repo_read
vs bulk_text_read, tool quick reference row. setup-interns: Phase 0
adds node --version check + optional repomix pre-warm.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-06 07:02:42 +03:00
6e4f3f481b refactor(skills): dedup compress -> caveman-compress [v1.0.0]
skills/compress/ was a byte-identical dupe of skills/caveman-compress/
(SHA256 match across all 7 scripts/ files; SKILL.md diff was name: +
Process step 2 only; descriptions textually identical = arbitrary
harness tie-break + double-counted listing budget).

Kept caveman-compress canonical: it carries README.md (benchmarks +
caveman-toolkit branding) and SECURITY.md (Snyk false-positive writeup),
and matches the caveman-* prefix invariant.

Ported the better Process-step wording from compress
(`cd <directory_containing_this_SKILL.md>`) into caveman-compress;
the prior `cd caveman-compress` form assumed cwd was the parent dir
and broke when invoked from ~/.claude/skills/caveman-compress/.

Added version: 1.0.0 to caveman-compress frontmatter
(first versioned release; aligns with skill-versioning concept).

Removed: skills/compress/, dist/compress.skill,
~/.claude/skills/compress/ (manual prune; install.sh has no prune step
yet -- future [install-ps1] task should add --prune).

Slash-command impact: /compress gone; /caveman-compress and
/caveman:compress (toolkit-canonical) remain.

Wiki: .wiki/concepts/compress-dedup.md (rationale + rejected
alternatives), index.md + log.md updated.

Tasks: [compress-dedup] flipped active -> done in same commit
(per-task file .tasks/compress-dedup.md created with full decisions
log).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-05 21:49:44 +03:00
8c547d73af feat(project-bootstrap): generic Step 5.6 skill-deps check
Collapse Step 5.6 from a single-skill detector (only the
superpowers@claude-plugins-official plugin) into a generic
`trigger -> fulfiller` table walker that scales to every canonical
CLAUDE.md trigger.

Inline 9-row map in SKILL.md covers: caveman, superpowers (kind: plugin),
using-wiki, using-tasks, using-projects-meta, pulling-before-work,
project-discipline, using-interns, active-platform. The `kind` flag
(skill | plugin) drives which install command is emitted in the chat-only
recommendation block. Detection paths: ~/.claude/skills/<name>/SKILL.md
for skills, plugins.<id> in ~/.claude/plugins/installed_plugins.json
for plugins.

Algorithm: read project's CLAUDE.md -> match each non-comment line vs
map (substring + tolower, mirrors Step 5 idempotent merge) -> for each
canonical match check disk -> print one chat block listing every missing
fulfiller with copy-pasteable install commands, OR a single
"all dependencies satisfied" line. User-custom lines and removed
canonical lines are silently skipped. Hard rule "never auto-install"
preserved verbatim.

version: 1.6.0 -> 1.7.0 (MINOR per project-discipline Rule 3 -- adds
capability, absorbs prior superpowers-only detector cleanly).

Closes [bootstrap-skill-deps-check] (.tasks/STATUS.md done).
Closes [bootstrap-recommend-projects-meta] by absorption -- the deferred
mirror task was the seed of this generalization; the generic walker now
handles using-projects-meta along with everything else, no per-skill
mirror needed.

Design rationale at .wiki/concepts/bootstrap-skill-deps-check.md:
- why generic over per-skill mirrors (5x mirror explosion)
- skill vs plugin kind distinction
- MCP-server-backed skills (only check using-X policy skill;
  setup-X self-fires via Prerequisites pointer)
- source-of-truth invariant: SKILL map + assets/CLAUDE.md.template
  must stay in sync (a future CI lint could enforce)
2026-05-05 21:21:19 +03:00
2f7943f06f fix(setup-projects-meta): canon path table -> .common/lib
SKILL.md Phase 5 platform-path table (lines 152-154) had stale
~/.local/projects-meta-mcp; replace with ~/projects/.common/lib/
projects-meta-mcp to match real install canon (body Phase 4 clone
target + ~/.claude.json mcpServers.projects-meta.args[0]).

version: 1.0.0 -> 1.0.1 (PATCH, doc consistency).

Closes [using-projects-meta-fix-paths] (.tasks/STATUS.md done).
Sibling task [migrate-to-common-lib] in projects-meta-mcp closed
the same day with matching path migration.
2026-05-05 21:14:06 +03:00
001f4c566b feat(skills): update setup-projects-meta paths for .common/lib/
- Replace ~/.local/projects-meta-mcp → ~/projects/.common/lib/projects-meta-mcp
- Update setup-projects-meta and using-projects-meta skills
- Rebuild dist/ with new paths

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-05 20:35:59 +03:00
0eb7dd1d7c feat(interns-skills-mvp): ship setup-interns + using-interns v0.1.0; project-bootstrap 1.5.0 -> 1.6.0
setup-interns (v0.1.0) — 8-phase install of the local `interns` MCP server:
detect `.common/lib/interns-mcp/` source, `pip install -e`, write
`.common/secrets/interns.env` with endpoint API keys (gitignored), register
`mcpServers.interns` in `~/.claude.json` with absolute Python interpreter
path + `cwd` so the runtime resolves config relative to project root.
Mirrors setup-projects-meta / setup-context7 confirmation-gate shape.
Description 899 chars (under the 900 budget per
feedback_skill_description_length_limit).

using-interns (v0.1.0) — runtime policy for `mcp__interns__*`. Per-session
permission grant mirrors project-discipline Rule 4: ask-mode default,
conversational grant ("разреши интернов" / "allow interns"), conversational
revoke, always-ask paths for `**/.env`, `**/secrets/**`, `**/*.key`,
`**/.ssh/**`, `**/.aws/credentials` etc with transitive rule (Claude can't
bypass by reading the file with the local Read tool and forwarding content),
cost-cap >$0.10 always asks, session-end automatic reset. Routing hints for
`bulk_text_read` (3+ files or one file >400 lines) and `transcript_distill`
(before .wiki/log.md updates / session summaries). Description 814 chars.

project-bootstrap (1.5.0 -> 1.6.0, MINOR — capability added):
* assets/CLAUDE.md.template: insert `delegate to interns when allowed`
  between `follow project discipline` and `we're on Windows`.
* SKILL.md Step 5: same insertion in inline template + new commentary
  paragraph explaining the trigger, no-op semantics, install pointer.
* SKILL.md Step 5.5: bootstrap-manifest table extended with
  `setup-interns`, `using-interns`, `project-discipline` rows.
* README.md: Workflow Step 5.5 description + See also section both pick up
  the new skills.

Root CLAUDE.md dogfood: `delegate to interns when allowed` line added.
.wiki/log.md decision entry. .tasks/STATUS.md task moved to 🟢 done.
.tasks/interns-skills-mvp.md per-task file with goal / key-files /
decisions log / open questions.

Build + install verified: `dist/{setup-interns,using-interns,
project-bootstrap}.skill` rebuilt; `bash scripts/install.sh ...` succeeded;
harness skill listing shows full descriptions for all three (no H1
fallback) — confirms the description budget held.

Versioning per project-discipline Rule 3:
* setup-interns: 0.1.0 (first edit of unversioned artifact, MAJOR=0).
* using-interns: 0.1.0 (first edit of unversioned artifact, MAJOR=0).
* project-bootstrap: 1.5.0 -> 1.6.0 (MINOR — adds capability without
  breaking existing CLAUDE.md merge or manifest consumers).

Server runtime itself (`.common/lib/interns-mcp/`) is out of scope for this
task — the skills land lifecycle, policy, and bootstrap integration so any
machine where the MCP server is later installed already has Claude's
policy in place.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-05 17:41:11 +03:00
96dd6d1cb6 refactor: update setup-projects-meta for simplified wiki pathing
- Changed from ~/projects/projects-wiki/.wiki to ~/projects/.wiki/
- Removed legacy migration logic (no longer needed)
- Updated all script references and documentation
- Simplified Phase 4 detection (single canon path)

This aligns with projects-wiki repo changes where nested .wiki/
was removed and content now lives in root.
2026-05-03 17:55:06 +03:00
d0a450ce40 feat(project-bootstrap): v1.5.0 — add 'follow project discipline' canonical trigger [v1.5.0] 2026-05-01 11:33:46 +03:00
88d533b362 feat(project-bootstrap): template gains 'follow project discipline' trigger 2026-05-01 11:33:10 +03:00
ca75124324 docs(project-discipline): README 2026-05-01 11:32:59 +03:00
560f15571e feat(project-discipline): skill body — four rules + activation + out-of-scope [v0.1.0] 2026-05-01 11:32:38 +03:00
7c63c6080f feat(project-discipline): scaffold skill frontmatter [v0.1.0] 2026-05-01 11:31:22 +03:00
dcad95069f feat(project-bootstrap): v1.4.0 — add 'pull remote before work' canonical trigger 2026-05-01 10:29:12 +03:00