speccore 8.3.302 → 8.3.303

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.
@@ -1,4 +1,4 @@
1
- <!DOCTYPE html><html lang="zh-CN" data-theme="ocean"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1.0"><title>SpecCore Help</title><style>@import url('https://fonts.googleapis.com/css2?family=Orbitron:wght@500;700;900&family=JetBrains+Mono:wght@400;600;700&display=swap');[data-theme="ocean"]{--cyan:#0ea5e9;--bg:#0b1929;--card:rgba(13,31,56,.95);--border:rgba(14,165,233,.15);--text:#bae6fd;--muted:#5b7fa5;--green:#14b8a6;--orange:#f97316;--purple:#6366f1}*{margin:0;padding:0;box-sizing:border-box}body{font-family:'JetBrains Mono',monospace;background:var(--bg);color:var(--text);min-height:100vh;padding:40px 20px}.scanlines{position:fixed;inset:0;pointer-events:none;z-index:99;background:repeating-linear-gradient(0deg,transparent,transparent 2px,rgba(0,240,255,.01) 2px,rgba(0,240,255,.01) 4px)}.card{max-width:960px;margin:0 auto;background:var(--card);border:1px solid var(--border);border-radius:16px;padding:36px;position:relative;overflow:hidden}.card::before{content:'';position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,var(--cyan),transparent);animation:scanX 3s linear infinite}.card::after{content:'';position:absolute;bottom:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,var(--cyan),transparent);animation:scanX-rev 3s linear infinite}@keyframes scanX{0%{transform:translateX(-100%)}100%{transform:translateX(100%)}}@keyframes scanX-rev{0%{transform:translateX(100%)}100%{transform:translateX(-100%)}}@keyframes scanY{0%{transform:translateY(-100%)}100%{transform:translateY(100%)}}@keyframes scanY-rev{0%{transform:translateY(100%)}100%{transform:translateY(-100%)}}.vline{position:absolute;top:0;width:1px;bottom:0;pointer-events:none}.vline.l{left:0;background:linear-gradient(180deg,transparent,var(--cyan),transparent);animation:scanY-rev 3s linear infinite}.vline.r{right:0;background:linear-gradient(180deg,transparent,var(--cyan),transparent);animation:scanY 3s linear infinite}h1{font-family:'Orbitron',sans-serif;font-size:24px;font-weight:900;background:linear-gradient(135deg,var(--cyan),var(--purple));-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;letter-spacing:2px;margin-bottom:4px;animation:titleGlow 3s ease-in-out infinite}.sub{color:var(--muted);font-size:11px;margin-bottom:24px}.intro-card{padding:20px;margin-bottom:20px;background:linear-gradient(135deg,rgba(14,165,233,.08),rgba(99,102,241,.08));border:1px solid rgba(14,165,233,.2);border-radius:12px}.intro-title{font-size:16px;font-weight:700;color:var(--cyan);margin-bottom:12px}.intro-text{font-size:13px;line-height:1.6;color:var(--text);margin-bottom:16px}.highlight-box{display:flex;gap:16px;padding:16px;background:rgba(20,184,166,.08);border:1px solid rgba(20,184,166,.2);border-radius:10px}.highlight-icon{font-size:32px}.highlight-content{flex:1}.highlight-title{font-size:12px;font-weight:700;color:var(--green);margin-bottom:8px;text-transform:uppercase;letter-spacing:1px}.highlight-list{list-style:none;padding:0;margin:0}.highlight-list li{font-size:12px;color:var(--text);padding:4px 0;line-height:1.5}.highlight-list strong{color:var(--cyan)}.quick-start{padding:20px;margin:20px 0;background:rgba(249,115,22,.05);border:1px solid rgba(249,115,22,.15);border-radius:12px}.section-header{display:flex;align-items:center;gap:8px;margin-bottom:16px}.header-icon{font-size:20px}.header-title{font-size:14px;font-weight:700;color:var(--orange);text-transform:uppercase;letter-spacing:1px}.step-row{display:flex;align-items:center;gap:12px;flex-wrap:wrap;justify-content:center}.step-item{display:flex;gap:12px;padding:12px 16px;background:rgba(255,255,255,.03);border:1px solid rgba(255,255,255,.08);border-radius:10px;min-width:180px}.step-num{width:32px;height:32px;border-radius:50%;background:linear-gradient(135deg,var(--orange),#ea580c);display:flex;align-items:center;justify-content:center;font-weight:700;font-size:14px;color:#fff;flex-shrink:0}.step-text{font-size:12px;line-height:1.5}.step-text code{display:inline-block;margin-top:4px;padding:2px 8px;background:rgba(249,115,22,.1);border-radius:4px;color:var(--orange);font-size:11px}.step-arrow{color:var(--muted);font-size:20px;font-weight:700}.cat{margin:16px 0;padding:16px;background:rgba(255,255,255,.02);border:1px solid rgba(255,255,255,.04);border-radius:12px;transition:all .3s}.cat:hover{border-color:rgba(14,165,233,.3);background:rgba(14,165,233,.03)}.cat-header{display:flex;align-items:center;gap:12px;margin-bottom:12px}.cat-icon{font-size:24px}.cat-info{flex:1}.cat-title{font-size:13px;font-weight:700;color:var(--cyan);margin-bottom:2px}.cat-desc{font-size:11px;color:var(--muted)}.cat-cmds{display:flex;flex-wrap:wrap;gap:8px}.cmd-pill{padding:4px 12px;border-radius:6px;font-size:11px;background:rgba(14,165,233,.08);color:var(--cyan);border:1px solid rgba(14,165,233,.15);transition:all .2s;cursor:pointer}.core-commands{padding:16px;border:1px solid var(--border);border-radius:12px;background:rgba(14,165,233,.04)}.core-commands .cmd-pill{font-size:12px;padding:6px 14px;background:rgba(20,184,166,.12);color:var(--green);border-color:rgba(20,184,166,.3)}.core-hint{margin-top:12px;font-size:12px;color:var(--muted)}.cmd-pill:hover{background:rgba(14,165,233,.15);border-color:rgba(14,165,233,.3);transform:translateY(-1px)}.cmd-detail{padding:8px 0}.cmd-desc{font-size:14px;margin-bottom:16px;color:var(--text);line-height:1.6}.param-list{margin:16px 0}.param{display:flex;gap:16px;padding:8px 0;border-bottom:1px solid rgba(255,255,255,.03)}.param-flag{color:var(--green);font-size:12px;min-width:180px;font-weight:600}.param-meaning{color:var(--muted);font-size:12px;line-height:1.5}.example-list{margin:16px 0}.section-label{font-size:10px;font-weight:700;color:var(--muted);text-transform:uppercase;letter-spacing:1px;margin-bottom:8px}.tips-section{padding:20px;margin:20px 0;background:rgba(99,102,241,.05);border:1px solid rgba(99,102,241,.15);border-radius:12px}.tip-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:12px;margin-top:16px}.tip-card{padding:14px;background:rgba(255,255,255,.03);border:1px solid rgba(255,255,255,.06);border-radius:10px;display:flex;gap:12px;transition:all .3s}.tip-card:hover{border-color:rgba(99,102,241,.3);background:rgba(99,102,241,.05);transform:translateY(-2px)}.tip-icon{font-size:24px;flex-shrink:0}.tip-content{flex:1}.tip-title{font-size:12px;font-weight:700;color:var(--purple);margin-bottom:4px}.tip-text{font-size:11px;color:var(--muted);line-height:1.5}.tip-text code{display:inline-block;margin-top:4px;padding:2px 6px;background:rgba(99,102,241,.1);border-radius:4px;color:var(--purple);font-size:10px}code{display:block;background:rgba(14,165,233,.08);padding:6px 12px;border-radius:6px;color:var(--cyan);font-size:12px;margin:6px 0;transition:all .2s}code:hover{background:rgba(14,165,233,.12)}.params-section{padding:20px;margin:20px 0;background:rgba(14,165,233,.05);border:1px solid rgba(14,165,233,.15);border-radius:12px}.param-table{margin-top:16px}.param-row{display:flex;gap:12px;padding:10px 0;border-bottom:1px solid rgba(255,255,255,.03);align-items:center}.header-row{border-bottom:2px solid rgba(14,165,233,.3);font-weight:700}.param-col{flex:1;font-size:12px;line-height:1.5}.param-col.flag{min-width:120px;color:var(--green);font-weight:600}.param-col.meaning{flex:2;color:var(--text)}.param-col.example{flex:1.5;color:var(--muted)}.param-col code{display:inline-block;padding:2px 8px;background:rgba(14,165,233,.08);border-radius:4px;font-size:11px;margin:0}.footer{text-align:center;color:var(--muted);font-size:10px;margin-top:24px;padding-top:16px;border-top:1px solid rgba(255,255,255,.04)}.card-bg{position:absolute;inset:0;pointer-events:none;z-index:0;background:radial-gradient(ellipse at 30% 10%,rgba(14,165,233,.25) 0%,transparent 70%);animation:cardGlow 3s ease-in-out infinite;transform-origin:top center}@keyframes cardGlow{0%,100%{opacity:.5;transform:scale(1)}50%{opacity:1;transform:scale(1.6)}}@keyframes titleGlow{0%,100%{filter:drop-shadow(0 0 20px rgba(14,165,233,.4)) drop-shadow(0 0 60px rgba(14,165,233,.15))}50%{filter:drop-shadow(0 0 30px rgba(14,165,233,.7)) drop-shadow(0 0 80px rgba(14,165,233,.3))}</style></head><body><div class="scanlines"></div><div class="card"><div class="card-bg"></div><div class="vline l"></div><div class="vline r"></div><h1>SPECCORE HELP</h1><div class="sub">SpecCore 命令参考 · v8.3.302</div>
1
+ <!DOCTYPE html><html lang="zh-CN" data-theme="ocean"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1.0"><title>SpecCore Help</title><style>@import url('https://fonts.googleapis.com/css2?family=Orbitron:wght@500;700;900&family=JetBrains+Mono:wght@400;600;700&display=swap');[data-theme="ocean"]{--cyan:#0ea5e9;--bg:#0b1929;--card:rgba(13,31,56,.95);--border:rgba(14,165,233,.15);--text:#bae6fd;--muted:#5b7fa5;--green:#14b8a6;--orange:#f97316;--purple:#6366f1}*{margin:0;padding:0;box-sizing:border-box}body{font-family:'JetBrains Mono',monospace;background:var(--bg);color:var(--text);min-height:100vh;padding:40px 20px}.scanlines{position:fixed;inset:0;pointer-events:none;z-index:99;background:repeating-linear-gradient(0deg,transparent,transparent 2px,rgba(0,240,255,.01) 2px,rgba(0,240,255,.01) 4px)}.card{max-width:960px;margin:0 auto;background:var(--card);border:1px solid var(--border);border-radius:16px;padding:36px;position:relative;overflow:hidden}.card::before{content:'';position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,var(--cyan),transparent);animation:scanX 3s linear infinite}.card::after{content:'';position:absolute;bottom:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,var(--cyan),transparent);animation:scanX-rev 3s linear infinite}@keyframes scanX{0%{transform:translateX(-100%)}100%{transform:translateX(100%)}}@keyframes scanX-rev{0%{transform:translateX(100%)}100%{transform:translateX(-100%)}}@keyframes scanY{0%{transform:translateY(-100%)}100%{transform:translateY(100%)}}@keyframes scanY-rev{0%{transform:translateY(100%)}100%{transform:translateY(-100%)}}.vline{position:absolute;top:0;width:1px;bottom:0;pointer-events:none}.vline.l{left:0;background:linear-gradient(180deg,transparent,var(--cyan),transparent);animation:scanY-rev 3s linear infinite}.vline.r{right:0;background:linear-gradient(180deg,transparent,var(--cyan),transparent);animation:scanY 3s linear infinite}h1{font-family:'Orbitron',sans-serif;font-size:24px;font-weight:900;background:linear-gradient(135deg,var(--cyan),var(--purple));-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;letter-spacing:2px;margin-bottom:4px;animation:titleGlow 3s ease-in-out infinite}.sub{color:var(--muted);font-size:11px;margin-bottom:24px}.intro-card{padding:20px;margin-bottom:20px;background:linear-gradient(135deg,rgba(14,165,233,.08),rgba(99,102,241,.08));border:1px solid rgba(14,165,233,.2);border-radius:12px}.intro-title{font-size:16px;font-weight:700;color:var(--cyan);margin-bottom:12px}.intro-text{font-size:13px;line-height:1.6;color:var(--text);margin-bottom:16px}.highlight-box{display:flex;gap:16px;padding:16px;background:rgba(20,184,166,.08);border:1px solid rgba(20,184,166,.2);border-radius:10px}.highlight-icon{font-size:32px}.highlight-content{flex:1}.highlight-title{font-size:12px;font-weight:700;color:var(--green);margin-bottom:8px;text-transform:uppercase;letter-spacing:1px}.highlight-list{list-style:none;padding:0;margin:0}.highlight-list li{font-size:12px;color:var(--text);padding:4px 0;line-height:1.5}.highlight-list strong{color:var(--cyan)}.quick-start{padding:20px;margin:20px 0;background:rgba(249,115,22,.05);border:1px solid rgba(249,115,22,.15);border-radius:12px}.section-header{display:flex;align-items:center;gap:8px;margin-bottom:16px}.header-icon{font-size:20px}.header-title{font-size:14px;font-weight:700;color:var(--orange);text-transform:uppercase;letter-spacing:1px}.step-row{display:flex;align-items:center;gap:12px;flex-wrap:wrap;justify-content:center}.step-item{display:flex;gap:12px;padding:12px 16px;background:rgba(255,255,255,.03);border:1px solid rgba(255,255,255,.08);border-radius:10px;min-width:180px}.step-num{width:32px;height:32px;border-radius:50%;background:linear-gradient(135deg,var(--orange),#ea580c);display:flex;align-items:center;justify-content:center;font-weight:700;font-size:14px;color:#fff;flex-shrink:0}.step-text{font-size:12px;line-height:1.5}.step-text code{display:inline-block;margin-top:4px;padding:2px 8px;background:rgba(249,115,22,.1);border-radius:4px;color:var(--orange);font-size:11px}.step-arrow{color:var(--muted);font-size:20px;font-weight:700}.cat{margin:16px 0;padding:16px;background:rgba(255,255,255,.02);border:1px solid rgba(255,255,255,.04);border-radius:12px;transition:all .3s}.cat:hover{border-color:rgba(14,165,233,.3);background:rgba(14,165,233,.03)}.cat-header{display:flex;align-items:center;gap:12px;margin-bottom:12px}.cat-icon{font-size:24px}.cat-info{flex:1}.cat-title{font-size:13px;font-weight:700;color:var(--cyan);margin-bottom:2px}.cat-desc{font-size:11px;color:var(--muted)}.cat-cmds{display:flex;flex-wrap:wrap;gap:8px}.cmd-pill{padding:4px 12px;border-radius:6px;font-size:11px;background:rgba(14,165,233,.08);color:var(--cyan);border:1px solid rgba(14,165,233,.15);transition:all .2s;cursor:pointer}.core-commands{padding:16px;border:1px solid var(--border);border-radius:12px;background:rgba(14,165,233,.04)}.core-commands .cmd-pill{font-size:12px;padding:6px 14px;background:rgba(20,184,166,.12);color:var(--green);border-color:rgba(20,184,166,.3)}.core-hint{margin-top:12px;font-size:12px;color:var(--muted)}.cmd-pill:hover{background:rgba(14,165,233,.15);border-color:rgba(14,165,233,.3);transform:translateY(-1px)}.cmd-detail{padding:8px 0}.cmd-desc{font-size:14px;margin-bottom:16px;color:var(--text);line-height:1.6}.param-list{margin:16px 0}.param{display:flex;gap:16px;padding:8px 0;border-bottom:1px solid rgba(255,255,255,.03)}.param-flag{color:var(--green);font-size:12px;min-width:180px;font-weight:600}.param-meaning{color:var(--muted);font-size:12px;line-height:1.5}.example-list{margin:16px 0}.section-label{font-size:10px;font-weight:700;color:var(--muted);text-transform:uppercase;letter-spacing:1px;margin-bottom:8px}.tips-section{padding:20px;margin:20px 0;background:rgba(99,102,241,.05);border:1px solid rgba(99,102,241,.15);border-radius:12px}.tip-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:12px;margin-top:16px}.tip-card{padding:14px;background:rgba(255,255,255,.03);border:1px solid rgba(255,255,255,.06);border-radius:10px;display:flex;gap:12px;transition:all .3s}.tip-card:hover{border-color:rgba(99,102,241,.3);background:rgba(99,102,241,.05);transform:translateY(-2px)}.tip-icon{font-size:24px;flex-shrink:0}.tip-content{flex:1}.tip-title{font-size:12px;font-weight:700;color:var(--purple);margin-bottom:4px}.tip-text{font-size:11px;color:var(--muted);line-height:1.5}.tip-text code{display:inline-block;margin-top:4px;padding:2px 6px;background:rgba(99,102,241,.1);border-radius:4px;color:var(--purple);font-size:10px}code{display:block;background:rgba(14,165,233,.08);padding:6px 12px;border-radius:6px;color:var(--cyan);font-size:12px;margin:6px 0;transition:all .2s}code:hover{background:rgba(14,165,233,.12)}.params-section{padding:20px;margin:20px 0;background:rgba(14,165,233,.05);border:1px solid rgba(14,165,233,.15);border-radius:12px}.param-table{margin-top:16px}.param-row{display:flex;gap:12px;padding:10px 0;border-bottom:1px solid rgba(255,255,255,.03);align-items:center}.header-row{border-bottom:2px solid rgba(14,165,233,.3);font-weight:700}.param-col{flex:1;font-size:12px;line-height:1.5}.param-col.flag{min-width:120px;color:var(--green);font-weight:600}.param-col.meaning{flex:2;color:var(--text)}.param-col.example{flex:1.5;color:var(--muted)}.param-col code{display:inline-block;padding:2px 8px;background:rgba(14,165,233,.08);border-radius:4px;font-size:11px;margin:0}.footer{text-align:center;color:var(--muted);font-size:10px;margin-top:24px;padding-top:16px;border-top:1px solid rgba(255,255,255,.04)}.card-bg{position:absolute;inset:0;pointer-events:none;z-index:0;background:radial-gradient(ellipse at 30% 10%,rgba(14,165,233,.25) 0%,transparent 70%);animation:cardGlow 3s ease-in-out infinite;transform-origin:top center}@keyframes cardGlow{0%,100%{opacity:.5;transform:scale(1)}50%{opacity:1;transform:scale(1.6)}}@keyframes titleGlow{0%,100%{filter:drop-shadow(0 0 20px rgba(14,165,233,.4)) drop-shadow(0 0 60px rgba(14,165,233,.15))}50%{filter:drop-shadow(0 0 30px rgba(14,165,233,.7)) drop-shadow(0 0 80px rgba(14,165,233,.3))}</style></head><body><div class="scanlines"></div><div class="card"><div class="card-bg"></div><div class="vline l"></div><div class="vline r"></div><h1>SPECCORE HELP</h1><div class="sub">SpecCore 命令参考 · v8.3.303</div>
2
2
  <div class="intro-card">
