pr-review-community-overlay

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

PR Review — Community Overlay (ArcKit)

PR审核 — 社区覆盖层(ArcKit)

Reviews ArcKit community-overlay PRs (
xx-*
jurisdictional command bundles) against the integration checklist that catches the recurring failure classes. Encodes the checklist used on PR #441 (au-federal) which surfaced 4 blockers and 6 important issues that the author had missed.
针对ArcKit社区覆盖层PR(
xx-*
司法管辖区命令包),对照集成检查清单进行审核,该清单可识别反复出现的故障类型。此流程基于PR #441(au-federal)中使用的检查清单,该PR曾发现作者遗漏的4个阻塞问题和6个重要问题。

When to Use

使用场景

  • PR adds new community overlay (e.g.
    au-federal
    ,
    ca-federal-fitaa
    , future
    au-vic-*
    )
  • PR extends an existing overlay (new
    xx-*
    command, new recipe target)
  • PR ships a new build recipe alongside
    xx-*
    commands
  • Author is contributor (not maintainer) and PR is large (10+ files, 5K+ lines)
Skip for: official-baseline command changes, plugin infrastructure, hooks, agents — these have their own review surfaces.
  • PR新增社区覆盖层(如
    au-federal
    ca-federal-fitaa
    ,未来的
    au-vic-*
  • PR扩展现有覆盖层(新增
    xx-*
    命令、新增构建目标)
  • PR随
    xx-*
    命令发布新的构建方案
  • 提交者为贡献者(非维护者)且PR规模较大(10个以上文件、5000行以上代码)
以下情况无需使用:官方基线命令变更、插件基础设施、钩子、Agent——这些有各自的审核流程。

Output shape (always)

输出格式(固定)

markdown
undefined
markdown
undefined

Code Review

代码审核

Verdict: [one-line conclusion]
结论: [一句话总结]

BLOCKERS (must fix before merge)

阻塞问题(合并前必须修复)

[numbered, file:line, fix instruction, comparison to working precedent]
[编号,文件:行号,修复说明,与可用范例对比]

IMPORTANT (should fix)

重要问题(建议修复)

MINOR (nits)

次要问题(优化点)

POSITIVE (worth calling out)

正面亮点(值得肯定)

Recommended pre-merge sequence

建议的合并前修复步骤

[ordered fix steps]

End with: `gh pr comment <N> --body "$(cat <<'EOF'...EOF)"` to post.
[有序修复步骤]

结尾使用:`gh pr comment <N> --body "$(cat <<'EOF'...EOF)"` 发布审核结果。

The 5 recurring blocker classes

5类反复出现的阻塞问题

These are the failure modes that recur across overlay PRs. Check each, in order:
这些是覆盖层PR中反复出现的故障模式,请按顺序逐一检查:

B1 — Templates lack
## Document Control
heading

B1 — 模板缺少
## Document Control
标题

Symptom: Templates have
<!-- DOC-CONTROL-HEADER -->
directly under the
> **Template Origin**…
blockquote with no
## Document Control
heading above.
Why it matters: The partial (
document-control-uk.md
/
document-control-uae.md
) is just the table — it has no heading. After inlining, artefact has a Document Control table with no section heading.
Verification:
bash
for f in arckit-claude/templates/<prefix>-*-template.md; do
  head -10 "$f" | grep -q "^## Document Control" || echo "MISSING heading: $f"
done
Working precedent:
arckit-claude/templates/ca-pia-template.md:5-7
and
uae-pdpl-template.md:5-7
both have
## Document Control\n\n<!-- DOC-CONTROL-HEADER -->\n<!-- Resolved at command-execution time per _partials/RENDERING.md. -->
.
症状: 模板在
> **Template Origin**…
块引用下直接使用
<!-- DOC-CONTROL-HEADER -->
,上方无
## Document Control
标题。
影响: 部分文件(
document-control-uk.md
/
document-control-uae.md
)仅包含表格,无标题。嵌入后,生成的文档会出现无章节标题的文档控制表格。
验证方式:
bash
for f in arckit-claude/templates/<prefix>-*-template.md; do
  head -10 "$f" | grep -q "^## Document Control" || echo "MISSING heading: $f"
done
可用范例:
arckit-claude/templates/ca-pia-template.md:5-7
uae-pdpl-template.md:5-7
均包含
## Document Control\n\n<!-- DOC-CONTROL-HEADER -->\n<!-- Resolved at command-execution time per _partials/RENDERING.md. -->

B2 — Commands don't override the UK classification line

B2 — 命令未覆盖英国分类行

Symptom: Overlay introduces a non-UK classification scheme (Canadian Protected/A/B/C, AU UNOFFICIAL/PROTECTED, etc.) but commands say only
Resolve the <!-- DOC-CONTROL-HEADER --> marker per RENDERING.md.
— no instruction to substitute the classification line.
Why it matters:
arckit-claude/templates/_partials/RENDERING.md
only routes
governance_framework: UAE Federal
or
classification_scheme: UAE Smart Data
to a non-UK partial. Everything else falls back to
document-control-uk.md
which renders
[PUBLIC / OFFICIAL / OFFICIAL-SENSITIVE / SECRET]
. Without an explicit override, the body content (which references the AU/CA/etc. ladder) becomes inconsistent with the header.
Verification:
bash
grep -L "classification scheme\|UK line in the header" arckit-<prefix>/commands/<prefix>-*.md
症状: 覆盖层引入非英国分类体系(加拿大Protected/A/B/C、澳大利亚UNOFFICIAL/PROTECTED等),但命令仅说明
Resolve the <!-- DOC-CONTROL-HEADER --> marker per RENDERING.md.
,未提及替换分类行的指令。
影响:
arckit-claude/templates/_partials/RENDERING.md
仅将
governance_framework: UAE Federal
classification_scheme: UAE Smart Data
路由到非英国部分文件,其他情况均回退到
document-control-uk.md
,该文件会渲染
[PUBLIC / OFFICIAL / OFFICIAL-SENSITIVE / SECRET]
。若无显式覆盖,正文内容(引用澳/加等分类体系)将与表头不一致。
验证方式:
bash
grep -L "classification scheme\|UK line in the header" arckit-<prefix>/commands/<prefix>-*.md

Files printed = files MISSING the override

输出的文件 = 缺少覆盖指令的文件


**Working precedent:** `arckit-ca/commands/ca-pia.md:32`:
> Use the Canadian classification scheme (UNCLASSIFIED / Protected A / Protected B / Protected C / CONFIDENTIAL / SECRET / TOP SECRET) — replace the standard UK line in the header.

**Proper long-term fix (separate PR):** ship a `document-control-<regime>.md` partial, extend RENDERING.md routing, extend `plugin.json` userConfig to accept the regime governance framework value.

**可用范例:** `arckit-ca/commands/ca-pia.md:32`:
> 使用加拿大分类体系(UNCLASSIFIED / Protected A / Protected B / Protected C / CONFIDENTIAL / SECRET / TOP SECRET)——替换表头中的标准英国分类行。

**长期修复方案(单独PR):** 发布`document-control-<regime>.md`部分文件,扩展RENDERING.md路由逻辑,扩展`plugin.json`的userConfig以接受regime治理框架值。

B3 —
generate-document-id.sh
mis-invocation

B3 —
generate-document-id.sh
调用错误

Symptom: Commands write
scripts/bash/generate-document-id.sh <TYPECODE> --filename
(single positional arg).
Why it matters: Script signature is
PROJECT_ID DOC_TYPE [VERSION] [OPTIONS]
. With one positional arg, TYPECODE is read as PROJECT_ID and DOC_TYPE is empty.
Verification:
bash
grep -n "generate-document-id.sh" arckit-<prefix>/commands/<prefix>-*.md | grep -v "<PROJECT_ID>\|{P}"
Working precedent:
arckit-ca/commands/ca-pia.md:32
:
scripts/bash/generate-document-id.sh <PROJECT_ID> PIA --filename
Note:
uae-*
commands share this bug. Worth fixing in the same sweep.
症状: 命令中写为
scripts/bash/generate-document-id.sh <TYPECODE> --filename
(单个位置参数)。
影响: 脚本签名为
PROJECT_ID DOC_TYPE [VERSION] [OPTIONS]
。若仅传入一个位置参数,TYPECODE会被当作PROJECT_ID,而DOC_TYPE为空。
验证方式:
bash
grep -n "generate-document-id.sh" arckit-<prefix>/commands/<prefix>-*.md | grep -v "<PROJECT_ID>\|{P}"
可用范例:
arckit-ca/commands/ca-pia.md:32
:
scripts/bash/generate-document-id.sh <PROJECT_ID> PIA --filename
注意:
uae-*
命令存在相同问题,建议同步修复。

B4 — Converter outputs are stale

B4 — 转换器输出过时

Symptom: Re-running
python scripts/converter.py
on the PR branch produces drift on files that were not the focus of the PR (commonly
arckit-pages
variants).
Why it matters: Author may have run the converter at branch creation and not re-run after rebasing main. Result: variants regress to an older version of canonical commands.
Verification:
bash
git checkout pr-<N>
python scripts/converter.py
git status --porcelain | grep -v "memory/"
症状: 在PR分支上重新运行
python scripts/converter.py
后,非PR重点文件(通常为
arckit-pages
变体)出现差异。
影响: 作者可能在分支创建时运行过转换器,但在合并主分支后未重新运行,导致变体退回到旧版标准命令。
验证方式:
bash
git checkout pr-<N>
python scripts/converter.py
git status --porcelain | grep -v "memory/"

Should be empty. Anything printed = stale converter output in the PR.

应无输出。任何输出 = PR中存在过时的转换器输出。


**Cross-check:** Run the same on `main` first to confirm `main` itself is clean (otherwise the drift isn't the PR's fault).

**Fix:** ask author to rebase on main, re-run converter, and amend.

**交叉验证:** 先在`main`分支上运行相同命令,确认`main`分支本身无问题(否则差异并非PR导致)。

**修复:** 要求作者基于main分支重新合并,重新运行转换器并提交修改。

B5 — Regime not registered in
REGIMES
/
REGIME_LABELS

B5 — 未在
REGIMES
/
REGIME_LABELS
中注册Regime

Symptom: New
regime: '<XX>'
declared on each new doc-type entry in
arckit-claude/config/doc-types.mjs
, but the
<XX>
code is missing from the exported
REGIMES
array and/or
REGIME_LABELS
object.
Why it matters: Per-record
regime:
controls which bucket each artefact falls into, but consumers iterating
REGIMES
(dashboards, group headers, navigator UI) silently skip the unregistered jurisdiction. The
HIGH_SEVERITY_BY_REGIME
derivation has a fallback so the local file still works — but downstream consumers don't. Symptom is invisible in unit tests.
Verification:
bash
undefined
症状:
arckit-claude/config/doc-types.mjs
的每个新文档类型条目上声明了
regime: '<XX>'
,但
<XX>
代码未出现在导出的
REGIMES
数组和/或
REGIME_LABELS
对象中。
影响: 每条记录的
regime:
控制每个产物所属的分组,但遍历
REGIMES
的消费者(仪表板、分组标题、导航UI)会静默跳过未注册的司法管辖区。
HIGH_SEVERITY_BY_REGIME
推导有回退逻辑,本地文件仍可正常工作,但下游消费者无法识别。此问题在单元测试中不可见。
验证方式:
bash
undefined

Confirm the new regime code appears in BOTH the array and the labels object.

确认新regime代码同时出现在数组和标签对象中。

Anchor on the export blocks (avoids matching every doc-type entry as noise).

锚定到导出块(避免匹配每个文档类型条目产生干扰)。

grep -nA 1 "^export const REGIMES" arckit-claude/config/doc-types.mjs grep -nA 12 "^export const REGIME_LABELS" arckit-claude/config/doc-types.mjs
grep -nA 1 "^export const REGIMES" arckit-claude/config/doc-types.mjs grep -nA 12 "^export const REGIME_LABELS" arckit-claude/config/doc-types.mjs

Then cross-check against the regime values declared on new doc-types

然后与新文档类型中声明的regime值交叉验证

grep -oE "regime: '[A-Z]+'" arckit-claude/config/doc-types.mjs | sort -u

**Working precedent:** PR #441 (au-federal) added both `'AU'` and `'CA'` (the latter a corrective for an earlier omission), e.g. `arckit-claude/config/doc-types.mjs:165-179`. Note the `REGIME_LABELS` ordering convention is officially-maintained-first then community alphabetical.

**Discovered in:** Test review of merged PR #432 (ca-federal-fitaa) where 12 doc-types declared `regime: 'CA'` but the `REGIMES` array shipped without `'CA'`. Bug shipped and was only fixed retroactively in #441.
grep -oE "regime: '[A-Z]+'" arckit-claude/config/doc-types.mjs | sort -u

**可用范例:** PR #441(au-federal)新增了`'AU'`和`'CA'`(后者为修复之前的遗漏),例如`arckit-claude/config/doc-types.mjs:165-179`。注意`REGIME_LABELS`的排序惯例是官方维护的条目优先,然后按社区条目字母顺序排列。

**发现案例:** 对已合并的PR #432(ca-federal-fitaa)进行测试审核时发现,12个文档类型声明了`regime: 'CA'`,但`REGIMES`数组中未包含`'CA'`。该问题已在#441中修复。

Integration checklist

集成检查清单

Beyond the 4 blockers, verify:
CheckWhereWhat to verify
Doc-types registered
arckit-claude/config/doc-types.mjs
All new type codes present, correct
category
(Compliance/Governance/Procurement), correct
regime
. Regime registered in
REGIMES
+
REGIME_LABELS
(B5). Severity-HIGH check:
grep "severity: 'HIGH'" arckit-claude/config/doc-types.mjs | grep "regime: '<XX>'"
— assessment-class types (PIA-equivalent, AI-assurance, FITAA-equivalent, ITSG-equivalent) should be HIGH.
Pages allow-list
arckit-claude/commands/pages.md
(Document Types table)
Every new type code listed under correct section header, mirrors
doc-types.mjs
.
Templates dual-located
arckit-claude/templates/
AND
.arckit/templates/
diff -rq arckit-claude/templates/ .arckit/templates/
shows zero diffs for new templates.
Recipe schema
arckit-claude/skills/arckit-build/recipes/<recipe>.yaml
Run author's verbatim Python snippet (deps resolution check). Manually verify wave shape, flagship target's deps.
SKILL.md recipes table
arckit-claude/skills/arckit-build/SKILL.md
New recipe row added.
README overlay section
README.md
New
[COMMUNITY]
section with command table, type codes, recipe link, "help wanted" call.
CHANGELOG entry
CHANGELOG.md
Unreleased entry. Verify command count math:
ls arckit-claude/commands/*.md | wc -l
should match the post-PR total.
Overlay guide
docs/guides/<recipe>-overlay.md
Exists. Check that the
governance_framework
/
classification_scheme
userConfig values it tells users to set are actually wired through RENDERING.md (per B2).
Citation traceability
arckit-claude/references/citation-instructions.md
referenced from each command
Inline
[DOC_ID-CN]
markers required when reading external docs/MCP/web. Often missing — flag as IMPORTANT, not BLOCKER (precedent across all overlays).
除上述4个阻塞问题外,还需验证以下内容:
检查项检查位置验证内容
文档类型已注册
arckit-claude/config/doc-types.mjs
所有新类型代码已存在,
category
(Compliance/Governance/Procurement)正确,
regime
正确。Regime已在
REGIMES
+
REGIME_LABELS
中注册(对应B5)。高严重性检查:
grep "severity: 'HIGH'" arckit-claude/config/doc-types.mjs | grep "regime: '<XX>'"
——评估类类型(PIA等效、AI保障、FITAA等效、ITSG等效)应设为HIGH。
页面白名单
arckit-claude/commands/pages.md
(Document Types表格)
每个新类型代码都列在正确的章节标题下,与
doc-types.mjs
一致。
模板双位置存储
arckit-claude/templates/
.arckit/templates/
diff -rq arckit-claude/templates/ .arckit/templates/
显示新模板无差异。
方案 schema
arckit-claude/skills/arckit-build/recipes/<recipe>.yaml
运行作者提供的Python代码片段(依赖解析检查)。手动验证波形、旗舰目标的依赖。
SKILL.md方案表格
arckit-claude/skills/arckit-build/SKILL.md
已添加新方案行。
README覆盖层章节
README.md
新增
[COMMUNITY]
章节,包含命令表格、类型代码、方案链接、"招募帮助"说明。
CHANGELOG条目
CHANGELOG.md
未发布条目。验证命令数量:
ls arckit-claude/commands/*.md | wc -l
应与PR后的总数一致。
覆盖层指南
docs/guides/<recipe>-overlay.md
已存在。检查指南中告知用户设置的
governance_framework
/
classification_scheme
用户配置值是否已通过RENDERING.md关联(对应B2)。
引用可追溯性每个命令中引用
arckit-claude/references/citation-instructions.md
阅读外部文档/MCP/网页时需内嵌
[DOC_ID-CN]
标记。通常会遗漏——标记为重要问题,而非阻塞问题(所有覆盖层均遵循此先例)。

Per-command checklist

单命令检查清单

For each new
xx-*
command file:
  • Frontmatter:
    description
    present. No invalid fields (
    name:
    ,
    color:
    ,
    permissionMode:
    ,
    tools:
    are NOT valid plugin command frontmatter —
    name:
    in particular is a common contributor mistake; filename is source of truth).
  • $ARGUMENTS
    placeholder
    present in body —
    tests/plugin/test_commands_structure.py::test_arguments_placeholder_present
    checks this. Existing
    ca-*
    /
    uae-*
    commands fail this test (32 known failures); new overlay commands should pass.
  • create-project.sh
    lookup
    — only required for project-bootstrapping commands (
    principles
    ,
    requirements
    , the first command someone runs). Most overlay commands assume the project already exists and skip this; that matches the FR/AT/EU/CA precedent. Not a defect when absent.
  • generate-document-id.sh
    invoked correctly (B3).
  • <!-- DOC-CONTROL-HEADER -->
    resolution
    instruction (B2 — should override classification when not UK/UAE).
  • Write tool used to save artefact (32K output token limit otherwise).
  • Handoffs: every
    handoffs.command
    value resolves to a real file in
    arckit-claude/commands/
    . Common bug: pluralisation (
    risks
    vs
    risk
    ); deps on commands shipping in sibling PRs. Validation needs YAML parsing (handoffs are nested under YAML frontmatter — raw grep misses), e.g.:
    python
    import yaml, glob, pathlib
    cmds = {pathlib.Path(p).stem for p in glob.glob('arckit-claude/commands/*.md')}
    for f in glob.glob('arckit-<prefix>/commands/<prefix>-*.md'):
        fm = yaml.safe_load(open(f).read().split('---')[1])
        for h in (fm or {}).get('handoffs', []):
            if h['command'] not in cmds: print(f, '→', h['command'])
  • Template path references
    ${CLAUDE_PLUGIN_ROOT}/templates/<name>-template.md
    with
    templates-custom
    then
    .arckit/templates/
    fallback.
  • Per-template footer:
    **Generated by**
    ,
    **Generated on**
    ,
    **ArcKit Version**
    ,
    **Project**
    ,
    **Model**
    all present.
针对每个新的
xx-*
命令文件:
  • 前置元数据: 存在
    description
    字段。无无效字段(
    name:
    color:
    permissionMode:
    tools:
    不是有效的插件命令前置元数据——
    name:
    是贡献者常见错误;文件名是唯一可信来源)。
  • $ARGUMENTS
    占位符
    存在于正文中——
    tests/plugin/test_commands_structure.py::test_arguments_placeholder_present
    会检查此项。现有
    ca-*
    /
    uae-*
    命令未通过此测试(已知32个失败案例);新覆盖层命令应通过。
  • create-project.sh
    查找
    ——仅项目初始化命令(
    principles
    requirements
    ,用户运行的第一个命令)需要此项。大多数覆盖层命令假设项目已存在,因此会跳过此项;这与FR/AT/EU/CA的先例一致。不存在不属于缺陷。
  • generate-document-id.sh
    调用正确(对应B3)。
  • <!-- DOC-CONTROL-HEADER -->
    解析
    指令(对应B2——非英国/阿联酋覆盖层应覆盖分类)。
  • 使用Write工具保存产物(否则存在32K输出令牌限制)。
  • 交接: 每个
    handoffs.command
    值对应
    arckit-claude/commands/
    中的真实文件。常见错误:复数形式(
    risks
    vs
    risk
    );依赖于兄弟PR中发布的命令。验证需要YAML解析(交接嵌套在YAML前置元数据下——原始grep会遗漏),例如:
    python
    import yaml, glob, pathlib
    cmds = {pathlib.Path(p).stem for p in glob.glob('arckit-claude/commands/*.md')}
    for f in glob.glob('arckit-<prefix>/commands/<prefix>-*.md'):
        fm = yaml.safe_load(open(f).read().split('---')[1])
        for h in (fm or {}).get('handoffs', []):
            if h['command'] not in cmds: print(f, '→', h['command'])
  • 模板路径 引用
    ${CLAUDE_PLUGIN_ROOT}/templates/<name>-template.md
    ,并优先使用
    templates-custom
    ,其次是
    .arckit/templates/
    作为回退。
  • 单模板页脚:
    **Generated by**
    **Generated on**
    **ArcKit Version**
    **Project**
    **Model**
    均已存在。

UK leakage check

英国术语泄漏检查

For non-UK overlays, grep for unintended UK terminology:
bash
grep -rE '\b(NCSC|ICO|Cyber Essentials|GovS|UK GDPR|GDS|Cabinet Office|DPA 2018|DPIA)\b' arckit-<prefix>/commands/<prefix>-*.md arckit-claude/templates/<prefix>-*.md
A small number of intentional comparison references is fine (PR #441 had 2 in
au-dss.md
+
au-pia.md
) — author should call them out in the PR body. Anything else is leakage.
针对非英国覆盖层,搜索意外出现的英国术语:
bash
grep -rE '\b(NCSC|ICO|Cyber Essentials|GovS|UK GDPR|GDS|Cabinet Office|DPA 2018|DPIA)\b' arckit-<prefix>/commands/<prefix>-*.md arckit-claude/templates/<prefix>-*.md
少量有意的对比引用是允许的(PR #441在
au-dss.md
+
au-pia.md
中有2处)——作者应在PR正文中说明。其他情况均属于术语泄漏。

Tests + CI

测试与CI

  • Run
    pytest tests/plugin/
    and check for new failures specific to this PR's files.
  • If PR adds
    .github/workflows/*
    (first-time CI), run the full suite locally and report pre-existing failure count to the author.
  • If PR adds a recipe-validation test, verify it codifies the headline scorecard claims (target count, deps, doc-types registration, regime registration, pages allow-list).
  • 运行
    pytest tests/plugin/
    ,检查是否存在与PR文件相关的新失败案例。
  • 若PR新增
    .github/workflows/*
    (首次添加CI),在本地运行完整套件,并向作者报告预先存在的失败数量。
  • 若PR新增方案验证测试,验证其是否明确了关键指标(目标数量、依赖、文档类型注册、regime注册、页面白名单)。

Verification commands (one-shot)

一键验证命令

bash
undefined
bash
undefined

Setup

准备工作

git fetch origin pull/<N>/head:pr-<N> git checkout pr-<N>
git fetch origin pull/<N>/head:pr-<N> git checkout pr-<N>

B1: missing Document Control heading

B1: 缺少Document Control标题

for f in arckit-claude/templates/*-template.md; do head -10 "$f" | grep -q "^## Document Control" || echo "B1 missing: $f" done | grep -E "<prefix>-"
for f in arckit-claude/templates/*-template.md; do head -10 "$f" | grep -q "^## Document Control" || echo "B1 missing: $f" done | grep -E "<prefix>-"

B2: missing classification override

B2: 缺少分类覆盖指令

grep -L "classification scheme|UK line in the header" arckit-<prefix>/commands/<prefix>-*.md
grep -L "classification scheme|UK line in the header" arckit-<prefix>/commands/<prefix>-*.md

B3: generate-document-id.sh mis-invocation

B3: generate-document-id.sh调用错误

grep -n "generate-document-id.sh [A-Z]+ --filename" arckit-<prefix>/commands/<prefix>-*.md
grep -n "generate-document-id.sh [A-Z]+ --filename" arckit-<prefix>/commands/<prefix>-*.md

B4: converter drift

B4: 转换器差异

python scripts/converter.py && git status --porcelain | grep -v "memory/"
python scripts/converter.py && git status --porcelain | grep -v "memory/"

B5: regime registration (anchored on export blocks to avoid doc-type noise)

B5: regime注册(锚定到导出块以避免文档类型干扰)

grep -nA 1 "^export const REGIMES" arckit-claude/config/doc-types.mjs grep -nA 12 "^export const REGIME_LABELS" arckit-claude/config/doc-types.mjs grep -oE "regime: '[A-Z]+'" arckit-claude/config/doc-types.mjs | sort -u
grep -nA 1 "^export const REGIMES" arckit-claude/config/doc-types.mjs grep -nA 12 "^export const REGIME_LABELS" arckit-claude/config/doc-types.mjs grep -oE "regime: '[A-Z]+'" arckit-claude/config/doc-types.mjs | sort -u

Recipe schema

方案schema

python3 -c " import yaml r = yaml.safe_load(open('arckit-claude/skills/arckit-build/recipes/<recipe>.yaml')) ids = {t['id'] for t in r['targets']} for t in r['targets']: for d in t.get('deps', []): d_clean = d.rstrip('*') if d_clean not in {i.rstrip('-') for i in ids} and not any(i.startswith(d_clean) for i in ids): print(f'BROKEN: {t["id"]} -> {d}') "
python3 -c " import yaml r = yaml.safe_load(open('arckit-claude/skills/arckit-build/recipes/<recipe>.yaml')) ids = {t['id'] for t in r['targets']} for t in r['targets']: for d in t.get('deps', []): d_clean = d.rstrip('*') if d_clean not in {i.rstrip('-') for i in ids} and not any(i.startswith(d_clean) for i in ids): print(f'BROKEN: {t["id"]} -> {d}') "

Dual-template parity

双模板一致性

diff -rq arckit-claude/templates/ .arckit/templates/ | grep -E "<prefix>-"
diff -rq arckit-claude/templates/ .arckit/templates/ | grep -E "<prefix>-"

Tests

测试

pytest tests/plugin/ --tb=line -q 2>&1 | tail -10
pytest tests/plugin/ --tb=line -q 2>&1 | tail -10

Command count check vs CHANGELOG

CHANGELOG命令数量检查

ls arckit-claude/commands/*.md | wc -l
undefined
ls arckit-claude/commands/*.md | wc -l
undefined

Posting the review

发布审核结果

Use the heredoc form so the markdown renders correctly:
bash
gh pr comment <N> --body "$(cat <<'EOF'
使用 heredoc 格式确保markdown正确渲染:
bash
gh pr comment <N> --body "$(cat <<'EOF'

Code Review

代码审核

Verdict: ... EOF )"

Verify with the URL the command returns.
结论: ... EOF )"

通过命令返回的URL验证渲染效果。

Reference test cases

参考测试案例

  • PR #441 (au-federal, 2026-05-05) — canonical fixture for B1–B4. Exhibited all four (template heading, classification override, doc-id invocation, converter drift) plus 6 important issues. Posted review: https://github.com/tractorjuice/arc-kit/pull/441#issuecomment-4386152326
  • PR #432 (ca-federal-fitaa, merged 2026-05-05) — fixture for B5 (regime registration). Shipped 12 doc-types with
    regime: 'CA'
    while
    'CA'
    was missing from the
    REGIMES
    array. Bug only surfaced retroactively in #441. Validates the skill against an already-merged overlay where B1–B4 all PASS but a different blocker class exists.
  • PR #441 (au-federal, 2026-05-05) —— B1–B4的标准案例。包含全部4类问题(模板标题、分类覆盖、文档ID调用、转换器差异)及6个重要问题。发布的审核结果:https://github.com/tractorjuice/arc-kit/pull/441#issuecomment-4386152326
  • PR #432 (ca-federal-fitaa, 2026-05-05合并) —— B5(regime注册)的案例。发布了12个声明
    regime: 'CA'
    的文档类型,但
    REGIMES
    数组中缺少
    'CA'
    。该问题仅在#441中被追溯修复。验证了该流程对已合并覆盖层的适用性,其中B1–B4均通过,但存在其他阻塞问题。

Common mistakes by reviewers (self-checks)

审核者常见错误(自我检查)

MistakeFix
Trusting the PR body's "regenerated converter outputs" claimAlways re-run
python scripts/converter.py
and check
git status
Trusting headline test count claimsRun
pytest tests/
and verify the numbers
Reviewing only the canonical files, not converter outputsDiff
main..pr-<N>
for
arckit-codex/
,
arckit-opencode/
,
arckit-gemini/
,
arckit-copilot/
,
arckit-paperclip/
Missing the dual-template requirement
diff -rq arckit-claude/templates/ .arckit/templates/
Missing classification rendering issue (B2)Read
arckit-claude/templates/_partials/RENDERING.md
to confirm only UAE has non-UK routing
Verifying CHANGELOG count from prose, not file count
ls arckit-claude/commands/*.md | wc -l
错误修复方式
信任PR正文中的"已重新生成转换器输出"声明始终重新运行
python scripts/converter.py
并检查
git status
信任测试数量的标题声明运行
pytest tests/
并验证数字
仅审核标准文件,未审核转换器输出对比
main..pr-<N>
中的
arckit-codex/
arckit-opencode/
arckit-gemini/
arckit-copilot/
arckit-paperclip/
忽略双模板要求运行
diff -rq arckit-claude/templates/ .arckit/templates/
遗漏分类渲染问题(B2)阅读
arckit-claude/templates/_partials/RENDERING.md
确认仅阿联酋有非英国路由
通过文本验证CHANGELOG数量,而非文件计数运行
ls arckit-claude/commands/*.md | wc -l