Repos / standup-coder / sokr OWN

sokr

SOKR

# SOKR **从复盘到能力:让每次故障都成为团队的智能体资产** [![CI](https://github.com/allengaller/standup-coder/actions/workflows/ci.yml/badge.svg)](https://github.com/allengaller/standup-coder/actions/workflows/ci.yml) [![TypeScript](https://img.shields.io/badge/TypeScript-5.8-3178C6?logo=typescript&logoColor=white)](https://www.typescriptlang.org/) [![React](https://img.shields.io/badge/React-18-61DAFB?logo=react&logoColor=white)](https://react.dev/) [![Vite](https://img.shields.io/badge/Vite-6-646CFF?logo=vite&logoColor=white)](https://vite.dev/) [![Tests](https://img.shields.io/badge/tests-330%20passed-success)](#质量保障)

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