3
3
  <div class="intro-title">🎯 SpecCore — SDD 开发方法论 CLI 工具</div>
4
4
  <div class="intro-text">SpecCore 采用 <strong>Specification-Driven Development(规格驱动开发)</strong>方法论,通过标准化流程和 AI 辅助,实现从需求到交付的自动化流水线。</div>
@@ -238,4 +238,4 @@
238
238
  </div>
239
239
  </div>
240
240
  </div>
241
- <div class="footer">由 SpecCore 驱动 v8.3.302 · 2026-09-29</div></div></body></html>
241
+ <div class="footer">由 SpecCore 驱动 v8.3.303 · 2026-09-29</div></div></body></html>
@@ -1,73 +1,54 @@
1
1
  # ═══════════════════════════════════════════════════════════
2
- # SpecCore 主配置完整示例(.speccore.yml)
2
+ # SpecCore 主配置完整示例(.speccore.yml)—— v8.3.303 对齐版
3
3
  # ═══════════════════════════════════════════════════════════
4
4
  # 位置:项目根 .speccore.yml(与 .speccore/PROJECT.yaml 分工:
5
- # PROJECT.yaml 管「端/源码/Git/部署」,本文件管「行为/门禁/测试/AI」)
5
+ # PROJECT.yaml 管「端/源码/Git/部署」,本文件管「行为/门禁/AI」)
6
6
  # 升级:speccore config --upgrade(不要手动编辑 schema_version)
