# Quickstart
本文件說明如何在本機啟動與測試 On-Call Runbook 百科 MCP 伺服器(MVP 設計階段)。
## 前置需求
- Node.js 18+
- Git (選用,用於版本控制)
- 本機含 runbook Markdown 檔案目錄(含 frontmatter)
## 安裝(預計)
```bash
npm install
```
> 後續將建立 `package.json`,包含測試與 lint 指令。
## 目錄結構(規劃中)
```
src/
core/ # 純函式:tokenize, chunk, score, classify, freshness, severity
adapters/ # fsio, llmAdapter (stub), config
services/ # orchestration (searchService, answerService ...)
mcp/ # MCP server entry + tool 注册
utils/ # logger, normalization, validation
tests/
unit/core/
unit/adapters/
integration/
benchmark/
```
## 基本使用流程(未來 MCP 工具)
1. 啟動 MCP 伺服器(待實作 server 腳本)。
2. 客戶端呼叫 `rb.search` 進行檢索。
3. 呼叫 `rb.answer` 獲得整合回答與 citations。
4. 呼叫 `rb.commands` / `rb.checklist` 獲取風險指令與初步診斷。
5. 呼叫 `rb.severity` / `rb.handoff` / `rb.postmortem` 取得各類模板。
## 組態(草案)
| 變數 | 說明 | 預設 |
|------|------|------|
| RUNBOOK_ROOT | Runbook 根目錄 | ./runbooks |
| FRESHNESS_DAYS | 新鮮度閾值 | 90 |
| TOPK_DEFAULT | 檢索預設 K | 5 |
| NO_LLM | 設為 1 時強制降級模式 | 0 |
## 測試策略
- `vitest` 單元:tokenize / chunk / score / classify / freshness / severity。
- 整合:`rb.answer`(含無結果、過期、風險指令)。
- 基準:產生 100 假資料 runbooks 測量 P95 <500ms。
## 風險字典(初稿示例)
```
[ 'delete', 'drop', 'drain', 'cordon', 'shutdown', 'stop', 'purge', 'truncate', 'kill', 'scale down', 'rm -rf', 'format', 'reboot', 'evict', 'unmount', 'force detach', 'wipe', 'discard', 'disable', 'halt' ]
```
## 開發守則摘要
- 任何回答必須引用來源 path + chunkIndex。
- 無匹配 → 回傳 UNKNOWN / ESCALATE。
- risk_ops 無回退 → 顯示 VERIFY_ROLLBACK_MANUALLY。
- 單元測試:新增或修改純函式必須伴隨測試。
## 後續步驟
- 建立 `package.json` 與初始程式骨架
- 實作 core 純函式與單元測試
- 實作服務組合與 MCP tool binding
- 加入基準腳本與初步 README