#!/bin/bash
# .claude/hooks/session-start-load-sdd.sh
# arcrun SessionStart hook
#
# 職責：session 啟動時注入當前進度、絕對禁令、SDD 位置，避免 CC 靠記憶猜測
# 輸出走 stdout，會注入到 CC 的 context

set -o pipefail

cat <<'EOF'
============================================================
🚨 arcrun 工作規範（SessionStart 注入）
============================================================

📌 絕對禁令（違反會被 pre-write / pre-bash hook 直接 block）：

  1. registry/components/ 下禁止 TypeScript 實作零件
     → 只能 TinyGo (main.go) 或 AssemblyScript，編譯成 .wasm

  2. cypher-executor TS 裡禁止實作 credential/auth/JWT 業務邏輯
     → crypto.subtle.sign 只准出現在 wasi-shim.ts 的 host function
       （crypto_decrypt 已廢除成永遠回失敗的 stub，credential 走 CF Workers Secrets）
     → {{secret.X}} template 展開屬於 WASM 零件職責
       （例外：*-seeds.ts 是資料宣告非呼叫實作，見 rule 07）
     → 禁止 hard-code gmail/telegram/sheets API endpoint

  3. 禁止新增 Service Binding 綁零件
     → 零件串接走 HTTP URL（cypher binding = YAML 裡的 URL 清單）
     → Cypher binding 不是 Cloudflare 的 binding 機制

  4. 每個 WASM 零件 = 獨立 Worker = 公開 URL
     → 不是從 R2 動態讀（平台零件已 bundle 進各自 Worker）
     → R2 只用於 Phase 5 的用戶自製零件（未啟用）

📋 任何 code 變動前，必須：

  1. 讀 docs/3-specs/arcrun/arcrun.md（總進度）
  2. 讀對應 task 的 SDD（design.md + tasks.md）
  3. 在回覆開頭宣告（格式見 .claude/rules/00-sdd-protocol.md）：
     📋 已讀 SDD：<檔案清單>
     🎯 本次對應 task：<task 編號>
     📐 本次 task 的 SDD 規範摘要：<重點>
     🚧 執行範圍：修改/建立/刪除 <檔案>
  4. 每完成一個 task，立刻更新 tasks.md 的 [x]，不批次

🔥 當前 active SDD：以 frontmatter `status: active` 為唯一判準（不靠本檔硬寫）

  查法：bash system-dev/scripts/sdd-active-check.sh
  規則：system-dev/docs/3-specs/SDD-LIFECYCLE.md（單一活性鐵律，D35）
  session 開場請回報三個數字：現行規格名稱 + 未完成任務數 + pending-changes 待裁決數

📦 已封存（closed，勿當進行中）：
  - credential-primitives-wasm → system-dev/docs/3-specs/archive/credential-primitives-wasm/
    主線已達成：cypher-executor TS 不再有 credential/auth 業務邏輯
    （credential-injector.ts / jwt-signer.ts / BUILTIN_API_RECIPES 皆已移除）
    credential 現行做法＝CF Workers per-script Secrets + D1 目錄，arcrun 不自管加密金鑰
    → 見 .claude/rules/01-tech-stack.md「Credential 儲存規範」
    ⚠️ 殘留缺口（未隨封存視為完成）：auth_mtls 從未實作、7.6 self-hosted auth 鏈
       端到端未驗；要做需另立新 SDD。細節見該卷 tasks.md「封存時仍未完成的項目」

📚 詳細規範：
  .claude/rules/00-sdd-protocol.md     — SDD 協議
  .claude/rules/01-tech-stack.md       — 技術棧硬限制
  .claude/rules/02-forbidden.md        — 禁止清單（hook 強制）
  .claude/rules/03-component-architecture.md — 零件架構（R2/cypher binding/service binding 的正確定義）
  .claude/rules/04-current-progress.md — 當前進度 + SDD 索引
  .claude/rules/06-mindset.md          — mindset（為什麼層）：工作流是default/零件稀有/AI→工具/誠實不假綠

============================================================
EOF

exit 0