7
7
  # 参考:docs/config-reference.md(字段详解)
8
8
  #
9
- # 特性版本标记:
10
- # v8.3.24+ arbitration 契约裁决 v8.3.94+ settings.vision
11
- # v8.3.95+ quality_gates.verify_ui v8.3.193+ settings.ai provider 池
12
- # v8.3.197+ quality_gates.block_level v8.3.215+ tests.auth 登录装配
13
- # v8.3.217+ settings.smoke 三时机 v8.3.217+ stages / pipeline.test
9
+ # ⚠️ 本示例与 DEFAULT_CONFIG(v8.3.303)逐字段对齐,注意三处归属变化:
10
+ # 1. project → 已迁至 .speccore/PROJECT.yaml;tech_stack/team → 已废弃(升级自动清理)
11
+ # 2. tests/stages/pipeline 测试环境段 → 归属 .speccore/environments/{env}.yaml(见 VERIFY-EXAMPLE.yaml)
12
+ # 3. 新增:logging / tools / settings.pipeline / with_code / gates
14
13
  # ═══════════════════════════════════════════════════════════
15
14
 
16
15
  schema_version: 1
17
16
 
18
- # ── 项目信息 ──
19
- project:
20
- name: my-project
21
- description: 示例项目
22
- version: 1.0.0
23
-
24
- # ── 技术栈(供 AI 生成针对性内容)──
25
- tech_stack:
26
- backend: TypeScript / NestJS
27
- frontend: Vue 3 / Element Plus
28
- database: PostgreSQL
29
- cache: Redis
30
- mq: RabbitMQ
31
-
32
- # ── 团队 ──
33
- team:
34
- members:
35
- - name: alice
36
- role: lead
37
- assignee: true
38
- - name: bob
39
- role: developer
40
- assignee: true
17
+ # ── 日志(文件日志开关,输出到 .speccore/local/logs/)──
18
+ logging:
19
+ enabled: false
41
20
 
