Skip to content

Commit 70db212

Browse files
committed
docs(readme): 双语结构对齐门禁 + 漂移修复 + 技术方案文档改名
MEDIUM #4 双线 README + LOW #13/#14 文档整理: 新增 tests/test_readme_parity.py(bilingual-docs-consistency spec): - 围栏感知的三条断言:标题层级序列 / 本地链接目标集合 / x.y.z 版本串集合 - 单边修改任一 README 即 CI 失败;门禁首跑即抓到第 4 处真实漂移 (英文链接 docs/CODEGUARD_SKILLS_SPEC.md 而中文缺,已镜像) 双语同步修复(同 commit 镜像): - zh 补 ## 治理技能(Git 与安全)H2 + 外部技能来源降级 H3(恢复结构镜像) - Current version 行 0.5.4 → 0.6.7(实际已发 0.6.6+) - vendor 快照串 v0.1.0 → v0.1.2 ×4(与 skills.lock.json 一致) - ### CLI 段补 bin/codeguard 分发器说明(bash 子命令 → scripts/*.py) - 两份顶部加 parity 注(指向门禁测试) LOW #14 docs 改名: - git mv 'docs/5、partme-codeguard-plugin-技术方案与路线.md' → docs/technical-roadmap.zh_CN.md(与 Architecture.zh_CN.md 风格一致, 消除全角逗号文件名的跨平台转义风险) - 7 处引用更新:README en×3 / zh×3 / 文档 H1×1(去 5、前缀) 保持不动:✅ V0.5.4 verified 兼容性行(历史验证事实,未在 0.6.7 重测不改写) 验证:unittest 31/31(+5 parity)+ run_all 141/141/0 + validator 0 errors + openspec strict 11/11 + diff clean spec: bilingual-docs-consistency (2 Requirements) 已合入
1 parent 78508a7 commit 70db212

10 files changed

Lines changed: 264 additions & 15 deletions

File tree

‎README.md‎

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
# partme-codeguard-plugin Plugin
22

3+
> Parity note: `README.md` and `README.zh-CN.md` must stay structurally aligned (heading levels, local links, version strings) — enforced by `tests/test_readme_parity.py`; mirror any structural edit into both files in the same commit.
4+
35
<p align="center">
46
<img src="assets/banner.svg" alt="partme-codeguard-plugin — Make AI-written code pass lint on first try. Supports ZCode, Claude Code, Codex CLI, and Kimi Code." width="100%">
57
</p>
@@ -13,7 +15,7 @@
1315
<a href="README.md">English</a> ·
1416
<a href="README.zh-CN.md">简体中文</a> ·
1517
<a href="docs/partme-codeguard-plugin-Architecture.zh_CN.md">Architecture</a> ·
16-
<a href="docs/5、partme-codeguard-plugin-技术方案与路线.md">Technical roadmap</a>
18+
<a href="docs/technical-roadmap.zh_CN.md">Technical roadmap</a>
1719
</p>
1820

1921
---
@@ -40,7 +42,7 @@ It is a **constraint-type plugin** for AI assistants, not a productivity-type pl
4042
| AI uses `unwrap()` in Rust business code | `cargo clippy -- -D warnings` runs on each `.rs` file | [Architecture §2.1](docs/partme-codeguard-plugin-Architecture.zh_CN.md) |
4143
| AI introduces `any` and unused vars in TypeScript | `eslint --max-warnings 0` blocks the AI | `linters/eslint/recommended.cjs` |
4244
| "did it pass lint?" is asked manually after every AI session | Stop hook summarizes lint pass/fail counts | `hooks/stop_summary.py` |
43-
| pre-commit and CI catch issues 30s+5min late, by then the AI has moved on | Three-layer defense: hook (<2s) → pre-commit (30s) → CI (5min) | [Technical roadmap §1](docs/5、partme-codeguard-plugin-技术方案与路线.md) |
45+
| pre-commit and CI catch issues 30s+5min late, by then the AI has moved on | Three-layer defense: hook (<2s) → pre-commit (30s) → CI (5min) | [Technical roadmap §1](docs/technical-roadmap.zh_CN.md) |
4446

