#!/bin/bash
# SessionStart hook: 强制 AI 完成 5-step onboarding 才能回答项目相关 query.
# 实证背景: 2026-05-13 session 10 跳过 PROJECT_GOAL + AGENTS → 首轮推荐缺 4 项
# 硬约束 (canonical SoT / plan owner 边界 / working-principles / meta-rules)
# → 用户返工纠偏. 此 hook 把 L1 文本规则 (STATUS.md/AGENTS.md) 升 L3 机械触发.
#
# 真源: docs/STATUS.md §起手必读链路 + AGENTS.md §Onboarding Gate

# Locate latest pickup file (graceful if dir absent or no match)
PICKUP_PATH=""
if [ -d "$CLAUDE_PROJECT_DIR/docs/internal/_plans" ]; then
  PICKUP_PATH=$(ls -t "$CLAUDE_PROJECT_DIR/docs/internal/_plans"/next-session-pickup-*.md 2>/dev/null | head -1)
fi

# Convert absolute path to repo-relative for display
if [ -n "$PICKUP_PATH" ] && [ -n "$CLAUDE_PROJECT_DIR" ]; then
  PICKUP_DISPLAY="${PICKUP_PATH#$CLAUDE_PROJECT_DIR/}"
else
  PICKUP_DISPLAY="docs/internal/_plans/next-session-pickup-<latest>.md"
fi

cat <<JSON
{"hookSpecificOutput": {"hookEventName": "SessionStart", "additionalContext": "⛔ MANDATORY 5-STEP ONBOARDING — 第一个**项目相关**回答 / 推荐 / 任务前必须完成。机制：用 TodoWrite 建 5 个 todo 逐项 Read 完才能回答。\n\n1. Read docs/STATUS.md (项目状态 SoT — 知道在哪)\n2. Read docs/PROJECT_GOAL.md (项目目标 + 5 个能力 + 受众 + 约束)\n3a. Read docs/internal/retrospection/design-spec-canonical-alignment-tracker.md (排期 SoT — 知道下一段做什么 / 按什么原则排)\n3b. Read $PICKUP_DISPLAY (当前 sprint 操作手册)\n4. Read AGENTS.md 必读链路 §1-10 (协作硬规则; Mockup 任务额外 §7-10)\n5. Read 当前 sprint task 对应 docs/internal/backlog.md entry (完整 read, 不是 grep)\n\n违反信号 (命中任一立即停下重读):\n- '我已经知道大概了' / '状态简单跳一步' → 错\n- 'grep 替代完整 Read' → 错 (grep 只在 onboard 后具体查找用)\n- 'memory 兜底替代 SoT' → 错 (memory 是 AI 缓存, 项目契约真源在仓库)\n\n例外: 用户首条 query 明显非项目相关 (如 '今天日期' / 闲聊 / 角色唤醒词) 时可跳过 onboarding。详见 docs/STATUS.md §起手必读链路 + AGENTS.md §Onboarding Gate。\n\n历史实证: 2026-05-13 session 10 跳过 PROJECT_GOAL + AGENTS → 首轮推荐缺 4 项硬约束 → 用户返工纠偏。"}}
JSON