42
21
  # ── 质量门禁 ──
43
22
  quality_gates:
44
- enforce_testing: true
45
- enforce_review: true
46
- require_pr: true
23
+ enforce_testing: true # true → execute 前检查 TEST.md,缺失则阻断
24
+ enforce_review: true # true → 执行完自动进入 review 流程
25
+ require_pr: true # true → 禁止直接 push 保护分支,走 speccore pr
47
26
  # 阻塞级别:standard(编译+单测+契约都阻断,默认)/ compile(仅编译阻断)
48
27
  block_level: standard
49
28
  # v8.3.95+: UI 验证默认行为(speccore verify --ui)
50
29
  verify_ui:
51
- enabled: true
52
- smoke_test: true
53
- visual_check: true
54
- threshold: normal # strict / normal / loose
55
- devices: [desktop, mobile]
30
+ enabled: false # 演示默认关闭,按需 true
31
+ smoke_test: true # 冒烟测试
32
+ visual_check: true # 视觉检查
33
+ headed: false # 有头浏览器(调试用)
34
+ # threshold: strict 任何微小差异 / normal 明显差异(默认)/ loose 仅严重问题
35
+ threshold: normal
36
+ devices: [desktop] # desktop / mobile / iPhone13 / Pixel5 ...
56
37
  browsers: [chromium]
