sillyspec 3.31.0 → 3.32.1
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/.claude/skills/sillyspec-auto/SKILL.md +1 -1
- package/.claude/skills/sillyspec-brainstorm/SKILL.md +2 -2
- package/.claude/skills/sillyspec-commit/SKILL.md +1 -1
- package/.claude/skills/sillyspec-flow/SKILL.md +10 -6
- package/.claude/skills/sillyspec-quick/SKILL.md +105 -7
- package/.zcodeignore +66 -0
- package/AGENTS.md +16 -16
- package/assets/command-cards/flow.md +9 -3
- package/assets/command-cards/run-quick.md +4 -1
- package/package.json +2 -2
- package/src/agent-session-log.js +27 -5
- package/src/config-schema.js +21 -0
- package/src/datetime.js +51 -0
- package/src/db.js +10 -3
- package/src/decision-distill.js +21 -12
- package/src/design-facts.js +46 -6
- package/src/flow-draft.js +468 -95
- package/src/flow-parity.js +199 -5
- package/src/flow-review.js +136 -6
- package/src/flow.js +786 -145
- package/src/foreign-declared.js +75 -3
- package/src/fr-index.js +148 -162
- package/src/git-helper.js +16 -3
- package/src/hooks/worktree-guard.js +16 -5
- package/src/hunk-attribution.js +28 -5
- package/src/index.js +186 -19
- package/src/knowledge-classify.js +3 -1
- package/src/knowledge-digest.js +55 -26
- package/src/knowledge-match.js +135 -7
- package/src/knowledge-stats.js +105 -4
- package/src/knowledge-vector.js +160 -0
- package/src/machine-interface.js +90 -2
- package/src/module-impact.js +22 -1
- package/src/modules.js +9 -0
- package/src/progress/change-registry.js +20 -0
- package/src/progress/stage-machine.js +4 -7
- package/src/progress.js +8 -1
- package/src/quicklog.js +20 -0
- package/src/redomain.js +23 -7
- package/src/route-hindsight.js +276 -0
- package/src/run/archive-distill.js +3 -1
- package/src/run/command.js +65 -12
- package/src/run/complete-handlers.js +219 -5
- package/src/run/complete.js +99 -22
- package/src/run/gate-snapshot.js +15 -0
- package/src/run/gates.js +60 -4
- package/src/run/prompt.js +159 -31
- package/src/run/quick-audit.js +66 -7
- package/src/run/shared.js +6 -11
- package/src/run/stage.js +5 -1
- package/src/run/verify-quality-scan.js +84 -0
- package/src/scan-facts.js +2 -1
- package/src/scope-audit.js +138 -5
- package/src/sentinel-assertions.js +67 -16
- package/src/stage-contract-engine.js +4 -1
- package/src/stage-contract-spec.js +103 -4
- package/src/stage-contract.js +55 -7
- package/src/stages/brainstorm.js +27 -14
- package/src/stages/knowledge.js +4 -3
- package/src/stages/plan-postcheck.js +98 -3
- package/src/stages/plan.js +22 -2
- package/src/stages/quick.js +1 -1
- package/src/stages/verify.js +2 -1
- package/src/task-review.js +1 -1
- package/src/task-tick.js +121 -0
- package/src/taskcard-frontmatter.js +31 -0
- package/src/ui-visual.js +43 -8
- package/src/verify-postcheck.js +518 -38
- package/src/verify-probes.js +216 -5
- package/src/watcher.js +1067 -1031
- package/src/worktree-apply.js +9 -1
- package/src/worktree.js +21 -6
- package/templates/agents-instruction.md +15 -15
- package/templates/prompts/taskcard-rules.md +1 -0
package/src/ui-visual.js
CHANGED
|
@@ -23,10 +23,13 @@ export const UI_EVIDENCE_FILENAME = 'visual-evidence.md'
|
|
|
23
23
|
|
|
24
24
|
/* ── 检测启发式(正反例单测锁定;误判面=默认档一行警告,误漏面由文件面扩展名兜底)── */
|
|
25
25
|
|
|
26
|
+
// 词表不含后端高频通用词「渲染/组件/样式」:CLI「渲染输出」「组件」「输出样式」是常规后端
|
|
27
|
+
// 用语,2026-10-05-knowledge-stats-freshness 实测误触整段 UI 须知+探针 warn(描述该问题的
|
|
28
|
+
// input 自己也复触一次);真 UI 信号由页面/前端/UI/视觉/界面/布局等词与扩展名兜底承接。
|
|
26
29
|
const UI_TOUCH_PATTERNS = [
|
|
27
|
-
/页面/, /前端/, /\bUI\b/i, /视觉/,
|
|
30
|
+
/页面/, /前端/, /\bUI\b/i, /视觉/, /界面/, /布局/, /主题色/, /配色/,
|
|
28
31
|
/\.tsx?\b/, /\.jsx\b/, /\.vue\b/, /\.svelte\b/, /\.css\b/, /\.scss\b/, /\.html\b/,
|
|
29
|
-
|
|
32
|
+
/原型/, /截图/,
|
|
30
33
|
]
|
|
31
34
|
|
|
32
35
|
/** input/规约文本是否触及前端页面或 UI(关键词启发式,≥1 命中即算)。 */
|
|
@@ -47,12 +50,16 @@ export function detectUiTouchInPaths(paths) {
|
|
|
47
50
|
|
|
48
51
|
export function buildUiGuidanceLines() {
|
|
49
52
|
return [
|
|
50
|
-
`🎨 UI 变更执行须知(本变更触及前端页面或 UI
|
|
51
|
-
` 1.
|
|
52
|
-
`
|
|
53
|
-
`
|
|
53
|
+
`🎨 UI 变更执行须知(本变更触及前端页面或 UI——advisory 引导非门禁):`,
|
|
54
|
+
` 1. 定稿原型必须是可复跑的真码产物(与实现同方言、能被本项目工具链构建)——手绘单文件`,
|
|
55
|
+
` 仅限一次性粗选对比,不作为交付原型(2026-09-28 frontend-apple-style 实证:手绘定稿后每条意见都要反向翻译回真实代码);`,
|
|
56
|
+
` 2. 开工先就近发现本项目原型管线:查本次变更触达项目自己的脚本、任务与工具链(多项目仓`,
|
|
57
|
+
` 按触达路径就近,不假设全仓共享一套);已有则复用,没有则现场搭最小管线并把入口留在`,
|
|
58
|
+
` 项目惯例位置——下一个会话能自己发现;`,
|
|
59
|
+
` 3. 边改边渲染对照:每完成一个页面任务单元就渲染实页与基准并排比对,差异清零再勾任务;`,
|
|
60
|
+
` 对照截图与结论随手落变更目录 ${UI_EVIDENCE_FILENAME}(干活时顺手写,收口只验在场);`,
|
|
54
61
|
` 4. 视觉降级须用户裁决留痕:执行中因约束对不齐基准而降级(结构收敛、范围缩小、样式统一级)`,
|
|
55
|
-
`
|
|
62
|
+
` 必须停下找用户签字,裁决记录写进 ${UI_EVIDENCE_FILENAME}(含「用户裁决」字样段)——`,
|
|
56
63
|
` 静默降级会在收口被「UI 视觉证据」探针硬拦(error 门)。`,
|
|
57
64
|
]
|
|
58
65
|
}
|
|
@@ -70,7 +77,13 @@ export function readUiVisualGate(specBase) {
|
|
|
70
77
|
}
|
|
71
78
|
}
|
|
72
79
|
|
|
73
|
-
|
|
80
|
+
// 降级声明判定词=绑定窗口而非裸词「降级」:裸词在后端/机制讨论语境高频(探针档位、性能
|
|
81
|
+
// 降级),与远处视觉词同行共现时分属两个讨论对象——2026-10-05-uivisual-word-narrow 实测
|
|
82
|
+
// 「error 档(降级无裁决)……渲染/组件/样式」同行共现被误判、error 档阻断收口(自举陷阱)。
|
|
83
|
+
// 窗口语义:降级与视觉词 ≤6 字内同短语(两侧顺序皆认,经既有正例「视觉收敛降级」标定);
|
|
84
|
+
// 绑定词表与 VISUAL_LINE 同集(含页面——评审 P2:缺页面时「六个页面降级为三个」漏判);
|
|
85
|
+
// 样式统一级独立短语与 \bpartial\b 词边界保留。纯结构判定,D-003 封闭面不变。
|
|
86
|
+
const DOWNGRADE_LINE = /((视觉|样式|界面|页面|UI)[^\n]{0,6}降级|降级[^\n]{0,6}(视觉|样式|界面|页面|UI)|样式统一级|\bpartial\b)/i
|
|
74
87
|
const VISUAL_LINE = /(视觉|UI|页面|样式|界面)/
|
|
75
88
|
|
|
76
89
|
/** design/requirements 是否声明「视觉降级」(同行共现口径——行级命中防跨行误配;runUiVisualProbe 内部消费)。 */
|
|
@@ -138,6 +151,28 @@ export function runUiVisualProbe({ changeDir, gate = 'warn' }) {
|
|
|
138
151
|
}
|
|
139
152
|
}
|
|
140
153
|
|
|
154
|
+
/**
|
|
155
|
+
* execute 收口的前置 advisory(2026-10-07-flow-friction-batch3 task-05):UI 触达变更的
|
|
156
|
+
* visual-evidence.md 应在执行期随手落盘,但执法只在 verify 收口(error 档)——postmortem
|
|
157
|
+
* (provider-model-list)实证 agent 到 verify 末步才发现缺证据。本函数供 execute --done 的
|
|
158
|
+
* gates 调用(warn 级提示,不阻断 execute;verify 的 error 档语义不动):UI 触达且证据
|
|
159
|
+
* 缺失时返回提示串,否则 null(非 UI / 证据在场 / gate off 零打扰)。
|
|
160
|
+
* @param {{ changeDir: string, specBase?: string }} opts
|
|
161
|
+
* @returns {string|null}
|
|
162
|
+
*/
|
|
163
|
+
export function uiEvidenceExecuteAdvisory({ changeDir, specBase = null }) {
|
|
164
|
+
try {
|
|
165
|
+
const gate = readUiVisualGate(specBase || join(changeDir, '..', '..', '..'))
|
|
166
|
+
const probe = runUiVisualProbe({ changeDir, gate })
|
|
167
|
+
if (!probe.applicable) return null
|
|
168
|
+
if (probe.evidencePresent) return null
|
|
169
|
+
const hard = gate === 'error'
|
|
170
|
+
return `UI 触达变更但变更目录尚无 ${UI_EVIDENCE_FILENAME}——渲染对照证据应在执行期随手落盘(截图/对照结论,收口只验在场不产新证据)${hard ? ';本仓 ui_visual_gate=error,verify 收口会硬拦' : ';verify 收口会警告'}。落盘路径:${join(changeDir, UI_EVIDENCE_FILENAME)}`
|
|
171
|
+
} catch {
|
|
172
|
+
return null // fail-soft:探测异常零打扰(verify 侧同款口径兜底)
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
|
|
141
176
|
/** design 文件变更清单行的路径粗提(反引号/裸路径行——探针侧仅作 UI 扩展名兜底命中,不追求全解)。 */
|
|
142
177
|
function extractQuotedPaths(designText) {
|
|
143
178
|
if (!designText) return []
|