💻 システム開発

SCALE_TERASU_CRM_最新基準点

最終更新 2026年06月25日 / 31_システム開発部/_SCALE_TERASU_CRM_最新基準点.md

SCALE TERASU CRM 最新基準点

2026-06-25 夜 A1真因修正(_nowISO)+更新通知「クリックで更新」復活 (v3.0.329・本番LIVE・解決確認済)

  • A1解決(実機確認済): 「アポ獲得リストにあるのに商談管理に乗らない」(SL SALON/建設業グループ)の真因=_dealSyncFromSourcesの新規作成パスで未定義関数 _nowISO() を呼び ReferenceError→forEach中断(v3.0.319のアポ獲得リスト一本化時に混入)。createdAt:new Date().toISOString() に修正。診断トレース(window._lastDealSync)を仕込み大串のコンソールで一発特定→大串実機でSL SALON/建設業が商談管理に出ることを確認(商談数15→17・受注確度は未設定でFSが設定する正運用)。診断トレースは除去済(過去データ救済のcompany空補完は維持)。
  • 更新通知「クリックで更新」復活+恒久自動化: 新版検知(_checkAppVersion)は index.htmlの core.js?v= の変化を見るが、v3.0.319〜326が ?v=20260624a 固定だったため検知できず「✓最新」のままだった(ハードリロード必須の原因)。GitHub Actionsのデプロイ時に ?v= をcommit SHAへ自動置換(deploy.yml の sed)。毎デプロイで必ず新版検知→橙「クリックで更新」が出る(手動 ?v= 更新が不要に)。本番確認: 全アセット ?v=c2bb9d80(SHA)に統一。
  • ⚠️反省: changelog(manual.js body_markdownはテンプレートリテラル)に バッククォートを入れてリテラルを壊す構文エラーを一度push(即hotfix復旧)。reference_terasu_changelog_no_backtick に再発防止を記録。&&で構文OK時のみpushする運用も徹底。
  • 検証: GitHub Actions成功・本番 v3.0.329・?v=SHA化・診断除去・トップ200・auth200・form401。

2026-06-25 残タスク A/B/D 実装(v3.0.326・本番LIVE・大串実機確認待ち→A1解決済)

大串「A,B,D実装よろしく」— 残タスク一覧(_SCALE_TERASU_CRM_残タスク一覧)のA/B/Dを一括実装+1デプロイ(ラリー最小化):
- A1 紹介アポが商談管理に出ないバグを4経路で防御修正: ①紹介リストでステータスをアポ獲得以降にした時に商談管理へ即連携(_rfSyncDealOnStatus・referrals.js)。従来は商談管理を開いて renderDeals()→_dealSyncFromSources() が走るまで反映されず、テレアポ sc は fetch後に自動同期済なのに 紹介 rf だけ漏れていた=最有力原因。②「紹介された企業」(company)が空だと deals.js の company ゲート(if(!a.company)return)で起票されないため、空のままアポ獲得以降にしたら警告。③アポ獲得リストで rf/sc(ライブソース)を🗑する確認文を「元データは紹介リスト/SCALE CRM・非表示にすると商談管理にも出なくなる」と明示。
- B1 client portal書込もrev加算+CAS化: functions/api/client/data.ts が rev非加算の素upsertで内部CASとrev不整合→lost-update懸念。[key].ts と同じ X-Base-Rev CAS + レガシーでもrev加算に統一。
- B2 監査ログをD1共有化: auditLog/getAuditLogs/_clearAuditLogs を localStorage直叩き→ S/D 経由(te_audit_log)に。事故追跡(誰がいつ消したか)を全端末・全員で。通知は既読が端末別で自然なためローカル維持。
- B4 3-wayマージ改善: _mergeValue でスカラ/id無し配列が後勝ち(last-write-wins)だった→「base比で自分が未変更なら server採用」で他者変更の誤上書きを防止。
- B5 差分ポーリングのsince安全マージン: updated_at > since strict比較+エッジ時計ずれの取りこぼし窓を _pollSince() で3秒前にずらして救済(重複取得は冪等)。
- D1 GitHub Actions checkout@v5: Node20非推奨警告対応(checkout分は解消・wrangler-action@v3はv3が最新メジャーで警告残・実害なし)。
- D2 lens死にコード削除: lib/lens_integration.js(TERASU Lens全廃済・参照ゼロ・既に未ロード)を削除(62→61… lib 62ファイル)。
- D3/D4 ドキュメント: 設計書3点(案件応募管理/ポジション別/棚卸し)を status: superseded 化+誘導バナー、本データ安全性監査ノートにPhase2「当面不要」確定を明記。
- キャッシュバスター ?v=20260625a (index.html/client_index.html)。backup: ~/terasu-backups/terasu_2026-06-25_pre-ABD-batch.tar.gz。commit c50d1cd。
- 検証済(実機): GitHub Actions成功(29秒)・本番HTTP200・主要JS200・lens_integration.js削除(SPAフォールバック)・/api/auth/me=200・/api/form-intake=401・本番 v3.0.326(canonical一致)
- : B3 複数人同時編集の本番実地テスト(2ブラウザ・大串/担当アクション) / C群(機能・要判断)未着手。次=大串の実機確認(紹介アポが商談管理に出るか・坂口さん/SL SALON で確認)。


2026-06-25 GitHub Actions 自動デプロイ移行(インフラ変更・コード機能は v3.0.319 のまま不変)

大串依頼「他システムと同じようにGitHub連携してできるように」— 手動wrangler → GitHub Actions自動デプロイへ移行:
- 正本を Drive → ~/dev/terasu-mgmt へ移動(GitHubリポ scale-group-jp/terasu-crm・CF project名は terasu-mgmt で不変)。旧Drive正本 ~/株式会社SCALE/hp/terasu/ は凍結(_FROZEN_2026-06-25_*.md マーカー設置・削除はせず保険残置)。Drive同期の巻き戻り・「ファイル名 2.js」競合コピー事故を構造的に根絶。
- デプロイ方法(今後はこれ一本): cd ~/dev/terasu-mgmt && git push origin main → GitHub Actions(.github/workflows/deploy.yml)が wrangler pages deploy . --project-name=terasu-mgmt --branch=main を実行し約40秒で本番反映。ビルド不要(素HTML/JS+Pages Functions)。手動wrangler/Drive編集は廃止。社内業務ツールのため preview不要・main push=本番。
- 機密の扱い: wrangler.toml[vars] から平文 AUTH_SECRET/FORM_INTAKE_TOKEN を除去(git公開リポ漏洩防止)。本番はCF project(terasu-mgmt)の環境変数Secretで保持(GitHub Actions経由でも維持)。ローカルdevは .dev.vars.gitignore済)。D1 binding(DB=terasu-crm-prod / SCALE_DB=scale-lead-prod読取)もCF project側保持で維持。
- repo secret CLOUDFLARE_API_TOKEN 登録済み(gh secret set --repo scale-group-jp/terasu-crm --body "$(cat ~/.cf_token)")。account id 9c601cdb4666c746e5cb97fa00187f06 はyml直書き。
- 検証済(実機): GitHub Actions run成功(37秒)・本番 HTTP 200・core.js 152432バイト一致(退化なし)・/api/auth/me=200(AUTH_SECRET+D1 binding維持)・/api/form-intake=401(FORM_INTAKE_TOKEN維持)・アセット ?v=20260624a
- backup: ~/terasu-backups/terasu_2026-06-25_pre-github-migration.tar.gz
- 既知: preview環境にFORM_INTAKE_TOKEN未設定(previewは使わないので実害なし)。Node20 deprecation警告(checkout@v4/wrangler-action@v3がNode24強制実行・将来上げる別タスク)。


2026-06-24 13:35 最新更新(本番 v=20260624a・アプリ表示 v3.0.319)

大串FB(実機確認待ち・本番LIVE)— 商談管理をアポ獲得リスト一本から同期:
- 商談管理(deals)をアポ獲得リスト一本化で同期=マーケ全集客6セクションが自動で乗る(v3.0.319): 大串FB「商談管理がどこと紐付いてるかちゃんと設計して・アポ獲得と連携したい。マーケは色んなセクションからアポ獲得に流してるから、アポ獲得からデータ同期がベスト」。_dealSyncFromSources(deals.js:112-153)を旧3ソース個別同期(linkedin_approved/job_applications/apo_manual)から getAutoAppointments() 一本に作り替え=アポ獲得シートに集約される全6ソース(手動manual/リスト経由job/LinkedIn li/LinkedInライブ lil/SCALE CRMテレアポ sc/紹介rf)が商談管理に自動連携。従来は lil・sc・rf(紹介)が漏れ、紹介でアポ取れたSL SALON等が商談管理に出なかった。重複防止=アポの_key(sourceId)一致 or 会社名一致でFS手動起票dealとも統合し二重化しない。会社名はFSの手動表記を尊重し上書きしない。将来セクション追加時もアポ獲得経由で自動的に商談管理へ乗る(個別追加不要)。戻り値=新規取込件数(toast用)。受注確度は未設定Hで起票しFSが設定する運用は不変。
- (調査メモ) 当初「紹介を商談管理へ直接同期」を実装しかけたが、大串訂正「紹介→アポ獲得リスト自動→FSが手動で商談管理に起票」が正運用と判明し撤回。その後「アポ獲得と連携したい・アポ獲得から同期がベスト」の本要望で上記の一本化に至る。アポ獲得リストへの紹介合流は appointments.js のソース5(_src:'rf')で既に正常動作(SL SALON合流確認済み)。
backup: ~/terasu-backups/terasu_2026-06-24_pre-referral-deal-sync.tar.gz。node --check 全OK・本番(固有URL+custom domain)で getAutoAppointments/sourceType:'apt'=3・旧sourceType:'linkedin'/'apo_manual'=0・/api/data 401・ver=v3.0.319実測。次=大串の実機確認(紹介/テレアポ/LinkedInライブ等のアポが商談管理に出るか)。


2026-06-23 17:45 最新更新(本番 v=20260623q・アプリ表示 v3.0.318)

大串FB(本番LIVE)— タスク一覧の見やすさ+案件列/報酬タブ請求書化:
- タスク管理「タスク一覧」を見やすく改善+案件列を追加(v3.0.317): 優先度バッジ非表示(_tkPrBadge呼出除去・データ保持)/完了チェックボックスを緑塗りトグル化(_tsToggleDone・完了済みもクリックで戻せる)/右端「変更」列削除/「案件」列追加(_tsProjectCell=getProjectsのclientプルダウン手動変更可)/案件フィルタ(projectFilter)。列順=チェック/タスク名/案件/担当者/期日/ステータス/目安時間/リンクの8列(変更-1+案件+1で8列維持・空状態colspan=8整合)。task_mgmt.js。
- 契約・請求「報酬」タブを請求書発行用フォーマットに(v3.0.318): mineHtml(pages.js)を請求書テーブル化=FS商談/PM報酬/制作報酬の分類見出しを15px太字、配下に「摘要/数量(件数)/単価(レート)/金額(税込)」を種別ごと1行。実績0は非表示。レートは税込単価として計算(現状額と不変)。sectionTable/メンバー全体報酬タブ/契約状況タブは不変=「報酬タブ=本人のみ」維持。
backup: ~/terasu-backups/terasu_2026-06-23_pre-ABC.tar.gz本ブロックはDrive↔git同期デーモン競合で何度も巻き戻ったため再固定(2026-06-24)。コード/本番は無影響。


2026-06-23 16:10 最新更新(本番 v=20260623p・アプリ表示 v3.0.316)

大串FB 3件(実機確認待ち・本番LIVE)— 全案件ガント/案件ごと進捗/業務ガイドの見やすさ改修:
- 全案件ガントを「受注後+納期に対する現在地」可視化に改修(v3.0.314): 大串FB「受注後のガントだからリード・提案中いらない/納期がいつに対して今このステータスか分かると良い」。renderGanttPage(progress_gantt.js)=①lead/proposal/no_deal/lost/churn除外で受注後のみ(納期昇順)②左パネルに各案件のステータスバッジ+残日数(あとN日/本日納期/N日超過/納品済)③右に契約日〜納期のバー+今日線(オレンジ実線)+納期線(点線・超過赤)。バー開始 created_at→contracted_at(受注日基準)。
- タスク管理「案件ごとの進捗」をPM・制作1つの時系列に+デザイン刷新(v3.0.315): 大串FB「PMと制作の両方のスケジュールを合わせたやつを表示(今バラバラ)・見づらい・『← 次』いらない」。従来PM群/制作群の別リスト→各イベント(受注/キックオフ日確定/キックオフ完了/納品)見出し+配下にPM/制作タスクを期日(off)順で混在表示する1タイムライン(_pmFlowTimelineHtml)。[PM]/[制作]バッジ+実日付期日+チェック。「← 次」廃止(_pmFlowGroupHtmlの該当も削除・休眠フォールバック)。受注案件シートの進行状況モーダル(_pmFlowModalInner)も同タイムラインに統一(横展開)。
- 業務ガイドをイベント名見出し・PM/制作両方表示に(番号①②・右揃えタイトル廃止)(v3.0.316): 大串FB「①②いらん→その位置に受注(契約締結)やキックオフ日確定を/タイトル右揃えが違和感/PMと制作両方」。_guideBodyHtml=丸番号①②とcard-header(タイトルが右に寄る)を廃止し、イベント名(受注(契約締結)/キックオフ日 確定/キックオフ完了/納品・公開)を左揃え見出しに。PM/制作切替をやめ両方を混在表示(_guideTimelineHtml)。各行[PM]/[制作]バッジ+期日、クリックで詳細・メール文面モーダル。受注〜納品/納品〜切替は維持。

共通土台=_flowEventsAll/_flowEventHead/_flowTgtBadge/_pmFlowTimelineHtml/_guideTimelineHtml(pm_projects.js)。旧 _pmFlowGroupHtml/_pmgReadTable/_guideFromTriggers/_guideDataFor は休眠保持(退化防止)。
backup: ~/terasu-backups/terasu_2026-06-23_pre-flow-timeline.tar.gz。node --check 全OK・本番 v=20260623p 配信・/api/data 401・ver=v3.0.316実測。次=大串の実機確認。


2026-06-23 15:25 最新更新(本番 v=20260623n・アプリ表示 v3.0.313)

大串FB 2件(実機確認待ち・本番LIVE・1デプロイ):
- 契約・請求「報酬」タブを本人のみ表示に修正(v3.0.312): 大串FB「報酬タブはログイン本人の報酬だけ見えるようにしたいのに他メンバー(さき/二宮)の報酬も見えてる。他メンバーはメンバー全体報酬タブでだけ見えるように」。真因=報酬表示の共通関数 sectionTable(pages.js:717)が「その報酬種別で実績のある全メンバーを自動集約」(nameSet=names.concat(comp.rows.filter(...)))する設計で、本人だけ渡しても報酬発生メンバーが混入していた。sectionTableに第4引数 exactNames を追加し true なら nameSet=[...names](渡した名前だけ)。報酬タブ(mine)の呼び出しを sectionTable('',[_ctMe],_allKinds,true) に=本人1行のみ・合計も _myTotal(本人分)。メンバー全体報酬タブ(comp・管理者のみ)は引数なし=従来通り全員自動集約で不変。
- キックオフMTG「依頼中リストをコピー」をお客様送付用の定型文面に(v3.0.313): 大串FB指定の文面。_koPendingCopy(kickoff.js:323)を差し替え=「本日はお打ち合わせのお時間をいただきありがとうございました!/お伺いした内容をもとに◯日までにサイト公開できるように制作を進めてまいります。/■ご用意をお願いしたいもの+(依頼中項目をタブ分けせずフラットな・箇条書きで全部)/初稿は◯日頃にご共有予定です。/引き続きよろしくお願いいたします!」。_koPendingItems()の未記入項目を ・label で羅列。公開日/初稿日(◯)は送信前にPM手入力。旧 _koPendingText(▼タブ分け版)は休眠残置。

backup: ~/terasu-backups/terasu_2026-06-23_pre-comp-mine-fix.tar.gz。node --check 全OK・本番 v=20260623n 配信(固有URL pages.js exactNames/kickoff.js「ご用意をお願いしたいもの」/manual.js v3.0.313)・custom domain n反映・/api/data 401。次=大串の実機確認(報酬タブが本人のみになったか・キックオフ依頼コピーの文面)。


2026-06-23 14:03 最新更新(本番 v=20260623k・アプリ表示 v3.0.307)

大串FB一気通し(実機確認しながら7件・全て本番LIVE):
- タスクまとめモーダルに期日・担当部署の編集追加(v3.0.299): タスククリックのモーダル(_ttTaskModal)に反映先(担当部署=PM/制作プルダウン)+期日(基準日+N日)を追加。保存でtask_triggersのtarget/off更新=Claude修正不要で大串自身がタスクまとめ内で期日・担当を変更可。業務ガイドにも自動反映。
- 契約・請求:タブ順入替+🔒を絵文字→SVGアイコン(v3.0.300): タブ順を 報酬/契約状況/メンバー全体報酬 に。メンバー全体報酬の管理者マーク🔒をlock SVGに。※報酬=自分のみ/メンバー全体=管理者のみ は2026-06-22実装済み(大串が見ていたのは旧版表示)。
- タスク管理:新規タスクに優先度(緊急/高/中/低)+期日カレンダー改善+一覧バッジ(v3.0.301): 新規タスクモーダルにTK_PRIORITIES select・date inputをcolor-scheme:darkで見やすく・一覧に_tkPrBadge
- 修正依頼:優先度4段階化+制作タスク連携で優先度伝達(v3.0.302-303): REV_PRIORITIESを緊急/高/中/低に・_revSyncToTask_revToTaskPriorityにより優先度をタスクへ伝達(新規+更新)。修正依頼の本文(タスク名)/担当/締切/優先度が制作タスクに全項目連携。
- フォーム回答の一覧文字を濃く(v3.0.304): 受信日/回答数 text3→text2、ゴール text2→text。
- タスクまとめ:上部タブの左ズレ修正+反映先/期日列を全カード縦揃え(v3.0.304): 部署タブをcontent枠内へ・各表をtable-layout:fixed+反映先88px/期日128px固定幅。
- 月次レポートを「社内の月次振り返り」自動表示に再設計(v3.0.305): 大串と相談し「まず社内振り返り」決定(AskUserQuestion)。案件プルダウン(全体/各案件)+月送り・開いたら即自動集計(生成ボタン廃止)。全体=その月の契約/納品/解約/運用中MRR/修正依頼数+直近6ヶ月推移、各案件=進捗・修正・MRR。PROJECT_PAGESから除外し案件未選択でも全体表示。旧AI生成(generateMonthlyReport等)は休眠。クライアント向け運用報告は後日。

  • 業務ガイド(PM/制作)を独立NAV→「タスク管理」タブに統合(v3.0.306): 大串FB「業務ガイドは独立セクションでなく各タスク管理セクションのタブの1つでいい」。PM業務ガイド→タスク管理(PM)、制作業務ガイド→タスク管理(制作)の業務ガイドタブに統合。renderGuide本体を_guideBodyHtmlに分離しrenderTaskMgmtのタブで表示。NAVからpm_guide/prod_guide削除(route/renderGuideは休眠・直リンクフォールバック)。seg切替(受注〜納品/納品〜)は_guideRerenderでタブUI保持。
  • タスクまとめ:期日「+-1日」表示を修正(v3.0.307): 大串FB「キックオフMTG準備がプラスマイナス1日になってる」。_ttReadRowsの期日が符号固定で前日(off=-1)が「+-1日」表示→当日/+N日/-N日(モーダル・業務ガイドと統一)。

backup: pre-modal-contract / pre-tt-modal-fulledit / pre-guide-tabs 他。node --check 全OK・本番 v=20260623k 全script配信・業務ガイドタブ(_guideBodyHtml/workflow業務ガイド)・NAV pm_guide/prod_guide 0・期日「当日」表示・各機能curl確認・/api/data 401。ver=v3.0.307実測。次=大串の実機確認。


2026-06-23 12:57 最新更新(本番 v=20260623g・アプリ表示 v3.0.298)