57
- timeout: 30000
58
- headed: false
38
+ timeout: 30000 # 单场景超时(毫秒)
39
+ # v8.3.50+: 视觉模型(看图判断走外部模型)
59
40
  visual_model:
60
- provider: qwen-vl
41
+ provider: qwen-vl # qwen-vl / openai / anthropic / local
61
42
  model: qwen-vl-max
62
43
 
63
- # ── 契约裁决(v8.3.24+):full 全流程 / l1-only / report-only ──
44
+ # ── 契约裁决:full 全流程 / l1-only / report-only ──
64
45
  arbitration:
65
46
  enabled: true
66
47
  mode: full
67
48
 
68
49
  # ── 运行时行为 ──
69
50
  settings:
70
- # 指派策略:strict 阻断不一致 / loose 自动填+警告(推荐)/ off 关闭
51
+ # 指派策略:strict 阻断不一致 / loose 自动填+警告 / off 关闭
71
52
  assignee:
72
53
  enabled: true
73
54
  mode: loose
@@ -87,7 +68,7 @@ settings:
87
68
  # 自动检查规范库最新
88
69
  sync:
89
70
  auto_check: true
90
- # 模式沉淀:off / smart(推荐)/ aggressive
71
+ # 模式沉淀:off / smart / aggressive
91
72
  patterns:
