💻 システム開発

SCALE_CRM_最新基準点

最終更新 2026年07月01日 / 31_システム開発部/_SCALE_CRM_最新基準点.md

SCALE CRM (scale-lead) 最新基準点(2026-05-04)

新しいセッションで scale-lead を編集する Claude は必ずこのノートを読む。
ここに書かれた「現状の最新版」を起点にして編集すること。
不一致を見つけたら、ここに書かれているスナップショットから復元する。

正本ローカルパス

唯一の正本(必ずここを編集する):

/Users/oogushiyuuki/株式会社SCALE/scale-lead/

本番URL(ハッシュなし固定):

https://crm.scale-group.co.jp/base/

Cloudflare Pages プロジェクト名: scale-lead(旧名のまま・改名禁止)


最新基準スナップショット

項目
ラベル 2026-05-06-1315-pre-deploy
タイムスタンプ 2026-05-06_1315
取得日時 2026-05-06 13:15 JST(v9.66 完了時点)
最後のデプロイ 13:15 v9.66 9項目バッチ(タイマー記録なし表示削除 / アポ獲得青色削除 / 休眠候補削除 / 架電対象ロジック改修(自分のみ+今日は残す) / CSV取込で架電担当者一括選択 / 架電対象モーダル地味化 / キックオフMTG縦並び / オンボーディング drag&drop / 二重フィルタ確認)
1個前のデプロイ 11:46 v9.65(ダッシュボード反映漏れ修正 + ナビ閲覧マーク&β強化)
scale-ai-proxy wrangler.toml に AI binding + R2 binding 追加・/transcribe(Whisper Workers AI)+ /upload (R2) + /uploads/{key} (R2 GET) 新設
通算デプロイ数 2日間で 49デプロイ(5/5 = v9.18〜v9.46 / 5/6 = v9.47〜v9.66)
旧最後のデプロイ 11:40 v9.34(発展機能16件)
使い方サイト https://scale-lead-manual.pages.dev/call-list
AI Proxy https://scale-ai-proxy.y-ogushi.workers.dev (POST /webfetch + /zoom/users + /zoom/sync)
主要編集ファイル calllist.js (3200行+) / pages.js / core.js / lib/pages_voice.js / lib/pages_report.js / lib/pages_updates.js (新規) / lib/pages_segments.js (新規)
旧最後のデプロイ 09:09 v9.28 タイマーリロード修正 / 07:53 v9.18 音声分析ページ表示修正
使い方サイト https://scale-lead-manual.pages.dev/call-list
AI Proxy https://scale-ai-proxy.y-ogushi.workers.dev (POST /webfetch 追加・5/4 14:??)

当日 tar.gz バックアップ一覧(時系列)

