# 预注册（口径二）—— **去 `baseUrl`** 后重取 tsc 轴，为的是够到 `6.0.3` / `7.0.2`（`lab:B-tsc-c2`）

🔴 **本文件先于任何口径二取数代码写成并提交。取数开始后 ⛔ 一字不改。**
⛔ **口径一的预注册 [`2026-09-03-tsc-axis-preregistration.md`](2026-09-03-tsc-axis-preregistration.md) 与其量具
`run-tsc-axis.mjs`、读数 `runs/wc-types-jsx-matrix/tsc-axis.json` 一个字节都不改** —— 它们已发表（`3b89544`）。

---

## 0. 为什么要有口径二（起因是口径一的实测，⛔ 不是设计时想到的）

口径一逐字判 **`不可判读（地板不达）`**：F3b 要求每条 tsc 线至少 1 格在面内，
而 **`6.0.3` / `7.0.2` 各 0 格**。**MH2 把原因钉在装置上，⛔ 不在被测对象：**

| 线 | MH2（纯 React 基线，⛔ 不 import DS）的诊断 |
|---|---|
| `6.0.3` | `TS5101: Option 'baseUrl' is deprecated and will stop functioning in TypeScript 7.0.` |
| `7.0.2` | `TS5102: Option 'baseUrl' has been removed. Please remove it from your configuration.` |

⇒ 挡路的是本量具 tsconfig 里那个**从 L3 口径继承下来的 `baseUrl`**。
🔴 **没有 MH2，这一轮会报出「双写在 TS 6/7 上全炸」这条假缺陷**（`AGENTS §3.9`）。

⚠️ **⛔ 不许把口径一的「不可判读」改判成「过」。** 口径一就是不可判读，本文件是**另一个面**。

---

## 1. 口径二 = 口径一 **减掉 `baseUrl` 这一项**，其余逐字不动

| 项 | 口径一 | 口径二 |
|---|---|---|
| `moduleResolution` | `Bundler` | **同** |
| `jsx` | `react-jsx` | **同** |
| `target` / `module` | `ES2020` / `ESNext` | **同** |
| `strict` / `noEmit` / `skipLibCheck` / `types` | `true` / `true` / `true` / `[]` | **同** |
| `paths` 三条映射（`react` · `react/*` · 被测入口）| 值是**绝对路径** | **同**（值仍是绝对路径）|
| 🔴 `baseUrl` | `<envDir>` | 🔴 **删掉** |
| fixtures 四份 | 原样 | **同，⛔ 不改** |

🔴 **口径名**：`真载体口径 · tsc 轴 · 无 baseUrl`。
⚠️ 它与口径一、与 L3 **是三个口径名** —— 引用任何一个数都必须带口径名（`AGENTS §2.4`）。

**面 = 12 条 tsc 线 × `@types/react` 5 版本 = 60 格**（线与版本集与口径一逐字相同，⛔ 不换）。

---

## 2. 🔴 BR1 —— 桥接控制（既是地板，也是这两个口径能不能并排的**唯一**凭据）

> **在 `5.0.4` … `5.9.3` 这 10 条线上（= 口径一面内的那 50 格），口径二的逐格读数必须与
> 口径一已发表读数 `runs/wc-types-jsx-matrix/tsc-axis.json` 逐格、逐字段相同。**

逐字段 = `inFace` · `positive.pass` · `negative.pass` · `blocks.M.works` · `blocks.G.works`。

- **BR1 绿** ⇒ 去掉 `baseUrl` 对读数 **no-op** ⇒ 口径二在 `6.0.3` / `7.0.2` 上的新读数
  **可以**与口径一、与 L3 并排引用。
- 🔴 **BR1 红** ⇒ 去 `baseUrl` **改变了读数** ⇒ 两个口径 ⛔ **不可并排**，
  `6/7` 的读数 ⛔ **不得**与 L3 / 口径一 并排引用，只能作为口径二内部的孤立读数。