大串FB 3件(実機確認中・全て本番LIVE・1デプロイ):
- 「ドメイン・デプロイ」削除(v3.0.293): 大串FB「使うイメージ湧かない・顧客がドメイン触る・必須じゃないなら削除」。制作グループから infra を除去=core.js の NAV項目(1420)・renderPage R-map(2102)・PROJECT_PAGES(2153) から外す。renderInfra/saveInfra(pages.js 999-1057)は休眠保持(既存データ温存・必要時に復活可)。マニュアルのデプロイ手順から「/infra に登録」案内も除去。
- タスクまとめに部署タブ(全体/PM部署/制作部署)(v3.0.294): 大串FB「PM・制作など担当部署ごとに選んだらそれだけ見える・全体+他2タブで3タブ」。renderTaskTriggers(lib/task_triggers.js)上部にタブ(window._ttDeptTab)。選択した反映先(target=PM/制作)のタスクだけ表示・その部署のタスクが無いイベントカードは非表示・編集中は全体固定(全タスク一括編集を維持)。 大串は「FS部署」と書いたが、TT_TARGETS は ['制作','PM'] の2区分でFS向けタスクは存在しない(FS=受注前の商談担当でタスクまとめ対象外)。文頭の「PM・制作など」と実態に合わせPM/制作タブとした(報告で明示)。FSタスクが別途必要なら要追加指示。
- HP制作フローの番号の青・丸を除去(v3.0.295): 大串FB「1〜13が青文字・色なくして・丸で囲う必要もない」。hp_flow_guide.js の番号バッジ(青グラデ背景+白文字+border-radius:50%)を廃止→番号は控えめなグレー(var(--text3))プレーン表示に。項目の中黒(・)も青(var(--blue))→グレーに統一。番号は右上「Step N/13」でも確認可。
- PM/制作業務ガイドをタスクまとめ連動に=二重管理の根治(v3.0.296): 大串FB「タスクまとめが制作の最新verタスク・制作業務ガイドは合ってる?合わせて/PM業務ガイドもタスクまとめのPM該当と期日が最新だから反映して」。業務ガイド(PM_GUIDE_DEFAULT/PROD_GUIDE_DEFAULT)とタスクまとめ(task_triggers)の二重管理を解消=_guideFromTriggersで業務ガイドをタスクまとめから動的生成(_guideDataForを生成版に・renderGuideはedit=falseの読み取り専用)。フェーズ=イベント、反映先(PM/制作)で出し分け、期日=各基準日(契約日/キックオフ日/納品日)+N日で正確表示(旧:契約+N固定換算を廃止)。メールテンプレは_guideTmplForでタスク名からマッピング。「一括編集/初期に戻す」→「タスクまとめを編集」ボタンに。node検証=制作13タスク(キックオフ基準)・PM4フェーズ(契約/KO/納品基準)が正確生成。旧静的デフォルト/編集系は休眠保持。今後タスクまとめを編集すれば両ガイドが自動追従=「合ってる?」が再発しない。
- タスクまとめ:優先度列を削除(v3.0.297): 大串FB「タスクに優先度はいらない・列ごと削除でいい」。読み取り/編集UIから優先度列を削除(タスク/反映先/期日の3列)。生成タスクは通常(normal)固定。TT_PRIORITIESは休眠保持。
- タスクをクリック→詳細+メール文面モーダル=タスクまとめ・業務ガイド共通(v3.0.298): 大串FB「タスクを押したらモーダルでタスク詳細やメール文面(FMT)を打ち込める・タスクまとめと業務ガイドで全く同じ内容が入るように」。各タスク行クリックで共通モーダル_ttTaskModal(タスクまとめ/PM/制作ガイド)。タスクごとの詳細(detail)・メール文面(mail)をtask_triggersに保存=単一ソースで全画面同一表示。メール文面コピー有・画面外クリックで閉じない(入力消失防止)。業務ガイドの旧テンプレ列はモーダルに集約(_guideFromTriggersにevent付与で行からタスク特定)。

backup: ~/terasu-backups/terasu_2026-06-23_pre-infra-tabs-flow.tar.gz / pre-guide-trigger-sync.tar.gz / pre-tt-priority-remove.tar.gz。node --check 全OK・本番 v=20260623g 全script配信・部署タブ(_ttDeptTab)・_ttTaskModal/_ttTaskRowClick配信・優先度esc(pr)0・_guideFromTriggers配信・/api/data 401。次=大串の実機確認(タスククリックのモーダル・優先度列消えたか・部署タブ・業務ガイドの中身/期日)。


2026-06-23 10:46 最新更新(本番 v=20260623d・アプリ表示 v3.0.292)

残タスク完了: PMダッシュボードの「最終チェック待ち」も品質QAに統一(v3.0.292)。 受注案件シート進行状況一元化(v3.0.291)で残っていた pm_projects 最終チェック待ちリストの _pmpCheckCount(旧 p.checks) を _pmFlowQACount(flow_checks 品質QA) に統一=全画面で品質チェック参照が一本化(旧 p.checks 完全休眠)。本番 v=20260623d 反映確認済み。


2026-06-23 07:55 最新更新(本番 v=20260623c・アプリ表示 v3.0.291)

注記: このファイルは一度 Drive同期競合で 2026-06-16 版に巻き戻り、v3.0.283〜289 の記録が消失していた(2026-06-23 再記録)。本番コードは全てデプロイ済みLIVE(コードが正・crm.terasu.scale-group.co.jp v=20260623a)。 backup は ~/terasu-backups/ に各段階あり。Vault編集は今後AI作業ロック推奨。

