SOKR(Skills OKR)是面向运维/工单团队的 OKR 层级管理与知识沉淀工具。
围绕「OKR 目标 → 关键结果 → 技术专项 → 课题 → 工单 → 技能」六层实体链,将每一次故障复盘转化为可复用的团队知识资产,并通过「专项毕业」机制判断何时从孵化进入规模化运营。
🎯 设定目标 (Objective)
📊 拆解关键结果 (Key Result) ← 量化衡量,自动计算进度
📁 发起技术攻坚 (Tech Initiative) ← 聚焦专项突破,支持毕业/孵化生命周期
📖 研究课题 (Topic) ← 细化问题域
📋 工单复盘 (Ticket) ← 记录根因与改进
✨ 沉淀技能 (Skill) ← 输出可复用知识资产
为什么选择 SOKR
| 痛点 | SOKR 的解法 |
|---|---|
| OKR 目标和日常工作脱节 | 六层实体链把目标→任务→复盘→知识串成一条线 |
| 工单处理完就丢了,经验无法复用 | 每个工单可沉淀 Skill,关联完整上下文 |
| KR 进度靠人工汇报 | 量化基线/目标/当前值,自动计算完成百分比 |
| 技术专项何时算成功没有标准 | 「毕业」机制:降量 30% + 覆盖率 80% + 子指标看板 |
| 工具太重,要配服务器 | 纯浏览器运行,零部署,打开即用 |
| 数据安全担忧 | 数据完全在本地,WAL + CRC32 + 快照三重保障 |
| 不同角色关注点不同 | 5 个专属空间,每种实体有最优视图 |
核心能力
五大专属空间
每种实体都有为其量身的最佳视图,告别"一棵大树看到底"的局限:
| 空间 | 路由 | 视图模式 | 核心特性 |
|---|---|---|---|
| OKR 空间 | /space |
层级树 | 六层实体展开/折叠、搜索过滤、详情面板、FAB 快速创建 |
| 专项空间 | /space/initiatives |
分组列表 | 按目标分组折叠、状态标签(进行中/已暂停/已完成)、课题计数 |
| 课题空间 | /space/topics |
看板 | 四列状态板(开放→进行中→已解决→已关闭)、父专项面包屑、工单计数 |
| 工单空间 | /space/tickets |
看板 + 复盘 | 四列状态板(待处理→调查中→已解决→已关闭)、复盘标记、根因预览 |
| Skills 空间 | /space/skills |
卡片网格 | 三列响应式网格、状态/来源双重筛选、Markdown 内容摘要、一键导出 |
所有空间共享:搜索过滤 · 详情侧边栏 · 实时数据同步 · 空状态引导 · 移动端适配
业绩拆解工作台
FDE 现场业绩目标按「方法论 × 模式」拆解为可落地的 OKR 草案,质检后一键生成 OKR 实体,方案自动存档可回看:
| 维度 | 说明 |
|---|---|
| 5 种方法论 | OGSM 目标对齐 / 4DX 执行四纪律 / WBS 工作分解 / SMART 目标质检 / 5W2H 七问审视 |
| 4 种拆解模式 | 按客户 / 项目、按时间阶段、按指标类型、按能力域 |
| OKR 草案生成 | 逐格填写拆解矩阵,自动生成「目标 + KR」草案,支持标题/周期/KR 增删改与量化值编辑 |
| SMART 质检 | 5 维检查清单(S 明确 / M 可衡量 / A 可实现 / R 相关 / T 有时限),逐项给出通过与修正建议 |
| 一键生成 OKR | 草案直接创建 OKR 目标与关键结果实体,跳转 OKR 空间查看 |
| 方案存档回看 | 拆解方案自动存档(最多 50 份),历史列表回看/恢复/删除 |
实现位置:src/lib/breakdown/(纯函数引擎 + 独立 localStorage 存档,零侵入数据模型)。
岗位 OKR 模板库
「新建 OKR 目标」弹窗内置岗位模板,一键生成带量化 KR 骨架的目标:
| 岗位 | 模板内容 |
|---|---|
| 解决方案架构师 | 3 组目标(方案设计 / 客户成功 / 智能化创新),每组 3-4 条量化 KR |
| 驻场交付工程师(FDE) | 3 组目标(现场交付 / 问题闭环 / 持续运营),每组 3-4 条量化 KR |
选择岗位 → 勾选目标 → 自动预填标题、周期与描述并全选 KR 骨架,生成前可取消勾选不需要的 KR。模板为静态配置,不写入本地数据。
数据分析页
面向管理者的全局决策视图(/analytics),六大区块全部基于现有数据只读聚合,图表 SVG 自绘零依赖:
| 区块 | 内容 |
|---|---|
| OKR 完成度总览 | 总进度环形图 + 每目标聚合进度条(可量化 KR 加权平均) |
| 工单统计 | 四状态分布条形图 + 平均解决时长(按更新时间近似) |
| Skill 产出 | 来源分布 + 发布率环形图 + 状态队列计数 |
| 风险预警 | KR 进度 <30% 或未设定当前值超 7 天;工单开放/调查中超 14 天 |
| KR 进度趋势 | 详情面板内嵌迷你折线,修改当前值自动记录历史(每 KR 上限 50 条) |
| 最近操作时间线 | 复用操作日志展示最近 15 条变更 |
实现位置:src/lib/analytics/(纯函数聚合层)+ src/components/analytics/(SVG 图表件)。
六层实体全链路管理
创建、编辑、搜索、删除——全闭环操作,覆盖所有 6 种实体类型。树形展示一目了然,详情面板即时编辑。
- 级联删除:软删除父实体自动级联所有子实体
- 操作审计:每次 CRUD 操作自动记录到操作日志
- 自动保存:表单编辑自动保存草稿到 localStorage,刷新不丢失
专项毕业 / 孵化机制
为每个技术专项定义清晰的生命周期闸门:
| 维度 | 说明 |
|---|---|
| 主指标(手动填报) | 工单降量比例、智能体覆盖率,默认阈值 30% / 80% |
| 子指标(自动计算) | 工单闭环率、技能水位、语料成熟度(手动填报) |
| 手动毕业 | 指标达标后由负责人点击「标记毕业」,系统不自动跳转 |
| 退回孵化 | 已毕业专项可随时退回重新打磨 |
实现位置:src/lib/initiativeGraduation.ts + EntityDetailPanel 专项详情页。
KR 量化进度追踪
每个关键结果支持 基线值 / 目标值 / 当前值,使用 (current - baseline) / (target - baseline) 公式自动计算完成百分比。所有视图统一使用 computeKrProgress() 确保数值一致。
知识沉淀闭环
从工单复盘到技能输出,支持 draft → confirmed → published 状态流转。质量检查清单确保输出物达标。Skills 支持三种来源(专项 / 课题 / 工单),灵活关联上下文;详情面板支持一键复制 Markdown 或下载 .md / .json,章节结构模板可在系统管理中自定义。
数据安全可靠
| 保障层 | 机制 |
|---|---|
| 写入安全 | WAL(Write-Ahead Log)先写日志再写数据,关键写入使用 trySetLocalStorageValue 检测失败 |
| 数据校验 | CRC32 校验 + JSON round-trip 验证(统一使用 stringifyDb 格式) |
| 自动快照 | 每 10 次写入或 10 分钟自动创建(保留 5 个) |
| 三级恢复 | WAL → 副本 → 快照递进式恢复 |
| 内存缓存 | readDb 优先返回缓存,避免重复 Markdown 解析 |
| 变更检测 | mutateDb 通过快照对比跳过无变更写入 |
| Schema 版本 | CURRENT_SCHEMA_VERSION 常量,为未来数据迁移做准备 |
可拔插数据源架构
数据访问抽象为 DataSourcePlugin 接口,支持热挂载:
| 数据源 | ID | 能力 |
|---|---|---|
| 浏览器本地存储 | local-storage |
读写、自动持久化 |
| Per-Entity Markdown 文件 | markdown-file |
导出 zip / 导入 md / 多文件上传 / 查重融合 |
完整导入导出流程:在「系统管理 → 数据源管理」页可一键导出 144 个 mock 实体为 zip(每个实体一个 md 文件,含 frontmatter + 长文本 body),再清空后导入恢复,全程 byte-for-byte 保真。详细测试见 测试报告。
明暗双主题
浅色模式(白天办公)+ 深色模式(夜间值班),一键切换。CSS 变量系统确保一致性,近期已完成主题令牌补全与对比度修复。
开箱即用
首次启动自动种子 3 个 OKR 目标 + 18 个关键结果 + 全量 Mock 数据(15 专项 · 26 课题 · 42 工单 · 50 Skills),无需配置即可体验完整流程。
快速开始
git clone <repository-url> && cd sb-okr
pnpm install
pnpm dev # → http://localhost:5173
首次启动自动加载种子数据,无需任何配置。
技术架构
┌──────────────────────────────────────────────────────────┐
│ UI 层 │
│ React 18 · TypeScript 5.8 (strict) · Vite 6 │
│ Tailwind CSS 3 · Zustand 5 · React Router 7 │
│ 12 路由 · 11 页面 · 懒加载 · React.memo · 自动保存表单 │
│ 5 专属空间 · 看板/网格/分组列表 · 共享详情面板 │
├──────────────────────────────────────────────────────────┤
│ 数据引擎 │
│ localStorage · Markdown 序列化 │
│ WAL + CRC32 + 快照 + 三级恢复 │
│ 原子读-改-写 · 操作审计日志 · Schema 版本管理 │
│ QuotaExceededError 事件通知 · 导入双重校验 │
└──────────────────────────────────────────────────────────┘
页面与路由
采用 Hash 路由(URL 形如 /#/space),兼容纯静态 CDN 托管。下表路径均省略 /# 前缀。
| 路由 | 页面 | 说明 |
|---|---|---|
/ |
WorkbenchPage | 工作台:统计概览、快速创建、空间入口 |
/space |
SpacePage | OKR 空间:六层实体树 + FAB + 搜索 |
/space/initiatives |
InitiativeSpacePage | 专项空间:按目标分组列表 |
/space/topics |
TopicSpacePage | 课题空间:四列看板 |
/space/tickets |
TicketSpacePage | 工单空间:看板 + 复盘追踪 |
/space/skills |
SkillSpacePage | Skills 空间:知识卡片网格 |
/reduction |
ReductionWarRoomPage | 降量作战室:麦肯锡 7 步法 · 工单降量闭环 |
/breakdown |
BreakdownPage | 业绩拆解:方法论 × 模式拆解矩阵 + SMART 质检 + OKR 生成 |
/analytics |
AnalyticsPage | 数据分析:完成度 / 工单 / Skill / 风险预警 / 时间线 |
/admin |
AdminPage | 系统管理:存储状态、备份导入、种子数据 |
/admin/datasource |
DataSourcePage | 数据源管理:导出 / 导入 / 维护(4 个 Tab) |
文件结构
src/
App.tsx # 12 路由,懒加载
main.tsx # 入口,错误边界
index.css # 主题令牌,Tailwind 层
pages/
WorkbenchPage.tsx # 工作台
SpacePage.tsx # OKR 空间(树形视图)
InitiativeSpacePage.tsx # 专项空间(分组列表)
TopicSpacePage.tsx # 课题空间(看板)
TicketSpacePage.tsx # 工单空间(看板+复盘)
SkillSpacePage.tsx # Skills 空间(卡片网格)
ReductionWarRoomPage.tsx # 降量作战室(麦肯锡 7 步法)
BreakdownPage.tsx # 业绩拆解工作台
AnalyticsPage.tsx # 数据分析仪表盘
AdminPage.tsx # 系统管理
DataSourcePage.tsx # 数据源管理(导出/导入/维护)
datasource/
OverviewTab.tsx # 概览 Tab
ExportTab.tsx # 导出 Tab(生成 zip)
ImportTab.tsx # 导入 Tab(解析 + 查重)
ConflictResolver.tsx # 冲突解决 UI
MaintenanceTab.tsx # 维护 Tab(孤立引用检测)
components/
layout/AppShell.tsx # 全局壳(6 导航标签 + 主题切换)
space/
SpaceHeader.tsx # 空间页头(搜索 + 主/二级筛选)
StatusBoard.tsx # 通用看板列组件
CreateEntityModal.tsx # 实体创建弹窗
EntityDetailPanel.tsx # 实体详情面板(6 种实体 + 毕业指标)
breakdown/ # 业绩拆解工作台组件(方法论/模式选择、拆解表单、草案预览、SMART 质检、历史)
analytics/ # 数据分析图表组件(DonutChart 环形、BarList 条形、Sparkline 迷你趋势、Timeline 时间线)
MockBadge.tsx # Mock 数据角标 + 工具函数
ui/ # Button, Card, Input, Modal, TextArea, Badge
hooks/
useSpaceTree.ts # OKR 树数据加载 + 订阅
useEntityList.ts # 通用实体列表加载 + 订阅
useTheme.ts # 主题切换
useAutosaveEntityForm.ts # 表单自动保存
lib/
types.ts # 全部领域类型(含 is_mock、lifecycle)
okr.ts # computeKrProgress()
initiativeGraduation.ts # 专项毕业判定与指标计算
utils.ts # cn() helper
localData.ts # Barrel 导出
localModeMarkdown.ts # Markdown 序列化/反序列化
breakdown/ # 业绩拆解引擎(方法论/模式定义、矩阵构建、草案生成、SMART 质检、方案存档)
analytics/ # 数据分析纯函数层(完成度/工单/Skill/风险聚合 + KR 进度历史存储)
localData/
types.ts # LocalDb, WAL, Snapshot 类型
infra.ts # 核心引擎(readDb/writeDb/mutateDb + 缓存)
crud.ts # 全部 CRUD 操作
seed.ts # OKR 种子数据 + 迁移
mock-seed.ts # 全量 Mock 数据(标记 is_mock=true)
checksum.ts # CRC32 完整性
storage.ts # localStorage 安全封装
markdownEntity.ts # Per-entity md 序列化
zipBundle.ts # Zip 打包 + manifest
dedup.ts # 查重融合(id_match/fingerprint_match/new)
datasource/ # 可拔插数据源插件
types.ts # DataSourcePlugin 接口
localStorage.ts # 浏览器本地存储实现
markdownFile.ts # Markdown 文件实现
index.ts # 插件注册中心
entityMeta.ts # 实体元数据 + 指纹
store/useAppStore.ts # Zustand(工作区身份)
质量保障
| 维度 | 状态 | 详情 |
|---|---|---|
| TypeScript 严格模式 | ✅ 零错误 | exactOptionalPropertyTypes + noImplicitReturns + 全部 no-unsafe-* |
| ESLint | ✅ 零警告 | recommendedTypeChecked + 严格规则集 |
| 单元 + 集成测试 | ✅ 300/300 通过 | 24 个测试文件 · 详见 测试报告 |
| E2E 测试 | ✅ 9 个套件 · 15 用例 | Playwright 覆盖核心流程与新增功能 |
| 生产构建 | ✅ 懒加载 + chunk 分割 | vendor / ui / 各专题页独立 chunk |
| CI 流水线 | ✅ GitHub Actions | check → lint → test → build 自动门禁 |
零 any |
✅ 0 处 | 全代码库无 any 类型 |
| 零安全风险 | ✅ | 无 dangerouslySetInnerHTML / eval / innerHTML |
| 导入导出 | ✅ 52 用例 | byte-for-byte 真实 mock 数据 + 完整 UI 流程模拟 |
| 写入检测 | ✅ | 关键路径使用 trySetLocalStorageValue 返回 boolean,失败时触发回滚 |
| 可访问性 | 🟡 持续改进 | 已完成树节点键盘化、焦点指示器统一、表单标签补全,详见 审计报告 |
注:当前工作区
src/lib/supabase.ts与src/lib/supabase.test.ts缺失,测试计数为 330。如需恢复 Supabase 远程模式支持,需重新安装@supabase/supabase-js并还原这两个文件。
测试覆盖
| 测试文件 | 用例 | 覆盖内容 |
|---|---|---|
infra.test.ts |
23 | readDb/writeDb 往返、WAL、CRC32 校验、快照、三级恢复、缓存失效 |
crud.test.ts |
18 | Objectives/KRs/Initiatives CRUD + 级联删除 |
crud-entities.test.ts |
23 | Topics/Tickets/Skills CRUD + 全链级联 |
seed.test.ts |
16 | 种子导入、幂等性、强制重导、排序归一化、is_mock 补设 |
mock-seed.ts (data) |
— | 全量 Mock 数据,144 个实体均带 is_mock: true |
markdownEntity.test.ts |
15 | Per-entity md 序列化:frontmatter、长文本、特殊字符、未知 section |
zipBundle.test.ts |
9 | zip 打包 + manifest + includeOperationLogs/Deleted |
dedup.test.ts |
14 | 查重:id_match / fingerprint_match / new · 4 种 resolution 策略 |
exportImportMock.test.ts |
34 | 真实 mock 数据 byte-for-byte round-trip(含 null/特殊字符/嵌套) |
endToEndExportImport.test.ts |
18 | 端到端 UI 流程:导出→zip→上传→解析→查重→应用→验证 |
datasource/index.test.ts |
7 | 数据源插件注册、ping、行为 |
localModeMarkdown.test.ts |
14 | Front matter、DB bundle 序列化往返、schema 兼容 |
okr.test.ts |
13 | computeKrProgress 边界场景 |
Button.test.tsx / Badge.test.tsx |
11 / 6 | 组件变体、加载、禁用 |
useAutosaveEntityForm.test.tsx |
2 | 草稿读写清理 |
okrTemplates.test.ts |
5 | 岗位 OKR 模板结构(架构师 / FDE 各 3 组目标 + 量化 KR) |
breakdown/engine.test.ts |
11 | 拆解矩阵构建、parseCell 量化解析、buildDraft 草案映射 |
breakdown/smartCheck.test.ts |
5 | SMART 5 维质检判定 |
breakdown/storage.test.ts |
5 | 方案存档 CRUD、50 份上限淘汰、坏 JSON 容错 |
analytics/compute.test.ts |
12 | 完成度聚合、工单/Skill 统计、风险规则、时间线映射 |
analytics/history.test.ts |
5 | KR 历史追加/去重/上限淘汰/坏 JSON 容错 |
skillExport.test.ts |
18 | Skill 导出:Markdown 渲染、JSON 序列化、文件名构建 |
artifactTemplate.test.ts |
12 | 模板章节重命名/新增/删除、默认克隆、边界 no-op |
项目规模
106 个源文件 · 18,000+ 行代码
24 个测试文件 · 300 个用例 · 100% 通过
9 个 E2E 套件 · 15 个用例
11 个页面 · 12 条路由 · 9 种实体 · 5 个专属空间
1 个完整数据引擎 · 1 个可拔插数据源系统 · 1 套专项毕业机制
1 套业绩拆解矩阵引擎 · 1 个岗位 OKR 模板库 · 1 个数据分析仪表盘
常用命令
| 命令 | 说明 |
|---|---|
pnpm dev |
开发服务器(HMR) |
pnpm check |
TypeScript 类型检查 |
pnpm lint |
ESLint 检查 |
pnpm test |
单元 + 集成测试(300 用例) |
pnpm test:run |
同上 |
pnpm test:coverage |
带 V8 覆盖率报告 |
pnpm build |
生产构建 |
pnpm test:e2e |
Playwright E2E 测试 |
ANALYZE=true pnpm build |
Bundle 分析 |
部署
| 方式 | 说明 | 配置文件 |
|---|---|---|
| Vercel | SPA rewrite 已配置,一键部署 | vercel.json |
| Docker | 多阶段构建,nginx 托管 | deploy/Dockerfile |
| 静态托管 | dist/ 目录可直接部署 |
— |
| Meoo(秒悟) | CDN 公网发布,当前演示地址 https://yz13tp0d7116.meoo.fun | meoo deploy --skip-build |
文档体系
完整文档入口: docs/README.md
质量文档
| 文档 | 说明 |
|---|---|
| 项目审计报告 | 5 维度质量审计(可访问性 / 性能 / 响应式 / 主题 / 反模式)+ 历次修复批次 |
| 测试报告 | 235 用例覆盖率 + 端到端导入导出验证 + 真实 mock 数据 round-trip |
| 测试摘要 JSON | 测试结果结构化数据 |
产品文档
| 文档 | 说明 |
|---|---|
| 产品需求文档 (PRD) | 用户故事、功能规格、竞品分析、指标体系 |
| 用户手册 | 面向最终用户的产品使用指南 |
| 产品路线图 | 4 阶段里程碑、技术决策记录 |
| 版本变更 | 完整特性清单与开发历史 |
| 产品指标 | 北极星指标、KPI、漏斗分析 |
| 方法论 | 核心理念、落地方法、推广指南、实践案例 |
技术文档
| 文档 | 说明 |
|---|---|
| 架构总览 | 系统架构、技术栈、文件结构 |
| 数据引擎 | WAL / CRC32 / 快照机制深度解析 |
| 实体层级 | 六层实体、状态机、级联规则 |
| 编码规范 | TypeScript / React / 样式规范 |
| 数据层 API | CRUD 函数完整参考 |
| Hooks API | React Hooks 使用指南 |
| 主题系统 | CSS 令牌与双主题切换 |
| 部署指南 | Vercel / Docker / CI-CD |
License
Private — Internal Use Only