app-admin — Variant C (大胆 / Operational Task Inbox)主タスク: 「admin の inbox にある operational task を順番に消化する」。 admin は 「何をすべきか」 を考えない。 inbox が priority 順に提示する。 Stripe Dashboard の 「tasks widget」、 Okta Admin の 「pending tasks section」、 Linear の inbox UX を operational task に転用した archetype。
この変更の含意は深い:
根拠: app-admin__variants.html Variant C 「主タスク」 セクション · researcher §3 Okta R4 + Stripe R1 「tasks widget」 (N=2) · canon: permanent-ui-principles §7 progressive disclosure + §8 「one primary CTA」 の最強実装
Variant A はラベル改訂 (「稼働状況」 等) で残し、 Variant B も Tertiary fold 内に operational 文言で残す。 Variant C は UI ナビゲーション・カード・リンクのいずれからも到達不能 にする。 残された operational 系機能 (アップロード履歴 / 監査ログ等) は 「背景情報」 fold か 「設定」 fold 内に格下げ。
これは canon §4 「System admin: operational configuration + technical logs のみ」 の最強実装。 「explore してたまたま分析画面に辿り着く」 という事故を 構造的に 不可能にする。
根拠: DATA_VISIBILITY_MATRIX §3 §8 (admin = Pattern summaries / Per-meeting metrics / Team aggregates すべて N) · permanent-ui-principles §4 (System admin must NOT be treated as business reviewer / HR investigator / casual data viewer) · orchestrator brief 「分析系入り口は UI から物理的に消滅」 verbatim
Above-fold は以下が見える:
スクロール後に: queue の残り行 → 「背景情報」 (組織概要 fold) → 「設定」 (8 項目 fold) → footer。
根拠: permanent-ui-principles §7 「default visible layer: 1 headline + 1 short explanation + 3-5 cards + 1 primary CTA + 1 trust note」 完全準拠。 Inbox row 上位 4 行が 「3-5 cards」 を充足、 Scope Banner が 「trust note」 を兼ねる。
B 版は white background + 3px left border + ink text の控えめ banner。 C 版は evergreen filled background + cream text + 大型 shield icon でページ上で最も目立つ要素にする。 これは canon §1 「The UI wins by showing less」 の物理実装 — 「不在」 を 「設計的選択」 として最強に明示する。
具体的文言差分:
| 軸 | B 版 banner | C 版 banner |
|---|---|---|
| 背景色 | --kashi-paper-tint (薄グレー) | --kashi-evergreen (濃緑塗り) |
| テキスト色 | --kashi-ink (ダーク) | --cream (淡) |
| 主見出し | 「あなたは『組織と利用状況』の管理者です」 | 「この Inbox は operational task のみ を扱います」 |
| 本文 tone | 「閲覧できません — これは Kashi の canon (役割境界) です」 | 「意図的にこの画面から存在しません — 分析系のページは UI 上で到達できません」 |
| canon pill | 無し | 「canon §8 Bypass forbidden」 を 専用 pill 表示 |
根拠: orchestrator brief 「Scope Boundary Banner は max strength」 verbatim · researcher P-4 Stripe + GitHub + Okta + Google WS 由来の banner pattern を最強モードで適用 · canon §3 (role boundary first) + §8 (bypass forbidden)
| token | 使用箇所 | 意図 |
|---|---|---|
--kashi-evergreen | Scope Banner 背景 · primary action button · KPI hover border · brand | 差別化アクセント・admin auth |
--kashi-evergreen-deep | page-h1 · section-h2 · banner pill · hover state | shrillness を抑えた高階層 typo color |
--cream | Scope Banner 内テキスト · footer disclaimer 背景 · 強調 chip 背景 | brand 連続性・暖かさ |
--kashi-paper | inbox row 背景 · KPI card 背景 · settings item hover | クリーン読み心地 |
--kashi-paper-tint | section subtle background (現実装では限定使用) | 階層 contrast |
--kashi-border | card outline · table cell border · accordion divider | ハーフライン 1px 区切り |
--kashi-ink-muted | caption · meta · sub label · priority-low badge text | 2nd-tier text hierarchy |
--kashi-grade-weak (#D97706) | priority-high badge (オレンジ系) | evidence-grade 色との連続性 (= 警告だが panic ではない) |
--kashi-grade-emerging (#2563EB) | priority-mid badge (青系) | evidence-grade と一致 = 「観察中」 のメタファ |
--font-serif (Fraunces) | h1, h2, KPI value, banner title | citation/heading の serious tone |
--font-sans (Plex Sans + Zen Kaku) | body, inbox-row title, button label | bilingual readability |
--font-mono (Plex Mono) | category tag, kicker, meta, due date | operational/technical な atmospher |
--shadow-focus | 全 interactive 要素 | a11y baseline (永続UI §12) |
--space-{1..8} | 8 point grid 遵守 | design_system_v1 §3 適合 |
canon: design_system_v1.md §1-§4 verbatim · invent した token は 0 件
design_system_v1 §1 「badges must include both color AND text label」 + permanent-ui-principles §12 「badges not color-only」 に従う。 優先度バッジは色だけでなく必ず日本語テキスト 「高 / 中 / 低」 を併記する。
| 優先度 | テキスト | 色トークン | border |
|---|---|---|---|
| 高 | 「高」 | --kashi-grade-weak (#D97706) | oranged 30% opacity |
| 中 | 「中」 | --kashi-grade-emerging (#2563EB) | blue 30% opacity |
| 低 | 「低」 | --kashi-ink-muted | stone-100 grey |
意図的に red (--kashi-state-error) を使わない: design_system_v1 §1 「red は true error states only — never for risk detected or analyzer output」。 operational task は 「処理が必要な状態」 で 「赤色警告」 ではない。
evidence-grade 色との意図的整合:
priority-mid に --kashi-grade-emerging (青系) を使うことで、 evidence-grade UI と統一感を作る。
これにより future surface (mirror-me 等) との視覚言語整合性が保たれる。
根拠: design_system_v1.md §1 (Evidence-grade badges + Rule) · permanent-ui-principles §12 (a11y baseline) · §13 「No red alert dashboards」
Kashi canon §6 「No Signal Rule」 は 「no qualifying signal」 never means 「no issue」。 「all clear」 「問題なし」 「健全」 系の表現は全て forbidden。
Inbox 空状態のテキスト (mockup-only phase switcher で確認可能):
観察ウィンドウ内に新規 operational task はありません
直近 7 日 (2026-05-20 〜 2026-05-27) で、 admin の対応が必要な operational task は検出されませんでした。 これは 「問題が無い」 ことを意味しません — operational task の検知対象外の状態 (例: 設定変更の提案がまだ無い、 アップロードが当該期間に存在しなかった、 等) も含みます。
重要な技術的選択:
根拠: permanent-ui-principles §6 (No Signal Rule) verbatim · §2 「forbidden wording: no issue detected / all clear」 · orchestrator brief 「§6 『観察ウィンドウ内に新規 operational task はありません』 verbatim」 指示
B 版 (および現状の Kashi) は: 管理 / 経営 / レビュー / マイミラー / マイページ / 監査ログ の 6 items。 C 版は: 管理 Inbox (badge付き) / 設定 / ヘルプ の 3 items。
この縮小の含意:
cross-surface 影響まとめ:
/app/admin/longitudinal 等のページは backward compat で残すが、 nav からは到達不能根拠: orchestrator brief 「PortalHeader nav 3 items に縮小 (Inbox / Members / Settings 等)」 (← mockup では Inbox / 設定 / ヘルプ に解釈、 members は inbox 内 task として吸収) · 参考: kashi/src/components/portal/PortalHeader.tsx · 実装工数: variant C 全体で 15-20 日 (うち nav 連動の調整 5-7 日相当)
B 版で 「primary CTA カード」 + 「KPI strip」 + 「Secondary 4 cards」 + 「Tertiary fold」 + 「TeamRows」 として並んでいた要素を、 C 版は以下に再配置:
| B 版要素 | C 版での扱い |
|---|---|
| Primary CTA カード (Phase 動的) | → Inbox 内の 1 行 row として吸収 (操作 task の 1 つ) |
| KPI strip 3 card | → 削除し、 Inbox state 3 card に置換 (処理待ち / 完了 / 保留)。 組織 KPI は 「背景情報」 fold 内に格下げ |
| Secondary 4 cards (ユーザー管理等) | → Inbox 内に operational task として現れる ※招待承認 task 等として可視化 |
| Tertiary 6 項目 fold (稼働状況 / データ品質 等) | → 「設定」 fold 8 項目に統合 (operational config の集約) |
| TeamRows expandable | → 「背景情報」 fold 内のリンクとして格下げ (件数 only) |
意図: admin の primary affordance を 「処理待ちタスク」 一極集中させる。 頻度の低い設定変更は意図的展開を要求 (cognitive load を queue 処理に集中)。
根拠: variants.html Variant C 「採用する研究パターン」 「組織概要」 「設定」 fold 化方針 · permanent-ui-principles §7 progressive disclosure 最強実装
| 軸 | B (中庸 / 推奨) | C (大胆 / 本案) |
|---|---|---|
| IA 変更深度 | 3 層化 + Scope Banner | Inbox 一本化 + nav 縮小 |
| 実装工数 | M (5-7 日) | L (15-20 日、 cross-surface 含む) |
| cross-surface 影響 | 無し (本 surface のみ) | あり (他 4 surface の nav 連動再設計) |
| C-A1 (11 並列認知負荷) | 解決 | 完全解決 (queue 化で構造的解消) |
| C-A3 (洞察誤読リスク) | 完全解決 (banner) | 究極解決 (UI から物理消滅) |
| C-A5 (利用状況把握) | 解決 (KPI strip drill) | 部分後退 (KPI は fold 内) |
| HR SaaS との差別化 | 強 (banner) | 最強 (構造で完全) |
| Backend 依存 | 低 (既存 schema で足る) | 高 (task aggregator service が新規必要) |
| 既存 admin の muscle memory | 保持 | 破壊 |
| Round 1 feedback 生成力 | 差分が明確で評価しやすい | 方向性論争を引き起こすので戦略 feedback 取得に有利 |
B を pick: 着実に短期に出荷する。 既存 user を混乱させない。 後から C に進化させる余地は残せる (B の Primary CTA カードを inbox 0 番目 row と見做せば C へ連続)。
C を pick: Round 1 で 「方向性議論」 を最大化する。 co-founder/メンターから 「inbox 化は admin の認知モデルとして正しいか?」 という戦略 feedback を取りに行く。 実装 15-20 日のコストは、 設計討論の価値で正当化する。
中間案: Round 1 で C mockup を見せ、 「B を ship、 C を 6 ヶ月先の v2 北極星として記憶する」 という戦略判断もあり得る。
このモックアップを React 化する際の注意:
kashi/src/app/app/admin/page.tsx (全面書き換え)kashi/src/components/portal/PortalHeader.tsx — role-aware nav の構造変更 (現状 6 item flat → role 別 3-5 item dynamic)kashi/src/app/app/layout.tsx — role context provider が nav item を提供する責務にInboxQueue — priority queue rendering, sort, filterInboxRow — task row with priority badge + actionScopeBoundaryBannerMax — evergreen filled banner (B 版とは別 variant component に)PriorityBadge — 高/中/低 + a11y labelFoldableSection — 既存があれば再利用、 なければ作るGET /api/admin/inbox?filter={...}&window=7d/app/admin/longitudinal /app/admin/coverage /app/admin/readiness 等は backward compat で 200 を返すが、 nav からは到達不能出典: app-admin__variants.html (Stage 2 translator output, Variant C) · permanent-ui-principles.md §1-§15 · design_system_v1.md §1-§10 · DATA_VISIBILITY_MATRIX §3 §8 · orchestrator brief 2026-05-27 (kashi-ui-orchestrator → kashi-ui-mockupper dispatch) · sibling B mockup index.html (token 継承元 + 「人事部 鈴木さん」 dummy)