92
73
  auto_save: smart
93
74
  # 审查时检查执行人签名
@@ -98,26 +79,31 @@ settings:
98
79
  enabled: false
99
80
  provider: qwen-vl
100
81
  model: qwen-vl-plus
101
- apiKey: ${DASHSCOPE_API_KEY}
102
82
  maxImagesPerPrompt: 10
103
83
  imageMaxSizeKb: 2048
84
+ # 流水线模式开关
85
+ pipeline: false
86
+ # 分析时附带源码(from-source 场景)
87
+ with_code: false
104
88
  # 非必要流水线步骤三态开关:auto(智能,默认)/ on 强制 / off 跳过
105
89
  optional_steps:
106
- clarify: auto # 文档专业就跳过澄清
90
+ clarify: auto # 文档专业就跳过澄清
107
91
  verify: auto
108
92
  pipeline: auto
109
- pr: off # 本地开发不自动提 PR
93
+ pr: auto
110
94
  done: auto
111
- spec2doc: off # 不需要导出文档
95
+ spec2doc: auto
112
96
  # 命名流水线(run --preset <name>)
113
97
  pipelines:
114
- default: develop # full/import/spec/analyze/develop/deliver/deploy/docs
115
- custom:
116
- my-flow: analyze,validate,taskify,plan,execute
117
- hotfix: execute,verify,pipeline,pr
98
+ default: develop # full/import/spec/analyze/develop/deliver/deploy/docs
99
+ custom: {} # 自定义: { my-flow: analyze,validate,taskify,plan,execute }
100
+ # 质量门禁模式
101
+ gates:
102
+ mode: manual
118
103
  # v8.3.193+: 统一 LLM provider 池(host=宿主AI / llm=自配 / auto=宿主优先)
