一键导入
sf-validation-and-qa
StoryMoss 的证据标准、测试命令、门槛、golden inventory、如何加测试。何时加载:改完代码要跑验证、要加回归测试、CI 检查失败、要确认“算不算通过”、要跑跨层 golden fixture、或被问“怎么测/跑哪些/门槛是多少”时。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
StoryMoss 的证据标准、测试命令、门槛、golden inventory、如何加测试。何时加载:改完代码要跑验证、要加回归测试、CI 检查失败、要确认“算不算通过”、要跑跨层 golden fixture、或被问“怎么测/跑哪些/门槛是多少”时。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
运行/部署 StoryMoss 的命令解剖、运行时数据与产物落点。何时加载:要启动应用、要找日志、要找数据库/配置文件、要发布 tag、要看生成链路日志、或被问“日志在哪/数据在哪/怎么发布”时。
Disciplined diagnosis loop for hard bugs and performance regressions. Reproduce → minimise → hypothesise → instrument → fix → regression-test. Use when user says "diagnose this" / "debug this", reports a bug, says something is broken/throwing/failing, or describes a performance regression.
StoryMoss 承重设计决策与 WHY、必须成立的不变量、已知弱点。何时加载:要改架构、要动数据真相源、要改生成链路、要改 IPC/SyncEvent、要动数据库层、要评估“能不能这样改”、或被问“为什么这样设计/哪些不能动”时。改任何符号前先用 gitnexus impact。
从零重建 StoryMoss 开发与构建环境,含已知陷阱。何时加载:首次 clone 后要跑起来、换机器、CI 本地复现、`cargo tauri dev/build` 报环境错、前端起不来、跨平台构建失败、或被问“怎么构建/怎么跑”时。
StoryMoss 变更门禁与不可破坏项。何时加载:要提交/推送代码、要 bump 版本、要改架构边界、要动数据库迁移、要改 CI、要发布 tag、要合并 feature 分支、或被问“能不能直接改/直接推”时。也用于判断一个改动是否需要用户授权(R10)。
StoryMoss 全部配置轴:选项、默认值、生产 vs 实验、守卫、如何新增。何时加载:要改生成模式、要改并发/超时、要加 PromptRegistry 覆盖、要调体裁模板、要改 silent_background 白名单、要动 rustfmt、或被问“在哪配/默认是什么/这个开关干啥”时。
| name | sf-validation-and-qa |
| description | StoryMoss 的证据标准、测试命令、门槛、golden inventory、如何加测试。何时加载:改完代码要跑验证、要加回归测试、CI 检查失败、要确认“算不算通过”、要跑跨层 golden fixture、或被问“怎么测/跑哪些/门槛是多少”时。 |
本机基线(v0.26.23,AGENTS.md/TESTING.md):
| 套件 | 命令 | 基线 | CI 行为 |
|---|---|---|---|
| Rust 单元 | cd src-tauri && cargo test --lib | 655 passed / 0 failed / 2 ignored | continue-on-error: true(历史 V092 基线备注);Win 跳过 |
| Rust 编译 | cargo check | 零错误 | 阻塞 |
| Rust 格式 | cargo +nightly fmt -- --check | 零差异 | 阻塞 |
| Clippy | cargo clippy | 471 个历史警告未清零(非 -D warnings) | 不阻塞 |
| 前端类型 | cd src-frontend && npx tsc --noEmit | 零错误 | 阻塞 |
| 前端格式 | npm run format:check | 零差异 | 阻塞 |
| 前端单元 | npm run test:run(vitest) | 183 passed / 3 skipped | 阻塞 |
| 前端构建 | npm run build | 通过 | 阻塞 |
| E2E | npx playwright test / npm test | 41 (36+5) | continue-on-error: true(dev-server 缺后端,IPC 挂起) |
| 架构边界 | python3 scripts/architecture_guard.py | 通过 | (本地强制,CI 未单独 job) |
| IPC 一致性 | python3 scripts/verify-ipc-manifest.py | 零 ERROR | 前端 npm run lint 内含 |
本地全绿门槛建议(提交前最少跑):
cd src-tauri && cargo test --lib && cargo check && cargo +nightly fmt -- --check
cd src-frontend && npx tsc --noEmit && npm run format:check && npm run test:run
python3 scripts/architecture_guard.py
| 资产 | 位置 | 锁定什么 |
|---|---|---|
| 跨层 trim golden | tests/fixtures/trim_golden.json(7 用例) | Rust trim_self_repetition 与 TS trimSelfRepetition 跨层一致;双跑 trim_self_repetition_matches_shared_golden_fixture + textCleanup.golden.test.ts |
| Genesis payload 契约 | narrative/genesis.rs 测试 | select_first_chapter_content/build_first_chapter_chapter_switch/background_steps 6 步固定顺序 |
| 8% 重试闸门 | narrative/genesis.rs 测试 | compute_trim_ratio/should_retry_self_repetition 边界 |
| IPC 一致性 | scripts/verify-ipc-manifest.py | generate_handler![] ↔ 前端 loggedInvoke |
| 架构边界 | scripts/architecture_guard.py | db/domain 依赖方向 + FORBIDDEN_GLOBALS |
| ts-rs 生成 | src-frontend/src/generated/SyncEvent.ts | Rust enum ↔ TS 穷尽匹配 |
src-tauri/src/db/{repositories_tests,cascade_tests}.rs、canonical_state/tests.rs、task_system/{tests,integration_tests}.rs、prompts/registry.rs、creative_engine/anti_ai/、utils/{validation_tests,style_align,text,file}.rs、pipeline/{executor,refine,review}.rs、story_system/scene_service.rs、narrative/elements.rs、config/settings_tests.rs。src-frontend/src/frontstage/{hooks,components}/*.test.{ts,tsx}、utils/*.test.ts、hooks/*.test.ts、services/*.test.ts、textCleanup.golden.test.ts。e2e/*.spec.ts(storymoss/frontstage-editing/backstage-pages/navigation/context-menu/genesis-duplicate/performance/tiptap-benchmark)。| 场景 | 放哪 | 注意 |
|---|---|---|
| Rust 纯函数 | 同模块 #[cfg(test)] mod tests | 优先提取纯函数(world_concept_for_character_prompt 模式)便于测 |
| 跨层共享算法 | 加 tests/fixtures/*.json 用例,Rust + TS 双跑 | 修改一边必须同步另一边并跑双测 |
| 前端状态机/竞态 | src-frontend/src/frontstage/**/*.test.tsx | 用 waitFor 轮询替代固定 setTimeout(降低 brittleness) |
| IPC 契约 | 新增命令后跑 verify-ipc-manifest.py | 前端 default 分支加 assertUnreachable |
| E2E 行为 | e2e/*.spec.ts | 仅前端可测;需后端的路径目前不可靠(IPC 挂起) |
| 数据库迁移 | db/repositories_tests.rs + 迁移幂等 | 文件名 ASCII 短名 |
sf-debugging-playbook。sf-change-control。sf-diagnostics-and-tooling。cd src-tauri && cargo test --lib 2>&1 | tail -5(看 passed/failed 数)cd src-frontend && npm run test:run 2>&1 | tail -5ls tests/fixtures/(golden 是否还在)python3 scripts/architecture_guard.py; echo $?continue-on-error。