6/22夜〜6/23 大串FB一気通し(全て本番LIVE):
- フォーム自動連携(v3.0.283): 受信API functions/api/form-intake.ts(独自トークン FORM_INTAKE_TOKEN・D1 form_responses に rev CAS追記)+「フォーム回答」セクション lib/form_inbox.js(NAV案件進行群・キックオフの上・route form_inbox)+会社名マッチ→switchProject_koApplyFormRowでキックオフ反映。Apps Script onFormSubmit はフォームにコンテナバインド(getActiveForm()・terasu.scale@gmail.com所有)でトリガー登録済・本番疎通確認済。openByドは別アカ権限で不可→バインド必須
- フォーム回答セクション 表示修正(v3.0.284)+編集/回答ボタン(v3.0.286): .page-header/.content構造・行クリックで全回答モーダル・右上にフォーム編集/回答ページ外部リンク。
- タスクまとめ 3→4イベント化(v3.0.285): 受注/キックオフ日確定(新・受注案件シートにキックオフ日入力で発火 kickoff_scheduled)/キックオフ完了/納品。PM・制作タスクを納期2ヶ月版(初稿KO+21・公開KO+60)で全面再設計。キックオフ日変更で未完了タスク期日を自動再計算(_ttRecalcDates)。pm_projects _pmpEditCell でキックオフ日入力→発火・日付変更→再計算。MTG準備は前日(off -1)。
- HP制作フロー(v3.0.285): 最新hp-flow.md準拠・phase分類(制作/著作権等)全削除・最初に「デザイン構想決め(ベースHP・参考HP選定)」追加=全13ステップ。
- キックオフ「制作部署」タブ(v3.0.285): ご依頼の右・ベースHP1つ+参考HP複数(URL+取り入れメモ・blocks)・記入率%除外(noProgress)。
- ダッシュボード数値の真実性(v3.0.286): renderDashboard 集計を getProjects() 全件→deleted_at・pm_excluded 除外に(取り消し案件 YYaaa等が経営数値に残らない)。 設計原則=集計・KPIは生きてるデータだけ(全シート横展開)
- 受注案件シート大改修(v3.0.287): 列再編(PM/制作担当をステータス隣・公開日を残日数右)・1年更新/次アクション/メモ/操作列削除(削除は企業名✕ボタン)・解約チェック+解約最終月(churned/churn_final_month)・継続期間自動計算(納品翌月=1ヶ月)+LTV(初期10万+月額1万×継続月・各行title)・KPIに平均継続期間/平均LTV。
- フォーム表記ゆれ吸収(v3.0.288): _koApplyFormRow をあいまいマッチ(_koNormQ・括弧と中身/空白/コロン除去で正規化照合)。「HP制作の進め方(先方の希望)」→「HP制作の進め方」。sel_textプルダウン横いっぱい。手動入力でチェック自動ON(data-kochk)。チェック色グレー(#94a3b8)統一。
- 進行(ガイド)を最新タスクまとめに同期(v3.0.289): PM_GUIDE_DEFAULT を task_triggers PMタスク(2ヶ月版)に揃える。契約日基準ゆえキックオフ=契約+6日換算。フェーズ=契約直後/キックオフ/制作中/仕上げ〜公開/納品後。
- フォーム回答に「レポート」タブ追加(v3.0.290): フォーム回答セクションを「回答一覧」「レポート」の2タブに(window._friTab)。レポート=総回答数/反映済み/未反映サマリ+主要な選択式項目(HP制作の進め方・目的優先順位・ドメイン有無・サーバー・年齢・性別・BtoB/BtoC・デバイス・時間帯・変更度)を選択肢別に件数/%の横棒バーで集計(_friReportInner/FRI_REPORT_FIELDS)。質問文はあいまいマッチ(_friAnsOf_koNormQ)で表記ゆれ吸収・回答ゼロ項目は非表示。
- 受注案件シートの進行状況をタスクまとめ連動で一元化(v3.0.291): 「チェック」「進行(ガイド)」の2列→「進行状況」1列に統合(PM ●/N・制作 ●/M 表示)。クリックで進行モーダル=タスクまとめ(task_triggers)の全タスクをPM群/制作群に分け・各タスクにチェック+期日+「← 次」ハイライト(_pmFlowTasks/_pmFlowProgress/_pmFlowModal)。チェックは案件ごと flow_checks(key=event|name)にD1保存=リアルタイム同期。源はタスクまとめ=編集すると進行ステップも自動で変わる(旧 PM_GUIDE_DEFAULT/_pmpCheckCountチェック列は休眠保持)。品質チェック26項目は制作「公開前レビュー」配下のサブチェック(qa|)に統合(A案)=_pmFlowQAModal、納品ゲートも _pmFlowQACount 全✓で判定。 PMダッシュボードの「最終チェック待ち」も _pmFlowQACount(品質QA) へ統一完了(v3.0.292)=全画面で品質チェック参照を一本化。


旧名: TERASU 案件管理 (2026-05-04 改名)
SCALE CRM (営業支援) と並存する別システム。混同禁止。
2026-05-21: Supabase → Cloudflare D1+Functions へ全面移行 + 5ポジション切替制を導入。

データフロー設計思想 (2026-06-10 大串と確定・恒久)

アポ獲得リスト = 中継ハブ (編集の場ではない)

[上流: 編集する場所]
 LinkedIn承認リスト / 案件応募リスト / 手動追加・CSV / SCALEテレアポ
   ↓ 自動収集 (常時)
 アポ獲得リスト (中継・束ねるだけ・FS担当の割当のみここで行う)
   ↓ 全項目 常時同期 (会社名/担当者/役職/日付/HP/業界/獲得経路/ヒアリング)
 商談管理 (FSが育てる: 受注確度・次アクション・失注理由・商談メモ ← これらは商談管理が正・上流に戻らない)
   ↓ 受注確度ベースで自動集計
 案件一覧 (リード=確度未設定 / 提案=A〜F / 契約締結=受注Sで自動生成 / 未商談=H / 失注=G・I)
  • 基本情報の修正は上流のシートで行えば全部下流に流れる。商談管理側で基本情報を直しても次のsyncで上流値に戻る (上流が正)
  • FS固有フィールド (受注確度/NA/失注理由/メモ) だけが商談管理の持ち物

2026-06-16 更新 (本番 v=20260616q)

ヘッドライン: データ安全性の本格実装(同時編集でデータが消えない仕組み)
- 大串FB「消える可能性を限りなくゼロにする最高品質の方法を時間かけてでも」を受け、楽観的並行制御(rev版数CAS)+クライアント3-way item-merge をデータ層に汎用実装。同じシートを複数人が同時編集しても lost-update(後の保存が前を上書き)が起きない。全キー自動保護・データモデル不変・退化リスク最小。詳細=_SCALE_TERASU_CRM_データ安全性監査と改修プラン
- 仕組み要約: app_dataにrev列追加→PUTはX-Base-Rev一致時のみ更新・不一致は409→クライアントが自分の差分だけマージ再送。node 9シナリオ+D1 CAS直接検証済。

UI/機能(大串FB・当日分。詳細はアプリ内 更新履歴 / manual.js sec_changelog_1):
- PM業務ガイド再デザイン: 説明文削除・「初期テンプレ戻す」→「一括編集」(全タスクをインライン一括編集)・「契約+N日」を独立「期日」列に・フェーズ番号①②③の青グラデ廃止→CRM標準配色
- 「制作フロー進捗」→「タスク管理」3タブ化(タスク一覧/作業報告=SCALE Base移植/案件ごと進捗)
- キックオフMTGシート 詳細版(8タブ72問)に全面差し替え・サービス概要への自動同期・アコーディオン→タブUI・キックオフ項目に青マーク
- TERASU Lens 全廃(Lens前提の設計を全撤去・NPS基準等に置換)
- NAV整理(案件→制作/案件進行→PM/Knowledge→参考サイト/HP直リンク/チーム管理削除/PM重複解消)
- インラインselect根治(応募リスト/商談/受注案件シートの「選ぶ前に更新が走る」バグ)

2026-06-11 14:21 更新 (/handoff・このセッション 06-08〜06-11 の大量FB改修)

実施内容 (主要・全てdeploy済み・本番 v=20260611c / app v3.0.180):
- 商談管理: 受注確度S〜I体系+確度別専用モーダル (NA必須/構造化メモ/失注理由datalist/日付ピッカー)・期間フィルタ・担当タブ(FSポジション者)・削除確認モーダル・詳細モーダル整理(3セクション・業界31プルダウン)・行縦幅/削除ボタン
- アポ獲得リスト: 中継ハブ化 (4系統: LinkedIn/案件応募/手動CSV/SCALEテレアポ)・リード獲得者+FS担当列・全項目を商談管理へ常時同期 (経路/会社/担当者名含む)・列順=会社先頭・古い順・apo_excluded削除・経路プルダウン(施策管理媒体のみ・ja由来もプルダウン化済 2026-06-11)
- 案件一覧: 全自動化 (リード=アポ/提案中=A〜F/契約締結=受注S自動生成/未商談=H/失注=G・I)・カード=会社名のみ・列見出しタップで引用元
- 案件応募リスト: 8列+受注確度(ラベル併記・deals連携)・応募日/返信なし列・応募チェック→文面選択モーダル(新規テンプレ追加可)・アポチェック→専用モーダル(やり取り履歴共通ブロック付き)・媒体タブ(CS/BM施策のみ・DnD並べ替え=全員共有)・最下行クイック追加・URL→媒体自動判定+企業名補完(/api/url-meta・bot拒否サイトは不可)
- 応募文面テンプレ: 施策名(CS/BM媒体)ごと登録+サブタブ
- 施策管理(旧媒体管理): 優先度5段階・金額形態+詳細自由記述・施策予算ページ新設(1商談単価・累計コスト)
- マーケダッシュボード全面刷新 (目標達成率bar/施策別実績/今月ファネル)・事業数値レポート(編集可能目標+受注前指標+達成bar)
- 契約・請求: タブ2分割 (メンバー報酬=FS/PM/制作部署別・全員¥0表示・明細展開→企業名で商談管理ジャンプ / 契約状況)・FS報酬=商談1回3,000円(商談日ベース)
- NAV: FS=商談管理/商談レポート/受注後の流れ/メールテンプレ(FS)/FSマニュアル・商談パイプライン廃止・共通=契約請求+TERASU HP(旧4項目アーカイブ)・マーケからFS/クラソBMはFSから非表示
- 受注後の流れ新設 (8ステップ+テンプレコピー)・メールテンプレ刷新(ダーク/タブ/モーダル)・最低契約1年化(LTV22万)・メンバー役割統合

重要ルール (このセッションで確立):
- ver報告は必ず実測 (sed+grepでsec_changelog_1のbullet数)。推測+1禁止
- カクつき根治パターン: インライン編集は全体再描画せず該当セルのみ差し替え・編集中ガード・input伝播停止・select blur 200ms遅延・showPickerで即開く
- 同期は「上流が正」: アポ獲得リスト(中継)→商談管理へ全項目後追い同期 (_applyToExisting)

本番URL確認: ✅ crm.terasu.scale-group.co.jp = v=20260611c


2026-06-15 (続) 案件一覧 完全自動化 / キックオフ案件依頼書 / PMガイド個社化【LIVE・v=20260615i】

同日、キックオフシート実装後の大串FBで3機能を追加実装(全てLIVE・本番確認済み)。

A. 案件一覧を完全自動化(手動プルダウン廃止→受注案件シート連動)【v=20260615f】

大串FB「契約締結以降は案件一覧のプルダウンで選ぶ形式だが、提案中などと同じ自動表示にして。受注案件シートのステータスで案件一覧の場所が変わる/手動でなく自動で変わる設計に」。
- pages.js renderProjects: 受注後カード(契約締結〜運用中/解約)の手動ステータスプルダウンを廃止→読み取り専用 _projAutoCard(会社名+PM/納期・クリックで _openProjInPmSheet=受注案件シートを企業名フィルタで開く)。提案中など受注前カード(_projDealCard)と同じ自動表示に統一
- ステータスは project.status 単一ソース→受注案件シート(pm_projects)で変更すると案件一覧の列が自動移動(再描画/BroadcastChannel同期)
- 温存(退化注意): _projectKanbanCard(ドロップダウン版)はFS画面 pages.js:1284 で別途使用のため触らず・案件一覧の呼び出し1箇所のみ差替 / updateProjectStatus温存 / 受注案件シートPM_PROJ_TABSは解約含む全status設定可。PROJECT_STAGE_SOURCES(ⓘ)の「案件一覧でカードを移動」→「受注案件シートで変更」に修正+最終チェック/運用中を追記

B. キックオフシート: 印刷/PDF廃止→「案件依頼書をコピー」【v=20260615g/h】

大串FB「印刷/PDFいらない。代わりに案件依頼書生成=キックオフの中身をテキストで見やすくまとめ、制作担当に送れる状態でコピー。PM→制作担当に貼る想定」。
- kickoff.js: _koPrint削除→_koGenBrief/_koBriefText/_koCopyText/_koCopyFallback 追加。記入済み項目のみ整形(【タブ】見出し+「・項目:値」・複数行はインデント・空欄省略)→navigator.clipboard(execCommandフォールバック)でコピー+プレビュー/再コピーモーダル。ボタン=btn-primary「案件依頼書をコピー」。AI不使用

C. PM業務ガイドを個社ごとの進行チェックリスト化+契約日ベース期日自動【v=20260615i】

大串FB「PM業務ガイドの内容を個社ごとにやって進捗チェック/契約日を元に全部期日が入って管理していけるとベスト」。
- lib/pm_projects.js: PM_GUIDE_DEFAULT の各タスクに off(契約日からの日数)を付与(契約直後0〜納品公開30日・運用中は随時=off無し)。新ヘルパー _pmAddDays/_pmDaysFromToday/_pmMD/_pmGuideKey/_pmGuideChecks/_pmGuideDue/_pmGuideCount/_pmGuideNextDue
- 個社モーダル _pmGuideRunModal(pid): 6フェーズ×タスクをチェック+各タスクに期日(契約日+off・超過赤/3日以内オレンジ/完了取り消し線)+テンプレコピー+進捗バー。チェックは p.guide_checks(案件ごと)・_pmGuideCheckToggle
- 受注案件シートに「進行(ガイド)」列新設(完了数+次の期日・クリックでモーダル)。PMダッシュボードに「PMタスク 期日アラート(契約日基準・全案件横断・超過/3日以内を期日順)」カード新設→クリックで該当案件の進行へ。PM業務ガイドのタスク編集に「期日(契約+N日)」欄追加(PMが調整可・空=随時)
- 退化注意: 既存の納品チェックリスト(p.checks)とは別キー(p.guide_checks)で共存。日付計算はローカルTZ(toISOStringのUTCずれ回避)

backup: terasu_2026-06-15_pre-projlist-auto.tar.gz / terasu_2026-06-15_pre-pmguide-perproject.tar.gz / changelog(manual.js)全追記済
本番確認: ✅ v=20260615i / TOP200・pm_projects.js 200・_pmGuideRunModal/_pmGuideDue/進行列/PMタスク期日アラート present・案件依頼書ボタン present・案件一覧=_projAutoCard。デプロイ: f→g→h→i


2026-06-15 キックオフMTGシート 全面再設計→実装完了【LIVE・v=20260615d→i】

大串FB「キックオフMTGの機能、思っていたのと違うので全部なくして1から作り直したい。まず削除→設計→承認→実装の順で」。前セッション(06-13・バグって停止)が「キックオフ項目AI生成機能」をバックアップ(ksaigen/ksaifill)だけ取って実装ゼロで止まっていた件の仕切り直し。

削除完了(デプロイ済み・本番 v=20260615a・HTTP200・画面側kickoff残存0確認):
- kickoff.js 本体(648行=旧3タブ[準備/MTG中/まとめ]・アジェンダタイマー・議事録AIポリッシュ・決定事項抽出→概要シート反映・Slack要約) を削除
- core.js 3箇所除去: NAV項目「キックオフMTG」(案件グループ) / renderPage R-map の kickoff:renderKickoff / PROJECT_PAGES の 'kickoff'
- index.html / client_index.html: kickoff.js script参照を削除 + 全script ?v= を 20260613b→20260615a bump
- 温存(消すと退化): TERASU_STATUS_OPTIONS の {v:'kickoff'}(案件の進行ステータス・pm_projects PM_PROJ_FLOW / progress_gantt が依存)。today_todo / production_kit の proj_*_kickoff 参照は null/空ガードで無害
- backup: ~/terasu-backups/terasu_2026-06-15_pre-kickoff-remove.tar.gz

旧データ削除(完了=該当データ無し): 大串「コードもデータも全削除」承認済みだったが、本番D1(terasu-crm-prod・app_data テーブル)を調査した結果 key LIKE '%kickoff%' =0件・proj_* スコープ行も0件(旧キックオフ機能のデータは元々D1へ未永続だった)。削除対象が無いため purge 不要。なお新シートは同一キー proj_<id>_kickoff を再利用するが、読込は既知フィールドのみ取込む clean-merge(旧構造の残骸は不可視)+初回保存でブロブ全体を上書きするため、仮に旧データが残っても無害な設計。

実装内容(LIVE)= 8タブのキックオフシート(サービス概要シート型・AI不使用)= 新規 kickoff.js:
- 事前に作り込んだヒアリング項目を当日埋めながら進行する純粋な入力シート(サービス概要シートと同じUI: タブ分類→項目入力→自動保存→一括編集)。AIは使わない(大串明示・当初出したAI生成3案は全却下)
- 8タブ: ①基本情報 ②ターゲット・ペルソナ ③コンセプト・訴求 ④デザイン方向性 ⑤サイト構成・機能 ⑥コンテンツ・素材 ⑦スケジュール・体制 ⑧その他・確認(各6-12項目・全項目は作業ログ 2026-06-15 に記載)
- タブ別+全体の記入率バーで進行可視化
- 追加要件3つ(承認時の大串指示): ①制作部署(prod)・PM部署(pm)でも閲覧可(POSITION_SECTIONS追加) ②案件切替プルダウンをシート上部に ③案件ごと保存(PD/PS = proj_<id>_kickoff)
- 実装手本: overview.js(renderProjectSheet) + lib/svc_shared_*.js + lib/scale_service.js のUI/保存パターン流用。過去FB事前適用(showPicker即開/select blur 200ms/伝播停止/編集中ガード/bg2/白文字/絵文字なし/画面外クリックで入力消さない)

実装の要点(退化対策込み):
- 新規 kickoff.js(約300行・データ駆動 KO_TABS 定義で render/保存/記入率を一元化=overview.js の巨大switchより簡潔)。データ層 _koGet/PS('kickoff') = proj_<id>_kickoff
- UI = 真のタブ(svc_shared_render.js 型・1パネルずつ表示)。記入率は per-tab badge + overall bar。基本情報3項目は _koGet 内で案件マスタから seed(表示・%・差分更新を一致)
- 自動保存はフォーカス退避時(onchange)=全体再描画しない。記入率だけ querySelector で差分更新(入力欄を壊さない=カクつき/入力消失ゼロ)。PS→S→_syncToD1 は300msデバウンス済で連打安全
- 案件切替プルダウンをシート上部に+空状態にも案件ピッカー(既存 switchProject へフォワード)。NAVは常時表示の「案件進行(pmproj)」グループ(受注案件シートの隣)に配置=事業本部(hq)/PM(pm)/制作(prod)で表示(POSITION_SECTIONS変更不要・pmprojが元々3者に含まれる)。案件未選択でも開けるよう PROJECT_PAGES からは除外(renderKickoff が空状態を自前表示し案件選択を促す)
- 配置修正(同日・大串FB「見えないけど、どこにある?」): 初回は project グループ(案件を1件選んで初めて出る群)に入れてしまい、案件0件=群ごと非表示で見えなかった。要件の「シート内で案件切替」=単独起動が正なので projectpmproj(常時表示)へ移設PROJECT_PAGES除外で恒久解決
- 過去FB事前適用: 絵文字なし(ic() Lucide)・白文字統一・スコープ<style>で自己完結(pm_projects 踏襲)・AI完全不使用(callClaude/aiFill=0を本番で確認)。※当初あった印刷/PDFは同日に「案件依頼書をコピー」へ置換(上の続セクションB)
- core.js 配線: NAV_ITEMS.pmproj(案件進行)に {id:'kickoff',label:'キックオフMTG'}(受注案件シート直下・常時表示) / route kickoff:renderKickoff / PROJECT_PAGES には入れない(案件未選択でも開く)。index.html・client_index.html に kickoff.js script追加+全?v=を 20260615a→20260615d bump(b=seed整合性fix・c→d=配置をproject群→pmprojへ移設)
- backup: ~/terasu-backups/terasu_2026-06-15_pre-kickoff-rebuild.tar.gz / changelog: manual.js sec_changelog_1 に追記済
- 本番確認: ✅ crm.terasu.scale-group.co.jp = v=20260615d / TOP 200・kickoff.js 200・8タブkey全present・renderKickoff/_koOnChange/_koProjSwitch present・AI関連0・NAV配置=案件進行(pmproj)に kickoff present。デプロイ履歴: 96932695(c)→801678be(d)


2026-06-13 PM新実装の過去FB監査→違反7件修正【LIVE・v=20260613b / v3.0.183】

大串依頼「これまでCRM開発で受けたFBが新実装にも反映されているかチェックして」→ 全過去FBと lib/pm_projects.js を突合せ監査。

反映済み確認 (11件): showPicker即開 / select blur 200ms / 伝播停止 / 編集中ガード / モーダル背景bg2統一 / 文字白統一 / 絵文字なし / 設定=共通データ / native confirm不使用 / ver実測・changelog・bump・backup / form該当なし

違反発見→修正 (7件):
1. インライン編集確定が全体再描画 (カクつき退化) → status以外は行単位差し替え (tr.outerHTML=_pmpRow)
2. 新モーダル4つ (チェックリスト/項目編集/フォロー/ガイド編集) が画面外クリック即閉じ=入力消失 → _modalNoBackdropClose=true 横展開 (06-12 確度モーダルFB)
3. チェックリストモーダル内の説明文 → 削除 (05-26「補足文章はシステム上に全くいらない」)
4. フォロー記録削除が確認なし → ✕→「削除する」赤ボタン2タップ方式 (2.5秒で復帰・モーダル1枚制でも動く)
5. 受注案件シート企業名列が非sticky → ページ内style+pmp-sticky-name (deals同型)
6. フェーズ別バーがグラデ → 単色#2563eb (05-25 グラデ廃止FB)
7. card-title の独自プレフィックス除去 + チェック/フォロー操作を _pmpRefreshRow でシート行へ即反映

backup: ~/terasu-backups/terasu_2026-06-13_pre-fbaudit.tar.gz
本番URL確認: ✅ v=20260613b / 修正コード12ヒット / changelog bullets=183 実測


2026-06-13 PM部署 大改修【LIVE・v=20260613a / v3.0.182】

大串FB「PM部署の機能、大幅にアップデートしたい。クロスセル不要。PMの役割=顧客満足度を最大化させてLTVを最大化させること。期日をしっかり守りつつサイト制作担当の最終チェックをする前提でシステム構築。商談Sだけまとめたシート (S以降はPM/制作がステータスいじる)・PMやるべきことまとめ・納品チェックリスト欲しい」→ 機能企画6本を提案し全部OK。

新規 lib/pm_projects.js (約530行・全部入り):
1. 受注案件シート (pm_projects / renderPmProjects): 商談管理 受注S → _projSyncFromDeals (既存) で自動流入。タブ=全件/契約締結/キックオフ/制作中/最終チェック/納品済み/運用中/解約。列=企業名(クリックで案件WSへ)/ステータス/契約日/キックオフ日(新 kickoff_at)/納品予定日(deadline)/残日数(超過=赤・3日以内=オレンジ)/PM担当(pm)/制作担当(worker)/チェックn/N/公開日(live_at)/1年更新残日数/次アクション(新 next_action)/メモ(新 pm_memo)+フォロー。インライン編集=deals.js同型 (セル単位差替・編集中ガード・select blur 200ms)
2. 納品チェックリスト (_pmChecklistModal): 2段階 = 制作セルフ11項目 + PM最終16項目 (既存workflow品質ゲートを統合再編)。p.checks={項目テキスト:{c,by,at}} で誰がいつ✓したか記録。ステータスを納品済みに変更する時 PM最終チェック全✓でないとブロック (toast+モーダル自動表示)。final_check進行時は制作チェック未完で警告のみ。項目テンプレ=pm_checklist_tpl (1行1項目textareaで編集可・文言一致でチェック状態引継)
3. PM業務ガイド (pm_guide / renderPmGuide): フェーズ6個 (契約直後/キックオフ/制作中/最終チェック/納品公開/運用中)。各タスクにメールテンプレコピー (mail_templates連携)。✎編集/+追加/削除/初期テンプレに戻す。データ=pm_guide_v1
4. PMダッシュボード (pm_dashboard / renderPmDashboard): KPI6枚 (進行中/納期超過/3日以内/最終チェック待ち/運用中・MRR/平均継続月数) + リスト4つ (期日アラート/最終チェック待ち/1年更新60日以内/今月納品) + フェーズ別件数バー。行クリックで受注案件シートへ (企業名検索状態)
5. 運用中フォロー (_pmFollowModal): p.follow_logs=[{d,note,by}]。公開日起点の1年更新残日数表示。MRR=運用中×¥10,000
6. クロスセル削除: NAV pm グループから除去 (renderCrossSellHub等コードは残置・退化なし)

core.js 変更: TERASU_STATUS_OPTIONS に final_check(最終チェック・badge-amber) + live(運用中・badge-cyan) 追加 (案件一覧カンバン列も自動拡張・kanban-board は10列対応済で安全) / NAV pm=PMダッシュボード+PM業務ガイド・新グループ pmproj=受注案件シート / POSITION_SECTIONS: pm+prod+hq に pmproj (制作も操作可) / POSITION_LANDING: pm→pm_dashboard・prod→pm_projects / route 3本追加

退化注意: projects の新フィールド (kickoff_at/next_action/pm_memo/checks/follow_logs) は _projSyncFromDeals が既存行スキップなので上書きされない。delivered→live_at 自動セットの既存ロジック (core.js:2157/pages.js:413) はそのまま生きている。
backup: ~/terasu-backups/terasu_2026-06-13_pre-pmupdate.tar.gz

本番URL確認: ✅ crm.terasu.scale-group.co.jp = v=20260613a / pm_projects.js 新関数22ヒット / core.js 変更9ヒット / changelog bullets=182 実測


2026-06-12 確度モーダル 入力消失対策【LIVE・v=20260612a / v3.0.181】

大串FB「書き終わりくらいで全部消えた。間違ってリロードか画面の左とか押しちゃったからかもだけど、消えるのヤバい。画面変わっても続きから入力できるとかは最低限欲しい」(確度Cモーダルで入力全消失)。

真因: index.html の modalOverlay が onclick=closeModal()画面外クリック即閉じ+入力破棄。リロードでも当然消える構造だった。

3層防御を実装 (lib/deals.js / core.js / index.html):
1. 入力ドラフト自動保存+復元 (核心): モーダル内の input/change のたびに localStorage te_deal_prob_draft へ自動保存 (_probDraftSnap・カレンダー _dpPick にもフック)。同じ商談+確度でモーダルを開くと初期値として復元+「入力途中の内容を復元しました」toast。保存成功で自動削除 (_probDraftClear)・24時間で期限切れ・structMemo がテンプレのままなら「入力あり」とみなさない
2. 画面外クリック防御: 確度モーダル表示中は window._modalNoBackdropClose=true で overlay クリック無効 (閉じるのは ✕/あとで/保存のみ)。closeModal でフラグ自動リセット (他モーダルに影響なし・汎用フラグなので他の重要モーダルでも使い回し可)。✕/あとで で閉じた時は _probDraftDismiss が「入力内容を一時保存しました」toast
3. リロード防御: beforeunload で最終スナップ+入力中ならブラウザ標準の確認ダイアログ。それでもリロードしたら 商談管理を開いた時に入力途中モーダルを自動再開 (renderDeals 末尾・ロード後1回だけ _probDraftAutoOpened)

退化注意: _probDraftCtx が文脈の单一情報源。modalBox への input リスナーは名前付き関数 _probDraftSnap なので重複登録されない。ドラフトは単一スロット (直近1件・別商談で入力すると上書き)。
backup: ~/terasu-backups/terasu_2026-06-12_pre-probdraft.tar.gz

本番URL確認: ✅ crm.terasu.scale-group.co.jp = v=20260612a / deals.js 新関数16ヒット / changelog bullets=181 実測


2026-06-11 サービス概要を SCALE CRM と同一見た目に刷新【LIVE・v2】

大串FB「見栄えが全然違う。SCALE CRM と見た目も中身も全く一緒に。説明文言(バナー/再読込/保存等)いらない」。

  • v1(独自ジェネリックフォーム)を廃止し、SCALE CRM のサービス概要シート実装3ファイルをコピー搭載: lib/svc_shared_helpers.js / svc_shared_persona.js / svc_shared_render.js(= scale-lead/lib/service_helpers/persona/render の 2026-06-11版・改変は PD(→_svcPD( / PS(→_svcPS( の置換のみ。terasu 自前の PD/PS(core.js 案件スコープ)との衝突回避)
  • lib/scale_service.js = データ層シム: _svcPD('service')→window._ssvData(GET /api/scale-service) / _svcPS('service')→800msデバウンスで PUT(→SCALE CRM 側30秒ポーリングに自動反映=双方向は従来どおり)。service_snapshots は terasu 自前D1(scale_svc_snapshots)。scripts等の連携参照は空。
  • AI共創/修正履歴ボタンは同一見た目のまま搭載・押すと「SCALE CRM側で利用可」案内(エンジン本体 service_cocreate*.js は持ち込まない)
  • SCALE CRM 側で service_helpers/persona/render を更新したら、再コピー+同置換で追従する(svc_shared_* ファイル先頭に手順コメント有)
  • cache-bust ?v=20260611b。検証=本番200・4ファイル配信・renderService/_svcPD 置換確認。backup: terasu-mgmt-2026-06-11-*-pre-svc-shared.tar.gz

2026-06-10 SCALE CRM テレアポ連携【LIVE】

大串FB「SCALE CRM の TERASU案件で取れたアポを TERASU CRM のアポ獲得リストにリアルタイム同期したい(架電リストは SCALE CRM の完成度が高いのでそのまま)」。

設計 = コピー同期ではなくライブビュー方式(SCALE CRM 側は無変更):
- wrangler.toml: scale-lead-prod D1 (30c62b40-…) を SCALE_DB として読取バインド追加(SELECT のみ・書込禁止)
- functions/api/scale-apo.ts(新規): te_session 認証必須。SCALE CRM の app_data(projects) から client名 /terasu/i の案件を動的解決(IDハードコード無し・現在は momb5hxfan3je「TERASU」)→ call_rows から call1〜5Status=アポ獲得 の行を抽出(deleted_at 除外・メール日程調整は含めない=SCALE CRM v11.5.36 準拠)
- lib/appointments.js: アポ獲得リストに 4系統目 sc_<callId>(経路=テレアポ・固定バッジ) を追加。_scaleApoRefresh(30秒スロットル+60秒ポーリング・データ変化時のみ再描画)。編集は li/ja 同様 apt_meta オーバーライド・行削除は apo_excluded・受注確度(deals連携)/商談メタ編集モーダルもそのまま効く。商談メタ編集モーダルに「SCALE CRM テレアポ獲得情報」読取ボックス(ナレッジ/メモ/メアド/電話/商談開始時刻/商談URL)
- cache-bust 60タグ ?v=20260610e

検証: 構文OK / preview→大串OK→prod反映(2026-06-10 11:00頃)/ 本番 TOP 200・/api/scale-apo 未ログイン401(ゲート正常)・cache-bust 20260610e 配信確認 / 表示=3件(中越計算センター・みさきアドバイザーズ・土生会計事務所)
フロー: preview(https://preview.terasu-mgmt.pages.dev)→ 大串「本番サイトに公開していいよ」→ prod(preview必須ルール遵守)

同日 fix2【LIVE・cache-bust 20260610f】+ デプロイルール恒久変更

大串FB①「獲得経路がプルダウンのテレアポにして欲しいのに、なんか違う感じで入ってる」②「アポ獲得シートに反映したものは自動で商談管理に入るはずなのに入ってない」。

  • ①根治: sc行の _channelFixed:true(固定バッジ)→ false(他行と同じプルダウン・既定=テレアポ・apt_metaで変更可)。renderAppointments の channelCell に「現在値が施策管理の媒体一覧に無ければ先頭補完」を追加(テレアポが媒体未登録でも選択状態を保つ)
  • ②根治: 商談管理の自動取込 _dealSyncFromSources(lib/deals.js)の対象が linkedin/job_apply/apo_manual の3系統のみでテレアポ系統が未登録だった。4系統目 _dealSyncFromScaleApo() を新設: sourceType='scale_teleapo'+sourceId=callId で重複防止・会社名一致スキップ・apt_meta編集値を既存商談へ反映・route=テレアポ/contactMethod=電話/salesSheet=salesNowLink(API payload に salesNowLink 追加)。発火= deals ページ表示時 + _scaleApoRefresh 取得成功時(appointments/deals どちらを開いても入る・冪等)
  • ** デプロイルール恒久変更(2026-06-10 大串FB「プレビューで公開挟まなくて全部今後も直接デプロイでいいよ」)**: TERASU CRM は preview 不要・直接 prod OK に。CLAUDE_global.md(除外システム表)+ memory feedback_preview_deploy_required.md 更新済。tar.gz backup + node --check + 本番URL確認は従来どおり必須
  • backup: ~/terasu-backups/terasu-mgmt-2026-06-10-1119-pre-scapo-fix2.tar.gz
    backup: ~/terasu-backups/terasu-mgmt-2026-06-10-1056-pre-scale-apo-sync.tar.gz
    ** スキーマ結合注意**: scale-lead の call_rows / app_data(projects) スキーマ変更時はこの API の追従が必要(SCALE CRM 基準点にも相互参照記載済)。

基本情報

項目
表示名 TERASU CRM
本番URL https://crm.terasu.scale-group.co.jp/
旧URL (互換) https://terasu-mgmt.pages.dev/
Cloudflare Pages プロジェクト名 terasu-mgmt (リネーム不可・据え置き)
ローカルパス /Users/oogushiyuuki/株式会社SCALE/hp/terasu/
技術スタック Vanilla JS / HTML / Cloudflare Pages + Functions / Cloudflare D1
D1データベース terasu-crm-prod (id a4562a6a-897a-4c62-9d98-89c263012f84 / APAC)
データAPI 同一オリジン /api/data(D1 key-value) ・ /api/auth/*(サーバ認証) ・ /api/migrate(一度きり)
AIプロキシ https://scale-ai-proxy.y-ogushi.workers.dev
認証 サーバ認証 (/api/auth/login ・ PBKDF2ハッシュ + HMAC署名cookie te_session)。client doLogin/api/auth/login を一次認証 → サーバ不達(503/網絡断)時のみローカル平文照合にフォールバック。DATA_AUTH_MODE=enforce(データAPIゲート有効・/api/data はセッションcookie必須・401検知で再ログイン誘導)
localStorage prefix te_
BroadcastChannel terasu_sync
最新version v=20260526o (2026-05-26 モーダルレイアウト+FS兼任拡張・28回目) (index.html ?v= 全script共通) / アプリ表示バージョン: v3.0.113 (changelog 累積bullet数で自動増分)

2026-05-21: Supabase は完全廃止。Supabaseプロジェクト scale-base (pelhuxlntrtejgwhcvzo) は削除済。TERASU CRM の正本は D1 のみ。Supabase関連コードを復活させないこと。


SCALE CRM との混同禁止

名称 URL 用途 ローカル
SCALE CRM crm.scale-group.co.jp 営業・商談管理 /Users/oogushiyuuki/株式会社SCALE/scale-lead/
TERASU CRM crm.terasu.scale-group.co.jp HP制作 案件管理 /Users/oogushiyuuki/株式会社SCALE/hp/terasu/

最新スタンプ

  • 最新version: v=20260605a (2026-06-05 案件応募管理 新規実装) / アプリ表示: v3.0.x
  • 最新deploy: 2026-06-05 — 案件応募管理 新規実装 (大串FB「ビジネスマッチング・クラウドソーシングで案件応募→アポの管理・もはや一番使うかも・承認リストみたいに効率/分析考慮した完璧なシステム」): lib/job_apply.js 新規 (約650行)。マーケティング内に「案件応募管理」グループ4項目 ①案件応募リスト (1行=1案件・8ステータス [応募候補/応募済/返信あり/やり取り中/アポ獲得/受注/失注/対象外]・チェック自動連動 [_jaInferStatus 最新日付優先]・名前列sticky・列カスタム・フィルタ [ステータス/プラットフォーム/担当/締切間近/検索]・KPI [総案件/応募済/返信率/アポ率/受注/受注金額累計]・締切3日以内 赤強調) ②応募プラットフォーム (サイト動的登録・月額費用・検索URL・応募/受注件数表示) ③応募文面テンプレ (応募専用・応募文面 ver自動採番・5種類タブ) ④応募分析レポート (応募ファネル + プラットフォーム別ROI [受注金額÷月額費用] + 文面ver別効率 + 担当者別実績) ⑤受注時 金額入力モーダル (_jaWonModal) ⑥やり取り履歴 (発注者とのメッセージ sent/received)。データキー job_applications (Chunk Layer対象に追加) / job_apply_platforms / job_apply_templates。承認リストの効率化資産 (チェック連動/列カスタム/keepScroll/Chunk Layer/Data Safety) を全流用。設計書: _SCALE_TERASU_CRM_案件応募管理_設計書
  • 最新deploy (前): 2026-05-26 09:25 — 対象判定モーダル 大串FB 3件: ①HP URL / SalesNow URL 入力欄を FS担当の上に移動 (情報確認系→FS割当→オファー文面 の流れ) ②右上の HP/SalesNow ボタン削除 (URL入力欄のラベル内ボタンに統合済みで重複・autoFillBar も成功時の緑バーのみに) ③_laFsMembers 拡張: FS役職 OR TimeRex URL持ち の両方を候補に (大串の兼任モード対応・役職FSじゃなくても TimeRex URL 登録済なら商談担当者プルダウンに出る) → 影響: アポ獲得モーダルの商談担当者 / 承認リスト列カスタム select-fs-member kind
  • 最新deploy (前): 2026-05-26 09:18 — 承認リスト 大串FB 4件 + ポリシー: ①対象判定モーダルの「新フロー:〜」説明文ブロック完全削除 (大串方針「補足文章はシステム上に全くいらない」全モーダル適用ポリシー) ②モーダル内に HP URL / SalesNow URL 入力欄追加 (大業界の上・ラベル内に検索ボタン併設・検索で出た URL を貼り付け保存 → 2回目以降は直リンク) ③_loSave で hp/salesNowLink 保存追加 ④HP/SalesNow ボタン「反映されない」問題対策: ポップアップブロック検知 + clipboard textarea fallback + プロトコル自動補完 ⑤承認リスト 名前列 sticky 化 (右スクロールでも左固定・チェック(0)/#(30)/名前(66) すべて sticky・thead+tbody両方・box-shadow で境界表示)
  • 最新deploy (前): 2026-05-26 09:06 — 承認リスト forceCols 強制矯正 (大串FB「既存カスタム保存値が古くて反映されてない」): ①status を「承認日の右」に強制矯正 (anchor:'approvedDate' pos:'after' moveExisting:true) ②targetCheck に moveExisting:true 追加 (対象外の左に強制移動) ③forceCols ロジックに remove:true 処理追加: 指定フィールドを ord から強制削除 ④industryMajor / industryMid / offerTemplate を一覧から強制削除 (showLADetail とオファーモーダルでは引き続き編集可能) → 大串の画面で見えていた古い列順が次回ロード時に自動矯正される
  • 最新deploy (前): 2026-05-26 09:00 — 承認リスト 新フロー「対象チェック → 情報入力 → 対象外/オファー 営業判断」 (大串FB「オファーモーダルを対象チェックの後に移動」): ①新フィールド targetChecked + 新列「対象チェック」(kind=checkbox-target・対象外の左) ②_laToggleCheck に 'target' タイプ追加: 対象チェックON で showLAOfferModal を起動 (情報入力フェーズ) ③オファーチェック時のモーダル起動を廃止 (旧 _laToggleCheck の 'offer' から openOfferModal=true 削除) + status select 経由も廃止 ④showLAOfferModal のタイトル「オファー入力」→「対象判定 入力」 + 説明文を新フロー案内に変更 ⑤オファー文面ver 必須バリデーション緩和 (対象判定段階では未選択可・オファー段階で後設定) ⑥ステータス自動連動は変更なし (targetChecked は status に影響しない)
  • 最新deploy (前): 2026-05-26 08:48 — 承認リスト 大串FB 4件: ①一覧から大業界/中業界 除外 (デフォルト列に含めない・拡張列扱い・showLADetail では表示維持) ②名前を会社の左に強制矯正 (forceCols に moveExisting:true 追加・既存ユーザーのカスタム保存値も自動移動) ③page-desc の「業界補完 N件 (X%) / 未補完 M件 ↗」KPI削除 (シンプル化・関数は残置 SalesNow一括補完ボタン経由で機能維持) ④オファー/アポ獲得モーダルに「HP を見る ↗」or「HP を検索 ↗」ボタン追加 (SalesNow検索ボタンの隣) — _laHpLinkOrSearch(company, hp) 共通ヘルパー新設・HP登録済→そのHP新タブ open / 未登録→Google検索 新タブ open・ボタンラベルも動的切替
  • 最新deploy (前): 2026-05-26 08:38 — 承認リスト オファー/アポ獲得モーダル 大串FB 2件: ①SalesNow 自動入力 失敗時の灰色 Info バーから説明テキスト削除 → 「SalesNowで調べる ↗」ボタンだけ右寄せ表示 (成功時の緑バーは維持) ②売上規模 select 追加 (オファーモーダル・中業界の下) — LI_REVENUE_SCALES 8択 (1億円未満/1〜3億/3〜10億/10〜50億/50〜300億/300〜1000億/1000億以上/売上不明・SalesNow区分と統一)・_loSave で revenueScale 保存・_laAutoFillFromSalesnow の fieldMap に revenueScale 追加 → SalesNow マッチング時に自動補完される
  • 最新deploy (前): 2026-05-26 08:30 — 承認リスト SalesNow検索方式を 「会社名コピー + Platform TOP 新タブ」 に変更 (大串FB「targeting?keyword= で 404」): SalesNow Platform は SPA で URLパラメータ検索非対応 → 旧推測URL廃止 → 新: _laSnSearchPlatform(company) 共通ヘルパー (3箇所共通使用) で navigator.clipboard.writeText で会社名コピー + platform.salesnow.jp/ TOP 新タブ + toast 案内「Cmd+V でペースト」・大串がログイン済の SalesNow ヘッダー検索欄にペースト→Enter で企業ページに到達
  • 最新deploy (前): 2026-05-26 08:23 — 承認リスト 対象外色変更 + オファー/アポ獲得モーダルに「SalesNowで調べる」ボタン (大串FB「対象外の色変更」「自動で業界全然反映されない」): ①対象外バッジ色 badge-graybadge-amber (琥珀色・警告系・全7ステータスが独立色に) ②オファーモーダル + アポ獲得モーダル の SalesNow 自動入力バー を 2パターン化 (成功=緑 / 失敗=灰色 Info) + 両方右側に「SalesNowで調べる ↗」青ボタン (platform.salesnow.jp/targeting?keyword=会社名 新タブ → 大串が SalesNow で業界確認 → モーダルの大業界/中業界 select に手動入力)
  • 最新deploy (前): 2026-05-26 08:17 — 承認リスト SalesNow検索を SalesNow Platform 直接遷移 に変更 (大串FB「Salesnow有料契約してるからこそできる技」): 旧 Google検索 (site:salesnow.jp) 廃止 → 新: https://platform.salesnow.jp/targeting?keyword=会社名 を新タブで開く → ログイン済の SalesNow Platform 内で企業検索 → 該当ページURL コピー → セル input に貼り付け → 次回からは直接リンク
  • 最新deploy (前): 2026-05-26 08:13 — 承認リスト ステータス「やり取り中」のバッジ色を 青→紫 に変更 (大串FB「色見づらいから変更」): LI_APPR_ST_COLORS で 'やり取り中':'badge-blue' → 'badge-purple' (薄紫 #c4b5fd・他ステータス [cyan/orange/green/red/gray] と区別 + 視認性向上)
  • 最新deploy (前): 2026-05-26 08:08 — 承認リスト SalesNow検索列 追加 (大串FB「HPの検索みたいな感じで Salesnow で検索できる列」): ①salesNowLink を kind=text → sn-with-search に変更 + デフォルト列に追加 (HP の右) ②forceCols に salesNowLink 追加 (既存ユーザー保存値も自動挿入) ③_lacRenderCell に sn-with-search 分岐: 登録済リンク (HP同様の白文字下線+短縮表示) or 「検索」ボタン (HP同型) ④_laSnSearchAndInput 新関数: 会社名で Google検索 (site:salesnow.jp で SalesNow ページ限定) を新タブで開く + 同セルが URL入力欄に切替・貼り付け+Enterで保存・次回からは直接リンク表示
  • 最新deploy (前): 2026-05-26 08:02 — A方針 (SalesNow データ充実) 支援機能 3つ (大串決定「Phase 2 AI推定はコスト面で辞めたい・Aかな」): ①承認リスト page-desc に業界補完率KPI (「業界補完 N件 (X%)」緑表示・未補完が0より多い時はオレンジで「未補完 M件 ↗」リンク → クリックで未補完会社一覧モーダル) ②未補完会社一覧モーダル (_laShowUnfilledIndustry): 大業界が空のレコードを会社名でグループ化・人数の多い順表示・「会社名をコピー」ボタン (申請(リスト経由)取込の優先順位リスト)・各会社「調べる」ボタンで SalesNow Google検索 ③SalesNow 一括補完ボタン (_laRefillFromSalesnow): page-actions 追加・承認リスト全件に対して _laAutoFillFromSalesnow を再実行・結果ダイアログにフィールド別補完件数テーブル表示・SalesNow CSV 追加取込後ワンクリックで全件補完
  • 最新deploy (前): 2026-05-26 07:54 — 承認リスト 列順矯正 + CSV取込時 SalesNow 自動補完 (大串FB「業界自動入力 取込時から」): ①forceCols に status を追加 + moveExisting:true で既存ユーザーの保存値も強制矯正 (status を excludedCheck の手前=承認日と対象外の間に移動・「列設定→デフォルトに戻す」不要・次回ロード時に自動矯正) ②CSV取込時 (_laDoImport) に SalesNow マッチング一括適用: 取込直後 newItems 全件に対して _laAutoFillFromSalesnow を実行・申請(リスト経由) の linkedin_list_pool から会社名マッチで業界/HP/メール等13フィールドを未入力のみ自動補完・取込結果ダイアログに「SalesNowから自動補完 N社マッチ (X%) / 合計 Y フィールド補完」表示 + toast にも追記 ③設計: AI推定 (Claude API) は Phase 2 として大串承認後実装予定・現状は SalesNow マッチング (一致時 100%精度) で対応
  • 最新deploy (前): 2026-05-26 07:46 — 申請リスト + 申請(リスト経由) 大串FB 3件: ①申請リスト「今日の申請を追加」モーダルの申請数欄の初期値 0 を空に + placeholder + 空チェックバリデーション ②申請(リスト経由) フィルタに大業界/中業界 select 追加 (アカウント切替の右に並列・現プール内から動的抽出・件数付き・大業界変更で中業界自動クリア・「業界クリア」ボタン) ③承認列の自動連動を確実化: 会社名マッチを _laNormalizeCompany で正規化 (_lpBuildApprIndex + _lpcRenderCell checkbox-approved の両方) → 「(株)ABC」「株式会社 ABC」「ABC株式会社」全て一致 → 承認リスト連携の信頼性向上
  • 最新deploy (前): 2026-05-26 07:38 — アポ獲得リスト + 承認リスト 大串FB 4件 + SalesNow自動入力 設計: ①アポ獲得リスト 月次推移 (直近6ヶ月) のグラデーション廃止・単色 + ホバー opacity + 数値白字上表示 + 高さ 80→120px (視認性向上) ②承認リスト ステータス列を承認日の右・対象外の左に移動 (新順序: ...title→approvedDate→status→excludedCheck→...) ③ SalesNow 自動入力 新機能 (大串FB「業種自動で入るようになったら革命」): _laAutoFillFromSalesnow(item) 関数で承認リストの会社名を _laNormalizeCompany (株式会社/有限会社/空白/全角正規化) → 申請(リスト経由) の linkedin_list_pool から会社名マッチで検索 → 一致なら industryMajor/Mid/industry/hp/email/salesNowLink/title/phone/address/employees/ceo/founded/capital を未入力フィールドのみ補完 (既存値保護)・オファーモーダル+アポ獲得モーダル起動時に自動実行・冒頭に緑バー「✓ SalesNowから自動入力: 大業界・中業界・HP… (元: 株式会社○○)」表示 ④誤タップ閉じ防止 (大串FB「誤タップで入力せずモーダル閉じちゃう」): _laLockedClose() 関数で「✕」「あとで入力」両方とも confirm 確認ダイアログ + 必須バリデーション (オファー文面ver/アポ獲得日)
  • 最新deploy (前): 2026-05-25 15:55 — 不要な警告UI抑制 + Safeguard chunk化 (大串FB「大丈夫なのにヤバそうな表示出さないで」): v3.0.97 で Chunk Layer 上限拡張したが起動時に一瞬「データ同期失敗 (HTTP 413)」赤バーが出て大串が不安に → ①_initD1 Safeguard で chunk対象キーかつ500件超なら直接 _syncToD1 ではなく _saveChunked を呼ぶように修正 (1.3MB の直接PUT で 413 になる問題を根本解消) ②_showDataSyncErrorchunk対象キーの 413 は UI 出さない (Chunk Layer migration で自動解決・console.log のみ) ③_showDataRecoveryNotice (青バー) をリファクタ: chunk対象キーだけの救済なら UI 出さない・非chunkキーが混じる場合のみ控えめ緑バー + 5秒自動フェードアウト ④通知文言を「データ保護動作」「正常な救済動作」に変更 (ヤバそう感排除)
  • 最新deploy (前): 2026-05-25 15:48 — Chunk Layer 大規模拡張 (大串FB「1万件・2万件 全然超えていく・耐える設計に」): ①_CHUNK_SIZE 500→1000 (1 chunk ~500KB・PUT回数半減) ②_MAX_CHUNKS 100→999 (上限 5万件→99万9000件まで自動拡張) ③_CHUNK_PUT_DELAY_MS=80 でPUT並列度抑制 (各 chunk を 80ms ずつずらして発火・Cloudflareレート制限回避) ④メインキー meta は chunk全部発火後に遅延発火 (整合性確保) ⑤cleanup を _MAX_CHUNKS まで拡張 + 連続5個 empty で早期 break ⑥起動時 console.log で「[Chunk Layer] 最大対応件数: 999,000 records」表示 ⑦chunk数 200超 (=20万件超) で console.warn「Lazy Load 検討推奨」
  • 最新deploy (前): 2026-05-25 15:42 — Chunk Layer 実装 (大串FB「容量問題心配することなくスムーズに進行したい」): 前 v3.0.95「データ最適化」だけでは CSV取込で常に1MB超え → core.js に Chunk分割保存 を新設・容量問題を 恒久解消_CHUNKED_KEYS=['linkedin_approved','linkedin_list_pool'] を 500件ずつに自動分割保存 (linkedin_approved__chunk_001 等) → メインキーには軽量 meta ({_chunked:true,count,chunks,ts}) のみ。D() で透過的に結合読み込み (既存コード変更不要)。_initD1 後に _migrateToChunked で既存 2689件レコードも自動 chunk化 (6 chunks に分割) → D1 PUT 各 250KB < 1MB → HTTP 413 解消
  • 最新deploy (前): 2026-05-25 15:32 — HTTP 413 (D1 1MB上限超過) 根本対策 (大串FB スクショ報告): 承認リスト linkedin_approved が 1301KB (2689件取込後) で D1 PUT 失敗 → 赤バー表示で大串が不安 (Data Safety Layer青バー救済は動作・データは安全) → サイズ最適化機能新設。①_laPruneItem(it) 廃止フィールド削除 (旧 offer1-5 系 = 20フィールド + 空 messages + 空文字フィールド memo/hpStatus/hpCompleteness/offerTemplateName/meetingMemo/industry) ②_laOptimizeStorage() 全レコード一括 prune + S() で再保存・before/after サイズを toast 表示・半減超時は確認 ③承認リスト page-actions に「データ最適化」ボタン追加 ④core.js _showDataSyncError: HTTP 413 + key='linkedin_approved' 時に「⚡ 自動最適化 (推奨)」黄色ボタンを赤バーに表示・診断メッセージを「D1上限超過」専用に切替 ⑤最適化完了後は赤バー自動消去 + 承認リスト再描画 (scroll保持)
  • 最新deploy (前): 2026-05-25 15:22 — 文面テンプレ + 承認リスト オファーモーダル 大串FB 6件 + TimeRex 統合: ①文面テンプレ画面「全て」タブ削除 (デフォルト→「初回オファー」) ②右上「A/B 比較」「AI生成」削除 ③ver+タイトル復活 (showLAOfferModal / _laInlineEdit / showLADetail の3箇所・「無題」フォールバック撤廃) ④文面テンプレ追加モーダルにタイトル入力欄復活 (tm_n・saveTmpl で name 保存) ⑤LI_TMPL_TYPES に「日程調整URL」タブ新設・選択時はメンバー一覧+TimeRex URL カード表示 (FSバッジ・コピーボタン付き・登録は メンバー管理から案内) ⑥pages.js showTerasuMemberModal に「TimeRex URL」欄追加 (全メンバー対象・FS兼任の大串も入力可・saveTerasuMember で timerexUrl 保存) ⑦オファーモーダル冒頭に「FS担当」プルダウン追加 (TimeRex URL 持ちメンバー全員・onchange で URL 表示 + 本文プレビュー再生成) ⑧オファー文面プレビュー: 旧 data-body の replace(\\s+,' ') を撤廃して改行(\n)保持・max-height 140→240px・font-size 11→12px ⑨「本文をコピー」ボタン追加 (navigator.clipboard で TimeRex 自動挿入済の最終本文をコピー) ⑩_loApplyTimerex 関数で「日程調整:[何でも]」「日時調整:[何でも]」を TimeRex URL に正規表現置換 ⑪_loSave で FS担当 (meetingOwner) も保存
  • 最新deploy (前): 2026-05-25 15:14 — 承認リスト 大串FB 5件: ①アポ獲得チェックON時に専用モーダル起動 (showLAGotMeetingModal・必須入力: アポ獲得日/商談日/商談担当者FS/メモ・保存で _lagmSave → status='アポ獲得'確定 + アポ獲得リストに自動反映・「あとで入力」スキップ可・Slack通知 _laSlackApo 発火) ②チェックボックス全6列の色をグレー (var(--text3)) に統一 (オファー var(--blue)→var(--text3) / リマインド var(--text)→var(--text3)・他4つは既にグレー) ③列順変更: アポ獲得を失注の右に移動 (新順序: ...remindCheck→inProgressCheck→lostCheck→gotMeetingCheck) + forceCols anchor 同期 ④ステータス推定を「最新の日付を持つチェック優先」に変更 (_laInferStatus 全面リファクタ・各チェックの保存日付を比較・最新が status・同日なら静的priority [対象外>失注>アポ獲得>やり取り中>リマインド済>オファー済] でフォールバック) ⑤オファーモーダル + 文面テンプレ select の表示を verN のみ に (verN — name の name 部分を全削除・「無題」表記廃止・replace_all で3箇所一括)
  • 最新deploy (前): 2026-05-25 15:08 — 承認リスト + 申請管理 大串FB 4件: ①承認リスト 列順変更 (会社の左に名前を移動・新順序: name→company→linkedinUrl→hp→title→status→approvedDate→...) ②承認リスト HP検索→URL登録 をワンクリックフロー化 (_laHpSearchAndInput 新関数・「検索」ボタンクリックで Google検索新タブ open + 同セルが URL入力欄に切替・新タブから戻って貼り付け→Enter で保存→次回からは直接リンク表示・「ずっと検索はしんどい」FB対応) ③申請管理 アカウントプルダウンのデザイン統一 (border-radius:6px / background:var(--bg3) / font-weight:600 等・他のプルダウンと統一感) ④申請管理 日次申請ログの一番右の赤い✕削除ボタン削除 (thead の空thも削除・colspan 8→7)
  • 最新deploy (前): 2026-05-25 15:02 — データ消失問題 根本対策 (大串FB「二度と起きないように根本の設計から変える」): 過去 v3.0.84 (2026-05-23) で対策したが大串の申請(リスト経由) 7000+件データが再消失 → core.js に Data Safety Layer を新設。①書き込み前 snapshot (S() 内で配列件数が半減以上に減る時に旧値を te_<key>__snap_<ts> で自動保存・最新3世代保持・_pruneSnapshots) ②D1 sync失敗の可視化 (_syncToD1 で fetch エラー/非ok時に赤バー _showDataSyncError を画面右下表示・「再同期」ボタン+「閉じる」ボタン付・key/size/HTTPstatus表示) ③巨大データ警告 (900KB超え時に console.warn・D1 行は実用上 1MB が上限) ④_initD1 ロジック大幅強化: 「localStorage を絶対に件数減少で上書きしない」原則・D1値が null/undefined で localStorage 値があれば localStorage 採用 + D1へ再 sync・D1配列値が localStorage 配列値より件数少ない場合も localStorage 採用 + D1へ再 sync・上書き時は必ず snapshot 保存 (__snap_d1bad_ または __snap_d1diff_) ⑤データ復旧通知バー (_showDataRecoveryNotice で localStorage 優先したキーを青バー表示) ⑥snapshot 復元関数 (_listDataSnapshots() でコンソールから snapshot 一覧取得・_restoreDataSnapshot(snapKey) で復元・現データは新 snapshot として自動保存) ⑦localStorage 書き込み失敗の検知 (try-catch + console.error + toast 警告)
  • 最新deploy (前): 2026-05-25 14:51 — 承認リスト やり取り中/アポ獲得/失注 チェック列追加 (大串FB): ①3つの新チェックボックス列 (inProgressCheck/gotMeetingCheck/lostCheck) を追加 (kind='checkbox-status'・順序はリマインドの右に inProgress→gotMeeting→lost) ②ステータス推定を _laInferStatus(item) 関数で一元化 (優先順位 高→低: 対象外 > 失注 > アポ獲得 > やり取り中 > リマインド済 > オファー済 > 未オファー・全6チェックから最終ステータスを単一ロジックで決定・複雑な条件分岐撤廃) ③_laToggleCheck 全面リファクタ (6 type 対応・各 type は日付保存のみ・status は _laInferStatus で統一) ④アポ獲得チェックON時に meetingDate 自動セット (未設定時のみ) ⑤showLADetail モーダルのチェック行に inProgressCk/gotMeetingCk/lostCk 追加 (各々日付input付き) ⑥_laSaveDetail 全面リファクタ (6つのチェック取得 + 手動status select 変更時は対応チェック自動 ON でUX一貫性確保 + 最終 status は _laInferStatus(next) で確定) ⑦_lacVisibleColList の forceCols を {field,anchor,pos} のオブジェクト配列に拡張 (既存ユーザーの列カスタム保存値に新3つも自動挿入される救済ロジック)
  • 最新deploy (前): 2026-05-25 14:44 — 承認リスト 大串FB 6件一括対応: ①名前/HP/LinkedIn の文字色オレンジ→白統一 (name-modal/hp-with-search/link-readonly すべて var(--blue)→var(--text)・下線維持) + HP編集ボタン削除 (シンプル化・編集は会社名モーダルから) ②対象外列が既存ユーザーのカスタム保存値に含まれない問題を救済 (_lacVisibleColList に forceCols ロジック追加・excludedCheck が ord に無ければ offerCheck の手前に自動挿入) ③ステータスプルダウンを一覧で直接編集不可化 (kind='select-status' を readonly badge 表示・onclick から _laInlineEdit を外す・title 属性「オファー/リマインド/対象外のチェックで自動更新 — 手動変更は会社名→詳細モーダルから」案内) ④ステータス7種類精査 (未オファー/オファー済/リマインド済/やり取り中/アポ獲得/失注/対象外 — 自動連動は4種類のみ・「やり取り中/アポ獲得/失注」は手動遷移のみ・大串と相談で自動連動トリガー追加検討) ⑤ステータス列を承認日の左に移動 (_LAC_DEFAULT_COLS 並び替え: ...title→status→approvedDate→excludedCheck→offerCheck→remindCheck) ⑥オファー/リマインドチェックの隣の日付表示 (dtDisp) を完全削除 (checkbox-date 分岐から削除・対象外 checkbox-exclude の dtDispE も統一して削除・日付は内部状態で保持・会社名モーダルで表示)
  • 最新deploy (前): 2026-05-25 14:37 — 申請(リスト経由) 大串FB 4件追加対応 (3回目): ①申請チェック外しても隣の日付が残るバグ + ②申請チェック時の日付表示は不要(裏側記録のみ・会社名モーダルで表示) → 両方とも checkbox-date-req セルから日付表示 (dtDisp) を完全削除して同時解決 (requestedAt は内部状態として保持・_lpShowDetail モーダルで引き続き表示) ③SalesNow CSV取込モーダルで取込先アカウントの初期値が「細川」固定で出ていたのを廃止 (先頭に「(選択してください)」を selected disabled で追加・必須マーク <span style="color:var(--red)">*</span> 追加) ④セグメント名を必須化 (input placeholder「セグメント名 (必須)」・label に必須マーク・_lpDoImportif(!segment){toast('セグメント名を入力してください (必須)');return;} 空チェック追加)
  • 最新deploy (前): 2026-05-25 14:32 — 申請(リスト経由) 大串FB 9件一括対応 (2回目): ①会社名のオレンジ→白 (name-modal の color:var(--blue)→var(--text)) ②HPのオレンジ→白 (hp-with-search の <a> color:var(--blue)→var(--text)) + HP列の「編集」ボタン削除 (リンクのみシンプル表示・編集は会社名モーダルから) ③SalesNow「開く ↗」紫→白 (link-sn の var(--purple)→var(--text)・link-li の var(--blue)→var(--text) も統一) ④対象外列を申請の左に移動 (_LP_DEFAULT_COLS: ...accountId, followCount, excludedCheck, requestCheck, approvedCheck) ⑤操作列(✎)を削除 (theadCells と tbody から完全除去・会社名クリックで詳細モーダルが開く動作で代替済み) ⑥page-desc「SalesNow CSV取込 → LinkedIn接続申請 → 承認まで一元管理 (N件)」テキスト削除 (件数はKPIに既出) ⑦全体上に詰めてスッキリ (page-header margin-bottom:10/アカウント切替プルダウンを単体divに圧縮しpadding 8→6px・font 13→12px/KPIカード padding 12→9px・font 22→19px・margin-bottom 14→8px・gap 10→8px/フィルタ row-gap 10→8px) ⑧table-wrap max-height calc(100vh - 480px)→calc(100vh - 340px) で表示行数 約10→13行に拡大 ⑨フォロー人数 列追加 (['followCount','フォロー人数',90,'number-edit']・1社=複数人アプローチ前提・数字直接入力・_lpInlineEditnumber kind 分岐追加で Number(val)||0 保存) + 「今日の申請人数 (累計)」KPI 5枚目カード追加 (申請日=今日のレコードの followCount を合算・人数未入力は1人扱い [Math.max(1, Number(r.followCount)||0)] ・社数も併記)
  • 最新deploy (前): 2026-05-25 14:12 — 申請(リスト経由) 大串FB 5件一括対応: ①SalesNow CSV取込バグ根治 (LP_CSV_MAP に SalesNow よくある列名「業界大分類/中分類」「主業界/副業界」「業種大分類/中分類」「企業」「電話」「代表者」「事業内容」等を追加・_lpDetectColumns の fallback regex すべてに既存値ガード(map.XX===undefined) + 補助列除外 (isExclude(s) で カナ/ふりがな/フリガナ/よみ/読み/kana/コード/ID/Code/番号/英名/略称/ローマ字 を除外して企業名カナや業界コード列が主名列を上書きする事故を防止)・ヘッダ行検出範囲 5→15行) ②取込結果ダイアログに「列マッピング確認」セクション追加 (どのCSV列名をどのフィールドに採用したかを
    で表示・ひらがな取込/中業界反映なしの原因を可視化) ③重複カウントを「既存と重複」(dupCount) と「CSV内で重複」(csvDup) に分離表示 ④オレンジ文字完全削除 (KPI「申請済/残り/承認済」全部 var(--text) 統一・「未申請」フィルタボタンのオレンジグラデ→青グラデ・「重複スキップ」のオレンジ数値→白) ⑤フィルタボタン+検索を1行に統合 (ステータス4ボタン + spacer + 検索ボックス・focus青リング統一 .lp-filter-btn:focus/.lp-filter-input:focus!important で上書き・onclick blur autoblur) ⑥申請列の隣に「対象外」チェックボックス列追加 (['excludedCheck','対象外',70,'checkbox-exclude-lp']_lpToggleExclude(id) 新設・チェック=excluded:true+excludedAt=今日ISO・解除でクリア・デフォルト10列に再編・既存ユーザは「列設定→デフォルトに戻す」で適用)
  • 最新deploy (前): 2026-05-23 15:00 — 承認リスト UI微調整 3件: ①フィルタボタン外縁オレンジ完全削除 (CSS .la-filter-btn:focus を !important で青上書き + onclick blur autoblur) ②タブ文字 12→14px・padding/font-weight 増 ③フィルタボタン間隔 gap 6→12px(縦)/8px(横)・全体余裕レイアウトに
  • 最新deploy (前): 2026-05-23 14:55 — 承認リスト 5件FB一括: ①フィルタ全1行統合 (プリセット+承認日+一括選択+ステータス+担当者) ②外縁オレンジ削除 (全UIに outline:none) ③Shift+Click 注釈テキスト削除 ④🚨 CSV取込後データ消失バグの根本修正 — core.js の _initD1 に「D1空配列 vs localStorage 非空配列なら localStorage 優先+D1へ再送信」ロジック追加 ⑤🚨 バージョンアップ後ロード中stuckの修正 — renderLinkedInApproved に mainContent null チェック+二重描画ロック+try-catch+再読み込みボタン
  • 最新deploy (前): 2026-05-23 14:40 — 「today_target」ラベル 大串確定「オファー対象」へ差替え (旧仮称「マイタスク」から)。ロジックは維持
  • 最新deploy (前): 2026-05-23 14:35 — 承認リスト UI 再構成 7件: ①「今日対応」→「マイタスク」②リマインド予定日 オファー時+5日 自動入力 ③「対応期日漏れ」→「リマインド対象」 ④ボタン色見やすく改善 (非選択=bg3+border・選択=青グラデ+影・hover効果) ⑤アカウントタブとフィルタ間に margin-bottom:14px 余白 ⑥検索削除 ⑦ステータス/担当者を同列右寄せ ⑧オファー送信率を sent/(total-excluded) に修正 + 対象外件数・率を小さく表示
  • 最新deploy (前): 2026-05-23 14:20 — 承認リスト プリセットフィルタ更新: 「リマインド必要」→「対応期日漏れ」(承認日から5日経過+未オファー)・「全て」→「全件」+ デフォルトを 'today_target'→'all' に変更・ボタン順序を 全件/今日対応/未対応/対応期日漏れ/返信あり に整列・各ボタンに title でツールチップ
  • 最新deploy (前): 2026-05-23 14:10 — 承認リスト 列+オファー時専用モーダル: ①デフォルト列を 10列に再編 (会社名/名前/LinkedIn/HP/役職/承認日/ステータス/対象外/オファー/リマインド) ②showLAOfferModal 新規実装 (SCALE CRM アポ獲得モーダル同型・オファー文面ver + 大業界 + 中業界 + HP有無 + HP完成度・ホバープレビュー付き) ③オファーチェックON/ステータス→「オファー済」変更時に自動起動 ④hpStatus/hpCompleteness 新フィールド + 列+showLADetail に反映
  • 最新deploy (前): 2026-05-23 13:55 — 承認リスト 5件FB一括: ①承認日フィルタ追加+「フィルタ結果を一括選択」ボタン (ステータス一括変更用) ②スプシ風 Shift+Click 範囲選択 (window._laLastChkIdx で前回click記憶) ③HP列 SCALE CRM 架電リスト同型動的切替 (登録済=リンク+編集 / 未登録=検索ボタン・承認リスト + 申請(リスト経由) 両方) ④オファー履歴(5回まで)セクション廃止→「やり取り履歴」常時表示 (messages配列・sent/received交互) + 既存offer1-5は折りたたみで保持 ⑤showLADetail モーダル背景を bg2/bg/border2/text で統一・白背景見づらい問題を解消
  • 最新deploy (前): 2026-05-23 13:40 — 大串FB 3カテゴリ一括: ①投稿モーダル本文を最下段配置+rows=18+min-height:400px で広く確保 ②申請(リスト経由) 絵文字全削除 + プルダウン色修正 + SCALE CRM 架電リスト同型の列カスタマイズ機能移植 (_LP_ALL_COL_DEFS / showLPColumnSettings) + 申請(checkbox+日付+LinkedIn新タブ) / 承認(checkbox+承認リスト自動連動) の新列 ③承認リスト オレンジ→白統一 + LI_APPR_STATUSES に「対象外」追加(7種類化) + checkbox-exclude 新kind + _laInlineEdit select系 blur 200ms 遅延でプルダウン操作問題解消
  • 最新deploy (前): 2026-05-23 13:25 — 3点UI改修 (大串FB一括)。①アポ獲得リスト 右上「3ヶ月上限設定」ボタン削除 (機能関数は残置)。②文面テンプレ: 名前フィールド完全廃止+page-desc説明文削除+種類別タブ追加 (全て/初回オファー/リマインド/返信・切り返し/商談URL/NG/実績 の7タブ・件数付き)。③LinkedIn投稿: ステータス4種類に再編 (下書き/添削中/完成/投稿済・旧'予定'→'完成'正規化吸収) + 一覧カード左上にステータス切替プルダウン (_liPostSetStatus モーダル不要で直接変更) + ステータス別タブ (全て+4タブ件数付き)
  • 最新deploy (前): 2026-05-23 13:10 — 承認リスト CSV取込バグ修正 (大串FB)。LinkedIn Connections.csv の Notes メタ行スキップ + Connected On 英語日付 (23 May 2026) → ISO (2026-05-23) 正規化。_liCsvParse でヘッダー検出ロジック追加 (最大15行先まで First Name+Company を含む行を探す)。_liParseDateLI 関数新設。実CSV (2695件) でパース動作確認済。
  • 最新deploy (前): 2026-05-23 12:50 — 「申請(リスト経由)」セクション新規追加 (lib/linkedin_list_pool.js・48KB) + 「申請リスト」→「申請管理」リネーム。SalesNow CSV取込→セグメント割当→アカウント割当→LinkedIn接続申請→承認 まで一元管理。データキー linkedin_list_pool。CSV取込/セグメント別タブ/アカウント切替プルダウン/KPI 4カード (総数/申請済/残り/承認)/直接編集/会社名→一括編集モーダル/HP🔍検索/一括操作/ゴミ箱 を全実装。承認時に linkedin_approved へ自動連携 (status='未オファー'で開始)。
  • 最新deploy (前): 2026-05-23 11:00 — 「承認リスト 大規模拡張」(大串FB 10:49 全件・1deployで対応): ①オファー/リマインドチェック列+日付保存+status自動連動 ②オファー文面ver自動付与(文面テンプレ「初回オファー」を created_at 順に ver1, ver2... 動的番号化) ③ステータス6種類再編(アプローチ待ち/オファー済/リマインド済/やり取り中/アポ獲得/失注)旧データは _laNormalizeStatus で表示時正規化 ④大業界/中業界を独立列に(SalesNow マスター・chained) ⑤アポ獲得モーダル拡張(アポ獲得日/商談日/商談担当者FSプルダウン/LinkedInやり取り一覧 sent-received 左右交互配置) ⑥HP🔍検索アイコン(会社名でGoogle検索) ⑦分析レポートに ver別パフォーマンス(返信率/アポ率・🏆ハイライト)+オファー/リマインドチェック数KPI追加
  • 最新changelog: lib/manual.jssec_changelog_1## 2026-05-23 セクション (TERASU CRM は changelog.ts 無し)
  • 稼働確認: 2026-05-23 11:00 — 本番URL HTTP 200 OK / 全script ?v=20260523z / /api/data 認証ゲート 401維持 / lib/linkedin_ops.js に新キーワード16種類全配信 (_laToggleCheck/_laHpSearch/_laOfferTemplates/_laNormalizeStatus/_laAddMessage/_laDelMessage/_laFsMembers/checkbox-date/hp-with-search/select-template/select-industry-major/select-industry-mid/'アプローチ待ち'/'やり取り中'/'オファー文面 ver 別'/byOfferVer) / manual.js sec_changelog_1 bullet数 72件 → サイドバー版表示 v3.0.85
  • バックアップ: ~/terasu-backups/terasu_2026-05-23_*pre-deadcode-cleanup / pre-li-label / pre-li-batch2 / pre-li-batch3 / pre-batch4 / pre-la-col-settings / pre-lr-redesign / pre-la-batch5 / pre-appointments / pre-la-bigfb
  • ** 大串確定: 「オファー前」の別名 → 「未オファー」** で確定 (2026-05-23 11:10・v=20260523z で差替え済)。新6種類は「未オファー / オファー済 / リマインド済 / やり取り中 / アポ獲得 / 失注」
  • セクション棚卸し: 31_システム開発部/_SCALE_TERASU_CRM_セクション棚卸し(全48セクションの機能・必須度・削減候補13件)

直近の作業履歴

2026-05-23 (続き10) — 申請(リスト経由)新規追加 + 申請リスト→申請管理リネーム(v=20260523z / アプリ表示 v3.0.85・デプロイ済)

大串FB「申請リスト を 申請管理 に改名 + 新規で 申請(リスト経由)を追加 (SalesNow CSV→LinkedIn申請→承認まで一元管理・セグメント別タブ・アカウント切替プルダウン・直接編集+会社モーダル一括編集)」を受けて実装。前回 v3.0.63 (10:35) で SCALE CRM list_pool.js 移植を中断していたが、今回は TERASU 仕様で簡略再実装する方針で完遂。

新規ファイル: lib/linkedin_list_pool.js (48KB・約480行)
- データキー: linkedin_list_pool (会社単位レコード型・グローバルキー D/S)
- レコード構造: id/company/linkedinUrl/industryMajor/industryMid/segment/accountId/requestedAt/requestedBy/approved/approvedAt/contactName/title/email/hp/salesNowLink/salesNowScore/employees/capital/founded/ceo/address/phone/businessSummary/memo/importBatchId/imported_at/imported_by/deleted_at

主要関数 (約30個):
- 描画: renderLinkedInListPool (メイン)
- CSV取込: _lpImportCSV / _lpDoImport / _lpDetectColumns / _lpParseCSV / _lpImportHistory / _lpUndoBatch
- アクション: _lpRequest (LinkedIn新タブ+日時記録) / _lpApprove (承認リスト linkedin_approved に自動追加・status='未オファー'で開始) / _lpHpSearch (会社名+「公式サイト」でGoogle新タブ)
- インライン編集: _lpInlineEdit (text/date/select-account) / _lpInlineEditIndustry (大業界/中業界 chained・SALESNOW_INDUSTRIES と統一)
- モーダル: _lpShowDetail (会社名クリックで一括編集・CSV全フィールド+承認チェックボックス+メモ) / _lpSaveDetail (新規承認時は承認リストへ自動追加) / _lpDel / _lpAddManual
- セグメント管理: _lpManageSegments (一覧+申請率+承認率) / _lpRenameSeg / _lpDeleteSeg (レコードは残す・セグメントだけクリア)
- 一括操作: _lpToggleAll / _lpToggleOne / _lpUpdateBulkBar / _lpBulkClear / _lpBulkSetSegment / _lpBulkSetAccount / _lpBulkRequest / _lpBulkDelete
- ゴミ箱: _lpShowTrash / _lpRestore / _lpPurge
- フィルタ: _lpSetFilter (segment/accountId/status/q を切替)

SalesNow CSV ヘッダ自動マッピング (LP_CSV_MAP):
- 会社名/企業名/法人名/Company → company
- LinkedIn / LinkedIn URL / LinkedInページ → linkedinUrl
- SalesNow企業リンク / Sales Nowリンク → salesNowLink
- 大業界 / 中業界 → industryMajor / industryMid
- 業界 / 業種 → industry (fallback)
- 担当者名 / 氏名 → contactName
- 役職 / 肩書 → title
- メール / Email → email
- HP / 公式サイト / Website → hp
- 従業員数 / 資本金 / 設立 / 代表者名 / 住所 / 事業内容 → 各フィールド
- 正規表現 fallback (/会社名|企業名|法人名/ 等で柔軟マッチ)

重複検知: 会社名 (大文字小文字無視) または LinkedIn URL 完全一致

core.js 配線:
- NAV_ITEMS.linkedinlinkedin_request ラベルを「申請リスト」→「申請管理」へ変更
- linkedin_list_pool エントリを linkedin_request の直後に追加 (申請(リスト経由))
- renderPage R-map に linkedin_list_pool 追加 (typeof ガード付き)

index.html / client_index.html:
- <script src="lib/linkedin_list_pool.js?v=20260523z">appointments.js の後 (linkedin_ops.js より後) にロード
- ?v=20260523l20260523m bump

機能ハイライト (大串FB原文との対応):
- ✅ SalesnowからCSV情報投入: _lpImportCSV (ヘッダ自動判定・3軸重複検知・importBatchId)
- ✅ 申請したかどうかの管理: 各レコードに requestedAt / approved / 「📤 申請」ボタン (新タブで LinkedIn URL を開く+日時記録) / 「✓ 承認」ボタン (linkedin_approved へ自動連携)
- ✅ Salesnow→申請(リスト経由)→LinkedIn接続申請: ボタン1クリックで完結
- ✅ リスト残数の可視化: KPI 4カード (総数/申請済/残り/承認・申請率/承認率)
- ✅ セグメント別タブ: 動的抽出・タブ切替で進捗を絞込み・名称変更/削除可能 (_lpManageSegments)
- ✅ アカウント切替プルダウン: 画面トップ・各アカウント名+件数表示・切替で全画面リフレッシュ
- ✅ 直接編集: 会社名/業界/セグメント/アカウント/申請日 をセルクリックで _lpInlineEdit
- ✅ 会社名→モーダル一括編集: _lpShowDetail (CSV全15フィールド+承認チェックボックス+メモ)

  • 編集: lib/linkedin_list_pool.js(新規)・core.js(NAV+R-map)・index.html+client_index.html(?v= bump)・lib/manual.js(changelog 1件追記)。scale-lead / scale-base は無変更
  • バックアップ ~/terasu-backups/terasu_2026-05-23_pre-list-pool.tar.gz(340K)・node --check linkedin_list_pool.js linkedin_ops.js manual.js core.js 全OK・wrangler pages deploy (5 new files uploaded)・本番 HTTP 200・?v=20260523z 配信・lib/linkedin_list_pool.js 配信(48KB)・全9関数配信確認 (renderLinkedInListPool/_lpImportCSV/_lpRequest/_lpApprove/_lpShowDetail/_lpInlineEdit/_lpManageSegments/_lpHpSearch/LP_CSV_MAP)・core.js に「申請管理」「申請(リスト経由)」「linkedin_list_pool」配信・/api/data 401維持・bullet数 75 → v3.0.85

2026-05-23 (続き9) — 承認リスト 大規模拡張 (大串FB 10:49 全件・1deploy)(v=20260523z (11:20 文面テンプレ画面に初回オファーver バッジ自動表示追加) / アプリ表示 v3.0.85・デプロイ済)

前セッション 10:49 で /handoff された 承認リスト 大規模FB を全件 1deploy で実装。

1. ステータス6種類再編: 旧9種類 (未対応/オファー送信済/リマインド送信済/返信あり/日程調整中/アポ獲得/失注/辞退/無反応) → 新6種類 (アプローチ待ち/オファー済/リマインド済/やり取り中/アポ獲得/失注)。_laNormalizeStatus(s) 関数を新設し旧→新の表示時正規化 (データ自体は無変更で後方互換)。LI_APPR_ST_COLORS / LI_APPR_CONNECTED / LI_APPR_DONE を新値で再構成。_laRender の KPI/filter、showLAStatusModal_laSaveQuick の status比較を _laNormalizeStatus 経由に統一。

2. 列追加 + デフォルト再編: _LAC_ALL_COL_DEFS に新 kind 6種類 (checkbox-date / select-template / select-industry-major / select-industry-mid / hp-with-search / select-fs-member) を追加。新デフォ12列に再編 (名前/LinkedIn/会社名/役職/承認日/オファー/リマインド/オファー文面/ステータス/大業界/中業界/HP)。拡張列にもアポ獲得日/商談日(actualMeetingDate)/商談担当者(meetingOwner) を追加。

3. _lacRenderCell 新kind分岐実装: checkbox-date はチェック☑+日付(MM-DD表示)+クリックで _laToggleCheck。select-template はプルダウン (ver1/ver2/ver3...)。chained 大業界/中業界 (大業界変更で中業界クリア)。hp-with-search は HP編集 + 🔍検索アイコン (Google新タブ)。select-fs-member は FSポジション限定プルダウン。

4. 新関数群: _laToggleCheck(id, 'offer'|'remind') (チェック切替+今日日付保存+status自動連動)、_laHpSearch(id) (window.open('https://www.google.com/search?q='+encodeURIComponent(company+' 公式サイト')))、_laFsMembers() (FSポジションフィルタ)、_laOfferTemplates() (linkedin_templates.type==='初回オファー' を created_at 昇順で並べて ver1, ver2... と動的番号付与)、_laAddMessage(id) / _laDelMessage(id,idx) (アポ獲得モーダル内やり取りメッセージ追加/削除・日付昇順自動ソート)。

5. showLADetail 拡張: メイン上部に「オファー☑+日付 / リマインド☑+日付 / オファー文面verプルダウン」のチェック行を追加。status='アポ獲得'時に専用緑背景セクション展開: アポ獲得日 (ld_apo_d=meetingDate) / 商談日 (ld_actual_md=actualMeetingDate) / 商談担当者 (ld_apo_owner=meetingOwner・FSメンバープルダウン) / LinkedIn やり取り一覧 (messages配列・sent=右青/received=左グレーで交互配置・追加UI/削除ボタン付き)。HP 行に「🔍 検索」ボタン (会社名でGoogle検索を新タブ)。

6. _laSaveDetail 拡張: offerChecked / offerCheckedDate / remindChecked / remindCheckedDate / offerTemplateVer / offerTemplateName / actualMeetingDate / meetingOwner を保存。チェック↔ステータスの保存時自動連動 (offerCk=true & status='アプローチ待ち' → 'オファー済')。

7. 分析レポート拡張: byOfferVer 集計でテンプレver別 (使用数/返信/返信率/アポ/アポ率) テーブル追加。アポ最多 ver は🏆+緑ハイライト。stats-grid にオファーチェック数/リマインドチェック数の2カード追加。

  • 編集: lib/linkedin_ops.js(2154→約2300行)・lib/manual.js(changelog 1件追記)・index.html+client_index.html(?v= bump 20260523i→j)。scale-lead / scale-base は無変更
  • バックアップ ~/terasu-backups/terasu_2026-05-23_pre-la-bigfb.tar.gz(333K)。node --check linkedin_ops.js manual.js appointments.js core.js 全 OK / wrangler pages deploy (62 files, 4 new uploaded) / 本番 HTTP 200 / ?v=20260523z 配信 / 新キーワード16種類全配信 / /api/data 401維持 / sec_changelog_1 bullet数 72 → v3.0.85
  • 大串確認待ち: 「オファー前」別名 (候補: 未オファー/初動前/コンタクト待機/お声がけ前/対象選定中) — LI_APPR_STATUSES の1要素差替えで対応可能。

2026-05-23 (続き8) — アポ獲得リスト 新規追加 (SCALE CRM 同型) (v=20260523i / アプリ表示 v3.0.71・デプロイ済)

大串FB「アポ獲得リストのセクションを新規でLinkedIn運用の括りに追加して欲しい。機能や内容はSCALE CRMのアポ獲得リストと同様で」を受け、SCALE CRM lib/pagecore_aptmeta.js(559行) と同等の機能を TERASU 仕様で新規実装。

  • 新規ファイル: lib/appointments.js(約240行)。SCALE CRM 版から TERASU に該当しない概念(call_list / segment_definitions / project channel / 商談予定リスト / 音声分析)を除いた簡略版。
  • データソース: linkedin_approved (承認リスト) で status === 'アポ獲得' のエントリのみ。SCALE CRM 版は call_list (テレアポ) + linkedin_approved の 2 ソースだったが、TERASU は call_list が無いため LinkedIn のみ。
  • ストレージ: global D('apt_meta', {}) に key=li_<id> で商談メタ情報 (meetingDate/getter/seated/result/amount/hearing/feedback) を保存。SCALE CRM の PD/PS (project-scoped) ではなく D/S (global) を使用。
  • 主要関数: getAutoAppointments() / renderAppointments() / editAptMeta(key) / saveAptMeta(key) / _aptInlineSave(key,field,value) / _aptShiftMonth(direction) / _aptCountInPeriod(start,end) / _aptShowTargetsModal() / _aptSaveTargets() / _aptOpenSource(key).
  • UI構成: 月フィルタ+KPI 4カード(期間内アポ数 / 受注 / 失注 / 未定保留)+3ヶ月上限ゲージ(apt_targets 設定時のみ・商談日基準カウント)+月次推移(直近6ヶ月の棒グラフ)+テーブル(獲得日/商談日/獲得者/会社/担当者/役職/業界/アカウント/結果/受注金額)。各セルでインライン編集(商談日・獲得者・結果・受注金額)+詳細編集モーダル(着席/ヒアリング/フィードバック)+承認リスト元データへの「↗」ジャンプボタン。
  • 配線: core.js NAV_ITEMS.linkedin に appointments 項目を 承認リスト の直後に追加(people アイコン)。renderPage R-map に appointments: エントリ追加。index.html<script src="lib/appointments.js">linkedin_ops.js より後に配置(_laKeepScroll/esc/showLADetail 依存のため)。
  • インライン編集の scroll保持: _aptInlineSavesaveAptMeta の最終再描画で _laKeepScroll(renderAppointments) を使用(前回実装のヘルパー再利用)。SCALE CRM 同等の操作性。
  • 3ヶ月上限: D('apt_targets', {apoLimit3m, apoLimitPeriodStart, apoLimitPeriodEnd}) に保存。ページ右上「⚙ 3ヶ月上限設定」ボタンから設定可。商談日(meetingDate)が期間内のアポ件数をカウント。
  • 編集: lib/appointments.js(新規)・core.js(NAV+R-map)・index.html(script タグ+コメント+?v= bump)・client_index.html?v= bump)・lib/manual.js(changelog 1件追記)。scale-lead / scale-base は無変更
  • バックアップ ~/terasu-backups/terasu_2026-05-23_pre-appointments.tar.gznode --check 全 OK・本番 HTTP 200・?v=20260523i 配信・lib/appointments.js 5関数配信・core.js R-map に appointments エントリ配信・/api/data 401維持・bullet数 71 → v3.0.71

2026-05-23 (続き7) — バージョン根治+承認リスト新列+scroll保持+名前モーダル(v=20260523h / アプリ表示 v3.0.70・デプロイ済)

大串FB 4点を一括対応。

バージョン表示根治(FB1)
- 症状: サイドバーに「TERASU CRM v3.0」と固定表示(v3.0.N にならない)。
- 原因解析: core.js 末尾の auto-login IIFE が manual.js より先に実行 → showApp()renderVersionBadge()_computeAppVersion() の時点で MANUAL_SEED が未定義 → 'v3.0' (fallback) が表示される。
- 修正: renderVersionBadge で初回計算が 'v3.0' だった場合のみ、setTimeout(1200ms) で再計算するロジックを追加。manual.js ロード完了後に自動的に v3.0.N へ更新される。
- 根本原因なので将来の改修にも効く(仕様変更しても fallback で復活)。

承認リスト 列を新仕様に変更(FB2)
- 新デフォルト6列: 名前 / LinkedIn / 会社名 / 役職 / 承認日 / HP
- 新 kind: name-modal (クリックで全項目編集モーダル)・link-readonly (リンク表示・編集不可)・readonly (表示のみ・編集不可)・既存 text (HP等で編集可)
- 名前~承認日 は CSV取込列のため readonly(直接編集不可)・LinkedIn は「開く ↗」のリンク・HP は直接編集可
- 旧列(担当・アカウント・ステータス・オファー1-3・リマインド・セグメント・業種・SalesNow URL・メール・メモ 等)は拡張列として列設定モーダルから復活可(デフォOFF)
- _lacRenderCell に 3つの新 kind 分岐を追加

名前クリックで一括編集モーダル(FB3)
- 名前セルをクリックすると既存 showLADetail モーダルが開く(青下線スタイルで「クリック可」を明示)
- モーダルに新フィールド 名(ld_fn) + 姓(ld_ln) + HP(ld_hp) を追加
- _laSaveDetailfirstName/lastName を保存し、fullName を「姓 + 半角スペース + 名」で自動再計算

カクつき・scroll保持(FB4)
- SCALE CRM 架電リスト _rerenderKeepScroll と同型の _laKeepScroll を実装
- 保存先: window.scrollY ・ mainContent.scrollTop ・ table-wrap.scrollLeft/Top
- 再描画前に高さ固定 → 描画 → scroll 復元 → rAF で再度復元(scrollHeight 確定後)
- _laInlineEdit / _laInlineEditIndustry の保存後再描画と、_laSaveDetail のモーダル閉じた後の再描画に適用
- 結果: 入力後にテーブル位置が保持され、編集した行が見える状態を維持

  • 編集: core.js(renderVersionBadge に setTimeout 再計算)・lib/linkedin_ops.js(_LAC列定義・_lacRenderCell・_laKeepScroll・_laInlineEdit/_laInlineEditIndustry/_laSaveDetail で keepScroll 使用・showLADetail に名/姓/HP 追加)・lib/manual.js(changelog 4件追記)・index.html(コメント+?v= bump)・client_index.html?v= bump)。scale-lead / scale-base は無変更
  • バックアップ ~/terasu-backups/terasu_2026-05-23_pre-la-batch5.tar.gznode --check 全 OK・本番 HTTP 200・?v=20260523h 配信・linkedin_ops.js_laKeepScroll/name-modal/link-readonly/kind==='readonly'/ld_hp/ld_fn/ld_ln 配信・core.js に setTimeout(1200) 再計算ロジック配信・bullet数70 → v3.0.70

2026-05-23 (続き6) — 申請リスト全面再設計+アカウント管理カード簡略化(v=20260523g / アプリ表示 v3.0.66・デプロイ済)

大串FB 2点を同時に対応。

LinkedIn アカウント管理 一覧カード 簡略化(FB1)
- カード上部から「プロフィール (ヘッドライン)」表示を削除。役職 (title) はそのまま、ヘッドライン (headline) 行を削除。1行Editで完了。
- 表示要素: 名前 + 役職 + 本日/週次の使用数値(既存の進捗バー)のみ。

申請リスト 全面再設計(FB2 — ガッツリ変更)
- 旧仕様 (廃止): 人ごとの個別レコード型 (linkedin_requests = name/company/title/industry/requestDate/status/url 等)、CSV取込ベース、showLRModal/showLRDetail/importLICSV/filterLR/_lrToggleAll 等 多数の helper。
- 新仕様: 日次集計型 (linkedin_daily_requests = {id, date, accountId, industryMajor, requestCount, memo, created_at, updated_at, deleted_at?})。手動入力ベース。
- UI:
- フィルタカード: 期間(全期間/30日/90日/半年/カスタム)+アカウント select
- KPI 3カード: 申請総数・フォロバ数・フォロバ率
- 日次ログ テーブル: 日付・アカウント・大業界・申請数・フォロバ数・フォロバ率・メモ(全セル直接クリック編集可・_lrInlineEdit
- 大業界別 フォロバ率テーブル: 大業界ごとに 申請/フォロバ/率
- アカウント別 フォロバ率テーブル
- 追加モーダル (addLR): 日付(デフォ今日)・アカウント select・大業界 select (SALESNOW_INDUSTRIES)・申請数(数値入力)・メモ。_lrAddSave で linkedin_daily_requests に push。
- フォロバ計算: linkedin_approved (承認リスト) の approvedDate を 期間フィルタで抽出 → 各日次ログ行の フォロバ数 = 同じ日付・同じ accountId・同じ industryMajor の approved レコード数。LinkedIn 公式 CSV (名/姓/URL/会社/役職/承認日) を承認リストに取り込むと自動で日付ごとに振り分けられる。
- 新ヘルパー: _lrEntries/_lrAllEntries/_lrSaveAll/_lrEnsureFilter/_lrEfRange/_lrInRange/_lrFilteredEntries/_lrFilteredApproved/_lrSetFilter/addLR(override)/_lrAddSave/_lrDelEntry/_lrInlineEdit
- _liAccUsage も新スキーマ対応: 旧 applyMethod/_liManualCounts/linkedin_requests 参照を廃し、linkedin_daily_requestsrequestCount を accountId×日付範囲で合算する形に書き換え。アカウント管理カードの本日/週次数値も新スキーマ準拠に。
- 旧データは保持・無視: 既存 linkedin_requestslinkedin_manual_counts は触らず保管。新UIでは参照しない。旧 helper 関数(addLR の旧版・filterLR・showLRModal 等)は同名再宣言で override(最終定義が runtime で勝つ)→ 実質 dead code 化。
- CSV取込ボタン廃止: importLICSV ボタンを削除。手動入力ベースに完全移行。
- エスケープバグ事故 (即修正): 期間ボタン map の中で \\' エスケープが二重になり node --check で SyntaxError → 退化禁止フローで deploy 前に検知 → ネスト template literal `<button ...onclick="_lrSetFilter('range','${kl[0]}')">` に書き換えて修正。
- 編集: lib/linkedin_ops.js(_liAccUsage 修正・renderLinkedInRequest 全置換・新ヘルパー追加)・lib/manual.js(changelog 3件追記)・index.html(コメント+?v= bump)・client_index.html?v= bump)。scale-lead / scale-base は無変更
- バックアップ ~/terasu-backups/terasu_2026-05-23_pre-lr-redesign.tar.gznode --check OK・本番 HTTP 200・?v=20260523g 配信・linkedin_ops.js_lrEnsureFilter/_lrFilteredApproved/_lrAddSave/_lrDelEntry/_lrInlineEdit/linkedin_daily_requests/「今日の申請を追加」 配信・/api/data 401維持・bullet数66 → v3.0.66

2026-05-23 (続き5) — 承認リスト 列カスタマイズ機能(v=20260523f / アプリ表示 v3.0.64・デプロイ済)

大串FB「承認リスト:SCALE CRMの架電リストと同じように、列の編集設定ができるようにして欲しい・同じ機能入れて」を受け、SCALE CRM lib/calllist_core.js の列設定(_clVisibleColList/_clColPrefKey/showCallListColumnSettings 等)と同型の機能を TERASU 承認リスト用に _lac (linkedin approved column) プレフィックスで移植。

  • 新規定義: _LAC_ALL_COL_DEFS(20列の [field, label, width, kind] 配列)・_LAC_DEFAULT_COLS(デフォルト表示13列)・window._LAC_FIXED_COLS(承認リストは可変列で固定列なし=チェック・行番号・編集ボタンはテーブル外側で描画)。kind は text / date / select-member / select-account / select-status / industry の6種類で、既存の _laInlineEdit / _laInlineEditIndustry にディスパッチ。
  • デフォルト13列: 会社・氏名・役職・承認日・担当・アカウント・ステータス・オファー1〜3・リマインド予定・セグメント・業種。拡張7列(デフォOFF): オファー4・オファー5・商談日・LinkedIn URL・SalesNow URL・メール・メモ。
  • ヘルパー群: _lacColPrefKey()(ユーザー別pref key la_cols_pref_<username>)・_lacVisibleColOrder()(D1から保存済み順序を読出・null = 未設定)・_lacIsColVisible(field)_lacVisibleColList()(表示順で配列を返す)・_lacSaveColPref(orderedArr)_lacResetColPref()_lacTableMinWidth()_lacRenderCell(a, def, accs)(kind ごとにセル HTML を生成)。
  • モーダル: showLACColumnSettings() で 3グループ(▸ 表示中の列 / ▸ 基本の列 / ▸ 追加できる列)を表示。チェックON→「表示中」グループへ移動・OFF→home(basic/ext)グループへ戻る。HTML5 DnD(_lacColDragStart/_lacColDragEnd/_lacColDragOver)で同一リスト内の並べ替え可。_lacSaveColumnSettings() で 表示中リストの DOM 順から順序を抽出 → D1 保存。
  • renderLinkedInApproved 修正: page-actions に「⚙ 列設定」ボタン追加。thead を静的記述(chk+#+13列+空欄)から <thead id="laTH"></thead> の動的生成に変更。<table>min-width:1400px 固定を _lacTableMinWidth() 算出値に変更。
  • _laRender 書き換え: 可視列リストを取得→thead は _lacVisibleColList() の各列の [label, width] から生成・tbody は _lacRenderCell(a, def, accs) で各セルを描画(kind 別ディスパッチ)。インライン編集(既存の _laInlineEdit/_laInlineEditIndustry)はそのまま動く(data-laid/data-lafield 属性で連携)。
  • 編集: lib/linkedin_ops.js(_lac 群 + showLACColumnSettings + renderLinkedInApproved page-actions/thead 修正 + _laRender 書き換え)・lib/manual.js(changelog 1件追記)・index.html(コメント+?v= bump)・client_index.html?v= bump)。scale-lead / scale-base は無変更*。
  • バックアップ ~/terasu-backups/terasu_2026-05-23_pre-la-col-settings.tar.gznode --check 全 OK・本番 HTTP 200・?v=20260523f 配信・linkedin_ops.js_LAC_ALL_COL_DEFS/showLACColumnSettings/_lacRenderCell/_lacColDragStart/_lacSaveColumnSettings 配信・/api/data 401維持・sec_changelog_1 bullet数 64件 → APP_VERSION v3.0.64

2026-05-23 (続き4) — バージョン表示の自動増分化(v=20260523e / アプリ表示 v3.0.63・デプロイ済)

大串FB「TERASU CRM v3.0ってずっとなってるけど、アップデートするたびに番号足していって欲しい。今が本当に最新?ってなる。最終的には凄いいろんな数字になっていくといいね。修正のきせきも見れて良い」を受け、固定の v3.0 表示を 自動増分式 v3.0.N に変更。

  • 設計: Nlib/manual.jsMANUAL_SEEDsec_changelog_1body_markdown 中の - で始まる行数(=累積 changelog bullet 数)。リリースごとに changelog にエントリを足すので、それがそのまま版番号として伸びる。固定値の手動 bump 不要。
  • 実装: core.js_computeAppVersion() 関数を新設し、MANUAL_SEED を走査して bullet数を数え 'v3.0.' + count を返す。var APP_VERSION = 'v3.0'; は manual.js ロード前の fallback として残し、renderVersionBadge() 内で APP_VERSION = _computeAppVersion(); で同期。showTerasuVersionHistory() のモーダル表示も _computeAppVersion() を都度呼ぶ。バージョン情報モーダルに「基準 v3.0 + 累積更新回数 (changelog 全bullet数)」の補足説明を追加。
  • 結果: 現時点で v3.0.63(manual.js の sec_changelog_1 内 bullet 数)。次のデプロイで changelog に 1件追記すれば自動的に v3.0.64。30件改修なら一気に v3.0.93
  • 大串FB2件は本件と独立判断で取下げ: 「リストプールを SCALE CRM からそのまま移植」「申請リスト 列の編集設定を SCALE CRM 架電リストと同型に」の2件は、scale-lead 側の list_pool.js(1228行) と calllist_core.js(1448行) を読んだ結果、SCALE CRM 内部の依存(per-project の linkedin_requests / call_list / segment_definitions / _putLargeWithChunks / _lpDistributeToLinkedIn (pages_linkedin.js))が深く、TERASU CRM の data model (linkedin_requests グローバル・segment 概念なし) との差分吸収に SCALE CRM ファイルの大幅改変が必要と判明。途中で大串が「取り消しで verに関する修正だけ実施して」と中断 → FB1 (バージョン番号自動増分) のみ実施・他2件は未実装で取り下げ。
  • 編集: core.js_computeAppVersion 追加・renderVersionBadge と showTerasuVersionHistory で都度呼出)・lib/manual.js(changelog 1件追記)・index.html(コメント+?v= bump)・client_index.html?v= bump)。scale-lead / scale-base は無変更
  • バックアップ ~/terasu-backups/terasu_2026-05-23_pre-batch4.tar.gznode --check OK・本番 HTTP 200・?v=20260523e 配信・core.js_computeAppVersionv3.0.'+ 配信・/api/data 401維持を確認。

2026-05-23 (続き3) — 承認リスト 業種統一+インライン編集+favicon透過(v=20260523d・デプロイ済)

大串FB3件を一括対応。

  • 承認リスト 業種を SCALE CRM SalesNow マスターと統一: SCALE CRM の lib/salesnow_industries.js(30大業界・約500中業界)を TERASU CRM 側にコピー取り込み。index.html に script タグを追加(linkedin_ops.js より前にロード)。承認リスト一覧テーブル + 承認リスト詳細モーダルの「業種」欄を、フリーテキスト input から 大業界 / 中業界 の連動セレクト に置換。大業界を切り替えると中業界の選択肢が SalesNow マスターから自動再生成。データモデルに industryMajor / industryMid を追加し、互換のため industry フィールドにも「大業界 / 中業界」連結文字列を保存。SCALE CRM 側の業種マスターを更新した時は TERASU 側 lib/salesnow_industries.js も手動同期する必要あり。
  • 承認リスト 各セル インライン編集: 一覧テーブルの 会社・氏名・役職・承認日・担当・アカウント・ステータス・オファー1-3日付・リマインド予定・セグメント・業種 を クリックで その場編集 できるように。クリック→input/select に切替、Enter or フォーカス外しで保存、Escape でキャンセル。担当はメンバー select、アカウントは linkedin_accounts select、ステータスは LI_APPR_STATUSES select、業種は大業界/中業界の連動 select。ステータスを「アポ獲得」に変えた時は既存の Slack通知 (_laSlackApo) を発火。新規ヘルパー: _laInlineEdit(id, field, kind)_laInlineEditIndustry(id)_lddIndUpdate()(詳細モーダル用)。 _laRender を再生成し、各セルに class="la-cell" + data-laid / data-lafield 属性 + onclick="event.stopPropagation();_laInlineEdit(...)" を付与。インライン編集の見た目スタイル(.la-cell:hover.la-inline-input)はページ先頭の <style> で注入。_laSaveDetailindustryMajor/industryMid/industry の3点保存に対応。
  • favicon 白背景除去: icons/favicon.svg<rect width="100" height="100" rx="22" fill="#ffffff"/>(白角丸背景)を削除。透過背景でロゴマーク(黒)だけが表示される。Chrome タブで白背景の角丸ボックスが消え、ロゴだけになる。
  • 編集: index.html(script追加・コメント+?v= bump)・client_index.html?v= bump)・icons/favicon.svg(rect除去)・lib/linkedin_ops.js(5箇所:<style>挿入・_laRender置換・インライン編集ヘルパー3関数挿入・詳細モーダル業種chained化・_laSaveDetailの業種保存3点化)・lib/manual.js(changelog 3件追記)。新規: lib/salesnow_industries.js(scale-lead からコピー・316行・約12KB)。scale-lead / scale-base は無変更
  • バックアップ ~/terasu-backups/terasu_2026-05-23_pre-li-batch3.tar.gznode --check 全OK・本番 HTTP 200・?v=20260523d 配信・lib/salesnow_industries.js 配信 200・linkedin_ops.jsSALESNOW_INDUSTRIES/_laInlineEdit/_laInlineEditIndustry/ld_imj 配信・favicon.svg の白fill rect 0件・/api/data 401維持を確認。
  • 注意: changelog 追記時に backtick (\``) を使ってしまいnode --checkで SyntaxError。lib/manual.js` の body_markdown は外側テンプレートリテラル — backtick 厳禁ルールを破った。即修正してリリース。過去複数回事故 / グローバルルールで明示禁止。今後も最優先で意識。

2026-05-23 (続き2) — LinkedIn運用4点改修+NAV「管理」事業本部限定(v=20260523c・デプロイ済)

大串FB4件を一括対応。

  • LinkedIn アカウント管理 一覧カード — owner表示削除: renderLinkedInAccounts のカード上部に出ていた owner: 〇〇 表記を撤去。役職 (a.title) が登録されていればそれだけ表示する形に簡略化(個人名はカード視認の本質情報ではないため)。
  • LinkedIn アカウント編集モーダル — プロフィール欄を textarea化: 「プロフィール (ヘッドライン)」を <input>(1行)から <textarea rows="3">(拡張可・自己紹介欄と同型)に変更。CMO肩書きやサービス紹介を含む長文(例: ㍿SCALE CMO|『いいHPは、事業を照らす』|中小企業向けHP制作「TERASU」|…)を入力できるように。
  • LinkedIn分析レポート — フィルタ拡充: renderReportLinkedIn に 期間フィルタ(全期間/直近30日/90日/半年/カスタム範囲)・集計粒度切替(日次/週次/月次)・アカウント別フィルタ を追加。window._liRptFilter をグローバル状態に。集計対象の requests/approved/data を期間+アカウントで先に絞り込み、KPI・ファネル・ステータス分布・担当者別実績・セグメント別/業種別アポ率 すべてが選択期間の数字に。週次推移テーブルは粒度バケットベース集計 (_dlBuckets(F.gran) + _dlPeriodStats) に切替(粒度を変えると 日/週/月 でリラベル)。カスタム範囲時は from/to 日付入力を表示。
  • NAV再編: core.js NAV_ITEMS.common から「メンバー」項目を取り出し、NAV_ITEMS.admin に追加(設定の直下)。buildNavSections の管理グループ表示判定を isAdmin() ロールベースから pos === 'hq' ポジションベースに変更。これで 事業本部(hq) ポジション選択時のみ「管理」グループが見える(PMやマーケに切替えると非表示)。
  • 編集: lib/linkedin_ops.js(owner削除1件・headline textarea化・renderReportLinkedIn のフィルタ状態/絞込ロジック/UIカード/byPeriod 集計)・core.js(common から members 除去・admin に members 追加・admin ゲート pos==='hq' 化)・lib/manual.js(changelog 5件追記)・index.html(コメント+?v= bump)・client_index.html?v= bump)。scale-lead / scale-base は無変更
  • バックアップ ~/terasu-backups/terasu_2026-05-23_pre-li-batch2.tar.gznode --check linkedin_ops.js core.js manual.js OK・本番 HTTP 200・?v=20260523c 配信・linkedin_ops.js_liRptFilter / textarea id="acc_headline" 配信・core.js admin ゲート pos === 'hq' 1件・旧 isAdmin() ゲート 0件・/api/data 401維持を確認。

2026-05-23 (続き) — LinkedIn アカウント編集モーダル ラベル短縮(v=20260523b・デプロイ済)

大串FB「繋がり申請の方法のSalesNowの方は()は不要で、そんな長文じゃなくても伝わるから」を受け、lib/linkedin_ops.jsshowLiAccModal ドロップダウン option ラベルを短縮。

  • >SalesNow CSV方式(リスト取込→申請)</option>>SalesNow</option>manual 側(「LinkedIn繋がりから手動」)は大串の指示外のため未変更。
  • 編集: lib/linkedin_ops.js(1行)・lib/manual.js(changelog)・index.html(コメント+?v= bump)・client_index.html?v= bump)。scale-lead / scale-base は無変更
  • バックアップ ~/terasu-backups/terasu_2026-05-23_pre-li-label.tar.gznode --check OK・本番 HTTP 200・?v=20260523b 配信・linkedin_ops.js に新ラベル「SalesNow」配信を確認・/api/data 401維持。

2026-05-23 — セクション棚卸し第3弾の残課題2件を対応(v=20260523a・デプロイ済)

2026-05-22 のセクション棚卸し(第3弾)で積み残した2件を処理。

  • 孤立した死にコードの掃除: 2026-05-21 棚卸し第2弾で NAV から外れたまま index.html の script タグだけ残って読み込まれ続けていた6ファイルを削除。各ファイルの全 export シンボル(render関数+補助関数+const)を terasu 全体で grep し、6ファイル外からの呼び出しがゼロであることを確認した上で削除: lib/pm_dashboard.jslib/worker_ranking.jslib/badges.jslib/mentor.jslib/worker_skill_map.jslib/resources_external.jsindex.html の script タグ6件・core.js renderPage の R-map エントリ6件(pm_dashboard / worker_ranking / skill_map / badges / mentor / resources_external)を除去。あわせて lib/alerts.js markAlertRead に残っていた旧ページID参照 currentPage === 'pm_dashboard' の死に分岐(pm_dashboard 削除で到達不能)と、index.html の空になった v2.2 セクションコメントも除去。
  • renderContracts の旧ステータス参照バグ修正: pages.js renderContracts(契約・請求・案件未選択時の全案件契約一覧)の月額MRR判定が旧ステータス値 p.status==='live' を参照しており、live は現行 canonical では使われず(normalizeStatusdelivered に変換される)MRR列が常に - 表示になっていた。normalizeStatus(p.status)==='delivered' に修正。同関数内の一覧テーブルのステータス列も raw な p.status 表示から statusLabel(p.status) 表示に統一。
  • 編集: core.js(R-map 6エントリ除去)・lib/alerts.js(死に分岐除去)・pages.js(renderContracts 2箇所)・lib/manual.js(changelog)・index.html(script6件+v2.2コメント除去・?v= bump)・client_index.html?v= bump)。削除: lib/pm_dashboard.jslib/worker_ranking.jslib/badges.jslib/mentor.jslib/worker_skill_map.jslib/resources_external.jsscale-lead / scale-base は無変更
  • バックアップ ~/terasu-backups/terasu_2026-05-23_pre-deadcode-cleanup.tar.gz。編集した4 .js を node --check OK・本番 HTTP 200・?v=20260523a 配信・/api/data 401維持・本番HTMLに死にファイル参照ゼロを確認。

2026-05-22 (続き4) — セクション棚卸しの取捨選択を完了(v=20260522l・デプロイ済)

大串の指示「棚卸しの取捨選択を完了」を受け、セクション棚卸しノートが大串判断待ちにしていた6セクションを処理。

  • 削除(モック実装): ai_image_gen.js(AI画像生成・Unsplash固定URLを返すだけ)と ai_video_gen.js(AI動画生成・存在しないモックURLを返すだけ)をファイルごと削除。実生成APIを持たず、実装には外部サービス(DALL-E/Sora等)の契約が必要なため。index.html の script タグ・core.js の R-map・PROJECT_PAGES 配列からも除去。
  • 修正して復活(データ不整合の実機能): 旧データスキーマ依存で機能していなかった4セクションを実データに合わせて修正。
  • progress_gantt.js(全案件ガント): _statusColor を canonical 9ステータスに書き換え normalizeStatus() を適用。存在しない scheduled_launch 参照を除去、closed系(未商談/失注/解約)を除外、ステータス表示を statusLabel() に。
  • revenue_forecast.js(売上予測): 確定判定を delivered、見込判定を contracted/kickoff/production に修正(旧 design/coding/review はヒットせず売上が欠落していた)。計上月を live_at||deadline に、金額を案件スコープ契約データ proj_<id>_contractinitial/monthly 参照に。
  • resource_planning.js(リソース計画): 存在しないフィールド(production_worker/assignee/workers)を実フィールド worker/pm に修正。scheduled_launch 除去、未アサイン判定を canonical closed 除外に。
  • client_archive.js(クライアントアーカイブ): 調査の結果データ的には正常稼働と判明(p.client/created_at/industry は実在・proj_キーも正しい)。raw ステータス表示を statusLabel()+バッジクラスに修正。
  • NAV復帰: core.js NAV_ITEMS に mgmt グループ(「経営・計画」: 全案件ガント/売上予測/リソース計画/クライアントアーカイブ)を新設。POSITION_SECTIONS の hq・pm に追加(全社経営・PM管理ビューのため。マーケは非対象)。R-map の4エントリは既存を流用。
  • 4セクションの絵文字を除去し他ページのスタイルに統一。
  • 編集: lib/progress_gantt.jslib/revenue_forecast.jslib/resource_planning.jslib/client_archive.jscore.jsindex.htmlclient_index.htmllib/manual.js(changelog)。削除: lib/ai_image_gen.jslib/ai_video_gen.jsscale-lead / scale-base は無変更
  • バックアップ ~/terasu-backups/terasu_2026-05-22_pre-section-triage.tar.gz。全 .js node --check OK・本番 HTTP 200・?v=20260522l 配信・/api/data 401維持を確認。

2026-05-22 (続き3) — Slack連携を追加(v=20260522k・デプロイ済)

大串FB「受注で案件Slackグループ自動作成+関係者招待 / 契約報告グループへ自動投稿」を受け、SCALE CRM lib/pagecore_slack.js(1164行) の Slack API 部分を移植。

  • 新規ファイル: functions/api/slack/proxy.ts(Slack Web API プロキシ・CORS回避)+lib/slack_ops.js(229行・連携ロジック+設定UI)。
  • 受注フック: 案件ステータスが「契約締結」(contracted)へ遷移したら tsProjectContracted() 発火 — ①案件専用Slackプライベートグループ作成(チャンネル名=クライアント名slug)+制作担当(worker)/PM(pm)/大串 を招待 ②契約報告グループ(C0B1Y76UVJ7)へ契約報告を自動投稿。冪等(project.slackChannelId/contractReported フラグ)。フックは updateProjectStatus(pages.js・カンバン) と updateProject(core.js・編集モーダル) の両方に配線。
  • 設定: D1 グローバルキー slack_configbotToken/contractChannelId)。NAV 管理グループに「Slack連携」追加→renderSlackSettings(Bot Token・契約報告チャンネルID入力・接続テスト・メンバーSlack ID一覧)。
  • メンバー管理: 編集モーダルに「Slack User ID」欄を追加(saveTerasuMemberslackUserId 保存)。
  • 編集: functions/api/slack/proxy.ts(新規)/ lib/slack_ops.js(新規)/ core.js(NAV・R-map・受注フック)/ pages.js(メンバーSlack ID欄・受注フック)/ lib/manual.js / index.htmlscale-lead / scale-base は無変更

連携を有効化するには大串の設定が必要: ①設定→Slack連携 で Slack Bot Token(SCALE CRM と同ワークスペースの xoxb-...)を登録 ②メンバー管理で各メンバーの Slack User ID を登録。揃うまで受注フックは「未設定」toast を出すのみ(本番影響なし)。

2026-05-22 (続き2) — タスク管理機能を追加(v=20260522j・デプロイ済)

大串FB「タスク管理シートだけ SCALE Base の中身そのまま反映。作業報告は不要」を受け、SCALE Base のタスク管理シートを Vanilla JS で移植。

  • 新規ファイル: lib/task_core.js(基盤・データ層/ヘルパー/定数/推定ピッカー)+lib/task_mgmt.js(タスク管理シート=SCALE Base tasks/listTaskDetailModalNewTaskModal の移植・430行)。
  • 機能: タスク一覧(検索・ステータス/担当者フィルタ・完了表示3切替・列ソート)、セルの直接編集(ステータス/期日/担当者/目安時間)、詳細モーダル(説明・関連リンク複数・コメント・変更履歴)、新規作成、CSV出力。データキー tk_tasks(D1・tk_ 名前空間)。メンバーは TERASU getMembers() を流用。
  • 配線: core.js 共通グループの「タスク」項目を「タスク管理」(tk_tasksheetrenderTkTaskSheet)へ置換・R-map追加。index.htmltask_core.jstask_mgmt.js を追加。
  • 作業報告(Phase 1 で実装した task_worklog.js)は今回不要のため未配線(本番影響ゼロ・ファイルは残置)。旧 renderTaskslib/mtg.js・案件スコープ簡易タスク)は NAV から外れ孤立(無変更で残置)。

残: Slack連携2件 — ①受注時に案件Slackグループ自動作成+制作担当/PM/大串を自動招待 ②受注時に契約報告グループへ自動投稿。SCALE CRM lib/pagecore_slack.js(1164行) に類似機能あり(手動ボタンで案件チャンネル作成)。実装には Slack Bot Token・契約報告チャンネルID・メンバーのSlack User ID が必要(大串に確認中)。受注=ステータス「契約締結」。

2026-05-22 (続き) — LinkedIn運用4点改修(v=20260522i・デプロイ済)

大串FBを受け LinkedIn運用セクション(lib/linkedin_ops.js)を4点改修。

  1. 承認リスト — フィルタプリセットボタンの絵文字を削除(絵文字禁止FB)。
  2. 日次/週次/月次管理 — 旧「週次/月次管理」を拡張。粒度切替(日次14日/週次8週/月次6ヶ月)+アカウント別フィルタ+申請/承認/オファー/返信/アポの推移グラフ・KPIカード・期間別テーブルで見やすく再設計(_dlBuckets/_dlPeriodStats)。
  3. 申請リスト2方式対応 — アカウントに「繋がり申請の方法」(salesnow=SalesNow CSV取込 / manual=LinkedIn繋がりから手動)を追加。手動方式アカウントは申請リストのアカウントタブ上部で直近7日の繋がり申請数を手入力でき、日次/週次/月次集計に自動合算(データキー linkedin_manual_counts{accId:{date:count}}_liAccUsage を方式別に分岐)。
  4. 投稿セクション新設renderLinkedInPosts(データキー linkedin_posts)。LinkedIn投稿を 下書き/予定/投稿済 で管理+インプレ/リアクション/コメント計測。NAV linkedin グループに「投稿」項目追加・R-map配線。

編集ファイル: lib/linkedin_ops.jscore.js(NAV/R-map)・lib/manual.js(changelog)・index.html/client_index.html?v=20260522i)。scale-lead / scale-base は無変更

タスク機能移植は別途進行中(SCALE Base のタスク機能 → Vanilla JS 全面再実装)。Phase 1 = lib/task_core.jslib/task_worklog.js で作業報告8ページ実装済(未配線・未デプロイ)。残: タスク管理11ページ+配線+デプロイ。詳細・引き継ぎ → 00_Inbox/作業ログ_2026-05-22 / /tmp/handoff_terasu_task_phase1.txt

2026-05-22 — 1日で13件の大規模改修(v=20260522ah・全デプロイ済)

本日 TERASU CRM に計13件を実装・全てデプロイ済み。

  1. クライアントポータル enforce 対応functions/api/client/data.ts 新設(招待token単位の projectスコープ認証)。core.js に client モード分岐(_isClientMode/_clientToken/_initClientData)。社外クライアントは te_session 無しで自案件のみ閲覧・操作可。
  2. ロゴ完全再現 — TERASU提供PDFを potrace でベクタートレース。terasu-logo.svg(透過白マーク)/ favicon.svg(白背景+黒マーク)。
  3. 通知ベル削除 + アバター画像機能 — サイドバーの通知ベル撤去。メンバーアイコンのクリックで画像アップロード(256pxリサイズ・member_avatar_<id> 個別D1キーに保存し members 肥大化を回避)。
  4. 案件ステータス9段階化 — リード→提案→契約締結→キックオフMTG→サイト制作→納品済み(正常フロー6)+ 未商談/失注/解約(クローズ3)。案件一覧をカンバン2段(正常=上段・クローズ=下段)。各カードのドロップダウンで全部署が更新→連動。normalizeStatus で旧10段階を吸収。失注=受注前のクローズ/解約=受注後のクローズ。
  5. バージョン表示 v3.0 — 日付ベース表示を APP_VERSION='v3.0' に。更新検知は内部で ?v= 継続。
  6. NAV再編 — 「全社」→「全部署」(ダッシュボード/案件一覧/事業数値レポートの3項目)。アラート一覧→管理グループ、クロスセル提案→新設「PM」グループ。商談パイプラインのステータスを受注前+クローズに限定。
  7. マーケ部署改修 — アカウント管理に役職/プロフィール/自己紹介を追加・4垢一括を廃止。申請・承認リストをアカウント別タブUI化(フィルタ廃止)。文面テンプレのタグ廃止・種類を再編(初回オファー/リマインド/返信・切り返し/商談URL/NG/実績)。
  8. 制作リソース集 → TERASU Lab — 「Knowledge(学習)」グループへ移動・改名(制作部署が参照)。

編集ファイル: functions/api/client/data.ts(新規), core.js, pages.js, lib/workflow.js, lib/linkedin_ops.js, lib/manual.js, index.html, client_index.html, icons/terasu-logo.svg, icons/favicon.svgscale-lead / scale-base は無変更

未了: SCALE Base のタスク機能(作業報告+タスク管理)の TERASU CRM 移植 — 容量のため次セッションへ handoff。

2026-05-21 (続き4) — SCALE CRM LinkedIn運用ページ一式を移植 (v=20260521t)

背景: 大串FB「SCALE CRM のチャネルが LinkedIn になったときに出るページを TERASU CRM でも出したい / 括りを LinkedIn運用 にして / 中身もコピーして全く同じものを実装 / TERASU の集客が LinkedIn運用 がメイン」。制約: SCALE CRM (scale-lead) は一切触らない(そのまま運用継続するため)。

移植内容: SCALE CRM のチャネル=LinkedIn 時に表示される7ページを新ファイル lib/linkedin_ops.js(1,258行)として丸ごと移植。

  • render関数7件: renderLinkedInAccounts(アカウント管理) / renderLinkedInRequest(申請リスト) / renderLinkedInApproved(承認リスト) / renderLinkedInTemplate(文面テンプレ) / renderDailyLinkedIn(週次/月次管理) / renderReportLinkedIn(分析レポート) / renderLinkedInPool(リードプール)。
  • データスコープを案件横断に変更: SCALE CRM では LinkedIn ページは案件スコープ(PD/PS)だが、TERASU の LinkedIn運用=集客は事業全体の活動 → グローバルキー(D/S)へ globalize(PD(D( 82箇所・PS(S( 29箇所)。データキー: linkedin_accounts / linkedin_requests / linkedin_approved / linkedin_templates / daily_linkedin
  • 依存の吸収: v1系の死にコードは落とし v2 のみ採用。callClaudeGWcallClaudegetSvc/showAILoading/Slack/Papa/RANK_METAtypeof ガード。チャート関数(chartDonut/chartSparkline/chartKpiRing/CHART_COLORS)は同梱。
  • 読み込み順: index.htmlai.js より後(script一覧末尾)に配置。linkedin_ops.jsshowAILinkedInGen/execAILinkedInGen が ai.js の不完全版を上書きするため。

配線 (core.js): NAV_ITEMSlinkedin グループ新設(6項目)。renderPage の R-map に7エントリ追加(全て typeof ...==='function' ガード)。POSITION_SECTIONShq/fs/mktlinkedin を追加(pm/prod は集客非該当のため対象外)。

編集ファイル: lib/linkedin_ops.js(新規)、core.js(NAVグループ・R-map・POSITION_SECTIONS)、index.html(script追加・?v=20260521st)、lib/manual.js(changelog)。scale-lead は無変更

稼働確認: 本番 HTTP 200 / linkedin_ops.js?v=20260521t 配信・構文OK・render関数7件 / 認証ゲート 401維持。

2026-05-21 (続き3) — サーバ認証 rewire + ポジション別セクション設計反映

背景: 大串FB「残タスク一気に進めて / SCALE CRM同名セクションで機能が違う部分は再現 / 各部署のセクション設計を添削依頼」。

ポジション別セクション設計(添削確定・v=20260521k 反映済): 設計ドラフトを提示 → 大串の添削回答に基づき POSITION_SECTIONS を再構成。contract(契約・請求)を独立グループ化、internalteam(チーム管理)+common(共通・全ポジション表示)に分割、Knowledge は制作のみ、事業本部はほぼ全グループ。詳細: 31_システム開発部/_SCALE_TERASU_CRM_ポジション別セクション設計

サーバ認証 rewire: Phase 3 完了後の残タスク = client login のサーバ認証 rewire を実施。

実施 (本番デプロイ済 v=20260521j):

  • D1 へ members 初期投入 — D1 に members キーが無かったため、DEFAULT_MEMBERS(大串・細川)を PUT /api/data/members で seed。サーバ認証が members を照合できる前提を整備。
  • サーバ認証の事前検証POST /api/auth/login で大串・細川のログイン成功(200・cookie発行)、誤PWで401、遅延ハッシュ化(大串 passpass●●●●●●)を curl で確認してから client を rewire。
  • client doLogin の rewire — 平文ローカル照合 → /api/auth/login(PBKDF2検証 + 平文fallback + 遅延ハッシュ + HMAC署名cookie te_session)を一次認証に。401(メール未登録/PW相違)はサーバ判定を尊重しエラー表示。503/網絡断/NO_MEMBERS 等インフラ事由のみローカル平文照合にフォールバック → サーバ不達でもロックアウトしない設計。handleLoginSubmit は不変。
  • DATA_AUTH_MODEoff のまま(データAPIゲートは未有効)。理由: ローカルフォールバックでログインした場合は te_session cookie が無く、enforce にすると /api/data が 401 → アプリ全体が停止するため。データAPIゲートは別途の慎重判断事項。

編集ファイル: core.jsdoLogin をサーバ認証化)、index.htmlv=20260521j)、lib/manual.js(changelog)。D1: members キー新規投入。

未確認: ブラウザでの実ログインは未検証(サーバエンドポイントは curl で検証済・client は構文チェック済・フォールバックで大串/細川は確実にログイン可)。次回ブラウザで実ログイン確認推奨。

2026-05-21 (続き2) — SCALE CRM 準拠リファイン (バージョン機構 / メンバー / 絵文字)

背景: 大串FB「SCALE CRM とバージョン更新位置・方式が違う・全く同じにして / 設定・メンバー管理も SCALE CRM を真似して100%再現 / セクション名の絵文字を全部削除しアイコンに統一」。SCALE CRM (scale-lead) を正本に TERASU CRM を寄せる。

実施 (本番デプロイ済・2増分):

  • バージョン機構の同型化 (v=20260521h) — バージョンバッジを SCALE CRM と同じ「サイドバー最下部(フッターの下)」へ移設。#appVersionBadge / #appVersionBadgeText / #appVersionStatePill 構成。最新=緑「✓ 最新」(クリック=更新履歴モーダル) / 非最新=橙「クリックで更新」(クリック=安全リロード)。showTerasuVersionHistory 追加(changelog を MANUAL_SEED から表示)。renderVersionBadge を SCALE CRM _renderVersionBadgeState 同型に刷新。
  • NAV 絵文字削除 (v=20260521h) — NAV_ITEMS のセクション名3件・項目ラベル29件から絵文字を削除し SVG アイコンに統一。pages.js 汎用ページのページタイトル絵文字も削除。
  • メンバー管理 SCALE CRM 同型化 (v=20260521i) — テーブル型 → カード型UI(.member-card / .member-avatar / .member-info・既存CSS流用)。追加/編集を単一モーダル showTerasuMemberModal(m,idx) に統合(SCALE CRM showMemberModal 同型)。saveTerasuMember(idx) で add/edit 兼用、updateTerasuMember 廃止。ポジション/タイプ/時給をカードに表示。
  • 設定 — Phase 3-6 で既に SCALE CRM 同型のカード構成(システム / AI設定 / データ管理 / 容量モニタ / About)に刷新済。今回はページタイトルの絵文字を削除。SCALE CRM 固有カード(Slack / teleapo-linkedin 権限 / 営業チャネル設定)は TERASU のドメインに非該当のため移植せず。

編集ファイル: core.js(NAV絵文字削除・renderVersionBadge 刷新・showTerasuVersionHistory 追加)、index.htmlversionBadgeappVersionBadge をフッター下へ移設・v=20260521i)、pages.jsrenderMembers カード化・showTerasuMemberModal/saveTerasuMember 統合・ページタイトル絵文字削除)、lib/manual.js(changelog)

未実施 (残タスク・要注意): client login のサーバ認証 rewire。/api/auth/* は実装済だが client は平文 doLogin のまま。サーバ認証を本番で有効化すると、不具合時に誰もログインできないロックアウトリスクがある(D1 に members 未投入=前提未充足)。本番ログインを即時検証できる体制で個別セッションで実施すべき。

2026-05-21 (続き) — Phase 3完了: 設定/メンバー/掃除/GAPセクション (3-6〜3-9・2増分)

背景: 同日午後の引き継ぎで Phase 3-6〜3-9 を継続。これで事業OS化(全9フェーズ)が完了し、TERASU CRM は HP制作事業の全業務プラットフォームとして稼働。

実施 (全て本番デプロイ済 v=20260521g):

  • 3-6 設定セクション拡充renderSettings を全面刷新。システム状態カード(バージョン / リアルタイム同期稼働状態 / 最終同期時刻 / 書込み待機キー数 / ユーザー / ポジション / 案件・メンバー数)、forceD1Resync(D1から全件再取得)、_renderTerasuCapacityMonitor(localStorage使用量モニタ・admin専用)、AI設定統合、データ管理。ステール表記「Supabase同期」を撤去。
  • 3-7 メンバーのポジション付与UIrenderMembers にポジション列を追加。追加/編集モーダルに5ポジションのチェックボックス(_positionCheckboxRow / _readMemberPositions)、一覧にポジションバッジ(_memberPositionBadges)。これで 5ポジション制が team で運用可能に。
  • 3-8 死にコード削除_onRemoteChange(呼出ゼロ)、_migrateToSupabase_sb=null で即return の no-op・呼出2箇所も削除)、getProjectChannel(呼出ゼロ)を core.js から削除。ai.js の壊れた navigateTo('linkedin_template') ボタンを撤去。
  • 3-9 GAPセクション新規構築 — マーケダッシュボード(renderMktHub・獲得ファネル / 今月リード / CVR / マーケ資産導線)と商談パイプライン(renderFsPipeline・ステージ別カンバン / 受注転換率 / 今週の納期)を新規構築。NAV: marketing 群を新設し mkt/hq に割当、fs_pipelinesales 群に追加。POSITION_SECTIONS / POSITION_LANDING 更新(mkt着地=mkt_hub、fs着地=fs_pipeline)。経営(hq)は既存の global + v23(finance/forecast/gantt) で経営視点が揃っているため、新設の marketing/sales 群を hq にも割当てる形でカバー(重複ページを作らない判断)。

編集ファイル: pages.js(renderSettings刷新・renderMembers/メンバーモーダル・renderMktHub/renderFsPipeline 新規)、core.js(NAV_ITEMS に marketing群 + fs_pipeline・POSITION_SECTIONS/LANDING・renderPage R map・死にコード削除)、ai.js(壊れたボタン撤去)、index.htmlv=20260521g)、lib/manual.js(changelog)

2026-05-21 — D1移行 + 5ポジション切替 + リアルタイム同期 (大規模改修・6増分)

背景: 大串方針「TERASU事業の全業務を TERASU CRM 単体で完結させる(事業OS化)」。SCALE CRM の蓄積を移植 + 5ポジション切替制を新規構築。

実施 (全て本番デプロイ済):

  1. D1+Functions バックエンド基盤 — D1 terasu-crm-prod 作成、スキーマ(app_data / member_rows / project_rows)、Functions(/api/data KV API・/api/migrate)。
  2. サーバ認証functions/_lib/auth.ts(PBKDF2 100k + HMAC署名cookie te_session)、/api/auth/{login,me,logout,set-pass●●●●●●}functions/_middleware.ts※エンドポイントは実装済だが client login は未rewire(まだ平文 doLogin)。DATA_AUTH_MODE=off
  3. データ層 Supabase→D1 切替 — core.js の _initSupabase/_syncToSupabase_initD1/_syncToD1/_seedD1FromLocal に置換。Supabase SDK除去。重要発見: TERASU CRM の Supabase テーブル terasu_app_data は元々未作成 → 起動(2026-04-17)以来 localStorage のみで稼働していた。D1初回シードを大串ブラウザの localStorage から実施(4キー: demo_catalog/manual_sections/finance_snapshots/alerts_state)。
  4. 5ポジション切替 — 事業本部/PM/FS/マーケ/制作。POSITIONS/POSITION_SECTIONS/POSITION_LANDINGswitchPosition、サイドバー上部のプルダウン(renderPositionSwitcher)、buildNavSections をポジションでフィルタ、メンバーに positions[] フィールド。
  5. アップデート検知_initVersionWatcher/_checkAppVersion、サイドバー左下のバージョンバッジ(renderVersionBadge・クリックで最新版リロード)。
  6. リアルタイム同期 — 8秒ごと /api/data?since= 差分ポーリング(_pollD1/_applyRemoteChanges)。他メンバー/他端末の変更を自動反映。書込み中キー(_pendingKeys)保護・入力中は再描画見送り。

新規ファイル: wrangler.toml, schema_d1.sql, functions/_lib/{cors,auth}.ts, functions/_middleware.ts, functions/api/data/{[key],index}.ts, functions/api/migrate.ts, functions/api/auth/{login,me,logout,set-pass●●●●●●}.ts

編集ファイル: core.js(データ層→D1・ポジション系・バージョン監視・ポーリング)、index.html(Supabase SDK除去・positionSwitcher/versionBadge追加・v=20260521e)、ai.js(DB接続カード→D1表記)、lib/manual.js(changelog)

Supabase: プロジェクト scale-base を大串が削除。TERASU CRM・SCALE Base とも不使用を検証済(SCALE Base は D1 scale-base-db)。

2026-05-04以前 — 改名・機能拡張履歴 (要約)

  • 2026-05-04: TERASU 案件管理 → TERASU CRM 改名、本番URLを crm.terasu.scale-group.co.jp へ移行
  • 2026-04-17〜04-29: v1.0 ローンチ → v1(25機能) → v2(約30機能) → v2.2(バッジ/メンター) → v2.3(9機能) → v2.4(初期プロンプトジェネレーター)
  • 詳細は過去の 00_Inbox/作業ログ_* 参照

残タスク

Phase 3(事業OS化・全9フェーズ)完了 + サーバ認証 rewire 完了(2026-05-21)。

項目 状態
SCALE Base タスク機能(作業報告+タスク管理)の移植 進行中(2026-05-22 Phase 1完了)— 大串方針「全機能を忠実に作り切る」。SCALE Base=React→TERASU=Vanilla の全面再実装(約16,000行規模・複数セッション)。Phase 1: lib/task_core.js(664行・基盤)+lib/task_worklog.js(2,373行・作業報告8ページ)実装済。未配線・未デプロイ。残: タスク管理11ページ(lib/task_mgmt.js)+core.js/index.html配線+一括デプロイ。詳細→ 00_Inbox/作業ログ_2026-05-22
ブラウザ実ログイン検証 未 — 各機能の実機ログイン確認(curl検証は本日も実施済)
クライアントポータル enforce 対応 2026-05-22 完了(/api/client/data 新設・projectスコープ認証)

2026-05-21 完了: 認証ゲート enforce / 全ページ絵文字スイープ / 死にコード掃除(renderProjectOverview・renderManualPage・saveOverview・clearProjectDemo)/ MTG系セクションの SCALE CRM 機能移植(ゴミ箱化・議事録構造化・MTG→議事録転記)。

ポジション別セクション表示の設計は 2026-05-21 添削完了・v=20260521k で反映済 → 31_システム開発部/_SCALE_TERASU_CRM_ポジション別セクション設計


保護資産 (絶対変更禁止)

  • core.js の NAV構造 (NAV_ITEMS 全グループ)
  • core.jsD / S / PD / PS のシグネチャ (実装は D1経由・上位コードはこれに依存)
  • core.js の認証フロー (handleLoginSubmit, doLogin, doLogout)
  • localStorage prefix te_ / BroadcastChannel terasu_sync
  • D1データベース terasu-crm-prod / Cloudflare Pages プロジェクト名 terasu-mgmt (リネーム不可)
  • wrangler.toml の D1 binding DB / AUTH_SECRET

復元・デプロイコマンド

# 最新バックアップから復元
cd /Users/oogushiyuuki/株式会社SCALE/hp/
tar -xzf ~/terasu-backups/terasu_2026-05-21_<TAG>.tar.gz

# デプロイ (terasu ディレクトリで実行・wrangler.toml が name/D1 binding を持つ)
cd /Users/oogushiyuuki/株式会社SCALE/hp/terasu
npx wrangler pages deploy --branch=main --commit-dirty=true

# 本番URL確認
curl -I https://crm.terasu.scale-group.co.jp/

# D1スキーマ適用
npx wrangler d1 execute terasu-crm-prod --file=schema_d1.sql --remote

報告ルール

  • 本番URL報告 → 必ず https://crm.terasu.scale-group.co.jp/
  • 旧URL terasu-mgmt.pages.dev / ハッシュ付き preview URL は送らない
  • コード変更後は必ずデプロイ + index.html?v= bump
  • Memory: feedback_terasu_crm_url.md / project_terasu_crm_allinone.md 参照

関連ノート