概要
永続フィードバックが location.href 完全一致縛りのため、ハッシュ/クエリ変化やリダイレクト後の再読込で復元できず、最終的に silent に失われる。
詳細
- 場所:
widget/src/index.js:853-860, 828
isMatchingFeedbackEnvelope が value.pageUrl !== window.location.href を不一致条件にし(L858)、保存側も pageUrl: window.location.href を書く(L828)。
location.href は hash(#section)・query(?utm=...)まで含むため、保存後に同一ページ内のアンカーナビ・クエリ付与・正規化リダイレクトが起きると、次回 init で envelope 不一致と判定され復元されない。
- さらにその後の任意のフィードバック操作で
persistFeedbackList() が新しい pageUrl の envelope で旧データを上書きし、アクセス不能化する(silent data loss)。同一セッション中(再読込なし)は in-memory state が残るため、再 init を跨いだ次回ロードで顕在化。
projectId/demoId で既にスコープ済みなので、URL 比較は過剰に厳格。
修正方針
- 比較キーを正規化する(
origin + pathname のみ、最低でも hash を無視)。
受け入れ条件
- hash/query 変化後の再読込でフィードバックが復元される。
出典: 全体監査(2026-06-20)で検出し、独立検証で実在確定(Medium・silent data loss / confidence high)。
概要
永続フィードバックが
location.href完全一致縛りのため、ハッシュ/クエリ変化やリダイレクト後の再読込で復元できず、最終的に silent に失われる。詳細
widget/src/index.js:853-860, 828isMatchingFeedbackEnvelopeがvalue.pageUrl !== window.location.hrefを不一致条件にし(L858)、保存側もpageUrl: window.location.hrefを書く(L828)。location.hrefは hash(#section)・query(?utm=...)まで含むため、保存後に同一ページ内のアンカーナビ・クエリ付与・正規化リダイレクトが起きると、次回 init で envelope 不一致と判定され復元されない。persistFeedbackList()が新しいpageUrlの envelope で旧データを上書きし、アクセス不能化する(silent data loss)。同一セッション中(再読込なし)は in-memory state が残るため、再 init を跨いだ次回ロードで顕在化。projectId/demoIdで既にスコープ済みなので、URL 比較は過剰に厳格。修正方針
origin + pathnameのみ、最低でも hash を無視)。受け入れ条件