104
+ # 演示条目,默认 providers: []——自配时按此结构填写
119
105
  ai:
120
- provider: auto
106
+ provider: host
121
107
  providers:
122
108
  - name: local
123
109
  type: ollama
@@ -129,32 +115,27 @@ settings:
129
115
  model: gpt-4o
130
116
  apiKey: "${OPENAI_API_KEY}"
131
117
  priority: 2
132
- defaults:
133
- analyze: gpt4o
134
- split: local
118
+ defaults: {} # 按阶段指定 provider: { analyze: gpt4o }
135
119
  fallback: local
136
- # v8.3.301+: 子 Agent SDK 派单开关(第七层「窗口物理隔离」增强通道)
120
+ # v8.3.301+: 子 Agent SDK 派单开关
137
121
  # auto = Qoder 宿主 + token 可用(PAT 或 CLI 登录态)时启用(默认)
138
- # on = 强制尝试 SDK 派单(token 不可用也尝试,失败回退标记模式)
139
- # off = 禁用 SDK 派单,永远走标记模式(代码内容经主会话窗口)
122
+ # on = 强制尝试 SDK 派单(失败回退标记模式)
123
+ # off = 禁用 SDK 派单,永远走标记模式
140
124
  agent_dispatch:
141
125
  mode: auto