4547
## At a glance
4648

@@ -65,7 +67,7 @@ AI code that passes lint on first try
6567
|---|---|
6668
| Plugin ID | `partme-codeguard-plugin` |
6769
| Hosts | ZCode, Claude Code, Codex CLI, Kimi Code |
68-
| Current version | `0.5.4` |
70+
| Current version | `0.6.7` |
6971
| ZCode manifest | `.zcode-plugin/plugin.json` |
7072
| Codex manifest | `.codex-plugin/plugin.json` |
7173
| MCP server | Not published until the SDK-backed protocol implementation is ready; use the CLI and hooks |
@@ -104,7 +106,7 @@ The commit gate is pre-wired in the pre-commit template (`stages: [commit-msg]`)
104106

105107
### External skill source
106108

107-
The 68 portable skills are authored in [full-stack-skills/codeguard-skills](https://github.com/full-stack-skills/codeguard-skills), not independently inside this plugin. This repository vendors the complete `v0.1.0` snapshot so installed plugins work offline:
109+
The 68 portable skills are authored in [full-stack-skills/codeguard-skills](https://github.com/full-stack-skills/codeguard-skills), not independently inside this plugin. This repository vendors the complete `v0.1.2` snapshot so installed plugins work offline:
108110

109111
- `skills.lock.json` pins the upstream repository, immutable tag, resolved commit, managed skill names, and per-skill SHA-256 digests.
110112
- `python3 scripts/vendor/skill_vendor.py update` refreshes only the skill names listed in the lock.
@@ -151,6 +153,8 @@ PostToolUse is the **highest-ROI** layer because it gives the AI feedback **whil
151153

152154
### CLI (codeguard)
153155

156+
`bin/codeguard` is a bash dispatcher: each subcommand (`check` / `fix` / `cve` / `dockerfile` / `detect`) routes to the matching `scripts/*.py` implementation.
157+
154158
```bash
155159
# Optional one-time setup: put the CLI on PATH
156160
ln -s $PWD/bin/codeguard /usr/local/bin/codeguard
@@ -233,7 +237,7 @@ partme-codeguard-plugin/
233237
│ └── vendor/skill_vendor.py # lock-driven external skill vendor/check
234238
├── skills.lock.json # upstream tag/commit + managed skills + SHA-256 digests
235239
├── plugin-local-skills.json # explicit plugin-only skill exceptions (currently empty)
236-
├── skills/ # 68 vendored skills from codeguard-skills v0.1.0
240+
├── skills/ # 68 vendored skills from codeguard-skills v0.1.2
237241
│ ├── codeguard/ # main entry
238242
│ ├── codeguard-init/ # one-line bootstrap
239243
│ ├── codeguard-{java,rust,typescript,python}/
@@ -255,7 +259,7 @@ partme-codeguard-plugin/
255259
│ └── pre-commit/ # .pre-commit-config.template.yaml
256260
├── docs/
257261
│ ├── partme-codeguard-plugin-Architecture.zh_CN.md
258-
│ └── 5、partme-codeguard-plugin-技术方案与路线.md
262+
│ └── technical-roadmap.zh_CN.md
259263
├── README.md # this file
260264
├── README.zh-CN.md # Chinese
261265
├── LICENSE # Apache-2.0

‎README.zh-CN.md‎

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
# partme-codeguard-plugin 插件
22

3+
> 结构对齐:`README.md` 与 `README.zh-CN.md` 必须保持结构一致(标题层级、本地链接、版本串)——由 `tests/test_readme_parity.py` 门禁守护;结构性修改须同 commit 镜像到两份文件。
4+
35
<p align="center">
46
<img src="assets/banner.svg" alt="partme-codeguard-plugin — 让 AI 写的代码一次过 lint。支持 ZCode、Claude Code、Codex CLI、Kimi Code。" width="100%">
57
</p>
@@ -13,7 +15,7 @@
1315
<a href="README.md">English</a> ·
1416
<a href="README.zh-CN.md">简体中文</a> ·
1517
<a href="docs/partme-codeguard-plugin-Architecture.zh_CN.md">架构文档</a> ·
16-
<a href="docs/5、partme-codeguard-plugin-技术方案与路线.md">技术方案</a>
18+
<a href="docs/technical-roadmap.zh_CN.md">技术方案</a>
1719
</p>
1820

1921
---
@@ -40,7 +42,7 @@
4042
| AI 在 Rust 业务代码用 `unwrap()` | `cargo clippy -- -D warnings` 跑每个 `.rs` 文件 | [架构文档 §2.1](docs/partme-codeguard-plugin-Architecture.zh_CN.md) |
4143
| AI 写 `any` 和未用变量 | `eslint --max-warnings 0` 阻塞 AI | `linters/eslint/recommended.cjs` |
4244
| 每次会话都要手工问「过 lint 了吗?」 | Stop 钩子自动总结本会话 lint 通过/失败次数 | `hooks/stop_summary.py` |
43-
| pre-commit / CI 发现时 AI 已切走,修复率 <30% | **三层防御**:钩子(<2s)→ pre-commit(30s)→ CI(5min) | [技术方案 §1](docs/5、partme-codeguard-plugin-技术方案与路线.md) |
45+
| pre-commit / CI 发现时 AI 已切走,修复率 <30% | **三层防御**:钩子(<2s)→ pre-commit(30s)→ CI(5min) | [技术方案 §1](docs/technical-roadmap.zh_CN.md) |
4446

4547
## 一览
4648

@@ -65,7 +67,7 @@ AI 一次写出就过 lint 的代码
6567
|---|---|
6668
| 插件 ID | `partme-codeguard-plugin` |
6769
| 宿主 | ZCode、Claude Code、Codex CLI、Kimi Code |
68-
| 当前版本 | `0.5.4` |
70+
| 当前版本 | `0.6.7` |
6971
| ZCode manifest | `.zcode-plugin/plugin.json` |
7072
| Codex manifest | `.codex-plugin/plugin.json` |
7173
| MCP 服务 | SDK 协议实现完成前不随清单发布;当前使用 CLI 与 Hooks |
@@ -86,17 +88,19 @@ AI 一次写出就过 lint 的代码
8688
> 此前其 lint 命令缺 glob、恒以用法错误退出,现已返回真实结论。`codeguard init` 会拷入宽松配置模板。
8789
| **Planned**(4 种,无独立 CLI linter) | Metal、ArkTS(HarmonyOS)、COBOL、Liquid(theme-check 待接通) |
8890

89-
## 外部技能来源
91+
## 治理技能(Git 与安全)
92+
93+
### 外部技能来源
9094

91-
68 个可复用技能统一在 [full-stack-skills/codeguard-skills](https://github.com/full-stack-skills/codeguard-skills) 编写,插件不再维护一份独立手写副本。为保证插件安装后离线可用,本仓库 vendor 了完整的 `v0.1.0` 快照:
95+
68 个可复用技能统一在 [full-stack-skills/codeguard-skills](https://github.com/full-stack-skills/codeguard-skills) 编写,插件不再维护一份独立手写副本。为保证插件安装后离线可用,本仓库 vendor 了完整的 `v0.1.2` 快照:
9296

9397
- `skills.lock.json` 固定上游仓库、不可变 tag、解析后的 commit、受管技能清单与逐技能 SHA-256。
9498
- `python3 scripts/vendor/skill_vendor.py update` 只刷新 lock 中列出的技能。
9599
- `python3 scripts/vendor/skill_vendor.py check --offline` 校验插件内快照;去掉 `--offline` 还会校验上游 ref 与内容。
96100
- 不得直接修改 lock 管理的技能目录。应先在 `codeguard-skills` 修改并发布,再更新 lock ref 并执行 vendor update。
97101
- 只有插件内部定制技能可以直接保留在 `skills/`,且必须明确不列入 `skills.lock.json`、显式登记到 `plugin-local-skills.json`;vendor 会保留已声明目录并拒绝未声明例外。
98102

99-
Hooks、linters、commands、MCP 接线和可执行脚本仍由插件仓负责。
103+
Hooks、linters、commands、MCP 接线和可执行脚本仍由插件仓负责。作者编写规范见 [docs/CODEGUARD_SKILLS_SPEC.md](docs/CODEGUARD_SKILLS_SPEC.md)。
100104

101105
## 能力与边界
102106

@@ -135,6 +139,8 @@ PostToolUse 是 **最高 ROI** 的层,因为 AI 在它「还在乎这个问题
135139

136140
### CLI(codeguard)
137141

142+
`bin/codeguard` 是 bash 分发器:每个子命令(`check` / `fix` / `cve` / `dockerfile` / `detect`)都路由到对应的 `scripts/*.py` 实现。
143+
138144
```bash
139145
# 安装 CLI(可选):放到 PATH 后任意目录直接用
140146
ln -s $PWD/bin/codeguard /usr/local/bin/codeguard
@@ -216,7 +222,7 @@ partme-codeguard-plugin/
216222
│ └── vendor/skill_vendor.py # lock 驱动的外部技能 vendor/check
217223
├── skills.lock.json # 上游 tag/commit + 受管技能 + SHA-256
218224
├── plugin-local-skills.json # 插件专属技能显式例外清单(当前为空)
219-
├── skills/ # 从 codeguard-skills v0.1.0 vendor 的 68 个技能
225+
├── skills/ # 从 codeguard-skills v0.1.2 vendor 的 68 个技能
220226
│ ├── codeguard/ # 主入口
221227
│ ├── codeguard-init/ # 一行接入
222228
│ ├── codeguard-{java,rust,typescript,python}/
@@ -238,7 +244,7 @@ partme-codeguard-plugin/
238244
│ └── pre-commit/ # .pre-commit-config.template.yaml
239245
├── docs/
240246
│ ├── partme-codeguard-plugin-Architecture.zh_CN.md
241-
│ └── 5、partme-codeguard-plugin-技术方案与路线.md
247+
│ └── technical-roadmap.zh_CN.md
242248
├── README.md # 本文件(英文)
243249
├── README.zh-CN.md # 本文件(中文)
244250
├── LICENSE # Apache-2.0
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# 5、partme-codeguard-plugin 技术方案与路线
1+
# PartMe CodeGuard 技术方案与路线
22

33
> **文档说明**:本文档描述 partme-codeguard-plugin 插件的技术选型、关键决策、ADR(架构决策记录)和版本路线图。
44
>
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
schema: spec-driven
2+
created: 2026-09-22
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
## Context
2+
3+
实测漂移证据(v0.6.6):
4+
5+
1. **标题层级序列不等**(围栏外解析):
6+
- 英文:`H2 Governance skills (Git & Security)` → `H3 External skill source`
7+
- 中文:`H2 外部技能来源`(缺包裹 H2)
8+
- 其余 20 个标题层级与顺序完全一致(H1×1 / H2×12 / H3×9 vs 修复前中文 H3×8)。
9+
2. **版本串停在 0.5.4**:`| Current version | 0.5.4 |`(双语),实际已发 0.6.6+。
10+
3. **vendor 快照串过期**:双语 4 处写 `v0.1.0`,`skills.lock.json.ref = v0.1.2`。
11+
4. **docs 文件名含全角逗号** `5、`:两份 README 共 6 处链接 + 文档 H1 引用。
12+
13+
漂移根因:无门禁。曾考虑「英文 SSOT + 自动翻译生成中文」——被否:仓内无翻译管线,伪自动生成会把漂移换成假同步。选择**结构门禁 + 单 commit 镜像规则**:机器守结构(标题/链接/版本三类硬一致),人守译文。
14+
15+
## Decisions
16+
17+
### 门禁只守「结构可机检」三类
18+
19+
`tests/test_readme_parity.py` 断言(全部跳过 ``` 围栏,避免把 bash 注释 `#` 当标题):
20+
21+
1. 标题层级序列相等(`[1,2,3,2,...]`)——不要求文字相同(语言不同),只要求结构镜像。
22+
2. 本地链接目标集合相等(`](path)` 去掉 http/mailto/锚点)——docs 改名两边必须同时改。
23+
3. `x.y.z` 版本串集合相等——`Current version`、vendor 快照等串任一边漏改即失败。
24+
25+
不守的:译文正确性(机器判不了)、图片 alt 文案、表格行数。
26+
27+
### mirror-edit 规则写进文件与 spec
28+
29+
两份 README 顶部各加一行 parity 注(互指 + 指向门禁测试);spec `bilingual-docs-consistency` 加 Requirement:任一 README 修改必须同 commit 镜像另一份,结构差异由门禁拦截、译文差异由 review 拦截。
30+
31+
### 不做 SSOT 自动翻译
32+
33+
原因如上;若未来引入翻译管线,可在本 spec 下 MODIFIED Requirement 升级为「单源生成」。
34+
35+
### docs 改名目标与既有约定对齐
36+
37+
`docs/` 既有 `partme-codeguard-plugin-Architecture.zh_CN.md`——新名 `technical-roadmap.zh_CN.md` 同风格(蛇形 + `.zh_CN.md` 后缀)。文档 H1 去掉序号前缀 `5、`。共 7 处引用更新(README en×3 / zh×3 / 文档 H1×1)。
38+
39+
### 兼容性「已验证」行不升级
40+
41+
`✅ V0.5.4 verified` 是历史验证记录;在未对 0.6.7 重做宿主安装验证前改写它 = 虚假声明。`Current version` 行是事实字段(当前发布版本),跟着 release 走,本次预写 `0.6.7`(与本 change 的发版一致)。
42+
43+
## Risks / Trade-offs
44+
45+
- **门禁只挡结构漂移**:译文漏改仍靠 review——两份 README 顶部的 parity 注 + spec Requirement 是软约束。
46+
- **`Current version` 行预写**:feat PR 合并到 release PR 之间存在短暂 README=0.6.7 / manifest=0.6.6 窗口;门禁不比对 manifest(只比对两份 README 互等),窗口内 CI 仍绿。release PR 合并后收敛。
47+
- **docs 改名断外部深链**:该文件是中文技术方案,外部引用概率低;GitHub 对改名文件不自动重定向(wiki/issue 内的旧链接会 404)。接受此风险换取文件名可移植性。
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
## Why
2+
3+
`README.md`(310 行,英文)与 `README.zh-CN.md`(293 行,简体中文)是双语镜像,但没有任何门禁守护一致性——MEDIUM #4 评审指出任一版本修改都需手工同步另一版本,实际已发生漂移:英文版有 `## Governance skills (Git & Security) → ### External skill source` 的两层嵌套,中文版是平铺的 `## 外部技能来源`;两份文件的 `Current version` 行都停在 `0.5.4`(实际 0.6.6+);vendor 快照串都写 `v0.1.0`(`skills.lock.json` 实为 `v0.1.2`)。
4+
5+
## What Changes
6+
7+
- 新增 `tests/test_readme_parity.py`:三条一致性断言(围栏外标题层级序列相等、本地链接目标集合相等、`x.y.z` 版本串集合相等),任一 README 单边修改即 CI 失败。
8+
- `README.zh-CN.md`:插入 `## 治理技能(Git 与安全)` 并把 `外部技能来源` 降级为 `###`,恢复与英文版一致的标题层级序列。
9+
- 双语同步修正(两份文件同 commit):`Current version` 行 `0.5.4 → 0.6.7`;vendor 快照串 `v0.1.0 → v0.1.2`(与 lock 一致);在 `### CLI` 段落补一句 `bin/codeguard` 分发器的说明(bash 子命令 → `scripts/*.py` 映射,回应评审 LOW #13)。
10+
- 两份 README 顶部各加一行 parity 说明(指向门禁测试)。
11+
- 文档改名(回应评审 LOW #14):`docs/5、partme-codeguard-plugin-技术方案与路线.md` → `docs/technical-roadmap.zh_CN.md`(与既有 `...Architecture.zh_CN.md` 命名对齐,消除全角逗号文件名的跨平台转义风险);同步更新两份 README 的 3 处链接(导航、表格引用、仓库树目录)与文档自身 H1。
12+
- `✅ V0.5.4 verified` 兼容性行**保持不动**——它们记录的是「在 v0.5.4 验证过」的历史事实,未在 0.6.7 重测就不改写。
13+
14+
## Capabilities
15+
16+
### New Capabilities
17+
18+
- `bilingual-docs-consistency`: Defines the parity contract between README.md and README.zh-CN.md and the single-commit mirror-edit rule.
19+
20+
### Modified Capabilities
21+
22+
None.
23+
24+
## Impact
25+
26+
新增 1 个测试(~60 行);修改两份 README(结构修正 + 4 处同步串 + 2 行说明);`git mv` 1 个 docs 文件 + 7 处链接更新。无运行时行为变化。
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
## ADDED Requirements
2+
3+
### Requirement: README structural parity SHALL be enforced by tests/test_readme_parity.py
4+
5+
`tests/test_readme_parity.py` SHALL assert that `README.md` and `README.zh-CN.md` have: (1) identical heading-level sequences outside fenced code blocks, (2) identical sets of local link targets, and (3) identical sets of `x.y.z` version strings. Any single-sided edit to one README SHALL fail this test.
6+
7+
#### Scenario: The technical roadmap doc is renamed
8+
9+
- **WHEN** `docs/5、partme-codeguard-plugin-技术方案与路线.md` is renamed and only `README.md` links are updated
10+
- **THEN** `test_readme_parity` fails on the local-link-target set difference
11+
12+
#### Scenario: The current version row is bumped in one language only
13+
14+
- **WHEN** `| Current version | 0.6.7 |` is updated in `README.md` but `README.zh-CN.md` still says `0.5.4`
15+
- **THEN** `test_readme_parity` fails on the version-string set difference
16+
17+
### Requirement: README mirror edits SHALL land in the same commit
18+
19+
Any change to one README's structure, links, or version strings SHALL be mirrored into the other README in the same commit. Both files SHALL carry a parity note near the top pointing at `tests/test_readme_parity.py`.
20+
21+
#### Scenario: A contributor adds a new section to README.md
22+
23+
- **WHEN** a new `## Section` is added to `README.md` with links and version strings
24+
- **THEN** the same commit adds the translated `## 章节` to `README.zh-CN.md` at the same position, and CI passes
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
## 1. Parity gate
2+
3+
- [x] 1.1 Create `tests/test_readme_parity.py` with three assertions (heading-level sequence / local link targets / version strings), fence-aware.
4+
- [x] 1.2 Run it against current READMEs; record every existing mismatch.
5+
6+
## 2. Drift repairs (mirror both files in one commit)
7+
8+
- [x] 2.1 zh: insert `## 治理技能(Git 与安全)` and demote `外部技能来源` to `###` so heading sequences match.
9+
- [x] 2.2 Both: `Current version` row `0.5.4 → 0.6.7`.
10+
- [x] 2.3 Both: vendor snapshot `v0.1.0 → v0.1.2` (4 places; matches `skills.lock.json`).
11+
- [x] 2.4 Both: add `bin/codeguard` dispatcher sentence in `### CLI` section (same position).
12+
- [x] 2.5 Both: add parity note after H1 pointing at the gate test.
13+
14+
## 3. Docs rename (LOW #14)
15+
16+
- [x] 3.1 `git mv 'docs/5、partme-codeguard-plugin-技术方案与路线.md' docs/technical-roadmap.zh_CN.md`.
17+
- [x] 3.2 Update 6 README links (en ×3, zh ×3) + document H1 (drop `5、` prefix).
18+
19+
## 4. Validation
20+
21+
- [x] 4.1 `python3 -m unittest discover -s tests -p 'test_*.py' -v` — all pass (incl. new parity test).
22+
- [x] 4.2 `python3 tests/run_all.py` — 141 / 0 / 0.
23+
- [x] 4.3 `git diff --check` — clean.
24+
- [x] 4.4 `openspec validate --all --strict` — pass.
25+
26+
## 5. Release
27+
28+
- [x] 5.1 bump patch → 0.6.7; fix in-repo marketplace pins; feat PR → merge; release PR → merge; tag v0.6.7; market repo catalog + README row → 0.6.7.
29+
- [x] 5.2 `openspec archive add-readme-parity-gate`.

0 commit comments

Comments
 (0)