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
2 changes: 1 addition & 1 deletion CHANGELOG.jsonl
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
{"ts":"2026-07-28","title":"fix(init): commands/init.md help-lockstep — 없어진 --hooks 광고 제거 + --config-only 반영","body":"commands/init.md 이 사라진 --hooks 플래그를 광고하고 새 --config-only 는 빠뜨린 채였다 — help-lockstep 위반이고, shadow 가 이 description 을 ~/.claude/commands 로 미러하므로 슬래시 picker 에도 그대로 노출된다. init 의 --hooks 는 per-repo .claude/settings.json 금지(INIT-INJECT-DUP)와 함께 제거됐고 훅은 sidecar install 전역 배선이 유일 경로. description/argument-hint 를 실제 플래그 3종(--force · --dry-run · --config-only)으로 맞추고 --config-only 가 문서 스캐폴드를 건너뛴다는 점을 명시. CMD-DESC-LONG(320자) 캡 안에서 작성. update --hooks 는 modules/update.ts 에 실재하므로 그대로 둔다."}
{"ts":"2026-07-28","title":"fix(commons): 자기 상한 초과 해소 (11486B→10230B · 규칙 36개 보존) + ing-board 를 ref 기준으로 정정","body":"commons.md 가 자기 상한을 1186B 초과한 상태(11486B vs lint.commonsCap 10300)로 굳어 있어 어떤 commons 편집도 COMMONS-OVERSIZED 로 막히고 있었다 — 게이트가 스테이징될 때만 발화하는 탓에 초과분이 조용히 누적된 결과. 문구만 압축해선 -222B 밖에 안 나온다는 실측(로컬 시도)이 있어, fable+sol 에 동시 위임해 규칙 36개·순서·리터럴을 보존한 전면 압축안을 받았다(fable 9996B · sol 9841B). fable 안을 베이스로 채택하고, 양쪽이 borderline 으로 표시한 것 중 행동을 바꾸는 괄호근거 8곳을 되살렸다: owner-trust 자격증명 열거(keys·passwords·tokens·logins·seeds) · browse-on-diamond 의 patchright 풀이와 non-login shell 경로 근거 · fanout-workflow (rate-limit death) · canonical-naming (history lives in git) · verdict-integrity (suspect tool first) · single-doc (split to child nodes) · preserve-state (.verdicts·bench) · hexa-lang-model dangling. 결과 10230B (여유 70B).\\n\\n같은 커밋에 ing-board 문구 정정 — \"repo-root ING.jsonl\" 은 ref 이전 잔재라 부트스트랩 씨앗이 금지하는 손수-작성 작업트리 파일을 매턴 지시하고 있었다 → do 는 `ing` ref + `git show ing:ING.jsonl`, dont 에 hand-writing a worktree ING.jsonl (ref-only) 추가. 이 슬러그만 285→345B 로 늘었다.\\n\\n의도적으로 버린 것: 서문의 (mechanism → code + CHANGELOG + git) 메타 주석 · infra-wall-noneval 의 (toolchain defect != target ceiling) 근거 — do 줄의 QUARANTINED 로 이미 커버.\\n\\n확보한 여유는 되돌아가지 않게 래칫: injectBudgetBytes 22883 → 20500 (현재 counted 19340). 나머지 70B 여유는 다음에 규칙을 추가하려면 무언가를 빼야 한다는 뜻이고, 그게 상한의 취지다."}
{"ts":"2026-07-28","title":"feat(turn-close): 🌱 config 부트스트랩 씨앗 — harness.config.json 부재/깨짐 감지 + init --config-only","body":"turn-close inject 이 파일검사로 harness.config.json 부재/깨짐을 잡아 🌱 config 씨앗을 발화한다 — 씨앗 3종(arch·md-only·ing)에 이어 네 번째이자 뿌리. config 가 없으면 sidecar 는 죽지 않고 내장 기본값으로 도는데, 그 상태의 기본값이 곧 게이트 공백이다: verify.checks=[] 라 sidecar ci 가 검사 0개로 통과 보고(부재보다 나쁜 공허한 green) · changelog/protected-branch lint 게이트 미발화 · lockdown.files=[] · 그리고 archSeed/ingSeed 옵트아웃이 살 파일 자체가 없다.\\n\\n뿌리라서 억제한다: config 씨앗이 뜨는 동안 arch/ing 씨앗은 내지 않는다. (a) 나머지 씨앗의 탈출구(archSeed/ingSeed:false)가 바로 이 파일 안에 살아 config 없이는 끌 수도 없고, (b) 정상 흐름(내 repo)에서는 씨앗들이 부트스트랩 후 죽지만 열람만 하는 남의 clone 에서는 영원히 반복되므로 그 상시 비용을 3줄(~1.2KB/턴)에서 1줄로 묶는다(commons-md-1 context-rot).\\n\\n옵트아웃 역설 — knob 을 만들면 그 knob 이 \"없다\"고 말하는 바로 그 파일 안에 살게 된다. 그래서 configSeed knob 은 없다: 최소 {} 라도 harness.config.json 을 쓰면 씨앗은 죽는다(남의 clone 은 untracked {} 로 침묵 가능). host-wide 침묵 파일은 정작 새 repo 에서 silent-dead 라 금지(config-ts-1 한 층 위).\\n\\n깨진 config 변종 — config() 는 malformed JSON 을 조용히 삼키고 defaults 로 폴백한다. 파일이 있으니 어떤 존재검사도 \"설정됨\"으로 읽는데 값은 전부 기본값 = 부재보다 고약. 새 configFileState() (ok|missing|invalid) 가 이를 구분해 파싱 실패를 지목하는 별도 문구를 낸다.\\n\\nsidecar init --config-only 신설 (씨앗이 지목하는 모드) — config + .harness/*.json + prefs + .gitignore + scripts/sidecar + git hooks 만 쓰고 문서 스캐폴드(ARCHITECTURE.json · CLAUDE.md · CHANGELOG.jsonl · state/ · .github/workflows/ci.yml)는 건너뛴다. 이 구분이 핵심이다: bare init 의 ARCHITECTURE.json 스텁은 archPlaceholders 리터럴 그대로에 convergence 키도 없어서, 쓰는 순간 🏛️/🧬 leg 이 허구 트리에 무장되고 \"진짜 트리를 써라\"는 arch 씨앗이 존재만으로 죽는다(turn-close-ts-1 이 막으려던 바로 그 실패). config 는 repo 에 대한 주장이 아니라 스택 감지 데이터라 기계 생성이 정답이고, 문서는 authoring 대상이라 아니다.\\n\\nQA: config 없음=config 씨앗 1줄만(arch/ing 억제) · 깨진 config=파싱실패 변종 · {} 만 써도 arch+ing 씨앗 복귀 · init --config-only 는 문서 5종 미생성 후 config 씨앗 소멸+arch/ing 씨앗 등장(루프 폐쇄) · bare init 회귀 없음(ARCHITECTURE/CLAUDE/CHANGELOG/state/ci.yml 그대로 생성). 설계는 fable+sol 위임 후 조정 — 씨앗 필요성·억제·--config-only 신설은 양쪽 합의. 옵트아웃에서 갈렸고(sol: ~/.sidecar/bootstrap-ignore.json + sidecar bootstrap ignore 신설), 새 명령/상태파일 없이 파일 생성만으로 해결되는 fable 안 채택 — sol 의 dissent 는 clone nag 를 host 차원에서 끌 수단이 없다는 점."}
{"ts":"2026-07-28","title":"feat(turn-close): 🌱 부트스트랩 씨앗 3종 — ING 보드·ARCHITECTURE.json 부재를 저장소 검사로 감지해 생성 지시","body":"turn-close inject 이 이제 저장소 부재를 REPO별로 검사해 씨앗을 발화한다 — 기존 arch 씨앗 1종에서 3종으로: ① ARCHITECTURE.json/.md 둘 다 없음(designSsot) → 현재상태 트리 작성 요구(기존) ② ARCHITECTURE.md 만 있음 → legs.arch 는 무장되지만 legs.conv 는 꺼진 채라 🧬 재발학습 store(convergence.records[])가 통째로 침묵 → ARCHITECTURE.json 승격 요구(신규 · ①②는 한 knob archSeed) ③ refs/heads/ing 없음(ingBoardActive) → 🔄 ING leg 이 꺼져 있음을 알리고 개설 동작(sidecar ing add)을 지시(신규 · 신설 knob ingSeed, 기본 ON 옵트아웃).\\n\\nWHY ING 씨앗: 1d627be 는 ING 이 자립한다고 봤다(저장소=ing add 가 즉석 생성하는 git ref · 요구=엔진 동봉 commons ing-board). 절반만 맞다 — 생성 마찰이 0 이어도 commons 문구는 보드-상태를 모르는 일반론이라 \"이 repo 는 보드가 없고 🔄 leg 이 꺼져 있다\"를 아무도 말하지 않는다(ing inject 는 항목 0 이면 무음). 씨앗은 그 repo-specific \"leg OFF + 무장 동작\" 신호다.\\n\\n조건부 명령: ING 씨앗은 \"보드를 만들라\"가 아니라 \"이번 일이 다단계 작업·인계면 첫 단계로 ing add\" + 빈/가짜 항목 금지 명시. 무조건 명령이면 일회성 repo 가 줄을 끄려고 가짜 보드를 만들고 Stop 게이트가 허구에 무장된다(ARCH-PLACEHOLDER 와 같은 실패 모드인데 잡아줄 lint 도 없음). UserPromptSubmit 안에서 \"이번 턴이 다단계인가\"를 결정적으로 알 신호는 없으므로 발화조건이 아니라 문구로 해결.\\n\\ncommons ing-board 문구도 함께 정정 — \"repo-root ING.jsonl\" 은 ref 이전 시절 잔재로, 씨앗이 금지하는 손수-작성 작업트리 파일을 매턴 지시하고 있었다 → \"the one ing git ref (first add creates it)\" + dont 에 hand-writing ING.jsonl 추가.\\n\\n배선 변경 0 (turn-close inject 는 hooks.json·setup.ts·pi/sidecar.ts 에 이미 매턴 배선). QA: fresh repo=씨앗2(트리오 무음) · md-only=트리오(arch만)+JSON승격+ING · 완비 repo=씨앗 0B · archSeed/ingSeed:false 각각 무음 · ing add 후 ING 씨앗 소멸 확인. 설계는 fable+sol 위임 후 조정 — sol 은 ING 씨앗 자체를 반대(commons 로 충분)했으나 사용자 요구 + 보드-상태 무지 논거로 fable 안 채택, sol 의 ARCHITECTURE.md-only 구멍 지적은 ② 로 수용."}
Expand Down Expand Up @@ -27,4 +28,3 @@
{"ts":"2026-07-15","title":"architecture search: name 없는 {id, role} 트리 매칭","body":"walk 이 nodeName 유무로 게이트해서, c4 스켈레톤이 내보내는 name-less {id, role} 노드는 전부 스킵됐다 — 방문은 하되 한 건도 검사 안 함. anima-v4 에서 재현: 'salvage'/'overview'/'mech' 가 id 로 트리에 있는데 0 hit.\n\nlint 쪽 ARCH-ID-MISSING 은 이미 name 의존을 벗어나도록 넓혀졌는데(rendered node = name/role/detail 중 아무거나) search 만 안 따라와서, 두 절반이 'rendered node' 정의를 다르게 봤다. 그 결과 ARCH-ID-FORMAT 이 '검색 가능한 키를 유지하라'며 kebab id 를 강제하는 동안 정작 search 는 그 키를 쳐다보지 않았다 — 명분이 공허했다.\n\n수정: 양쪽에 같은 rendered-node 판정(name/role/detail 중 아무거나) 적용 · breadcrumb 과 결과 헤더는 name 없으면 id 로 폴백해 ' — role' 대신 읽히는 경로가 나오게 함.\n\n후속 메모: 점 표기 id(mech-3.codec-war)도 부분문자열 검색은 정상이므로, ARCH-ID-FORMAT 의 searchability 근거는 kebab-case 를 정당화하지 못한다."}
{"ts":"2026-07-15","title":"feat(naming-guard): .canonical-ok 디렉터리 마커 = 서브트리 면제","body":"naming-guard 면제를 파일 단위(@canonical-ok in content)에서 **디렉터리 단위**(.canonical-ok 마커 파일)로 확장했다. 동기: dancinlab/anima 오너가 anima-v2/ 를 '규칙 적용 안 함 · 실험이니까'로 선언했는데, 기존 가드는 그 구역의 모든 파일마다 마커 문자열을 요구했다 — 면제가 아니라 세금. 구역을 구역에서 한 번 선언하는 게 '이 폴더는 면제'의 본래 의미다. Write/Edit + Bash 양쪽 적용(한쪽만 하면 mkdir 이 막혀 반쪽 면제). .git 에서 탐색 중단해 레포 경계 밖 마커가 남의 레포를 면제시키지 않게 했다. 검증 6/6: 마커 없으면 BLOCK 유지(가드 생존 증명) · 있으면 면제 · 마커 없는 형제 폴더와 report_final.md 는 그대로 BLOCK(면제 누수 없음)."}
{"ts":"2026-07-15","title":"pod·model·dataset 관리 명령 3종 폐기 (GPU 디스패치는 hexa cloud 로 일원화)","body":"pod·model·dataset 관리 기능 3종을 통째로 폐기. 삭제: modules/{pod-poll,models,dataset}.ts · commands/{pod,models,dataset}.md · templates/pod.md · cli/index.ts 등록(import+case+HELP) · runbooks.ts runPod/POD_SUBCMDS · ing.ts 팟 표면표시(loadPods) · ARCHITECTURE 3개 모듈 노드 · README 3개 행. 직전 커밋(#410)의 pods.jsonl SSOT 통합도 함께 되돌림(pod 자체가 사라짐). 잔여 사용자 지시(pre.ts 블록 메시지·keywords 힌트·dojo/micro-exp 템플릿의 sidecar pod → hexa cloud) 갱신. GPU 클라우드 디스패치는 hexa cloud 로 일원화(commons canonical-cli). 모델/데이터셋 등록 데이터는 애초 0건이라 고아 데이터 없음."}
{"ts":"2026-07-15","title":"pod: ING+pod-watch.json 이원화 → 단일 공용 ~/.sidecar/pods.jsonl SSOT 통합","body":"팟(GPU pod) 관리를 ING(kind:\"pod\" on ing ref) + pod-watch.json 이원화에서 단일 공용 SSOT ~/.sidecar/pods.jsonl 로 통합. 로스터(provider/gpu/purpose/cost · 옛 ing pod)와 watch/poll 설정이 같은 엔트리에 산다(append형 jsonl · pool.json 위치 + ING.jsonl 포맷 동형). sidecar pod {add|rm|list|watch|unwatch|poll}: add/rm=로스터, watch=cadence 표시(엔트리 없으면 생성), unwatch=폴링만 중단(로스터 유지), 성공 teardown=자동 제거. ing 은 팟 store 소유를 놓고 loadPods() 로 실행중 팟만 inject/show 에 표면 표시. 옛 pod-watch.json 키드 레지스트리 1회 마이그레이션."}
4 changes: 2 additions & 2 deletions commands/init.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
description: /init [--force] [--hooks] [--dry-run] — scaffold sidecar into a repo — config + .harness rules + gitignore + wrapper + hooks (strict by default). Triggers — "사이드카 설치", "sidecar init", "repo 에 사이드카", "scaffold sidecar", "/init".
argument-hint: "[--force] [--hooks] [--dry-run]"
description: /init [--force] [--dry-run] [--config-only] — scaffold sidecar into a repo — config + .harness rules + gitignore + wrapper (agent hooks stay global). `--config-only` skips the doc scaffolds. Triggers — "사이드카 설치", "sidecar init", "repo 에 사이드카", "scaffold sidecar", "/init".
argument-hint: "[--force] [--dry-run] [--config-only]"
allowed-tools: Bash
---

Expand Down
Loading