@dommaker/harness 1.6.0 → 1.7.0
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 +15 -0
- package/dist/core/index.d.ts +1 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js.map +1 -1
- package/dist/core/validators/index.d.ts +1 -1
- package/dist/core/validators/index.d.ts.map +1 -1
- package/dist/core/validators/passes-gate.d.ts.map +1 -1
- package/dist/core/validators/passes-gate.js +2 -2
- package/dist/core/validators/passes-gate.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/types/passes-gate.d.ts +0 -13
- package/dist/types/passes-gate.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/__tests__/public-exports.test.ts +27 -5
- package/src/__tests__/public-type-surface.test.ts +359 -0
- package/src/cli/commands/__tests__/passes-gate-dead-options.test.ts +89 -1
- package/src/core/CONTEXT.md +1 -1
- package/src/core/index.ts +0 -1
- package/src/core/validators/index.ts +0 -1
- package/src/core/validators/passes-gate.ts +2 -3
- package/src/index.ts +0 -1
- package/src/types/passes-gate.ts +0 -17
package/CHANGELOG.md
CHANGED
|
@@ -6,9 +6,24 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
|
|
6
6
|
|
|
7
7
|
## [Unreleased]
|
|
8
8
|
|
|
9
|
+
## [1.7.0] - 2026-09-09
|
|
10
|
+
|
|
11
|
+
### Changes
|
|
12
|
+
> **发布级别裁决(2026-09-09,本车 = 1.7.0)**:本车含 breaking——包根公开类型 `DynamicTask` 删除(二次复审 B1,commit `b2c7b71`)。按人类裁决以 **1.7.0(minor)** 发布,沿用 ADR-0022 决策 4 与本文件 `[1.6.0]` 裁决段的同一判据(本包唯一消费者为 studio,采纳由 ship-chain 阶段 2 显式 bump 完成),不升 2.0.0。代价记档:breaking 内容继续落在 `^1.x` 可解析范围内,任何按范围解析的新增安装都会拿到它;`DynamicTask` 自初版起就在包根类型面,1.7.0 起消失,迁移路径 = 删引用。
|
|
13
|
+
>
|
|
14
|
+
> **定级纠正(本车的前提变更)**:二次复审原判据「`DynamicTask` 不在包根导出面、故非 breaking」不成立——实测 v1.6.0 源 `src/index.ts:106` 与已发布 npm 产物 `dist/index.d.ts:38` 均含包根 `export type { … DynamicTask … } from './types/passes-gate'`(1.4.0/1.5.0 产物同样在);且它同时经 `./core` 子入口可达(`src/core/index.ts` 与产物 `dist/core/index.d.ts` 均含)。它是**公开的**死亡类型,两个入口都是。
|
|
15
|
+
>
|
|
16
|
+
> **流程洞收口(本车已落闸)**:本仓 breaking 定级长期挂在「在不在包根导出面」这个断言上(ADR-0010/0019/0022 皆以它定级),而 `public-exports.test.ts` 的全量冻结只覆盖包根运行时导出面,类型面自 A2 起只有「已删类型」负钉 + 两条活类型正钉——钉的都是删完之后;删除动作之前那句「在不在公开面上」无任何闸可跑,全靠人 grep 记忆,A2 与 B1 已在同一处错两次。本车补 `src/__tests__/public-type-surface.test.ts` 收口:公开面按 `package.json` 的 `exports` 定义(五个入口点,清单从 `exports` 派生,新增子路径未登记即红),类型面全量清单逐字冻结,另有导出写法白名单闸堵 `export *` 与入口内联类型声明。清单来源经 tsc 产物对撞(152/32/1/12/18 逐字一致),非手抄。剩余边界:子路径入口的**值面**仍无对等冻结闸,已记 ADR-0022 追记第 5 条待另案。
|
|
17
|
+
- test(exports): 已发布类型面全量冻结闸(ADR-0022 追记第 4 条收口,随本车附带)——新增 `src/__tests__/public-type-surface.test.ts`,把「这个符号在不在公开面上」从人 grep 记忆变成跑一下就有答案的事实。入口点清单从 `package.json` 的 `exports` **派生**而非硬编码(`.`/`./core`/`./presets`/`./context`/`./gates` 五个,新增子路径未登记冻结清单即红),逐入口冻结类型面全量清单 152/32/1/12/18 项;另设导出写法白名单闸堵 `export *` / `export type *` / 入口内联 `export interface|type|enum|class`(这些写法会让按名字扫描静默漏算,正是本病因的形态来源),内联 `export function|const` 属值面放行。**本闸刻意不 import 任何入口**:`public-exports.test.ts` 的编译期钉在类型面被改动时会让整套 suite「failed to run」(实测注入一条 `export type { DynamicTask }` 得 0 tests),拿不到指名到符号与入口的清单 diff,故单独立一个文件。清单不手抄——与 tsc 产物(各 `exports[*].types` 指向的 `.d.ts`)逐项对撞才得逐字一致,并据此抓到 `src/gates/index.ts` 的 3 个 `export { 值, type X }` 混用说明符被「按块分类」漏计(15 → 真实 18),清单归类遂改为按**说明符自身**。反向验闸五种破坏各红一次且 suite 仍跑得动:包根重新导出 `DynamicTask`、`./gates` 删活类型 `GateResult`、包根注入 `export *`、入口注入内联 `export interface`、`package.json` 新增 `./monitoring` 子路径;每次注入后按 sha1 还原现场。非 breaking:纯测试 + 测试文件头注释,零生产代码改动、零公共面变化。验收:`npx jest --runInBand` 151 套件 / 2090 passed / 6 skipped、退出码 0(注:本机 3.6G 内存下并行 worker 会被 OOM 杀掉,`npm test` 退 143,HEAD 基线同样 143,与本改动无关,故取 runInBand 口径)、`tsc --noEmit` 与 `eslint src` 零错、`node bin/harness.js check` 通过 (1 条) + skip 1 条
|
|
18
|
+
- refactor(types,core)!: 删除死类型 `DynamicTask` 与其唯一残留形参(二次复审 B1,ADR-0022 追记)——#104/ADR-0022 删除链的第三处同型漏收,与同案的 `PassesGateResult`(评审 A2)同判据。`DynamicTask` 是已删 `setPasses(taskId, workDir, task?)` 的入参形状,承载「`task.passes` 只能由测试结果修改」的回写语义;该语义经 ADR-0022 判双仓零消费者、ADR-0014 记录 studio 只走 `check()`,后继形状即同文件保留的 `check(testResult: TestResult)`——不变式住在 `check()`,不依赖 `DynamicTask`。消费者消失链非本次新制造:f7facf3(#104)删 `runAllTests`/`checkAllPasses` → 9e62a67(ADR-0022/#125)删 `setPasses`/`getTestResult`/私有 `testResults` 缓存,此后全仓只剩私有 `runTest` 那个从不读取的 `_task` 形参在供养它、唯一调用点显式传 `undefined`。归属判定按 `no_delete_without_context` 走完全程:「未接线→接线」不成立(等于复活被 ADR-0022 明确推翻的 seam)、「被替代→吸收模式」已完成 → 真正无用,删。收口面:接口本体 + 四级 barrel(`types/passes-gate` → `core/validators/index` → `core/index` → `src/index`)+ 未读 `_task` 形参(`runTest` 签名收为 `(workDir, command?)`,唯一调用点随之改)。测试:`public-exports.test.ts` 的类型面闸扩为「同链已删类型」清单(四级链扫描收为共享 helper,逐类型各一条 `@ts-expect-error` 编译期钉),先红后绿(加钉未删时红在 TS2578)+ 反向验闸(向 `src/index.ts` 注回该字样即「四级链都已消失」红,还原后 sha1 回到注入前值)。文档:`src/core/CONTEXT.md` 记账;`docs/public-exports-review.md` 是 2026-08-19 历史评审快照,按 ADR-0022 决策 4 不回改。studio 侧 `apps/`+`packages/` 零命中,双仓零消费者成立。按 1.7.0 发布(breaking 级别裁决见本节首)。验收:`npm test` 5 套件 64 项绿(改动面相关)、`tsc --noEmit` 与 `eslint src` 零错
|
|
19
|
+
|
|
9
20
|
## [1.6.0] - 2026-09-09
|
|
10
21
|
|
|
11
22
|
### Changes
|
|
23
|
+
|
|
24
|
+
> **发布级别裁决(2026-09-09)**:本车含 breaking(ADR-0017/0018/0019/0022 的公共面删除 + 评审 A1/A2 追加的死旗帜与死类型),按人类裁决以 **1.6.0(minor)** 发布,推翻各 ADR 原「影响版本:下个 major(2.0.0)」判定(措辞已就地改写并保留被推翻痕迹)。依据:本包唯一消费者为 studio,采纳由 ship-chain 阶段 2 显式 bump 完成,`monitor-system-probes` 调用点随 studio#459(`32e34b39`)同批部署翻转。代价记档:breaking 内容落在 `^1.x` 可解析范围内,任何按范围解析的新增安装都会拿到它。
|
|
25
|
+
>
|
|
26
|
+
> **本条是事后补记**:它随 `[Unreleased]` 一起写就,发版时被 `harness-ship` 的 CHANGELOG 迁移逻辑(只保留 `-` 开头行)静默丢弃,并已随 v1.6.0 tarball 与 GitHub Release 发布出去、无法回收。丢弃缺陷已在部署工具侧修复(`studio-config` 的 `bin/lib/changelog_release.py`:非 bullet 实质行随条目一并上移 + 内容守恒 fail-loud 断言)。
|
|
12
27
|
- refactor(cli,core,types)!: 独立评审 A1/A2 收口——删 `passes-gate` 的死旗帜与死类型(#122/#125 删除动作的直接遗留):① `--max-retries <n>` CLI 旗帜 + `PassesGateConfig.maxRetries`/`retryDelay` 字段 + 其默认值与装配赋值——重试实现原住已删的 `setPasses`,删后整条装配链只剩写入方、无任何读取方,`harness passes-gate --max-retries N` 恒不生效(同 ADR-0018 删 performance 幽灵旗帜的判据);② `PassesGateResult` 类型(已删 `setPasses` 的返回形状,`attempts` 字段全仓零赋值方)及其四级 barrel 转发链 `types/passes-gate → core/validators/index → core/index → src/index`,包根类型面收缩——此为 #125 票面「关联类型导出随迁」的漏收项,`public-exports.test.ts` 只冻结运行时导出、类型面无对等闸,故无测试可捕获。对外行为变化:`--max-retries` 由静默无效变为 commander `unknown option` exit 1,迁移路径 = 去掉该参数(studio 全仓零调用方,实测 grep)。测试:新增 `passes-gate-dead-options.test.ts` 与 A2 的导出面钉桩先红后绿,反向验证「把 `PassesGateResult` 加回 `src/index.ts` 即套件红(TS2578)」证明新闸非空洞。按 1.6.0 发布(breaking 级别裁决见本节首)。验收:`npm test` 150 套件 / 2073 passed / 6 skipped、`tsc --noEmit` 与 `eslint src` 零错、`node bin/harness.js check` 通过(主会话独立复跑核对)
|
|
13
28
|
- refactor(core,context,knowledge)!: 零消费者公共面收缩——六项删除(ADR-0022,架构评审候选6)——六项公共导出符号经 harness+studio 双仓核实零生产消费者,按 #104 判据删除,不留兼容 shim:① `PassesGate.setPasses`/`getTestResult`/`checkTestFileChanges`(studio 只走 `check()`、harness 只走 `runTests()`)连带死数据 `PROTECTED_TEST_PATTERNS`(`.some(() => …)` 回调丢弃模式参数、真实匹配靠硬编码 includes)与只被 setPasses 写、只被 getTestResult 读的私有 `testResults` 缓存;② `SessionStartup` + `createSessionStartup` + `DEFAULT_CODE_CHECKPOINTS`/`MINIMAL_CHECKPOINTS`;③ `CleanStateManager` + `createCleanStateManager`;④ `AdaptiveTokenBudget`(`TokenBudget` 基类不动);⑤ `SessionCompaction` + `DEFAULT_COMPACTION_CONFIG`;⑥ `KnowledgeLifecycleHooks`。删除面另有 `src/core/session/` 整目录、`src/types/session.ts`(其全部导出都在删除集内、删后无任何剩余消费者)、`src/context/compaction.ts`、`src/knowledge/lifecycle-hooks.ts`、`context/types.ts` 的 `DEFAULT_COMPACTION_CONFIG` 定义段,barrel 链三级同删(子目录 index → `core/index` → `src/index`);关联类型随迁 `StartupCheckpoints`/`StartupCheckpointType`/`StartupCheckpointResult`/`CleanStateConfig`/`CleanStateResult`/`DetectedBug`/`TaskListJson`/`TaskStepStatus`/`SessionInfo`/`CompactionResult`;包根运行时符号 10 个消失,`public-exports.test.ts` 清单逐条同步(diff 即评审材料)。**不删两项**:`ErrorClassifier`(studio `diagnostics.routes.ts` 真实消费)、`CSOValidator`(studio 名义消费,端点存废属 studio 侧另票);`CompactionConfig`/`CompactionLevel` 也不随引擎删——`CompactionLevel` 仍被在用类型 `ContextUsageSnapshot.compactionLevel` 引用,而两者不在 ADR 的双仓核实清单内,未经核实不扩权删除(记名留待复核)。历史 AC-007「保留 `setPasses()` 向后兼容」被本 ADR 明确推翻(兼容对象不存在),改写为编译期 `@ts-expect-error` + 运行期原型双重钉新形状。测试随迁删除:六符号自有测试(含 `session-startup` 的两份重复文件)与 `passes-gate-extra.test.ts`(残留只是一个无断言 `it.skip` 占位);`passes-gate.test.ts` 三处以 setPasses 为观测窗的用例改从现存生产路径观测(探测 fail-closed 双路径→runTests 单路径、harness#94「结果面无 coverage」钉子改由 `runTests()` 承住),`token-budget.test.ts` 删 AdaptiveTokenBudget 段。文档:`core/CONTEXT.md`(职责与 `session/` 导出条目消失、PassesGate 公开面记为 `check()`+`runTests()`、git 取证链外豁免清单删掉 `session/clean-state.ts`/`session/startup.ts` 两站点并把 `passes-gate.ts` 的 `git diff --name-only` 改为已消失项)、`context/CONTEXT.md`(压缩只剩词汇不留引擎)、`knowledge/CONTEXT.md`(导出一条 + 对 `src/context/` 的依赖声明随 lifecycle-hooks.ts 删除而收正);`docs/public-exports-review.md` 是 2026-08-19 历史评审快照,按 ADR 不回改。迁移路径 = 删引用(双仓已核实无引用)。按 1.6.0 发布(与 ADR-0017/0018/0019 同车;breaking 级别裁决见本节首)。验收:`npm test` 149 套件 / 2063 项绿、`tsc --noEmit` 与 `eslint src` 零错、行覆盖 91.87%、`node bin/harness.js check --staged`(复现前置有二:① 变更集非空,即带本票暂存的 29 个文件,触发条件并集 `module_modification, code_implementation`;② 该工程已有验证证据——`no_completion_without_verification` 读 `.harness` 运行时证据,裸检出无证据时判违规而非下列数字)→ 铁律全部通过 (3 条) + 指导原则 3/3 + skip 3 条(`incremental_progress`/`context_doc_sync`/`governance_presence`),已在 #125 自身改动集上以独立 worktree 复核;同一命令在干净工作区直跑(无变更集)得的是触发 `file_modification` → 铁律全部通过 (1 条) + 指导原则 0/0 + skip 1 条(`governance_presence`)。原句只写了带改动运行的数字却没写这两个前置,按字面不可对外复现,此处补全口径(review A3)
|
|
14
29
|
- refactor(core): git 取证 seam 名义收窄为「check 链路唯一」+ spec/validator 同型收口(ADR-0021,架构评审候选5)——`git-evidence.ts:4` 自称「全仓唯一的 git 取证点」、`core/CONTEXT.md:28` 禁令字面只盖 `execSync('git …')`,实况是 7 个生产文件约 18 条 git 命令不走 seam(多数用 `execAsync`/`execFileAsync`):名义与实况两层皮,且错误名义会被新人照抄。落地三件:① 约定改写为「check 链路(context-builder / checker / CheckEnv / validators)的 git 事实经 adapter」,禁令字面覆盖三个 exec 出口,`CONTEXT.md` 导出段与 `git-evidence.ts` 头两处自我声明同步;② 五组链外站点**记名豁免**并逐条带理由(`session/clean-state.ts` git add/commit 是**写**操作不属取证、`cli/commands/release.ts` 发布编排非判定证据、`gates/review.ts` + `cli/commands/review.ts` PR 审查流 gh/日志语义、`session/startup.ts` 启动摘要容忍降级、`knowledge/import.ts` 导入启发式失败记 ImportError 降级)——不选全量收口(语义异质,硬塞会造出宽 interface),也不选纯文档降级(浪费真同型站点);③ 收口唯一同型站点 `core/spec/validator.ts` 的 `git diff --cached --name-only` → 就地 `createGitEvidence(cwd, run?)` + `splitFileNames`,取证根按 #95 约定锚到 projectPath(原 `execAsync` 不带 cwd → `-p X --staged` 列的是 cwd 的暂存区、校验的也是 cwd 的文件,与打印的「项目路径: X」无关,是假绿形状),返回名随取证根 `path.resolve(cwd, …)` 与非 staged 分支的 glob `absolute:true` 同口径。`validators/passes-gate.ts:414` 本票不动——随 ADR-0022 删 `checkTestFileChanges` 消失,CONTEXT.md 如实记名为待消失项、不列豁免。按 minor 发布,不并入本车的 breaking 集合:公共导出与类型零变化,`SpecValidator` 公开签名逐字不变(`getStagedFiles` 是包内 private);行为面唯一可见变化 = `spec --staged` 结果 `file` 由相对名变绝对路径。测试:`getStagedFiles()` 两枚用例先红后绿(注入 `GitCommandRunner` 钉住命令字面量与取证目录、runner 抛错降级空列表),validator 套件 38 项与全量 156 套件 / `tsc` / `eslint` 绿
|
package/dist/core/index.d.ts
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
export { IRON_LAWS, GUIDELINES, PROMPTS, getAllConstraints, findConstraintsByTrigger, getConstraint, ConstraintChecker, checkConstraint, checkConstraints, checkBeforeExecution, constraintChecker, CONSTRAINTS_START_MARKER, CONSTRAINTS_END_MARKER, renderConstraintsSection, CheckCache, renderConstraintsByTrigger, ConstraintViolationError, } from './constraints';
|
|
8
8
|
export type { CheckConstraintsOptions, CheckCacheConfig, CheckSamplingConfig, RenderConstraintsByTriggerOptions, ConstraintId, ConstraintKind, ConstraintLevel, ConstraintTrigger, Constraint, ConstraintResult, ConstraintContext, ConstraintCheckResult, IronLawContext, } from './constraints';
|
|
9
9
|
export { CheckpointValidator, PassesGate, createPassesGate, CSOValidator, } from './validators';
|
|
10
|
-
export type { CSOValidationResult, CSOIssue, Checkpoint, CheckpointCheck, CheckpointResult, CheckResult, CheckpointContext, CheckType, CheckConfig, PassesGateConfig, TaskTestResult,
|
|
10
|
+
export type { CSOValidationResult, CSOIssue, Checkpoint, CheckpointCheck, CheckpointResult, CheckResult, CheckpointContext, CheckType, CheckConfig, PassesGateConfig, TaskTestResult, } from './validators';
|
|
11
11
|
export { SpecValidator } from './spec/validator';
|
|
12
12
|
export type { SpecValidatorConfig, SpecValidationResult, BatchSpecValidationResult, SpecSchemaDefinition, SpecType, } from '../types/spec';
|
|
13
13
|
export { ProjectConfigLoader, loadRawProjectConfig, getGovernanceConfig, resolveContextFiles, getCapabilitiesMode, } from './project-config-loader';
|
package/dist/core/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EACL,SAAS,EACT,UAAU,EACV,OAAO,EACP,iBAAiB,EACjB,wBAAwB,EACxB,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,gBAAgB,EAChB,oBAAoB,EACpB,iBAAiB,EACjB,wBAAwB,EACxB,sBAAsB,EACtB,wBAAwB,EACxB,UAAU,EACV,0BAA0B,EAC1B,wBAAwB,GACzB,MAAM,eAAe,CAAC;AACvB,YAAY,EACV,uBAAuB,EACvB,gBAAgB,EAChB,mBAAmB,EACnB,iCAAiC,EACjC,YAAY,EACZ,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,UAAU,EACV,gBAAgB,EAChB,iBAAiB,EACjB,qBAAqB,EACrB,cAAc,GACf,MAAM,eAAe,CAAC;AAGvB,OAAO,EACL,mBAAmB,EACnB,UAAU,EACV,gBAAgB,EAChB,YAAY,GACb,MAAM,cAAc,CAAC;AACtB,YAAY,EACV,mBAAmB,EACnB,QAAQ,EACR,UAAU,EACV,eAAe,EACf,gBAAgB,EAChB,WAAW,EACX,iBAAiB,EACjB,SAAS,EACT,WAAW,EACX,gBAAgB,EAChB,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EACL,SAAS,EACT,UAAU,EACV,OAAO,EACP,iBAAiB,EACjB,wBAAwB,EACxB,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,gBAAgB,EAChB,oBAAoB,EACpB,iBAAiB,EACjB,wBAAwB,EACxB,sBAAsB,EACtB,wBAAwB,EACxB,UAAU,EACV,0BAA0B,EAC1B,wBAAwB,GACzB,MAAM,eAAe,CAAC;AACvB,YAAY,EACV,uBAAuB,EACvB,gBAAgB,EAChB,mBAAmB,EACnB,iCAAiC,EACjC,YAAY,EACZ,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,UAAU,EACV,gBAAgB,EAChB,iBAAiB,EACjB,qBAAqB,EACrB,cAAc,GACf,MAAM,eAAe,CAAC;AAGvB,OAAO,EACL,mBAAmB,EACnB,UAAU,EACV,gBAAgB,EAChB,YAAY,GACb,MAAM,cAAc,CAAC;AACtB,YAAY,EACV,mBAAmB,EACnB,QAAQ,EACR,UAAU,EACV,eAAe,EACf,gBAAgB,EAChB,WAAW,EACX,iBAAiB,EACjB,SAAS,EACT,WAAW,EACX,gBAAgB,EAChB,cAAc,GACf,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,YAAY,EACV,mBAAmB,EACnB,oBAAoB,EACpB,yBAAyB,EACzB,oBAAoB,EACpB,QAAQ,GACT,MAAM,eAAe,CAAC;AAGvB,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,yBAAyB,CAAC;AACjC,YAAY,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAGxF,OAAO,EACL,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,yBAAyB,CAAC;AACjC,YAAY,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC"}
|
package/dist/core/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,yCAAyC;AACzC,6CAkBuB;AAjBrB,wGAAA,SAAS,OAAA;AACT,yGAAA,UAAU,OAAA;AACV,sGAAA,OAAO,OAAA;AACP,gHAAA,iBAAiB,OAAA;AACjB,uHAAA,wBAAwB,OAAA;AACxB,4GAAA,aAAa,OAAA;AACb,gHAAA,iBAAiB,OAAA;AACjB,8GAAA,eAAe,OAAA;AACf,+GAAA,gBAAgB,OAAA;AAChB,mHAAA,oBAAoB,OAAA;AACpB,gHAAA,iBAAiB,OAAA;AACjB,uHAAA,wBAAwB,OAAA;AACxB,qHAAA,sBAAsB,OAAA;AACtB,uHAAA,wBAAwB,OAAA;AACxB,yGAAA,UAAU,OAAA;AACV,yHAAA,0BAA0B,OAAA;AAC1B,uHAAA,wBAAwB,OAAA;AAkB1B,8BAA8B;AAC9B,2CAKsB;AAJpB,iHAAA,mBAAmB,OAAA;AACnB,wGAAA,UAAU,OAAA;AACV,8GAAA,gBAAgB,OAAA;AAChB,0GAAA,YAAY,OAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,yCAAyC;AACzC,6CAkBuB;AAjBrB,wGAAA,SAAS,OAAA;AACT,yGAAA,UAAU,OAAA;AACV,sGAAA,OAAO,OAAA;AACP,gHAAA,iBAAiB,OAAA;AACjB,uHAAA,wBAAwB,OAAA;AACxB,4GAAA,aAAa,OAAA;AACb,gHAAA,iBAAiB,OAAA;AACjB,8GAAA,eAAe,OAAA;AACf,+GAAA,gBAAgB,OAAA;AAChB,mHAAA,oBAAoB,OAAA;AACpB,gHAAA,iBAAiB,OAAA;AACjB,uHAAA,wBAAwB,OAAA;AACxB,qHAAA,sBAAsB,OAAA;AACtB,uHAAA,wBAAwB,OAAA;AACxB,yGAAA,UAAU,OAAA;AACV,yHAAA,0BAA0B,OAAA;AAC1B,uHAAA,wBAAwB,OAAA;AAkB1B,8BAA8B;AAC9B,2CAKsB;AAJpB,iHAAA,mBAAmB,OAAA;AACnB,wGAAA,UAAU,OAAA;AACV,8GAAA,gBAAgB,OAAA;AAChB,0GAAA,YAAY,OAAA;AAgBd,WAAW;AACX,8CAAiD;AAAxC,0GAAA,aAAa,OAAA;AAStB,0CAA0C;AAC1C,iEAMiC;AAL/B,4HAAA,mBAAmB,OAAA;AACnB,6HAAA,oBAAoB,OAAA;AACpB,4HAAA,mBAAmB,OAAA;AACnB,4HAAA,mBAAmB,OAAA;AACnB,4HAAA,mBAAmB,OAAA;AAIrB,0BAA0B;AAC1B,iEAGiC;AAF/B,gIAAA,uBAAuB,OAAA;AACvB,4HAAA,mBAAmB,OAAA"}
|
|
@@ -5,5 +5,5 @@ export { CheckpointValidator } from './checkpoint';
|
|
|
5
5
|
export { PassesGate, createPassesGate } from './passes-gate';
|
|
6
6
|
export { CSOValidator, type CSOValidationResult, type CSOIssue } from './cso';
|
|
7
7
|
export type { Checkpoint, CheckpointCheck, CheckpointResult, CheckResult, CheckpointContext, CheckType, CheckConfig, } from '../../types/checkpoint';
|
|
8
|
-
export type { PassesGateConfig, TaskTestResult,
|
|
8
|
+
export type { PassesGateConfig, TaskTestResult, } from '../../types/passes-gate';
|
|
9
9
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/validators/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,KAAK,mBAAmB,EAAE,KAAK,QAAQ,EAAE,MAAM,OAAO,CAAC;AAG9E,YAAY,EACV,UAAU,EACV,eAAe,EACf,gBAAgB,EAChB,WAAW,EACX,iBAAiB,EACjB,SAAS,EACT,WAAW,GACZ,MAAM,wBAAwB,CAAC;AAEhC,YAAY,EACV,gBAAgB,EAChB,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/validators/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,KAAK,mBAAmB,EAAE,KAAK,QAAQ,EAAE,MAAM,OAAO,CAAC;AAG9E,YAAY,EACV,UAAU,EACV,eAAe,EACf,gBAAgB,EAChB,WAAW,EACX,iBAAiB,EACjB,SAAS,EACT,WAAW,GACZ,MAAM,wBAAwB,CAAC;AAEhC,YAAY,EACV,gBAAgB,EAChB,cAAc,GACf,MAAM,yBAAyB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"passes-gate.d.ts","sourceRoot":"","sources":["../../../src/core/validators/passes-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,OAAO,KAAK,EACV,gBAAgB,
|
|
1
|
+
{"version":3,"file":"passes-gate.d.ts","sourceRoot":"","sources":["../../../src/core/validators/passes-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,OAAO,KAAK,EACV,gBAAgB,EAEhB,UAAU,EACV,qBAAqB,EAEtB,MAAM,yBAAyB,CAAC;AAajC;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAoCxF;AAED;;GAEG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAA6B;gBAE/B,MAAM,GAAE,OAAO,CAAC,gBAAgB,CAAM;IAQlD;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,KAAK,CAAC,UAAU,EAAE,UAAU,GAAG,qBAAqB;IAsCpD;;;;;OAKG;IACG,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;QACvC,MAAM,EAAE,OAAO,CAAC;QAChB,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,CAAC,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,EAAE,CAAC;QAC/C,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IAiDF;;OAEG;YACW,OAAO;IA6CrB;;OAEG;YACW,gBAAgB;IAY9B;;OAEG;YACW,cAAc;CAY7B;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,UAAU,CAE/E"}
|
|
@@ -188,7 +188,7 @@ class PassesGate {
|
|
|
188
188
|
message: '未检测到测试命令',
|
|
189
189
|
};
|
|
190
190
|
}
|
|
191
|
-
const result = await this.runTest(workDir,
|
|
191
|
+
const result = await this.runTest(workDir, testCommand);
|
|
192
192
|
const duration = Date.now() - startTime;
|
|
193
193
|
// 解析测试数量
|
|
194
194
|
const output = result.output || '';
|
|
@@ -220,7 +220,7 @@ class PassesGate {
|
|
|
220
220
|
/**
|
|
221
221
|
* 运行测试
|
|
222
222
|
*/
|
|
223
|
-
async runTest(workDir,
|
|
223
|
+
async runTest(workDir, command) {
|
|
224
224
|
const testCommand = command || this.config.testCommand || await detectTestCommand(workDir);
|
|
225
225
|
const timestamp = new Date();
|
|
226
226
|
// 探测失败 fail-closed:与 runTests 的「未检测到测试命令」分支同形状
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"passes-gate.js","sourceRoot":"","sources":["../../../src/core/validators/passes-gate.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"passes-gate.js","sourceRoot":"","sources":["../../../src/core/validators/passes-gate.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -35,7 +35,7 @@ export { CONSTRAINTS_START_MARKER, CONSTRAINTS_END_MARKER, renderConstraintsSect
|
|
|
35
35
|
export type { Checkpoint, CheckpointCheck, CheckpointContext, CheckpointResult, CheckConfig, CheckResult, CheckType, } from './types/checkpoint';
|
|
36
36
|
export { CheckpointValidator, PassesGate, createPassesGate, CSOValidator, } from './core/validators';
|
|
37
37
|
export type { CSOIssue, CSOValidationResult } from './core/validators';
|
|
38
|
-
export type { PassesGateConfig, PassesGateCheckResult, PassesGateViolation, TestResult,
|
|
38
|
+
export type { PassesGateConfig, PassesGateCheckResult, PassesGateViolation, TestResult, TaskTestResult, } from './types/passes-gate';
|
|
39
39
|
export type { StepMeta, ToolMeta, WorkflowMeta, } from './types/cso';
|
|
40
40
|
export { SpecValidator, validateSpec, validateAllSpecs } from './core/spec/validator';
|
|
41
41
|
export type { SpecValidatorConfig, SpecValidationResult, BatchSpecValidationResult, SpecSchemaDefinition, SpecType, SpecValidationError, SchemaLoader, } from './types/spec';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAKH,OAAO,EACL,wBAAwB,GACzB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACV,UAAU,EACV,YAAY,EACZ,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,qBAAqB,EACrB,cAAc,GACf,MAAM,oBAAoB,CAAC;AAK5B,OAAO,EACL,SAAS,EACT,UAAU,EACV,OAAO,EACP,iBAAiB,EACjB,aAAa,EACb,wBAAwB,GACzB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,8BAA8B,CAAC;AACtC,YAAY,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAKxE,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,4BAA4B,CAAC;AACpC,YAAY,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAK1E,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC5D,YAAY,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAC5F,OAAO,EAAE,0BAA0B,EAAE,MAAM,0CAA0C,CAAC;AACtF,YAAY,EAAE,iCAAiC,EAAE,MAAM,0CAA0C,CAAC;AAClG,OAAO,EACL,wBAAwB,EACxB,sBAAsB,EACtB,wBAAwB,GACzB,MAAM,uCAAuC,CAAC;AAK/C,YAAY,EACV,UAAU,EACV,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,WAAW,EACX,WAAW,EACX,SAAS,GACV,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,mBAAmB,EACnB,UAAU,EACV,gBAAgB,EAChB,YAAY,GACb,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACvE,YAAY,EACV,gBAAgB,EAChB,qBAAqB,EACrB,mBAAmB,EACnB,UAAU,EACV,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;;;;;AAEH,2CAA2C;AAC3C,uBAAuB;AACvB,2CAA2C;AAC3C,iDAE4B;AAD1B,sHAAA,wBAAwB,OAAA;AAc1B,2CAA2C;AAC3C,mBAAmB;AACnB,2CAA2C;AAC3C,8DAOwC;AANtC,wGAAA,SAAS,OAAA;AACT,yGAAA,UAAU,OAAA;AACV,sGAAA,OAAO,OAAA;AACP,gHAAA,iBAAiB,OAAA;AACjB,4GAAA,aAAa,OAAA;AACb,uHAAA,wBAAwB,OAAA;AAE1B,sEAGsC;AAFpC,gIAAA,uBAAuB,OAAA;AACvB,4HAAA,mBAAmB,OAAA;AAIrB,2CAA2C;AAC3C,uCAAuC;AACvC,2CAA2C;AAC3C,sDAIoC;AAHlC,0GAAA,eAAe,OAAA;AACf,2GAAA,gBAAgB,OAAA;AAChB,+GAAA,oBAAoB,OAAA;AAItB,2CAA2C;AAC3C,YAAY;AACZ,2CAA2C;AAC3C,8DAA4D;AAAnD,yGAAA,UAAU,OAAA;AAEnB,kFAAsF;AAA7E,mIAAA,0BAA0B,OAAA;AAEnC,4EAI+C;AAH7C,8HAAA,wBAAwB,OAAA;AACxB,4HAAA,sBAAsB,OAAA;AACtB,8HAAA,wBAAwB,OAAA;AAe1B,gDAK2B;AAJzB,iHAAA,mBAAmB,OAAA;AACnB,wGAAA,UAAU,OAAA;AACV,8GAAA,gBAAgB,OAAA;AAChB,0GAAA,YAAY,OAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -42,19 +42,6 @@ export interface TaskTestResult {
|
|
|
42
42
|
/** 证据路径 */
|
|
43
43
|
evidence?: string;
|
|
44
44
|
}
|
|
45
|
-
/**
|
|
46
|
-
* 动态任务(用于 passes-gate)
|
|
47
|
-
*/
|
|
48
|
-
export interface DynamicTask {
|
|
49
|
-
/** 任务 ID */
|
|
50
|
-
id: string;
|
|
51
|
-
/** 任务名称 */
|
|
52
|
-
name?: string;
|
|
53
|
-
/** 是否通过 */
|
|
54
|
-
passes?: boolean;
|
|
55
|
-
/** 测试结果 */
|
|
56
|
-
testResult?: TaskTestResult;
|
|
57
|
-
}
|
|
58
45
|
/**
|
|
59
46
|
* 测试结果输入(用于 check() 方法)
|
|
60
47
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"passes-gate.d.ts","sourceRoot":"","sources":["../../src/types/passes-gate.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,WAAW;IACX,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,aAAa;IACb,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B;;;OAGG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,WAAW;IACX,MAAM,EAAE,OAAO,CAAC;IAEhB,WAAW;IACX,OAAO,EAAE,MAAM,CAAC;IAEhB,SAAS;IACT,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,SAAS;IACT,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,eAAe;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,UAAU;IACV,SAAS,CAAC,EAAE,IAAI,CAAC;IAEjB,cAAc;IACd,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IAEpB,WAAW;IACX,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;
|
|
1
|
+
{"version":3,"file":"passes-gate.d.ts","sourceRoot":"","sources":["../../src/types/passes-gate.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,WAAW;IACX,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,aAAa;IACb,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B;;;OAGG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,WAAW;IACX,MAAM,EAAE,OAAO,CAAC;IAEhB,WAAW;IACX,OAAO,EAAE,MAAM,CAAC;IAEhB,SAAS;IACT,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,SAAS;IACT,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,eAAe;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,UAAU;IACV,SAAS,CAAC,EAAE,IAAI,CAAC;IAEjB,cAAc;IACd,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IAEpB,WAAW;IACX,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAMD;;;;GAIG;AACH,MAAM,WAAW,UAAU;IACzB,eAAe;IACf,MAAM,EAAE,OAAO,CAAC;IAEhB,oBAAoB;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,eAAe;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,eAAe;IACf,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IAEpB,eAAe;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,eAAe;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,eAAe;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,kBAAkB;IAClB,EAAE,EAAE,MAAM,CAAC;IAEX,kBAAkB;IAClB,IAAI,EAAE,MAAM,CAAC;IAEb,WAAW;IACX,OAAO,EAAE,MAAM,CAAC;IAEhB,WAAW;IACX,KAAK,EAAE,UAAU,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,eAAe;IACf,OAAO,EAAE,OAAO,CAAC;IAEjB,oBAAoB;IACpB,UAAU,CAAC,EAAE,mBAAmB,EAAE,CAAC;IAEnC,aAAa;IACb,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB"}
|
package/package.json
CHANGED
|
@@ -5,9 +5,13 @@
|
|
|
5
5
|
* 改动 src/index.ts 导出清单时同步更新本文件的 EXPECTED_RUNTIME_EXPORTS,
|
|
6
6
|
* diff 即 PR 评审材料。
|
|
7
7
|
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
8
|
+
* 类型面共三道闸,本文件占前两道:① 运行时(值)导出由 Object.keys 逐字冻结;② 下方「包根
|
|
9
|
+
* 类型面」闸钉的是**删完之后**——编译期 `@ts-expect-error` 钉已删类型 + 源形状钉整条 barrel 链
|
|
10
|
+
* (`PassesGateResult` 曾从 #125「关联类型导出随迁」漏删且无测试可捕获,review A2 据此补钉)。
|
|
11
|
+
* 第 ③ 道是类型面**全量清单**冻结,在 `public-type-surface.test.ts`(ADR-0022 追记 4);它刻意
|
|
12
|
+
* 不 import 包根,因为本文件的编译期钉在类型面被改动时会让整套 suite「failed to run」(实测注入
|
|
13
|
+
* 一条 `export type { DynamicTask }` 得 0 tests),拿不到可执行的清单 diff——定级阶段那句
|
|
14
|
+
* 「这个符号在不在包根导出面」由第 ③ 道回答,不由人的 grep 记忆回答。
|
|
11
15
|
*/
|
|
12
16
|
|
|
13
17
|
import * as fs from 'fs';
|
|
@@ -137,6 +141,10 @@ describe('公共导出清单(ADR-0003)', () => {
|
|
|
137
141
|
* `PassesGateResult`(已删 `setPasses` 的返回形状)正是这样从 #125 的「关联类型导出随迁」
|
|
138
142
|
* 里漏掉、经四级 barrel 存活为公开类型。手法同 #125 的 AC-007:编译期 `@ts-expect-error`
|
|
139
143
|
* 钉住删除 + 源形状钉住整条链,活类型正钉防删多。
|
|
144
|
+
*
|
|
145
|
+
* `DynamicTask` 是同案的第二个漏收项(二次复审 B1):它是 `setPasses(taskId, workDir, task?)`
|
|
146
|
+
* 的入参形状,#125 删掉 setPasses 后只剩私有 `runTest` 那个从不读取的 `_task` 形参在供养它,
|
|
147
|
+
* 而包根同名导出取自 `./types/passes-gate`(见 5959b79),所以它是**公开的**死类型。
|
|
140
148
|
*/
|
|
141
149
|
describe('包根类型面(ADR-0022 关联类型随迁)', () => {
|
|
142
150
|
const BARREL_CHAIN = [
|
|
@@ -146,14 +154,22 @@ describe('包根类型面(ADR-0022 关联类型随迁)', () => {
|
|
|
146
154
|
'../index.ts',
|
|
147
155
|
];
|
|
148
156
|
|
|
149
|
-
|
|
157
|
+
function expectAbsentAcrossBarrelChain(typeName: string): void {
|
|
150
158
|
for (const rel of BARREL_CHAIN) {
|
|
151
159
|
const source = fs.readFileSync(path.join(__dirname, rel), 'utf-8');
|
|
152
|
-
expect({ file: rel, mentions:
|
|
160
|
+
expect({ file: rel, mentions: source.includes(typeName) }).toEqual({
|
|
153
161
|
file: rel,
|
|
154
162
|
mentions: false,
|
|
155
163
|
});
|
|
156
164
|
}
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
it('PassesGateResult 在整条 barrel 链四级都已消失', () => {
|
|
168
|
+
expectAbsentAcrossBarrelChain('PassesGateResult');
|
|
169
|
+
});
|
|
170
|
+
|
|
171
|
+
it('DynamicTask 在整条 barrel 链四级都已消失', () => {
|
|
172
|
+
expectAbsentAcrossBarrelChain('DynamicTask');
|
|
157
173
|
});
|
|
158
174
|
|
|
159
175
|
it('PassesGateResult 不再是包根可导入类型(编译期钉)', () => {
|
|
@@ -162,6 +178,12 @@ describe('包根类型面(ADR-0022 关联类型随迁)', () => {
|
|
|
162
178
|
expect(removedType).toBeUndefined();
|
|
163
179
|
});
|
|
164
180
|
|
|
181
|
+
it('DynamicTask 不再是包根可导入类型(编译期钉)', () => {
|
|
182
|
+
// @ts-expect-error 该类型是已删 setPasses 的 task 入参形状,消费者净删后随 A2 同案收口
|
|
183
|
+
const removedType: import('../index').DynamicTask | undefined = undefined;
|
|
184
|
+
expect(removedType).toBeUndefined();
|
|
185
|
+
});
|
|
186
|
+
|
|
165
187
|
it('活类型仍可经包根导入(防止删多)', () => {
|
|
166
188
|
const liveCheck: import('../index').PassesGateCheckResult = { allowed: true };
|
|
167
189
|
const liveTask: import('../index').TaskTestResult = { passed: true, command: 'npm test' };
|
|
@@ -0,0 +1,359 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 已发布类型面全量冻结闸(ADR-0003 类型面补全 / ADR-0022 追记第 4 条)
|
|
3
|
+
*
|
|
4
|
+
* 存在的理由是一起**定级**错误,不是一起删除错误:本仓 breaking 定级长期挂在「这个符号在
|
|
5
|
+
* 不在包根导出面」这句断言上(ADR-0010:5/31、ADR-0019:10、ADR-0022 皆以它定级),而这句话
|
|
6
|
+
* 在删除动作之前没有任何闸可跑,全靠人 grep 记忆。`PassesGateResult`(评审 A2)与
|
|
7
|
+
* `DynamicTask`(二次复审 B1)已在同一处错两次;B1 那次是复审方直接断言「不在包根」,而
|
|
8
|
+
* 实测 v1.6.0 源 `src/index.ts:106` 与已发布 npm 产物 `dist/index.d.ts:38` 都在导出它。
|
|
9
|
+
* 本闸让「在不在公开面上」变成跑一下就有答案的事实。
|
|
10
|
+
*
|
|
11
|
+
* **公开面 = `package.json` 的 exports 映射,不是只有包根。** 本包发布五个入口点
|
|
12
|
+
* (`.` / `./core` / `./presets` / `./context` / `./gates`),`import type { X } from
|
|
13
|
+
* '@dommaker/harness/core'` 与从包根导入同样是对外承诺。入口清单从 exports **派生**而非
|
|
14
|
+
* 硬编码:新增子路径会立刻落进本闸(未登记冻结清单即红),免得重演「公开面的定义比现实窄」
|
|
15
|
+
* 这个 B1 病因——`DynamicTask` 除包根外同时经 `./core` 可达,只冻包根会留同一个洞。
|
|
16
|
+
*
|
|
17
|
+
* 与 `public-exports.test.ts` 的分工:那边钉的是**删完之后**(已删类型 `@ts-expect-error`
|
|
18
|
+
* 负钉 + 活类型正钉 + 四级 barrel 链残留扫描),且它 `import('../index')`。本闸只做源码文本
|
|
19
|
+
* 分析、**刻意不 import 任何入口**——这是它单独立一个文件的原因:类型面一旦被改动,那边的
|
|
20
|
+
* 编译期钉会让整套 suite「failed to run」(实测注入一条 `export type { DynamicTask }` 得
|
|
21
|
+
* 0 tests),拿不到可执行的清单 diff;本闸在那种改动下必须仍然跑得动、报得出是哪个入口的
|
|
22
|
+
* 哪个符号。
|
|
23
|
+
*
|
|
24
|
+
* 清单来源不是手抄:五个入口的 `src` 解析结果与 tsc 产物(各自 exports 的 types 指向,如
|
|
25
|
+
* `dist/core/index.d.ts`)逐项对撞,152/32/1/12/18 全部逐字一致,产物侧同时零 `export *`。
|
|
26
|
+
* 改动入口清单文件时同步改本文件对应条目,diff 即 PR 评审材料;增删符号属公共面 breaking,
|
|
27
|
+
* 须按 ADR-0003/0022 走发布级别裁决。
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
import * as fs from 'fs';
|
|
31
|
+
import * as path from 'path';
|
|
32
|
+
|
|
33
|
+
const REPO_ROOT = path.join(__dirname, '../..');
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* 入口点合法的导出写法只有三种:
|
|
37
|
+
* ① `export { 值 } from '...'`;② `export type { 类型 } from '...'`;③ 内联值声明
|
|
38
|
+
* `export function|const|let|var`(如 `src/gates/index.ts` 的 5 个 `create*Gate`)——纯值面,
|
|
39
|
+
* 不属类型清单管辖。
|
|
40
|
+
* 清单归类按**说明符自身**而非块形式:`export { getEffectiveGates, type GatesConfig }` 里的
|
|
41
|
+
* `GatesConfig` 按 TS 语义就是类型导出,必须进类型清单(本闸的职责是如实刻画公开面,不是管写法)。
|
|
42
|
+
* 其余行首 `export` 一律记为违禁而非跳过:`export *` / `export type *` 会让按名字扫描静默
|
|
43
|
+
* 漏算;内联 `export interface|type|enum|class|declare` 更必须红——它绕过类型清单,而
|
|
44
|
+
* `enum`/`class` 同时占值面与类型面,按单一分类必错一面。这正是 B1「公开面的定义比现实窄」
|
|
45
|
+
* 那个病因的形态来源。
|
|
46
|
+
*/
|
|
47
|
+
interface EntrySurface {
|
|
48
|
+
types: string[];
|
|
49
|
+
illegal: string[];
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
const INLINE_VALUE_DECL_RE = /^export\s+(?:async\s+)?(?:function|const|let|var)\b/;
|
|
53
|
+
|
|
54
|
+
function parseEntrySurface(source: string): EntrySurface {
|
|
55
|
+
const stmtRe = /^export (type )?\{([^}]*)\}[^;]*;/gm;
|
|
56
|
+
const types: string[] = [];
|
|
57
|
+
const illegal: string[] = [];
|
|
58
|
+
const starts = new Set<number>();
|
|
59
|
+
|
|
60
|
+
let match: RegExpExecArray | null = stmtRe.exec(source);
|
|
61
|
+
while (match !== null) {
|
|
62
|
+
starts.add(match.index);
|
|
63
|
+
const isTypeBlock = Boolean(match[1]);
|
|
64
|
+
for (const raw of match[2].split(',')) {
|
|
65
|
+
const spec = raw.trim();
|
|
66
|
+
if (!spec) continue;
|
|
67
|
+
// `A as B` 对外名字是 B;`type A as B` 对外名字是 B 且属类型面
|
|
68
|
+
const isTypeSpec = /^(type|typeof)\s/.test(spec);
|
|
69
|
+
if (isTypeBlock || isTypeSpec) {
|
|
70
|
+
types.push(spec.replace(/^(type|typeof)\s+/, '').split(/\s+as\s+/).pop()!.trim());
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
match = stmtRe.exec(source);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
let offset = 0;
|
|
77
|
+
for (const line of source.split('\n')) {
|
|
78
|
+
if (/^export\b/.test(line) && !starts.has(offset) && !INLINE_VALUE_DECL_RE.test(line)) {
|
|
79
|
+
illegal.push(line.trim());
|
|
80
|
+
}
|
|
81
|
+
offset += line.length + 1;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
return { types, illegal };
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/** exports 子路径 → 承载它的显式清单源文件。形态对不上返回 null,由映射闸 fail-loud。 */
|
|
88
|
+
function sourceFileForSubpath(subpath: string): string | null {
|
|
89
|
+
if (subpath === '.') return 'src/index.ts';
|
|
90
|
+
const rest = subpath.replace(/^\.\//, '');
|
|
91
|
+
return /^[a-z][a-z0-9-]*$/.test(rest) ? `src/${rest}/index.ts` : null;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
const EXPORTS_MAP = JSON.parse(
|
|
95
|
+
fs.readFileSync(path.join(REPO_ROOT, 'package.json'), 'utf-8'),
|
|
96
|
+
).exports as Record<string, { types?: string }>;
|
|
97
|
+
|
|
98
|
+
const ENTRY_SUBPATHS: string[] = Object.keys(EXPORTS_MAP);
|
|
99
|
+
|
|
100
|
+
/** 每个已发布入口的类型面全量清单。增删任一项即公共面 breaking,见文件头。 */
|
|
101
|
+
const PUBLISHED_ENTRY_TYPES: Record<string, string[]> = {
|
|
102
|
+
'.': [
|
|
103
|
+
'AcceptanceCriteria',
|
|
104
|
+
'AcceptanceGateContext',
|
|
105
|
+
'AgentConfig',
|
|
106
|
+
'AgentEvent',
|
|
107
|
+
'AgentState',
|
|
108
|
+
'AgentStatus',
|
|
109
|
+
'ArtifactIntegrityResult',
|
|
110
|
+
'AuditAction',
|
|
111
|
+
'AuditIssue',
|
|
112
|
+
'AuditOptions',
|
|
113
|
+
'AuditReport',
|
|
114
|
+
'AuditRuleName',
|
|
115
|
+
'BatchSpecValidationResult',
|
|
116
|
+
'CSOIssue',
|
|
117
|
+
'CSOValidationResult',
|
|
118
|
+
'CapabilitiesConfig',
|
|
119
|
+
'ChangelogConfig',
|
|
120
|
+
'ChangelogVersionCheck',
|
|
121
|
+
'CheckCacheConfig',
|
|
122
|
+
'CheckConfig',
|
|
123
|
+
'CheckConstraintsOptions',
|
|
124
|
+
'CheckResult',
|
|
125
|
+
'CheckSamplingConfig',
|
|
126
|
+
'CheckType',
|
|
127
|
+
'CheckerVerdict',
|
|
128
|
+
'Checkpoint',
|
|
129
|
+
'CheckpointCheck',
|
|
130
|
+
'CheckpointContext',
|
|
131
|
+
'CheckpointResult',
|
|
132
|
+
'ClassificationResult',
|
|
133
|
+
'CodeStructure',
|
|
134
|
+
'CommandBlacklistRule',
|
|
135
|
+
'CommandGateConfig',
|
|
136
|
+
'CommitFileClassification',
|
|
137
|
+
'CommitInput',
|
|
138
|
+
'CommitVerdict',
|
|
139
|
+
'CompactionConfig',
|
|
140
|
+
'CompactionLevel',
|
|
141
|
+
'CompletionCheckersConfig',
|
|
142
|
+
'ConstCountActual',
|
|
143
|
+
'Constraint',
|
|
144
|
+
'ConstraintCheckResult',
|
|
145
|
+
'ConstraintContext',
|
|
146
|
+
'ConstraintId',
|
|
147
|
+
'ConstraintKind',
|
|
148
|
+
'ConstraintLevel',
|
|
149
|
+
'ConstraintResult',
|
|
150
|
+
'ConstraintTrigger',
|
|
151
|
+
'ConsumptionEvent',
|
|
152
|
+
'ConsumptionMode',
|
|
153
|
+
'ContextAverages',
|
|
154
|
+
'ContextDocsCheck',
|
|
155
|
+
'ContextFilesConfig',
|
|
156
|
+
'ContextSource',
|
|
157
|
+
'ContextSourceType',
|
|
158
|
+
'ContextUsageSnapshot',
|
|
159
|
+
'ContractGateConfig',
|
|
160
|
+
'ContractPresenceContext',
|
|
161
|
+
'ContractPresenceResult',
|
|
162
|
+
'CustomConstraintDefinition',
|
|
163
|
+
'DecayConfig',
|
|
164
|
+
'DecisionRecord',
|
|
165
|
+
'DeclarationInfo',
|
|
166
|
+
'DirCountActual',
|
|
167
|
+
'DocDirCheck',
|
|
168
|
+
'DocFreshnessCheck',
|
|
169
|
+
'DocFreshnessConfig',
|
|
170
|
+
'DocRegexCountCheck',
|
|
171
|
+
'DocsSyncConfig',
|
|
172
|
+
'EffectiveConfigLint',
|
|
173
|
+
'ErrorClassificationRule',
|
|
174
|
+
'ErrorClassifierConfig',
|
|
175
|
+
'EventHandler',
|
|
176
|
+
'ExecutionResult',
|
|
177
|
+
'ExecutionTrace',
|
|
178
|
+
'FailureRecord',
|
|
179
|
+
'FailureRecorderConfig',
|
|
180
|
+
'FallbackStrategy',
|
|
181
|
+
'Gate',
|
|
182
|
+
'GateContext',
|
|
183
|
+
'GateDecision',
|
|
184
|
+
'GateDecisionStatus',
|
|
185
|
+
'GateDefinition',
|
|
186
|
+
'GateResult',
|
|
187
|
+
'GateRunResult',
|
|
188
|
+
'GatesConfig',
|
|
189
|
+
'GovernanceConfig',
|
|
190
|
+
'GrepCountActual',
|
|
191
|
+
'HarnessBootstrap',
|
|
192
|
+
'HookConfig',
|
|
193
|
+
'HookDefinition',
|
|
194
|
+
'HookErrorStrategy',
|
|
195
|
+
'HookExecutionRecord',
|
|
196
|
+
'HookPhase',
|
|
197
|
+
'HookResult',
|
|
198
|
+
'ImportInfo',
|
|
199
|
+
'IndexEntry',
|
|
200
|
+
'IngestOptions',
|
|
201
|
+
'InjectionConfig',
|
|
202
|
+
'InjectionResult',
|
|
203
|
+
'IronLawContext',
|
|
204
|
+
'KnowledgeEntry',
|
|
205
|
+
'KnowledgeOrigin',
|
|
206
|
+
'KnowledgeReference',
|
|
207
|
+
'KnowledgeStore',
|
|
208
|
+
'KnowledgeSubsystem',
|
|
209
|
+
'LintIssue',
|
|
210
|
+
'LintIssueType',
|
|
211
|
+
'MaturityChange',
|
|
212
|
+
'MaturityLevel',
|
|
213
|
+
'MergedConstraintsConfig',
|
|
214
|
+
'PassesGateCheckResult',
|
|
215
|
+
'PassesGateConfig',
|
|
216
|
+
'PassesGateViolation',
|
|
217
|
+
'PerformanceGateConfig',
|
|
218
|
+
'PerformanceThresholds',
|
|
219
|
+
'PhaseFormatResult',
|
|
220
|
+
'PipelineResult',
|
|
221
|
+
'ProjectConfig',
|
|
222
|
+
'QueryBudget',
|
|
223
|
+
'QueryFilter',
|
|
224
|
+
'QueryResult',
|
|
225
|
+
'ReferenceRecord',
|
|
226
|
+
'RenderConstraintsByTriggerOptions',
|
|
227
|
+
'ReviewGateConfig',
|
|
228
|
+
'SchemaLoader',
|
|
229
|
+
'SecurityGateConfig',
|
|
230
|
+
'SessionCheckpoint',
|
|
231
|
+
'SessionEvent',
|
|
232
|
+
'SessionEventType',
|
|
233
|
+
'SessionHandle',
|
|
234
|
+
'SessionMessage',
|
|
235
|
+
'SourceRef',
|
|
236
|
+
'SpecAcceptanceGateConfig',
|
|
237
|
+
'SpecSchemaDefinition',
|
|
238
|
+
'SpecType',
|
|
239
|
+
'SpecValidationError',
|
|
240
|
+
'SpecValidationResult',
|
|
241
|
+
'SpecValidatorConfig',
|
|
242
|
+
'StepMeta',
|
|
243
|
+
'StorageLayer',
|
|
244
|
+
'TaskTestResult',
|
|
245
|
+
'TddChainResult',
|
|
246
|
+
'TestResult',
|
|
247
|
+
'TestingGovernanceConfig',
|
|
248
|
+
'ToolMeta',
|
|
249
|
+
'TraceAnalyzerConfig',
|
|
250
|
+
'TraceAnomaly',
|
|
251
|
+
'TraceCollectorConfig',
|
|
252
|
+
'TraceFilter',
|
|
253
|
+
'TraceSummary',
|
|
254
|
+
'WorkflowMeta',
|
|
255
|
+
],
|
|
256
|
+
'./core': [
|
|
257
|
+
'BatchSpecValidationResult',
|
|
258
|
+
'CSOIssue',
|
|
259
|
+
'CSOValidationResult',
|
|
260
|
+
'CapabilitiesMode',
|
|
261
|
+
'CheckCacheConfig',
|
|
262
|
+
'CheckConfig',
|
|
263
|
+
'CheckConstraintsOptions',
|
|
264
|
+
'CheckResult',
|
|
265
|
+
'CheckSamplingConfig',
|
|
266
|
+
'CheckType',
|
|
267
|
+
'Checkpoint',
|
|
268
|
+
'CheckpointCheck',
|
|
269
|
+
'CheckpointContext',
|
|
270
|
+
'CheckpointResult',
|
|
271
|
+
'Constraint',
|
|
272
|
+
'ConstraintCheckResult',
|
|
273
|
+
'ConstraintContext',
|
|
274
|
+
'ConstraintId',
|
|
275
|
+
'ConstraintKind',
|
|
276
|
+
'ConstraintLevel',
|
|
277
|
+
'ConstraintResult',
|
|
278
|
+
'ConstraintTrigger',
|
|
279
|
+
'ContextFilesResolution',
|
|
280
|
+
'EffectiveConfigLint',
|
|
281
|
+
'IronLawContext',
|
|
282
|
+
'PassesGateConfig',
|
|
283
|
+
'RenderConstraintsByTriggerOptions',
|
|
284
|
+
'SpecSchemaDefinition',
|
|
285
|
+
'SpecType',
|
|
286
|
+
'SpecValidationResult',
|
|
287
|
+
'SpecValidatorConfig',
|
|
288
|
+
'TaskTestResult',
|
|
289
|
+
],
|
|
290
|
+
'./presets': [
|
|
291
|
+
'PresetConfig',
|
|
292
|
+
],
|
|
293
|
+
'./context': [
|
|
294
|
+
'CompactionConfig',
|
|
295
|
+
'CompactionLevel',
|
|
296
|
+
'ContextSource',
|
|
297
|
+
'ContextSourceType',
|
|
298
|
+
'ContextUsageSnapshot',
|
|
299
|
+
'InjectionConfig',
|
|
300
|
+
'InjectionResult',
|
|
301
|
+
'SessionCheckpoint',
|
|
302
|
+
'SessionEvent',
|
|
303
|
+
'SessionEventType',
|
|
304
|
+
'SessionHandle',
|
|
305
|
+
'SessionMessage',
|
|
306
|
+
],
|
|
307
|
+
'./gates': [
|
|
308
|
+
'AcceptanceCriteria',
|
|
309
|
+
'AcceptanceGateContext',
|
|
310
|
+
'CommandBlacklistRule',
|
|
311
|
+
'CommandGateConfig',
|
|
312
|
+
'ContractGateConfig',
|
|
313
|
+
'Gate',
|
|
314
|
+
'GateContext',
|
|
315
|
+
'GateDecision',
|
|
316
|
+
'GateDecisionStatus',
|
|
317
|
+
'GateDefinition',
|
|
318
|
+
'GateResult',
|
|
319
|
+
'GateRunResult',
|
|
320
|
+
'GatesConfig',
|
|
321
|
+
'PerformanceGateConfig',
|
|
322
|
+
'PerformanceThresholds',
|
|
323
|
+
'ReviewGateConfig',
|
|
324
|
+
'SecurityGateConfig',
|
|
325
|
+
'SpecAcceptanceGateConfig',
|
|
326
|
+
],
|
|
327
|
+
};
|
|
328
|
+
|
|
329
|
+
describe('已发布类型面全量冻结(ADR-0022 追记 4)', () => {
|
|
330
|
+
it('exports 的每个子路径都映射到存在的显式清单源文件(新增子路径不得绕过本闸)', () => {
|
|
331
|
+
const unmapped = ENTRY_SUBPATHS.filter((sub) => {
|
|
332
|
+
const rel = sourceFileForSubpath(sub);
|
|
333
|
+
return rel === null || !fs.existsSync(path.join(REPO_ROOT, rel));
|
|
334
|
+
});
|
|
335
|
+
expect(unmapped).toEqual([]);
|
|
336
|
+
});
|
|
337
|
+
|
|
338
|
+
it('冻结清单覆盖全部已发布子路径(新增入口须先登记清单)', () => {
|
|
339
|
+
expect(Object.keys(PUBLISHED_ENTRY_TYPES).sort()).toEqual([...ENTRY_SUBPATHS].sort());
|
|
340
|
+
});
|
|
341
|
+
|
|
342
|
+
for (const sub of ENTRY_SUBPATHS) {
|
|
343
|
+
const rel = sourceFileForSubpath(sub);
|
|
344
|
+
if (rel === null) continue; // 映射闸已负责红,此处不重复报
|
|
345
|
+
const surface = parseEntrySurface(fs.readFileSync(path.join(REPO_ROOT, rel), 'utf-8'));
|
|
346
|
+
|
|
347
|
+
describe(`入口点 ${sub}(${rel})`, () => {
|
|
348
|
+
it('只用白名单写法导出,无被漏算的导出面', () => {
|
|
349
|
+
expect(surface.illegal).toEqual([]);
|
|
350
|
+
});
|
|
351
|
+
|
|
352
|
+
it('类型清单与冻结集逐字一致(增删即 breaking,需发布级别裁决)', () => {
|
|
353
|
+
// 解析塌掉不得退化成空集合假绿
|
|
354
|
+
expect(surface.types.length).toBeGreaterThan(0);
|
|
355
|
+
expect([...surface.types].sort()).toEqual([...PUBLISHED_ENTRY_TYPES[sub]].sort());
|
|
356
|
+
});
|
|
357
|
+
});
|
|
358
|
+
}
|
|
359
|
+
});
|
|
@@ -13,10 +13,53 @@
|
|
|
13
13
|
|
|
14
14
|
import * as fs from 'fs';
|
|
15
15
|
import * as path from 'path';
|
|
16
|
-
import { COMMAND_DEFINITIONS } from '../definitions';
|
|
16
|
+
import { COMMAND_DEFINITIONS, type CommandDefinition } from '../definitions';
|
|
17
|
+
import { GATE_DEFINITIONS } from '../../../gates/definitions';
|
|
17
18
|
import type { PassesGateConfig } from '../../../types/passes-gate';
|
|
18
19
|
import type { PassesGateOptions } from '../passes-gate';
|
|
19
20
|
|
|
21
|
+
/**
|
|
22
|
+
* 已删旗帜的精确令牌(二次复审 S2 收口)
|
|
23
|
+
*
|
|
24
|
+
* `--max-retries` 的旗帜名 + 它在 commander 里的选项键名(`optionRoutes.flag` 按键路由,
|
|
25
|
+
* 是同一个已删选项的第二个落点)。**只钉这两个令牌**,不钉「retry 这个词」。
|
|
26
|
+
*/
|
|
27
|
+
const DELETED_FLAG_TOKENS = ['--max-retries', 'maxRetries'];
|
|
28
|
+
|
|
29
|
+
interface FlagSite {
|
|
30
|
+
/** 命令位(含父命令前缀,如 'constraints report') */
|
|
31
|
+
slot: string;
|
|
32
|
+
/** 旗帜令牌('-t' / '--test-command')或选项路由键('list') */
|
|
33
|
+
token: string;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/** 递归收集命令位上的旗帜令牌与选项路由键(走法同 registry.test.ts 的 collectRefs) */
|
|
37
|
+
function collectFlagSites(defs: CommandDefinition[], prefix = ''): FlagSite[] {
|
|
38
|
+
return defs.flatMap((def) => {
|
|
39
|
+
const slot = [prefix, def.command].filter(Boolean).join(' ');
|
|
40
|
+
const own: FlagSite[] = [
|
|
41
|
+
...def.options.flatMap((option) =>
|
|
42
|
+
option.flags
|
|
43
|
+
.split(/[\s,]+/)
|
|
44
|
+
.filter((token) => token.startsWith('-'))
|
|
45
|
+
.map((token) => ({ slot, token })),
|
|
46
|
+
),
|
|
47
|
+
...(def.optionRoutes || []).map((route) => ({ slot, token: route.flag })),
|
|
48
|
+
];
|
|
49
|
+
return [...own, ...collectFlagSites(def.children || [], slot)];
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
function sitesHoldingDeletedFlag(sites: FlagSite[]): FlagSite[] {
|
|
54
|
+
return sites.filter((site) => DELETED_FLAG_TOKENS.includes(site.token));
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/** 全部命令位:通用命令表 + 门禁命令表(GATE_DEFINITIONS.cli 由 bin 同一引擎生成命令块) */
|
|
58
|
+
const ALL_CLI_SITES = [
|
|
59
|
+
...collectFlagSites(COMMAND_DEFINITIONS),
|
|
60
|
+
...collectFlagSites(GATE_DEFINITIONS.map((gate) => gate.cli)),
|
|
61
|
+
];
|
|
62
|
+
|
|
20
63
|
const passesGateCommand = COMMAND_DEFINITIONS.find(d => d.command === 'passes-gate');
|
|
21
64
|
const cliSource = fs.readFileSync(path.join(__dirname, '..', 'passes-gate.ts'), 'utf-8');
|
|
22
65
|
const validatorSource = fs.readFileSync(
|
|
@@ -39,10 +82,55 @@ describe('passes-gate 重试选项已删除(A1)', () => {
|
|
|
39
82
|
]);
|
|
40
83
|
});
|
|
41
84
|
|
|
85
|
+
it('采集面确实覆盖三类命令位(前提,防空扫致闸失效)', () => {
|
|
86
|
+
const rendered = ALL_CLI_SITES.map(s => `${s.slot} ${s.token}`);
|
|
87
|
+
expect(rendered).toContain('passes-gate --coverage-threshold'); // 通用表叶子命令的旗帜
|
|
88
|
+
expect(rendered).toContain('constraints report --json'); // children 递归(嵌套命令位)
|
|
89
|
+
expect(rendered).toContain('acceptance --task-id'); // 门禁表命令位(GATE_DEFINITIONS.cli)
|
|
90
|
+
expect(rendered).toContain('check list'); // 选项路由键(commander camelCase 键位)
|
|
91
|
+
});
|
|
92
|
+
|
|
93
|
+
it('已删的 --max-retries 不在任何命令位复活(逐命令逐选项精确冻结)', () => {
|
|
94
|
+
expect(sitesHoldingDeletedFlag(ALL_CLI_SITES)).toEqual([]);
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* 旧闸(A5 引入的全表禁词版)——原样保留,与上面的精确冻结并存。
|
|
99
|
+
* 它宽于「冻结已删选项」这一意图:将来任何命令新增合法的 retries 类选项都会被拦。
|
|
100
|
+
* 收窄(即删掉这条)是二次复审 S2 的应修项,但删除断言属 `no_test_simplification`
|
|
101
|
+
* 铁律拦截范围、而该闸无批准通道,故本轮只加不改,退役动作交人类裁决。
|
|
102
|
+
*/
|
|
42
103
|
it('命令定义表任意层级都不含 retry 旗帜(防换个命令位复活)', () => {
|
|
43
104
|
expect(JSON.stringify(COMMAND_DEFINITIONS)).not.toMatch(/retry/i);
|
|
44
105
|
});
|
|
45
106
|
|
|
107
|
+
/**
|
|
108
|
+
* 反向验闸(二次复审 S2):把已删旗帜分别挂到「另一条通用命令 / 门禁命令 / 选项路由键」
|
|
109
|
+
* 三处,断言扫描逐字报出——证明换掉的不是空洞,也证明覆盖面真的等于名义上的「任何命令位」。
|
|
110
|
+
* 将来若要在别的命令位做**有真实现**的重试,那是新设计:显式评审后把令牌从
|
|
111
|
+
* DELETED_FLAG_TOKENS 解除(同 ADR-0022 推翻 AC-007 的做法),不靠闸静默放行。
|
|
112
|
+
*/
|
|
113
|
+
it('闸非空洞:复活在别的命令位仍会红(通用命令 / 门禁命令 / 选项路由键)', () => {
|
|
114
|
+
const probe = { flags: '--max-retries <n>', description: '复活探针' };
|
|
115
|
+
const otherCommand = COMMAND_DEFINITIONS.find(d => d.command === 'check')!;
|
|
116
|
+
const gateSlot = GATE_DEFINITIONS.find(g => g.id === 'acceptance')!;
|
|
117
|
+
|
|
118
|
+
const resurrected = [
|
|
119
|
+
...collectFlagSites([{ ...otherCommand, options: [...otherCommand.options, probe] }]),
|
|
120
|
+
...collectFlagSites([{ ...gateSlot.cli, options: [...gateSlot.cli.options, probe] }]),
|
|
121
|
+
...collectFlagSites([{
|
|
122
|
+
...otherCommand,
|
|
123
|
+
optionRoutes: [...(otherCommand.optionRoutes || []), { ...otherCommand.optionRoutes![0], flag: 'maxRetries' }],
|
|
124
|
+
}]),
|
|
125
|
+
];
|
|
126
|
+
|
|
127
|
+
expect(sitesHoldingDeletedFlag(resurrected).map(s => `${s.slot} ${s.token}`)).toEqual([
|
|
128
|
+
'check --max-retries',
|
|
129
|
+
'acceptance --max-retries',
|
|
130
|
+
'check maxRetries',
|
|
131
|
+
]);
|
|
132
|
+
});
|
|
133
|
+
|
|
46
134
|
it('CLI 装配链与 validator 默认配置都不再写重试字段', () => {
|
|
47
135
|
expect(cliSource).not.toMatch(/maxRetries|retryDelay/);
|
|
48
136
|
expect(validatorSource).not.toMatch(/maxRetries|retryDelay/);
|
package/src/core/CONTEXT.md
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
- `constraints/context-builder.ts` — 只装配不取证:`buildConstraintContext(options.evidence?)` 与 `detectTrigger(options.evidence?)` 经 GitEvidence 取 git 事实(不传 = 自建真 adapter),本模块无 child_process import;其余证据标志(traces/文档标记)仍为本地探测
|
|
10
10
|
- `effective-constraints.ts` — `getEffectiveConstraints(projectRoot, {preset?})`:全仓唯一生效集来源(内置 → preset → config.yml 禁用(内置与 custom 同效)→ custom 追加(禁用/已退役的不追加)→ scenes 过滤);`getMergedConstraintsConfig(projectRoot, {preset?})`:同链路的完整 MergedConstraintsConfig 形状(含 disabled/custom/unknownIds),内置工单 23 优先级规则(--preset 仅在无项目自定义配置时生效),check 命令经此入口;`lintEffectiveConfig` 配置诊断
|
|
11
11
|
- `effective-set.ts` — `filterEnabledEntries(knownIds, entries, {onUnknownId})`:约束侧(collect)与门禁侧(throw)共用的 config 条目筛选器
|
|
12
|
-
- `validators/` — checkpoints、passes-gate、CSO 验证器;`test-output.ts` —「测试产物解读」唯一实现:`extractFailures` 提取函数 + `judgeTestRun` 判定入口(退出码为主 + 行首锚定的文本失败信号交叉否决;文本救不回非零退出,`allowPartialPass` 只作用于文本否决那一维),passes-gate 与 `gates/acceptance` 的结论一律从它取、各自体内不写判定 `if`(解析收口 ADR-0012,判定依据 ADR-0014);**不读覆盖率**——harness 核心判定对覆盖率不取数不执法,判覆盖率的两处(CLI `passes-gate --coverage`、`gates/performance`)各自读 json-summary,`extractCoverage` 与 `TaskTestResult.coverage` 已随 ADR-0015 删除;`PassesGate.runTests(workDir)` 的执行与证据落盘根是**必传形参**,本层不再取 cwd(harness#95,约定正本见 `src/cli/commands/CONTEXT.md`);`detectTestCommand` 是测试命令探测唯一正本(模块级导出:test:ci → test 排 echo 占位 → test:e2e → test:coverage → Python 标记 pyproject.toml/pytest.ini → go.mod,探不到返回 undefined,兜底归调用方——CLI 映射 skip、PassesGate 内部 fail-closed,不再兜底 'npm test';CLI 本地版已删,架构评审 A2);PassesGate 扩展注册表(registerExtension/unregisterExtension/getExtensionNames/runAllTests/checkAllPasses + PassesGateExtension/ExtensionTestResult 两类型与包根导出)已整段删除——零 adapter 假想 seam 且扩展结果本就不参与 allowed 判定,需要扩展测试类型时按 ADR-0014 判例在 `judgeTestRun` 层加,不恢复旧 seam(harness#104,架构评审 B1);PassesGate 公开面 = `check()` + `runTests()` 两个真实消费点,`setPasses`/`getTestResult`/`checkTestFileChanges` 三方法与死数据 `PROTECTED_TEST_PATTERNS`、私有 `testResults` 缓存已随 ADR-0022(双仓零消费者)删除,历史 AC-007「保留 setPasses
|
|
12
|
+
- `validators/` — checkpoints、passes-gate、CSO 验证器;`test-output.ts` —「测试产物解读」唯一实现:`extractFailures` 提取函数 + `judgeTestRun` 判定入口(退出码为主 + 行首锚定的文本失败信号交叉否决;文本救不回非零退出,`allowPartialPass` 只作用于文本否决那一维),passes-gate 与 `gates/acceptance` 的结论一律从它取、各自体内不写判定 `if`(解析收口 ADR-0012,判定依据 ADR-0014);**不读覆盖率**——harness 核心判定对覆盖率不取数不执法,判覆盖率的两处(CLI `passes-gate --coverage`、`gates/performance`)各自读 json-summary,`extractCoverage` 与 `TaskTestResult.coverage` 已随 ADR-0015 删除;`PassesGate.runTests(workDir)` 的执行与证据落盘根是**必传形参**,本层不再取 cwd(harness#95,约定正本见 `src/cli/commands/CONTEXT.md`);`detectTestCommand` 是测试命令探测唯一正本(模块级导出:test:ci → test 排 echo 占位 → test:e2e → test:coverage → Python 标记 pyproject.toml/pytest.ini → go.mod,探不到返回 undefined,兜底归调用方——CLI 映射 skip、PassesGate 内部 fail-closed,不再兜底 'npm test';CLI 本地版已删,架构评审 A2);PassesGate 扩展注册表(registerExtension/unregisterExtension/getExtensionNames/runAllTests/checkAllPasses + PassesGateExtension/ExtensionTestResult 两类型与包根导出)已整段删除——零 adapter 假想 seam 且扩展结果本就不参与 allowed 判定,需要扩展测试类型时按 ADR-0014 判例在 `judgeTestRun` 层加,不恢复旧 seam(harness#104,架构评审 B1);PassesGate 公开面 = `check()` + `runTests()` 两个真实消费点,`setPasses`/`getTestResult`/`checkTestFileChanges` 三方法与死数据 `PROTECTED_TEST_PATTERNS`、私有 `testResults` 缓存已随 ADR-0022(双仓零消费者)删除,历史 AC-007「保留 setPasses 向后兼容」同案推翻;`runTest` 的 `_task` 形参与其类型 `DynamicTask` 是同批漏收的第三处死面(二次复审 B1)——setPasses 删除后只剩这个从不读取的私有形参在供养它,而包根 `DynamicTask` 取自 `./types/passes-gate`,故它是**公开的**死类型;随 A1/A2 同判据删除,`runTest` 签名收为 `(workDir, command?)`,类型面钉子同 `PassesGateResult` 手法(`src/__tests__/public-exports.test.ts`);包内模块,不进 `src/index.ts` 导出面
|
|
13
13
|
- `spec/validator` — SpecValidator
|
|
14
14
|
- `project-config-loader` — 项目配置加载 + 约束合并(mergeConstraints 内含 preset 裁剪:presets/ 纯数据 + 未知名回落 standard,禁用到未知 id 经 effective-set 共享筛选器 collect 模式);`getGovernanceConfig` 是全仓唯一允许手写钻取 `config.governance` 的点(工单 84),消费方一律经它或经 `resolveContextFiles`(三态:unconfigured / enabled-empty / enabled,dirs 元素类型在此收口)取数据,不得再自己 cast `Record<string, unknown>`;checker 对前两态一律 skip,自动探测回落只属于 init/扫描类工具流调用方
|
|
15
15
|
|
package/src/core/index.ts
CHANGED
|
@@ -14,7 +14,6 @@ import * as path from 'path';
|
|
|
14
14
|
import type {
|
|
15
15
|
PassesGateConfig,
|
|
16
16
|
TaskTestResult,
|
|
17
|
-
DynamicTask,
|
|
18
17
|
TestResult,
|
|
19
18
|
PassesGateCheckResult,
|
|
20
19
|
PassesGateViolation,
|
|
@@ -183,7 +182,7 @@ export class PassesGate {
|
|
|
183
182
|
};
|
|
184
183
|
}
|
|
185
184
|
|
|
186
|
-
const result = await this.runTest(workDir,
|
|
185
|
+
const result = await this.runTest(workDir, testCommand);
|
|
187
186
|
const duration = Date.now() - startTime;
|
|
188
187
|
|
|
189
188
|
// 解析测试数量
|
|
@@ -218,7 +217,7 @@ export class PassesGate {
|
|
|
218
217
|
/**
|
|
219
218
|
* 运行测试
|
|
220
219
|
*/
|
|
221
|
-
private async runTest(workDir: string,
|
|
220
|
+
private async runTest(workDir: string, command?: string): Promise<TaskTestResult> {
|
|
222
221
|
const testCommand = command || this.config.testCommand || await detectTestCommand(workDir);
|
|
223
222
|
const timestamp = new Date();
|
|
224
223
|
|
package/src/index.ts
CHANGED
package/src/types/passes-gate.ts
CHANGED
|
@@ -55,23 +55,6 @@ export interface TaskTestResult {
|
|
|
55
55
|
evidence?: string;
|
|
56
56
|
}
|
|
57
57
|
|
|
58
|
-
/**
|
|
59
|
-
* 动态任务(用于 passes-gate)
|
|
60
|
-
*/
|
|
61
|
-
export interface DynamicTask {
|
|
62
|
-
/** 任务 ID */
|
|
63
|
-
id: string;
|
|
64
|
-
|
|
65
|
-
/** 任务名称 */
|
|
66
|
-
name?: string;
|
|
67
|
-
|
|
68
|
-
/** 是否通过 */
|
|
69
|
-
passes?: boolean;
|
|
70
|
-
|
|
71
|
-
/** 测试结果 */
|
|
72
|
-
testResult?: TaskTestResult;
|
|
73
|
-
}
|
|
74
|
-
|
|
75
58
|
// ========================================
|
|
76
59
|
// AS-006: 纯约束验证接口
|
|
77
60
|
// ========================================
|