@dommaker/harness 0.16.4 → 0.16.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
@@ -4,6 +4,11 @@ All notable changes to this project will be documented in this file.
4
4
 
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
6
6
 
7
+ ## [0.16.5] - 2026-07-27
8
+
9
+ ### Fixed
10
+ - **init 不再覆盖已有运行时配置**:重跑 `harness init` 时,`.harness/checkpoints.yml` 与 `.harness/resolutions.json` 已存在则跳过(打印灰色提示),不再被静默重置为内置默认——与 custom-constraints.yml 的既有存在检查行为对齐。两个文件均不入 git,此前被覆盖无版本兜底
11
+
7
12
  ## [0.16.4] - 2026-07-24
8
13
 
9
14
  ### Added
@@ -1 +1 @@
1
- {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/validate.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,OAAO,KAAK,EAAE,UAAU,EAAqB,MAAM,wBAAwB,CAAC;AAG5E,MAAM,WAAW,eAAe;IAC9B,cAAc;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW;IACX,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa;IACb,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAqBD;;GAEG;AACH,wBAAsB,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CA2DtE;AAED;;GAEG;AACH,eAAO,MAAM,mBAAmB,EAAE,UAAU,EAwC3C,CAAC;AAEF;;GAEG;AACH,wBAAsB,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA8BhF;AAwBD;;GAEG;AACH,wBAAsB,wBAAwB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAUjF"}
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/validate.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,OAAO,KAAK,EAAE,UAAU,EAAqB,MAAM,wBAAwB,CAAC;AAG5E,MAAM,WAAW,eAAe;IAC9B,cAAc;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW;IACX,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa;IACb,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAqBD;;GAEG;AACH,wBAAsB,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CA2DtE;AAED;;GAEG;AACH,eAAO,MAAM,mBAAmB,EAAE,UAAU,EAwC3C,CAAC;AAEF;;GAEG;AACH,wBAAsB,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAuChF;AAwBD;;GAEG;AACH,wBAAsB,wBAAwB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAmBjF"}
@@ -173,6 +173,15 @@ exports.DEFAULT_CHECKPOINTS = [
173
173
  async function createExampleCheckpoint(projectPath) {
174
174
  const filePath = path.join(projectPath, DEFAULT_CHECKPOINT_FILE);
175
175
  const dir = path.dirname(filePath);
176
+ // 如果已存在,不覆盖
177
+ try {
178
+ await fs.access(filePath);
179
+ console.log(chalk_1.default.gray(`checkpoints.yml 已存在,跳过`));
180
+ return;
181
+ }
182
+ catch {
183
+ // 文件不存在,创建
184
+ }
176
185
  await fs.mkdir(dir, { recursive: true });
177
186
  // 动态替换 no-console 检查点的源目录
178
187
  const roots = (0, detect_source_roots_1.detectSourceRoots)(projectPath);
@@ -224,6 +233,15 @@ const DEFAULT_RESOLUTIONS = {
224
233
  async function createExampleResolutions(projectPath) {
225
234
  const harnessDir = path.join(projectPath, '.harness');
226
235
  const filePath = path.join(harnessDir, 'resolutions.json');
236
+ // 如果已存在,不覆盖
237
+ try {
238
+ await fs.access(filePath);
239
+ console.log(chalk_1.default.gray(`resolutions.json 已存在,跳过`));
240
+ return;
241
+ }
242
+ catch {
243
+ // 文件不存在,创建
244
+ }
227
245
  await fs.mkdir(harnessDir, { recursive: true });
228
246
  const content = JSON.stringify(DEFAULT_RESOLUTIONS, null, 2);
229
247
  await fs.writeFile(filePath, content, 'utf-8');
@@ -1 +1 @@
1
- {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../../src/cli/commands/validate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../../src/cli/commands/validate.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dommaker/harness",
3
- "version": "0.16.4",
3
+ "version": "0.16.5",
4
4
  "description": "通用工程约束框架 - 铁律系统、检查点验证、测试门控、拦截器",
5
5
  "keywords": [
6
6
  "harness",
@@ -2,13 +2,14 @@
2
2
  * validate 命令测试
3
3
  */
4
4
 
5
- import { validate, createExampleCheckpoint } from '../validate';
5
+ import { validate, createExampleCheckpoint, createExampleResolutions } from '../validate';
6
6
  import * as fs from 'fs/promises';
7
7
  import { CheckpointValidator } from '../../../core/validators/checkpoint';
8
8
  import * as yaml from 'js-yaml';
9
9
 
10
10
  // Mock fs/promises
11
11
  jest.mock('fs/promises', () => ({
12
+ access: jest.fn(),
12
13
  readFile: jest.fn(),
13
14
  writeFile: jest.fn(),
14
15
  mkdir: jest.fn(),
@@ -125,6 +126,7 @@ describe('validate command', () => {
125
126
 
126
127
  describe('createExampleCheckpoint', () => {
127
128
  it('应该创建示例检查点文件', async () => {
129
+ mockFs.access.mockRejectedValue(new Error('ENOENT'));
128
130
  mockFs.mkdir.mockResolvedValue(undefined);
129
131
  mockFs.writeFile.mockResolvedValue(undefined);
130
132
  mockYaml.dump.mockReturnValue('yaml content');
@@ -135,5 +137,37 @@ describe('validate command', () => {
135
137
  expect(mockFs.writeFile).toHaveBeenCalled();
136
138
  expect(consoleSpy).toHaveBeenCalledWith(expect.stringContaining('已创建示例检查点'));
137
139
  });
140
+
141
+ it('已存在时不覆盖', async () => {
142
+ mockFs.access.mockResolvedValue(undefined);
143
+
144
+ await createExampleCheckpoint('/project');
145
+
146
+ expect(mockFs.writeFile).not.toHaveBeenCalled();
147
+ expect(consoleSpy).toHaveBeenCalledWith(expect.stringContaining('checkpoints.yml 已存在,跳过'));
148
+ });
149
+ });
150
+
151
+ describe('createExampleResolutions', () => {
152
+ it('应该创建 Resolutions 文件', async () => {
153
+ mockFs.access.mockRejectedValue(new Error('ENOENT'));
154
+ mockFs.mkdir.mockResolvedValue(undefined);
155
+ mockFs.writeFile.mockResolvedValue(undefined);
156
+
157
+ await createExampleResolutions('/project');
158
+
159
+ expect(mockFs.mkdir).toHaveBeenCalled();
160
+ expect(mockFs.writeFile).toHaveBeenCalled();
161
+ expect(consoleSpy).toHaveBeenCalledWith(expect.stringContaining('已创建 Resolutions 文件'));
162
+ });
163
+
164
+ it('已存在时不覆盖', async () => {
165
+ mockFs.access.mockResolvedValue(undefined);
166
+
167
+ await createExampleResolutions('/project');
168
+
169
+ expect(mockFs.writeFile).not.toHaveBeenCalled();
170
+ expect(consoleSpy).toHaveBeenCalledWith(expect.stringContaining('resolutions.json 已存在,跳过'));
171
+ });
138
172
  });
139
173
  });
@@ -156,6 +156,15 @@ export async function createExampleCheckpoint(projectPath: string): Promise<void
156
156
  const filePath = path.join(projectPath, DEFAULT_CHECKPOINT_FILE);
157
157
  const dir = path.dirname(filePath);
158
158
 
159
+ // 如果已存在,不覆盖
160
+ try {
161
+ await fs.access(filePath);
162
+ console.log(chalk.gray(`checkpoints.yml 已存在,跳过`));
163
+ return;
164
+ } catch {
165
+ // 文件不存在,创建
166
+ }
167
+
159
168
  await fs.mkdir(dir, { recursive: true });
160
169
 
161
170
  // 动态替换 no-console 检查点的源目录
@@ -213,6 +222,15 @@ export async function createExampleResolutions(projectPath: string): Promise<voi
213
222
  const harnessDir = path.join(projectPath, '.harness');
214
223
  const filePath = path.join(harnessDir, 'resolutions.json');
215
224
 
225
+ // 如果已存在,不覆盖
226
+ try {
227
+ await fs.access(filePath);
228
+ console.log(chalk.gray(`resolutions.json 已存在,跳过`));
229
+ return;
230
+ } catch {
231
+ // 文件不存在,创建
232
+ }
233
+
216
234
  await fs.mkdir(harnessDir, { recursive: true });
217
235
 
218
236
  const content = JSON.stringify(DEFAULT_RESOLUTIONS, null, 2);