💻 システム開発

2026-05-16_SCALE_CRM_v10.31_C1c_Stage2完成

最終更新 2026年05月16日 / 31_システム開発部/SCALE_CRM/2026-05-16_SCALE_CRM_v10.31_C1c_Stage2完成.md

2026-05-16 SCALE CRM v10.31 — C-1c Stage2 完成(co-create IP 真似防止 達成)

対象

SCALE CRM (scale-lead) / 本番 https://crm.scale-group.co.jp/ = v10.31 稼働中 / E2E 69/69 PASS / ローカル /Users/oogushiyuuki/株式会社SCALE/scale-lead/

何をやったか(1ラリー完投)

co-create methodology IP(営業メソッド・約660行)を service.js から物理削除し server 集約。minify は文字列を隠さないため、有効session の業務委託パートナーが service.min.js を DevTools で読めば営業ノウハウを全取得できた=真似防止 未達。Stage1(server基盤)に続く Stage2(client cutover)で完成。

byte-exact ゲートが Stage1 基盤の潜在バグ3件を実証検出 → 根治

Stage1 の検証が「実6呼出箇所の式」ではなく harness の sandbox builder 出力基準だった盲点:

Gap 内容 根治
Gap1 script svcSummary は本番で非空・プロンプト中盤挿入。Stage1 は sandbox で空固定し SCRIPT_TEMPLATE に凍結(server は末尾 extraData 設計)→ 全 script共創でドリフト {{svcSummaryBlock}} トークン化し server が SVCSUM_WRAPPER 付与で中盤の正位置に substitution
Gap2 実 draft 呼出(coCreateProcessAnswerWithFiles)は pmReplace 適用するが Stage1 draft shape は置換無し定義 → 資料投下ドラフトでドリフト draft shape も pmReplace 適用に統一
Gap3 service.js:7820 は lastName 空時に「相手の苗字は「」です。」節を丸ごと省略する条件式。Stage1 sentinel は lastName 常に非空 {{lastNameClause}} 条件節トークン化

pmReplace 段差(draft 6段 / main 8段の PM自分 有無)は prompt 内に該当語無く無害=1ギャップ減と実証。

実装

  • harness scripts/extract-cocreate-prompts.js を「実呼出基準」に修正 → 再実行で functions/api/v2/ai/_cocreate_prompts.ts 再生成(手編集禁止ルール遵守)。全 128マトリクス(mode×draftMode×deepDive×hist×pending×svcSent×noLN×shape)+summary+kabe byte-exact PASS
  • generate.ts に svcSummary var 受け渡し追加
  • service.js: _coCreateBuildSystemPrompt(298)/_coCreateBuildScriptSystemPrompt(158)/systemPromptRest(189)/sysPrompt/壁打ち定数 計660行 物理削除。非IP動的算出 _coCreateGwVars/_coCreateBuildExtraData/_coCreateBuildSvcSummary 新設
  • ai.js: callClaudeStreamGW+_gwPseudoStream 新設(真SSE=rAF throttle逐次 / 非SSE・失敗= callClaudeGW フォールバック後25ms疑似ストリーミング=旧 callClaudeStream UX 維持・cache_control ephemeral 維持)
  • 6呼出箇所 gateway化: 壁打ち2(shape:kabe)・draft(shape:draft)・summary(shape:summary)・main streaming・continuation
  • 新設 scripts/verify-cocreate-client-cutover.js: cutover前snapshotの実6呼出式 == 新client+server再構成 を現実的9シナリオ×4呼出箇所 54照合 PASS

検証結果

  • service.min.js(本番成果物)から実IPフレーズ9種 = 0 / server _cocreate_prompts.ts に保持
  • node -c service.js/ai.js OK / 削除関数の残存呼出 0
  • bash deploy.sh: 本番 https://crm.scale-group.co.jp/ 200・D1正常・pre/post tar.gz backup(Drive側)
  • E2E 69/69 PASS(4.9s・退化なし)

未実施(人手必須)

AI共創の 真の end-to-end ストリーミング実機検証 は authed browser + live Claude が必要で CLI から不可。byte-exact 二重ゲート(server 128 + client 54)でプロンプト同一性は構造的に保証済だが、大串に下記の1回検証を推奨:
1. AI共創 サービスモード:URL/資料投下 → ドラフト先出し → 通常チャット(ストリーミング表示・[CHOICES])
2. AI共創 スクリプトモード:svc データある案件で開始 → 4タブ進行(svcSummary が中盤に出るか)
3. 資料投下ドラフト(ファイル添付経路=draft shape)

cutover後の帰結(重要)

extract-cocreate-prompts.js は旧builder不在で再実行不可(設計通り)。今後の co-create prompt 変更は server functions/api/v2/ai/_cocreate_prompts.ts を起点に運用する。

残(未完の大規模・推奨順)

  • B残: contracts/NGリスト等 他インラインページの scroll維持(_rerenderKeepScroll 同パターン)
  • C: スクリプト刷新(タブ分割・パートナー独自スクリプトビルダー・商談情報タブ・架電リストから参照・UI刷新=設計提案→合意→段階実装)

関連

  • 最新基準点: ~/Obsidian/SCALE-Brain/31_システム開発部/_SCALE_CRM_最新基準点.md (stamp 2026-05-16_1228_v10.31_c1c_stage2)
  • 前ログ: ~/Obsidian/SCALE-Brain/00_Inbox/作業ログ_2026-05-16_1047_handoff_v10.30.md
  • pre-work backup: ~/scale-lead-backups/scale-lead-2026-05-16-1206-pre-v10.31-c1c-stage2.tar.gz
  • post-deploy backup: .../AI/scale-lead-backups/scale-lead-2026-05-16-1228-post-deploy.tar.gz
  • 検証 harness: scripts/extract-cocreate-prompts.js(server基盤・128マトリクス)/ scripts/verify-cocreate-client-cutover.js(client cutover・54照合)