⚠️ 立这条的理由（`AGENTS §3.14` 同族）：**改了装置就必须证明读数 no-op（逐字段 diff = 0）**，
⛔ 不许因为「`paths` 写的是绝对路径、理论上不依赖 `baseUrl`」就跳过 ——
**那是构造推理，⛔ 不是读数**（`AGENTS §20` 推论一同族）。

⚠️ **BR1 能失败**：若 `paths` 在无 `baseUrl` 时改按 tsconfig 所在目录解析而与绝对路径产生差异，
10 条线上会当场出现 `inFace` 或 `works` 的翻转。

---

## 3. 地板 F · 承诺 C · 控制（除 BR1 外与口径一逐字相同）

### 3.1 地板

| # | 什么 | 线 |
|:-:|---|---|
| **F1** | 12 条线全部真装成功，且回读 `version` 与钉死值逐字相同 | 12/12 |
| **F2** | 被测 d.ts `sha256` 取数前 / 每格 / 取数后三次回读均 = `3e4d80cd…34680` | 全等 |
| **F3a** | 面内格数（MH2 ∧ MH5 皆绿）≥ **40** / 60 | ≥ 40 |
| 🔴 **F3b** | **每条 tsc 线至少 1 格在面内** | 12/12 |
| 🔴 **BR1** | §2 的逐格逐字段桥接 | 50/50 |

⚠️ **F3b 这次是真闸**：若 `6.0.3` / `7.0.2` 仍 0 格在面内，说明**除 `baseUrl` 外还有别的口径障碍**
⇒ 整份仍判「不可判读」，并把 MH2 给出的新诊断如实登记。⛔ 不许再改口径去凑。

### 3.2 承诺（与口径一逐字相同）

- **C1**：面内每格 —— 正例 `exit 0` **∧** 反例非零退出且诊断点到 `XXL`。
- **C2**：**每条 tsc 线**上 M 列（剥掉 `declare global` 的副本）至少 1 格红。
- **C3**：面内每格的 `(M, G)` 与**基准线 `5.9.3`** 上同 `@types/react` 的 `(M, G)` 逐格比对
  ⇒ 有差异判 **`承重图二维`**，全同判 **`承重图一维`**。

### 3.3 控制

`MH2` / `MH3` / `MH4` / `MH5` / `MH6` / `MH7` / `MH8` / `MN1` / `MN2` **与口径一逐字相同**
（定义见口径一预注册 §3.3），另加 **BR1**（§2）。

⚠️ `MH8` 在口径二里**仍要跑**：基准线 `5.9.3` 在**无 `baseUrl`** 下仍必须逐格复现 L3 已发表的 25 格。
它与 BR1 ⛔ 不重复 —— BR1 对的是口径一，MH8 对的是 **L3**（两个不同的参照）。

### 3.4 取数前的补写留痕（`AGENTS §3.9` 第六形态）

- **2026-09-03，零读数**：本文件初版即含 BR1。它 ⛔ 不是口径一那套的一部分，
  是口径一取数**之后**、口径二取数**之前**识别出的新控制需求（改了装置就得证 no-op）。

---

## 4. 判读规则（🔴 取数后逐字执行，⛔ 不改）

```
若 F1 / F2 / F3a / F3b 任一不达        ⇒ 「不可判读（地板不达）」
否则若 BR1 红                          ⇒ 「不可并排（去 baseUrl 改变了读数）」+ 逐格列出翻转
否则若 MH8 红                          ⇒ 「不可判读（基准线复现不了 L3）」
否则若 MH6 / MH3 / MH7 任一未过         ⇒ 「不可判读（版本隔离 / 口径守恒未过）」
否则若 C1 面内有红格                    ⇒ 「有洞」＋ 逐格列出红在哪条线 / 哪个 @types/react
否则若 C2 有线不红                      ⇒ 「部分线不可判读（阴性对照不红）」
否则                                    ⇒ 「双写覆盖面内全部线 · 承重图<一维|二维>」
```

