{
  "version": 1,
  "updated": "2026-09-07",
  "audience": "painting-novice AI agent",
  "status": "initial research and local calibration; transfer to novice agents not validated",
  "cards": [
    {
      "id": "wet-on-dry",
      "name": "乾いた紙の明確な輪郭",
      "goal": "山頂・舟・人物の形を残す",
      "sourceIds": [
        "edges"
      ],
      "support": "approximation",
      "exerciseIds": [
        "edge-dry",
        "edge-rested"
      ],
      "preconditions": [
        "新しい紙、または待機後に試験線の広がりを確認する"
      ],
      "procedure": [
        "水だけの下塗りを省くか乾燥を待つ",
        "少量の含水筆を一度運ぶ",
        "直後と待機後を比較する"
      ],
      "successCriteria": [
        "線の幅と形が待機中に大きく変わらない"
      ],
      "failureSigns": [
        "縁が広がる",
        "細線が格子状になる"
      ],
      "repair": [
        "前者は水量または待機時間を一条件だけ変える",
        "後者は解像度限界として記録し、輪郭を重ねて太らせない"
      ],
      "limits": [
        "water=0は紙を乾かす命令ではない",
        "現wet格子幅384以下、出力拡大は精細化ではない"
      ],
      "evidence": {
        "source": "sources.json",
        "runtime": "results.json",
        "visual": "review.json",
        "noviceTransfer": "not_tested"
      },
      "parameterPolicy": "数値は作例JSONの局所的な初期値。実画材の測定値・万能な推奨値ではない。"
    },
    {
      "id": "wet-on-wet",
      "name": "濡れた紙へ絵具を置く",
      "goal": "淡い山肌や色のつながり",
      "sourceIds": [
        "wet"
      ],
      "support": "approximation",
      "exerciseIds": [
        "edge-wet",
        "edge-damp",
        "edge-rested"
      ],
      "preconditions": [
        "水筆で塗った位置と経過時間を記録"
      ],
      "procedure": [
        "opacity=0の筆で先に濡らす",
        "同じ青を置く",
        "waitで広がりと定着を観察"
      ],
      "successCriteria": [
        "乾紙対照と比べ縁が変化する",
        "大きい形が失われない"
      ],
      "failureSigns": [
        "全体がぼける",
        "色が動かない"
      ],
      "repair": [
        "広がりすぎなら湿らせる量・範囲・待ち時間のうち一つを変更",
        "動かないなら過度に乾いた紙か固定済み顔料かを区別"
      ],
      "limits": [
        "湿った筆で吸い取る操作は未実装",
        "広がる距離は解像度とモデルに依存"
      ],
      "evidence": {
        "source": "sources.json",
        "runtime": "results.json",
        "visual": "review.json",
        "noviceTransfer": "not_tested"
      },
      "parameterPolicy": "数値は作例JSONの局所的な初期値。実画材の測定値・万能な推奨値ではない。"
    },
    {
      "id": "local-prewet",
      "name": "局所的に先に濡らす",
      "goal": "山頂を残して内側をなじませる",
      "sourceIds": [
        "boundary",
        "curtis1997"
      ],
      "support": "partial",
      "exerciseIds": [
        "boundary-local",
        "boundary-wide"
      ],
      "preconditions": [
        "濡らす位置は水筆の軌跡と接地幅で定義する"
      ],
      "procedure": [
        "描きたい境界の内側を水筆でなぞる",
        "筆幅も含めて境界内に絵具を置く",
        "時間経過で内外の色を比較"
      ],
      "successCriteria": [
        "広い先濡らし対照より外側への広がりが小さい"
      ],
      "failureSigns": [
        "湿りの縁に暗い帯",
        "筆自体が境界を越えている"
      ],
      "repair": [
        "まず筆の接地範囲を確認",
        "範囲・水量・濃度を一つずつ変える"
      ],
      "limits": [
        "硬いクリップ境界ではない",
        "既に外へ置いた顔料は消えない",
        "現モデルは毛管層や縁の濃縮を再現しない"
      ],
      "evidence": {
        "source": "sources.json",
        "runtime": "results.json",
        "visual": "review.json",
        "noviceTransfer": "not_tested"
      },
      "parameterPolicy": "数値は作例JSONの局所的な初期値。実画材の測定値・万能な推奨値ではない。"
    },
    {
      "id": "graded-wash",
      "name": "薄めながらつなぐウォッシュ",
      "goal": "山裾へ向けて色を淡くする",
      "sourceIds": [
        "brush"
      ],
      "support": "partial",
      "exerciseIds": [
        "graded-wash"
      ],
      "preconditions": [
        "色を置く順序と濃度を先に決める"
      ],
      "procedure": [
        "水筆で必要な範囲を湿らせる",
        "各筆でopacityを段階的に下げる",
        "乾く前につなぎ、止めて観察"
      ],
      "successCriteria": [
        "大きい濃淡の流れが読める",
        "筆の継ぎ目が目立たない"
      ],
      "failureSigns": [
        "縞状になる",
        "端に絵具が溜まりすぎる"
      ],
      "repair": [
        "一度に塗る幅と重なりを調整し試験片へ戻る"
      ],
      "limits": [
        "gradientという図形塗りは使わない",
        "opacityは絵具量の近似で実際の希釈率ではない",
        "傾斜・重力・ビード未実装なので均一ウォッシュは未達の可能性"
      ],
      "evidence": {
        "source": "sources.json",
        "runtime": "results.json",
        "visual": "review.json",
        "noviceTransfer": "not_tested"
      },
      "parameterPolicy": "数値は作例JSONの局所的な初期値。実画材の測定値・万能な推奨値ではない。"
    },
    {
      "id": "glazing",
      "name": "乾燥後の薄い重ね塗り",
      "goal": "山の重なりと明暗を作る",
      "sourceIds": [
        "glaze"
      ],
      "support": "approximation",
      "exerciseIds": [
        "layer-immediate",
        "layer-rested"
      ],
      "preconditions": [
        "下塗りの色と乾燥待ちを保存"
      ],
      "procedure": [
        "淡く下塗りする",
        "waitで乾燥を進める",
        "薄い二筆目を重ね、重なりと周辺を比較"
      ],
      "successCriteria": [
        "重なる所が濃くなり下塗りの形が読める"
      ],
      "failureSigns": [
        "濃くしすぎる",
        "一面の暗い塊になる"
      ],
      "repair": [
        "失敗版は保存し別候補で上塗り量を下げる"
      ],
      "limits": [
        "fixed顔料は水を加えても再移動しないため、実紙より下塗りを壊しにくい",
        "120は作例内の材料秒、現実の完全乾燥時間ではない"
      ],
      "evidence": {
        "source": "sources.json",
        "runtime": "results.json",
        "visual": "review.json",
        "noviceTransfer": "not_tested"
      },
      "parameterPolicy": "数値は作例JSONの局所的な初期値。実画材の測定値・万能な推奨値ではない。"
    },
    {
      "id": "pressure",
      "name": "押す・抜く",
      "goal": "枝先・舟の小さい線に幅の変化を作る",
      "sourceIds": [
        "brush"
      ],
      "support": "approximation",
      "exerciseIds": [
        "pressure-even",
        "pressure-taper"
      ],
      "preconditions": [
        "pressure配列はpointsと同数"
      ],
      "procedure": [
        "低い筆圧から接地",
        "途中を押す",
        "終点へ向けて筆圧を抜く"
      ],
      "successCriteria": [
        "先端と中央の幅に差が出る"
      ],
      "failureSigns": [
        "先端が黒い玉になる"
      ],
      "repair": [
        "筆圧と絵具量を別々に試す"
      ],
      "limits": [
        "筆圧は幅だけ。角度、毛束、実際の放出率を再現しない",
        "小指や肩など人間の動作はAPI命令にしない"
      ],
      "evidence": {
        "source": "sources.json",
        "runtime": "results.json",
        "visual": "review.json",
        "noviceTransfer": "not_tested"
      },
      "parameterPolicy": "数値は作例JSONの局所的な初期値。実画材の測定値・万能な推奨値ではない。"
    },
    {
      "id": "dry-brush",
      "name": "乾筆の擦れ",
      "goal": "岸のきらめきや枝の質感",
      "sourceIds": [
        "drybrush"
      ],
      "support": "partial",
      "exerciseIds": [
        "contact-even",
        "contact-dry"
      ],
      "preconditions": [
        "乾いた紙に少量の絵具"
      ],
      "procedure": [
        "waterを低くする",
        "dryを変えた同一筆跡を比較",
        "紙の塗り残しが生まれるか拡大する"
      ],
      "successCriteria": [
        "紙の白い隙間と絵具の群れが見える"
      ],
      "failureSigns": [
        "表面に細かいノイズが乗るだけ",
        "幅全体が均一に塗られる"
      ],
      "repair": [
        "現モデルの不足として残す。粒状ノイズを増やして合格にしない"
      ],
      "limits": [
        "現在のdryは接触量の弱い変動。紙の高さと筆の側面を使う真の擦れは未実装"
      ],
      "evidence": {
        "source": "sources.json",
        "runtime": "results.json",
        "visual": "review.json",
        "noviceTransfer": "not_tested"
      },
      "parameterPolicy": "数値は作例JSONの局所的な初期値。実画材の測定値・万能な推奨値ではない。"
    },
    {
      "id": "reflections",
      "name": "反射を塊として描く",
      "goal": "水面のまとまりを作る",
      "sourceIds": [
        "water"
      ],
      "support": "authored_example",
      "exerciseIds": [
        "reflection-groups"
      ],
      "preconditions": [
        "反射の元になる対象を観察"
      ],
      "procedure": [
        "下向きの淡い筆跡で反射の塊を置く",
        "必要なら乾燥を待つ",
        "長短の水平な筆跡を少数添える"
      ],
      "successCriteria": [
        "縮小して反射が読める",
        "主役より目立たない"
      ],
      "failureSigns": [
        "等間隔の横線だけになる"
      ],
      "repair": [
        "横線を減らし、色の塊と塗らない隙間を見直す"
      ],
      "limits": [
        "鏡像変換は禁止。各筆跡を観察して描く",
        "作例は原画像の模写や完成作品ではない"
      ],
      "evidence": {
        "source": "sources.json",
        "runtime": "results.json",
        "visual": "review.json",
        "noviceTransfer": "not_tested"
      },
      "parameterPolicy": "数値は作例JSONの局所的な初期値。実画材の測定値・万能な推奨値ではない。"
    },
    {
      "id": "paper-tooth",
      "name": "紙の凹凸・吸水・粒状化",
      "goal": "滑らかすぎる塗りを材料から改善する",
      "sourceIds": [
        "paper",
        "curtis1997",
        "droplets2019"
      ],
      "support": "unsupported",
      "exerciseIds": [],
      "preconditions": [
        "現状は紙の高低と吸水性が描画状態にない"
      ],
      "procedure": [
        "今は紙プリセットを発明して送信しない",
        "docs/17の比較計画に沿って実装・実測を追加する"
      ],
      "successCriteria": [
        "同じ紙seedの凹凸が乾筆の塗り残しと顔料分布の両方に反映される"
      ],
      "failureSigns": [
        "白紙も濃い塗りも同じ強さのノイズ"
      ],
      "repair": [
        "表示だけの紙目と物質への作用を別々に検証"
      ],
      "limits": [
        "hot pressにも滑らかな実紙がある",
        "提供写真だけで紙種や粒径を特定できない"
      ],
      "evidence": {
        "source": "sources.json",
        "runtime": "results.json",
        "visual": "review.json",
        "noviceTransfer": "not_tested"
      },
      "parameterPolicy": "数値は作例JSONの局所的な初期値。実画材の測定値・万能な推奨値ではない。"
    },
    {
      "id": "lifting",
      "name": "湿った筆で吸い取る・縁をなじませる",
      "goal": "境界や小さい明部の調整",
      "sourceIds": [
        "wet",
        "edges"
      ],
      "support": "unsupported",
      "exerciseIds": [],
      "preconditions": [
        "吸水筆や顔料除去の命令はまだない"
      ],
      "procedure": [
        "実装されるまで本番でこの技法を選ばない",
        "次候補で先濡らしと塗り残しを計画する"
      ],
      "successCriteria": [
        "将来:除去量が筆へ移った顔料量と一致する"
      ],
      "failureSigns": [
        "白い絵具や透明な塗りで消したつもりになる"
      ],
      "repair": [
        "失敗時は別候補を作り直し、物理的に消せたとは記録しない"
      ],
      "limits": [
        "opacity=0は水筆、消しゴムではない",
        "白色も既存顔料を除去しない"
      ],
      "evidence": {
        "source": "sources.json",
        "runtime": "results.json",
        "visual": "review.json",
        "noviceTransfer": "not_tested"
      },
      "parameterPolicy": "数値は作例JSONの局所的な初期値。実画材の測定値・万能な推奨値ではない。"
    },
    {
      "id": "brush-contact",
      "name": "穂先・腹・側面と筆の保持量",
      "goal": "筆一本で細線・広い塗り・かすれを使い分ける",
      "sourceIds": [
        "brush",
        "chu2002",
        "wetbrush2015"
      ],
      "support": "unsupported",
      "exerciseIds": [
        "pressure-even",
        "pressure-taper",
        "contact-dry"
      ],
      "preconditions": [
        "現状は筆圧による幅変化のみ"
      ],
      "procedure": [
        "現状の試験片で接合部と紙の抜けを確認",
        "将来の筆モデルでは接地・傾き・水と顔料の保持量を別々に検証"
      ],
      "successCriteria": [
        "接地の方向と筆の変形に筆跡が対応",
        "紙へ渡した顔料分だけ筆の残量が減る"
      ],
      "failureSigns": [
        "筆先を傾けても丸い線しか出ない",
        "補充なしで同じ濃さが続く"
      ],
      "repair": [
        "docs/17の筆モデル試験を進める。未実装命令は送信しない"
      ],
      "limits": [
        "いまのdurationは速度による放出を忠実に表さない",
        "筆ごとの指数配分は永続的な筆の保持量ではない"
      ],
      "evidence": {
        "source": "sources.json",
        "runtime": "results.json",
        "visual": "review.json",
        "noviceTransfer": "not_tested"
      },
      "parameterPolicy": "将来機能。現行APIのレシピではない。"
    }
  ]
}
