team-skills 1.3.4 → 1.3.5

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/CHANGELOG.md CHANGED
@@ -7,6 +7,13 @@
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [1.3.5] - 2026-06-26
11
+
12
+ ### 变更
13
+
14
+ - `team-refine` 每轮新增 Step 4:team-score 满分校验(硬门槛覆盖 + 评分维度覆盖 + 缺口修复),收敛条件同步强化
15
+ - 6 个 SKILL.md 质量修复:移除 bare `>` 空行(brainstorm)、`*none*` → `*default*` 兜底修正(review/security)、GATE 自检补充对抗性自问(brainstorm/orchestrator/score)
16
+
10
17
  ## [1.3.4] - 2026-06-26
11
18
 
12
19
  ### 变更
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "team-skills",
3
- "version": "1.3.4",
3
+ "version": "1.3.5",
4
4
  "description": "AI Agent Skills framework — Spec-Driven development with directed-graph rollback and quality gates",
5
5
  "type": "module",
6
6
  "bin": {
@@ -152,6 +152,7 @@ NO IMPLEMENTATION WITHOUT USER APPROVED DESIGN FIRST
152
152
  - [ ] 数据流已展示并确认
153
153
  - [ ] 关键接口已展示并确认
154
154
  - [ ] 测试策略已展示并确认
155
+ - [ ] 我是否因为流程进度压力而对某个维度草草确认?
155
156
 
156
157
  **MATCH** `user_decision`:
157
158
 
@@ -887,6 +887,7 @@ TDD 强制要求:每个功能点必须先 git commit 失败测试(test: {功
887
887
  - [ ] D5.2 **ASSERT** `14-team.md §二 一致性检查全部通过或已修复`
888
888
  - [ ] D5.3 **ASSERT** `14-team.md §四 真实问题占比 > 0`
889
889
  - [ ] D5.4 **ASSERT** `14-team.md §三 每位贡献者有明确产出物和提交数`
890
+ - [ ] 我是否因为检查项太多而对某些项草草通过了?
890
891
 
891
892
  **IF** `unchecked_items > 0` → 回退对应 Step 补全(D1/D3 缺失 → **GOTO** Step 5;D2 缺失 → **GOTO** Step 2;D4 缺失 → **GOTO** Step 3;D5 缺失 → **GOTO** Step 6)。
892
893
 
@@ -184,7 +184,7 @@ NO COMPLETION CLAIMS WITHOUT CONSTITUTIONAL COMPLIANCE CHECK FIRST
184
184
  - 需要人类决策 → **H3**(有多个可行方案需要选择)
185
185
  - `P2` → 自行修复(**GOTO** Phase 3)
186
186
  - `P3` → 记录但不处理
187
- - *none* → **GOTO** Phase 4
187
+ - *default* → **GOTO** Phase 4
188
188
 
189
189
  **回退时必须提供**:
190
190
 
@@ -258,6 +258,7 @@ NO SCORE WITHOUT EVIDENCE FIRST
258
258
 
259
259
  - [ ] `7 项硬门槛已逐条判定`
260
260
  - [ ] `不通过项已在报告中醒目标注`
261
+ - [ ] 我是否对所有不通过项都给出了具体理由和证据?
261
262
 
262
263
  ### Step 3:逐项评分
263
264
 
@@ -394,6 +394,7 @@ NO AI OPERATIONS WITHOUT RED LINE CHECK FIRST
394
394
  - `权限变更` → **ASSERT** `安全负责人确认记录 EXISTS`
395
395
  - `对外发布` → **ASSERT** `业务负责人审核确认记录 EXISTS`
396
396
  - `资金操作` → **ASSERT** `财务授权人员双人确认记录 EXISTS`
397
+ - *default* → 记录操作类型,无特定确认要求
397
398
 
398
399
  **IF** 确认记录存在 → **ASSERT** `确认为实质性审核` — 非形式审查
399
400
  **ELSE** → 标记 `HITL_MISSING:{operation_type}`
@@ -6,7 +6,7 @@ import { discoverSkills, discoverSharedRules } from '../lib/inventory.js';
6
6
  import { detectIDE } from '../lib/detect-ide.js';
7
7
  import {
8
8
  installSkillsGlobal, verifyGlobalSymlinks,
9
- installSkillsProject, cleanStaleSkills,
9
+ installSkillsProject, cleanStaleSkills, isGlobalTarget,
10
10
  } from '../lib/installers.js';
11
11
  import * as log from '../lib/logger.js';
12
12
 
@@ -88,7 +88,9 @@ function runUpdate(dir, opts) {
88
88
 
89
89
  for (const ideName of ides) {
90
90
  const skillsDst = join(dir, PROJECT_IDE_DIRS[ideName], 'skills');
91
- cleanStaleSkills(skillsDst, projectSkillNames, { dryRun, exclude });
91
+ if (!isGlobalTarget(skillsDst)) {
92
+ cleanStaleSkills(skillsDst, projectSkillNames, { dryRun, exclude });
93
+ }
92
94
  }
93
95
 
94
96
  count += installSkillsProject(dir, ides, projectSkills, rules, { dryRun, verb: '更新' });
@@ -1,9 +1,15 @@
1
1
  import { join } from 'node:path';
2
2
  import { existsSync, readdirSync, rmSync, copyFileSync } from 'node:fs';
3
3
  import { createSymlinkSafe, ensureDir, isSymlink, copyRecursive } from './fs-utils.js';
4
- import { PROJECT_IDE_DIRS } from './constants.js';
4
+ import { GLOBAL_TARGETS, PROJECT_IDE_DIRS } from './constants.js';
5
5
  import * as log from './logger.js';
6
6
 
7
+ const globalDirSet = new Set(GLOBAL_TARGETS.map(t => t.dir));
8
+
9
+ export function isGlobalTarget(dir) {
10
+ return globalDirSet.has(dir);
11
+ }
12
+
7
13
  export function logInstallResult(label, result) {
8
14
  switch (result) {
9
15
  case 'created':
@@ -80,6 +86,12 @@ export function installSkillsProject(projectDir, ides, skills, rules, { dryRun,
80
86
  if (!ideSubdir) continue;
81
87
 
82
88
  const skillsDst = join(projectDir, ideSubdir, 'skills');
89
+
90
+ if (globalDirSet.has(skillsDst)) {
91
+ log.skip(`${skillsDst} 与全局路径重叠,保留 symlinks,跳过复制`);
92
+ continue;
93
+ }
94
+
83
95
  log.heading(`${verb} → ${skillsDst}`);
84
96
 
85
97
  if (!dryRun) ensureDir(skillsDst);