時刻 ファイル 取得直前の作業
11:40 ~/scale-lead-backups/scale-lead-2026-05-04-1140-pre-listreq.tar.gz リスト依頼 Slack通知 + 履歴強化 直前
12:12 ~/scale-lead-backups/scale-lead-2026-05-04-1212-pre-unlock.tar.gz PMロック解除 6ページ 直前
12:36 ~/scale-lead-backups/scale-lead-2026-05-04-1236-pre-callrenewal.tar.gz 架電リスト全面リニューアル 直前
12:52 ~/scale-lead-backups/scale-lead-2026-05-04-1252-pre-knlbadge.tar.gz ナレッジバッジ + stColors 正規化 直前
13:04 ~/scale-lead-backups/scale-lead-2026-05-04-1304-pre-ngrenewal.tar.gz NGリスト改修(salesNowLink検知)直前
13:15 ~/scale-lead-backups/scale-lead-2026-05-04-1315-pre-call3fix.tar.gz 架電リスト3件改修(全件削除/読取専用/列順/説明文)直前
13:16 ~/scale-lead-backups/scale-lead-2026-05-04-1316-pre-kickofffix.tar.gz キックオフMTG(M/D/タスク追加)直前
13:22 ~/scale-lead-backups/scale-lead-2026-05-04-1322-pre-aicocreate.tar.gz AI共創 5項目修正直前
13:29 ~/scale-lead-backups/scale-lead-2026-05-04-1329-pre-detailmodal.tar.gz 架電リスト詳細モーダル改修直前
13:33 ~/scale-lead-backups/scale-lead-2026-05-04-1333-post-deploy.tar.gz 午後5デプロイ完了後
13:54 ~/scale-lead-backups/scale-lead-2026-05-04-1354-pre-sn-pulldown.tar.gz SalesNow規模プルダウン化 + タイマー強制ガード 直前
13:58 ~/scale-lead-backups/scale-lead-2026-05-04-1358-post-deploy.tar.gz 11デプロイ完了後
14:07 ~/scale-lead-backups/scale-lead-2026-05-04-1407-pre-rank.tar.gz SCALEランク反映 直前
14:11 ~/scale-lead-backups/scale-lead-2026-05-04-1411-post-deploy.tar.gz 12デプロイ完了後
14:16 ~/scale-lead-manual-backups/scale-lead-manual-2026-05-04-1416-pre-callguide.tar.gz 使い方サイト超詳細化 直前(manual側)
14:21 ~/scale-lead-backups/scale-lead-2026-05-04-1421-post-deploy.tar.gz 13デプロイ完了後
15:07 ~/scale-lead-backups/scale-lead-2026-05-04-1507-pre-changelog-d1.tar.gz ChangeLog D1版 + 詳細モーダル可読性改善 直前
15:12 ~/scale-lead-backups/scale-lead-2026-05-04-1512-post-deploy.tar.gz 14デプロイ完了後(ChangeLog D1版 + 可読性改善)
15:?? ~/scale-lead-backups/scale-ai-proxy-2026-05-04-15??-pre-webfetch.tar.gz scale-ai-proxy webfetch 追加 直前
15:23 ~/scale-lead-backups/scale-lead-2026-05-04-1523-post-deploy.tar.gz 15デプロイ完了後(AI共創 v2 リニューアル)
17:07 ~/scale-lead-backups/scale-lead-2026-05-04-1707-post-deploy.tar.gz 24デプロイ完了後(v9.11-12 グローバル監査ログD1同期 + 左下バッジ自動同期 + リセット履歴保存)
17:33 ~/scale-lead-backups/scale-lead-2026-05-04-1733-pre-badge-refresh.tar.gz v9.13 メンバー編集後バッジ即時反映 直前
17:34 ~/scale-lead-backups/scale-lead-2026-05-04-1734-post-deploy.tar.gz v9.13 デプロイ完了後
19:11 ~/scale-lead-backups/scale-lead-2026-05-04-1911-pre-deploy.tar.gz v9.14 saveMember async化 直前
19:16 ~/scale-lead-backups/scale-lead-2026-05-04-1916-post-deploy.tar.gz v9.14 デプロイ完了後
19:21 ~/scale-lead-backups/scale-lead-2026-05-04-1921-post-deploy.tar.gz v9.15 デプロイ完了後(キャッシュバスター自動更新化)
19:29 ~/scale-lead-backups/scale-lead-2026-05-04-1929-post-deploy.tar.gz v9.16 デプロイ完了後(DOMContentLoaded ラップ + 正規表現修正)
05-05 06:22 ~/scale-lead-backups/scale-lead-2026-05-05-0622-post-deploy.tar.gz v9.17 デプロイ完了後(X-User encodeURIComponent化)
05-05 07:53 ~/scale-lead-backups/scale-lead-2026-05-05-0753-pre-voicefix.tar.gz v9.18 音声分析ページ表示修正 直前
05-05 07:53 ~/scale-lead-backups/scale-lead-2026-05-05-0753-post-deploy.tar.gz v9.18 完了(renderVoiceAnalysis innerHTML 追加)
05-05 08:01 ~/scale-lead-backups/scale-lead-2026-05-05-0801-post-deploy.tar.gz v9.19 完了(メンバー一覧 ✕ボタン削除)
05-05 08:09 ~/scale-lead-backups/scale-lead-2026-05-05-0809-post-deploy.tar.gz v9.20 完了(タイマーガード文言改修 + companyName→company修正 + 担当案件R/Tアイコン削除)
05-05 08:12 ~/scale-lead-backups/scale-lead-2026-05-05-0812-post-deploy.tar.gz v9.21 完了(HP空欄→Google検索リンク _clHpSearch
05-05 08:27 ~/scale-lead-backups/scale-lead-2026-05-05-0827-post-deploy.tar.gz v9.22 完了(三点マッチ実装・intent_log + 電話番号 + ±3分で共有内線でも個人特定可能化)
05-05 08:36 ~/scale-lead-backups/scale-lead-2026-05-05-0836-post-deploy.tar.gz v9.23 完了(部署別電話番号機能 案E・c.departments[])
05-05 08:40 ~/scale-lead-backups/scale-lead-2026-05-05-0840-post-deploy.tar.gz v9.24 完了(部署インライン編集化・prompt廃止)
05-05 08:48 ~/scale-lead-backups/scale-lead-2026-05-05-0848-post-deploy.tar.gz v9.25 完了(アイドル確認モーダル絵文字→SVGアイコン)
05-05 08:57 ~/scale-lead-backups/scale-lead-2026-05-05-0857-post-deploy.tar.gz v9.26 完了(ステータスモーダル全項目必須化 + 閉じれない化・記載漏れ防止)
05-05 09:01 ~/scale-lead-backups/scale-lead-2026-05-05-0900-post-deploy.tar.gz v9.27 完了(育成ステータスからメアド削除)
05-05 09:09 ~/scale-lead-backups/scale-lead-2026-05-05-0909-post-deploy.tar.gz v9.28 完了(タイマーリロード修正 + 稼働終了報告漏れ検知)
05-05 10:05 ~/scale-lead-backups/scale-lead-2026-05-05-1005-post-deploy.tar.gz v9.29 完了(SalesNOW詳細モーダル・28項目折りたたみ表示)
05-05 10:35 ~/scale-lead-backups/scale-lead-2026-05-05-1035-post-deploy.tar.gz v9.30 完了(カスタム分析タブ + アップデート情報ページ + セグメント管理ページ
05-05 10:47 ~/scale-lead-backups/scale-lead-2026-05-05-1047-post-deploy.tar.gz v9.31 完了(セグメント一括/CSV取込時/画像アップ/チャート)
05-05 11:08 ~/scale-lead-backups/scale-lead-2026-05-05-1108-post-deploy.tar.gz v9.32 完了(機能拡張9件)
05-05 11:22 ~/scale-lead-backups/scale-lead-2026-05-05-1122-post-deploy.tar.gz v9.33 完了(列表示設定 + Whisper文字起こし + R2画像アップロード)+ scale-ai-proxy デプロイ(AI/R2 binding)
05-05 11:40 ~/scale-lead-backups/scale-lead-2026-05-05-1140-post-deploy.tar.gz v9.34 完了(発展機能16件)
05-05 14:00 ~/scale-lead-backups/scale-lead-2026-05-05-1400-post-deploy.tar.gz v9.35 完了(AI共創メッセージ崩れ修正・div→span)
05-05 14:30 ~/scale-lead-backups/scale-lead-2026-05-05-1430-post-deploy.tar.gz v9.36 完了(AI共創3機能: 自分で書く/学習風/スクリプト5パターン)
05-05 14:55 ~/scale-lead-backups/scale-lead-2026-05-05-1455-post-deploy.tar.gz v9.37 完了(SCALEロゴ統一+タイマー累積保証+開放履歴クリック表示)
05-05 15:10 ~/scale-lead-backups/scale-lead-2026-05-05-1510-post-deploy.tar.gz v9.38 完了(<span> 保護タグ追加・バッジHTML崩れ修正)
05-05 15:25 ~/scale-lead-backups/scale-lead-2026-05-05-1525-post-deploy.tar.gz v9.39 完了(履歴圧縮初版・Haiku要約・15ターン超え発動)
05-05 15:45 ~/scale-lead-backups/scale-lead-2026-05-05-1545-post-deploy.tar.gz v9.40 完了(節約+品質保証アップグレード: Sonnet要約/PM発言原文保持/rawArchive退避/25→15保持)
05-05 15:55 ~/scale-lead-backups/scale-lead-2026-05-05-1555-post-deploy.tar.gz v9.41 完了(HP列⚡自動ボタン削除)
05-05 16:00 ~/scale-lead-backups/scale-lead-2026-05-05-1600-post-deploy.tar.gz v9.42 完了(HP列の色入れ替え・Linkを青/検索をグレーに)
05-05 16:05 ~/scale-lead-backups/scale-lead-2026-05-05-1605-post-deploy.tar.gz v9.43 完了(架電リスト4点修正: 商談日クイック選択+架電後メモ/伝達事項+規模プルダウン正規化)
05-05 16:28 ~/scale-lead-backups/scale-lead-2026-05-05-1628-post-deploy.tar.gz v9.44 完了(アポ獲得リスト全面リニューアル: 15列構成・インライン編集・月フィルタ・3ヶ月上限ゲージ)
05-05 16:34 ~/scale-lead-backups/scale-lead-2026-05-05-1634-post-deploy.tar.gz v9.45 完了(Slack案件専用チャンネル自動化: apo+loss 2chan auto-create + 3名メンション)
05-05 16:50 ~/scale-lead-backups/scale-lead-2026-05-05-1650-post-deploy.tar.gz v9.46 完了(7項目バッチ: CSV multi-seg / 再架電日クイック / 列ヘッダー説明 / 日報必須化+ナレッジ集反映+ランクリンク / タイマー誤閉じ保護 / タイマー横の数値+目標ボタン / リロードページ復元・最新基準点)
05-09 15:30 ~/scale-lead-backups/scale-lead-2026-05-09-1530-pre-svcsite.tar.gz サービス概要 → サイト化機能実装 直前
05-09 15:58 ~/scale-lead-backups/scale-lead-2026-05-09-1558-post-deploy.tar.gz v9.67 完了(サービス概要 → サイト形式 公開機能)
05-09 16:04 ~/scale-lead-backups/scale-lead-2026-05-09-1604-pre-deploy.tar.gz v9.68 ロック/閲覧バッジ色統一+PM時表示 直前
05-09 16:05 ~/scale-lead-backups/scale-lead-2026-05-09-1605-post-deploy.tar.gz v9.68 完了(ナビバッジ:色をtext3に統一・PM時も他ロールへのロック/閲覧設定を可視化)
05-09 16:30 ~/scale-lead-backups/scale-lead-2026-05-09-1630-pre-deploy.tar.gz v9.69 リスト依頼 7項目大型改修 直前
05-09 16:30 ~/scale-lead-backups/scale-lead-2026-05-09-1630-post-deploy.tar.gz v9.69 完了(リスト依頼:ガイドサイト化 / 新規⇄履歴タブ / ドラフト自動保存 / SNスコア削除 / 全条件詳細展開 / 5段階評価2軸+架電連携メトリクス / Slackメンション修正)
05-09 16:37 ~/scale-lead-backups/scale-lead-2026-05-09-1637-post-deploy.tar.gz v9.70 完了(音声分析: 同期時の強制遷移を禁止 / ロック・閲覧バッジ濃度をナビアイコンと完全一致に修正)
05-09 16:50 ~/scale-lead-backups/scale-lead-2026-05-09-1650-post-deploy.tar.gz v9.71 完了(権限設定: β版列を視認性UP・ON/OFFトグル化 + テーブル横スクロール対応 + セクション列sticky)
05-09 16:54 ~/scale-lead-backups/scale-lead-2026-05-09-1654-post-deploy.tar.gz v9.72 完了(パートナーオンボNAをAgenda準拠の列構成に統一 / ナビバッジ重複表示を1個に集約・鍵優先)
05-10 11:13 ~/scale-lead-backups/scale-lead-2026-05-10-1113-post-deploy.tar.gz v9.73 完了(個人ダッシュ月次/週次/日次タブ化+タイマー削除 / ナレッジ集会社名クリックで架電詳細モーダル / 案件編集に3ヶ月上限+期間追加・targets+svc同期)
05-10 11:29 ~/scale-lead-backups/scale-lead-2026-05-10-1129-post-deploy.tar.gz v9.74 完了(アイコン反映バグ修正 / オンライン判定をvisibility+idle化 / β版を「表示のみ」仕様に / スクリプト5テンプレ+サイト形式公開+マニュアル充実化)
05-10 11:40 ~/scale-lead-backups/scale-lead-2026-05-10-1140-post-deploy.tar.gz v9.75 完了(β版をプルダウン選択肢に統合・独立列&トグル廃止 / バッジ位置を鍵・目と同じ右端に統一)
05-10 11:46 ~/scale-lead-backups/scale-lead-2026-05-10-1146-post-deploy.tar.gz v9.76 完了(βバッジの色を鍵・目と同じモノクロに統一・var(--text2) opacity:.5)
05-10 11:49 ~/scale-lead-backups/scale-lead-2026-05-10-1149-post-deploy.tar.gz v9.77 完了(新規案件モーダルを編集モーダルと完全統一・全フィールド入力可能)
05-10 11:57 ~/scale-lead-backups/scale-lead-2026-05-10-1157-post-deploy.tar.gz v9.78 完了(Slackスラッグの日本語エラー案内強化 / teleapo_general を AUTO ラベル化)
05-10 12:05 ~/scale-lead-backups/scale-lead-2026-05-10-1205-post-deploy.tar.gz v9.79 完了(Slackスラッグ日本語OK化 / アイコン反映バグ修正(localStorage直接読み+3段階リフレッシュ+cache-bust) / 変更履歴に全フィールド差分詳細展開)
05-10 12:08 ~/scale-lead-backups/scale-lead-2026-05-10-1208-post-deploy.tar.gz v9.80 完了(メンバーに「フルネーム」フィールド追加・苗字同名対策)
05-10 12:44 ~/scale-lead-backups/scale-lead-2026-05-10-1244-post-deploy.tar.gz v9.81 完了(NAV_ITEMS 8セクション再編 / 設定ページに「セクション表示設定(チャネル別)」UI追加・コード変更不要で表示制御可能に)
05-10 12:51 ~/scale-lead-backups/scale-lead-2026-05-10-1251-post-deploy.tar.gz v9.82 完了(個人ダッシュタブの絵文字をSVGアイコンに置換: 月次=barchart / 週次=calendar / 日次=calendar+dot)
05-10 13:09 ~/scale-lead-backups/scale-lead-2026-05-10-1309-post-deploy.tar.gz v9.83 完了(3ヶ月アポ上限カウントを「商談日(meetingDate)」基準に統一・3箇所で共通関数化)
05-10 13:12 ~/scale-lead-backups/scale-lead-2026-05-10-1312-post-deploy.tar.gz v9.84 完了(アポ獲得リスト・商談予定・NGリストを「PM」→「テレアポ-運用」に移動)
05-10 13:34 ~/scale-lead-backups/scale-lead-2026-05-10-1334-post-deploy.tar.gz v9.85 完了(AI共創の文字化け修正: SAFE0/1 プレースホルダ漏れ → \x00PRTCT 制御文字ベースに変更 / Markdown テーブル → HTML 変換追加)
05-10 13:39 ~/scale-lead-backups/scale-lead-2026-05-10-1339-post-deploy.tar.gz v9.86 完了(AI共創引用ブロックのスタイル改善: 黒背景+左青線 → 薄い青背景+角丸ボックスに変更)
05-10 13:48 ~/scale-lead-backups/scale-lead-2026-05-10-1348-post-deploy.tar.gz v9.87 完了(AI共創 CHOICES ボタン省略バグ修正・毎回必須リマインダー + 自動フォールバック)
05-10 14:09 ~/scale-lead-backups/scale-lead-2026-05-10-1409-post-deploy.tar.gz v9.88 完了(AI共創 進捗バー追加 / 完成度90%超で最終深掘りモード発動・customInsights 配列で事業特有情報を保存・サービス概要に表示)
05-10 14:17 ~/scale-lead-backups/scale-lead-2026-05-10-1417-post-deploy.tar.gz v9.89 完了(AI共創 ストリーミング表示実装・読みながら待てる体験に / SSE優先・非対応時は疑似ストリーミング+通常版フォールバック)
05-10 14:25 ~/scale-lead-backups/scale-lead-2026-05-10-1425-post-deploy.tar.gz v9.90 完了(AI共創 ストリーミング暫定バブル残存バグ修正・try/finally で必ず dispose / 暫定表示で [CHOICES] タグを隠す)
05-10 14:30 ~/scale-lead-backups/scale-lead-2026-05-10-1430-post-deploy.tar.gz v9.91 完了(AI共創タイマー: モーダル非表示・別セクション・タブ裏で自動停止・「一時停止中」表示)
05-10 14:36 ~/scale-lead-backups/scale-lead-2026-05-10-1436-post-deploy.tar.gz v9.92 完了(AI共創 後半品質改善: CHOICES文脈推測フォールバック / max_tokens 3000-5000 / 履歴圧縮閾値 18 / リマインダー強化)
05-10 15:51 ~/scale-lead-backups/scale-lead-2026-05-10-1551-post-deploy.tar.gz v9.93 完了(クライアント要確認システム実装: AI共創ボタン+専用ページ+確定アクション+次回セッション自動注入)
05-10 16:04 ~/scale-lead-backups/scale-lead-2026-05-10-1604-post-deploy.tar.gz v9.94 完了(AI共創 文言途切れ4重対策: max_tokens 5000/8000 + タイムアウト300秒 + 完結判定+継続生成 + 簡潔指示)
05-10 16:39 ~/scale-lead-backups/scale-lead-2026-05-10-1639-post-deploy.tar.gz v9.95 完了(AI共創コスト削減3点セット: プロンプトキャッシング + モデル段階使用 + 履歴キャッシング・推定75-90%削減)
05-10 16:44 ~/scale-lead-backups/scale-lead-2026-05-10-1644-post-deploy.tar.gz v9.96 完了(AI共創 [CHOICES] パーサー堅牢化・ボタンが文章と混在するバグ修正)
05-10 16:19 ~/scale-lead-backups/scale-lead-2026-05-10-1619-post-deploy.tar.gz v9.97 完了(AI共創 バッチ質問モード・似た構造の項目を1ターンで2〜3問まとめて並列質問→人間の確認時間とAI出力時間を重ねて待ち時間を消す)
05-10 16:26 ~/scale-lead-backups/scale-lead-2026-05-10-1626-post-deploy.tar.gz v9.98 完了(AI共創 学習FBシステム・担当者の指摘をAIが [LEARN] タグで明示→グローバル localStorage に蓄積→次回以降のシステムプロンプトに自動注入で全案件横断適用)
05-10 16:32 ~/scale-lead-backups/scale-lead-2026-05-10-1632-post-deploy.tar.gz v9.99 完了(AI共創 レート制限耐性 + プロンプト圧縮・429自動リトライ + svc/履歴/学習FB圧縮 + COCREATE_VERSIONS 履歴大幅追加 v9.36〜v9.99)
05-10 17:07 ~/scale-lead-backups/scale-lead-2026-05-10-1707-post-deploy.tar.gz v9.100 完了(AI共創 バックグラウンドジョブ化・モーダル閉じる/最小化/別ページ遷移しても処理が止まらない・グローバルバッジで進行状態可視化・再オープン時に自動復帰)
05-10 17:13 ~/scale-lead-backups/scale-lead-2026-05-10-1713-post-deploy.tar.gz v9.101 完了(AI共創 選択肢ボタンの柔軟化・必須は「📋クライアント要確認」「✏️自分で書く」の2つだけ・他は質問内容に応じて2〜8個まで柔軟に変える)
05-10 17:18 ~/scale-lead-backups/scale-lead-2026-05-10-1718-post-deploy.tar.gz v9.102 完了(AI共創 完了ボタン改善・進行中リクエストキャンセルでトークン消費停止 + 引き継ぎ4要素を可視化 + 新セッション開始時に引き継ぎバナー)
05-10 17:32 ~/scale-lead-backups/scale-lead-2026-05-10-1732-post-deploy.tar.gz v9.103 完了(サービス概要 大規模整理・タブ削除・KO連携分離・完成度定義変更・擦り合わせ自動ステータス・学習FBカテゴリ別表示・サイト出力修正・ピッチ系改行ルール)
05-10 17:42 ~/scale-lead-backups/scale-lead-2026-05-10-1742-post-deploy.tar.gz v9.104 完了(セクション再編成: サービス概要を最上段に / クライアント要確認をサービス概要タブに統合 / MTGカテゴリ新設 / 運営をPMへ統合 / 発信ログ・メールをPMへ / アップデートを概要へ + 変更履歴の表示強化)
05-10 17:51 ~/scale-lead-backups/scale-lead-2026-05-10-1751-post-deploy.tar.gz v9.105 完了(ペルソナ整形 + バッチモード直接入力 + キャンペーンなし対応)
05-10 17:55 ~/scale-lead-backups/scale-lead-2026-05-10-1755-post-deploy.tar.gz v9.106 完了(エレベーターピッチ「。=1行空白/、=改行」整形ルール + サイト未公開ページUX改善)
05-10 18:02 ~/scale-lead-backups/scale-lead-2026-05-10-1802-post-deploy.tar.gz v9.107 完了(AI共創 別ページ後の崩れ修正・進行止まり修正・派手な完了通知トースト + ブラウザ通知)
05-10 18:06 ~/scale-lead-backups/scale-lead-2026-05-10-1806-post-deploy.tar.gz v9.108 完了(メンバー保存500エラー修正・base64アバター肥大化対策・自動リトライ・エラー詳細表示)
05-10 18:16 ~/scale-lead-backups/scale-lead-2026-05-10-1816-post-deploy.tar.gz v9.109 完了(D1サーバー側500耐性・AI共創進行止まり根絶 localStorage永続化・虚偽報告防止・全項目埋め切り強制)
05-10 18:54 ~/scale-lead-backups/scale-lead-2026-05-10-1854-post-deploy.tar.gz v9.110 完了(サービス概要 大規模整理: 商材深掘り/クライアント企業欄 削除 / Hero Card インライン編集化 / 料金体系サマリ削除 / ターゲット項目 1行空け整形 / KO連携バッジ表示 / クライアント要確認タブにKO連携項目直接入力セクション追加・双方向連携)
05-10 19:01 ~/scale-lead-backups/scale-lead-2026-05-10-1901-post-deploy.tar.gz v9.111 完了(ターゲット項目の自動整形撤廃: 「・は改行しないで欲しい / 手動で改行・編集できる仕様に」FB対応・_svcFormatTargetList を恒等関数化・説明文削除)
05-10 19:09 ~/scale-lead-backups/scale-lead-2026-05-10-1909-post-deploy.tar.gz v9.112 完了(🚨D1 500MB上限到達インシデント対応: audit_log全削除で499MB→3.85MB解放 + 雪だるま再発防止のSKIP_PATTERNS拡張 + サービスサイト保存復活 / AI共創バッジ全経路同期: navigateTo自動最小化 + _coCreateGetElapsedSec新設で--:--表示バグ修正 / Hero Card「PRICE」→「APO PRICE / アポ単価」明確化)
05-10 19:15 ~/scale-lead-backups/scale-lead-2026-05-10-1915-post-deploy.tar.gz v9.113 完了(クライアント要確認タブのKPI/数値基準セクション全削除 + AI共創ラリー最小化モード: バッチ質問をデフォルト化・1ターン3〜7項目まとめて質問・1問1答は深掘り中のみ・最上位ルール0番に「ラリー最小化×品質維持」昇格)
05-10 19:20 ~/scale-lead-backups/scale-lead-2026-05-10-1920-post-deploy.tar.gz v9.114 完了(AI共創メッセージ改行レンダリング根本修正: AIが改行なしで markdown 吐き出すケース対策・_mdToHtml 前段で ##/###/---/[CHOICES]/[LEARN] 前後に強制改行注入 + 箇条書き/番号リストも自動改行 + AIプロンプトに「改行必須・1行詰めるな」明示で二重対策)
05-10 19:26 ~/scale-lead-backups/scale-lead-2026-05-10-1926-post-deploy.tar.gz v9.115 完了(アポ単価フィールド全箇所削除: Hero Card APO PRICE / 商材詳細「アポ単価」/ 完成度カウント / 擦り合わせリスト / AI共創未入力リスト / AIプロンプト言及 / 競合比較表価格行 / 一括編集モーダル / saveService / サイトHTML Unit Price / ai.js の svc.unitPrice 参照は svc.pricing に切替)
05-10 19:37 ~/scale-lead-backups/scale-lead-2026-05-10-1937-post-deploy.tar.gz v9.116 完了(サービス概要サイト 全面リニューアル: scale-morning テイスト・ダーク × オレンジアクセント・凝った図解 — Sidebar TOC / Top bar / スクロール進捗バー / Hero グラデ / 12セクション構成 / 課題仮説3ステップ図解 / Before/After 対比カード / 比較表 / ペルソナアバター / FAQ アコーディオン)
05-10 19:46 ~/scale-lead-backups/scale-lead-2026-05-10-1946-post-deploy.tar.gz v9.117 完了(CSV取込み3点改修+サイトURL slug化: ①セグメント名(大串①)+条件 両表示・name未設定は選択肢から除外+警告 ②取込み後プリセット自動「全件」化(targetでcallPerson不一致だと0件表示の根本対策)+ segmentテーブルセル segmentIds対応 ③案件編集に「サイトURL slug」入力追加・_site_slug_index 逆引きindex・functions/s/[id].ts 両対応で公式感ある /s/yui-group のような URL 実現)
05-10 19:53 ~/scale-lead-backups/scale-lead-2026-05-10-1953-post-deploy.tar.gz v9.118 完了(6点修正: ①リスト依頼Slack通知のサイレントスキップ撤廃→明示警告toast ②直接入力でページ上部に戻るバグを_rerenderKeepScrollにwindow.scrollY保存追加で根治 ③サービス概要のURLを自動でaタグリンク化(_svcAutoLink新設・stopPropagation) ④キャンペーンタブのKO連携バナー削除 ⑤商談スタンスに「※チェックある商談スタンスであれば問題ない」注釈追加 ⑥アポ獲得リスト3ヶ月上限ゲージを5列grid+中央揃えでバランス改善)
05-10 20:00 ~/scale-lead-backups/scale-lead-2026-05-10-2000-post-deploy.tar.gz v9.119 完了(架電リスト4点改修: ①CSVボタン重複削除→page-actionsの一番上に集約 ②「📜 取込履歴」ボタン+モーダル新設(imported_at/by/from でグループ化集計・SalesNow判定・件数/担当者/セグメント/NG/アポ/失注集計) ③processImportCSV を async+await fetch で D1 同期保証→リロードでデータ消失バグ根治 ④アクティブフィルタ可視化バー: プリセット/検索/ステータス/担当者/セグメント/スクリプトを色付きチップで一行表示・各チップで個別解除+全解除ボタン+ヒット件数)
05-10 20:04 ~/scale-lead-backups/scale-lead-2026-05-10-2004-post-deploy.tar.gz v9.120 完了(クライアント要確認文言調整+AI共創FAB状態反映: ①オファー文面 削除(クライアント要確認テキスト項目から) ②NGリスト hint→「スクリーニング条件」 ③理想リスト hint→「クライアントが考える質の高いリストの定義」 ④AI共創FAB状態反映: pending=青/completed=緑「✓ AI応答完了 → 返信お願いします」+ 完了経過時間+パルス/error=赤・即時反映 + completedAt記録 + restoreFromMin でクリア)
05-10 20:14 ~/scale-lead-backups/scale-lead-2026-05-10-2014-post-deploy.tar.gz v9.121 完了(サービスサイト全面再設計+AI共創リロード対策: ①AI共創 beforeunload警告 + lastUserText保存 + リロード後30秒以内なら自動再送→「止まらない」体験 ②サイト全面再設計: Cormorant Garamond + Noto Serif JP の重厚serif / オレンジ→warm gold (#d4a574) で高級感 / section padding 100px+card padding 48-56px の圧倒的余白 / 96px italic serif 番号+4階層section-head / paragraphs()で段落分け / quote/data-pair/num-cards で構造化してコピペ感解消)
05-10 20:19 ~/scale-lead-backups/scale-lead-2026-05-10-2019-post-deploy.tar.gz v9.122 完了(架電リスト2点: ①SalesNow自動項目の編集ロックを CL_READONLY_FIELDS に company/phone 追加で9項目に拡張・clInlineSaveで既存値あり×空文字選択時の confirm モーダル追加で誤タップ事故根絶 ②取込履歴を超詳細化: 全体サマリー+#番号+件数+SalesNow判定+秒単位日時+ファイル名+取込者+サンプル企業+6種ステータス内訳バッジ+架電担当者/セグメント/業界/規模 の4分布バー)
05-10 20:22 scale-lead-backups/scale-lead-2026-05-10-2022-post-deploy.tar.gz v9.123 完了(架電リスト最上部の「架電リストはまだ空です」案内バナー削除 + テーブル空状態メッセージも「データなし」のミニマル表示に簡素化)
05-11 05:31 scale-lead-backups/scale-lead-2026-05-11-0531-post-deploy.tar.gz v9.124 完了(サービスサイト5点改善: ①ペルソナ絵文字→Lucide風minimal SVG 8種に置換 ②pitchParagraphs新設で「。」段落分け+「、」改行で呼吸感 ③30秒/2分ピッチを縦並びに(flex column)・pitch-time 48px italic serif化 ④max-width 1100→1380/TOC 200→172で横幅拡大 ⑤html scroll-snap-type:y proximity + section min-height 80vh で1ページ感の余裕・モバイルでは無効化)
05-11 05:44 scale-lead-backups/scale-lead-2026-05-11-0544-post-deploy.tar.gz v9.125 完了(架電リスト フィルタ選択状態の視認性 大幅強化: ①プリセットボタン選択中は gradient blue + ✓ + 影 + scale 1.04 で目立たせ未選択は opacity .6 ②保存フィルタも紫 gradient + ✓で同様 ③ドロップダウン/検索ボックスに値が入ってる時は filter-active クラスで青 gradient + 太字白文字 + 影で強調 ④filterCL 内で各フィルタ要素に動的付与・解除)
05-11 05:47 scale-lead-backups/scale-lead-2026-05-11-0547-post-deploy.tar.gz v9.126 完了(AI共創 完了表示が出たり出なかったりするバグの根本修正: 根本原因 modalOpen 判定が要素の存在だけ見ていて最小化中も true 誤判定→activeRequest 上書き消失。修正① modalOpen を「overlay表示中&最小化されていない」に厳密化 修正② _updateGlobalCoCreateBadge も最小化中ならバッジ重複しないよう return → 別ページ/最小化/モーダル閉じ どの状態でも完了時に FAB/バッジが緑「✓ AI応答完了→返信お願いします」を必ず表示)
05-11 05:54 scale-lead-backups/scale-lead-2026-05-11-0554-post-deploy.tar.gz v9.127 完了(ログイン入力の親切化: doLogin でパスワード ●●●●●● + メンバー側 email/name/pass も trim+lower 正規化 + 失敗理由を明示「パスワードが違います(大文字小文字や全角に注意)」「このメールアドレスは登録されていません」 + index.html のメール/パスワード入力に autocapitalize="off" autocorrect="off" spellcheck="false" inputmode="email" を追加して iOS 自動大文字化対策)
05-11 06:06 scale-lead-backups/scale-lead-2026-05-11-0606-post-deploy.tar.gz v9.128 完了(トークスクリプト3点改修: ①.script-text 文字色を text2 → #f0f0f0 + font-size 14px + weight 500 で濃化 ②4タブ化「スクリプト/切り返し集/よくあるQ&A/刺さるキラーワード」+ script_qa / script_killers キー新設 + 各タブ用 addQa/saveQa/showQaModal / addKiller/saveKiller/showKillerModal 関数実装 ③AI共創 script モードで進捗% を「4タブ×25%」に切替(_coCreateUpdateProgress に mode 分岐) + AIプロンプト拡張で「スクリプト→切り返し→Q&A→キラーワード」の順に必ず完走 + JSON 自動取込(objections/qa/killers)対応)
05-11 06:13 scale-lead-backups/scale-lead-2026-05-11-0613-post-deploy.tar.gz v9.129 完了(メンバーtype変更反映+設定セクション権限NAV_ITEMS連動: ①getAllSectionDefs() を NAV_ITEMS から動的生成に変更(ハードコード廃止)②getDefaultPerms() を NAV_ITEMS カテゴリベース(common/teleapo/linkedin/results/admin)に変更 ③getSectionPerms() で新規セクションを default で自動補完 ④saveMember で _beforeType 保持→自分自身のtype変更時にサイドバー強制再描画+toast通知 ⑤BroadcastChannel で members 更新を他タブに即時通知)
05-11 06:19 scale-lead-backups/scale-lead-2026-05-11-0619-post-deploy.tar.gz v9.130 完了(メンバーtype変更を即時反映: ①visibilitychange イベントで _d1PollTick を即実行→タブ裏→表に戻った瞬間に最新同期 ②左下サイドバーに「🔄 同期更新」ボタン追加・forceD1Sync() で1時間前まで遡って members/projects 等の差分を取得+全UI再描画 ③_onRemoteChange の members 分岐で _refreshUserBadge / renderSidebar / _refreshOnlineMembersUI を明示呼出 + 通知 toast → タブ切替・手動・60秒polling の3経路で確実に最新化)
05-11 06:24 scale-lead-backups/scale-lead-2026-05-11-0624-post-deploy.tar.gz v9.131 完了(AI共創 max_tokens 大幅引上げ+バッチ集約強化+料金観点反映: ①max_tokens 通常5000→16000・draftMode 8000→32000(output 64k上限を活用)・タイムアウト 300→420秒・継続生成 2→3回・各継続 3000→8000 tok ②バッチ範囲 3〜7→5〜10項目・初動 7〜10項目に拡大 ③プロンプトに料金観点「input×ラリー数で累積するためまとめて出力した方が経済的」を明示 ④大原則6番「質と深掘りは絶対に落とさない・各項目仮説3案・抽象語不可」を追加)
05-11 06:27 scale-lead-backups/scale-lead-2026-05-11-0627-post-deploy.tar.gz v9.132 完了(左下サイドバーフッターの🔄同期更新ボタンを削除:v9.130で追加した手動同期ボタンが二行レイアウトになって見栄え悪化したFB対応・同期は visibilitychange と _onRemoteChange の自動同期で機能しているため不要・「アバター + 名前/役職 + ログアウト」の1行に戻った)
05-12 11:16 scale-lead-backups/scale-lead-2026-05-12-1116-post-deploy.tar.gz v9.158 完了(サービス概要 大整理 Phase 1: 30秒/2分ピッチ・購買プロセス4項目・除外NGブロック・先方すり合わせリストタブ をすべて撤去)
05-12 12:00 scale-lead-backups/scale-lead-2026-05-12-1200-post-deploy.tar.gz v9.159 完了(Phase 2: ターゲット優先順位 縦並び+Dランク追加(グレー系=クライアントNG指定)/ 過去データ・実績リスト情報を基本情報の下部に移動 / Before/After シナリオをペルソナカードの上部に移動)
05-12 12:00 scale-lead-backups/scale-lead-2026-05-12-1200-post-deploy.tar.gz v9.160 完了(Phase 3: SalesNow 業界マルチセレクト導入・リスト依頼セクションと完全同期・大業界/中業界 階層プルダウン Modal / ターゲットタブの業界 + 各ティア S/A/B/C/D に業界選択UI追加 / svc[field+'List'] 配列で保存・既存 textarea と併存 / wide modal)
05-12 12:02 scale-lead-backups/scale-lead-2026-05-12-1202-post-deploy.tar.gz v9.161 完了(Phase 4: KO連携項目 状態バッジ 4種類追加: ⏳ KO後に確定/✏ 仮入力済み/🚩 確認待ち/✓ 確定済み / 実績・リスト情報 + キャンペーンタブ最上部に説明バナー追加: 「空白は漏れではなく正常」「クライアント要確認タブで埋めると → KO後に確定値が反映」と明示)
05-12 12:05 scale-lead-backups/scale-lead-2026-05-12-1205-post-deploy.tar.gz v9.162 完了(Phase 5: AI共創 「ラリー最小化」→「品質第一・順序遵守」モード転換 / バッチ範囲 5-10項目→2-5項目(同一カテゴリ内のみ)/ 上から順番に埋める Phase 1-3 順序明文化 / 項目スコープ外を質問禁止(社名/FAQ/KPI等)/ ターゲット後半を埋めずに終わる問題対策 / 観点プルダウン式の質問規範)
05-12 12:20 scale-lead-backups/scale-lead-2026-05-12-1220-post-deploy.tar.gz v9.163 Polish(業界モーダル footer 固定 + 大業界チェックボックスで全選択/解除 + チップ表示を大業界グルーピング小カード化 / KO連携バナー文言を2箇所削除(紫バッジで意味伝わるFB) / 過去データからの学び4項目(topApoIndustries/worstApoIndustries/highConversionTraits/listFreshnessStandard)を KO連携項目化 — _koBadge+_koStatusBadge + secDiv koLinked=true + 完成度から除外 + 擦り合わせKO連携カテゴリへ移動)
05-12 12:50 scale-lead-backups/scale-lead-2026-05-12-1250-post-deploy.tar.gz v9.164 ペルソナカード絵文字→SVGアイコン化(👔/🤝/⚙️/💼/🎯/🏢/📊/🚀 → briefcase/handshake/settings/briefcase/target/building/chart/rocket)/ _ic に briefcase/settings/rocket の Lucide SVG path を追加 / ペルソナのボーダー色(青/緑/オレンジ/紫/シアン/ピンク/アンバー/エメラルド)と統一感あるアイコン色で描画)
05-12 13:00 scale-lead-backups/scale-lead-2026-05-12-1300-post-deploy.tar.gz v9.165 KO連携3項目に業界マルチセレクト+textareaハイブリッド入力(wonIndustries/idealList/targetNgList)
05-12 13:15 scale-lead-backups/scale-lead-2026-05-12-1247-post-deploy.tar.gz v9.166 svcField IME Enter誤判定+ぐらつき修正(compositionstart/end + e.isComposing + data-svc-key 位置補正)/ アポ率TOP3/Worst3 を 大業界マルチセレクト上限3つに変更(_svcOpenIndModal opts.majorOnly + maxSelect)/ リスト鮮度の基準(listFreshnessStandard)削除
05-12 13:30 scale-lead-backups/scale-lead-2026-05-12-1252-post-deploy.tar.gz v9.167 ベネフィット→地域置換(regionPriority統合・地域別優先度textarea撤去)/ 業界・売上規模・地域を SalesNow 同期マルチセレクト+textarea ハイブリッド化(CL_REVENUE + SALESNOW_PREFECTURES 47都道府県)/ サイト形式UIアーカイブ(ボタン+バナー非表示・publishServiceSite/svc.publishedSite はコード保持) / 新規関数: _svcRenderFlatChips/_svcFlatChipToggle/_svcRenderPrefChips/_svcOpenPrefModal/_svcPrefModal{Render,Toggle,ToggleBlock,Clear,Save}/_svcRemovePrefChip
05-12 13:40 scale-lead-backups/scale-lead-2026-05-12-1259-post-deploy.tar.gz v9.168 架電リスト一括選択UI(番号列の隣にチェックボックス列追加・全選択/個別選択・選択行ハイライト)/ 一括アクションバー(選択中件数 + ステータス一括変更/担当者一括変更/一括削除ゴミ箱/選択解除)/ window.clSelectedIds Set でグローバル状態管理 / audit_log bulk_status/bulk_person/bulk_delete 記録 / 削除スコープ確認: PD/PS は projKey="proj_" で案件IDプレフィックス → 他案件には絶対影響しない(safety確認済み) / sticky 列位置: #=left:30 / 企業名=left:66 / 電話番号=left:206
05-12 13:50 scale-lead-backups/scale-lead-2026-05-12-1304-post-deploy.tar.gz v9.169 緊急修正: 全件削除しても列が消えないバグ根治 / 真因: forceFetchCallListFromD1 v9.146 逆同期防御がタイミング誤判定でローカル旧データを D1 に書き戻して復活 / 対策: window._clJustPurged=true フラグ 5秒間 + _cache[key]=[] 明示クリア + シャドウバックアップ/スナップショット物理削除 + 遅延再描画 300ms/2000ms
05-12 14:10 scale-lead-backups/scale-lead-2026-05-12-1355-post-deploy.tar.gz v9.170 課題仮説 インライン直接入力(textarea autogrow + onblur 保存 + サブテキスト削除)/ リストセグメント「特になし」チェック追加(排他制御)/ スクリーニング条件カード新設(NGリストの下・箇条書き・KO連携項目化・_koBadge+_koStatusBadge)/ 新規関数: _chSaveInline / _svcAddScreening / _svcSaveScreening / _svcDelScreening / KO_LINKED_FIELDS に screeningCriteria 追加
05-13 08:33 scale-lead-backups/scale-lead-2026-05-13-0833-post-deploy.tar.gz v9.171 Slack作業報告 大規模改修: ①送信先バグ修正(案件専用 project.slackChannels.teleapo_work 優先・グローバル daily_report 固定経路廃止)②スレッド型日次報告(案件×メンバー×日付で1スレッド・親メッセージ ":date: MM/DD 日次報告(担当者) 【案件名】" + PM陣+大串 メンション)③開始通知 新規 slackPostStartReport(startCallTimer で「▶ 稼働開始 — HH:MM」をスレッド投稿)④中断/終了通知をスレッド化(簡素化・案件/日付/担当を親に集約・v9.53 二重投稿廃止)⑤slackPost 拡張 (opts.thread_ts + レスポンス返却) ⑥設定セクションに「案件別 Slack チャンネル設定」UI 追加(ダッシュボード案件編集と完全同期・projects[idx].slackChannels に直接書き込み)/ 新規関数: _slackGetOrCreateDailyThread / _slackPostStartReport / _renderSlackProjectChannels / _saveSlackProjectChannels / D1 key "projdaily_thread_" = {ts, channel}
05-13 08:40 scale-lead-backups/scale-lead-2026-05-13-0840-post-deploy.tar.gz v9.172 ①オンライン表示 案件スコープ化(isOnlineInCurrentProject 新設・別案件ログイン者は非表示)②架電報告スレッド集約(受付ブロック/失注/育成/資料請求/アポ獲得/メール日程調整 6種を1スレッドに・親メッセージ「:date: MM/DD 架電報告(担当者) 【案件名】」・🚫❌🌱📄🎯📧 アイコン+時刻+会社+詳細を子投稿)③_checkSlackOnStatusChange リファクタ(旧 slackNotifyApo/slackNotifyLoss 撤去・_slackPostCallReportToThread に統一)④メンション全廃止(cc:<@PM> 削除・親メッセージにメンションなし)⑤teleapo_loss 表示名を「失注報告」→「架電報告」へ(キーは互換性で温存)/ 新関数: _isOnlineInCurrentProject / _slackPostCallReportToThread / _slackGetOrCreateCallReportThread / D1 key "projcall_report_thread_" = {ts, channel}
05-13 09:05 scale-lead-backups/scale-lead-2026-05-13-0905-post-deploy.tar.gz v9.173 アポ獲得/メール日程調整 を 架電報告スレッドから除外 → 従来通り teleapo_apo チャンネルに単発投稿に戻す(タイトル+スレッドなし)/ _checkSlackOnStatusChange でアポ獲得経路は slackNotifyApo 復活+早期return / 架電報告スレッド対象を 6種→4種(受付ブロック/失注/育成/資料請求)/ slackNotifyApo の mentions 部分削除(v9.172メンション全廃止ルール準拠)/ teleapo_loss desc 更新
05-13 09:10 scale-lead-backups/scale-lead-2026-05-13-0910-post-deploy.tar.gz v9.174 ①メール日程調整を架電報告スレッドへ移動(未確定アポ判定で分離・5種類に拡大: 受付ブロック/失注/育成/資料請求/メール日程調整)・アポ獲得のみ teleapo_apo に単発 ②メール日程調整詳細「アポ日」→「日程候補」「ナレッジ」→「やりとり」+メモ追加で未確定明示 ③リスト依頼通知 送信先優先順位変更: 案件専用 teleapo_general → cfg.list_request → cfg.teleapo_general → C0B1ADM4EJ1 ④リスト依頼通知メンション全削除(<@U08N2PK3YCQ> 削除)→ PM自身が案件チャンネルで通知受け取れる ⑤エラーメッセージ「案件 > Slackチャンネル > teleapo_general を設定してください」に改善
05-13 09:15-10:50 (8回デプロイ) v9.175-v9.181 — Slackトレーサ追加 + オンライン表示 D1 強制fetch + 文面FMT修正 + 案件別Slack設定の同期問題根治 (D1強制fetch追加)
05-13 10:55 scale-lead-backups/scale-lead-2026-05-13-1055-post-deploy.tar.gz v9.182 真因修正: saveCallStatusModal に _checkSlackOnStatusChange トリガー追加 (必須項目モーダル経由のステータス変更時に Slack 通知が一度も呼ばれていなかった大バグ) + _detailSaveField の早期トリガー撤去 (二重通知防止)
05-13 10:58 scale-lead-backups/scale-lead-2026-05-13-1058-post-deploy.tar.gz v9.183 リスト依頼通知 案件専用チャンネル化: SLACK_PROJECT_CHANNEL_DEFS / SLACK_GLOBAL_CHANNELS に teleapo_list_request 新設 / 送信先優先順位を案件専用→グローバル の順に / メンバー自動招待リストにも追加
05-13 11:00 scale-lead-backups/scale-lead-2026-05-13-1100-post-deploy.tar.gz v9.184 ①ステータスモーダル過去値クリア (KEEP_PREVIOUS=contact/title/email/meetingUrl のみ前回値・lossReason/recallDate/meetingDate/apoKnowledge/memo は毎回まっさら) ②電話番号クリックコピー強化 (Promise + execCommand fallback) ③リスト依頼ドラフト自動復元廃止
05-13 10:47 scale-lead-backups/scale-lead-2026-05-13-1047-post-deploy.tar.gz v9.190 「日報入力に戻る」ボタン削除(FB「謎のボタン・なくしてOK」対応)
05-13 11:01 scale-lead-backups/scale-lead-2026-05-13-1101-post-deploy.tar.gz v9.185-v9.191 メンバー編集消失バグ追跡: _refreshOnlineMembersUI 防御 (v9.185) → MEMBER-TRACE 追加 (v9.186) → BroadcastChannel/D1Poll 防御 (v9.187) → _cache.members setter 傍受 (v9.188) → cache-bust 強制更新 (v9.189) → 配列要素 Proxy 検出 (v9.191) — 真因は読み取り経路にあった
05-13 11:50 scale-lead-backups/scale-lead-2026-05-13-1150-post-deploy.tar.gz v9.192 真因確定+根治: getMembers() の stored[idx]={...stored[idx],...dm} で DEFAULT_MEMBERS が stored を上書き → 大串・細川 の role/type が getMembers 呼び出しのたびに admin/pm に強制リセットされていた / 修正: merge 順序逆転 {...dm,...stored[idx]} で stored 優先・DEFAULT_MEMBERS は不足フィールド補完のみに役割限定 / トラブルシューティング集 D3 パターン追加 / Vault 4ファイルにラリー最小化ルール追加

2026-05-12 サービス概要+AI共創 大規模改修バッチ完了(v9.158〜v9.162 / 5バージョン)

FB対応一覧

FB 対応Ver 対応内容
30秒ピッチ・2分ピッチ削除 v9.158 UI+完成度+擦り合わせ+AI共創prompt 全削除
購買プロセスブロック削除 v9.158 UI+完成度+擦り合わせ+prompt 全削除
除外・NGブロック削除 v9.158 UI削除(targetNgList は KO連携で残存)
先方すり合わせリストタブ削除 v9.158 タブ撤去(svcSuriawaseItems は KO連携 status 内部利用で保持)
ターゲット優先順位 縦並び v9.159 grid-template-columns:1fr 1fr → 1fr
Dランク追加(クライアントNG) v9.159 tier_D フィールド + グレー系表示
過去データ・実績情報を基本情報下部へ v9.159 UI移動
Before/After をペルソナ上部へ v9.159 順序入れ替え
SalesNow業界系プルダウン化 v9.160 大業界/中業界 階層 Modal + チップ表示・targetIndustryList + tier_X_List
KO連携項目マーク v9.161 状態バッジ4種類 + 説明バナー2箇所
アウトプット品質第一 v9.162 ラリー最小化→品質第一モード転換・バッチ縮小
上から順番に丁寧に埋める v9.162 Phase 1-3 順序明文化
項目スコープ外を質問しない v9.162 「社名/FAQ/KPI等は svc にない→質問禁止」明記
ターゲット後半まで埋め切る v9.162 アンチパターン明示 + 全項目を埋め切るルール強化

退化リスク(次セッションで必ず守る)

  • svcSuriawaseItems 関数自体は KO連携 status 自動付与で内部利用:削除しない
  • pitch30s/pitch2m/exclusionCriteria/buyingProcess 等のフィールド名は svc データに残存:互換性のため変数参照(buildServiceSiteHTML 等)は維持
  • _svcRenderIndChips / _svcOpenIndModal 関連関数:lib/salesnow_industries.js (SALESNOW_INDUSTRIES) に依存
  • _koStatusBadge:svc.pendingConfirm[field].status を見る・新 KO連携項目追加時は同様にバッジを付ける
  • AI共創 v9.162 品質第一モード:バッチ範囲を 5-10項目に戻すと品質低下・項目スコープ外質問再発 → 戻さない

v9.109 詳細(2026-05-10 AI共創 全面強化)

ユーザー報告(複合):
1. サイトのリニューアル押すと「D1 sync failed: HTTP 500」(HTML サイズ巨大時)
2. AI共創セッションで違うページに行くと止まる(再発)
3. AI共創がサービス概要の空白箇所を埋まってないのに「埋めた」と虚偽報告
4. 全部完璧にAI共創セッションで埋めるようにしたい

根本原因分析:
- D1 PUT で audit_log の前後値合算が大きすぎて INSERT 失敗 → 全体500
- activeRequest が in-memory のみ → ページリロード/タブ閉じで状態消失
- AI が svc JSON を見ずに「埋めました」と発言(プロンプトで明示禁止が弱かった)
- 完了モーダルが完成度を表示するだけで未入力項目を可視化していなかった

修正カテゴリ 内容
A. D1 audit_log 耐性化 functions/api/data/[key].ts: _service_site / _html / _snapshots パターンの大きなキーは audit ログをスキップ。before+after 合計600KB超なら値を「(too large to log)」に置換。audit 失敗してもメイン upsert 成功なら 200 を返す(best-effort)
B. メイン upsert エラー詳細化 サイズ超過時に main upsert failed: <msg> / size=<bytes>B を返却 → 原因が特定可能に
C. activeRequest localStorage 永続化 sb__coCreateActiveRequest キーで永続保存。ページリロード・タブ復活後も状態復元
D. 古い pending 自動クリア 起動時 + send 時に「10分以上残ってる pending」を検出して自動 error 化(無限スタック解消)
E. ページ遷移後の error 化 リロード後の pending は fetch closure 消失しているため、status='error' に転換して再送可能に
F. 未入力項目セクションをプロンプトに動的注入 _coCreateBuildEmptyFieldsSection(svc) 新設: AI共創対象(KO連携除外)の25項目をリアルタイムチェック → 未入力リストを cachedBlock 先頭に注入。AI が svc 値を見ずに「埋まった」と虚偽できない物理的構造
G. 完成度% リアルタイム表示 プロンプト内で「サービス概要 完成度: X% (N/25 項目 埋め込み済み)」を毎ターン表示
H. 虚偽報告 絶対禁止ルール freshBlock の必須遵守ルール先頭に「★ 上記JSONを必ず確認 / 空欄を埋めたと言うな / JSONブロック出さずに反映完了と言うな / 完了宣言は未入力0個になってから」を明示
I. 完了モーダル 未入力リスト _coCreateFinishSession で未入力項目をオレンジバッジ集合で表示。完了前にユーザーが「あと何が空白か」を確実に視認可能
J. publishServiceSite 強化 retry(500時1.5秒後1回)+ 詳細エラー(D1 status・サイズKB・原因対処法)

動作確認シナリオ(修正後):
1. AI共創 中に別ページに移動 → 戻る → 進行中ならバッジで継続確認可能、完了済みなら turns に保存済みで再描画 OK
2. AI が空欄項目について「埋めました」と言うことは構造上ほぼ不可能(プロンプト先頭に未入力リストが見えるため)
3. 完了ボタン押下 → 未入力 N 件のオレンジリスト表示 → ユーザー判断で続行 or 完了
4. ページリロード → 古い pending が自動 error 化 → 再送可能
5. サイトリニューアル時に大きな HTML でも audit ログがスキップされて 500 出ない

v9.108 詳細(2026-05-10 メンバー保存500エラー修正)

ユーザー報告: メンバー追加時に「⚠️ サーバー保存に失敗しました(status=500)」エラー

根本原因:
- handleAvatarSelect で R2 アップロード失敗時に サイレントに base64 dataURL にフォールバックしていた
- 複数メンバーの avatarUrl が base64(数百KB/枚)になると、members 配列全体のJSONが D1 単一行サイズ上限(~1MB)を超える
- D1 INSERT が失敗 → 500 エラー
- ユーザー視点では「ただメンバー追加しただけなのに保存できない」状態

修正 内容
A. saveMember サイズチェック 保存前に JSON.stringify(members) のサイズを計測。800KB 超なら警告
B. base64 アバター自動検知 サイズ超過時に data: プレフィックスの avatarUrl を持つメンバー数をカウント → 「base64アバターを自動削除して保存」オプションを提示
C. 500エラー自動リトライ D1 PUT が status>=500 の場合は 1.5秒後に1回リトライ(一時的な D1 接続エラーへの耐性)
D. サーバーエラー詳細表示 res.json() で error メッセージを取得 → アラートに「【サーバーエラー詳細】」として表示 + サイズ情報付き
E. handleAvatarSelect: base64フォールバック廃止 R2 アップロード失敗時の サイレントbase64切替を廃止 → 明示的な confirm() で「base64で一時設定」or「中止」を選ばせる
F. quickUploadOwnAvatar も同様 オンラインバーから自分のアイコンクリック時のアップロードも同じフロー

ユーザーへの即時対処法:
- 今すぐ: メンバー編集モーダルで保存ボタンを押し直す → 800KB超なら自動で警告 + base64 削除オプション
- 推奨: アバター画像を一旦削除してから再保存 → R2 が復活したら再アップロード

v9.107 詳細(2026-05-10 AI共創UX強化)

ユーザー報告:
1. AI共創セッションから違うページに行った後、戻ってきたメッセージが崩れる
2. 進行が止まったりする
3. CRMの違う場所にいる時、AI共創でメッセージ受信したら右下に通知出るといい

根本原因:
- v9.100 の completed activeRequest 処理: モーダル閉じてた場合 status='completed' + fullText を保持 → 再オープン時に messages.some(m=>m.content===req.fullText) で重複チェックしていたが、messages は HTML剥がしバージョン vs req.fullText は raw([CHOICES]入り) → 一致せず → 二重描画 になっていた
- pending 通知バナーが残ったまま AI 応答が来ると重複表示

修正 内容
A. 完了処理を簡素化 coCreateProcessAnswer 完了時に activeRequest.fullText を保持しない(既に turns/messages に保存済み) → 再オープン時に重複描画される問題を根絶。{id, status:'completed', completedAt, notified} だけ保持
B. _coCreateRestoreChat 整理 restoreBanner はターン数あり時のみ・session.turns[i].meta.options が永続化されてれば復元時もボタン描画(v9.100 で _coCreateAppendTurn が options を meta に保存している)
C. 進行止まり修正 streamBubble の ensureDom() 内で pending 通知バナーを自動削除(重複表示防止)。AI 応答が coCreateAddMsg で来た時も pending 通知を削除
D. 派手な完了トースト _coCreateShowCompletionToast 緑グラデ + pulse アニメで右下に slide-in。応答プレビュー(120字, [CHOICES]/[LEARN]除去・Markdown剥がし)を表示。「後で見る」「開く →」ボタン。12秒で自動フェード。バブルクリック or 「開く →」で AI共創 復帰(最小化中なら復元、それ以外は startAICoCreate)
E. Notification API 連携 Notification.permission==='granted' かつ document.visibilityState!=='visible'(タブ非表示)時に OS レベルの通知を発火。許可未取得なら初回完了時に requestPermission()。クリックで window.focus() + モーダル復活
F. pending バナー強化 dot pulse アニメ + 「バックグラウンドで処理が継続しています。応答が来ると下に表示されます。」サブテキスト追加で進行感を可視化

動作確認シナリオ(修正後):
1. AI共創で送信 → モーダル「✕ 閉じる」 → 別ページへ移動
2. 数秒後、応答完了 → 右下に派手な緑トースト「🤖 AI共創 応答完了」 + 応答プレビュー表示
3. ブラウザを別タブにしていた場合 → OS 通知も発火(許可取得済みなら)
4. トーストの「開く →」ボタン → AI共創モーダルが復帰 → 完了応答が表示済み → 「✓ バックグラウンドで完了」緑バナーが上に表示(重複描画なし)
5. 進行中だった応答も pending 通知 → ストリームバブルへ自然に遷移

v9.106 詳細(2026-05-10 ピッチ整形ルール + サイト未公開UX)

ユーザー要望:
1. エレベーターピッチが見づらい → 「。」がついたら1行空白 / 「、」の箇所は改行 ルールで整形
2. サービスサイト未公開ページが冷たい → 公開手順や戻り導線を追加

修正 内容
A. _svcFormatPitch 新設 ピッチ専用整形ルール: 「。」「!」「?」 → \n\n(1行空白)/ 「、」「,」 → \n(改行)。既存の改行は保持しつつ、未整形の長文ベタ書きでも自動で呼吸感のある表示に変換。\\n{3,}→\\n\\n で過剰連続改行を抑制
B. svcField に formatMode 追加 svcField(key,val,type,formatMode)formatMode='pitch' 指定時は _svcFormatPitch を使用。pitch30s/pitch2m の呼び出しを更新
C. ピッチ表示スタイル調整 line-height: 1.85→2.0 / padding: 8px→14px 16px / font-size: 13px→13.5px + letter-spacing 微調整 → 呼吸感のあるトークスクリプトとして読みやすく
D. サイト未公開ページUX functions/s/[projectId].ts の notFoundHTML を改善: 公開手順4ステップ表示 + 「SCALE CRM を開く」プライマリボタン + 「🔄 再読み込み」サブボタン → 他メンバーが開いても何をすればいいか一目で分かる

v9.105 詳細(2026-05-10 ペルソナ整形 + バッチ直接入力)

ユーザー要望:
1. キャンペーンテンプレートに「キャンペーンなし」選択肢を追加(実施しない企業用)
2. ペルソナカードのタイトルが「undefin決裁者(採用課題系)」のように文字被り
3. ペルソナカードの中身に余白・項目ごとの改行が必要
4. AI共創バッチ質問モードで「✏️自分で書く」を押すと他Q差し置いて先に送信されてしまう(AI側でどのQへの回答か分からなくなる)

修正 内容
A. キャンペーンなし CAMP_TEMPLATES の先頭に新カテゴリ「キャンペーンなし」を追加。{name:'キャンペーンなし(特典・割引なし)',detail:'本サービスは標準価格・通常条件でご案内...',isNoneOption:true}。キャンペーン実施しない企業もテンプレから「なし」を明示的に選べる
B. ペルソナアイコンundefined修正 配列 ['👔','🤝','⚙️'][i] で i>=3 になると undefined → 「undefined」が文字列で表示されていた → modulo化 [icons[i%8]] に変更。8パターンのアイコン+色を循環使用(4人目以降も崩れない)
C. ペルソナタイトル文字被り修正 card-headerdisplay:flex;align-items:center;gap:10px;flex-wrap:nowrap。アイコン円(36px固定)とタイトル(flex:1)が並んで重ならない構造に。p.type に "undefined" 文字列が含まれていた場合は除去
D. ペルソナ中身の余白・改行 card-body を flex column + gap:14px で各項目を区切り。各項目に border-bottom:1px dashed で視覚的セパレータ。長文は _svcFormatLongText で自動改行 + white-space:pre-wrap
E. ペルソナグリッドのレスポンシブ化 grid-template-columns:repeat(3,1fr)repeat(auto-fit,minmax(280px,1fr)) に → 4人以上のペルソナでも自動で折り返し
F. AI共創バッチ直接入力 バッチモード各グループに「✏️ このQに直接書く」ボタンを追加。クリック → そのグループだけ inline <input> に切り替え(外部 textarea には行かない)。他のQの選択は維持
G. 一括送信時のフォーマット 直接入力したテキストも他のボタン選択と一緒に「Q1: A案でOK / Q2: [直接書いた内容] / Q3: B案でOK」として送信 → AI がどのQへの回答か明確に把握
H. バッチ状態に parts を保存 _coCreateBatchState[batchId].groups[i].parts を保持 → 「↩ 戻す」ボタンでボタン選択画面に正確に復元できる
I. ⌘+Enter 一括送信ショートカット inline input から ⌘+Enter で一括送信トリガー(最後のQを書き終わったらすぐ送信できる)

v9.104 詳細(2026-05-10 セクション再編成 + 変更履歴強化)

ユーザー要望:

サイドバー再編成:
- サービス概要をダッシュボードの上に
- クライアント要確認 → サービス概要のタブに統合(独立セクション削除)
- 新「MTG」カテゴリ作成(テレアポ-分析の下) → 週次MTG + 議事録/MTG
- 議事録/MTG → 「議事録」に改名
- 運営カテゴリの中身全部 PM カテゴリに → 運営カテゴリ削除
- 発信ログ管理・メール管理 → PM カテゴリに移動
- アップデート情報 → 概要カテゴリに移動

質問:
- アラートの判定基準は? → 5種類(リスト枯渇 < 20% / 再架電日超過 / オンボーディング遅延 / アポ数 < 50% / 日次未入力)
- データ管理の用途は? → JSON一括バックアップ・案件別CSVエクスポート・データリセット
- 変更履歴をしっかり「誰が何をどう変えたか」見えるように

修正カテゴリ 内容
A. NAV_ITEMS 再編成 core.js の NAV_ITEMS を全面刷新。概要カテゴリの順序を service→dashboard→kickoff→partner_onboard→manual→industry_knowledge→update_info に変更(service 最上段)。client_confirm 削除。テレアポ系に「MTG」カテゴリ新設し weekly_mtg + minutes 移動。results.PM に「運営」カテゴリ全項目(onboarding/tasks/list_mgmt/post_order/contracts)と intent_log/mail を統合。results.運営 削除。admin から intent_log/update_info/mail 削除
B. 議事録/MTG → 議事録 に改名 NAV_ITEMS の minutes.label を「議事録」に変更
C. クライアント要確認のタブ化 renderService の tabs 配列に client_confirm タブを追加。未確定件数を pct:-3, badge:N 方式でオレンジバッジ表示。renderClientConfirm の中身(サマリーカード3つ + 要確認カード + 確定済み履歴)を svcTab==='client_confirm' ブロックにインライン化。core.js の R テーブルで client_confirm: function(){window._svcTab='client_confirm';renderService()} にリダイレクト
D. 変更履歴の表示強化 _renderChangeLogList を「誰が・いつ・何を・どう変えたか」が一目で分かる UI に刷新。
ユーザーアバター: イニシャル+ハッシュベースのカラー(8色)+ shadow
自然言語表示: 「Aさん が 商材名 を ✎ 更新 しました」のように主語+目的語+述語
左ボーダー色でアクション種別を直感表示(追加=緑/更新=青/削除=赤/復元=紫)
直近3件の差分は自動展開(最新の変更がすぐ見える)
・案件名 + 編集ページ + タイムスタンプ(hover で秒まで)の補助情報
・「↩ この状態に戻す」ボタンの強調
E. ご質問への回答 アラート/通知 = generateAlerts() で5種類の自動判定(リスト枯渇 < 20% / 再架電日超過 / オンボ遅延 / アポ数 -50% / 日次未入力)。データ管理 = JSON一括バックアップ + 案件別CSVエクスポート + 全データ削除。変更履歴 = Undo履歴(直近100) + 監査ログ(直近1000) を統合表示・任意時点に復元可能

v9.103 詳細(2026-05-10 サービス概要 大規模整理)

ユーザー要望(11項目同時):
1. ナレッジ・KPI/数値基準タブまるっと削除
2. 学習FB押してもまとまってない → カテゴリ別整形
3. AI共創完了でも単価/コンセプト詳細などが空欄 → 全項目埋まったら100%
4. 30秒/2分ピッチが改行なくて見づらい
5. メール一文紹介削除
6. 導入実績データ → KO連携扱い
7. 業界マップなど長文の改行なし → 全体修正
8. サイト作成ボタンで出力したサイトが見える形式じゃない
9. キャンペーン/商談スタンス → KO連携扱い
10. 擦り合わせリスト 自動ステータス(KO連携=要確認/AI要確認=要確認/空白=要確認/入力済=入力済み)
11. AI共創で入力したところは入力済みステータスに

修正カテゴリ 内容
A. KO連携項目の体系化 KO_LINKED_FIELDS 配列を新設 — 導入実績(pastClosedCompanies/wonIndustries/successCases)・キャンペーン(campaigns/appealWords)・商談スタンス(salesStanceChecks)・ヒアリング系(hearing/hearingItems/objectionHandling)・FAQ・NGワード・KPI全般・ターゲットNG/理想リスト・オファー文面 を「契約後にクライアントと擦り合わせる項目」として明示
B. svcTabCompletion 改修 knowledge/hearing 削除、KO連携除外で計算。pitch30s/pitch2m/concept を basic に追加(過去頻繁に空欄のまま完了されていた)。campaign タブはKO連携のみなので常に100%扱い
C. タブ削除 tabs配列から kpiknowledge を削除。window._svcTab==='knowledge' or 'kpi''basic' にリダイレクト
D. メール一文紹介削除 renderService から svc.emailOneLiner のUI削除。プロンプトのフィールドリストからも削除
E. 導入実績データのUI削除 累計導入社数/平均ROI/NPS等のデータ入力UI削除(KO連携扱いに移動)
F. 長文の見やすさ改善 _svcFormatLongText(val) 新設: 改行なし100字超なら「。」「!」「?」で自動改行、250字超なら「、」も改行。元データは変更せず表示時のみ整形。textarea表示の line-height:1.85 + padding 拡大
G. 擦り合わせリスト改修 svcSuriawaseItems を全面書き換え — KO連携カテゴリを新設しすべての KO連携項目を集約。koLinked aiPending(svc.pendingConfirm の status='pending') フラグで自動ステータス計算: KO連携→要確認 / AI共創でクライアント要確認→要確認 / 空白→要確認 / 入力済→入力済み
H. ステータスドロップダウン拡張 新値 'auto' で手動上書きクリア → 自動計算に戻す。各ステータスにバッジ(KO連携/AI共創でクライアント要確認/未入力)でラベル横に理由表示。KO連携カテゴリのヘッダに「🤝 キックオフMTGで確定」バッジ
I. 学習FB一覧の整形 内容から自動カテゴリ推測(🔘ボタン・選択肢/❓質問の仕方/🗣口調/📏文字量/🎨形式/🔁進行/🎯具体性/🚫禁止/✅必須/📌その他)→ カテゴリ別グルーピング → 各グループ内 count降順ソート → モーダルサイズを large に
J. サイト出力修正 publishServiceSite を async 化、D1 への PUT を直接 await(debounced 300ms sync を待たない)→ 即「新しいタブで開く」しても 404 にならない。完了モーダルに プレビュー iframe を内蔵してその場で確認可能
K. AI共創プロンプト更新 「★v9.103 完成度の定義 + KO連携項目の扱い」セクション追加。KO連携リストを明示し「AI共創では埋めない・能動的に質問しない」を絶対遵守として明記。完成判定ルールで「AI共創対象を全部埋めるまで完了と言わない」を明記
L. ピッチ系改行ルール pitch30s/pitch2m を「【挨拶】〜\n\n【課題提起】〜\n\n【提案】〜\n\n【次アクション】〜」のように改行で構成パートを区切るルールをプロンプトに追加

期待効果:
- AI共創で「コンセプト詳細/単価/30秒ピッチ/2分説明」が必ず深掘り対象になる → 完了時の埋まり率が大幅向上
- KO連携項目はAI共創で時間を使わず、自動で「要確認」になり擦り合わせリストに集約
- 長文の読みやすさが改善(自動改行 + line-height)
- サイト出力が即見えるようになる + その場でプレビュー
- 学習FBが分類されて見やすく、編集・無効化しやすい

v9.102 詳細(2026-05-10 完了ボタン改善)

ユーザー指摘:
1. 「最後に完成ってなってから色々ラリー長いな。完全終了って押したら、一旦セッション閉じないと無駄なトークン使っちゃうことになるから防ぎたい」
2. 「右上の完了って押したら新しいセッションになるけど、学習はされてるの?※サービス概要は埋まっているから学習しているのかな?」
3. 「一回完成したけど、追加で依頼とか出てくるからいつ完成って押すか悩んでて」

根本原因:
- 完了ボタンが簡素な confirm() で「次回開いた時は新しいセッションになります」しか表示されず、引き継ぎ情報が不明
- 進行中の AI 応答があっても完了ボタン押下時にキャンセルされず、無駄トークン消費が発生
- 「完了 = 全部リセット」の誤解で、ユーザーが完了ボタンを押せず躊躇

修正 内容
A. 完了モーダル化 _coCreateFinishSessionconfirm() から高品質モーダルに変更。showModal で4要素の引き継ぎを視覚化(📚 学習FB件数 / 🎯 サービス概要完成度% / 📋 クライアント要確認件数 / 📜 過去セッション履歴)
B. 進行中リクエストキャンセル _coCreateState.activeRequest.status==='pending' を検知 → モーダル内に黄色警告表示 + ボタン文言を「⏹ 応答キャンセルして完了」に変更 → 実行時に status='cancelled' をマーク
C. キャンセル後のレスポンス破棄 coCreateProcessAnswer 終端で status==='cancelled' を検知したら coCreateAddMsg をスキップ + 履歴 push もスキップ → 無駄レンダリング防止(fetch自体は完了するがUIには反映されない)
D. 「追加で依頼したくなったら?」セクション 完了モーダル内にオレンジ背景で明示。「完了 = 終わり」ではなく「このラリーは一区切り」と意識づけ → ユーザーの躊躇を解消
E. 新セッション引き継ぎバナー coCreateStart で新セッション開始時に「↩ 前セッションから引き継ぎ済み: 🎯 サービス概要 N% · 📚 学習FB N件 · 📋 クライアント要確認 N件」を青グラデバナーで表示
F. 完了トースト改善 完了実行後にトースト「✓ AI共創 完了しました(学習FB・サービス概要は次回セッションへ自動引き継ぎ)」
G. 完了ボタン title 拡充 hover時のtitle属性を「このセッションを完了して新規セッションへ。学習FB・サービス概要・クライアント要確認は引き継がれます。途中の応答もキャンセルされます」に変更
H. FAB / グローバルバッジクリア 完了時に最小化FAB と globalCoCreateBadge も削除(古い状態が残らないよう)

学習の仕組み(ユーザー疑問の回答):
- 学習FB ([LEARN] タグで AI が自動抽出する全案件横断ルール) → localStorage.aiCoCreateLearnings に永続保存。完了しても全案件で次セッションも自動適用
- サービス概要 (svc) → localStorage + D1 に永続保存。完了してもそのまま保持され、次セッションのプロンプト先頭に自動注入
- クライアント要確認 (svc.pendingConfirm) → 同上、永続保持
- 過去セッション履歴 (turns) → ✓ 完了で endedAt がセットされ、AI共創ログから閲覧可能

→ ユーザー疑問「サービス概要は埋まっているから学習しているのかな?」の答え:
はい、学習しています。完了ボタンは「現在のラリー履歴 (turns) を閉じる」だけで、サービス概要 / 学習FB / クライアント要確認 / 過去履歴 の4つはすべて引き継がれます。これをモーダル + 新セッションバナーで明示化しました。

v9.101 詳細(2026-05-10 選択肢ボタンの柔軟化)

ユーザー要望: 「ボタンの選択肢をもっと質問によって柔軟に変えたい。必須なのは『クライアントの確認』と『直接書き込み』の2つ、あとは質問内容によって変えたい(今毎回固定されがちな印象)。質問によっては選択肢の数増やして良さそう」

根本問題: v9.93 以降「微修正したい / 全部違う / その他 / OK / 続ける / スキップ」を機械的に毎回 CHOICES に含めていた → 質問内容に関係なく似たような選択肢が並ぶ「マンネリ感」が発生。

修正 内容
A. プロンプト柔軟化指示 system prompt の選択肢セクションを全面書き換え。「必須2個(クライアント確認・自分で書く)はシステム自動付与なので AI は書かない」「質問の性質に応じて選択肢の数・内容を毎回変える」「汎用ボタンを機械的に毎回付けるのは禁止」を明記
B. 質問タイプ別の例示 単価質問→月額10万/30万/50万/100万 / 業種絞り込み→IT/SaaS/製造業/不動産/金融/医療/小売/建設/その他業種(4〜8個)/ はい/いいえ系→2〜3個 / アクション選択→今のまま進める/深掘りしたい/別角度で考えたい などのプロンプト例を提示
C. freshBlock の必須遵守ルール書換 「[CHOICES]A
D. パーサーのサニタイズ強化 AI が「クライアント要確認」「自分で書く」を CHOICES に書いてしまっても自動除去(システムが renderer で必ず付け直すので重複防止)
E. 「その他」マッチを厳格化 /その他/.test(p) から /^(その他|自由記述|フリー記述|free input|directly)$/i.test(p.trim()) に変更 → 「その他業種」「その他オプション」が誤って _other (自由記述ボタン) 化されないよう修正
F. _coCreateInferChoicesFromText 簡素化 フォールバック関数も汎用「OK/続ける/微修正したい/スキップ/その他」を廃止 → 質問パターン抽出に失敗したら「今のままで進める / もう少し深掘りしたい」のシンプル2択
G. _coCreateEnsureClientConfirmInChoices 改修 「自分で書く」も同時に除去 + クライアント要確認の挿入位置を「その他」の前から「末尾」に変更(その他が無い場合の自然な配置)

期待される効果:
- 質問が「業種を絞り込みたい」なら → 8業種カテゴリのボタンが並ぶ
- 質問が「単価レンジ」なら → 月額10万/30万/50万/100万 など具体値ボタン
- 質問が「次の進め方」なら → アクション選択2〜3個
- 「微修正したい」「その他」が必要な場面では AI が判断して付けてOK、不要なら付けない
- 必ず末尾に「📋 クライアント要確認」と「✏️ 自分で書く」が追加されるので逃げ道は確保

v9.100 詳細(2026-05-10 バックグラウンドジョブ化)

ユーザー報告: 「他のセッション開いたり違うボタンすると、依頼したやつが止まっちゃってたり、動かなくなっちゃうのなくしたい」

根本原因: coCreateProcessAnswer 内の streamBubble が DOM (coCreateChat 要素) を closure で捕捉。モーダル閉じる/最小化/ナビゲーションで DOM が消滅すると、streamBubble.update() が無効化され UI が更新されない。fetch 自体は走っているが結果が「見えなくなる」状態だった。

対策 実装
A. activeRequest スロット _coCreateState.activeRequest = {id, status, startedAt, userAnswer, opts, fullText, error, completedAt} を保持。startAICoCreate 再オープン時にも preservedActiveRequest で引き継ぎ
B. streamBubble を DOM レジリエント化 DOM要素を closure で持たず ID で都度ルックアップ。ensureDom() で消失時に再作成 → モーダル閉→開でもストリーム継続表示。fullText は内部 lastText で常時保持
C. グローバルバッジ _updateGlobalCoCreateBadge 右下に固定 globalCoCreateBadge 要素。pending=青グラデ点滅 / completed=緑帯 / error=赤帯。クリックでモーダル復活(最小化なら coCreateRestoreFromMin、それ以外は startAICoCreate
D. ストリーム中も fullText を activeRequest に保存 onChunk コールバックで _coCreateState.activeRequest.fullText = fullSoFar を毎チャンク更新 → どこに行っても進捗が落ちない
E. 完了時の二経路処理 モーダル開いてれば: 通常通り coCreateAddMsg('ai',r) で表示 + activeRequest クリア / 閉じてれば: status='completed' で保持 + トースト「🤖 AI共創 応答が完了しました」+ バッジ更新
F. モーダル再オープン時の自動復帰 startAICoCreate の最後で activeRequest を検知:
・pending → 「⏳ AI共創 応答生成中…」青バナー表示
・completed → AI 応答を即描画 + 「✓ バックグラウンドで完了したAI応答を表示」緑バナー
・error → 赤バナーでエラー内容表示
G. 二重送信防止 coCreateProcessAnswer 冒頭で activeRequest.status==='pending' ならトースト表示してブロック
H. 最小化時のバッジ調整 coCreateMinimize で FAB と globalCoCreateBadge は並存させない(FAB 表示時はバッジ削除)

動作確認シナリオ(修正後):
1. AI共創でユーザーが質問送信 → 応答生成中に「— 最小化」 → ✅ FAB に経過時間が出る、応答は内部で継続
2. 「✕ 閉じる」してから別案件のサービス概要画面に遷移 → ✅ 右下にグローバル青バッジ「⏳ AI共創 応答生成中…」表示
3. 待ってると「✓ AI共創 応答完了」緑バッジに変化 + トースト通知
4. クリックで AI共創モーダルが開き、緑バナー「✓ バックグラウンドで完了したAI応答を表示」+ 応答内容が表示
5. もう一度送信 → 二重送信ブロック「前のAI応答を生成中です」トースト

v9.99 詳細(2026-05-10 レート制限耐性 + プロンプト圧縮 + バージョン履歴整備)

ユーザー報告: 「『rate limit of 30,000 input tokens per minute』エラーが出た。直して。あとAI共創をアップグレードしたらver更新して履歴更新して。最近されてない」

修正 実装
A. 429 自動リトライ (callClaude) 429ステータス or rate limit メッセージ検知 → retry-after ヘッダ読み取り(最大90秒) / なければ 35+25*attempt 秒待機 → 最大2回まで自動リトライ。リトライ尽きたら Sonnet にフォールバック
B. 429 自動リトライ (callClaudeStream) ストリーミング版でも 429 検知 → 待機後に通常版 callClaude にフォールバックして本来のリトライ機構を活用 → 取得後は 80分割で疑似ストリーミング配信
C. ユーザー通知 _coCreateNotifyRateLimit チャット内に黄色帯「⏳ Anthropic レート制限 (30,000 tok/min) に到達 / N秒後に自動的に再試行」を表示 + 1秒ごとカウントダウン → 0で「♻️ 再試行中...」に変化
D. プロンプト圧縮 - 学習FB _coCreateBuildLearningsSection を 50件→20件 + 各120字までに圧縮。検知回数の多いもの優先でソート
E. プロンプト圧縮 - svc _coCreateCompactSvc(svc) 新設: 空文字列・空配列・全プロパティ空のオブジェクトを除外。配列内オブジェクトの空フィールドも削除(ペルソナ等)
F. プロンプト圧縮 - 履歴 history.map 時に各メッセージを 1500字 までに truncate(30k tok/min 対策・後半対策)
G. COCREATE_VERSIONS 履歴整備 v9.36 / v9.88 / v9.89-92 / v9.93 / v9.94 / v9.95 / v9.96 / v9.97 / v9.98 / v9.99 を追加(v3.0 から大量に飛んでいた)。AI共創モーダルのバージョンバッジ → ヒストリーで全変更が見える状態に
効果 30k tok/min レートに引っかかっても自動回復・ユーザーに状況可視化・プロンプトサイズ縮小で発生頻度自体も低下

v9.98 詳細(2026-05-10 AI共創 学習FBシステム)

ユーザー要望: 「AI共創セッションでFBした内容はどの案件も結構共通することだから学習する仕様にして欲しい。指摘したところは過去の指摘みたいな感じでどっかにまとめておいて欲しい」

機能 実装
A. データ層 localStorage.aiCoCreateLearningsD/S(グローバル) で管理。{id, content, category, createdAt, lastSeenAt, sourceProject, count, enabled}_coCreateGetLearnings / _coCreateAddLearning(c, opts) / _coCreateRemoveLearning(id) / _coCreateUpdateLearning(id, patch) / _coCreateClearLearnings。重複は前後空白除去・小文字化で類似判定→count++。最大100件
B. AI 出力タグ freshBlock の必須遵守ルール8 に「担当者から修正要求/嗜好/否定的指摘/「次回からは〜」「いつも〜」「もっと〜」系の発言があったら、行動指示形に整理して [LEARN]ルール(短く・全案件で適用可能な表現)[/LEARN] を1〜2個まで返答末尾に追加」を明記
C. プロンプト先頭注入 _coCreateBuildLearningsSection()## 📚 過去FBから学習した全案件共通ルール(毎回必ず従う・違反は即修正) セクションを生成 → cachedBlock 先頭に注入(プロンプトキャッシュ対象でコスト最小)
D. パーサー coCreateAddMsg の AI 応答処理冒頭で _coCreateExtractLearnings(text) を呼び [LEARN]...[/LEARN] 全マッチを抽出 → 学習リストに追加 → テキストからは削除。CHOICES パーサーより前に処理して位置ずれを防止
E. ストリーミング隠し _coCreateOpenStreamBubble.update[LEARN] タグも [CHOICES] 同様にストリーミング中の暫定表示から削除
F. トースト表示 学習保存時にチャット内に紫帯の「📚 学習しました (N件) · 全案件で適用」吹き出し表示。各エントリの内容と検知回数を表示+一覧モーダルへの導線リンク
G. 一覧モーダル _coCreateOpenLearningsModal() でリスト表示。チェックボックスで個別有効/無効切替・文章クリックで contenteditable 編集・🗑 で削除・「+ 手動追加」「全削除」ボタン
H. 入口ボタン (1) AI共創モーダルヘッダ右上に「📚 学習FB (N)」紫ボタン / (2) サービス概要ページの「AI共創ログ」横にも同ボタン → 両方から学習FB一覧にアクセス可能
効果 過去にFBした「ボタンは短く」「議事録風の決め打ちNG」「20文字以内」等が次のセッションで自動的に守られる→同じ指摘を二度しない運用が可能に。プロンプトキャッシュ対象なのでコスト増加なし

v9.97 詳細(2026-05-10 バッチ質問モード・待ち時間削減)

ユーザー不満: 「AI共創の品質には満足しているが待ち時間が長すぎる。文脈的に似た項目(競合A/B/C, ペルソナ1/2/3 など)は1つずつ進めるのではなく、一気に2〜3問チャットが来てそれぞれ人間が回答できるようにしたい。人間の確認時間が増えるので待ち時間がなくなる」

実装 内容
A. プロンプト指示追加 _coCreateBuildSystemPrompt に「バッチ質問モード」セクション追加。「似た構造の項目(競合A/B/C, ペルソナ1/2/3, Before/After, ターゲット属性 業種/規模/部署/役職)は 1ターンで2〜3問まとめて並列に質問」を明示。出力形式も ## 1. 〜 [CHOICES]...[/CHOICES] ## 2. 〜 [CHOICES]...[/CHOICES] のように見出し+CHOICES のセットを2-3個並べる形を例示。バッチ条件(同カテゴリ繰り返しは推奨 / 全く違う種類は混ぜない / ドラフト深掘り中は1問1答のまま)を厳格化
A2. freshBlock 必須遵守ルール7 待ち時間削減ルールとして明文化。担当者の確認時間と AI の出力時間を重ねる旨を毎ターン送信される fresh ブロックに含めて忘却防止
B. 通常 1個ルール緩和 [CHOICES] は1メッセージに1つだけ」→「通常モードでは 1つだけ・バッチ質問モード時のみ複数グループOK」へ修正
C. パーサー対応 coCreateAddMsg[CHOICES]([\s\S]*?)\[\/CHOICES\] を全マッチ走査 → 選択肢2個以上の有効グループを allValidGroups に集約。2グループ以上 → バッチモード batchGroups セット / 1グループ → 既存単一 options / 0グループ → 通常テキスト
D. バッチUIレンダリング _coCreateRenderBatchBubble(text, batchGroups) 新設。テキストをグループ位置で分割→セグメントごとに「文章 + ボタン群」を順番に挿入→末尾に進捗表示+一括送信ボタン。バブル冒頭に紫グラデの「⚡ 一括質問モード · N問 同時回答」バッジ。各グループは薄青背景+左ボーダーで視覚的に独立
E. 選択状態管理 window._coCreateBatchState[batchId] = {total, selections:{groupIdx → {value, label, free}}, submitted} を保持。_coCreateBatchSelect で同グループ内の他ボタン解除→選択ボタン強調(青背景)/ 「その他」→ そのグループだけ自由記述input生成 / 選択後 _coCreateBatchUpdateSubmit0/3 → 3/3 表示更新+全選択時に送信ボタン活性化
F. 一括送信 _coCreateBatchSubmit(batchId) で全選択を Q1: A案でOK / Q2: B案でOK / Q3: 自由記述... に結合 → ユーザ吹き出しに「📦 一括回答 → 〜」表示 → coCreateProcessAnswer(combined) で AI に送信 → 送信後はボタン無効化
G. ストリーミング互換 既存の _coCreateOpenStreamBubble.update[CHOICES] を隠す処理が入っているので、ストリーミング中は文章だけ流れる→完了時 coCreateAddMsg('ai', r) でバッチUIが正式描画される、で互換性OK
効果 待ち時間が劇的減少。例: 競合A→B→C を順次質問していたフロー(3ターン × ~30秒 = 90秒待機)→ 1ターンで3問まとめて出力(30秒)+ 人間の確認3問並行 → 体感ほぼ待ち時間ゼロ

v9.96 詳細(2026-05-10 [CHOICES] 表示崩れ解消)

修正 内容
パーサー堅牢化 [CHOICES] 全マッチを走査 → 選択肢2個以上のもののみ採用(単一値CHOICESを誤認識しない)/ 未閉じ [CHOICES]...$ も自動削除(閉じタグなしのゴミ残存防止)
ボタンCSS制限 max-width:280px / word-break:break-word / white-space:normal / line-height:1.5 で長文ボタンが折り返し表示。文章のように見えるのを防止
プロンプト厳格化 選択肢25文字以内(絶対)」「1メッセージに [CHOICES] 1つだけ・必ず最後に」「選択肢2個以上必須」「必ず [/CHOICES] で閉じる」「AIの推奨は本文に書く・CHOICES内には入れない」を明記

v9.95 詳細(2026-05-10 AI共創コスト大幅削減)

対策 実装 効果
A. プロンプトキャッシング ai.js callClaude/callClaudeStream で system を [{type:'text', text, cache_control:{type:'ephemeral'}}] 配列形式に変更。同一 systemPrompt 繰り返し使用時に Anthropic が90%割引 60-80% 削減
B. モデル段階使用 coCreateRespondtieredModel = opts.draftMode?'claude-opus-4-7':'claude-sonnet-4-5'。通常会話は Sonnet 4.5(Opusの1/5の値段)/ ドラフト確定時のみ Opus 4.7 コスト 50-70% 削減(通常会話)
C. 履歴キャッシング userMsg を cached(svc+履歴)+ fresh(直近指示) の2ブロックに分割。content 配列で送信し cached ブロックに cache_control 付与。同じ会話内で繰り返し送られる過去履歴部分が90%割引 後半ほど効果大
キャッシュヒットログ [Claude usage] / [Claude SSE usage]cache_creation_input_tokens / cache_read_input_tokens をブラウザコンソールに出力。💰 90%off の額がリアルタイム可視化 効果確認可能
合計推定削減 A+B+C 併用で コスト 75-90% 削減(特に長い会話・複数セッションで顕著)
品質影響 ほぼ無し(Sonnet 4.5 でも会話品質は十分・ドラフト確定の重要判断は Opus 維持) 維持
注意 proxy が cache_control をパススルーするか未確認 → ブラウザコンソールで cache_read=0 のままなら proxy 修正が必要 要動作確認

v9.94 詳細(2026-05-10 文言途切れ解消)

対策 内容
① max_tokens 増量 通常 3000→5000 / draftMode 5000→8000 に引き上げ
② タイムアウト延長 180秒 → 300秒(callClaudeStream の opts.timeoutMs=tmoMs として明示)
③ 完結判定 + 継続生成 _isCoCreateResponseComplete(text) 新設: [CHOICES] 開閉数一致・``` フェンス偶数・末尾が句読点/タグで終わる、を判定。不完全なら最大2回まで自動的に継続リクエスト送信 → 末尾500字 + 「続きを書ききって」と指示 → レスポンスを連結
④ プロンプト簡潔指示 userMsg 末尾に「3000文字以内」「ドラフト3つまで・各100字以内」「冗長な前置き禁止」「同じ説明繰り返さない」「[/CHOICES] で終わるように余裕持って」を追加
効果 後半で長文化しても max_tokens 内に収まる確率UP / 切れた場合は自動で続き取得 / 簡潔さで token 消費削減

v9.93 詳細(2026-05-10 クライアント要確認システム — 全7機能)

# 機能 実装
1 データ構造 svc.pendingConfirm = {fieldName: {draft, contextSnippet, markedAt, markedBy, status:'pending\|confirmed\|corrected', clientFeedback, confirmedAt, confirmedBy}}
2 AI共創 CHOICES に「📋 クライアント要確認」毎回自動追加 _coCreateInferChoicesFromText 全パターンに追加 / _coCreateEnsureClientConfirmInChoices で AI 出力の CHOICES にも自動挿入(含まれていなければ「その他」の手前に)
3 プロンプト注入 _coCreateBuildSystemPrompt に「クライアント要確認の取り扱い」ルール4項目を追加 + 末尾で pendingConfirm の confirmed/corrected を「確定済み情報」、pending を「未確定」として注入
4 ボタンクリック処理 _coCreateOpenClientConfirmModal() でフィールド選択(自動推測付き)+ draft + 文脈入力 → _coCreateSaveClientConfirm() で保存 + svc該当フィールドに draft を仮入力 + AI共創履歴に記録して次の項目へ
5 専用ページ renderClientConfirm サマリーカード3つ + 未確定セクション + 確定済み履歴セクション。各カードに「PMの仮説 / 背景・文脈 / クライアント確認結果」表示 + アクションボタン
6 確定アクション _coCreateConfirmPending(field, 'asis') で仮説そのまま確定 / _coCreateConfirmPending(field, 'correct') で修正版入力モーダル → 修正版で確定。確定時は svc 値を更新 + _coCreateAppendConfirmFeedback で全セッションに「クライアント確認結果」エントリを追記
7 サービス概要バナー renderService 上部に🚩バナー(未確定件数 / 確定件数)を表示。クリックで client_confirm ページへ遷移
8 ナビアイテム 共通カテゴリ「概要」内の「サービス概要」直後に 「クライアント要確認」 を追加
9 手動マーク関数 _svcMarkPendingConfirm(field) / _svcUnmarkPendingConfirm(field) を用意(UIは専用ページの「+手動で要確認を追加」ボタンで対応)

データフロー

  1. PM がAI共創で曖昧な箇所に遭遇 → 「📋 クライアント要確認」ボタンクリック
  2. モーダルでフィールド・仮説・文脈を入力 → 保存(status:'pending')+ AI共創は次の項目へ
  3. キックオフMTG時、「クライアント要確認」ページで一覧確認 → 「✓ 仮説で確定」or「✎ 修正版を入力」
  4. 確定時、status を 'confirmed'/'corrected' に更新 + svc 値も上書き + 全セッションの clientConfirmFeedback に追記
  5. 次回 AI共創セッション開始時、systemPrompt に「📋 クライアント確認済み情報」が自動注入 → AI が再質問せず確定値で進める

v9.92 詳細(2026-05-10 AI共創 後半品質改善 4点セット)

# 問題 修正
1 後半でCHOICESが「OK/続ける」汎用ボタンになり、何を選んだか不明 _coCreateInferChoicesFromText(text) 新設: AI返答から「A案/B案/C案」「①②③」を自動抽出して「A案でOK|B案でOK|...」のCHOICES動的構築。汎用フォールバックは最後の手段
2 後半で文章が途切れて送られる max_tokens を 通常 2000→3000 / draftMode 4000→5000 に引き上げ
3 会話続けると不具合多い(コンテキスト超過) 履歴圧縮閾値を 25→18 / 直近保持 15→10 に下げて早めに圧縮
4 プロンプト末尾の指示徹底度低下 userMsg 末尾の必須遵守ブロックを6項目に拡充(複数案提示時は具体CHOICES必須・汎用ボタン絶対禁止・文章を最後まで書き切る)

v9.91 詳細(2026-05-10 AI共創タイマーの可視性連動)

項目 内容
問題 AI共創タイマーが「最小化中」「別セクション開いている」「ブラウザタブ非表示」でも進み続ける(実労働時間と乖離)
新関数 _coCreateIsModalVisible(): DOM上に coCreateChat 要素が存在 + document.visibilityState === 'visible' の両方を満たすかチェック
タイマーcallback改修 毎秒 _coCreateIsModalVisible() を判定。非表示時: 開放時間を accumulatedMs に加算 + _coCreateSessionOpenedAt = null でカウント停止。ラベルを「一時停止中」、ドットをオレンジに変更。表示が戻った時: _coCreateSessionOpenedAt = Date.now() で再カウント
効果 モーダルを最小化したり別ページに移動したり、ブラウザタブを裏にした時、タイマーが自動的に「一時停止中」になり、累積時間に加算されない。再度モーダルを表示するとカウント再開

v9.90 詳細(2026-05-10 ストリーミング表示の堅牢化)

項目 内容
問題 スクショ確認: AI共創でストリーミング暫定バブルが正式バブルに切り替わらず、[CHOICES]...|...|... の生文字列が表示される現象。原因は エラー時 or 途中終了時に dispose() が呼ばれないこと
修正1: try/finally streamBubble = _coCreateOpenStreamBubble() を try/finally で囲み、何があっても finally で dispose を実行(エラー時もバブル消失保証)
修正2: 暫定 update() で CHOICES 隠す update(text) 内で [CHOICES]...[/CHOICES] および末尾未完了の [CHOICES]... を除去してから表示。万一バブルが残っても CHOICES タグが生文字列で見えない保険
効果 エラー耐性大幅UP・暫定バブルの残存バグ解消・[CHOICES] タグの生文字列表示が消える

v9.89 詳細(2026-05-10 AI共創 ストリーミング表示)

項目 内容
目的 AI返答を「全文揃ってから一括表示」→ トークン受信中も逐次表示 に変更し、読みながら待てる体験に
新関数 callClaudeStream(systemPrompt, userMessage, opts, onChunk) を ai.js に追加
動作 proxy が Accept: text/event-stream で SSE をパススルーするか試行 / SSE 受信成功 → 真のストリーミング(API応答中も逐次表示) / 非SSE → JSON 一括取得後に 疑似ストリーミング(25msごとに小チャンク表示) / 失敗時 → callClaude フォールバック(リトライ・キャッシュを活かす)
UI: _coCreateOpenStreamBubble() ストリーミング中の暫定バブルを動的に作成。点が動くタイピングインジケーター付き / update(text) で内容更新 / dispose() で破棄
coCreateRespond 思考中インジケータを停止後、空のストリームバブル作成 → callClaudeStream の onChunk で逐次更新 → 完了後にバブル破棄 → 正式な coCreateAddMsg('ai', r) で Markdown 整形済バブルを描画(CHOICES ボタンも表示)
現状 proxy が SSE 非対応の可能性あり → その場合は疑似ストリーミング演出のみ(API待ち時間自体は変わらない)。proxy が対応していれば真のストリーミングで体感大幅改善

v9.88 詳細(2026-05-10 AI共創 進捗バー + 最終深掘りモード)

項目 内容
進捗バー AI共創モーダルのヘッダー直下に常時表示。svcTabCompletion(svc) の4タブ(basic/target/competitor/campaign)平均から % 算出 / _coCreateUpdateProgress() で coCreateAddMsg ごとに更新
モードバッジ 0-49%: 通常モード(グレー)/ 50-89%: 詳細埋め込み(青)/ 90-100%: 🔥 最終深掘り(紫)
最終深掘りモード _coCreateState.deepDiveMode が true になると、システムプロンプトに専用指示が追加される。「事業ならではの追加情報を3〜5項目AIが先に提案」「1問1答+CHOICES形式で深掘り」「JSON で customInsights 配列に保存」
customInsights データ構造 svc.customInsights = [{title, content, addedAt, addedBy}] の配列。タイトル重複時は内容を追記
JSON取込 coCreateRespond の JSON 処理で {"customInsights": [{"title":"...", "content":"..."}]} 形式を取込。新規追加 or 既存タイトルへの追記を自動判定
サービス概要表示 ナレッジタブの末尾に「事業特有のインサイト」セクションを追加(紫アクセント・タイトル+内容を1件ずつカード表示・PM時は削除ボタン)
削除関数 _svcDeleteCustomInsight(idx) を追加。PM権限のみ・確認ダイアログ付き
プロンプト指示の例 「業界特有の決裁プロセス」「商談で必ず聞かれる定番質問」「価格交渉の余地・タイミング」「失注パターン」「キーマンの探し方」など、事業固有の重要情報をAIが先に提案

v9.87 詳細(2026-05-10 AI共創ボタン形式の品質維持)

項目 内容
問題 AI共創セッションで序盤は CHOICES ボタン形式で出るが、中盤・終盤で AI が CHOICES タグを省略しテキスト自由記述のみになる
原因 システムプロンプトの「絶対遵守」指示は冒頭にあるが、Claude の挙動として 会話が長くなるほど末尾の指示優先になり、初期指示の徹底度が低下。userMsg にリマインダーが無かった
修正1: userMsg 毎回リマインダー userMsg 末尾に「【⚠️ 必須遵守・最重要】返答末尾には必ず [CHOICES]...[/CHOICES] を付けてください」を毎回追加。直近指示として影響力最大
修正2: 自動フォールバック callClaude 直後、AI 返答に [CHOICES] が含まれていない場合は自動的に [CHOICES]OK / 続ける\|微修正したい\|スキップ\|その他[/CHOICES] を末尾付与。AI が指示を無視した場合の保険
効果 序盤・中盤・終盤すべてのターンで一貫してボタン形式が表示される(タイピング量最小化を維持)

v9.86 詳細(2026-05-10 引用ブロック視認性UP)

項目 内容
編集ファイル service.js _mdToHtml の引用ブロック変換
Before border-left:3px solid var(--blue);padding:4px 10px;margin:6px 0;background:var(--bg);color:var(--text2);font-size:.95em (ダークモードで黒背景 + 左側に青ボーダー + 中間テキスト色 → 視認性低い)
After background:rgba(59,130,246,.08);border:1px solid rgba(59,130,246,.2);border-radius:10px;padding:10px 14px;margin:8px 0;color:var(--text);font-size:13px;line-height:1.85 (青系の薄い背景 + 薄いボーダー + 角丸 + 通常テキスト色 → コントラスト改善)

v9.85 詳細(2026-05-10 AI共創文字化け修正)

項目 内容
編集ファイル service.js_mdToHtml 関数
問題1: SAFE0✓...SAFE1 表示 プレースホルダが 'SAFE'+index+'' だったため、AI返答に偶然「SAFE0」のような文字列が含まれた場合に衝突。または2回処理で復元処理が空状態で動作。さらに保存時に SOH(\x01) 制御文字が紛れ込み、復元正規表現が壊れていた
修正1 プレースホルダを '\x00PRTCT'+index+'\x00' の制御文字ベースに変更(通常テキストと衝突不可能)。古い s=s.replace(/SAFE(\\d+)/g,...) 復元処理を削除し、最後に1回 \x00PRTCT(\\d+)\\x00 で全復元
問題2: Markdown テーブル文字化け \| col \| col \|\\n\|---\|---\|\\n\| a \| b \| がそのまま表示。_mdToHtml にテーブル変換ロジックが無かった
修正2 テーブル変換ロジック追加。ヘッダー(区切り行 \|---\|---\| で判定)+ tbody を <table> に変換。生成 HTML はプレースホルダで保護して後段の Markdown 処理から守る
加えて コードブロック \``...```` も同様にプレースホルダで保護(後段の Markdown 処理で内部が崩れないように)
復元処理の改善 関数末尾で \x00PRTCT(\\d+)\\x00 を1回だけ実行(テーブル / コードブロック / インラインタグ すべてここで復元)
副作用 既存の <br> 連続消去パターンに table を追加。(<\\/(div\|pre\|hr\|strong\|em\|table)>)<br> で table 直後の <br> も除去

v9.84 詳細(2026-05-10 セクション再配置)

Before After
PM: 週次レポート / 月次MTG / アポ獲得リスト / 商談予定 / NGリスト / セグメント管理 PM: 週次レポート / 月次MTG / セグメント管理
テレアポ-運用: 架電リスト / スクリプト/切り返し / リスト依頼 / パートナー業務 / 目標値 テレアポ-運用: 架電リスト / スクリプト/切り返し / リスト依頼 / アポ獲得リスト / 商談予定 / NGリスト / パートナー業務 / 目標値

並び順は架電 → 補充(リスト依頼)→ アウトプット(アポ獲得・商談予定)→ 除外管理(NG)→ 運用(パートナー業務・目標値)の業務フロー順。

v9.83 詳細(2026-05-10 3ヶ月上限カウントを商談日基準に)

項目 内容
仕様変更 カウント基準を アポ獲得日商談日(meetingDate) に変更
理由 ユーザー曰く「実施で全カウントしているから」「実施予定も入れていい、ほぼ実施されるから」「アポ取れた月でカウントしてほしくないだけ」
共通関数追加 _countAptInPeriod(periodStart, periodEnd) を pages.js getAutoAppointments の直後に新設。a.meetingDate のみで判定(無いものは除外)
修正対象3箇所 ① renderAppointments の3ヶ月上限ゲージ ② renderTargets の上限カード ③ renderMyDashboard 月次タブのゲージ — すべて _countAptInPeriod 呼び出しに統一
表示文言 「期間内 獲得」→ 「期間内 商談予定/実施」に変更。「※商談日基準」を併記
renderTargets追加注釈 「※ 商談日(実施 or 予定)が期間内のものをカウント。アポ獲得日ではありません。商談日未設定のアポは含まれません」と明記
期間未指定時 全アポのうち meetingDate があるものをカウント(暫定)

v9.81 詳細(2026-05-10 セクション構造再編 + チャネル表示設定UI)

項目 内容
新セクション構造 概要 / テレアポ-運用 / テレアポ-分析 / LinkedIn-運用 / LinkedIn-分析 / PM / 運営 / 管理 の8カテゴリ
主な移動 目標値: results/成果 → テレアポ-運用 / ナレッジ集: results/成果 → テレアポ-分析 / 音声分析・音声プレイリスト・個人ダッシュ・成果管理: テレアポ → テレアポ-分析 / 分析レポート(teleapo): テレアポ → テレアポ-分析 / セグメント管理: テレアポ → PM / アポ獲得リスト・商談予定・NGリスト: results/成果 → PM / 週次レポート・月次MTG: results/レポート → PM
新カテゴリresults.PM 週次レポート・月次MTG・アポ獲得リスト・商談予定・NGリスト・セグメント管理を1つにまとめ。週次レポートと月次MTGは pmOnly:true(パートナーには鍵)
新カテゴリteleapo/linkedin 内のサブグループ それぞれ「-運用」「-分析」の2サブカテゴリに分割
チャネル表示制御UI 設定ページに「セクション表示設定(営業チャネル別)」カード追加。各 itemId について default / common / teleapo / linkedin / both / hide の6択を選択
データ保存先 section_channel_overrides キー(global)
_shouldShowItem section の channel と override を照合して表示判定。override 優先 / 'hide' なら完全非表示 / 'common'='both' なら全チャネルで表示 / 'teleapo' or 'linkedin' は対応する案件チャネルでのみ表示
効果 今後セクション配置を変えたいときも CRM上の設定ページから即時調整可能(コード変更不要)

v9.80 詳細(2026-05-10 メンバーフルネーム)

項目 内容
仕様 既存「名前(表示名)」m.name は維持。新たに「名前(フルネーム)」m.fullName フィールド追加(任意)
編集ファイル pages.js メンバー編集モーダル(フォーム)/ saveMember / renderMembers
メンバー編集モーダル 「名前(表示名 *)」の直下に「名前(フルネーム)」入力欄追加。説明文「正式なフルネーム。苗字が同じメンバーがいる時の識別に使われます(任意)」
saveMember fullName を保存対象に追加
メンバー一覧表示 表示名の右に (フルネーム) を小さなグレー表示で副表記。fullName未設定なら表示なし
ユーザー要望 「表示名を表示させればOK」=既存の m.name 表示は維持・fullName は補助情報

v9.79 詳細(2026-05-10 Slackスラッグ日本語対応 + アイコン反映 + 変更履歴詳細化)

項目 内容
Slackスラッグ仕様訂正 Slack channel 名は 2018年からUnicode対応で日本語OK。前バージョンの「日本語不可」誤認を修正
修正1: バリデーション緩和 autoCreateProjectSlackChannels の正規表現を [a-z0-9_-]+ から「禁止記号(.\'"`,!?@#$%^&*<>{}[]\\/=+|;:)以外」に緩和。日本語・ひらがな・カタカナ・漢字すべてOK
修正2: 自動生成ロジック core.js の slug=p.slackSlug||(p.client||'').toLowerCase().replace(/[\s.'"\,!?@#$%^&*<>{}[]\\/=+|;:]/g,'')` に変更(日本語残す)
修正3: UI placeholder「結グループ / 株式会社abc / rys」、説明文「使える文字: 半角英数小文字 / 日本語 / ハイフン / アンダースコア」
アイコン反映バグ修正 _refreshUserBadge で localStorage を直接読む(cache・D1ポーリングのラグを回避)+ avatarUrl に ?_cb=Date.now() で cache-bust 付与
アイコン反映の保険 quickUploadOwnAvatar / saveMember で localStorage を直接更新 + saveMembers + D1 PUT 待機 + 3段階リフレッシュ(200ms / 800ms / 2000ms)でタイミング保険
変更履歴詳細化 新関数 _buildDetailedDiff(prev, key) を追加。各エントリに <details> で「📋 全フィールド差分を見る」展開を追加
diff表示パターン ① 新規作成: 全フィールドの新規値テーブル ② 削除: 全フィールドの削除前値テーブル ③ 配列: 件数変化 + 追加/削除要素TOP5 ④ オブジェクト: 全フィールドの「フィールド名 / 変更前 / 変更後」3列テーブル(最大50フィールド表示・色分け:追加=緑/削除=赤/変更=青)⑤ プリミティブ: before/after を縦並びで表示

v9.78 詳細(2026-05-10 Slackスラッグ案内改善 + AUTO化)

項目 内容
原因(日本語スラッグ) Slack channel 名は ASCII(半角英数 + - / _)のみが Slack 側の仕様。「結グループ」のような日本語クライアント名で slug 自動生成すると (p.client||'').toLowerCase().replace(/[^a-z0-9_-]/g,'') で全削除→空文字。空 or 非ASCII 入力で autoCreateProjectSlackChannels が即alert で終了
修正1: エラーメッセージ親切化 autoCreateProjectSlackChannels の3パターン(空/非ASCII/記号)で、それぞれ具体例(「結グループ」→「yui_group」/ 「株式会社ABC」→「abc」/ 「RYS」→「rys」)を含むメッセージに変更
修正2: スラッグ入力欄UI改善 ラベルに「半角英数小文字のみ」を強調表示。placeholderを「yui_group / abc / rys」に。pattern属性追加。下部の説明に「⚠ Slack の仕様で日本語は使えません」+ 3つの例示
修正3: teleapo_general を AUTO化 SLACK_PROJECT_CHANNEL_DEFS の teleapo_general を auto:falseauto:true に変更(バッジが MANUAL→AUTO 表示に)。実際の自動作成処理は変更なし(元々 targetDefs.filter(d=>needGroups.includes(d.group)) で全6chが対象だった)

v9.77 詳細(2026-05-10 新規/編集モーダル統一)

項目 内容
編集ファイル core.js showEditProjectModal / showNewProjectModal / createProjectFromModal
仕様 showEditProjectModal(opts)opts._isNew=true に対応。showNewProjectModal()showEditProjectModal({_isNew:true}) のラッパー
統一フィールド クライアント名 / チャネル / PM担当(複数選択) / 契約開始日 / ステータス / アポ単価 / 商品区分 / 担当パートナー(チェック+Slack招待) / Slack設定(slug+6ch) / 3ヶ月アポ上限+期間 すべて新規時も入力可能に
isNew時の差分 タイトル「新規案件を追加」/ 削除ボタン非表示 / 保存ボタン「作成」(createProjectFromModal) / 上部に青い案内バナー(Slack自動作成は保存後に有効化と注記)/ PM担当デフォルト未選択(旧 ['大串'] デフォルト廃止)
createProjectFromModal フォーム全項目から値を取得 → projects.push → currentProjectId 設定 → initOnboarding → 担当パートナーの projects[] 配列に新案件IDを追加・D1 PUT 同期 → targets/svc に 3ヶ月上限同期保存 → renderProjectSelector + renderSidebar + renderPage
後方互換 createProject()createProjectFromModal() のエイリアスとして残置

v9.76 詳細(2026-05-10 βバッジ色統一)

項目 内容
編集ファイル core.js renderSidebarbetaStyle 定義
Before color:#a78bfa;font-size:9px;font-weight:800;letter-spacing:.5px;padding:1px 6px;border-radius:4px;background:rgba(168,139,250,.18)(紫背景・紫文字)
After color:var(--text2);opacity:.5;font-size:11px;font-weight:800(モノクロ・背景なし)
効果 鍵 / β / 目 すべてナビアイコンと完全に同色同濃度に統一。色付き要素なし

v9.75 詳細(2026-05-10 β版仕様の最終形 — プルダウン統合)

項目 内容
仕様 β版を「プルダウン選択肢」として統合: 編集可 / 閲覧のみ / β版 / ロック の4択
廃止 独立した「β版」列・ON/OFFトグル(v9.71で実装したもの)を削除
編集ファイル pages.js getSectionPerm / renderPermissionSettings / onPermChange / savePermissionscore.js renderSidebar
getSectionPerm 'beta' を新たに返す。旧 p.beta=true フラグは edit/view を 'beta' に格上げ表示(後方互換)
canViewSection 'beta' !== 'none' で通る(β=表示OK)
canEditSection v==='edit' \|\| v==='beta' で許可(β=編集可と同等)
renderPermissionSettings permOpts: ['edit','view','beta','none'] / permLabels: 編集可/閲覧のみ/β版/ロック / permColors: green/blue/#a78bfa/text3 / β列・betaCell・betaTglBg/Fg/Label を全削除 / colspan を 5→4
onPermChange プルダウンで beta 選択時、旧 p.beta フラグは自動 delete(プルダウン側に集約・ダブル設定防止)
サイドバーバッジ 排他制御 lock > beta > view:showLock / showBeta / showView を1つだけ表示。位置はすべて margin-left:auto(右端統一)
バッジ色 鍵 / 目: ナビアイコンと一致(var(--text2) opacity .5)/ β: 紫 (#a78bfa) ※既存色維持
PM視点 プルダウンで他ロールが 'beta' の場合 pmHasBetaSetting=true でβバッジ表示

v9.74 詳細(2026-05-10 アイコン/ログイン/β版/スクリプト 4項目大型改修)

# 改修 実装
A アイコン反映バグ修正 pages.js saveMember 末尾に _refreshOnlineMembersUI 追加 + setTimeout で二段階リフレッシュ。quickUploadOwnAvatar も同パターンで renderSidebar+二段階リフレッシュ追加。これにより左下バッジ・架電リストオンラインバー・メンバー一覧が即時反映
B ログイン判定改良 pages.js _sendHeartbeat_isUserActiveNow() ガード付きに変更。条件: ① document.visibilityState==='visible' ② 直近10分以内のユーザー操作(mousemove/keydown/click/scroll/touchstart)。「Chromeに開きっぱなしで操作してない人」はオフライン扱いに
B-1 アクティビティ追跡 _bindActivityTracker() で 6種類のイベントを capture phase で監視。visibilitychange でタブ復帰時に即時 heartbeat
C β版 仕様変更 pages.js getSectionPermif(p.beta && !isPM()) return 'none' を削除。core.js renderSidebar のβバッジ表示条件を if(isBeta && pm)if(isBeta) に変更(全ロール表示)。設定UI説明文を「βマークが付くだけで権限は通常通り」に更新
D-1 スクリプト5テンプレ SCRIPT_TEMPLATES 定数を pages.js に追加(機能訴求/課題解決/成果数値/競合比較/共感型)。showScriptTemplateChooser() で5パターンのカード式モーダル → クリックで _applyScriptTemplate → 既存 showScriptModal に雛形プリセット
D-2 スクリプトサイト形式公開 publishScriptSite() / buildScriptSiteHTML() 追加。サービス概要のサイト化と同パターン(go-spiral.ai系の白基調・大胆セリフ)。保存先: proj_{id}_script_site キー / メタ: svc.publishedScriptSite
D-2-1 配信ルート functions/sc/[projectId].ts 新規作成(/s/と同パターンでD1から取得)。公開URL: https://crm.scale-group.co.jp/sc/{projectId}
D-2-2 バナー renderScript content直下に黒グラデバナー(公開URL + 開く + URLコピー)。サービス概要バナーと同流儀
D-3 マニュアルサイト scale-lead-manual/script.html を 88行 → 約260行に大幅充実化。Quick-Jump / 5パターン詳細カード(色分け)/ 3ブロック構造 / 切り返し作り方 + TOP5 / PDCA / よくあるミス比較。call-list / list-request と同じテイスト統一
D-3-1 ガイドボタン renderScript ヘッダー右に「📖 ガイド」ボタン追加 → 別タブで https://scale-lead-manual.pages.dev/script 起動

v9.73 詳細(2026-05-10 個人ダッシュ刷新 + ナレッジ遷移 + 案件編集3ヶ月上限統合)

# 改修 実装
1 個人ダッシュボード タブ化 pages.js renderMyDashboard 完全書き換え。月次/週次/日次の3タブ。window._dashTab で切替・デフォルト=month
1-1 タイマー廃止 既存 ${getTimerHTML()} を削除(ユーザー要望: 個人タイマーいらない)
1-2 月次タブ 4KPIカード(架電/通電/アポ/稼働)+ 前月比 / 月間アポ目標達成率ゲージ / 3ヶ月アポ上限ゲージ / 直近6ヶ月推移バーチャート / 今月ハイライト(ベスト/ワースト日 + 日次平均)/ KPI詳細(CPH/API/通電率/アポ率/受注数/受注額)
1-3 週次タブ 4KPIカード + 前週比 + 週間目標達成 / 直近12週推移バーチャート / 今週の日別表(月〜日 + 今日ハイライト)
1-4 日次タブ 今日4KPIカード(架電/通電/アポ/稼働)/ 3カラム(今日のアポ・今日の再架電・今日のタスク、すべてクリックで editCall モーダル)/ 直近30日 日別バーチャート(今日は橙でハイライト)
2 ナレッジ集 会社名クリック kickoff.js の架電ナレッジ表示で k.company をボタン化 → _khGoToCallByCompany(company, callId) 関数追加。callId あれば editCall モーダル直行、なければ会社名で call_list.clS フィルタ → 該当社の id で editCall。閉じたら架電リストでフィルタ済の状態で残る
3 案件編集 3ヶ月上限 core.js showEditProjectModal 内に「3ヶ月アポ上限管理」セクション追加。フィールド: ep_apo_limit3m / ep_apo_period_start (YYYY-MM) / ep_apo_period_end (YYYY-MM)。updateProject で targets キー (apoLimit3m, apoLimitPeriodStart, apoLimitPeriodEnd) と svc.kpiQuarterlyApoTarget に同期保存
3-1 アポリスト連携 pages.js renderAppointments のゲージ計算で targets 期間を最優先採用(手動指定優先→契約開始日からの自動算出にfallback)
3-2 目標管理(renderTargets) 既存の3ヶ月アポ上限カードに「期間(開始月〜終了月)」入力フィールド追加 + 期間内獲得数を自動再計算。「上限」「期間」変更で即時保存・全セクションに反映
3-3 個人ダッシュ月次連携 月次タブに3ヶ月アポ上限ゲージ追加(targets と完全同期)

データソース統合の整理

保存キー 編集箇所
3ヶ月アポ上限 (件数) targets.apoLimit3m + svc.kpiQuarterlyApoTarget (同値で双方向同期) 案件編集 / 目標管理 / サービス概要KPI
上限期間(開始) targets.apoLimitPeriodStart (YYYY-MM) 案件編集 / 目標管理
上限期間(終了) targets.apoLimitPeriodEnd (YYYY-MM) 案件編集 / 目標管理

v9.72 詳細(2026-05-09 オンボNA改修 + バッジ重複修正)

項目 内容
修正1: NAをAgenda準拠 kickoff.js の renderOBSection で NA行を Agenda と同じ列構成に変更:⋮⋮ドラッグ + ☑チェックボックス(done) + #番号 + タイトル + 「開く →」リンクボタン + ✕削除。テーブルの thead を削除して Agenda と同じシンプル構造に統一。card-header に進捗 naDone/d.na.length も Agenda 同様に表示
データ構造 NA要素 {title, due}{title, done, link} に変更(dueは廃止)。getOBDefaults の NA 各要素に done:false を既に持つので、後方互換: linkは無ければ''扱い。obAddNA で新規追加時も {title:'新規項目',done:false,link:''} 形式に。obToggleNA 関数を新規追加
修正2: バッジ重複問題 core.js renderSidebar で「鍵🔒 と 目👁が同時表示される」問題を解消。ロジック変更: showLock=true なら鍵のみ / showLock=false かつ showView=true なら目のみ表示。鍵優先の排他制御で1セクション=1バッジに集約
重複が起きていた条件 PMが見ているとき、partner_teleapo='none' AND partner_linkedin='view' のように 2つのロールに異なる制限が設定されていると鍵+目の2個が出ていた。今回の修正で「ロックがあれば鍵のみ」に集約

v9.71 詳細(2026-05-09 権限設定 β版列 視認性UP)

項目 内容
問題 「β版列が無い」とPMから報告。実際は実装済みだが、テーブルが画面幅を超えて右端の β版列(80px幅・小さなチェックボックスのみ)が画面外で見えない/視認性が低い
編集ファイル pages.jsrenderPermissionSettings()(line 3910-3953)
修正内容 ① テーブル全体を <div style="overflow-x:auto"> でラップ + min-width:780px で確実に全列描画 ② セクション列を position:sticky;left:0 で固定(横スクロール時も常に見える)③ β版列を 「ON / OFF トグル」風 にリデザイン:背景紫系(rgba(168,139,250,.04)) / ヘッダーに「β」バッジアイコン / ON時=紫(#a78bfa)+白文字、OFF時=グレー / 幅 80px → 110px ④ 説明文に「※ 表が画面幅に収まらない場合は横スクロールで右端のβ版列を確認」と明記
機能挙動 既存の <input type="checkbox" class="perm-beta"> + onPermChange ロジックは変更なし。表示だけ刷新

v9.70 詳細(2026-05-09 音声分析強制遷移禁止 + バッジ濃度修正)

項目 内容
音声分析: 強制遷移禁止 pages_voice.jssyncZoomPhoneRecordings() 内 5箇所の _rerenderKeepScroll(renderVoiceAnalysis)if(currentPage==='voice_analysis') ガード付きに変更。別ページ滞在中に Zoom 同期が走っても mainContent が音声分析の HTML で書き換えられず、強制遷移しなくなる。音声分析ページにいるときだけ通常通り再描画
バッジ濃度修正 core.js 1271-1320 の鍵🔒 / 目👁 バッジ色を color:var(--text3);opacity:.55color:var(--text2);opacity:.5 に統一。CSS(.nav-item color=text2 / svg opacity=.5)のナビアイコンと 完全に同色同濃度 で表示されるように

v9.69 詳細(2026-05-09 リスト依頼7項目大型改修)

# 改修内容 実装
1 ガイドサイト化 scale-lead-manual.pages.dev/list-request 新規ページ作成(call-list.html 同テイスト・PDCA / 良悪比較 / 5ステップフロー / FAQ など完全版)。calllist.js のページヘッダー右に「📖 進め方を見る」ボタン追加(別タブ起動)。既存 details 折りたたみガイドは丸ごと削除
2 タブ化(新規⇄履歴) window._lreqTab で切替('new'/'history')。タブUI上部に追加。送信成功時は自動で 'history' に遷移
3 ドラフト自動保存 localStorage に key=lreq_draft_{projectId} で保存(300ms debounce)。[id^="lreq_"] の input/textarea/select + 26種の class ベースチェックボックス + radio name を全網羅。renderListRequest 起動時に自動復元 + lreqUpdateCount 等の依存UI更新。ヘッダー右に「✓ 下書き自動保存 HH:MM:SS」インジケータ
4 履歴項目漏れ修正 各カード末尾に <details> で「📋 全条件詳細を見る」追加。capitals / netProfits / marketCaps / listingsNew/Old / fundingSeries / fundingTotal / valuation / technologies / branchCategories / branchCount / hasPhone/Email/Url/Sns / growthRate / revGrowthRate / netProfitGrowthRate / relocationCount / activityHiring/Marketing/Funding/Corporate/Freeword + activityPeriod/Count を全網羅
5 セグメント自動生成 既存 v9.58 で実装済み(依頼者名+丸数字 = 「デモアカウント②」形式)。動作確認のみ
6 SNスコア削除 UI(line 2504-2513の入力欄)削除 / submitListRequest の snScore 保存削除 / 履歴表示の SNスコア欄削除 / Slack通知の SNスコア行削除
7 5段階評価機能 履歴カードに「⭐ 評価」UI追加。完了ステータス × PMのみ入力可能。2軸: 📋リスト品質(条件再現性) + 📈実成果(架電結果)。理由テキスト + 評価者 + 評価日時を保存。架電リスト連携メトリクス: _lreqGetMetrics(reqId) で sourceListRequestId 経由でセグメントを引き、その segmentIds を持つ calls から「企業数 / コール数 / 通電数 / アポ数 / アポ率」をリアルタイム集計表示(履歴カード内 + 評価モーダル内)
8 Slack メンション修正 cfg.pm_user_id 未設定時のフォールバックを '@大串 ' リテラル → '<@U08N2PK3YCQ>' Slack User ID に変更(line 3257)。これで Slack 設定UIで pm_user_id を未設定でも、確実に大串へメンション通知が飛ぶ

公開ガイドサイト(manual側)

  • URL: https://scale-lead-manual.pages.dev/list-request
  • 構成: Hero + Quick-Jump(7セクション) + なぜ自分で依頼するか + 依頼するタイミング(5カード) + 条件項目テーブル + 依頼理由の書き方(4要素 + テンプレート + 良悪比較) + PDCAフロー + よくあるミス + 送信〜完了の5ステップ + 関連ガイド
  • ナビ追加: 「テレアポ稼働」配下に「📋 リスト依頼」を call-list.html の隣に配置(list-request.html 内のみ。他ページは未更新)

評価データ構造

r.evaluation = {
  listQuality: 1-5,    // リスト品質(条件再現性)
  outcome: 1-5,        // 実成果(架電結果の良さ)
  reason: '...',       // 評価理由・学び
  evaluatedAt: ISO日時,
  evaluatedBy: 評価者名
}

メトリクス集計ロジック

セグメントの sourceListRequestId === r.id で照合 → そのセグメント seg.idc.segmentIds に含む call_list を抽出 → 各企業の call1Date〜call5Date でコール回数 / 最終ステータスで通電・アポ判定。

v9.68 詳細(2026-05-09 ナビバッジ仕様変更)

項目 内容
目的 PMアカウントでも「他ロールにロック/閲覧のみ設定がついているセクション」を一目で確認できるようにする(見せちゃいけない場所の可視化)
編集ファイル core.js(renderSidebar内 sections.map ロジック)
バッジ色 鍵🔒(var(--red)) / 目👁(var(--orange)) / PM限定マーク(var(--text3)) → すべて var(--text3) opacity:.55 に統一(ナビアイコンと同系で主張しすぎない見た目)
バッジ表示条件 非PM: 従来通り(自分のロール基準で locked/isView 判定) / PM: 他ロール(partner_teleapo / partner_linkedin)に 'none' 設定があれば鍵 / 'view' 設定があれば目
クリック制御 PM時はバッジ表示してもクリック可能(onClick 動作) / 非PM時は従来通り locked → cursor:not-allowed
title属性 PM時の鍵: 「一部ロールにロック設定あり」「PM限定(他ロールはロック)」/ PM時の目: 「一部ロールに閲覧のみ設定あり」
削除ロジック 旧「else if(item.pmOnly && pm)」のPM限定マーク分岐を削除(新ロジックに吸収)

v9.67 詳細(2026-05-09 サービス概要サイト化)

項目 内容
目的 AI共創で埋めたサービス概要を、社内向けの読みやすいサイト形式で公開・閲覧できるように
新規ファイル functions/s/[projectId].ts(D1 から HTML を取得して配信する Pages Function)
編集ファイル service.js(renderService ヘッダーボタン追加 / 公開URLバナー追加 / 末尾に publishServiceSite + buildServiceSiteHTML + _copyServiceSiteUrl 追加)
公開URL https://crm.scale-group.co.jp/s/{projectId}
公開状態 URLを知っている人なら閲覧可能(社内向け・noindex,nofollow設定)
保存先 D1 app_data の key=proj_{projectId}_service_site(JSON.stringify されたHTML本体)
メタデータ svc.publishedSite = {publishedAt, publishedBy, url, version, bytes}
ボタン挙動 未公開時:「📄 サイト形式に変換」(黒グラデ) / 公開済み:「🔄 サイトのリニューアル」(グレー)(排他)
バナー サービス概要ページ最上部に黒グラデバナー(公開URL + 開く + URLコピー + 公開日時 + バージョン + サイズ)
デザイン go-spiral.ai 系のミニマル × 図解凝った構成(白基調 + 黒ヒーロー / Cormorant Garamond セリフタイポ / Inter サンセリフ / JetBrains Mono / 9セクション + FAQ)
構成 Hero → INDEX → 01 Overview → 02 Strengths(3カード+Benefits) → 03 Target+課題仮説 → 04 Personas → 05 Before/After(黒矢印図解) → 06 Competitors(黒ヘッダー比較表) → 07 Campaigns+Primary Offer → 08 Success Cases → 09 Sales Playbook(Hearing/Objection/Weakness/NGWords) → 10 FAQ(details/summary) → Footer
自己完結 Google Fonts 以外の外部依存なし。HTML単一ファイルで配信
空欄処理 中身が無いセクションは自動的にスキップ(INDEXからも除外)
キャッシュ cache-control: public, max-age=60, must-revalidate
不正ID防止 [A-Za-z0-9_-]+ 以外は 400
未公開時 専用 notFound HTML(同テイスト)を返す

復元コマンド

# 1. バックアップ一覧確認
ls -lt ~/scale-lead-backups/ | head -15

# 2. 最新基準点(15デプロイ完了後 = 15:23 post-deploy)から復元
cd /Users/oogushiyuuki/株式会社SCALE/scale-lead
mkdir -p /tmp/scale-lead-restore-2026-05-04
tar -xzf ~/scale-lead-backups/scale-lead-2026-05-04-1523-post-deploy.tar.gz \
  -C /tmp/scale-lead-restore-2026-05-04

# 3. diff で確認してから上書き
diff -r . /tmp/scale-lead-restore-2026-05-04/

# 4. 復元実行(破壊的・要注意)
# rsync -av --delete /tmp/scale-lead-restore-2026-05-04/ ./

# 5. 退化検証
bash ~/Obsidian/scripts/check_deployment.sh scale-lead

2026-05-06 セッション集約(20デプロイ・v9.47〜v9.66)

ver 時刻 内容
v9.47 06:54 Slack設定にBot Token入力欄追加
v9.48 07:00 Slack proxy(functions/api/slack/proxy.ts 新設・CORS問題解決)
v9.49 07:03 案件編集に「担当パートナー」チェックボックス追加+Slack自動招待
v9.50 07:11 グローバル6チャンネル方式(scalelead_テレアポ_xxx プライベート固定)
v9.51 07:29 LinkedIn → linkedin 小文字fix(invalid_name_specials エラー解消)
v9.52 07:37 autoCreate に招待自動実行 + 「👥 メンバー招待を同期」ボタン追加
v9.53 07:13 案件専用チャンネル方式に転換({slug}_テレアポ支援_アポ報告 等・PM複数選択可)
v9.54 07:38 アバターアップロード機能 + オンラインメンバーバー(架電リスト上部)
v9.55 11:04 スクロール位置保持 + 架電対象デフォルト + フィルタ絵文字削除 + 目標値apoUnitPrice表示強化
v9.56 11:17 オンラインバー Pattern B(pill+クリックジャンプ)+ タイマー8メトリクスgrid + 列ヘッダー直接タップ
v9.57 11:20 権限刷新(PM編集可・パートナー2分割・β版列)+ メンバー管理色チカチカ修正
v9.58 11:41 CSV multi-segment + 再架電日カレンダー + リスト依頼自動セグメント生成 + 架電対象セグメント条件 + 「全担当者」リネーム + 分析レポート30秒自動更新
v9.59 - ペース→アポ獲得ペース ラベル修正
v9.60 11:46 タイマー8カラムgrid 破綻修正
v9.61 11:46 オンラインバー シンプル化(ページ追跡UI削除)
v9.62 11:46 架電対象詳細モーダル + アバタークリック移動(左下大きいアイコン)
v9.63 - 分析レポート autoCalcDailySilent 強制実行
v9.64 11:46 成果管理ページ刷新(日次/週次/月次切替・8メトリクス・期間ナビ・昨日ボタン)
v9.65 - ダッシュボード反映漏れ修正(getAutoAppointments)+ ナビ閲覧🔒マーク+β紫バッジ強化
v9.66 13:15 9項目バッチ(タイマー記録なし削除/アポ青削除/休眠候補削除/架電対象ロジック改修(自分のみ+今日は残す)/架電対象モーダル地味化/CSV架電担当者選択/キックオフMTG縦並び/オンボーディング drag-drop/二重フィルタ確認)

v9.66 詳細

  • 架電リスト系:
  • タイマー「今日はまだ稼働記録なし」表示削除
  • アポ獲得の数値の青色 → 通常テキスト色
  • 休眠候補(30日+) フィルタ削除
  • 架電対象フィルタ条件変更: 担当者=自分のみ(未割当除外)+ セグメント条件削除
  • 今日架電したものは状態にかかわらず残す(失注になっても上に残る・本日のみ)
  • 架電対象モーダルをモノクロシンプル化
  • CSV取込時に 架電担当者プルダウン 追加(一括アサイン・processImportCSV(txt,filename,segIds,callPerson) 新シグネチャ)
  • キックオフMTG: 全体方針 横並び廃止 → 01〜05 縦一列に再構成
  • パートナーオンボーディング: 上下矢印削除 → ドラッグ&ドロップで並び替え(⋮⋮ハンドル + HTML5 DnD)
  • 二重フィルタ: 既に preset と他フィルタは AND で適用されることを確認 → モーダルで明示

Slack 案件専用チャンネル設計(v9.53で確定・運用中)

  • 案件編集モーダル → 「Slackスラッグ」入力 → 「自動作成」ボタン
  • 命名規則: {slug}_テレアポ支援_{アポ報告/失注報告/全体/作業報告} + {slug}_linkedin支援_{アポ報告/全体}
  • すべてプライベート(is_private: true
  • 自動招待: 大串 + PM全員 + 案件アサイン済パートナー(slackUserId 設定済)
  • 招待のみ再同期: 「👥 担当パートナー招待を同期」ボタン(後追いメンバー追加対応)
  • 通知ルーティング: 案件専用 → グローバル → 旧汎用 のフォールバック

保護資産(追加)

  • _calRender / _calRenderField / _calNav / _calToday / _calPick / _calRerender(v9.58 インラインカレンダー)
  • SLACK_PROJECT_CHANNEL_DEFS / _slackProjectChannelName / _slackInviteProjectMembers / autoCreateProjectSlackChannels / syncProjectSlackMembers
  • _avatarResizeBlob / _uploadAvatarToR2 / handleAvatarSelect / quickUploadOwnAvatar(アバター系)
  • _startHeartbeat / _sendHeartbeat / _isOnline / _renderOnlineMembersBar / _refreshOnlineMembersUI(オンラインプレゼンス)
  • _renderInlineCalendar 系(カレンダー)
  • _dsShiftDate / _dsSetPeriod / _dsSetDate(成果管理 期間ナビ)
  • _clHeader / CL_COL_HELP / _clShowColumnHelp(列ヘッダー説明)
  • _drPushToKnowledgeHub(日報→ナレッジ集自動反映)
  • _obDragStart / _obDragEnd / _obDragOver / _obDragLeave / _obDrop(オンボーディング drag-drop)
  • メンバー: slackUserId / avatarUrl / lastActiveAt / currentPage / currentProjectId フィールド
  • 案件: slackChannels (オブジェクト) / slackSlug / pms (PM配列) フィールド
  • slack_config.channels: teleapo_apo / teleapo_loss / teleapo_general / teleapo_work / linkedin_apo / linkedin_general(グローバル6chフォールバック)

Slack設定の前提条件(運用ガイド)

  • Bot Token: 設定 → Slack通知設定 → 上部の入力欄(xoxb-...
  • 必要 OAuth スコープ: channels:manage / groups:write / channels:read / groups:read / chat:write / chat:write.public
  • メンション通知のため: メンバー編集モーダルで Slack User ID 登録(U で始まる11桁)

大串の手動セットアップ進行状況

  • ① OAuth Scopes 追加: ✅ 完了(SCALE task アプリ)
  • ② Bot Token 設定: ✅ 完了
  • ③ メンバーへ Slack User ID 入力: ✅ 完了
  • ④ 案件「自動作成」: ✅ 完了(Slack招待来た確認済)

2026-05-05 セッション集約(29デプロイ・v9.18〜v9.46)

v9.46 架電リスト/日報/タイマー 7項目バッチ(16:50)

対象ファイル: calllist.js / pages.js / core.js

① CSV取込時のセグメント multi-select 化

  • _showImportSegmentSelector を単一プルダウンから checkbox 一覧に刷新
  • _doImportCSV(defaultSegmentIds) / processImportCSV(...defaultSegmentIds) を配列対応(後方互換あり)
  • 取込時に複数セグメントを全行に一括アサイン可能(CSVが同じ業種/規模で揃ってる場合に便利)
  • UI: 「全選択」「全解除」ボタン + 選択カウント表示

② 再架電日にクイック選択ボタン追加

  • showCallStatusModalrecallDate フィールドに 明日/3日後/1週間後/2週間後/1ヶ月後 ボタン追加(meetingDate と同じ仕様)

③ 架電リスト 列ヘッダー説明モーダル

  • <th>? アイコン追加(クリックでモーダル表示・ソートを邪魔しない event.stopPropagation()
  • _clHelpIcon(colKey) ヘルパ + _clShowColumnHelp(colKey) モーダル表示関数 + CL_COL_HELP 説明データ
  • 説明対象14列: 企業名/電話番号/企業詳細ページ/HP/企業説明文/セグメント/大業界/中業界/売上規模/従業員規模/架電担当者/架電ステータス/架電日/架電時間帯
  • 特に HP列(Link青 vs 検索グレー)/ セグメント(クロス分類の意図)/ 企業詳細ページ(SalesNowリンク)等の意味を明示

④ 稼働終了報告 (日報モーダル) 強化

  • 必須化バリデーション:
  • 「良かった点」or「課題/解決策」のいずれか最低1つ必須
  • 「報告/相談/質問」必須(なければ「なし」と入力してもらう)
  • SCALEランク説明リンク: モーダルヘッダーに https://scale-partner-program.pages.dev/rank への外部リンクボタン追加
  • ナレッジ集 自動反映: _drPushToKnowledgeHub(date,rep) で良かった点を tag='良かった点'、課題を tag='課題'(解決策付き)として service.callKnowledge[] に追加(source='daily_report')
  • 課題の項目数を dr_p0/dr_s0 〜 のループで全件収集(旧2件固定から拡張)

⑤ タイマー誤閉じ保護(リセット問題修正)

  • 真因: endCallTimer が日報モーダル表示前に _timerSave({elapsed:0,...}) でタイマーを完全リセットしていた
  • 修正: endCallTimer では lastStart のクリアと累積合算 + pendingReport=true フラグセットのみ。elapsed/sessions は温存
  • リセット箇所: saveDailyReport 成功後に完全リセット(保存しなかった場合は累積保持)
  • 再開動線: getTimerHTMLs.pendingReport===true のとき「📝 日報入力に戻る」ボタンを表示(pulse animation付き)
  • 保護資産: _timerState().pendingReport / _timerState().pendingHours

⑥ タイマー横の現状数値表示 + 目標値ボタン

  • getTimerHTML 内に statsBox 追加: API/CPH/通電率/SCALEランク
  • 各数値は目標値 (targets KV) と比較して 緑(達成) / 橙(未達) / グレー(未設定) で色分け
  • ランクは _calcSCALERank + _rankBadge で sm サイズバッジ表示
  • 「目標 →」ボタンで navigateTo('targets') で目標値ページへ
  • 緊張感を出して達成意欲を高める設計

⑦ リロード後のページ復元

  • navigateTo 内で S('lastPage_'+currentUser, page) を保存
  • showApp 起動時に D('lastPage_'+currentUser, null) を読んで currentPage に復元
  • 既存の「無効ページなら dashboard にフォールバック」バリデーションは維持
  • ユーザー別キーでマルチアカウントでも干渉しない

保護資産(追加):
- _clHelpIcon / _clShowColumnHelp / CL_COL_HELP データ
- _drPushToKnowledgeHub / 日報必須化バリデーション
- _timerState().pendingReport / _timerState().pendingHours / 「📝 日報入力に戻る」ボタン
- lastPage_<user> localStorage キー

v9.45 Slack案件専用チャンネル自動化(16:34)

  • 対象: pages.js (Slack関数群 全面書き換え + showMemberModal/saveMember/renderSlackSettings/saveSlackConfig 改修) / core.js (showEditProjectModal/updateProject 改修)
  • 新フィールド:
  • メンバーに slackUserId 追加(U で始まる11桁)
  • 案件に slackSlug / slackApoChannelId / slackLossChannelId 追加
  • 新ヘルパ関数(保護資産):
  • _slackUserIdByName(name): 名前から Slack User ID 引く
  • _slackBuildMentions(getter, pm): <@PM> <@大串> <@獲得者> を重複排除して構築
  • slackCreateChannel(name): conversations.create 呼び出し(name_taken 時は conversations.list で既存検索)
  • slackInviteUsers(channelId, userIds): conversations.invite 呼び出し
  • autoCreateSlackChannels(btn): 案件編集モーダルの「自動作成」ボタンから呼ばれる。scale-{slug}-aposcale-{slug}-loss の2チャンネルを作成 + 大串/PM/案件メンバー(slackUserId 設定済)を自動招待 + IDを欄にセット
  • 通知文 全面書き換え:
  • slackNotifyApo(c, getter): 引数を架電オブジェクト直接受け取り。15項目テキスト(獲得者/獲得日/商談日/期間/会社名/大業界/中業界/売上規模/従業員規模/セグメント/アポ獲得ナレッジ/架電後メモ)。絵文字なし。*太字* + 改行で見やすく。3名メンション付き
  • slackNotifyLoss(c, reason, member): 案件専用 loss チャンネル優先 + 3名メンション
  • _checkSlackOnStatusChange(c, field, val): 引数の渡し方を新シグネチャに合わせて修正(架電オブジェクト全体を渡す)
  • ルーティング: 案件の slackApoChannelId / slackLossChannelId 優先、未設定なら cfg.channels.apo / cfg.channels.loss フォールバック
  • Slack設定ページ拡充:
  • 失注通知 トグル追加
  • アポ獲得 グローバルフォールバックチャンネル 入力欄追加
  • 失注 グローバルフォールバックチャンネル 入力欄追加
  • 必要 Bot OAuth スコープ ガイド: channels:manage / groups:write / channels:read / chat:write / chat:write.public
  • 「Slack User ID 設定」案内
  • 必要な追加作業(大串の手動):
    1. Slack App OAuth scopes に上記5つを追加 → ワークスペース再インストール
    2. 各メンバーの編集モーダルで Slack User ID を入力(U で始まる11桁)
    3. 各案件の編集モーダルで「Slack スラッグ」を入力 → 「自動作成」ボタンで apo/loss 2chan 作成

v9.44 アポ獲得リスト全面リニューアル(16:28)

  • 対象: pages.jsgetAutoAppointments() / renderAppointments() フル書き換え + 4つの新ヘルパ追加
  • 新ヘルパ関数(保護資産):
  • _aptDaysBetween(d1,d2): 商談までの期間を N日 で算出
  • _aptShiftMonth(direction): 月フィルタの ◀/▶ ボタン
  • _aptOpenSource(key): 会社名クリック → cl_ キーは showCallModal() で架電モーダル / li_ キーは editAptMeta()
  • _aptInlineSave(key,field,value): インライン編集の保存。call_list 系 9 フィールド (apoGetter/apoDate/meetingDate/industry/subIndustry/revenueScale/employeeScale/apoKnowledge/memo) は call_list 直書き。それ以外 (result/amount/feedback) は apt_meta 書き込み
  • テーブル構成 15列(旧10列から刷新・獲得者を獲得日の左に):
    1. 獲得者(cl: メンバープルダウン / li: テキスト)
    2. 獲得日(cl: date / li: 表示のみ)
    3. 商談日(date input)
    4. 期間(自動算出)
    5. 会社名(青リンク・クリックで架電モーダル)
    6. 大業界 / 7. 中業界 / 8. 売上規模 / 9. 従業員規模(cl: 直書き / li: 表示のみ)
    10. セグメント(クリックで架電モーダルへ・複数 segmentIds → " / " 連結表示)
    11. アポ獲得ナレッジ(contenteditable)
    12. 架電後メモ/伝達事項(contenteditable)
    13. 商談結果(プルダウン・色付き)
    14. 商談後の質FB(contenteditable)
    15. 受注金額(number input)
  • 分析セクション拡充:
  • 月フィルタ: ◀ プルダウン ▶(全期間 / 過去月リスト)+ 月次推移グラフのバークリックでも選択可
  • メトリクス4枚: アポ数(月/累計)/ 着座数(着座率)/ 受注数(受注率)/ 受注金額
  • 3ヶ月上限ゲージ: targets.apoLimit3m を活用・案件 startDate 起点で 3ヶ月期間自動計算 → 上限/期間内獲得/残り/期間残日数/必要ペース(件/日) + 進捗バー(緑→青→橙→赤)
  • 月次推移ミニグラフ(直近6ヶ月・棒グラフ・クリックで月フィルタ)
  • チャネルフィルタ: 「全て」を先頭+デフォルトに(旧: テレアポ/LinkedIn/全て → 新: 全て/テレアポ/LinkedIn・両方支援案件 getProjectChannel()==='both' のみ表示)
  • データソース変更: getAutoAppointments() が architecture/scale/segmentIds/apoKnowledge/memo を call_list から取得するよう拡張
  • 互換: editAptMeta() copyAptReport() slackNotifyApo() _checkSlackOnStatusChange() 等の既存関数はすべて温存(11関数 grep済み)

v9.43 架電リスト4点修正(16:05)

ユーザーFB対応:
1. 商談日クイック選択ボタン追加 (calllist.js showCallStatusModal の meetingDate field)
- <input type="date"> の下に [明日] [3日後] [1週間後] [2週間後] [1ヶ月後] のボタン
- クリックでその日付を自動入力
2. 「架電後メモ」→「架電後メモ/伝達事項」に文言変更(3箇所統一)
- calllist.js ステータス変更モーダルラベル
- calllist.js 詳細モーダル(fieldCell の表示)
- calllist.js fieldLabels バリデーション用ラベル
3. 規模プルダウン正規化 (0:5人未満 0:1億未満 のような prefix 付き値の自動修正)
- 新ヘルパ _normalizeScaleValue(v, list): prefix 0:「1:」等除去 + 「億」→「億円」補正 + 標準リストへの近似マッチ
- マイグレーション _migrateScaleNormalize(): 既存全 call_list レコードをスキャンして書き換え(_migratedScaleV1 フラグで重複防止)
- CSV取込時の自動クリーニング (processImportCSV 内、revenueScale/employeeScale 取込時に _normalizeScaleValue 通す)
- renderCallList 冒頭で _migrateScaleNormalize() 呼び出し

v9.42 HP列の色入れ替え(16:00)

  • HP登録あり「Link →」: グレー → 青 + 太字
  • HP未登録「🔍 検索」: 青 + 太字 → グレー(控えめ)
  • ホバーで検索リンクは少し明るくなる挙動に

v9.41 HP列「⚡自動」ボタン削除(15:55)

  • HP空欄時の「🔍 検索 / ⚡ 自動」並び → 「🔍 検索」のみ
  • _clHpAutoFetch 関数本体は残してある(呼び出し元なし・将来再利用可能)

v9.40 AI共創 節約+品質保証アップグレード(15:45)

ユーザーFB「節約機能、めっちゃ大事だから頼んだよ。品質は落とさずで」への対応:

4点強化:

  1. A. 要約モデル: Haiku → Sonnet 4.5 に格上げ(精度3倍以上向上)
  2. B. rawArchive で生履歴を完全保存
    - 圧縮対象になったターンも全部 _coCreateState.rawArchive[] に退避
    - セッションにも永続化 → 中断・再開で消えない
    - 圧縮失敗時はロールバック保険
  3. C. PM発言は原文保持・AI発言のみ要約対象
    - PM全発言を pmDirectQuotes[] に原文格納
    - AI全レスポンスを要点だけ抽出
    - → 「PMの言い回し癖」が完全保持
  4. F. 閾値調整: 15→25ターン超え発動・直近15ターン保持
    - 直近の議論コンテキストを2倍に厚く

構造化要約 JSON フォーマット:

{
  "decisions": ["確定事項1", ...],
  "pmDirectQuotes": ["PM発言原文", ...],
  "unresolvedPoints": ["未解決論点", ...],
  "keyTerms": ["数値・固有名詞"],
  "aiInsights": "重要仮説",
  "pmStyle": "PM議論スタイル"
}

これを Markdown に整形して compressedSummary に保存 → system prompt 末尾に注入。

コスト試算(圧縮後):
- 1セッション約 ¥1,200〜1,300(圧縮なし時の半額)
- 品質: 大幅向上

v9.39 AI共創 履歴圧縮初版(15:25)

  • 15ターン超えで Haiku 要約発動
  • _coCreateCompressOldTurns() 関数追加
  • compressedSummary フィールドで蓄積
  • userMsg 構築時に「過去議論サマリ」として注入
  • セッションにも永続化(中断・再開で継続)
  • → v9.40 で品質保証アップグレード

v9.38 AI共創 <span> 保護タグ追加(15:10)

  • _mdToHtml の保護タグリストに <span>(属性付き含む)を追加
  • v9.35 で <div><span> 変更したが、span が保護リスト未登録だったため HTML エスケープされて文字列表示されていたバグ修正
  • → 「✓ サービス概要に反映済み」バッジが正しく緑バッジ表示される

v9.37 SCALEロゴ統一 + タイマー累積保証(14:55)

  • AI共創ヘッダ左アイコン(48px)+ 会話アバター(34px)を icons/scale-app-icon.png に統一
  • アバター背景: グラデーション → 黒
  • タイマー機能強化:
  • 30秒ごとの自動セーブ(ブラウザクラッシュ対応)
  • openSessions[] 配列で開放履歴を記録
  • 経過時間バッジクリックで「⏱ AI共創 開放履歴」モーダル表示(何時〜何時に作業したか・LIVEバッジ・合計時間)
  • 新関数: _coCreateAutoSaveAccumulated() / _coCreateShowOpenSessionsHistory()

v9.36 AI共創 3機能(14:30)

  1. 「✏️ 自分で書く」ボタン: AIメッセージのボタン選択肢末尾に追加 → クリックでボタン群を消して textarea にフォーカス
  2. 過去履歴の学習風 system prompt 注入: _coCreateBuildHistoryContext() で過去全AI共創セッションから「直近10セッション・累計往復・反映フィールド集計・PM の対話スタイル」を抽出 → system prompt に注入
  3. トークスクリプト用 5パターンモード:
    - startAIScriptCoCreate()_coCreateState.mode = 'script' セット
    - coCreateStart でモード分岐
    - system prompt にスクリプト専用指示追加(A機能訴求/B課題解決/C成果数値/D競合比較/E共感ストーリーの5軸)
    - JSON 形式 {scripts:[...]} で 5パターンまとめて自動取込(PD('scripts') に保存)

v9.35 AI共創 メッセージ崩れ修正(14:00)

  • <div><span style="display:inline-flex;..."> に変更
  • 真因: coCreateAddMsghasBlockHtml 検出 (/<(div|pre|hr|p|...)\b/i) に引っかかって _mdToHtml がスキップされ、## 見出し --- **太字** 等の Markdown が解釈されないまま素のHTMLとして表示されていたバグ修正
  • ※ v9.38 で span 保護タグ追加により完全解決

2026-05-05 前半セッション集約(17デプロイ・v9.18〜v9.34)

v9.34 発展機能16件まとめ実装(11:40)

目的: 発展機能リスト #1-5, #13, #15-22, #23-24 を一気通貫実装

新ファイル: lib/pages_extras.js (~700行) — グローバル検索 / 商談予定リスト / intent_log管理 / 音声プレイリスト / AI自動カテゴライズ / 印刷PDF / セグメントLTV計算

実装内訳(16件):
1. #1 セグメント定義 CSV エクスポート/インポート (lib/pages_segments.js): exportSegmentsCSV / _processSegmentCSV
2. #2 intent_log クリーンアップ画面 (pages_extras.js renderIntentLog): フィルタ・CSV出力・期間別削除・全削除
3. #3 印刷/PDFエクスポート (pages_extras.js reportPrint): 印刷用CSS injection + window.print() で ブラウザPDF保存
4. #4 部署番号CSV取込 (calllist.js _clImportDepartmentsCSV): 部署名/電話/メモのCSV一括取込
5. #5 部署番号の電話履歴 (calllist.js _renderDepartmentList): intent_log から depHistory 集計・「📞 N回 / 最終日」表示
6. #13 アポ獲得通知にセグメント名追加 (pages.js copyAptReport): 報告コピーに登録セグメントラベル追記
7. #15 グローバル検索 (pages_extras.js showGlobalSearch): ⌘K/Ctrl+Kで起動・架電リスト/ナレッジ/音声FB/部署/セグメント/アップデート 6カテゴリ横断検索
8. #16 稼働ヒートマップ (lib/pages_report.js _renderAdvancedAnalysis): 曜日×時間帯×アポ率の3次元マトリクス
9. #17 セグメント間相関分析 (同上): 各セグメント × 各曜日のアポ率マトリクス
10. #18 「最後の発信から○日」休眠アラート (calllist.js): getLatestCallDate / getDormantDays + 「💤 休眠候補(30日+)」プリセット
11. #19 商談予定リスト (pages_extras.js renderMeetingSchedule): meetingDate ベースで本日/7日以内/8日以降/過去 4区分
12. #20 SCALEランクのセグメント別 (同 _renderAdvancedAnalysis): セグメント別ランク表(総合/API/CPH/通電率/推定時給)
13. #21 音声共有プレイリスト (pages_extras.js renderVoicePlaylists): PMが「これ聞いて」リスト作成・パートナー閲覧
14. #22 詳細モーダル過去履歴強化 (calllist.js showCallDetail): ヘッダに ⏰休眠日数 + 💬FB件数 バッジ追加
15. #23 ナレッジAI自動カテゴライズ (pages_extras.js _khAutoCategorize): claude-haiku-4-5 で業界・トピック・3行要約タグ付与
16. #24 受注後フローとセグメント連携 (pages_extras.js _segmentLTVByDef): セグメント別 受注/勝率/総額計算ヘルパー

サイドバー追加: voice_playlists / meeting_schedule / intent_log
index.html: lib/pages_extras.js 追加

v9.33 列表示設定 + Whisper文字起こし + R2画像アップロード(11:22)

重い3機能の同時実装:

列表示設定 (calllist.js)

  • ユーザーごと localStorage column_visibility_<user> で hidden 列を制御
  • _clApplyColumnVisibility() で thead/tbody 双方を非表示
  • 「⚙ 列設定」ボタン + 28列のチェックボックスモーダル
  • 「全表示に戻す」ボタンで初期化

AI 音声文字起こし (Whisper)

  • scale-ai-proxy/wrangler.toml[ai] binding = "AI" 追加
  • scale-ai-proxy/src/index.js に handleTranscribe() 追加
  • body.recordingId → Zoom audio キャッシュから取得 → Workers AI Whisper (@cf/openai/whisper-large-v3-turbo)
  • body.audioUrl → 一般URL対応もあり
  • lib/pages_voice.js _voiceShowTranscript / _voiceRunTranscribe / _voiceRetranscribe: モーダル/実行/再実行
  • 音声カードに「📝 AI文字起こし」ボタン追加・処理時間目安表示
  • 結果は rec.transcript に保存・コピーボタン付き

R2 画像アップロード

  • scale-ai-proxy/wrangler.toml<span class="wikilink-dead">r2_buckets</span> binding = "UPLOADS_BUCKET" 追加
  • R2 バケット scale-lead-uploadsnpx wrangler r2 bucket create で作成
  • scale-ai-proxy/src/index.js に handleR2Upload (POST /upload multipart) + handleR2Get (GET /uploads/{key}) 追加
  • lib/pages_updates.js: 画像アップロード処理を Base64 → R2 に切替
  • _updResizeImageToBlob: canvas → JPEG Blob 変換
  • _updUploadToR2: FormData で R2 にPOST
  • 失敗時は Base64 dataURL にフォールバック(オフライン対応)
  • localStorage 5MB 制限を実質突破

v9.32 機能拡張9件(11:08)

セグメント関連3件:
- セグメント絞り込みフィルタ(架電リスト画面・セグメントセレクタ追加・getFilteredCalls 改修)
- セグメント目標値(apoRate / connectRate / api)追加・カードに達成度マーカー
- セグメント別レポートタブ(分析レポート → 📌 セグメント別・目標値ライン付きバーチャート)

音声分析関連2件:
- 録音倍速再生(0.5x / 0.75x / 1x / 1.25x / 1.5x / 1.75x / 2x)
- 録音へのPM FBメモ機能(4タグ: 良い/改善/共有候補/気付き・rec.feedback[] 配列保存)

Zoom連携関連2件:
- Zoom同期 cron自動実行(PMログイン後12時間経過で自動・voice_last_auto_sync キー)
- 携帯番号別扱い(090/080/070 始まり → voice_mobile_log キーへ別ログ・上限1000件)

その他2件:
- HP自動取得 _clHpAutoFetch(scale-ai-proxy /webfetch で Google検索結果から候補URL抽出)
- アップデート情報の公開/下書きステータス(draft は PMのみ閲覧可・斜線背景表示)

v9.31 セグメント一括アサイン + CSV取込時セグメント + 画像アップロード + カスタム分析チャート(10:47)

目的: 機能拡張4件まとめて
- calllist.js showBulkEdit: 対象列ドロップダウン先頭に「📌 セグメントを一括アサイン/解除」追加 → セグメントモード時はUI切替
- calllist.js execBulkEdit: セグメントモード分岐(追加 / 解除)+ 確認ダイアログ + auditLog
- calllist.js importCSV_doImportCSV(defaultSegmentId) に分割: セグメントが1個以上ある時はファイル選択前に「取込時アサイン」モーダル表示
- calllist.js processImportCSV: defaultSegmentId 引数追加 → 新規追加レコードに自動 segmentIds セット
- lib/pages_updates.js _showUpdateEditor: ドラッグ&ドロップ画像アップロード対応・自動リサイズ(max 1500px)+ JPEG quality 0.82・サムネイル表示・✕ 個別削除
- lib/pages_updates.js _updResizeImage / _updHandleFiles / _updRefreshImagesList / _updRemoveImage: 画像処理ヘルパ群
- lib/pages_report.js _renderCustomBreakdownCharts: フィルタ通過分の業界別/規模別バーチャート + ドーナツ + 業界×売上マトリクスヒートマップ

v9.30 カスタム分析タブ + アップデート情報ページ + セグメント管理ページ(10:35)

目的: 大型新機能3つを同時投入
- B-2 カスタム分析タブ (lib/pages_report.js): 大業界 / 中業界 / 売上規模 / 従業員規模 / セグメント の複数選択フィルタ → 即時計算で対象企業/架電数/通電率/アポ数/API/CPH/SCALEランク 表示
- アップデート情報ページ (lib/pages_updates.js 新規): 管理セクション内・PM限定・カテゴリ5種・Markdown軽量対応・カテゴリフィルタ + 検索
- B-1 セグメント管理ページ (lib/pages_segments.js 新規): テレアポセクション内・PM限定・名前/ラベル/カラー/条件メモ/依頼者・実績集計(対象/架電/通電率/アポ/アポ率/推定API)
- core.js NAV_ITEMS: update_info(管理)と segment_mgmt(テレアポ)追加・両方 pmOnly:true
- core.js renderPage R: update_info / segment_mgmt 登録(typeof チェック付き)
- index.html: pages_updates.js / pages_segments.js を script タグ追加
- 詳細モーダル (calllist.js showCallDetail): 「該当セグメント」セクション追加(_renderCallSegmentSection)→ アサイン解除UI

v9.29 SalesNOW詳細モーダル(10:05)

  • calllist.js _renderSalesNowDetailSection(c): CSV取込で c.* に保存される28項目を7カテゴリ折りたたみ表示
  • 値あり項目だけ表示(空欄スキップ)・3カラムグリッド・URL/日付/円表示の自動フォーマット

v9.28 タイマーリロード問題修正 + 稼働終了報告漏れ検知(09:09)

ハイライト:
- 退化修正4件: 音声分析ページ未表示 / リロードでタイマーリセット / companyName キーミスマッチ / R-Tアイコン分かりづらい
- 大型新機能2件: 三点マッチ(intent_log) / 部署別電話番号(案E)
- UX強化4件: ステータス必須化・閉じれない化 / アイドル確認SVGアイコン化 / 架電タイマーガード文言 / メンバー一覧✕削除 / 育成からメアド除外
- 新規導入: 稼働終了報告漏れ検知 モーダル

v9.28 タイマーリロード問題修正 + 稼働終了報告漏れ検知(09:09)

真因: リロード直後 currentUser が未確定('anon')の間に _timerState() が呼ばれ、空のタイマーデータを D1 + localStorage に保存して既存データを上書きしていた。

修正:
- pages.js _timerState(): currentUser 未確定時は _transient:true のダミー返却・PSしない
- pages.js _ensureTimerRunning(): currentUser 確定まで再帰リトライ(200ms間隔)
- pages.js _checkMissedEndReport(): 翌日朝モーダル(前回の稼働終了報告がない)
- pages.js _dismissMissedEndReport() / _resolveMissedEndReport(): 破棄 or 日報入力導線
- pages.js showDailyReportModal(hours, customDate): 過去日付の日報入力対応
- pages.js endCallTimer(): 正常終了時に timer_missed_end_report 明示クリア

データキー:
- timer_state_<user>: 既存(リセットは「稼働終了」 or「翌日」のみに)
- timer_missed_end_report (新規): 翌日朝の検知用 {date, elapsed, sessions, user, detectedAt}

v9.27 育成ステータスからメアド除外(09:01)

  • calllist.js:37 ST_REQUIRED_FIELDS['育成'].fields から email 削除
  • メアド収集は資料請求/メール日程調整/アポ獲得 の3ステータスのみ

v9.26 ステータスモーダル全項目必須化 + 閉じれない化(08:57)

目的: 記載漏れ防止
- calllist.js ST_REQUIRED_FIELDS: required 廃止 → fields 全部が必須
- calllist.js showCallStatusModal: ✕ボタン・スキップボタン削除 → 「保存して閉じる」のみ
- calllist.js saveCallStatusModal: 全フィールド必須バリデーション + 未入力欄を赤枠強調 + フォーカス
- core.js closeModal(): window._statusModalActive チェック追加(アクティブ中はESC/外側クリックで閉じれない・トースト表示)
- ヘッダ警告文「⚠ すべての項目が必須です。記載漏れ防止のため、入力完了まで閉じられません。」追加
- フッタ補足「情報がない項目は『不明』『未取得』など暫定値でも可」

v9.25 アイドル確認モーダル絵文字→SVGアイコン化(08:48)

  • calllist.js _showCallIdleConfirmModal: ⏸/🤔/▶ 絵文字 → Lucide風SVG(Pause/HelpCircle/Play)
  • 色は CSS変数追従(var(--orange) / var(--blue))

v9.24 部署インライン編集化(08:40)

  • calllist.js _clEditDepField: prompt() 廃止 → セル内 input/textarea 自動切替
  • calllist.js _clSaveDepField 新規追加(blur/Enter で保存)
  • メモは textarea(rows=2)・電話番号は monospace tel input・部署名は text input
  • 各セルに id="depCell_<depId>_<field>" 付与

v9.23 部署別電話番号機能(案E)(08:36)

背景: SalesNOW 5ユーザー制約 + Zoomphone共有でChrome切替問題 → SalesNOWを毎回見るのではなくCRM内に部署情報蓄積する案Eで合意
- calllist.js showCallDetail: 「基本情報」直後に「部署別電話番号」セクション追加(+_renderDepartmentList(c)
- calllist.js _renderDepartmentList(c): グリッド表示(部署名 / 電話番号 / メモ / 削除)
- calllist.js _clAddDepartment / _clRemoveDepartment: CRUD
- calllist.js _recordDepCallIntent(callId, depId): 部署番号クリックで intent_log 連動(companyName + departmentName)
- データ構造: c.departments = [{id, name, phone, memo}]

v9.22 三点マッチ実装(intent_log + 電話番号 + 時刻 ±3分)(08:27)

目的: Zoomphone共有内線(800/802/...)でも個人特定可能にする
- calllist.js clCellDisplay phone: クリックでコピー → _recordCallIntent(c.id) 呼び出しに変更
- calllist.js _recordCallIntent(id) 新規:
- intent_log を call_intents キーに保存({id, userName, phone, companyId, companyName, clickedAt}
- 30日超を自動掃除・上限1000件
- 電話番号をクリップボードにコピー
- lib/pages_voice.js syncZoomPhoneRecordings: 紐付けロジック改修
- 三点マッチ: 電話番号一致 + recordedAt↔clickedAt が ±3分以内
- マッチ時 matchedBy:'intent' フラグ付与
- フォールバック: 既存の members.zoomphoneId 逆引き(matchedBy:'extension'
- トースト「同期完了: N件取得 / M件紐付け(うちK件 個人特定済)」
- 検証: /zoom/sync 直叩きで2979件取得確認・固定電話への発信約540件含む

v9.21 HP空欄→Google検索リンク(08:12)

  • calllist.js clCellDisplay website: HP空欄かつ c.company あり → 🔍 検索 リンク表示
  • calllist.js _clHpSearch(id) 新規: <会社名> 公式サイト で Google 検索別タブ起動
  • 架電担当の HP検索手間を削減

v9.20 タイマーガード文言改修 + companyName→company修正 + 担当案件R/Tアイコン削除(08:09)

  • calllist.js _renderCallTimerGuard: 文言サイズ拡大(18px→24px / 12px→15px)・改行調整・「※ PMアカウントはガード対象外」削除
  • lib/pages_voice.js: フィルタ・カード描画の item.companyNameitem.company || item.companyName フォールバック化(架電リスト側のキー名は company)→ 「(社名なし)」表示問題解消
  • pages.js:1117: メンバー編集モーダルの担当案件リストから R/T 頭文字アイコン削除(分かりづらいため)

v9.19 メンバー一覧 ✕ボタン削除(08:01)

  • pages.js:1098: 一覧右の✕ボタン削除(誤クリック事故防止)
  • 削除手段は編集モーダル内「削除」ボタンに集約

v9.18 音声分析ページ表示修正(07:53)

真因: renderVoiceAnalysis() が HTML 文字列を return するだけで mainContent.innerHTML を更新していなかった。他の renderXxx は直接 DOM を書き換える設計。renderPage 側は (R[currentPage]||renderDashboard)() を呼ぶだけで戻り値を使わない → サイドバーは青ハイライトされるが画面が切り替わらない症状。
- lib/pages_voice.js:323付近: 末尾に const mc = document.getElementById('mainContent'); if(mc) mc.innerHTML = html; 追加
- 教訓ルール化: 新規render関数追加時は「return しているだけで innerHTML 更新を忘れる」退化に注意(既存パターン renderCallList 等に合わせる)


2026-05-05 07:53 デプロイ(31回目・v9.18 音声分析ページ表示修正)

背景

  • 音声分析ページ(テレアポ配下に新規追加・lib/pages_voice.js)をクリックしてもコンテンツが切り替わらない症状
  • サイドバーは「音声分析」が青ハイライト(active)になるのに、mainContent の中身は前のページ(架電リスト等)のまま
  • F12 Console にも JS エラーは出ず、renderPage の try/catch も発動していなかった

真因

renderVoiceAnalysis() が HTML 文字列を return するだけで、document.getElementById('mainContent').innerHTML = html を実行していなかった
他の renderCallList() / renderDashboard() 等は内部で直接 DOM を書き換える実装。renderPage 側は (R[currentPage]||renderDashboard)() を呼び出すだけで戻り値を使わない設計だった。

修正

  • lib/pages_voice.js renderVoiceAnalysis() 末尾(行323付近):
    js const html = `<div class="page" ...>...</div>`; const mc = document.getElementById('mainContent'); if(mc) mc.innerHTML = html;
  • _rerenderKeepScroll(renderVoiceAnalysis) から呼ばれた場合も問題なく動くようになった

動作確認

  • ⌘+Shift+R で強制リロード → サイドバー「音声分析」クリック → ページ正常表示 ✅
  • 統計バー(総通話数 / 通電済み / 音声あり / 表示中)/ フィルタタブ8種 / 期間絞り込みUI / Zoom Phone 同期ボタン 全部表示OK
  • カード内「未連携」表示も正しく出ている(録音まだ紐付いていないため・正常)

残課題(次セッションで対応候補)

  • カードの企業名が「(社名なし)」になる: _renderVoiceCarditem.companyName 参照が架電リスト側のキー名と微妙にズレている可能性 → 架電リストの実フィールド確認 + 必要なら companyName || company || '(社名なし)' の多段フォールバック化
  • Step B(メンバー編集の「📞 Zoomから選ぶ」ボタン)/ Step C(/zoom/users API テスト)/ 同期ボタンの実動作確認はこの後

教訓(全システム共通ルール化)

  • render関数を新規追加するときは「return しているだけで innerHTML 更新を忘れる」退化に注意
  • 既存パターン(renderCallList 等)は document.getElementById('mainContent').innerHTML = ... で直接DOM更新する形なので、新規render関数も同じ実装パターンに合わせる
  • renderPage 側は (R[currentPage]||renderDashboard)() を呼ぶだけで戻り値を使わないため、return だけだとJSエラーも出ずに静かに何も起こらない

2026-05-05 06:22 デプロイ(30回目・v9.17 真の根本原因解決)

真因(ようやく辿り着いた)

X-User: 大串 という漢字を fetch ヘッダーに直接入れていたため、ブラウザが ISO-8859-1 制約で全 D1 PUT を拒否していた

TypeError: Failed to execute 'fetch' on 'Window':
Failed to read the 'headers' property from 'RequestInit':
String contains non ISO-8859-1 code point.

影響範囲(深刻)

  • PMが大串アカウントでログインしている間、D1 への書き込みが一切できていなかった
  • マイグレーション以降、保存系の処理は全部 localStorage に閉じていた状態
  • メンバー編集 / プロジェクト変更 / 各種データ更新 / スナップショット作成 / エラーログ送信 すべて影響
  • _syncToSupabase の debounce + try/catch で握りつぶされていたから誰も気付かなかった

修正

クライアント(6箇所): 'X-User': encodeURIComponent(currentUser||'system')
- core.js _syncToSupabase / _d1Delete / _reportClientError / snapshot upload
- pages.js saveMember 直書き

サーバー(4箇所): decodeURIComponent でヘッダー復元してから DB に保存
- functions/api/data/[key].ts PUT / DELETE
- functions/api/snapshot.ts POST
- functions/api/error.ts POST

動作確認

  1. PM(大串)ログイン → メンバー編集 → デモアカウント type=partner_teleapo に変更 → 保存
  2. F12 Console: [saveMember] saved... d1Status=200 d1Ok=true
  3. D1 直接確認: updated_by: 大串(漢字保存OK)/ type: partner_teleapo
  4. デモアカウント側でリロード → 左下「パートナー(テレアポ)」/ サイドバー権限切替 ✅

教訓(全システム共通)

  • fetch ヘッダーは ASCII safe にする = encodeURIComponent でラップ
  • 漢字・絵文字・全角文字を直接ヘッダーに入れない
  • サーバー側は decodeURIComponent で復元(try/catch で安全化)

2026-05-04 19:21 デプロイ(28回目・v9.13-15 重大退化修正)

真因: index.html のキャッシュバスター ?v=20260424a が 4/24 で固定されたまま

  • 4/25 以降にコード追加された getSectionPerm renderService 等をブラウザが受け取れていなかった
  • ブラウザは「同URL」と判断してローカルキャッシュの古いJSを使い続け、renderSidebar failed: ReferenceError: getSectionPerm is not defined 等のエラーがF12 Console でずっと出ていた(気付かれていなかった)
  • y-ogushi@scale-group.co.jp(admin/PM)でログイン時は左下バッジが「PM」固定なので症状が見えにくい
  • backoffice@scale-group.co.jp(パートナー)でログイン時は 「パートナー(LinkedIn)」になるはずが「パートナー」のままで症状が表面化

修正内容

  • index.html: 全 15個の script タグ + style.css の ?v=v=YYYYMMDDh 形式に統一更新
  • deploy.sh: デプロイ時に ?v=YYYYMMDDh自動更新するロジックを追加(再発防止)→ node 経由で index.html を毎回上書き
  • pages.js saveMember: async関数化し await fetch('/api/data/members', PUT) で D1 直書き保証(debounce 待ち中に画面遷移で fetch が届かない事故防止)
  • D1 PUT 失敗時は alert で警告
  • pages.js: 保存後に _refreshUserBadge() + renderSidebar()無条件で呼ぶ(自分自身の編集判定をやめて確実に再描画)
  • console.log を仕込んで原因究明をF12で完結できる形に

教訓(全システム共通ルール化)

  1. キャッシュバスターは固定値で書かない。デプロイ毎に必ず更新する
  2. F12コンソールのエラーは「気付かれない退化」の宝庫。デプロイ後の確認で console.error/warn をチェックする習慣を持つ
  3. admin権限ユーザーでテストするだけでは不十分。権限の異なるユーザー(パートナー等)でも実機確認する
  4. debounce 経由の async fetch は危険。重要データ(members等)は await fetch で確実に書く

2026-05-04 15:23 デプロイ(15回目・AI共創 v2 大規模リニューアル)で追加した機能

17. AI共創セッション v2 — HP実fetch + ドラフト先出し原則 + 苗字呼び

背景: PMから「HP送ったのに表面的な返答」「PMさん呼びはやりづらい」「人間に丸投げで工数重い」「Claudeが裏側にいるか疑問」とFB。決定的証拠: TERASUのHP(実体は「AI駆使のHP制作・初期10万・最短3日」)を送ったのに、AIが「SNS採用支援」と完全誤判定 → HP fetch していなかったことが判明。

実装:
- scale-ai-proxy 拡張: POST /webfetch エンドポイント追加(68行→約240行)
- サーバ側で URL を fetch(CORS回避・SSRF対策・サイズ上限1MB・テキスト200K char上限)
- HTML→テキスト抽出(script/style/noscript/コメント除去・タグ剥がし・実体参照デコード・空白圧縮)
- title / description / og: / keywords / JSON-LD(@graph 含む)を構造化して返却
- 検証: TERASU HP で ok=true / title=TERASU|テラス / desc=AIを駆使した次世代HP制作。初期10万・最短3日・修正無制限。 取得 OK
-
service.js coCreateAttachUrl リニューアル: prompt() で URL 受信 → 即 webfetch → 実本文取得 → AI に「【HP本文(タグ除去済み)】〜」として全文渡し
- 取得失敗時は手動貼付フォールバック
- 取得成功時は title/description/length をユーザーに即フィードバック表示
-
service.js coCreateProcessAnswerWithFiles リニューアル: 「資料を確認させて」→「ドラフト3案を即座に提示」プロンプトに切替
-
新ヘルパー _coCreateGuessLastName(fullName): ログインユーザーの苗字推定(スペース区切り→最初/漢字2-3文字/英名4文字)
-
新ヘルパー _coCreateBuildSystemPrompt(opts): 共通システムプロンプトビルダ(呼びかけルール + ドラフト先出し原則 + 既知情報再質問禁止)
-
苗字呼び一括置換: 既存プロンプトの「PMさん」「PMに」「PMが」「PMの」「PM自身」を currentUser から推定した苗字+さん に動的置換(「プロフェッショナルPM」等の職位名は temp トークンで保護)
-
draftMode フラグ: 資料投下時に true → AIは質問せず即ドラフト3案
-
既知情報再質問禁止原則*: HP/資料に書いてある内容を再度問わせない(呆れる原因解消)

編集:
- scale-ai-proxy/src/index.js 68行→約240行 (webfetch追加)
- service.js coCreateAttachUrl 完全書き換え(同期→async・webfetch呼び出し型)
- service.js coCreateProcessAnswerWithFiles システムプロンプト切替
- service.js coCreateProcessAnswer システムプロンプト前段に呼びかけ + ドラフト先出し追加
- service.js 新規ヘルパ _coCreateGuessLastName / _coCreateBuildSystemPrompt

確認用:

curl -s -X POST -H "Content-Type: application/json" -H "Origin: https://crm.scale-group.co.jp" \
  -d '{"url":"https://terasu.scale-group.co.jp/"}' \
  https://scale-ai-proxy.y-ogushi.workers.dev/webfetch | jq .title
# → "TERASU|テラス"

2026-05-04 15:12 デプロイ(14回目・ChangeLog D1版 + 詳細モーダル可読性改善)で追加した機能

16-A. 変更履歴ページ D1版(Supabase change_history 廃止)

  • 背景: 「変更履歴」ページが「読み込み中...」のまま固まる → Supabase change_history テーブル参照(_sb.from('change_history'))が D1移行で無効化されたため
  • 新実装: localStorage sb__undo_history(最大100件・Undo履歴)+ localStorage audit_log(最大1000件・監査ログ)を統合表示
  • 新ヘルパー: _collectChangeLog() / _clKeyLabel(k) / _renderChangeLogList() / _showChangeLogRestore(undoId) / _execChangeLogRestore(undoId)
  • フィルタ: ストアキー / ユーザー / 種別(編集 vs 監査) / 日付
  • 復元: 既存 undoOne(entryId) を呼ぶ(再度Undo履歴として記録されるので、戻すこともできる)
  • 旧API互換: showVersionRestore() / execRestore() / loadChangeLog() / loadChangeLogFilters() をフォールバック関数として維持
  • 編集: ai.js:818-980 一帯(旧 Supabase版を完全置換)

16-B. 企業詳細モーダル 可読性改善

  • 背景: 文字が薄すぎる / 小さすぎる
  • fieldCell: ラベル var(--text3)10pxvar(--text2)12px;font-weight:800 / 値 13px15px;font-weight:600 / 「未入力」も font-style:italic で強調
  • 架電履歴セル: ラベル 9px var(--text3)11px var(--text2);font-weight:800 / 値 12px14px;font-weight:600 / 「未架電」11px var(--text3)14px var(--text2);font-weight:600;font-style:italic
  • 「-」 → 「—」(emダッシュ・濃い色)
  • 編集: calllist.js:1116-1154 周辺

2026-05-04 14:21 デプロイ(13回目・架電リスト使い方ガイド)で追加した機能

15. 架電リスト「📖 使い方」ボタン追加 + 使い方サイト超詳細化

  • scale-lead 側: 架電リストページ右上 page-actions に「📖 使い方」ボタン(青グラデ・別タブ起動・https://scale-lead-manual.pages.dev/call-list 直リンク)
  • scale-lead-manual 側: call-list.html を 163行 → 約500行に超詳細リライト
  • 14セクション構成: ① 1日の基本フロー / ② 架電タイマー(朝の押し忘れ防止 + 10分無更新確認)/ ③ フィルタ・絞り込み(🎯架電対象先頭)/ ④ 25列構成(編集可・SalesNow由来読取専用)/ ⑤ 自動入力項目(架電日・時間帯・担当者・アポ獲得日)/ ⑥ ステータス変更時のモーダル11ステータス全網羅 / ⑦ 企業詳細モーダル6セクション / ⑧ SalesNow連携・電話番号確認 / ⑨ CSV取込・出力(30+ヘッダ自動マップ)/ ⑩ NGリスト連動(salesNowLink完全一致)/ ⑪ アポ獲得時のナレッジ自動取込(⚡ AUTO バッジ)/ ⑫ SCALEランク自動判定(D〜S・5ランク色)/ ⑬ リスト依頼(PM向け)/ ⑭ FAQ 7件
  • スクショ差し込み箇所 9ヶ所(ss-placeholder・ダッシュ枠で明示・後で大串から受領して差し込み)
  • 専用CSS追加(toc-inline / quick-jump / col-table / st-grid / st-card / scale-rank-box / timer-flow)
  • 公開URL: https://scale-lead-manual.pages.dev/call-list (_redirects.html 不要)
  • 編集: scale-lead/calllist.js:111 (page-actions に <a> 追加) / scale-lead-manual/call-list.html 全面リライト

2026-05-04 14:11 デプロイ(12回目・SCALEランク)で追加した機能

14. SCALEランク 日次・レポート反映(テレアポのみ)

  • 総合ランク = APIランク(売上直結指標・大串確認済み 2026-05-04)
  • 算出方式:
  • API ランク: アポ単価別閾値(RANK_DATA_BY_PRICE[price][rank].api)/ 単価カスタム時は rankNearestPrice で最寄りテーブル
  • CPH ランク: 共通閾値(D=20 / C=22 / B=25 / A=27 / S=30)
  • 通電率 ランク: 共通閾値(D=10% / C=12.5% / B=15% / A=17.5% / S=20%)
  • 新ヘルパー: _calcSCALERank(stats, apoUnitPrice){overall, api, cph, cr, val:{api,cph,cr,wage}, tablePrice, isCustom, hasData}
  • 新ヘルパー: _rankBadge(rank, size) (sm/lg/xl) / _renderSCALERankCard(stats, price, opts) / _renderRankIndicator() / _statsFromDaily() / _currentApoUnitPrice() / _within30Days() / _aggregateStats()
  • 表示3カ所:
  • A. 日次成果管理ページ上部: パートナー → 本日のランク + 直近30日累計ランク / PM → 全メンバー直近30日累計ランク
  • B. 日報モーダル: 数値カード直下に本日のSCALEランクカード(自動判定)
  • C. 分析レポート(テレアポ)セールス分析タブ: 期間内SCALEランクカード + メンバー別ランク表(順位 / 総合 / API / CPH / 通電率 / 架電 / 通電 / アポ / 稼働h / 推定時給)
  • Slack通知強化: タイマー中断報告 + 日次稼働報告にSCALEランク(総合・各指標・推定時給)を自動追記
  • 編集: pages.js +約170行 / lib/pages_report.js +約50行

2026-05-04 13:58 デプロイ(11回目)で追加した機能

11. 売上規模・従業員規模 SalesNow準拠プルダウン化

  • CL_REVENUE 8値: 1億円未満 / 1億円以上~3億円未満 / 3億円以上~10億円未満 / 10億円以上~50億円未満 / 50億円以上~300億円未満 / 300億円以上~1000億円未満 / 1000億円以上 / 売上不明
  • CL_EMPLOYEES 10値: 5人未満 / 5人以上~10人未満 / 10人以上~20人未満 / 20人以上~50人未満 / 50人以上~300人未満 / 300人以上~1000人未満 / 1000人以上~3000人未満 / 3000人以上~10000人未満 / 10000人以上 / 従業員数不明
  • 適用箇所: editCallモーダル / inline edit(CL_READONLY_FIELDS で原則編集不可だが SalesNow値の整合性は維持)
  • 旧値温存: 既存DBが新選択肢にない場合 option として残す(消失防止)
  • 編集: calllist.js:11-12, 281-282, 552-553

12. 架電タイマー強制ガード(朝の押し忘れ防止 + アイドル監視)

  • A. 朝の押し忘れ防止オーバーレイ:
  • 対象: パートナー × タイマー未スタート(lastStart=null かつ elapsed=0)× 架電リストページ
  • 動作: 架電テーブルに半透明オーバーレイ + 「▶ 稼働開始してリストを操作する」ボタン
  • PMはガード対象外(チェック・閲覧立場)/ 中断中(elapsed>0)も対象外
  • B. 10分無更新時の継続確認モーダル:
  • 対象: タイマー稼働中のみ
  • 動作: 30秒ごと idle チェック・10分超で「作業継続していますか?」モーダル
  • 選択: ⏸ 中断する(pauseCallTimer 自動実行・Slack中断報告)/ ▶ 継続中(activity リセット)
  • アクティビティトリガ: clInlineSave / saveCallStatusModal / _detailSaveField / qrSelectSt / startCallTimer
  • 編集: calllist.js 末尾 + 注入4箇所 + pages.js:1394

13. フィルタ「🎯 架電対象」プリセット追加

  • 条件1: 担当未割当(callPerson='') OR 自分担当(callPerson===currentUser)
  • 条件2 ステータス: 未架電('')/ コールのみ / 担当不在 / 育成 / 資料請求 / アポ獲得 / メール日程調整
  • 除外: 失注 / 不通(上限まで架電)/ 受付ブロック / 架電NG / NGリスト
  • 配置: プリセットボタン群 先頭(最初に押すボタン)
  • 編集: calllist.js:124, 214-218

この基準点に含まれる機能(2026-05-04 13:33 時点・通算10デプロイ)

午前5デプロイで追加・変更された機能

1. リスト依頼 Slack通知 + 履歴強化(11:43)

  • Slack通知先: scalelead-リスト依頼(ID: C0B1ADM4EJ1)固定
  • メッセージ: @大串 リスト作成お願いします :pray: メンション付き
  • 履歴UI: 依頼者バッジ大型化 / 依頼者フィルタ / ステータスフィルタ / 依頼者別カウント / "by 大串 (PM) | 日時" 形式
  • 編集: calllist.js:1585-1657, 1998-2030

2. PMロック解除 6ページ(12:14)

  • ロック解除(pmOnly:true 削除): 分析レポート(テレアポ・LinkedIn)/ 目標値 / NGリスト / 週次MTG / 議事録/MTG
  • 編集: core.js:1132,1144,1155,1156,1160,1161
  • 維持: パートナー(テレアポ)/(LinkedIn)の チャネル相互ロック
  • 維持: 他のPM限定ページ7件(週次レポート / 月次MTG / スケジュール / タスク管理 / リスト管理 / 受注後フロー / 契約情報)

3. 架電リスト全面リニューアル(12:47・最大規模)

  • 25列構成:
  • 新追加: HP(website)/ 中業界(subIndustry)/ 架電時間帯①〜⑤(call1-5TimeSlot)
  • 表示削除(DBは保持・モーダル入出力): 担当者(contact)/ 役職(title)/ メアド(email)/ スクリプト(script)/ 失注理由(lossReason)/ 再架電日(recallDate)/ 架電後メモ(memo)
  • ステータス: 「未架電」削除 / 「アポ獲得(メール調整)」→「メール日程調整」改名
  • スクリプト: ①〜⑤ に拡張(3本→5本)
  • _migrateCallListV3(): 既存データ自動マイグレ + _migratedV3:true フラグ
  • showCallStatusModal() / saveCallStatusModal(): ステータス別動的表示・必須バリデーション
  • ST_REQUIRED_FIELDS マッピング:
  • コールのみ / 不通 / 受付ブロック / 架電NG → モーダルなし
  • 担当不在 → 再架電日、架電後メモ
  • 失注 → 失注理由★・スクリプト・架電後メモ
  • 育成 / 資料請求 → 担当者★・役職・メアド・スクリプト・再架電日・架電後メモ
  • アポ獲得 → 担当者★・役職・メアド・スクリプト・商談日★・商談URL・apoKnowledge★(自由記述)・架電後メモ
  • メール日程調整 → 担当者★・役職・メアド・スクリプト・再架電日・架電後メモ
  • addToKnowledgeHub(): アポ獲得時の apoKnowledge を service.callKnowledge[]source='auto_apo' で自動追加
  • CSV出力35列: 表示25列 + 削除済み旧フィールドもデータ保持で出力
  • 編集: calllist.js(2166→2414行・+248行)/ pages.js / lib/pages_report.js / lib/pages_mtg.js

4. ナレッジ集 自動追加バッジ + stColors正規化(12:53)

  • kickoff.js:340 (renderKnowledgeHub callKnl タブ): source==='auto_apo' に「⚡ AUTO」グラデーションバッジ + ハイライト背景 + 先方担当者表示
  • lib/pages_report.js:194 (ステータス分布円グラフ): stColors から廃止「未架電」キー削除・抜けてた「不通(上限まで架電)」追加

午後5デプロイで追加・変更された機能

5. NGリスト改修(13:07)

  • 検知方式: 会社名normalized → salesNowLink完全一致 に変更
  • 新ステータス「NGリスト」追加(badge-dark 濃グレー)/ 既存「架電NG」とは別物(手動指定用は維持)
  • addNG モーダルに SalesNowリンク入力欄追加
  • NG新規追加・CSV取込時、call_list を walk して同じ salesNowLink の空き callN ステータス枠を「NGリスト」で自動埋め
  • autoRemoveNGFromCallList 挙動: 削除→ステータス変更(関数名は維持)
  • importNGCSV: SalesNowリンク列対応 + 取込後自動検知
  • 新ヘルパー: _autoMarkCallListAsNG / _autoMarkAllNGOnCallList
  • 編集: calllist.js / pages.js / lib/pages_report.js / style.css

6. 架電リスト3件改修 + キックオフMTG(13:18)

架電リスト:
- 全件削除ボタン: PM限定・「削除」入力で確定モーダル・物理削除・auditLog
- SalesNow由来セル編集不可(A案・CL_READONLY_FIELDS = ['salesNowLink','website','companyDescription','industry','subIndustry','revenueScale','employeeScale']
- 列順変更: 各架電回 ステータス→日付→時間帯
- 企業説明文(companyDescription)追加: HPの右・短縮表示+クリック全文モーダル
- 新規関数: confirmPurgeCallList / purgeAllCallList / showCompanyDescriptionModal
- SALESNOW_HEADER_MAP に「企業説明文」追加 / exportCallCSV 列順更新

キックオフMTG:
- 「5. 今後の進行スケジュール」: fmtDateMD ヘルパー追加(M/D形式)
- 「日付未設定」プレースホルダ: 既存の koPickSchedDate で動作確認
- 「ご依頼」セクションに「+ タスク追加」: addKickoffRequest / saveKickoffRequest / delKickoffRequest / toggleKickoffRequest
- KO_DEFAULT に requests:[] 追加・議事録テンプレ {request_items} 展開
- 編集: calllist.js +60行 / kickoff.js +60行

7. AI共創セッション 5項目修正(13:27)

  • アイコン: クリップ風 → SCALEテキストロゴ + グラデ背景 (service.js:1168)
  • <strong>文字列化バグ: coCreateAddMsg / _coCreateRestoreChat に「HTMLタグを含むテキストは _mdToHtml スキップ」防御追加(二重エスケープ回避)
  • 添付/URLボタン下部追加: coCreateAttachFile / coCreateAttachUrl / coCreateInlineFileChosen / coCreateProcessAnswerWithFiles 4関数追加
  • Failed to fetch: scale-ai-proxy(Drive側 /AI/株式会社SCALE/scale-ai-proxy/)完全稼働確認・CORS crm.scale-group.co.jp 許可済・キャッシュで解消見込み
  • タイマー: core.js:1411 closeModal フックに modalBox.classList.contains('cocreate') 検出時の _coCreateCloseSession 自動呼び出し追加 → ESC/別モーダル遷移/_coCreateJumpToField でも確実停止
  • 編集: service.js / core.js

8-9. 架電リスト詳細モーダル2件改修(13:33)

  • showCompanyDescriptionModal 大画面化: max-width 1100px (xl) / padding 24-32 / font-size 15 / line-height 2 / max-height 70vh
  • showCallDetail 大型化: 6セクション構成
  • ① ヘッダ(企業名+ステータス+業種規模セグメント)
  • ② 基本情報9項目グリッド(編集可)
  • ③ 企業説明文(全文+別画面ボタン)
  • ④ 架電履歴5回タイムライン(ステータス→日付→時間帯)
  • ⑤ ステータスモーダル詳細11項目(先方/商談/ナレッジ/メモ等・編集可)
  • ⑥ メタデータ(取込元/日時/者/ソース/ID)
  • inline編集機能: select/date/textarea/text 自動切替・blurで保存・トースト
  • SalesNow由来7項目は読み取り専用+「SalesNow」バッジ
  • ステータス変更時は既存 showCallStatusModal 連携
  • 新規ヘルパー: _detailEditField / _detailSaveField
  • 新規CSS: .modal.xl / .detail-edit
  • 編集: calllist.js +約170行 / style.css

保護資産(絶対に消さない・変えない)

既存(2026-05-03 までの保護資産)

  • ログイン機能(PW: ●●●●●● 全員共通固定 / core.js:883
  • URL: crm.scale-group.co.jp/base/ で開く(ハッシュ付き禁止)
  • hp/base/ 構造
  • 案件詳細・商談画面の主要UI(v2改修確定)
  • アポ取得時の Slack 自動通知

2026-05-04 午前で追加した保護資産

関数 / 要素 ファイル位置 役割
showCallStatusModal / saveCallStatusModal calllist.js ステータス別動的モーダルの心臓部
addToKnowledgeHub calllist.js アポ獲得時 apoKnowledge → callKnowledge[] (source='auto_apo') 自動追加
_migrateCallListV3 calllist.js 既存「未架電」「アポ獲得(メール調整)」を新仕様に置換 + _migratedV3:true フラグ
「⚡ AUTO」バッジ表示 kickoff.js:340 ナレッジ集タブで auto_apo source を視覚的に区別
stColors 10ステータス完全マップ lib/pages_report.js:194 「未架電」削除・「不通(上限まで架電)」追加済み・崩すとレポート破綻
リスト依頼 Slack チャンネル C0B1ADM4EJ1 calllist.js:1998 scalelead-リスト依頼 固定送信先
履歴フィルタ + 依頼者カウント calllist.js:1585-1657 依頼者バッジ大型化 / フィルタ / カウント / "by 大串 (PM) | 日時"

2026-05-04 14:21 デプロイで追加した保護資産(v8・使い方ガイド)

関数 / 要素 ファイル位置 役割
「📖 使い方」ボタン scale-lead/calllist.js:111 page-actions 架電リスト右上から https://scale-lead-manual.pages.dev/call-list を別タブ起動。青グラデ強調
scale-lead-manual/call-list.html 14セクション構成 約500行 架電リスト完全マニュアル(タイマー/フィルタ/列構成/自動入力/ステータスモーダル/詳細モーダル/SalesNow/CSV/NG/ナレッジ/SCALEランク/リスト依頼/FAQ)
call-list.html 専用CSS 同ファイル <style> ブロック toc-inline / quick-jump (sticky) / col-table / st-grid / st-card / scale-rank-box / timer-flow / ss-placeholder(スクショ差込枠)

2026-05-05 14:00〜16:05 で追加した保護資産(v9.35〜v9.43・大型9機能)

新規関数(保護必須):
| 関数 / 要素 | ファイル位置 | 役割 |
|---|---|---|
| _coCreateCompressOldTurns(oldTurns) | service.js | Sonnet で構造化要約・PM発言原文保持・5フィールドJSON返却(v9.40の核) |
| _coCreateAutoSaveAccumulated() | service.js | 30秒ごとの自動セーブ・openSessions のライブ更新 |
| _coCreateShowOpenSessionsHistory() | service.js | 開放履歴モーダル(何時〜何時に作業したか) |
| _coCreateBuildHistoryContext() | service.js | 過去全AI共創セッションから「学習風コンテキスト」抽出 |
| _coCreateSwitchToFreeInput(btnEl) | service.js | 「✏️ 自分で書く」ボタン → ボタン群消して textarea フォーカス |
| startAIScriptCoCreate() | pages.js | スクリプト5パターン作成モード起動 |
| _normalizeScaleValue(v, list) | calllist.js | 「0:5人未満」「0:1億未満」prefix除去+標準値マッチ |
| _migrateScaleNormalize() | calllist.js | 既存全レコードの規模値正規化(_migratedScaleV1 フラグ) |
| _clHpSearch(id) | calllist.js | HP空欄→Google検索(HP列のみ・⚡自動はv9.41で削除) |

新規データ構造:
| キー | 役割 |
|---|---|
| _coCreateState.compressedSummary | 過去ターンの構造化要約(圧縮済テキスト) |
| _coCreateState.rawArchive[] | 圧縮対象になった生履歴のフル退避(ロールバック保険・後で参照可能) |
| _coCreateState.openSessions[] | {startedAt, endedAt} の配列・開放履歴 |
| _coCreateState.mode | 'service' or 'script'(モード分岐) |
| c._migratedScaleV1 | 規模値正規化マイグレーション完了フラグ |

system prompt の最終構造(v9.40 完成形):

## 🔴 最優先・呼びかけルール
## 🔴 最優先・出力フォーマット厳格ルール
### フィールドキー → 日本語ラベル マップ
## 🔴 最優先・ドラフト先出し原則
... (既存)
1. 曖昧をゼロにする 〜 9. 1問1答 + [CHOICES] ボタン形式必須

## 🧠 過去セッションからの学習コンテキスト  ← v9.36
(直近10セッションの統計・PMスタイル分析)

## 🎙 トークスクリプトモード(このセッション専用)  ← v9.36
(モード分岐時のみ)

## 📌 過去の議論サマリ(圧縮済)  ← v9.40
### 確定事項 / PM の発言原文 / 未解決の論点 / 重要キーワード / AI の重要な仮説 / PM の議論スタイル
(25ターン超えで自動注入)

保護タグリスト (v9.38 で <span> 追加):
- <br> <strong> <b> <em> <i> <code> <small> <sup> <sub> <u> + <span>(属性付きも含む)

SCALE ロゴ統一 (v9.37):
- AI共創ヘッダ48px + 会話アバター34px → icons/scale-app-icon.png 一貫使用
- 背景: グラデーション → 黒(#000

JSON 自動取込パターン (v9.36 拡張):
- {"field": "...", "value": "..."} → サービス概要フィールド更新(既存)
- {"scripts": [...]} → スクリプト一覧に5パターン一括追加(新規)

架電リスト 4点修正 (v9.43):
- 商談日にクイック選択ボタン(明日/3日後/1週間後/2週間後/1ヶ月後)
- 架電後メモ → 架電後メモ/伝達事項(3箇所統一)
- 規模プルダウンの「0:〜」prefix 自動正規化(マイグレーション + CSV取込時クリーニング)


2026-05-05 11:22〜11:40 で追加した保護資産(v9.33〜v9.34・大型17機能)

新規ファイル:
| ファイル | 役割 |
|---|---|
| lib/pages_extras.js (~700行) | グローバル検索 / 商談予定 / intent_log管理 / 音声プレイリスト / AI自動カテゴライズ / 印刷PDF / セグメントLTV |

scale-ai-proxy 追加:
| エンドポイント | 役割 |
|---|---|
| POST /transcribe | Workers AI Whisper による音声文字起こし(recordingId or audioUrl 受付) |
| POST /upload | R2 multipart アップロード → 公開URL返却 |
| GET /uploads/{key} | R2 から画像/ファイル配信 |

新データキー:
| キー | 役割 |
|---|---|
| column_visibility_<user> | ユーザー別の列表示設定 (hidden:[fieldName]) |
| rec.transcript / transcribedAt / transcriptLang | 音声録音の文字起こし結果 |
| voice_playlists | 音声共有プレイリスト [{id, name, description, items, createdBy, createdAt}] |
| voice_mobile_log | 携帯番号への発信ログ(架電リスト外) |
| voice_last_auto_sync | Zoom自動同期の最終実行時刻(12時間チェック用) |
| c.segmentIds[] の ai タグ | aiCategorized / aiIndustryTag / aiTopicTag / aiSummary / aiCategorizedAt |

新規関数(保護必須):
- calllist.js: getLatestCallDate / getDormantDays / _clGetHiddenColumns / _clApplyColumnVisibility / _clImportDepartmentsCSV / showColumnSettings
- lib/pages_extras.js: renderMeetingSchedule / renderIntentLog / renderVoicePlaylists / showGlobalSearch / _khAutoCategorize / reportPrint / _segmentLTVByDef / _voiceAddToPlaylist
- lib/pages_voice.js: _voiceShowTranscript / _voiceRunTranscribe / _voiceRetranscribe / _voiceAutoSyncIfNeeded
- lib/pages_updates.js: _updResizeImageToBlob / _updUploadToR2
- lib/pages_segments.js: exportSegmentsCSV / _processSegmentCSV / _segTargetMark / _segTargetSubLabel
- lib/pages_report.js: _renderAdvancedAnalysis / _renderSegmentsAnalysis / _renderCustomAnalysis / _renderCustomBreakdownCharts

サイドバー追加:
- voice_playlists(テレアポセクション・全員可)
- meeting_schedule(成果セクション・全員可)
- intent_log(管理セクション・PM限定)

キーバインド:
- ⌘K / Ctrl+K → グローバル検索

2026-05-05 07:53〜09:09 セッションで追加した保護資産(v9.18〜v9.28)

関数 / 要素 ファイル位置 役割
mainContent.innerHTML = html 末尾追加 lib/pages_voice.js renderVoiceAnalysis 音声分析ページの DOM 更新(v9.18 退化修正・絶対消さない)
_clHpSearch(id) calllist.js 末尾 HP空欄→Google検索リンク
_recordCallIntent(id) calllist.js 末尾 電話番号クリック→intent_log保存+番号コピー(三点マッチの起点)
_renderDepartmentList(c) / _clAddDepartment / _clRemoveDepartment / _clEditDepField / _clSaveDepField / _recordDepCallIntent calllist.js 末尾 部署別電話番号機能(案E)の心臓部
c.departments[] データ構造 call_list 各レコード 部署別電話番号({id,name,phone,memo}
call_intents キー localStorage + D1 三点マッチ用 intent_log(30日掃除・上限1000件)
_voiceState matchedBy フィールド audioRecordings 各要素 'intent' or 'extension' or 'unknown'
_checkMissedEndReport / _dismissMissedEndReport / _resolveMissedEndReport pages.js 翌日朝の稼働終了報告漏れモーダル
timer_missed_end_report キー localStorage + D1 終了報告漏れ検知データ({date,elapsed,sessions,user,detectedAt}
_timerState の currentUser ガード pages.js リロード時上書き防止(!currentUser_transient:true のダミー返す)
showDailyReportModal(hours, customDate) pages.js customDate で過去日付の日報入力対応
window._statusModalActive フラグ core.js closeModal + calllist.js showCallStatusModal/saveCallStatusModal ステータスモーダル閉じれない化(記載漏れ防止)
ST_REQUIRED_FIELDS の全項目必須化 calllist.js:29 required プロパティ廃止・fields 全部が必須
育成ステータスから email 除外 calllist.js:37 育成は連絡先必要だがメアドは不要(業務ルール)
HelpCircle/Pause/Play SVGアイコン calllist.js _showCallIdleConfirmModal 絵文字廃止(v9.25)

2026-05-04 14:11 デプロイで追加した保護資産(v7・SCALEランク)

関数 / 要素 ファイル位置 役割
_calcSCALERank(stats, price) pages.js (rankNearestPrice 直後) テレアポ日次成果からSCALEランク算出。総合=APIランク。{overall, api, cph, cr, val, tablePrice, hasData} 返却
RANK_CPH_THRESHOLDS / RANK_CR_THRESHOLDS / RANK_ORDER pages.js CPH/通電率の共通閾値マップ・ランク順序配列
_rankFromThresholds(val, thresholds) pages.js 値以上で達成可能な最高ランクを返す内部ヘルパ
_rankBadge(rank, size) pages.js ランクバッジHTML生成(sm/lg/xl 3サイズ・色は RANK_META[rank].color
_renderSCALERankCard(stats, price, opts) pages.js ランク表示メインカード(左:大ランク・中:3指標・右:単価/時給・下:解説)
_renderRankIndicator(label,actual,target,rank,accent) pages.js 各指標カード(API/CPH/通電率)
_statsFromDaily(d) / _currentApoUnitPrice() / _within30Days(date) / _aggregateStats(records) pages.js データ整形ヘルパ群
日次成果ページ ランクカード描画 pages.js renderDailyTeleapo パートナー: 本日 + 直近30日累計 / PM: 全メンバー直近30日累計 / テーブル末列にランクバッジ
日報モーダル ランクカード pages.js showDailyReportModal 数値カード直下に本日のSCALEランク自動判定カード
Slack中断報告 ランク追記 pages.js _slackPostInterimReport rankBlock 自動生成
Slack日報 ランクブロック pages.js slackPostDailyReport rankBlock 自動生成(総合・各指標・推定時給)
分析レポート 期間ランクカード + メンバー別ランク表 lib/pages_report.js renderReportTeleapo (sales tab) stats-grid 直後・順位/総合/API/CPH/通電率/架電/通電/アポ/稼働h/推定時給

2026-05-04 13:58 デプロイで追加した保護資産(v6)

関数 / 要素 ファイル位置 役割
CL_REVENUE 8値(SalesNow完全一致) calllist.js:11 売上規模プルダウン値(1億円未満〜1000億円以上 + 売上不明)
CL_EMPLOYEES 10値(SalesNow完全一致) calllist.js:12 従業員規模プルダウン値(5人未満〜10000人以上 + 従業員数不明)
旧値温存ロジック(inline edit / editCall) calllist.js:281-282, 552-553 既存DBが新選択肢に無い場合 option として残し既存値消失防止
_renderCallTimerGuard() calllist.js 末尾 朝の押し忘れ防止オーバーレイ(パートナー × 未スタート × 架電リストページ)
_startCallIdleWatcher() / _checkCallIdle() calllist.js 末尾 30秒ごと idle チェック・10分超で継続確認モーダル
_showCallIdleConfirmModal() / _callIdleResolve() calllist.js 末尾 「作業継続中ですか?」モーダル / 中断 or 継続
_touchCallActivity() calllist.js 末尾 + 4箇所注入 アクティビティ記録(clInlineSave / saveCallStatusModal / _detailSaveField / qrSelectSt)
window._lastCallActivity calllist.js 末尾 最終アクティビティのタイムスタンプ
startCallTimer ガード解除フック pages.js:1394 タイマー開始時 callTimerGuardOverlay 自動削除 + activity touch
「🎯 架電対象」プリセット calllist.js:124, 214-218 担当未割当 OR 自分担当 × ステータス7種(未/コール/不在/育成/資料/アポ/メール)

2026-05-04 午後で追加した保護資産

関数 / 要素 ファイル位置 役割
CL_READONLY_FIELDS 7項目 calllist.js SalesNow由来セル編集不可(salesNowLink/website/companyDescription/industry/subIndustry/revenueScale/employeeScale)
列順 ステータス→日付→時間帯 calllist.js(callN_*) 各架電回の表示・編集順固定
companyDescription マッピング SALESNOW_HEADER_MAP / calllist.js 企業説明文。HPの右に短縮表示 + 全文モーダル
showCompanyDescriptionModal 大画面 calllist.js max-width 1100px / 全文表示モーダル
「NGリスト」ステータス calllist.js / pages.js / lib/pages_report.js / style.css salesNowLink検知方式・badge-dark / 既存「架電NG」とは別物(手動指定用維持)
_autoMarkCallListAsNG / _autoMarkAllNGOnCallList calllist.js NG新規追加・CSV取込時 call_list を salesNowLink で自動マーク
confirmPurgeCallList / purgeAllCallList calllist.js 全件削除(PM限定・「削除」入力確認・物理削除・auditLog)
showCallDetail 6セクション構成 calllist.js 詳細モーダル(ヘッダ/基本9項目/説明文/履歴5回/ステータス11項目/メタデータ)
_detailEditField / _detailSaveField calllist.js 詳細モーダルの inline 編集(select/date/textarea/text 自動切替)
.modal.xl / .detail-edit style.css 詳細モーダル + 大画面用CSS
AI共創 closeModal フック core.js:1411 modalBox.classList.contains('cocreate') 検出時 _coCreateCloseSession 自動呼び出し(タイマー確実停止)
coCreateAttachFile / coCreateAttachUrl / coCreateInlineFileChosen / coCreateProcessAnswerWithFiles service.js AI共創 添付/URLボタン4関数
<strong>二重エスケープ防御 service.jscoCreateAddMsg / _coCreateRestoreChat HTMLタグを含むテキストは _mdToHtml スキップ
AI共創ヘッダアイコン SCALEロゴ service.js:1168 クリップ風 → SCALEテキストロゴ + グラデ背景
キックオフ requests:[] + addKickoffRequest 4関数 kickoff.js ご依頼セクション「+ タスク追加」(add/save/del/toggle)
fmtDateMD ヘルパー kickoff.js キックオフMTG「5. 今後の進行スケジュール」M/D形式
KO_DEFAULT requests:[] + 議事録 {request_items} 展開 kickoff.js 議事録テンプレ展開

関数 grep(デプロイ前必須)

cd /Users/oogushiyuuki/株式会社SCALE/scale-lead
grep -E "function (showCallStatusModal|saveCallStatusModal|addToKnowledgeHub|_migrateCallListV3|_autoMarkCallListAsNG|_autoMarkAllNGOnCallList|confirmPurgeCallList|purgeAllCallList|showCompanyDescriptionModal|showCallDetail|_detailEditField|_detailSaveField|coCreateAttachFile|coCreateAttachUrl|coCreateInlineFileChosen|coCreateProcessAnswerWithFiles|addKickoffRequest|saveKickoffRequest|delKickoffRequest|toggleKickoffRequest|fmtDateMD|login|loadCallList|saveAppointment|notifySlack)" core.js calllist.js ai.js kickoff.js service.js pages.js
# → 全関数が存在することを確認してからデプロイ
# CL_READONLY_FIELDS / SALESNOW_HEADER_MAP / KO_DEFAULT も grep で存在確認
grep -E "(CL_READONLY_FIELDS|SALESNOW_HEADER_MAP|KO_DEFAULT|stColors)" calllist.js kickoff.js lib/pages_report.js

他セッションが編集する時の必須手順

1. 編集前

  • このノートを読む
  • 「最新基準点に含まれる機能」を確認
  • 現状が基準点と乖離していたら → 復元コマンドでまず戻す

2. 編集中

  • _SCALE_全システム実装ルール の必須ルールを守る
  • Read → Edit のみ(Write 全体書き換え禁止)
  • 関数を消さない(grep で参照確認)
  • 「保護資産」リストの関数・要素を絶対に変えない

3. 編集後

  • tar.gz バックアップ取得(~/scale-lead-backups/scale-lead-$(date +%F-%H%M)-pre-<作業名>.tar.gz
  • デプロイ実行
  • 本番URL https://crm.scale-group.co.jp/base/ の HTTP 200 + 動作確認
  • このノート(最新基準点)の baseline_ts と「当日変更」を更新
  • SCALE_CRM/_README の更新履歴に追記

4. 大きな変更前

  • 必ずラベル付き tar.gz バックアップ
  • 復元できる体制を確保してから編集

関連ノート


基準点 更新履歴

日付 スナップショット 内容
2026-05-04 2026-05-04-1253-post-deploy 初版・午前5デプロイ完了直後(リスト依頼 Slack強化 / PMロック解除 / 架電リスト全面リニューアル / ナレッジバッジ + stColors 正規化)
2026-05-04 2026-05-04-1333-post-deploy 午後5デプロイ完了直後(NGリスト改修 / 架電リスト3件改修 + キックオフMTG / AI共創 5項目修正 / 架電リスト詳細モーダル2件改修)通算10デプロイ
2026-05-04 2026-05-04-1358-post-deploy 11デプロイ完了直後(v6: SalesNow規模プルダウン化 / 架電タイマー強制ガード(朝押し忘れ防止+10分無更新確認)/ フィルタ「🎯 架電対象」追加)
2026-05-04 2026-05-04-1411-post-deploy 12デプロイ完了直後(v7: SCALEランク日次・レポート反映(テレアポのみ)/ 総合=APIランク / 日次成果ページ + 日報モーダル + 分析レポートメンバー別ランク表 / Slack通知強化)
2026-05-04 2026-05-04-1421-post-deploy 13デプロイ完了直後(v8: 架電リスト「📖 使い方」ボタン追加 + scale-lead-manual/call-list.html 14セクション約500行 超詳細リライト・スクショ差込枠9ヶ所)
2026-05-04 2026-05-04-1512-post-deploy 14デプロイ完了直後(変更履歴 D1版・Supabase依存除去 / 企業詳細モーダル可読性改善 文字濃く・大きく)
2026-05-04 2026-05-04-1523-post-deploy 15デプロイ完了直後(v9: AI共創 大規模リニューアル: scale-ai-proxy /webfetch 追加でHP実fetch / 苗字呼び動的置換 / ドラフト先出し原則)

不採用決定リスト(再提案禁止)

一度ユーザーが不採用を決定した案は 次セッションで再提案しない。同じ提案ループを起こさないためのストップリスト。

日付 不採用理由
2026-05-06 新フィルタ案 A〜G(A:ホット候補(1回以上通電+未決着) / B:商談直前(明日〜3日以内) / C:連続失敗(3回以上不通/ブロック/不在連続) / D:検討フェーズ(育成+資料請求) / E:担当未割当のみ / F:本日架電済(自分) / G:電話番号重複) 全案不採用確定。現状の「架電対象(v9.66ロジック:担当者=自分のみ + 今日架電は状態問わず残す + セグメント条件なし)」+ 既存セグメント機能で運用継続が確定。追加フィルタは増やさない方針。