skill-forge-hub 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +25 -4
- package/annual-report/SKILL.md +17 -2
- package/annual-report/resources/disk-and-html.md +3 -1
- package/annual-report/resources/reference.html +360 -0
- package/annual-report/user-config.md +3 -0
- package/cli.js +175 -36
- package/daily-report/SKILL.md +20 -5
- package/daily-report/resources/content-rules.md +9 -9
- package/daily-report/resources/disk-and-html.md +4 -2
- package/daily-report/resources/reference.html +613 -0
- package/daily-report/resources/usage-guide.md +10 -10
- package/daily-report/user-config.md +5 -2
- package/magic-deck/SKILL.md +52 -0
- package/magic-deck/resources/deck-spec.md +248 -0
- package/magic-deck/resources/reference.html +710 -0
- package/magic-deck/user-config.md +37 -0
- package/meta-forge/SKILL.md +46 -0
- package/meta-forge/resources/forge-rules.md +74 -0
- package/meta-forge/resources/usage-guide.md +41 -0
- package/meta-forge/user-config.md +19 -0
- package/package.json +3 -1
- package/spec-doc2spec/SKILL.md +17 -8
- package/spec-doc2spec/user-config.md +22 -0
- package/spec-spec2doc/SKILL.md +17 -8
- package/spec-spec2doc/user-config.md +22 -0
- package/weekly-report/SKILL.md +20 -5
- package/weekly-report/resources/content-rules.md +10 -10
- package/weekly-report/resources/disk-and-html.md +4 -2
- package/weekly-report/resources/industry-dictionary.md +1 -1
- package/weekly-report/resources/reference.html +866 -0
- package/weekly-report/resources/usage-guide.md +10 -10
- package/weekly-report/user-config.md +5 -2
package/README.md
CHANGED
|
@@ -12,22 +12,26 @@
|
|
|
12
12
|
|
|
13
13
|
| 分类 | Category | 说明 | 收录技能 |
|
|
14
14
|
|:---|:---|:---|:---|
|
|
15
|
-
| 报表汇演 | Reports | 聚合 git 与工程数据,按周期产出报告(日报 / 周报 /
|
|
15
|
+
| 报表汇演 | Reports | 聚合 git 与工程数据,按周期产出报告(日报 / 周报 / 月报 / 年报) | daily-report、weekly-report、annual-report |
|
|
16
16
|
| 文档装裱 | Documents | 文档转换与美化:Word / Markdown / 纯文本 → 精美 HTML + 逐章截图 | article-to-html |
|
|
17
17
|
| 工程提效 | Engineering | 开发流水线技能:部署、发布、审查、测试、文档 ↔ 规格互转 | spec-doc2spec、spec-spec2doc |
|
|
18
|
+
| 演示汇演 | Slides | HTML 形态、PPT 体验的魔法幻灯:播放引擎 + 多套风格 + 逐页截图 + 全屏放映 | magic-deck |
|
|
18
19
|
| 数据整备 | Data | Excel / CSV / 图表、数据清洗与模板整理 | (规划中) |
|
|
19
20
|
| 沟通协作 | Communication | 邮件起草、会议纪要、通知周知 | (规划中) |
|
|
20
|
-
| 技能自造 | Meta | 锻造技能本身的元技能(创建技能 / 插件) |
|
|
21
|
+
| 技能自造 | Meta | 锻造技能本身的元技能(创建技能 / 插件) | meta-forge |
|
|
21
22
|
|
|
22
23
|
## 技能清单
|
|
23
24
|
|
|
24
25
|
| 技能 | 分类 | 目录 | 说明 |
|
|
25
26
|
|:---|:---|:---|:---|
|
|
26
|
-
| daily-report | 报表汇演 | [daily-report/](daily-report/) | 聚合各仓库 git 提交 +
|
|
27
|
-
| weekly-report | 报表汇演 | [weekly-report/](weekly-report/) |
|
|
27
|
+
| daily-report | 报表汇演 | [daily-report/](daily-report/) | 聚合各仓库 git 提交 + 会话口述生成日报(今日任务进度/明日计划/风险阻塞点),支持自然语言日期(今天/昨天/上周三/10月20号)、连续多日批量、纯文字/图片/文件整理、自定义模板、12 行业词条 |
|
|
28
|
+
| weekly-report | 报表汇演 | [weekly-report/](weekly-report/) | 同上生成周报(本周任务进度/下周计划/风险阻塞点 + 本周概览卡),周结束日可配置(默认周五,可改周日等),支持自然语言周定位(本周/上周/10月第2周/节假日锚定) |
|
|
29
|
+
| annual-report | 报表汇演 | [annual-report/](annual-report/) | 生成年度总结(五段式:年度概览/核心成果/经验成长/不足反思/新年规划),12 行业职业词典,git 全年提交聚合或纯文字/图片/文件,支持自定义模板与自然语言年度定位 |
|
|
28
30
|
| article-to-html | 文档装裱 | [article-to-html/](article-to-html/) | Word / Markdown / 纯文本 → 精美独立 HTML(思源黑体 + Roboto 商用免费字体,图表 HTML/CSS 重绘),逐章截图(Retina 2x);现成 HTML 可直接截图或先美化 |
|
|
29
31
|
| spec-doc2spec | 工程提效 | [spec-doc2spec/](spec-doc2spec/) | Word / Markdown 需求文档转结构化需求切片;自动检测 Pandoc,未装引导跨系统安装 |
|
|
30
32
|
| spec-spec2doc | 工程提效 | [spec-spec2doc/](spec-spec2doc/) | Markdown 规格导出为 Word / PDF 交付文档;自动检测 Pandoc,未装引导跨系统安装 |
|
|
33
|
+
| magic-deck | 演示汇演 | [magic-deck/](magic-deck/) | 内容 → 单文件 HTML 幻灯(16:9 舞台 + 播放引擎 + 四套风格 + 全屏放映纯净模式):自动播放/循环/间隔、键盘热键、页内连接、逐页 PNG 截图与主体复制(不含操作元素) |
|
|
34
|
+
| meta-forge | 技能自造 | [meta-forge/](meta-forge/) | 元技能:从需求出发锻造完整技能包(薄入口 + resources 拆分 + user-config),自动植入四大机制(CONFIG_VERSION 钥匙 / user-config 抽离 / reference 双轨 / 自检纪律),入仓库时自动登记 README 与 cli.js 分类表 |
|
|
31
35
|
|
|
32
36
|
## 安装
|
|
33
37
|
|
|
@@ -37,6 +41,7 @@
|
|
|
37
41
|
npm i -g skill-forge-hub
|
|
38
42
|
skill-forge ls # 列出全部技能与说明(只读)
|
|
39
43
|
skill-forge init # 交互式挑选技能,自动探测并安装到 AI 助手技能目录
|
|
44
|
+
skill-forge update # 升级已安装技能(配置版本感知,见下)
|
|
40
45
|
```
|
|
41
46
|
|
|
42
47
|
非交互 / 指定目录场景:
|
|
@@ -56,12 +61,26 @@ cp -R spec-doc2spec spec-spec2doc <你的 AI 助手技能目录>/ # 仅 SpecCo
|
|
|
56
61
|
|
|
57
62
|
复制后直接说「写日报」「写周报」或丢给它一个文档即可触发;问「日报怎么用 / 周报怎么用」输出使用说明。
|
|
58
63
|
|
|
64
|
+
## 升级与配置保护
|
|
65
|
+
|
|
66
|
+
`skill-forge update`(默认升级全部已装技能,可用 `--skills a,b` 指定)在覆盖技能文件前自动保护你的配置:
|
|
67
|
+
|
|
68
|
+
- **常驻保护**:目标目录已存在的 `user-config.md`(及技能 `.preserve` 清单声明的文件)永不被覆盖,你的本地配置永久保留
|
|
69
|
+
- **版本感知**:官方 `user-config.md` 首行的 `CONFIG_VERSION` 高于你的本地版本(配置结构增/减/改名)时——
|
|
70
|
+
1. 先把你的配置备份为 `user-config.md.bak-<时间戳>`
|
|
71
|
+
2. 交互三选一:`[1] 官方覆盖`(旧配置在备份中随时找回)/ `[2] 保留我的` + 官方版另存 `.upstream` 对照(默认)/ `[3] 稍后处理`
|
|
72
|
+
3. `--yes` 或非交互环境默认 `[2]`,最安全
|
|
73
|
+
- **版本一致**:无感升级,只更新技能文件,配置原样保留
|
|
74
|
+
|
|
75
|
+
技能维护者约定:官方配置结构每次变化(新增/改名/删除配置键)时,`user-config.md` 的 `CONFIG_VERSION` 递增 1,并在 SKILL.md「配置版本机制」节写明迁移规则(AI 每次执行前也会自检该版本)。
|
|
76
|
+
|
|
59
77
|
## 目录结构
|
|
60
78
|
|
|
61
79
|
```
|
|
62
80
|
.
|
|
63
81
|
├── README.md # 本文件(双语介绍 + 技能分类)
|
|
64
82
|
├── template/ # 新技能模板(薄入口 + resources 拆分规范)
|
|
83
|
+
├── meta-forge/ # 元技能:造 skill 的 skill(四大机制植入 + 仓库登记)
|
|
65
84
|
├── article-to-html/
|
|
66
85
|
│ ├── SKILL.md # 文档 → 精美 HTML 完整流程 + 逐章截图
|
|
67
86
|
│ ├── design-system.md # 设计系统(字体 / 配色 / 排版 / 图表重绘)
|
|
@@ -93,3 +112,5 @@ cp -R spec-doc2spec spec-spec2doc <你的 AI 助手技能目录>/ # 仅 SpecCo
|
|
|
93
112
|
- **新技能按 `template/` 结构创建**,目录名 = 技能名(英文短横线),并归入上方「技能分类」表对应分类
|
|
94
113
|
- **已有技能按各自结构维护**:article-to-html 采用 SKILL.md + design-system.md + scripts/ 平铺结构;spec-doc2spec / spec-spec2doc 为单文件薄技能(委托 SpecCore ask 引擎)
|
|
95
114
|
- **通用原则**:零外部依赖(禁 CDN / 外链,内网离线双击可开)、双系统兼容(macOS / Windows)
|
|
115
|
+
- **配置升级**:user-config.md 首行带 `CONFIG_VERSION`,官方配置结构变化时递增并写明迁移规则;CLI update 与 AI 执行时均按该版本做备份 + 迁移提示
|
|
116
|
+
- **元技能**:meta-forge 造技能时的规范真相源在 `resources/forge-rules.md`(澄清清单 / 结构规范 / 四大机制 / 校验清单 / 仓库登记),SKILL.md 流程节点与 template/ 模板均与之对齐
|
package/annual-report/SKILL.md
CHANGED
|
@@ -11,7 +11,7 @@ disable-model-invocation: false
|
|
|
11
11
|
|
|
12
12
|
## 生成流程
|
|
13
13
|
|
|
14
|
-
0. **读用户配置**(DISK/FORMATS/DIR/OPEN_HTML/TEMPLATE/ROLE/CONFIRM、自定义模板)→ 先 Read 同目录 `user-config.md`
|
|
14
|
+
0. **读用户配置**(DISK/FORMATS/DIR/OPEN_HTML/TEMPLATE/ROLE/CONFIRM/CONFIG_VERSION、自定义模板)→ 先 Read 同目录 `user-config.md`
|
|
15
15
|
1. **解析年度**(自然语言 → 目标年度区间)→ 读 `resources/date-parsing.md`
|
|
16
16
|
2. **收集数据**(git 全年提交聚合 + 会话口述 + 口头补充,合并去重)→ 读 `resources/data-collection.md`
|
|
17
17
|
3. **内容归类与润色**(五段式结构 / 聚合来源 / 纯文字模式 / 输出格式 / 写作风格)→ 读 `resources/content-rules.md`
|
|
@@ -21,7 +21,22 @@ disable-model-invocation: false
|
|
|
21
21
|
|
|
22
22
|
## ⚙️ 配置与自定义模板
|
|
23
23
|
|
|
24
|
-
**执行本 skill 前必须先 Read 同目录 `user-config.md`**:默认配置(DISK/FORMATS/DIR/OPEN_HTML/TEMPLATE/ROLE/CONFIRM)与自定义模板都在该文件中,以它为准。升级技能时 user-config.md
|
|
24
|
+
**执行本 skill 前必须先 Read 同目录 `user-config.md`**:默认配置(DISK/FORMATS/DIR/OPEN_HTML/TEMPLATE/ROLE/CONFIRM/CONFIG_VERSION)与自定义模板都在该文件中,以它为准。升级技能时 user-config.md 不会被覆盖,你的修改永久保留;官方更新配置时另存 `user-config.md.upstream` 对照文件,可按需手动合并新配置点。
|
|
25
|
+
|
|
26
|
+
## 配置版本机制(升级保护)
|
|
27
|
+
|
|
28
|
+
本 skill 当前配置版本为 `1`(对应 user-config.md 中的 `CONFIG_VERSION`)。执行时若发现 user-config.md 的 CONFIG_VERSION 与本节声明的当前版本不一致:
|
|
29
|
+
|
|
30
|
+
1. 先将旧 user-config.md 备份为 `user-config.md.bak-<时间戳>`(同目录,绝不删除旧值)
|
|
31
|
+
2. 按本节「配置升级规则」迁移字段:新增字段补默认值、改名字段按映射改写、删除字段的值保留在备份中并在对话提示用户手动确认
|
|
32
|
+
3. 更新 CONFIG_VERSION 为当前版本
|
|
33
|
+
4. 对话中明确告知用户「检测到配置版本从 X 升级到 Y,旧配置已备份至 <路径>」
|
|
34
|
+
|
|
35
|
+
升级本 skill 时,配置结构如有变化必须同步更新本节的当前版本号与迁移说明;禁止在未声明版本变更的情况下静默修改配置语义。
|
|
36
|
+
|
|
37
|
+
## 文档同步自检纪律(维护者必读)
|
|
38
|
+
|
|
39
|
+
修改本 skill 任一文件(SKILL.md / user-config.md / resources/*)后,必须 grep 全文核对相关关键词在各文件间一致(如章节名/字段名/效果参数改名时新旧词全仓核对,旧词零残留才算完成)。修改 HTML 效果必须同步更新 `resources/reference.html` 与 `disk-and-html.md` 对应描述,三者以 reference.html 为真相源;改完后互相 grep 关键参数确认对齐。
|
|
25
40
|
|
|
26
41
|
## 规则速览
|
|
27
42
|
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
> ⛔ **Reference 铁律(最高优先)**:本目录 `reference.html` 是定稿样式源码。生成 HTML 时必须先 Read `resources/reference.html` 与本文件两份,以 reference.html 为骨架模板逐处替换数据(标题/日期/五段条目/TL;DR 摘要/数据卡数字/月提交柱图),本文件的描述是参数解释、变体规则与禁止项;两者冲突时**以 reference.html 为准**。修改本 skill 的 HTML 效果时,必须同步更新 `resources/reference.html` 与本文档的对应描述,禁止只改一处。
|
|
2
|
+
|
|
1
3
|
# 落盘与 HTML(年度版式)
|
|
2
4
|
|
|
3
5
|
## 落盘
|
|
@@ -19,7 +21,7 @@
|
|
|
19
21
|
- 年度提交月度柱图(研发词条;其它词条按职业词典图表主题):.cb-col 12 根柱一月到十二月、.cb-bar width:24px 柱宽(太小显细弱)、柱高按当月提交数、position:relative 柱上带 .cb-tip hover 浮层「X月 · N 次提交」;置于里程碑节内时间线之后
|
|
20
22
|
- 青色渐变 40px 大胶囊「一键复制」按钮(var(--cyan)→#0284c7,30px 青色光晕,hover 45px 光晕上浮;flex 居中布局,内置 16px 内联 SVG 双矩形复制图标(白色 currentColor 描边、图标与文字 gap 8px、禁用 emoji 图标),复制成功后图标切对勾、文字变「已复制」);复制源必须用 txt 文件内容(含换行、无 #/##/> 等 Markdown 符号,严禁用 md 内容当复制源);JS 用 navigator.clipboard.writeText,失败回退隐藏 textarea + document.execCommand('copy')(兼容 file:// 打开)
|
|
21
23
|
- 入场动画:头部淡入下滑、五张卡片依次错峰上浮淡入(概览 0.13s/成果 0.26s/成长 0.4s/反思 0.54s/展望 0.68s)、按钮弹入;卡片入场动画 fadeDown/fadeUp/riseIn 的 fill-mode 必须用 backwards 严禁 both(both 使动画结束后最后一帧 transform:none 永久覆盖 hover 的 3D 偏转 transform,hover 偏转会完全失效)
|
|
22
|
-
- hover 微交互:卡片上浮 translateY(-2px) + 阴影加深 + inset 发光增强、条目淡青底 rgba(14,165,233,.06)
|
|
24
|
+
- hover 微交互:卡片上浮 translateY(-2px) + 阴影加深 + inset 发光增强、条目淡青底 rgba(14,165,233,.06)、时间线节点与序号徽章放大微旋(li:hover .idx transform:scale(1.18) rotate(-4deg)、球内数字放大 12→14px、数字必须用 <b> 包裹(.idx b{display:inline-block;transition:transform .2s ease})+ li:hover .idx b{transform:rotate(-6deg)} 数字在球内独立微旋;用户澄清 hover 变大的字体仅小球内数字,desc 正文保持 15px 不变不加斜体;销售 demo 版类名 .num:li:hover .num scale(1.22) rotate(-6deg)、数字 13→15px 同样 <b> 包裹 + rotate(-6deg))、数据卡上浮、按钮上浮/按压回缩
|
|
23
25
|
- 卡片级 3D 微倾斜(严禁全页级 mousemove 倾斜):每张卡片 hover 时仅该卡片随鼠标偏转(perspective(900px) + rotateY(calc(var(--mx,0)*2.5deg)) rotateX(calc(var(--my,0)*-2.5deg)) ±1.25° 极轻微,与 hover 上浮合并写同一条 transform 严禁拆两条相互覆盖);JS 对每张卡片监听 mousemove 计算卡内相对位置((clientX-rect.left)/rect.width*2-1 归一化 -1~1)只更新该卡 --mx/--my,mouseleave 归零回正,transition transform .18s 平滑;移动端无 mousemove 保持 0 不倾斜
|
|
24
26
|
- CRT 扫描光带(.scanband position:fixed、left:0/right:0、height:150px、linear-gradient(180deg,transparent,rgba(0,240,255,.03) 50%,transparent)、animation:scanMove 11s linear infinite(top -22%→112%)、pointer-events:none、z-index:998,置于 scanlines 之下一层)
|
|
25
27
|
- 禁止写 @media (prefers-reduced-motion: reduce) 禁用动画的媒体查询块(用户系统开启减少动画时该块会禁用全部动效)
|
|
@@ -0,0 +1,360 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="zh-CN">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
6
|
+
<title>2026 研发年度总结</title>
|
|
7
|
+
<style>
|
|
8
|
+
:root{--cyan:#0ea5e9;--bg:#0a1929;--card:#0b1e37;--border:rgba(14,165,233,.15);--text:#bae6fd;--muted:#5b7fa5;--green:#14b8a6;--orange:#f97316;--purple:#6366f1;--rose:#f43f5e}
|
|
9
|
+
*{margin:0;padding:0;box-sizing:border-box}
|
|
10
|
+
html,body{background:var(--bg)}
|
|
11
|
+
body{
|
|
12
|
+
font-family:ui-monospace,'SF Mono',SFMono-Regular,Menlo,Consolas,'PingFang SC','Microsoft YaHei',monospace;
|
|
13
|
+
color:var(--text);-webkit-font-smoothing:antialiased;overflow-x:hidden;
|
|
14
|
+
}
|
|
15
|
+
/* 三层科技底纹 */
|
|
16
|
+
.grid-pattern{position:fixed;inset:0;z-index:0;pointer-events:none;
|
|
17
|
+
background:linear-gradient(rgba(0,240,255,.03) 1px,transparent 1px),linear-gradient(90deg,rgba(0,240,255,.03) 1px,transparent 1px);
|
|
18
|
+
background-size:60px 60px}
|
|
19
|
+
.stars{position:fixed;inset:0;z-index:0;pointer-events:none;
|
|
20
|
+
background:radial-gradient(1px 1px at 12% 22%,rgba(255,255,255,.4),transparent),radial-gradient(1px 1px at 28% 68%,rgba(0,240,255,.5),transparent),radial-gradient(1.5px 1.5px at 45% 15%,rgba(168,85,247,.4),transparent),radial-gradient(1px 1px at 62% 78%,rgba(0,255,136,.4),transparent),radial-gradient(1px 1px at 78% 32%,rgba(255,255,255,.35),transparent),radial-gradient(1.5px 1.5px at 88% 58%,rgba(0,240,255,.45),transparent),radial-gradient(1px 1px at 8% 85%,rgba(255,255,255,.3),transparent),radial-gradient(1px 1px at 55% 45%,rgba(0,240,255,.35),transparent)}
|
|
21
|
+
.scanlines{position:fixed;inset:0;z-index:999;pointer-events:none;
|
|
22
|
+
background:repeating-linear-gradient(0deg,transparent,transparent 2px,rgba(0,240,255,.015) 2px,rgba(0,240,255,.015) 4px)}
|
|
23
|
+
.scanband{position:fixed;left:0;right:0;height:150px;z-index:998;pointer-events:none;
|
|
24
|
+
background:linear-gradient(180deg,transparent,rgba(0,240,255,.03) 50%,transparent);
|
|
25
|
+
animation:scanMove 11s linear infinite}
|
|
26
|
+
@keyframes scanMove{from{top:-22%}to{top:112%}}
|
|
27
|
+
.wrap{position:relative;z-index:1;max-width:760px;margin:0 auto;padding:40px 20px}
|
|
28
|
+
/* 头部卡片 */
|
|
29
|
+
.header-card{position:relative;overflow:hidden;background:var(--card);border:1px solid var(--border);border-radius:6px;
|
|
30
|
+
padding:34px 28px 26px;text-align:center;margin-bottom:18px;
|
|
31
|
+
box-shadow:0 8px 28px rgba(0,0,0,.35),inset 0 1px 0 rgba(14,165,233,.12);
|
|
32
|
+
background-image:repeating-linear-gradient(0deg,rgba(14,165,233,.02),rgba(14,165,233,.02) 8px,transparent 8px,transparent 16px)}
|
|
33
|
+
.header-card h1{font-size:26px;letter-spacing:2px;margin-bottom:8px;
|
|
34
|
+
background:linear-gradient(90deg,#7dd3fc,#0ea5e9,#5eead4);-webkit-background-clip:text;background-clip:text;color:transparent;
|
|
35
|
+
animation:titleGlow 3s ease-in-out infinite}
|
|
36
|
+
@keyframes titleGlow{0%,100%{text-shadow:0 0 8px rgba(14,165,233,.5),0 0 22px rgba(14,165,233,.25)}50%{text-shadow:0 0 14px rgba(14,165,233,.85),0 0 34px rgba(14,165,233,.45)}}
|
|
37
|
+
.header-sub{font-size:12px;color:var(--muted);letter-spacing:1px;margin-bottom:12px}
|
|
38
|
+
.header-badge{display:inline-block;font-size:11px;color:#7dd3fc;border:1px solid rgba(14,165,233,.3);border-radius:999px;padding:4px 14px}
|
|
39
|
+
.card-glow{position:absolute;inset:-40% -20% auto;height:70%;pointer-events:none;
|
|
40
|
+
background:radial-gradient(ellipse at 50% 10%,rgba(14,165,233,.25),transparent 70%);
|
|
41
|
+
animation:cardGlow 3s ease-in-out infinite;transform-origin:top center;opacity:.5}
|
|
42
|
+
@keyframes cardGlow{0%,100%{opacity:.5;transform:scale(1)}50%{opacity:1;transform:scale(1.6)}}
|
|
43
|
+
/* 四边浮光线 */
|
|
44
|
+
.scanline-el{position:absolute;pointer-events:none}
|
|
45
|
+
.scan-x{top:0;left:0;height:1px;width:100%;background:linear-gradient(90deg,transparent,var(--cyan),transparent);animation:scanX 3s linear infinite}
|
|
46
|
+
.scan-y{top:0;right:0;width:1px;height:100%;background:linear-gradient(180deg,transparent,var(--cyan),transparent);animation:scanY 3s linear infinite}
|
|
47
|
+
.scan-x-rev{bottom:0;left:0;height:1px;width:100%;background:linear-gradient(90deg,transparent,var(--cyan),transparent);animation:scanXRev 3s linear infinite}
|
|
48
|
+
.scan-y-rev{top:0;left:0;width:1px;height:100%;background:linear-gradient(180deg,transparent,var(--cyan),transparent);animation:scanYRev 3s linear infinite}
|
|
49
|
+
@keyframes scanX{from{transform:translateX(-100%)}to{transform:translateX(100%)}}
|
|
50
|
+
@keyframes scanY{from{transform:translateY(-100%)}to{transform:translateY(100%)}}
|
|
51
|
+
@keyframes scanXRev{from{transform:translateX(100%)}to{transform:translateX(-100%)}}
|
|
52
|
+
@keyframes scanYRev{from{transform:translateY(100%)}to{transform:translateY(-100%)}}
|
|
53
|
+
/* 分节卡片 */
|
|
54
|
+
.section{position:relative;overflow:hidden;background:var(--card);border:1px solid var(--border);border-radius:6px;
|
|
55
|
+
padding:22px 24px 22px 32px;margin-bottom:18px;
|
|
56
|
+
box-shadow:0 8px 28px rgba(0,0,0,.35),inset 0 1px 0 rgba(14,165,233,.12);
|
|
57
|
+
background-image:repeating-linear-gradient(0deg,rgba(14,165,233,.02),rgba(14,165,233,.02) 8px,transparent 8px,transparent 16px);
|
|
58
|
+
transition:transform .18s ease,box-shadow .18s ease}
|
|
59
|
+
.section:hover{transform:translateY(-2px);box-shadow:0 14px 34px rgba(0,0,0,.45),inset 0 0 22px rgba(14,165,233,.08)}
|
|
60
|
+
.sec-bar{position:absolute;left:0;top:0;bottom:0;width:8px}
|
|
61
|
+
.sec-ov .sec-bar{background:linear-gradient(180deg,#38bdf8,#0ea5e9);box-shadow:0 0 12px rgba(14,165,233,.3)}
|
|
62
|
+
.sec-ms .sec-bar{background:linear-gradient(180deg,#5eead4,#14b8a6);box-shadow:0 0 12px rgba(20,184,166,.3)}
|
|
63
|
+
.sec-gw .sec-bar{background:linear-gradient(180deg,#a5b4fc,#6366f1);box-shadow:0 0 12px rgba(99,102,241,.3)}
|
|
64
|
+
.sec-rf .sec-bar{background:linear-gradient(180deg,#fda4af,#e11d48);box-shadow:0 0 12px rgba(244,63,94,.3)}
|
|
65
|
+
.sec-pl .sec-bar{background:linear-gradient(180deg,#fdba74,#f97316);box-shadow:0 0 12px rgba(249,115,22,.3)}
|
|
66
|
+
.sec-head{display:flex;align-items:center;gap:10px;margin-bottom:16px}
|
|
67
|
+
.sec-head svg{flex:0 0 auto}
|
|
68
|
+
.sec-head h2{font-size:18px;letter-spacing:1px;animation:secGlow 3s ease-in-out infinite}
|
|
69
|
+
.sec-ov .sec-head h2{color:#7dd3fc}.sec-ms .sec-head h2{color:#5eead4}.sec-gw .sec-head h2{color:#c7d2fe}
|
|
70
|
+
.sec-rf .sec-head h2{color:#fda4af}.sec-pl .sec-head h2{color:#fdba74}
|
|
71
|
+
@keyframes secGlow{0%,100%{text-shadow:0 0 6px rgba(14,165,233,.4)}50%{text-shadow:0 0 14px rgba(14,165,233,.8)}}
|
|
72
|
+
/* 概览:TL;DR + 数据卡 */
|
|
73
|
+
.tldr-line{font-size:15px;line-height:1.75;margin-bottom:18px}
|
|
74
|
+
.tldr-line b{color:#7dd3fc;font-weight:700}
|
|
75
|
+
.stat-row{display:flex;gap:12px;flex-wrap:wrap}
|
|
76
|
+
.stat-card{flex:1 1 160px;position:relative;background:rgba(14,165,233,.05);border:1px solid var(--border);
|
|
77
|
+
border-radius:6px;padding:16px 14px;min-width:140px;overflow:hidden;
|
|
78
|
+
transition:transform .18s ease,box-shadow .18s ease}
|
|
79
|
+
.stat-card:hover{transform:translateY(-2px);box-shadow:0 8px 20px rgba(0,0,0,.35)}
|
|
80
|
+
.stat-card::before{content:'';position:absolute;left:0;top:0;bottom:0;width:4px;background:linear-gradient(180deg,#38bdf8,#0ea5e9)}
|
|
81
|
+
.stat-num{font-size:28px;font-weight:900;letter-spacing:1px;
|
|
82
|
+
background:linear-gradient(90deg,#7dd3fc,#0ea5e9,#5eead4);-webkit-background-clip:text;background-clip:text;color:transparent}
|
|
83
|
+
.stat-label{font-size:12px;color:var(--muted);margin-top:6px}
|
|
84
|
+
/* 里程碑时间线 */
|
|
85
|
+
.timeline{position:relative;padding-left:26px}
|
|
86
|
+
.timeline::before{content:'';position:absolute;left:7px;top:6px;bottom:6px;width:2px;background:linear-gradient(180deg,rgba(14,165,233,.5),rgba(20,184,166,.5))}
|
|
87
|
+
.tl-group{position:relative;margin-bottom:18px}
|
|
88
|
+
.tl-node{position:absolute;left:-26px;top:0;width:16px;height:16px;border-radius:50%;
|
|
89
|
+
display:flex;align-items:center;justify-content:center;font-size:8px;font-weight:900;color:#fff}
|
|
90
|
+
.tl-node.q1,.tl-node.q2{background:radial-gradient(circle at 30% 28%,#64748b,#475569 60%,#334155);box-shadow:0 0 8px rgba(100,116,139,.3)}
|
|
91
|
+
.tl-node.q3{background:radial-gradient(circle at 30% 28%,#7dd9cf,#14b8a6 55%,#0d9488);box-shadow:0 0 10px rgba(20,184,166,.5)}
|
|
92
|
+
.tl-node.q4{background:radial-gradient(circle at 30% 28%,#7dd3fc,#0ea5e9 55%,#0369a1);box-shadow:0 0 10px rgba(14,165,233,.5);animation:nodePulse 2.4s ease-in-out infinite}
|
|
93
|
+
@keyframes nodePulse{0%,100%{box-shadow:0 0 8px rgba(14,165,233,.4)}50%{box-shadow:0 0 18px rgba(14,165,233,.8)}}
|
|
94
|
+
.tl-q{font-size:12px;font-weight:700;color:#7dd3fc;letter-spacing:1px;margin-bottom:8px}
|
|
95
|
+
.tl-item{position:relative;padding:10px 0 10px 16px;border-top:1px dashed rgba(14,165,233,.18)}
|
|
96
|
+
.tl-item::before{content:'';position:absolute;left:0;top:19px;width:5px;height:5px;border-radius:50%;background:rgba(94,234,212,.8);box-shadow:0 0 6px rgba(94,234,212,.5)}
|
|
97
|
+
.tl-desc{font-size:15px;line-height:1.65}
|
|
98
|
+
.tl-meta{font-size:12px;color:var(--muted);margin-top:4px}
|
|
99
|
+
.tl-badge{display:inline-block;font-size:11px;color:var(--muted);border:1px solid rgba(14,165,233,.2);border-radius:999px;padding:1px 10px;margin-left:6px}
|
|
100
|
+
.tl-empty{font-size:13px;color:var(--muted);padding:6px 0 10px 16px}
|
|
101
|
+
/* 柱图 */
|
|
102
|
+
.cb-wrap{margin-top:18px;padding-top:14px;border-top:1px dashed rgba(14,165,233,.18)}
|
|
103
|
+
.cb-title{font-size:12px;color:var(--muted);margin-bottom:12px;letter-spacing:1px}
|
|
104
|
+
.cb-chart{display:flex;align-items:flex-end;gap:8px;height:110px}
|
|
105
|
+
.cb-col{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;height:100%;position:relative}
|
|
106
|
+
.cb-bar{width:24px;background:linear-gradient(180deg,#5eead4,#14b8a6);border-radius:3px 3px 0 0;
|
|
107
|
+
box-shadow:0 0 10px rgba(45,212,191,.35);transition:height .3s ease}
|
|
108
|
+
.cb-col:hover .cb-bar{box-shadow:0 0 16px rgba(45,212,191,.6)}
|
|
109
|
+
.cb-label{font-size:9px;color:var(--muted);margin-top:4px}
|
|
110
|
+
.cb-tip{position:absolute;bottom:calc(100% + 6px);left:50%;transform:translateX(-50%) translateY(4px);
|
|
111
|
+
background:#0b1e37;border:1px solid rgba(14,165,233,.3);color:#bae6fd;font-size:10px;white-space:nowrap;
|
|
112
|
+
padding:3px 8px;border-radius:4px;opacity:0;pointer-events:none;transition:opacity .18s,transform .18s;z-index:5}
|
|
113
|
+
.cb-col:hover .cb-tip{opacity:1;transform:translateX(-50%) translateY(0)}
|
|
114
|
+
/* 序号徽章 3D 球 */
|
|
115
|
+
.idx{flex:0 0 auto;width:28px;height:28px;border-radius:50%;position:relative;
|
|
116
|
+
display:flex;align-items:center;justify-content:center;color:#fff;
|
|
117
|
+
font-size:12px;font-weight:900;margin-top:2px;transition:transform .2s ease,font-size .2s ease}
|
|
118
|
+
.idx.gw{background:radial-gradient(circle at 30% 28%,#c7d2fe,#6366f1 55%,#4338ca);
|
|
119
|
+
box-shadow:0 2px 4px rgba(0,0,0,.25),0 0 8px rgba(99,102,241,.4),inset -3px -4px 6px rgba(0,0,0,.3),inset 1px 2px 3px rgba(255,255,255,.25)}
|
|
120
|
+
.idx.rf{background:radial-gradient(circle at 30% 28%,#fdaab4,#f43f5e 55%,#be123c);
|
|
121
|
+
box-shadow:0 2px 4px rgba(0,0,0,.25),0 0 8px rgba(244,63,94,.4),inset -3px -4px 6px rgba(0,0,0,.3),inset 1px 2px 3px rgba(255,255,255,.25)}
|
|
122
|
+
.idx::before{content:'';position:absolute;top:5px;left:7px;width:8px;height:6px;border-radius:50%;
|
|
123
|
+
background:radial-gradient(circle,rgba(255,255,255,.7),rgba(255,255,255,0));transform:rotate(-28deg);pointer-events:none}
|
|
124
|
+
.idx b{display:inline-block;transition:transform .2s ease}
|
|
125
|
+
/* 条目 */
|
|
126
|
+
.entry{flex:1;min-width:0}
|
|
127
|
+
.entry-head{display:flex;align-items:flex-start;gap:12px}
|
|
128
|
+
.desc{font-size:15px;line-height:1.65}
|
|
129
|
+
.meta{display:block;font-size:12px;color:var(--muted);margin-top:4px}
|
|
130
|
+
.meta b{color:rgba(125,211,252,.9);font-weight:700}
|
|
131
|
+
ol{list-style:none}
|
|
132
|
+
li{display:flex;align-items:flex-start;gap:12px;padding:10px;border-radius:4px;transition:background .18s}
|
|
133
|
+
li:hover{background:rgba(14,165,233,.06)}
|
|
134
|
+
li:hover .idx{transform:scale(1.18) rotate(-4deg);font-size:14px}
|
|
135
|
+
li:hover .idx b{transform:rotate(-6deg)}
|
|
136
|
+
/* 展望目标卡 */
|
|
137
|
+
.goal{background:rgba(249,115,22,.04);border:1px solid rgba(249,115,22,.18);border-radius:6px;
|
|
138
|
+
padding:14px 16px;margin-bottom:12px;transition:transform .18s ease,box-shadow .18s ease}
|
|
139
|
+
.goal:hover{transform:translateY(-2px);box-shadow:0 8px 20px rgba(0,0,0,.3)}
|
|
140
|
+
.goal-desc{font-size:15px;line-height:1.65;margin-bottom:8px}
|
|
141
|
+
.goal-desc b{color:#fdba74;font-weight:700}
|
|
142
|
+
.goal-q{display:flex;flex-wrap:wrap;gap:6px}
|
|
143
|
+
.q-chip{font-size:11px;color:var(--muted);border:1px solid rgba(14,165,233,.18);background:rgba(14,165,233,.05);
|
|
144
|
+
border-radius:999px;padding:2px 10px}
|
|
145
|
+
/* 复制按钮 */
|
|
146
|
+
.copy-wrap{display:flex;justify-content:center;margin:8px 0 18px}
|
|
147
|
+
.copy-btn{display:flex;align-items:center;gap:8px;font-size:14px;font-weight:700;color:#fff;letter-spacing:2px;
|
|
148
|
+
background:linear-gradient(135deg,var(--cyan),#0284c7);border:none;border-radius:999px;padding:12px 38px;cursor:pointer;
|
|
149
|
+
box-shadow:0 0 30px rgba(14,165,233,.35);transition:transform .18s ease,box-shadow .18s ease;
|
|
150
|
+
font-family:inherit}
|
|
151
|
+
.copy-btn:hover{transform:translateY(-2px);box-shadow:0 0 45px rgba(14,165,233,.5)}
|
|
152
|
+
.copy-btn:active{transform:translateY(1px) scale(.98)}
|
|
153
|
+
/* 页脚 */
|
|
154
|
+
footer{text-align:center;font-size:10px;color:var(--muted);letter-spacing:1px;padding:8px 0 4px}
|
|
155
|
+
/* 入场动画 */
|
|
156
|
+
.header-card{animation:fadeDown .6s ease-out backwards}
|
|
157
|
+
.sec-ov{animation:riseIn .5s ease-out .13s backwards}
|
|
158
|
+
.sec-ms{animation:riseIn .5s ease-out .26s backwards}
|
|
159
|
+
.sec-gw{animation:riseIn .5s ease-out .4s backwards}
|
|
160
|
+
.sec-rf{animation:riseIn .5s ease-out .54s backwards}
|
|
161
|
+
.sec-pl{animation:riseIn .5s ease-out .68s backwards}
|
|
162
|
+
.copy-wrap{animation:popIn .4s ease-out .8s backwards}
|
|
163
|
+
@keyframes fadeDown{from{opacity:0;transform:translateY(-14px)}to{opacity:1;transform:none}}
|
|
164
|
+
@keyframes riseIn{from{opacity:0;transform:translateY(16px)}to{opacity:1;transform:none}}
|
|
165
|
+
@keyframes popIn{from{opacity:0;transform:scale(.85)}to{opacity:1;transform:none}}
|
|
166
|
+
/* 卡片 3D 微倾斜(仅 hover 卡片) */
|
|
167
|
+
.section:hover{transform:perspective(900px) translateY(-2px) rotateY(calc(var(--mx,0)*2.5deg)) rotateX(calc(var(--my,0)*-2.5deg))}
|
|
168
|
+
</style>
|
|
169
|
+
</head>
|
|
170
|
+
<body>
|
|
171
|
+
<div class="grid-pattern"></div>
|
|
172
|
+
<div class="stars"></div>
|
|
173
|
+
<div class="scanband"></div>
|
|
174
|
+
<div class="scanlines"></div>
|
|
175
|
+
<div class="wrap">
|
|
176
|
+
<header class="header-card" id="headerCard">
|
|
177
|
+
<span class="scanline-el scan-x"></span>
|
|
178
|
+
<span class="scanline-el scan-y"></span>
|
|
179
|
+
<span class="scanline-el scan-x-rev"></span>
|
|
180
|
+
<span class="scanline-el scan-y-rev"></span>
|
|
181
|
+
<div class="card-glow"></div>
|
|
182
|
+
<h1>2026 研发年度总结</h1>
|
|
183
|
+
<div class="header-sub">全栈开发工程师 · 2026-01 ~ 2026-11(截至 11-09)</div>
|
|
184
|
+
<span class="header-badge">生成时间 2026-11-09 17:03:01</span>
|
|
185
|
+
</header>
|
|
186
|
+
|
|
187
|
+
<section class="section sec-ov">
|
|
188
|
+
<div class="sec-bar"></div>
|
|
189
|
+
<div class="card-glow"></div>
|
|
190
|
+
<div class="sec-head">
|
|
191
|
+
<svg viewBox="0 0 24 24" width="22" height="22" fill="none" stroke="#38bdf8" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 15l4-5M8 15l4-5"/><circle cx="12" cy="14" r="8"/><path d="M12 14l4-5"/></svg>
|
|
192
|
+
<h2>年度概览</h2>
|
|
193
|
+
</div>
|
|
194
|
+
<div class="tldr-line"><b>TL;DR:</b>立项即狂奔的一年:SpecCore 规范驱动开发平台 7 月从零立项,4 个月 1889 次提交、576 个版本发布、代码库净增 19 万行,完成从单机 CLI 到流水线平台的蜕变。</div>
|
|
195
|
+
<div class="stat-row">
|
|
196
|
+
<div class="stat-card"><div class="stat-num">1889</div><div class="stat-label">总提交数(07-05 ~ 11-05)</div></div>
|
|
197
|
+
<div class="stat-card"><div class="stat-num">576</div><div class="stat-label">版本发布(v5.13.0 → v8.3.399)</div></div>
|
|
198
|
+
<div class="stat-card"><div class="stat-num">+19.0万</div><div class="stat-label">净增代码行(+32.9万 / -13.9万)</div></div>
|
|
199
|
+
<div class="stat-card"><div class="stat-num">1154</div><div class="stat-label">月度峰值提交(8 月)</div></div>
|
|
200
|
+
</div>
|
|
201
|
+
</section>
|
|
202
|
+
|
|
203
|
+
<section class="section sec-ms">
|
|
204
|
+
<div class="sec-bar"></div>
|
|
205
|
+
<div class="card-glow"></div>
|
|
206
|
+
<div class="sec-head">
|
|
207
|
+
<svg viewBox="0 0 24 24" width="22" height="22" fill="none" stroke="#5eead4" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M6 4h12v3a4 4 0 0 1-4 4h-4a4 4 0 0 1-4-4V4z"/><path d="M12 11v4M9 17h6v3H9z"/></svg>
|
|
208
|
+
<h2>核心成果与里程碑</h2>
|
|
209
|
+
</div>
|
|
210
|
+
<div class="timeline">
|
|
211
|
+
<div class="tl-group">
|
|
212
|
+
<span class="tl-node q1">Q1</span>
|
|
213
|
+
<div class="tl-q">第一季度</div>
|
|
214
|
+
<div class="tl-empty">暂无提交记录(项目于 2026-07 立项)</div>
|
|
215
|
+
</div>
|
|
216
|
+
<div class="tl-group">
|
|
217
|
+
<span class="tl-node q2">Q2</span>
|
|
218
|
+
<div class="tl-q">第二季度</div>
|
|
219
|
+
<div class="tl-empty">暂无提交记录(项目于 2026-07 立项)</div>
|
|
220
|
+
</div>
|
|
221
|
+
<div class="tl-group">
|
|
222
|
+
<span class="tl-node q3">Q3</span>
|
|
223
|
+
<div class="tl-q">第三季度(7-9 月)</div>
|
|
224
|
+
<div class="tl-item"><div class="tl-desc">1、7 月立项首发:SpecCore CLI 完整功能落地,v5.13.0 首版发布</div><div class="tl-meta">335 次提交 · +5.4 万行<span class="tl-badge">Q3</span></div></div>
|
|
225
|
+
<div class="tl-item"><div class="tl-desc">2、8 月密集攻坚:知识资产四层覆盖架构(TOC 目录/自动注入/RAG 检索/阅读清单)成形</div><div class="tl-meta">月内 1154 次提交 · +16.4 万行 · 发布 200+ 版本<span class="tl-badge">Q3</span></div></div>
|
|
226
|
+
<div class="tl-item"><div class="tl-desc">3、9 月流水线成形:run 端到端流水线与迭代体系建立</div><div class="tl-meta">+7.6 万行 · 328 次提交<span class="tl-badge">Q3</span></div></div>
|
|
227
|
+
</div>
|
|
228
|
+
<div class="tl-group">
|
|
229
|
+
<span class="tl-node q4">Q4</span>
|
|
230
|
+
<div class="tl-q">第四季度(10-11 月,截至当前)</div>
|
|
231
|
+
<div class="tl-item"><div class="tl-desc">4、10 月发布节奏收敛:v8.3 系列起跑,月度发布收紧至约 30 个版本</div><div class="tl-meta">+1.8 万行<span class="tl-badge">Q4</span></div></div>
|
|
232
|
+
<div class="tl-item"><div class="tl-desc">5、11-03 v8.3.370 累积发布:GLOBAL 治乱、反推域隔离、文档生成器升格、澄清链修复</div><div class="tl-meta">聚合发布 · 350→370<span class="tl-badge">Q4</span></div></div>
|
|
233
|
+
<div class="tl-item"><div class="tl-desc">6、11-04 v8.3.388:E2E 全链路深度检查 11 项修复 + execute 意图语义硬化</div><div class="tl-meta">379~388 聚合发布<span class="tl-badge">Q4</span></div></div>
|
|
234
|
+
<div class="tl-item"><div class="tl-desc">7、11-04 v8.3.394:反推链接力协议补全、全局分析默认纯技术、QA 环接力协议(exit 10)</div><div class="tl-meta">392~394 聚合发布<span class="tl-badge">Q4</span></div></div>
|
|
235
|
+
<div class="tl-item"><div class="tl-desc">8、11-05 v8.3.399(截至当前):用例核对闸开卷设闸——execute 收尾逐用例勾稽,未实现即入修复环</div><div class="tl-meta">398~399 聚合发布<span class="tl-badge">Q4</span></div></div>
|
|
236
|
+
</div>
|
|
237
|
+
</div>
|
|
238
|
+
<div class="cb-wrap">
|
|
239
|
+
<div class="cb-title">年度提交月度分布(次)</div>
|
|
240
|
+
<div class="cb-chart">
|
|
241
|
+
<div class="cb-col"><div class="cb-tip">1月 · 0 次提交</div><div class="cb-bar" style="height:2px"></div><div class="cb-label">1月</div></div>
|
|
242
|
+
<div class="cb-col"><div class="cb-tip">2月 · 0 次提交</div><div class="cb-bar" style="height:2px"></div><div class="cb-label">2月</div></div>
|
|
243
|
+
<div class="cb-col"><div class="cb-tip">3月 · 0 次提交</div><div class="cb-bar" style="height:2px"></div><div class="cb-label">3月</div></div>
|
|
244
|
+
<div class="cb-col"><div class="cb-tip">4月 · 0 次提交</div><div class="cb-bar" style="height:2px"></div><div class="cb-label">4月</div></div>
|
|
245
|
+
<div class="cb-col"><div class="cb-tip">5月 · 0 次提交</div><div class="cb-bar" style="height:2px"></div><div class="cb-label">5月</div></div>
|
|
246
|
+
<div class="cb-col"><div class="cb-tip">6月 · 0 次提交</div><div class="cb-bar" style="height:2px"></div><div class="cb-label">6月</div></div>
|
|
247
|
+
<div class="cb-col"><div class="cb-tip">7月 · 335 次提交</div><div class="cb-bar" style="height:32px"></div><div class="cb-label">7月</div></div>
|
|
248
|
+
<div class="cb-col"><div class="cb-tip">8月 · 1154 次提交</div><div class="cb-bar" style="height:92px"></div><div class="cb-label">8月</div></div>
|
|
249
|
+
<div class="cb-col"><div class="cb-tip">9月 · 328 次提交</div><div class="cb-bar" style="height:31px"></div><div class="cb-label">9月</div></div>
|
|
250
|
+
<div class="cb-col"><div class="cb-tip">10月 · 54 次提交</div><div class="cb-bar" style="height:8px"></div><div class="cb-label">10月</div></div>
|
|
251
|
+
<div class="cb-col"><div class="cb-tip">11月 · 18 次提交</div><div class="cb-bar" style="height:4px"></div><div class="cb-label">11月</div></div>
|
|
252
|
+
<div class="cb-col"><div class="cb-tip">12月 · 0 次提交</div><div class="cb-bar" style="height:2px"></div><div class="cb-label">12月</div></div>
|
|
253
|
+
</div>
|
|
254
|
+
</div>
|
|
255
|
+
</section>
|
|
256
|
+
|
|
257
|
+
<section class="section sec-gw">
|
|
258
|
+
<div class="sec-bar"></div>
|
|
259
|
+
<div class="card-glow"></div>
|
|
260
|
+
<div class="sec-head">
|
|
261
|
+
<svg viewBox="0 0 24 24" width="22" height="22" fill="none" stroke="#a5b4fc" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 17l6-6 4 4 8-8"/><path d="M14 7h7v7"/></svg>
|
|
262
|
+
<h2>经验与成长</h2>
|
|
263
|
+
</div>
|
|
264
|
+
<ol>
|
|
265
|
+
<li><span class="idx gw"><b>1</b></span><div class="entry"><div class="desc">沉淀了「四层知识资产架构」(TOC 目录/自动注入/RAG 检索/阅读清单),解决了 AI 对规范库看不见、记不住、找不回的三类可见性断层。</div></div></li>
|
|
266
|
+
<li><span class="idx gw"><b>2</b></span><div class="entry"><div class="desc">掌握了 ask 引擎意图识别与 AI 接力协议([SPECCORE_EXEC]/[SPECCORE_PROMPT]/[SPECCORE_CONTINUE] 标记链),人机协作可从任意断点续跑。</div></div></li>
|
|
267
|
+
<li><span class="idx gw"><b>3</b></span><div class="entry"><div class="desc">建立了「聚合发布」节奏:小步高频提交 + 里程碑聚合 tag,兼顾问题定位粒度与交付速度。</div></div></li>
|
|
268
|
+
<li><span class="idx gw"><b>4</b></span><div class="entry"><div class="desc">积累了质量门禁体系经验:骨架完成度自检、用例核对闸、QA 三阶段验证环,质量兜底不再依赖人肉复查。</div></div></li>
|
|
269
|
+
</ol>
|
|
270
|
+
</section>
|
|
271
|
+
|
|
272
|
+
<section class="section sec-rf">
|
|
273
|
+
<div class="sec-bar"></div>
|
|
274
|
+
<div class="card-glow"></div>
|
|
275
|
+
<div class="sec-head">
|
|
276
|
+
<svg viewBox="0 0 24 24" width="22" height="22" fill="none" stroke="#fda4af" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 9v4M12 17h.01"/><path d="M10.3 3.9L1.8 18a2 2 0 0 0 1.7 3h17a2 2 0 0 0 1.7-3L13.7 3.9a2 2 0 0 0-3.4 0z"/></svg>
|
|
277
|
+
<h2>不足与反思</h2>
|
|
278
|
+
</div>
|
|
279
|
+
<ol>
|
|
280
|
+
<li><span class="idx rf"><b>1</b></span><div class="entry"><div class="desc">8 月节奏过载:单月 1154 次提交、8-08 单日 95 个版本。</div><div class="meta">影响:文档与代码同步滞后,质量债累积。</div><div class="meta" style="color:rgba(125,211,252,.85)"><b style="color:#7dd3fc">改进:</b>明年收敛为双周聚合发布、月度版本 ≤20 个。</div></div></li>
|
|
281
|
+
<li><span class="idx rf"><b>2</b></span><div class="entry"><div class="desc">生成物污染统计口径:code-graph 等生成物单文件数十万行噪音曾混入行数统计。</div><div class="meta">影响:工作量指标失真,误导投入判断。</div><div class="meta" style="color:rgba(125,211,252,.85)"><b style="color:#7dd3fc">改进:</b>统计前强制剔除生成物路径白名单。</div></div></li>
|
|
282
|
+
<li><span class="idx rf"><b>3</b></span><div class="entry"><div class="desc">发布颗粒度两端失衡:Q3 一日最多 95 个 tag,Q4 单次聚合最多 10 个版本。</div><div class="meta">影响:问题定位粒度在过细与过粗之间摇摆。</div><div class="meta" style="color:rgba(125,211,252,.85)"><b style="color:#7dd3fc">改进:</b>固定批次大小,每批 ≤10 版本聚合。</div></div></li>
|
|
283
|
+
</ol>
|
|
284
|
+
</section>
|
|
285
|
+
|
|
286
|
+
<section class="section sec-pl">
|
|
287
|
+
<div class="sec-bar"></div>
|
|
288
|
+
<div class="card-glow"></div>
|
|
289
|
+
<div class="sec-head">
|
|
290
|
+
<svg viewBox="0 0 24 24" width="22" height="22" fill="none" stroke="#fdba74" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="4" width="18" height="17" rx="2"/><path d="M8 2v4M16 2v4M3 10h18"/></svg>
|
|
291
|
+
<h2>新年展望与规划</h2>
|
|
292
|
+
</div>
|
|
293
|
+
<div class="goal"><div class="goal-desc">1、<b>发布节奏工程化</b>:双周聚合发布落地,2027 年版本发布总量 ≤120 个</div><div class="goal-q"><span class="q-chip">Q1 建立节奏</span><span class="q-chip">Q2 稳定运行</span></div></div>
|
|
294
|
+
<div class="goal"><div class="goal-desc">2、<b>测试覆盖率跃升</b>:核心链路自动化覆盖 ≥80%,用例核对闸覆盖全部命令</div><div class="goal-q"><span class="q-chip">Q1 铺 E2E</span><span class="q-chip">Q3 达标</span></div></div>
|
|
295
|
+
<div class="goal"><div class="goal-desc">3、<b>生成物与体量治理</b>:启动耗时降 30%、生成物目录隔离入白名单</div><div class="goal-q"><span class="q-chip">Q2 完成隔离</span><span class="q-chip">Q4 验收性能</span></div></div>
|
|
296
|
+
<div class="goal"><div class="goal-desc">4、<b>生态落地</b>:spec-once/流水线在 ≥3 个真实项目落地并沉淀案例</div><div class="goal-q"><span class="q-chip">Q2 试点</span><span class="q-chip">Q4 案例库发布</span></div></div>
|
|
297
|
+
</section>
|
|
298
|
+
|
|
299
|
+
<div class="copy-wrap">
|
|
300
|
+
<button class="copy-btn" id="copyBtn" type="button">
|
|
301
|
+
<svg id="copyIcon" viewBox="0 0 16 16" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.4">
|
|
302
|
+
<rect x="5.5" y="5.5" width="8.5" height="8.5" rx="1.5"/>
|
|
303
|
+
<path d="M10.5 5.5V4a1.5 1.5 0 0 0-1.5-1.5H4A1.5 1.5 0 0 0 2.5 4v5A1.5 1.5 0 0 0 4 10.5h1.5"/>
|
|
304
|
+
</svg>
|
|
305
|
+
<span id="copyText">一键复制</span>
|
|
306
|
+
</button>
|
|
307
|
+
</div>
|
|
308
|
+
<footer>GENERATED BY SPECCORE TEAM · 2026</footer>
|
|
309
|
+
</div>
|
|
310
|
+
<script>
|
|
311
|
+
// 复制源 = txt 纯文本全文
|
|
312
|
+
var TXT = "2026 研发年度总结\n\n生成时间:2026-11-09 17:03:01\n\n年度概览\nTL;DR:立项即狂奔的一年:SpecCore 规范驱动开发平台 7 月从零立项,4 个月 1889 次提交、576 个版本发布、代码库净增 19 万行,完成从单机 CLI 到流水线平台的蜕变。\n1、总提交数:1889 次(07-05 ~ 11-05)\n2、版本发布:576 个(v5.13.0 → v8.3.399)\n3、净增代码:+19.0 万行(+32.9 万 / -13.9 万)\n4、月度峰值:1154 次提交(8 月)\n\n核心成果与里程碑\n1、7 月立项首发:SpecCore CLI 完整功能落地,v5.13.0 首版发布(335 次提交、+5.4 万行)- Q3\n2、8 月密集攻坚:知识资产四层覆盖架构(TOC 目录/自动注入/RAG 检索/阅读清单)成形,月内 1154 次提交、+16.4 万行、发布 200+ 版本 - Q3\n3、9 月流水线成形:run 端到端流水线与迭代体系建立,+7.6 万行、328 次提交 - Q3\n4、10 月发布节奏收敛:v8.3 系列起跑,月度发布收紧至约 30 个版本,+1.8 万行 - Q4\n5、11-03 v8.3.370 累积发布:GLOBAL 治乱、反推域隔离、文档生成器升格、澄清链修复 - Q4\n6、11-04 v8.3.388:E2E 全链路深度检查 11 项修复 + execute 意图语义硬化 - Q4\n7、11-04 v8.3.394:反推链接力协议补全、全局分析默认纯技术、QA 环接力协议(exit 10)- Q4\n8、11-05 v8.3.399(截至当前):用例核对闸开卷设闸——execute 收尾逐用例勾稽,未实现即入修复环 - Q4\n\n经验与成长\n1、沉淀了「四层知识资产架构」(TOC 目录/自动注入/RAG 检索/阅读清单),解决了 AI 对规范库看不见、记不住、找不回的三类可见性断层。\n2、掌握了 ask 引擎意图识别与 AI 接力协议([SPECCORE_EXEC]/[SPECCORE_PROMPT]/[SPECCORE_CONTINUE] 标记链),人机协作可从任意断点续跑。\n3、建立了「聚合发布」节奏:小步高频提交 + 里程碑聚合 tag,兼顾问题定位粒度与交付速度。\n4、积累了质量门禁体系经验:骨架完成度自检、用例核对闸、QA 三阶段验证环,质量兜底不再依赖人肉复查。\n\n不足与反思\n1、8 月节奏过载:单月 1154 次提交、8-08 单日 95 个版本。\n影响:文档与代码同步滞后,质量债累积。\n改进:明年收敛为双周聚合发布、月度版本 ≤20 个。\n2、生成物污染统计口径:code-graph 等生成物单文件数十万行噪音曾混入行数统计。\n影响:工作量指标失真,误导投入判断。\n改进:统计前强制剔除生成物路径白名单。\n3、发布颗粒度两端失衡:Q3 一日最多 95 个 tag,Q4 单次聚合最多 10 个版本。\n影响:问题定位粒度在过细与过粗之间摇摆。\n改进:固定批次大小,每批 ≤10 版本聚合。\n\n新年展望与规划\n1、发布节奏工程化:双周聚合发布落地,2027 年版本发布总量 ≤120 个(Q1 建立节奏、Q2 稳定运行)。\n2、测试覆盖率跃升:核心链路自动化覆盖 ≥80%,用例核对闸覆盖全部命令(Q1 铺 E2E、Q3 达标)。\n3、生成物与体量治理:启动耗时降 30%、生成物目录隔离入白名单(Q2 完成隔离、Q4 验收性能)。\n4、生态落地:spec-once/流水线在 ≥3 个真实项目落地并沉淀案例(Q2 试点、Q4 案例库发布)。";
|
|
313
|
+
|
|
314
|
+
// 一键复制
|
|
315
|
+
var btn = document.getElementById('copyBtn');
|
|
316
|
+
var icon = document.getElementById('copyIcon');
|
|
317
|
+
var txt = document.getElementById('copyText');
|
|
318
|
+
btn.addEventListener('click', function(){
|
|
319
|
+
function done(){ icon.innerHTML = '<path d="M2.5 8.5l3.5 3.5 7-7.5"/>'; txt.textContent = '已复制'; setTimeout(function(){ icon.innerHTML = '<rect x="5.5" y="5.5" width="8.5" height="8.5" rx="1.5"/><path d="M10.5 5.5V4a1.5 1.5 0 0 0-1.5-1.5H4A1.5 1.5 0 0 0 2.5 4v5A1.5 1.5 0 0 0 4 10.5h1.5"/>'; txt.textContent = '一键复制'; }, 1600); }
|
|
320
|
+
if (navigator.clipboard && navigator.clipboard.writeText) {
|
|
321
|
+
navigator.clipboard.writeText(TXT).then(done, function(){ fallback(); });
|
|
322
|
+
} else { fallback(); }
|
|
323
|
+
function fallback(){
|
|
324
|
+
var ta = document.createElement('textarea');
|
|
325
|
+
ta.value = TXT; ta.style.position = 'fixed'; ta.style.opacity = '0';
|
|
326
|
+
document.body.appendChild(ta); ta.select();
|
|
327
|
+
try { document.execCommand('copy'); done(); } catch(e){}
|
|
328
|
+
document.body.removeChild(ta);
|
|
329
|
+
}
|
|
330
|
+
});
|
|
331
|
+
|
|
332
|
+
// 卡片级 3D 微倾斜(仅 hover 卡片)
|
|
333
|
+
document.querySelectorAll('.section').forEach(function(card){
|
|
334
|
+
card.addEventListener('mousemove', function(e){
|
|
335
|
+
var r = card.getBoundingClientRect();
|
|
336
|
+
var mx = (e.clientX - r.left) / r.width * 2 - 1;
|
|
337
|
+
var my = (e.clientY - r.top) / r.height * 2 - 1;
|
|
338
|
+
card.style.setProperty('--mx', mx.toFixed(3));
|
|
339
|
+
card.style.setProperty('--my', my.toFixed(3));
|
|
340
|
+
});
|
|
341
|
+
card.addEventListener('mouseleave', function(){
|
|
342
|
+
card.style.setProperty('--mx', 0);
|
|
343
|
+
card.style.setProperty('--my', 0);
|
|
344
|
+
});
|
|
345
|
+
});
|
|
346
|
+
|
|
347
|
+
// ?shot=content:内容区截图模式
|
|
348
|
+
if (location.search.indexOf('shot=content') > -1) {
|
|
349
|
+
document.getElementById('headerCard').style.display = 'none';
|
|
350
|
+
document.querySelector('.copy-wrap').style.display = 'none';
|
|
351
|
+
document.querySelector('footer').style.display = 'none';
|
|
352
|
+
document.querySelector('.wrap').style.padding = '40px';
|
|
353
|
+
// 截图模式停入场动画,避免 backwards 0 相位整体半透明
|
|
354
|
+
document.querySelectorAll('.header-card,.section,.copy-wrap').forEach(function(el){
|
|
355
|
+
el.style.animation = 'none'; el.style.opacity = '1';
|
|
356
|
+
});
|
|
357
|
+
}
|
|
358
|
+
</script>
|
|
359
|
+
</body>
|
|
360
|
+
</html>
|
|
@@ -2,12 +2,15 @@
|
|
|
2
2
|
|
|
3
3
|
> 你的个人配置全放在这里。skill-forge 升级技能时官方只更新 SKILL.md 与 resources/,
|
|
4
4
|
> 本文件始终保留你的版本——落盘目录、格式、角色画像、自定义模板放心改。
|
|
5
|
+
> 官方升级若带来新配置点,会另存 `user-config.md.upstream` 对照文件到同目录,
|
|
6
|
+
> 你按需查看并手动合并新配置点到本文件。
|
|
5
7
|
|
|
6
8
|
|
|
7
9
|
## ⚙️ 默认配置(用户可手动修改;临时口头要求永远优先)
|
|
8
10
|
|
|
9
11
|
```yaml
|
|
10
12
|
DISK: true # 是否落盘写文件;false = 默认只在对话输出,不写文件不开浏览器
|
|
13
|
+
CONFIG_VERSION: 1 # 配置结构版本:skill 升级时若配置结构变化会递增;AI 每次执行前对比 SKILL.md「配置版本机制」节声明的当前版本,不一致时按 SKILL.md 的迁移规则处理(先备份本文件为带时间戳 .bak,再迁移,最后对话告知用户)
|
|
11
14
|
FORMATS: [md, txt, html, content-png] # 落盘哪些格式(数组,可删减/增,如 [md, html] / [md, txt, html](不截图);content-png = 内容区截图(五张分节卡片整体,不含头部标题/复制按钮/页脚),删除该项即不截图;不影响对话中的 md 正文输出)
|
|
12
15
|
DIR: auto # 落盘根目录:auto = 按当前系统自动选 DIR_MAC / DIR_WIN(也可直接写死某个绝对路径)
|
|
13
16
|
DIR_MAC: /Users/luzhaosheng/MyWork/智慧食堂/reports # macOS 落盘根目录(自动按目标年度建子目录 annual-YYYY;目录不存在时回退用户主目录下 reports)
|