[design] コード品質コーパス loop(データ feedback loop の 2 例目)

起点 = n_01KSZQM2SARGP9238FQJ5DGSRA「コード品質をどう保つか」。2026-06-01 に方向性をアラインメント。文体 micro-feedback loop(n_01KSZBYWFKHHRRAQCMBQM8TTMB)に続く、同じ「データを育てて agent の振る舞いを継続改善する」パターンのコード版。

合意した骨子:

- 表現形式は **原則(規範を書き下す)と 事例(良し悪しをラベル)の両方**が一級市民。目的に応じて使いわける(どちらか択一にしない)
- 事例は**原則に昇格**する。同じ逸脱が繰り返したら standing rule を 1 回書き下す合図 → 両形式は分断でなく地続き
- コーパスの価値は **project 固有層**に集中。generic な品質論(DRY / 命名 / 小関数…)は AI 事前知識 / clippy / biome が既に持つので増分ゼロ。"ここに" 作る近道性は non-generic な実判断(additive 優先 / pre-alpha clean / 1-lane refactor / 暗号化本文を漏らさない / event-sourcing で projection は導出専用 / 名前は挙動と一致)に宿る
- 起点 = **aside flow**。aside は既に実作業直後の品質観察を 1 件 = 1 post で産んでおり、事例コーパスの入口が開いている(原石例: norm_actor 命名乖離 n_01KSXV3A / unused CSS selector 検出 gap n_01KSXSVB / 単一 AsyncMutex の run_sql×SSE 直列化 n_01KSZ7RX)
- 最小ループ = **aside が post する前に過去 aside を引く**。重複回避 / 再発検知(= 昇格シグナル)/ 言い回しを過去基準に整合、が同時に起きる。産む専用だった aside が 産む+読む になり「コーパスを作る」と「使い始める」が同じ一手で閉じる
- 母集団 = **まず全 aside**(genre 区別なし: code / docs / process / UX / naming / observability / dep)。「コード品質だけ引きたい」需要が出たら区別 tag を後付け(seam として足りる)
- 第一消費者 = **aside skill 自身**。PR-review agent は leverage 高いが net-new で重いので後回し

未決(次に詰める):

- signal の具体 — aside が発火時に過去をどう引くか(全件 scan / tag 絞り / embedding 類似)
- 原則への昇格の運用(何回の再発で promote / 誰が書き下すか)
- 後続消費者(quacker-suggest / refactor-lane / PR review)への拡張可否

---

## 進捗 (2026-06-01)

「未決: signal の具体」は、本文上記の "aside が過去 aside を引く(dedup / 昇格)" ではなく **pivot** して決着 ── 会話中に user が提示した **"作業 agent がセッション中に context として効いた過去 post を採点する"(consume-feedback signal)** を採用。aside の dedup は既に手順2にあり、本当の価値は「コーパスは消費されてこそ価値」を直接突く使用実績シグナルだったため。

- 実装 = **`quacker-credit` skill**(`quacker-aside` の対 = consume-feedback 側)。PR #271 merged(commit e555c21 / merge db1cabb)
- substrate = `useful` tag + rationale を再利用。append-only な events_log(tag_event payload)に 1 mark = 1 event(頻度=スコア)、current_tags は presence に畳む
- 最初の実データ = 本 loop の同型 1 例目 n_01KSZBYWFKHHRRAQCMBQM8TTMB を `useful` 採点(end-to-end 検証済)

## 進捗 追記 — auto-trigger shipped (2026-06-01)

- auto-trigger 配線 = **PR #275 merged**(feat 0f491f0 / merge e08973f)。`aside-on-stop.sh`(commit-gated work-boundary hook)が `quacker-aside` と並べて `quacker-credit` も nudge する。これで credit が作業区切りで自発起動 → `useful` データが自動で溜まり始める
- 水増し対策込み:credit の dedup 制約を「同一 session 内で既に credit 済みは再 credit しない」に強化(commit ごとの再発火で 1-task のスコアが膨らむのを防止)。seam = 問題化したら PR 作成境界に寄せる
- 派生 aside: hook 名 `aside-on-stop.sh` が both 対応で実態とズレた件 = n_01KT0163CV1GT5RS5F1X23N3AP(rename は別 PR、軽い)

**入力部 = 完成・稼働中**(skill 本体 PR #271 + auto-trigger PR #275)。残るは **消費側のみ**で、これは `useful` データが溜まるまで着手不可(今は actionable でない)。→ backlog からは一旦下ろし `open` を外す(`idea` は記録として残す)。データが溜まったら消費側設計(`useful` 頻度での優先 retrieval / 剪定、first-class `post_used` event への graduate 判断)で再起動。