Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .claude-plugin/marketplace.json
Original file line number Diff line number Diff line change
Expand Up @@ -401,8 +401,8 @@
{
"name": "domain",
"source": "./skills/domain",
"description": "0.11.0 (2026-06-07) ML subverbs unify the retired `skillopt` + `skillopt-hook` plugins under `/domain`: `/domain doctor` (skill-train readiness) · `/domain train [--bg]` (NATIVE pip-free SkillOpt loop — rollout → reflect → edit → held-out gate via `claude -p` = your Claude Code subscription, NOT a metered API; only a SEPARATE skill.md is optimized — the domain's own DOMAIN.md / verdicts / log are NEVER touched) · `consume <skill.md>` · `activate`/`deactivate` (write ~/.sidecar/domain-skill/active-skill.md) · `status`/`log`. Bundled `examples/toyqa` (6 format-sensitive QA items) proves the loop end-to-end with NO external data/pip. ML verbs route to `bin/_domain_ml.sh` (+ `bin/_domain_ml.py` engine); ALL existing domain verbs route to `_domain.hexa` UNCHANGED. 0.10.1 (2026-06-03) `_is_name` now accepts a DIGIT-LEADING NAME — first char may be an UPPERCASE letter OR a digit 0-9, so `/domain init 8VERB` works (previously rejected: digit-leading start); subsequent chars unchanged (UPPERCASE/digit/`-`/`+`). 0.10.0 — bare `/domain` + `/domain list` now LINT for scattered report-like `.md` (a basename token audit|report|verdict|gap|finding|impl OR an ISO date like `2026-06-02`) sitting loose at the repo root or under `docs/` WHILE a domain is active, and emit a `⚠ 분리보관 감지` advisory naming each stray with its `/domain absorb <file>` runbook (excludes the domain's own pair / CHANGELOG / README / `.log.md` / already-absorbed pointer files; read-only). 0.9.0 — new `absorb <file> [--state]` verb enforces combined-storage (합산보관) over scattered docs/*.md: folds an existing separate report/finding `.md` into the ACTIVE domain's single doc pair (default → <NAME>.log.md as a dated `## <ISO> — absorbed <rel>` entry embedding the body; `--state` → <NAME>.md snapshot), then replaces the source with a one-line `<!-- absorbed into … -->` pointer (idempotent — an already-absorbed pointer file is skipped; refuses to absorb the domain's own pair). Resolves the active domain via the same _get_active / _snap_path / _log_path logic the other verbs use. Maintain UPPERCASE <NAME>.md (snapshot = final-goal milestone checkboxes) + sister <NAME>.log.md (append-only step log) at project root — auto-scaffolds both, defaults NAME to uppercase basename of git root. Verbs: /domain <NAME> (SELECT the session's active domain → later verbs default to it + show a final-goal progress bar `▓▓▓░░ NN% · done/total` from the snapshot's checkboxes) · /domain (show active) · /domain list (alias ls — repo-wide index; with a DOMAINS.tape roster it is AUTHORITATIVE: tables each registered domain ★ = active · @goal · progress · location, progress/@goal stay DERIVED so the checked-in roster holds only NAME→path and never churns; flags ghosts + unregistered; no roster → legacy disk-scan) · /domain list --sync (reconcile DOMAINS.tape with disk — bootstraps the roster) · /domain <task> (append `- [x]` to log) · /domain todo <task> (`- [ ]`) · /domain done <match> (flip [ ]→[x]) · /domain title <text> (alias subtitle — OPTIONAL `@title:` display header: icon · name · alias, e.g. `🧠 IIT4 — 의식 측정자(尺)`, rendered in place of plain `active domain: NAME`; absence keeps current output, no lint warning) · /domain new <header>. Progress is final-goal-based (snapshot completion), not log-based — it doesn't drift as the log grows. Path resolution: a DOMAINS.tape roster row (`@domain NAME := \"path\"`) wins FIRST, so a domain can live at ANY path (e.g. `domains/RUNTIME/RUNTIME.md`); absent a roster entry it falls back to root → folder-nested → root-default-scaffold (log follows the snapshot's dir), so folder-nested meta-domains no longer regenerate an empty root scaffold each call. The folder-nested fallback only matches when the nested file's first line is the domain header `# <NAME>` (guards against false-matching an unrelated same-named file like a digest on case-insensitive filesystems). 0.8.8: /domain set now SELF-HEALS the DOMAINS.tape roster (auto-registers an on-disk-but-unregistered domain — the gap that ghosted anima's LIFE) and warns on a stale SSOT shadow (the working-tree <NAME>.md is UNTRACKED or BEHIND origin/main → progress/closure may read a stale local copy; reference_domain_init_untracked_ssot); a perpetual `@goal` (no-termination marker like `종료 조건 없음`/`perpetual`/`open horizon`) renders a ♾️ perpetual badge so the progress bar reads as frontier-depletion, NOT a 100% completion countdown (per feedback-closure-is-physical-limit).",
"version": "0.11.0"
"description": "0.12.0 (2026-06-07) AUTO-USE half restored — the retired `skillopt-hook`'s SessionStart auto-inject now lives INSIDE the domain plugin: `hooks/hooks.json` fires `bin/_domain_skill_inject.sh` at every SessionStart, injecting the activated skill (`~/.sidecar/domain-skill/active-skill.md`, written by `/domain activate`) as additionalContext so a trained skill is auto-applied with NO command (closes the 0.11.0 gap where `activate` wrote a file nothing read). New `/domain agent-active on|off` toggles the optional `~/.sidecar/domain-skill/agent-active` nudge marker (one-line 'PROPOSE /domain train for repeatable scored tasks — never auto-run'). OPT-IN + safe: the hook is silent when nothing is activated, NEVER trains, always exits 0 (fail-open). This restores full parity with the two retired plugins (TRAIN + USE) entirely under `/domain`. 0.11.0 (2026-06-07) ML subverbs unify the retired `skillopt` + `skillopt-hook` plugins under `/domain`: `/domain doctor` (skill-train readiness) · `/domain train [--bg]` (NATIVE pip-free SkillOpt loop — rollout → reflect → edit → held-out gate via `claude -p` = your Claude Code subscription, NOT a metered API; only a SEPARATE skill.md is optimized — the domain's own DOMAIN.md / verdicts / log are NEVER touched) · `consume <skill.md>` · `activate`/`deactivate` (write ~/.sidecar/domain-skill/active-skill.md) · `status`/`log`. Bundled `examples/toyqa` (6 format-sensitive QA items) proves the loop end-to-end with NO external data/pip. ML verbs route to `bin/_domain_ml.sh` (+ `bin/_domain_ml.py` engine); ALL existing domain verbs route to `_domain.hexa` UNCHANGED. 0.10.1 (2026-06-03) `_is_name` now accepts a DIGIT-LEADING NAME — first char may be an UPPERCASE letter OR a digit 0-9, so `/domain init 8VERB` works (previously rejected: digit-leading start); subsequent chars unchanged (UPPERCASE/digit/`-`/`+`). 0.10.0 — bare `/domain` + `/domain list` now LINT for scattered report-like `.md` (a basename token audit|report|verdict|gap|finding|impl OR an ISO date like `2026-06-02`) sitting loose at the repo root or under `docs/` WHILE a domain is active, and emit a `⚠ 분리보관 감지` advisory naming each stray with its `/domain absorb <file>` runbook (excludes the domain's own pair / CHANGELOG / README / `.log.md` / already-absorbed pointer files; read-only). 0.9.0 — new `absorb <file> [--state]` verb enforces combined-storage (합산보관) over scattered docs/*.md: folds an existing separate report/finding `.md` into the ACTIVE domain's single doc pair (default → <NAME>.log.md as a dated `## <ISO> — absorbed <rel>` entry embedding the body; `--state` → <NAME>.md snapshot), then replaces the source with a one-line `<!-- absorbed into … -->` pointer (idempotent — an already-absorbed pointer file is skipped; refuses to absorb the domain's own pair). Resolves the active domain via the same _get_active / _snap_path / _log_path logic the other verbs use. Maintain UPPERCASE <NAME>.md (snapshot = final-goal milestone checkboxes) + sister <NAME>.log.md (append-only step log) at project root — auto-scaffolds both, defaults NAME to uppercase basename of git root. Verbs: /domain <NAME> (SELECT the session's active domain → later verbs default to it + show a final-goal progress bar `▓▓▓░░ NN% · done/total` from the snapshot's checkboxes) · /domain (show active) · /domain list (alias ls — repo-wide index; with a DOMAINS.tape roster it is AUTHORITATIVE: tables each registered domain ★ = active · @goal · progress · location, progress/@goal stay DERIVED so the checked-in roster holds only NAME→path and never churns; flags ghosts + unregistered; no roster → legacy disk-scan) · /domain list --sync (reconcile DOMAINS.tape with disk — bootstraps the roster) · /domain <task> (append `- [x]` to log) · /domain todo <task> (`- [ ]`) · /domain done <match> (flip [ ]→[x]) · /domain title <text> (alias subtitle — OPTIONAL `@title:` display header: icon · name · alias, e.g. `🧠 IIT4 — 의식 측정자(尺)`, rendered in place of plain `active domain: NAME`; absence keeps current output, no lint warning) · /domain new <header>. Progress is final-goal-based (snapshot completion), not log-based — it doesn't drift as the log grows. Path resolution: a DOMAINS.tape roster row (`@domain NAME := \"path\"`) wins FIRST, so a domain can live at ANY path (e.g. `domains/RUNTIME/RUNTIME.md`); absent a roster entry it falls back to root → folder-nested → root-default-scaffold (log follows the snapshot's dir), so folder-nested meta-domains no longer regenerate an empty root scaffold each call. The folder-nested fallback only matches when the nested file's first line is the domain header `# <NAME>` (guards against false-matching an unrelated same-named file like a digest on case-insensitive filesystems). 0.8.8: /domain set now SELF-HEALS the DOMAINS.tape roster (auto-registers an on-disk-but-unregistered domain — the gap that ghosted anima's LIFE) and warns on a stale SSOT shadow (the working-tree <NAME>.md is UNTRACKED or BEHIND origin/main → progress/closure may read a stale local copy; reference_domain_init_untracked_ssot); a perpetual `@goal` (no-termination marker like `종료 조건 없음`/`perpetual`/`open horizon`) renders a ♾️ perpetual badge so the progress bar reads as frontier-depletion, NOT a 100% completion countdown (per feedback-closure-is-physical-limit).",
"version": "0.12.0"
},
{
"name": "domain-doc-guard",
Expand Down
14 changes: 14 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,20 @@ For the full audit trail, see `git log`.

---

## 2026-06-07 — 🎓 domain 0.12.0 — 자동사용(USE) 절반 복원 · skillopt-hook 의 SessionStart 주입을 domain 안으로

0.11.0 통합에서 빠졌던 **자동사용 훅**을 domain 플러그인 내부에 포팅 — `activate` 가
파일만 쓰고 아무도 안 읽던 갭을 닫음. 폐기한 2개 플러그인과 **완전 동등(TRAIN+USE)** 회복.

- 🪝 **SessionStart 자동주입** — `hooks/hooks.json` 가 `bin/_domain_skill_inject.sh` 를
세션 시작마다 발화. `/domain activate` 가 쓴 `~/.sidecar/domain-skill/active-skill.md`
를 additionalContext 로 주입 → 학습된 스킬이 **명령 없이** 자동 적용.
- 🔔 **`/domain agent-active on|off`** — 선택 마커 `~/.sidecar/domain-skill/agent-active`
토글. 켜면 "반복+채점가능 작업엔 `/domain train` 을 제안(자동실행 금지)" 한 줄 nudge.
- 🔒 OPT-IN + 안전 — 활성 스킬 없으면 침묵 · 절대 학습 안 함(비용) · 항상 exit 0(fail-open).
- 검증: activate→훅 JSON(hookEventName=SessionStart + 본문) · agent-active nudge 추가 ·
deactivate 후 침묵 · sh/json 문법 · g22 lockstep(plugin 0.12.0 ↔ marketplace 0.12.0).

## 2026-06-07 — 🎓 domain 0.11.0 — `/domain train` 으로 통일 · skillopt + skillopt-hook 폐기

스킬 학습 능력을 별도 플러그인 대신 **`/domain` 하나로 통일**. 네이티브 · pip 무의존.
Expand Down
Loading