142
- # v8.3.217+: 冒烟三时机开关 + 范围(run --smoke / --skip-smoke / --scope 单次 覆盖)
126
+ # v8.3.217+: 冒烟三时机开关 + 范围(run --smoke / --skip-smoke / --scope 单次覆盖)
143
127
  smoke:
144
128
  points:
145
- local: auto # 开发完本地冒烟
146
- pre-deploy: auto # 部署前门禁
147
- post-deploy: auto # 部署后确认环境活着
148
- scope: module # full 全量 / module 当前功能模块
149
- scope_by_env:
150
- dev: module
151
- staging: module
152
- production: full # 生产发布才全量
129
+ local: auto # 开发完本地冒烟
130
+ pre-deploy: auto # 部署前门禁
131
+ post-deploy: auto # 部署后确认环境活着
132
+ scope: module # full 全量 / module 当前功能模块
133
+ scope_by_env: {} # 按环境覆盖: { production: full }
153
134
 
154
135
  # ── Ask 引擎 ──
155
136
  ask:
156
137
  routing:
157
- mode: hybrid # hybrid / cli-only / host-ai-only
138
+ mode: hybrid # hybrid / cli-only / host-ai-only
158
139
  high_threshold: 70
159
140
  low_threshold: 45
160
141
  auto_host_ai: true
@@ -162,6 +143,7 @@ ask:
162
143
  cache_min_hits: 3
163
144
  rules:
164
145
  force_host_ai: false
146
+ # 自配 LLM 池(演示条目,默认 [])
165
147
  llm_providers:
166
148
  - name: ollama-local
167
149
  enabled: false
@@ -176,53 +158,10 @@ ask:
176
158
  model: gpt-4o-mini
177
159
  priority: 2
178
160
 
179
- # ── 测试基础设施(与 verify / pipeline 联动)──
180
- tests:
181
- base_urls:
182
- h5: https://staging.example.com/h5
183
- admin: https://admin-staging.example.com
184
- api: https://api-staging.example.com
185
- local_urls:
186
- h5: http://localhost:5173
187
- # v8.3.215+: 测试登录(冒烟/视觉访问受保护页面前自动登录)
188
- # data-testid 遵循 UI_SPEC 元素标识约定:{模块}-{页面}-{元素}
189
- auth:
190
- login_url: /login
191
- username_selector: "[data-testid='login-username-input']"
192
- password_selector: "[data-testid='login-password-input']"
193
- submit_selector: "[data-testid='login-submit-btn']"
194
- success_url_contains: /dashboard
195
- credentials:
196
- username: admin
197
- password_env: SMOKE_PASSWORD # 密码从环境变量读取(推荐,不落库不进 git)
198
- visual_model:
199
- provider: qwen-vl
200
- model: qwen-vl-max
201
- timeout: 60000
202
-
203
- # ── 分层测试阶段(verify --stage <stage> 联动)──
204
- stages:
205
- dev:
206
- config: null # 使用内置代码质量验证
207
- pr:
208
- config: .speccore/tests/pr.yaml
209
- deploy:
210
- config: .speccore/tests/smoke.yaml
211
- release:
212
- config: .speccore/tests/release.yaml
213
-
214
- # ── Pipeline 内置测试节点(build 后 deploy 前/后执行)──
215
- pipeline:
216
- test:
217
- enabled: true
218
- type: smoke # build-check / smoke / visual / api / all
219
- stage: pre-deploy # pre-deploy / post-deploy / both
220
- fail_on_error: true # 失败是否阻断部署(仅 critical)
221
- auto_fix: true
222
- max_retries: 3
161
+ # ── 工具路径(doc2spec 转换依赖,留空自动探测)──
162
+ tools:
163
+ pandoc: ''
164
+ libreoffice: ''
223
165
 
224
166
  # ── 配置变更历史(speccore config --upgrade 自动维护,勿手动编辑)──
225
- config_history:
226
- - date: 2026-09-01
227
- change: 初始配置
228
- changed_by: alice
167
+ config_history: []