Design Decisions — /app/ceo — Round 001

Generated: 2026-05-27 by kashi-ui-mockupper | Surface: /app/ceo (ExecutiveBriefPage) | Picked variant: B (中庸 — Same-Page IA Restructure) | Mockup: index.html (このファイルと同階層)

このドキュメントの目的: Round 1 Stage 3 mockup の非自明な設計判断を、 Justine の friends/mentor フィードバック取得時の説明と、 Round 2 以降の React 実装担当エンジニアへの引き継ぎ用に残します。 mockup で 「なぜこうした?」 が分かれば、 feedback → revise → implement の loop が短くなります。

Variant B 概要: 既存 ExecutiveBriefPage 内で 「review candidates」 を H1 北極星メトリクスとして昇格、 残り 3 stat を secondary strip に降格、 Plan C / Positive / ロスター全表示を progressive disclosure (折りたたみ) に降格、 ExecutiveAggregateSection を 4 status chips + /app/ceo/governance サブルート teaser に圧縮、 window note を info bar として H1 メトリクス内に昇格。 5 セクション equal-weight 平板 → 北極星 1 つに焦点。

1. 主タスクと IA 採用根拠

決定: 北極星メトリクス = 「reviewer 対応待ち aggregate signal の件数 (3 of 14)」
経営者が 5 秒で 「経営判断に直結する review-worthy aggregate signal は何件あり、 どの window で観測されたか」 を把握する ことを主タスクに設定。 現状の 5 セクション equal-weight は permanent-ui-principles §8 「A screen fails if everything looks equally important」 の典型違反。 「review candidates」 は 「reviewer 対応」 = 経営者がすぐ動作を起こすべき集約 signal で、 longitudinal-aggregated な Kashi の moat (= 構造的、 長期的) を最も symbolize する値。
canon: permanent-ui-principles §8 (equal weight failure)、 §9 (interpretation not judgment) / research: P-01 (Executive 5-8 metric limit、 3 refs: OutSail / F1Studioz / Smashing) / 投資家ポジショニング memory: structure-not-content + longitudinal-across-meetings moat
決定: H1 メトリクスが 0 のときの empty state 文言を canon 仕様化
「review candidates = 0」 を 「all clear」 「問題なし」 と読まれると permanent-ui-principles §6 「no qualifying signal never means no issue」 違反。 mockup では現在 3 件として表示しているが、 React 実装時は 0 件のとき 「本観察ウィンドウ内に review-worthy aggregate signal はありません (詳細は §6 抑制理由参照)」 固定文言を出すことを必須仕様化。 「0」 数字単体を巨大表示してはいけない。
canon: permanent-ui-principles §6 (no qualifying signal NEVER means no issue) / Variant B proposal の最大リスクとして translator 明示 / forbidden wording: 「no issue detected」 「all clear」
決定: 役割境界 note を H1 直下の固定インフォバー化 (画面上端常時 visible)
permanent-ui-principles §3 + §11 が要求する 「Who is viewing this? What are they allowed / NOT allowed to see?」 の merge gate 要件。 「あなたは経営者として閲覧中 | 集約データのみ | 個人識別情報なし | k-anon 5名未満は抑制」 を 4 つの pipe 区切りで一行に明示。 admin / executive を兼任しているユーザーが個別データを期待して clicked-through した瞬間に boundary が見える、 という anti-confusion 機能。
canon: permanent-ui-principles §3 §11 / research: P-05 (3 refs: Stripe / Workday / Lattice) / DATA_VISIBILITY_MATRIX §3 Executive 行 Y(k-anon) のみ

2. レイアウト