⇒ 记为 **`TSCAXIS_C2_VERDICT`**。

---

## 5. 覆盖边界（⛔ 是边界，不是 TODO）

1. 🔴 **口径二 ⛔ 不能替口径一/L3 作答，反之亦然** —— 三个口径名。BR1 只买到「这 10 条线上两个口径一致」，
   ⛔ 买不到「`baseUrl` 在任何配置下都无关紧要」。
2. **⛔ 仍够不到 tsc 4.x**：`moduleResolution: Bundler` 是 5.0 引入的。
3. **每条线只取最新 patch**；线间 / patch 间 ⛔ 不可插值。
4. ⛔ **不含预发布**（`6.0.0-beta` / `7.0.1-rc` / `7.1.0-dev.*`）。
5. **被测物是 build 产物**，读数绑的是 `sha256 3e4d80cd…` 那一份，⛔ 不是「DS `0cdee554` 必然构建出的那份」。
6. **单次读数**；**射程 = JSX 增广一条**；⛔ 不覆盖非 React consumer；⛔ 不覆盖 `react-pilot` 那份（逐字 `Not shipped`）。
7. ⛔ **不写 DS 一个字节、不跑任何 DS 闸、不重建 `dist-wc`。**
8. ⚠️ **`baseUrl` 本身的处置 ⛔ 不在本份射程内** —— 本份只证「去掉它之后读数变不变」，
   ⛔ 不主张「DS/consumer 该不该用 `baseUrl`」。

---

## 6. 🔴 结论驱动什么动作（两支都写死，取数后 ⛔ 不改）

| `TSCAXIS_C2_VERDICT` | 驱动 |
|---|---|
| **有洞**（C1 面内有红格）| 🔴 **真缺陷** ⇒ 出处方给 DS：双写在那条 tsc 线上不成立，指明线与 `@types/react` |
| **承重图二维** | 🔴 出处方：`react-binding-templates.mjs` 头注释的因果模型只有 `@types/react` 一维，实测二维 ⇒ **改那段理由**（⛔ 不改模板、⛔ 不改代码）|
| **承重图一维** | 建议 DS 为 `./web-components` 出口声明一个它现在没有的 tsc 覆盖区间（现 `peerDependencies` 只有 `vue`，`typescript` 在 `devDependencies` ⇒ 对 consumer 零声明）|
| **不可判读 / 不可并排** | ⛔ 不出处方。如实登记 MH2 / BR1 给出的诊断，并把「口径够不到哪些 tsc」写成边界 |
| 任何一支 | ⛔ 不写 DS 一个字节 · ⛔ 不重建 `dist-wc` · 回改 `open-items` 清单**正文**（`AGENTS §22` 推论一）|

⚠️ **无论哪一支，都要单独登记一条与被测对象无关的读数**：
**`baseUrl` 在 `6.0` 起被弃用、`7.0` 起被移除** ——
这条影响的是**任何**沿用 L3 那套 tsconfig 的后续量具，⛔ 不是 DS 的问题。

---

## 7. ⛔ 本轮不许改的东西

- 🔴 `run-matrix.mjs` · `post-hoc-blocks.mjs`（钉着 L3 读数）
- 🔴 `run-tsc-axis.mjs` · `runs/wc-types-jsx-matrix/tsc-axis.json`（钉着**口径一**已发表读数，`3b89544`）
- `fixtures/` 四份原样复用，⛔ 不改
- ⇒ 本轮**只加**：`probes/wc-types-jsx-matrix/run-tsc-axis-nobaseurl.mjs`
- ⚠️ **重复代价第二次如实登记**：控制逻辑与前两个量具重复。⛔ 仍不抽公共库 —— 抽取就等于改已发表量具。

## 8. 读数落点

- `runs/wc-types-jsx-matrix/tsc-axis-nobaseurl.json`
- 报告：`reports/2026-09-03-tsc-axis.md`（两个口径写进同一份，⛔ 各自标口径名）
