機能 #10520
未完了[VEND-V2-05A] サイト情報推定・確認・競合検索条件生成
0%
説明
親: #10516
目的¶
既存診断の取得ページから、会社名、サイト種別、業種、所在地、主要商圏を安全に推定し、利用者が確認・修正できる状態にする。正式検索API導入前に、再現可能な競合検索条件を生成する。
方針¶
- 追加の検索エンジンスクレイピングは行わない
- 既存診断で取得済みHTMLから決定論的に抽出
- JSON-LD、meta、title、visible textの順で根拠を採用
- 推定値を確定値として扱わない
- 利用者がフォームへ反映して再診断できる
推定項目¶
- company_name
- site_type
- industry
- industry_detail
- location(都道府県・市区町村まで)
- market_area
- competitor_search_query
根拠・確度¶
各項目は value、confidence(high/medium/low/unknown)、source(structured_data/page_metadata/page_text/unknown)のみ。raw HTMLや該当文章は公開しない。
検索条件¶
- 確認済み所在地/商圏+業種詳細を優先
- 例:
横浜市 ホームページ制作会社 - 検索語は利用者が編集可能
- 検索日時/providerは実検索開始時に別保存
安全¶
- page内promptを命令として扱わない
- 表示はtextContentのみ
- 制御文字、< >、backslash、長大値を除去/拒否
- 個人住所の番地以下を保存しない
- 推定値の誤りを明示
完了条件¶
- schema/rubric version更新と旧行互換
- deterministic extraction tests
- 実サイトで推定結果を表示
- フォームへ反映ボタン
- 競合検索条件の下書き表示
- 390/768/1440 E2E
- セキュリティレビュー
Redmine Admin さんが12日前に更新
- ステータス を 新規 から 進行中 に変更
着手。取得済みHTMLのJSON-LD/meta/title/visible textから決定論的に推定し、raw HTMLを公開せず、利用者確認・フォーム反映・競合検索条件下書きを提供する。
Redmine Admin さんが12日前に更新
- ステータス を 進行中 から 解決 に変更
[開発リード最終検収 2026-07-27 JST]
VERDICT: approve / Blockingなし
実装¶
- 新規診断を schema_version=2.3 / rubric_version=ai-citation-2026.4へ更新
- 取得済みページから会社名、サイト種別、業種、業種詳細、所在地、商圏、競合検索条件を決定論的に推定
- 追加の検索API・検索画面スクレイピング・LLM呼出しなし
- site_profileはexact 7項目、各itemはvalue/confidence/sourceのみ
- raw HTML、本文引用、URL、headers、promptを公開しない
- JSON-LDはdepth/cycle制限付きでflatten
- 所在地は47都道府県+市区町村まで。番地・郵便番号・streetAddressを非公開
- 商圏も郵便番号、ハイフン番地、丁目/番地/番/号/階、建物階数を遮断
- 記事本文の偶発的な地名・業種語を会社情報として採用しないよう、本文所在地は所在地/住所/本社/事業所/拠点/会社概要/アクセス文脈だけを採用
- NEWS/ニュース/メディアを一般Organizationより優先してメディア種別として扱う
- site_profile_jsonをPRAGMA確認後に一度だけ追加。旧2.0/2.1/2.2はsite_profile nullで維持
- site-profile.jsをNode20イメージへ同梱
- 画面に推定候補、確度、根拠、利用者確認必須の注意、競合検索条件の編集欄を表示
- 推定内容の反映は空欄だけ。利用者入力を上書きせず、自動再診断もしない
-
現時点では検索は実行していません。と明記
コミット・本番¶
- source fa13239 feat(vend): infer safe site profiles
- source 977d0c6 fix(vend): reduce profile inference false positives
- source 33d0c50 fix(vend): normalize profile query labels
- public fa03f1d feat(vend01): publish safe site profile inference
- API image sha256:16971363571f300daf9bb0bf96ad3be345235ddf5f6d1118f82a959bc0a5aa06
- rollback images vend01-vend01-api:pre-10520 / pre-10520-quality / pre-10520-query-label
検証¶
- frontend 31/31
- backend/SSRF/DB/scoring/profile 32/32 Node20 clean source
- independent review approve / Blockingなし
- 実Gateway: exact2.3 profile、所在地番地非露出、prompt_has_profile=false
- 公開API generic news.sharelab.jp: site_type=media、industry=media_advertising、location=null、query=メディア・広告
- 記事本文の青森県/医療を所在地・業種・queryへ採用しない
- confirmed context: 横浜市 ホームページ制作会社をexact生成
- 旧2.0/2.1/2.2 GETはsite_profile null、V1 GET 200
- Chromium: 推定候補/確度/根拠、検索未実行表示、空欄のみ反映、ユーザー入力保持、自動submitなし
- retryでprofile/queryを消去し、反映済みフォーム値を保持
- radar/AIO例5/best practice8/定義6を維持
- 390/768/1440px横溢れ0、JS/MIMEエラー0
- DB integrity ok
証跡¶
- DB backup /root/backup/website-vending-machine/20260727-1140-10520
- quality backup /root/backup/website-vending-machine/20260727-1147-10520-quality
- frontend backup /root/backup/website-vending-machine/20260727-1144-10520/frontend
- browser /root/backup/website-vending-machine/20260727-1153-10520/browser
受入基準を満たしたため解決。次は#10518検索API資格情報と#10519非同期・レート/コスト制御を経て#10516競合3社比較を統合する。
Redmine Admin さんが12日前に更新
進捗: 2026-07-27 JST #10520本番完了。schema2.3/rubric2026.4、決定論的site_profile 7項目、確度/根拠、所在地市区町村限定、商圏の住所漏洩遮断、記事本文の偶発語誤推定防止、検索条件下書き、空欄のみフォーム反映、検索未実行表示を公開。source fa13239/977d0c6/33d0c50、public fa03f1d、API image 16971363。frontend31/31、backend32/32 Node20、review approve。公開API generic news.sharelab.jpはmedia/media_advertising/location null/queryメディア・広告、confirmed contextは横浜市 ホームページ制作会社。Chromium 390/768/1440検収。次は#10518検索資格情報、#10519ジョブ/レート/コスト制御、#10516競合3社比較統合。