決定: 北極星カードに 2px evergreen border + display サイズ数値 (clamp(2.5rem, 4vw, 3.5rem))
視覚 weight を画面内で 明確に 一つだけに集中させる。 secondary strip は同じ stat 形式だが H3 サイズ + 1px ボーダーに demote。 これで F-pattern 上の最初の固視点が北極星に向く (F1Studioz strategic dashboard 設計に基づく)。 数値は Fraunces serif で本文 sans とのコントラストを付け、 「読む数字」 ではなく 「見る数字」 にする。
design_system_v1 §1 (--kashi-evergreen #1F3D33 = primary)、 §2 (--text-display 56px) / fluid clamp で desktop / tablet / mobile 同時対応
決定: window note を info bar として H1 メトリクスカード内に同梱 (separate section にしない)
現状 (kashi/src/app/app/ceo/page.tsx) では CEO_ROSTER_WINDOW_AWARE=false 注記が coverage strip の小テキストに埋没。 「window toggle が動いてないのに気付けない」 が translator が抽出した hypothesis 不満の 1 つ。 北極星カード内に info bar として埋め込むことで、 H1 メトリクスを見れば必ず window 情報が視野に入る。 AC-05 trust gate (連動性が担保できるまで toggle 不可) の 理由 も併記。
research: P-04 (3 refs: Vercel / Stripe / Smashing 「trust through transparency」)、 既存 AC-05 trust gate コンセプト / design_system_v1 --kashi-state-info (#3B82F6) for honest disclosure
決定: ロスターは review candidate teams 3 件のみ default 表示、 残り 9 件は accordion (折りたたみ)
P-06 progressive disclosure を適用。 現状の 12 マネージャーフラットリストは執行判断には ノイズ。 「reviewer 対応待ち」 状態のチームをデフォルト表示し、 全表示は明示的 click が必要。 これは X-02 grade ranking 化を 避けつつ filter (status) で fold できる重要な区別。 sort 順は alphabetical のみ、 grade 順 sort は禁止 (canon-conflict X-02)。
canon: permanent-ui-principles §7 (Governance detail should be discoverable, not dumped)、 §9 (No dashboard may rank people morally) / research: P-06 (3 refs: Workday / Stripe / F1Studioz) / X-02 違反防止
決定: 各 roster card に 「unlock 済」 pill / 「unlock 4 条件未充足」 lock indicator
DATA_VISIBILITY_MATRIX §6 の unlock 4 条件 (pilot phase, evidence grade, no dispute freeze, grace-period) は現状 UI 上 invisible で、 リンクが現れたり消えたりする。 unlock 状態を explicit に出すことで、 「なぜこのカードはクリック不可なのか」 が明確に。 unlock 未充足カードは drill-link を出さず、 lock icon + 「個人 drill-down: unlock 4 条件 未充足」 inline note を表示。
canon: DATA_VISIBILITY_MATRIX §6 (unlock 4 条件) / Variant B proposal で translator が明記
決定: ガバナンスは 4 chip の 1 行サマリー + 「詳細を確認」 → /app/ceo/governance サブルート teaser
現状の ExecutiveAggregateSection は structural lane / semantic lane / reviewer process / labor legitimacy の 4 状態を テキスト詳細付き inline で表示。 経営者 landing 画面としては cognitive load 大。 chip + status のみ landing に残し、 詳細は別ルートへ。 mockup では /app/ceo/governance リンクをクリックすると toast が出る (実装時に実ルートに置き換え)。
canon: permanent-ui-principles §7 / research: P-06 (Workday overview → discovery board model) / Variant B proposal の新規 route 1 つ

3. 採用したトークン (design_system_v1 全数)

箇所トークン用途
page background--color-warm-tint #FAFAF7off-white base (design_system_v1 §1 anti-pattern: aggressive backgrounds NG)
portal header / cards--color-paper #FFFFFF + --border #E5E7EBresting card surface (§4 --shadow-sm)
北極星 H1 border--color-kashi-evergreen #1F3D33 2pxbrand accent、 北極星 emphasis (§1 primary palette)
H1 数値--fs-display fluid clamp / Fraunces serif視覚 hierarchy 最上位 (§2 --text-display)
secondary stat 数値--fs-h2 / Fraunces serif北極星より demote (§2 type scale)
role boundary note--color-kashi-evergreen 3px left border常時 visible boundary 明示
window info bar--kashi-state-info #3B82F6 + --info-bg #EFF6FF誠実性ゲート可視化 (§1 semantic state)
suppression footer--color-paper-tint + 1px dashed --border + italicverbatim copy が他コピーと混同しない trust artifact (§1)
evidence-grade badges--kashi-grade-stable #2F6B4A 等 6 token + テキストラベル必須color + label の両立 (§1 a11y rule、 §5)
governance chip warn--kashi-state-warning #B45309赤ではなく amber 使用 (§1 anti-pattern: aggressive red)
focus ring2px outline --color-kashi-evergreenキーボード a11y (§4 --shadow-focus 代用)
radius--radius-sm 4px / --radius-md 8px / --radius-lg 12px§4 token 適用
spacing--space-3 12px / --space-5 24px / --space-8 48px8-point grid 厳守 (§3)
JP line-heightbody 1.75 (1.1× rule)kanji vertical room (§2 JP rule)

4. 採用した evidence-grade 表現

design_system_v1 §1 の 6 evidence-grade トークンを以下のように mockup 内に登場させています。 全てに 色 + テキストラベル を併用 (color alone NG)。

Grade色 tokenmockup 内出現
STABLE#2F6B4Aroster 「管理部」、 全表示折りたたみ内 5 teams
HIGH_CONFIDENCE_STABLE#1F4A33全表示折りたたみ内 「HR部」 「法務部」
EMERGING#2563EBroster 「開発部」、 全表示折りたたみ内 「情報システム部」
WEAK#D97706roster 「営業部」 (北極星 review candidate 例)
INSUFFICIENT#9CA3AF未登場 (secondary stat strip の 「Insufficient Window: 2」 で集計件数として代替表現)
BLOCKED#6B7280未登場 (mockup data set 内に blocked grade 該当チームなし — 実装時に発生したら表示)

badge は display: inline-flex + small dot + 大文字ラベルで構成。 colorblind 安全。

5. 削った要素 (現状の Kashi /app/ceo から)

現状要素変更理由
4-col stat strip (Managers / Review Cands / Insufficient / Adaptation Watch) → Review Cands を H1 北極星化、 残り 3 を secondary 3-col に降格 P-01 5-8 metric limit + 北極星 1 つに集中
Plan C 集計 5-col grid (always inline) → accordion 折りたたみ (closed by default) P-06 progressive disclosure、 経営判断の主タスクではない
Positive 集計 5-col grid (always inline) → accordion 折りたたみ (closed by default) P-06 progressive disclosure
12 manager flat roster (all inline) → Review candidate 3 件 default 表示 + 残り 9 件 accordion P-06 progressive disclosure + 主タスク (review-worthy signal) に焦点
ExecutiveAggregateSection (4 状態 inline テキスト詳細付き) → 4 status chip + 「詳細を確認」 → /app/ceo/governance P-06 + permanent-ui-principles §7 (discoverable, not dumped)
coverage strip 内の小テキスト window 注記 → H1 メトリクスカード内の info bar として昇格 P-04 honest window disclosure (現在埋没で見えない)

6. 追加した要素 (現状にない)

新規要素採用根拠
役割境界 inline note (「あなたは経営者として閲覧中 \| 集約データのみ \| 個人識別情報なし \| k-anon 5名未満は抑制」) permanent-ui-principles §3 §11 + research P-05 (3 refs: Stripe / Workday / Lattice)
北極星カード内 inline suppression text (「(うち 2 teams は team_size < 5 のため抑制)」) research P-03 + DATA_VISIBILITY_MATRIX §5 + canon-conflict X-05 防止
北極星カード下 verbatim suppression footer 「観察ウィンドウ内でチーム規模が比較可能になると更新されます」 WORKER_FACING_TRUST_CANON §6.2 (canon 要件) + Round 1 brief 明示要求
Window info bar (青系) inside polaris card research P-04 + AC-05 trust gate UI 上明示
Roster card 内 「unlock 済」 pill / 「unlock 4 条件未充足」 lock indicator DATA_VISIBILITY_MATRIX §6 / Variant B proposal 明示
「ガバナンス詳細を確認 → /app/ceo/governance」 サブルート teaser link research P-06 + Variant B proposal (新規 route 1 つ)
Audit footer (org_id / snapshot_id / build) + 中立 disclaimer 「Kashi は組織問題を自動診断する AI ではありません」 permanent-ui-principles §11 audit semantics、 X-04 (AI narrative diagnosis) 防止

7. Canon compliance チェック (X-01〜X-05 全 5 pattern)

Round 1 brief 重要制約: 5 canon-conflict pattern (X-01〜X-05) の混入を厳禁。 mockup での自己審査結果:
Canon判定確認内容
X-01 個別離職スコア NG PASS 個別 manager / 個別 employee に紐づく score / risk 表記なし。 全 metric は aggregate count (N teams / N managers)。 「at-risk employee」 「予測退職」 等 forbidden wording 不使用
X-02 manager ランキング NG PASS roster sort は alphabetical only 明示。 grade 順 sort 機能なし。 全表示折りたたみ内も同じ。 Review candidate 3 件の inline 表示は 「review-worthy filter」 による状態抽出であり moral ranking ではない (reason code RC-XXX で根拠明示)
X-03 org health single score NG PASS 単一の組織健康スコア / Org Health: NN/100 等の集約スコアを表示せず。 全ては independent な count metric。 北極星 「Review Candidates 3」 は count、 score ではない。 Positive 集計 accordion 内に明示的 disclaimer 「組織健康スコアではない」
X-04 AI narrative diagnosis NG PASS 「AI が組織問題を自動検出」 framing なし。 全コピーは固定テンプレート + 集計数のみ。 audit footer に中立 disclaimer 「Kashi は組織問題を自動診断する AI ではありません。 review-support signal のみ提供します」 明記
X-05 silent k-anon suppression NG PASS k-anon 未満 = 必ず suppression reason verbatim 表示 (北極星カード下 「観察ウィンドウ内でチーム規模が比較可能になると更新されます」 完全一致)。 さらに各 stat denominator に 「of N (M suppressed)」 inline 表示。 silent 0 表示なし
個人 drill-down 動線 PASS 個人 drill-down リンクは一切無し。 「集約詳細」 リンクのみ (= aggregate level)。 「unlock 4 条件未充足」 のカードは drill-link を表示せず lock note のみ
Role boundary label visible PASS H1 直下に常時表示 (sticky でない、 scroll で隠れるが H1 自体が page top に常時固定的に存在)
Red alert 禁止 PASS 赤色 (--kashi-state-error #B91C1C) を一切使用せず。 governance 「Labor Legitimacy」 warn は amber (#B45309)、 grade weak も amber、 全 evidence-grade も emerald 系で構成

8. 既知のトレードオフ / 未解決事項

トレードオフ: 北極星 「Review Candidates」 = 0 のときの mockup data 未提示
mockup は 3 件で表示しているため、 empty state UI を Justine が直接確認できない。 React 実装時に必須仕様化 (「本観察ウィンドウ内に review-worthy aggregate signal はありません」 固定文言)。 friends/mentor feedback で 「0 のとき UI どうなる?」 質問が出たらこの設計判断を口頭で補足。
trade-off / Variant B proposal の最大リスクとして translator 明示 → mockup では未表現
未解決: sparkline / 前週比 trend は本 mockup に含まれない (Variant B hard-gate)
P-07 sparkline は Round 1 brief で 「hard-gate のため含めず」 と明示。 longitudinal moat の 視覚的 表現は本 mockup では window note 「直近 90 日固定」 とロスターの 「N=8 ミーティング」 表示のみ。 「経営者が trend 見たい」 feedback が出たら、 Variant C (sparkline + k-anon hard-gate 実装) の incremental 追加を Round 2 で検討。
Round 1 brief: 「P-07 sparkline は今回 hard-gate で含めず」 / Variant C proposal で扱い
未解決: /app/ceo/governance サブルートの実体 UI は本 mockup では teaser のみ
Variant B は新規 route 1 つ (governance 詳細) を必要とする。 本 mockup ではリンクから toast を出すだけで、 サブルート自体の UI は未設計。 React 実装時は ExecutiveAggregateSection の現コンテンツをサブルートに移植する想定 (proposal 明示)。 friends/mentor が 「ガバナンス詳細とは具体的に何?」 と聞いた場合の口頭補足が必要。
Variant B proposal 工数感: M (medium) 4-6 day 内訳に含まれる
未解決: Mobile 375px breakpoint の polaris card 値が縦長になる
モバイル 768px 以下で polaris-content が 2-col → 1-col に変更され、 数値 「3」 と descrption 「reviewer 対応が必要な aggregate signal」 が縦に並ぶ。 デザイン上の問題はないが、 数値が独立して上に来るので 「3」 が文脈なしに見える瞬間がある。 React 実装時は viewport 観察で要確認。
responsive baseline: 1280 / 768 確認済み、 375 mobile は bonus 扱い
トレードオフ: 「集約詳細」 リンクは現状 全 unlock 済 (mockup 簡略化)
実際は DATA_VISIBILITY_MATRIX §6 unlock 4 条件 (pilot phase, evidence grade, no dispute freeze, grace-period) を全充足したカードのみ unlock。 mockup では 「営業部」 「開発部」 を unlock 済、 「管理部」 「経理部」 を未充足として表示 (= unlock 状態分岐 UI を見せる目的)。 比率は 真の運用比率と異なる可能性 がある (実運用では未充足の方が多いかも)。
DATA_VISIBILITY_MATRIX §6 / mockup の目的: 「unlock 状態の 2 パターン UI を見せる」

9. 既存実装 (kashi/src/app/app/ceo/page.tsx) からの diff

React 実装担当エンジニアへの引き継ぎ。 mockup を実装する際の対象ファイルと影響範囲。

領域影響
該当 route kashi/src/app/app/ceo/page.tsx (ExecutiveBriefPage) の同一 route で再構築
新規 route kashi/src/app/app/ceo/governance/page.tsx 新設 (governance 詳細移植先)
新規 components (a) PolarisMetricCard (北極星 H1 + window info bar + suppression footer 一体) (b) RosterCardWithUnlock (unlock pill / lock indicator 分岐) (c) SecondaryStatStrip (3-col secondary) (d) GovernanceCompactPanel (4 chips + teaser link) (e) RoleBoundaryNote (永続化可)
既存 components 改修 ExecutiveAggregateSection → governance サブルートに移植 + landing には compact panel を返す
i18n 追加 key (推定) (a) app.ceo.polaris.label (b) app.ceo.polaris.empty (= 0 件時の固定文言) (c) app.ceo.windowInfobar.reason (d) app.ceo.boundary.items.* 4 keys (e) app.ceo.suppressionFooter.verbatim (= canon 完全一致文言、 i18n test に verbatim pin 必須 — memory feedback_i18n_verbatim_test_pinning_governance 該当) (f) app.ceo.accordion.roster.label (g) app.ceo.accordion.planC.label (h) app.ceo.accordion.positive.label (i) app.ceo.governance.detailLink (j) app.ceo.rosterCard.unlockPill (k) app.ceo.rosterCard.lockedNote
RLS 変更 不要 (既存 unlock ロジックと aggregate query 流用)
r19 既存課題 同時解消 r19 §3.2 background 不統一、 §3.5 card border 不統一、 §4.1-4.2 type scale、 §5.1 evidence grade palette、 §6.3 warning vs error 混同、 §7.4 disclaimer language 不整合 (推定 8-10 件)
テスト追加 (a) suppression footer verbatim 一致 test (i18n pin) (b) X-02 grade 順 sort 不可 (e2e: alphabetical のみ) (c) X-05 silent suppression なし (k-anon 未満カードは footer + denominator 両方に出る) (d) role boundary note の常時可視性 (e) unlock 4 条件未充足カードに drill-link が出ない
影響を受ける既存テスト ExecutiveBriefPage の snapshot / DOM test 全件、 ExecutiveAggregateSection の test (一部は governance サブルートに移動)

10. Justine confirm / redo 判断ポイント

Justine が friends/mentor 共有時、 以下に着目してフィードバック収集

Q1: 北極星 「Review Candidates 3 of 14」 が 5 秒で経営判断に直結するか?
→ NO のとき: Variant B の主タスク設計を見直す必要あり。 別 metric が北極星候補かも (例: Insufficient Window / Adaptation Watch)。 → redo proposal app-ceo "北極星を XX に変更"
Q2: 役割境界 note 4 項目 (集約のみ / 個人識別なし / k-anon) は 説明的すぎ ないか?
→ YES のとき: pipe 区切り表示を 2 行に折る、 もしくは hover/click で expand する pattern に変更可能
Q3: 折りたたみ (accordion) の default-closed が 「重要情報を隠している」 印象を与えないか?
→ YES のとき: 開閉状態の persist (localStorage) や、 件数の visible 化 (現状でも 「12 of 14」 「aggregate」 を chip 表示) を強化検討
Q4: ガバナンス 4 chip + 「詳細を確認」 サブルートが 「飛ばされる」 リスク
→ YES のとき: chip に直接 inline expand (accordion 化) して別ルート不要にする選択肢あり。 ただし P-06 + landing cognitive load との trade-off
Q5: longitudinal moat (時系列性) が画面から伝わるか?
→ NO のとき: Variant C の sparkline + k-anon hard-gate を Round 2 で incremental 追加検討 (proposal Variant C で詳細)。 ただし RLS 変更 + DD 影響あり
Q6: suppression footer (verbatim) が読まれるか?
→ NO のとき: 配置位置 (現在は北極星カード下) を見直し、 もしくは強調 (icon 付与) 検討。 ただし canon 文言は変更不可 (WORKER_FACING_TRUST_CANON §6.2)
Q7: 「Enterprise」 badge / 「CEO」 role badge / ロゴ周りが 「executive ぽいか」
→ NO のとき: PortalHeader の色 / 密度を Round 2 で見直し。 ただし PortalHeader は全 surface で共有のため複数 mockup と統合判断必要
承認後の流れ: Justine が 「approve app-ceo」 すると、 この mockup を bundle に追加して全 5 surface の bundle review を待つ。 friends/mentor からの feedback がある場合は redo mockup app-ceo "feedback内容" で本 mockup のみ再構築可能。

11. 補足 — mockup 動作の前提