ソースコード読み取り結果 (kashi/src/app/app/mirror/[managerId]/page.tsx) および
canon 文書 (permanent-ui-principles.md, DATA_VISIBILITY_MATRIX.md, CANONICAL_PRODUCT_TRUTH.md) に基づく。
スクリーンショットは Round 1 の skip 判断により未参照。
/app/ceo に向いており、Manager が自分の mirror を見る際のコンテキストが不明確。DATA_VISIBILITY_MATRIX.md §3)DATA_VISIBILITY_MATRIX.md §4)DATA_VISIBILITY_MATRIX.md §4)DATA_VISIBILITY_MATRIX.md §3)| # | Ref | URL | Archetype | 取得方法 / 調査ソース |
|---|---|---|---|---|
| R1 | Lattice 1on1 | https://lattice.com/performance/one-on-ones | Manager-employee 1on1 継続記録 + reflection | WebFetch (2026-05-27), WebSearch, マーケティングページ + help docs |
| R2 | 15Five Check-ins | https://success.15five.com/hc/en-us/articles/360002698971-Check-ins-Feature-Overview | 週次 check-in / manager review 5 分フロー | WebFetch (2026-05-27), Help center ドキュメント |
| R3 | Linear (redesigned UI) | https://linear.app/now/how-we-redesigned-the-linear-ui | 高密度 issue tracker / sidebar IA / 情報密度 vs whitespace | WebFetch (2026-05-27), 公式ブログ (Linear team) |
| R4 | Vercel Dashboard | https://vercel.com/blog/dashboard-redesign | Status-first card grid / progressive disclosure / role-split | WebFetch (2026-05-27), 公式ブログ (Vercel team) |
| R5 | Stripe Dashboard | https://docs.stripe.com/dashboard/basics | Financial metrics card / sparse KPI → detail drill-down | WebSearch + Orbix Studio analysis (2026-05-27), 公式 docs + UX analysis |
| R6 | HiManager (ハイマネージャー) | https://himanager.me/1on1 | 日本 B2B / 1on1 マネージャー機能 / OKR + weekly survey | WebSearch + SaaS比較サイト (2026-05-27) |
選定理由: R1/R2 は reflection-driven manager dashboard の直接的 archetype (私的な振り返り + チームへの介入ではなく自己改善)。 R3/R4 は情報密度・sidebar IA・progressive disclosure パターンのリファレンス。 R5 は sparse metric card + sparkline + drill-down パターン (Kashi の MetricCard 系に最も近い)。 R6 は日本市場 B2B SaaS かつ 1on1 中心のマネジメントフローで Kashi のターゲット文脈に最も近い。
各パターンは独立して ≥3 refs で確認済み。単一 ref 観察のパターンは §4 (弱信号) へ。
| 強信号 P1 Summary-first / 数値より解釈を先に見せる | |||
|---|---|---|---|
| Pattern 説明 | Kashi 現状の課題との対応 | 観察 refs | Kashi 互換性 |
|
KPI サマリー → 詳細 という 2 層構造 最初の viewport に「今期の状態を 1 行で表す文章 or 単一ステータス」を置き、 数値グリッドはその下に畳む。 Stripe: "revenue + sparkline" が fold 上、詳細は never more than 2 clicks away。 Vercel: "Production deployment status (1 badge)" が fold 上、ログは drill-down。 15Five: Manager が最初に見るのは pulse の概要 ("全員が check-in 済み / 未" 行)、個別回答は次ステップ。 Orbix/B2B SaaS analysis: "Primary metrics require no more than one click from dashboard home. If users cannot identify the most important number in under 10 seconds, the hierarchy needs revision." |
現在の mirror-me は MetricCard が 6 枚 + チャート 2 枚 + リスト 3 系統 + GracePeriod + Positive が 縦スクロールで同一重みで並列している。 「今週の自分に最重要なシグナルはどれか」が一目でわからない。 これは Kashi のコア価値「longitudinal 構造を manager 自身が解釈できる」を損なう。 | Stripe (R5), Vercel (R4), 15Five (R2), Orbix/B2B analysis — 4/6 |
✓ 直接適用可 Kashi では「Evidence Grade」が既に summary-level signal として存在する ( BLOCKED / INSUFFICIENT / WEAK / EMERGING / STABLE / HIGH_CONFIDENCE_STABLE)。
これを fold 上の 単一ステータスバナー として最優先で見せ、
MetricCard 群はその下の "詳細" 層に配置するだけで構造的に解決できる。
permanent-ui-principles.md §7 の "Default visible layer: one headline / one short explanation / 3-5 cards / one primary CTA" と完全一致。 canon が既にこの構造を要請している — 実装が追いついていないだけ。 |
| 強信号 P2 時系列 / 観測ウィンドウの明示と文脈の固定 | |||
|---|---|---|---|
| Pattern 説明 | Kashi 現状の課題との対応 | 観察 refs | Kashi 互換性 |
|
「今見ているのは何日分か」を常時表示し、ウィンドウを切り替えたら全カード同時更新 GitHub contribution graph: rolling 12-month window が常にグラフに付記。 Vercel: deployment list は "Production + Preview" の 2 ウィンドウを明示。 15Five: "Check-in for week of YYYY-MM-DD" が見出しに固定。 Lattice: 1on1 ヒストリーが "recent meetings" として時系列で固定。 Stripe analytics: "Last 30 / 90 days" selector が全カードに連動。 |
現在の mirror-me には TimeWindowToggle (30/90/180) は実装済みだが、
MANAGER_MIRROR_WINDOW_AWARE flag = true になっている。
ただし coverage strip と MetricCard が 別々の場所に散在しており、
「何日分を見ているか」という文脈が画面の中で視覚的に統合されていない。
Back-link が /app/ceo を向いており、Manager が自分の mirror として認識できるのも遅い。
|
GitHub (longitudinal self-data design), Vercel (R4), 15Five (R2), Stripe (R5), Lattice (R1) — 5/6 |
✓ 直接適用可permanent-ui-principles.md §5:
"Evidence grade is not a verdict. Every serious signal must show: observed window / data quality status / what this does NOT prove."
— ウィンドウを常時表示することは canon 要求事項そのもの。
permanent-ui-principles.md §9 (Dashboard Rules):
"Every dashboard card must answer: what is shown? who is this about? what window?"
— 現状はウィンドウ情報が coverage strip に隠れており、カード個々に付かない。
実装レベルでは: window badge をページ H1 直下に固定し、全 MetricCard に windowDays prop を既に渡している設計を活かして small "last N days" テキストをカードに付ける。
これは AC-06 (mirror コードコメント内) でも要求されている。
|
| 強信号 P3 正直な empty/insufficient state — 「なぜデータがないか」を説明する | |||
|---|---|---|---|
| Pattern 説明 | Kashi 現状の課題との対応 | 観察 refs | Kashi 互換性 |
|
Empty state = 「理由を言う + 次のアクションを 1 つ示す」 Linear: no-issue state は "All caught up — no open issues" + next action "Browse projects"。 15Five: check-in 未提出の場合 "Your team hasn't submitted yet — reminder sent" という状態説明。 Vercel: 初回 deploy 前は "Deploy your first project" + explicit CTA — blank screen ではない。 Stripe: no-transaction state は "Awaiting your first payment — get started with test mode"。 B2B SaaS general pattern: "Good copywriting is the soul of an effective empty state — replace silence with tone, context, empathy, and direction." |
現在の mirror-me の BLOCKED/INSUFFICIENT 状態は <Info icon> + blockedTitle + blockedBody + reasonCodes list
という構成だが、「次に何をすればいいか」というアクションが欠落している
(empty state では upload CTA が出るが BLOCKED/INSUFFICIENT パスでは出ない)。
また permanent-ui-principles.md §6 の "no signal rule" は
「No qualifying signal ≠ no issue」と明記しているが、
現状のコピーが十分に this-is-why-we-don't-know を伝えているかは
スクリーンショット未取得のため不明 (Round 2 で検証)。
|
Linear (R3), 15Five (R2), Vercel (R4), Stripe (R5) — 4/6 |
✓ 直接適用可 (ただし canon セマンティクス要注意)permanent-ui-principles.md §6 + CANONICAL_PRODUCT_TRUTH.md §4.3:
empty state は "no qualifying signal in this observed window" + 実際の理由
(insufficient meetings / low diarization quality / etc.) を列挙しなければならない。
参照 SaaS の empty state パターン ("All caught up!" 系) は Kashi では使用禁止 — "no problem / all clear / no issue detected" は forbidden wording ( permanent-ui-principles.md §2)。
適用できるのは「理由列挙 + 次の CTA」の構造のみ。 コピーは canonical empty state library ( EMPTY_STATE_AND_NO_SIGNAL_COPY_LIBRARY.md) から引く。
|
| 強信号 P4 Progressive disclosure — 初期 view は interpretation layer、数値は fold 以下 | |||
|---|---|---|---|
| Pattern 説明 | Kashi 現状の課題との対応 | 観察 refs | Kashi 互換性 |
|
「意味」→「数値の根拠」→「生データ」という 3 層の段階的開示 Lattice 1on1: agenda / action items が先 → sentiment data は "growth areas" として折りたたまれる。 15Five: pulse summary → individual responses は collapsible。 Stripe: KPI 数値先 → transaction list は separate page → raw export は 2 clicks away。 Linear: issue summary card → detail panel → sub-issues は expand。 Vercel: deployment status badge → log は inline expandable → specific function log はさらにフィルター。 Orbix/B2B: "summary first, detail on demand" が全 10 examples に共通。 |
現在の mirror-me は 3 層がフラットに縦積みされている:
MetricCard (数値) → ChartPanel (ビジュアル) → ListSection (raw 件数) が同一視覚重みで並ぶ。
「この数値が意味するのは何か」という interpretation テキストは
各カードの sub prop に短文で入っているが、
hierarchy 上では数値と同重みのため読み飛ばされやすい。
r19 所見 (7.1): "ManagerMirrorSection.tsx:168 — dense paragraph with structural definition" = 同じ問題が demo page にも既に指摘されている。 |
Lattice (R1), 15Five (R2), Stripe (R5), Vercel (R4), Linear (R3), Orbix/B2B — 6/6 |
✓ 直接適用可permanent-ui-principles.md §7 (Progressive Disclosure):
"Default visible layer: one headline / one short explanation / 3-5 cards / one primary CTA.
Fold or route: legal detail / technical doctrine / source lists / implementation notes / edge cases"
permanent-ui-principles.md §8 (Cognitive Load):
"A screen fails if everything looks equally important."
実装では: Evidence Grade バナー (=interpretation) → MetricCard 3 枚 (=数値) → Chart (=tracing) → List (=raw events) という明示的な 4 層を付けるだけで対応可能。 GreacePeriod / Positive / AdaptationWatch は役割が異なるため、 translator が tier 配置を判断すべき事項。 |
| 強信号 P5 ポジティブシグナルを先出し / reflection を "審判" ではなく "自己認識" フレームで提示 | |||
|---|---|---|---|
| Pattern 説明 | Kashi 現状の課題との対応 | 観察 refs | Kashi 互換性 |
|
「うまくいっていること」を先に見せてから「改善余地」を見せる 15Five: Priorities 達成 → High Five (peer recognition) → future priorities という順序。 Lattice: 1on1 ではまず "growth areas" の positive side → action items。 HiManager: OKR 達成度 (positive) → 1on1 での課題 という順序で weekly survey を設計。 Notion reflection templates: "Wins" section が "Challenges" より先に来るテンプレートが多数。 B2B coaching 全般: "Tell me what's working before what's not" が retention に繋がることが指摘されている。 |
現在の mirror-me にはポジティブシグナル表示 (PositiveCount グリッド) が実装済みだが、
GracePeriod パネルの直後に来ており、問題先出しの流れの中に埋まっている。
Manager が最初に目にするのは reveal-names プロンプト → AdaptationWatch アラート → BLOCKED/INSUFFICIENT の順序。
Kashi の mirror 命名意図 (鏡 = 自己認識) と、
問題点を先に出す現在の view 順序に矛盾がある。
|
15Five (R2), Lattice (R1), HiManager (R6), Notion reflection templates, B2B coaching research — 5/6 |
△ 要調整 — canon の no-signal rule に注意 直接的な適用: PositiveCount セクションを view の序盤 (Evidence Grade バナーの直後) に移動。 注意点: ポジティブシグナルを先出しする際、 「問題なし / オールクリア」という impression を与えてはならない。 permanent-ui-principles.md §6: "No qualifying signal never means no issue."
CANONICAL_PRODUCT_TRUTH.md §2: "no problem / safe team / clean manager" = forbidden wording。
適用形: PositiveCount 先出し + "これは観測されたポジティブパターンです。別の問題の不在を意味しません" という boundary コピー (1 行) をセットにする。 Canon の safe wording "no qualifying signal in this observed window" を流用可。 |
DATA_VISIBILITY_MATRIX.md §3)。
チームの個別 check-in ロールアップは visibility 境界に抵触するため、そのままでは採用不可。
| 除外パターン | 参照 ref | Canon 違反根拠 |
|---|---|---|
|
「AI があなたのチームリスクを分析しました」系バナー 15Five / HiManager の "pulse score" や "engagement risk alert" の出し方を Manager mirror に転用するパターン |
R2, R6 |
permanent-ui-principles.md §1: "HR decision automation / AI magic" NGpermanent-ui-principles.md §2 forbidden wording: "at-risk employee / organizational health score / team health score / predicts resignation"CANONICAL_PRODUCT_TRUTH.md §2: "Kashi is NOT a culture-health / team-health / organizational-health score"Manager mirror が「あなたのチームは危険信号です」系の UI になると、 「監視・予測ツール」のフレームを強化し、 Kashi の core doctrine (structure-not-content + observation only) を完全に破る。 |
|
サブオーディナリーの個人名 + 感情スコア表示 Lattice の 1on1 が "sentiment data / growth areas" を名前付きで表示するパターン |
R1 |
DATA_VISIBILITY_MATRIX.md §3: Manager は "Named subordinate reports" を見られないpermanent-ui-principles.md §4 (Manager 視認境界): "Must NOT see: named subordinate reports / private employee pages"permanent-ui-principles.md §2 forbidden wording: "detects mental state / detects emotion / detects intent"現在の Kashi も anonymized で表示しており (reveal は Admin/CEO + audit-log)、 Lattice のような「名前 + 感情状態」UIは RLS 違反となる。 |
|
リーダーボード / チーム内ランキング HiManager の OKR 達成度ランキング表示や、 15Five の "top performing teams" バナー |
R6, R2 |
permanent-ui-principles.md §9 (Dashboard Rules):
"No dashboard may: rank people morally / label people as risky / imply health score"permanent-ui-principles.md §1: "real-time leaderboards of employees" は surveillance feel の典型Kashi の mirror は Manager 自身の self-reflection。 他の Manager との比較や部下の達成度ランキングは surveillance feel を直接生み出す。 |
/app/admin/coverage へのリンク 1 つ、
または "新しいミーティングを追加する" → upload CTA。
Canon §6 (no-signal rule) は「なぜデータがないかを説明せよ」と要求しており、
これはその延長として「何をすればデータが増えるか」を示すことで doctrinal に安全。
EMPTY_STATE_AND_NO_SIGNAL_COPY_LIBRARY.md に canonical copy が存在する。
DATA_VISIBILITY_MATRIX.md §3)design_system_v1.md §2 a11y rule)EMPTY_STATE_AND_NO_SIGNAL_COPY_LIBRARY.md の canonical wording のみ使用可 — "no problem / all clear / safe team / clean manager" はCI で banned