Loading...
Loading...
Use when reviewing a PR to tractorjuice/arc-kit that adds or extends a community jurisdictional overlay (e.g. au-*, ca-*, uae-*, fr-*, at-*, eu-*, future state-level like au-vic-*) — produces a structured review with blockers, important issues, minor issues, and positive callouts.
npx skill4agent add tractorjuice/arc-kit pr-review-community-overlayxx-*au-federalca-federal-fitaaau-vic-*xx-*xx-*## 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]gh pr comment <N> --body "$(cat <<'EOF'...EOF)"## Document Control<!-- DOC-CONTROL-HEADER -->> **Template Origin**…## Document Controldocument-control-uk.mddocument-control-uae.mdfor f in arckit-claude/templates/<prefix>-*-template.md; do
head -10 "$f" | grep -q "^## Document Control" || echo "MISSING heading: $f"
donearckit-claude/templates/ca-pia-template.md:5-7uae-pdpl-template.md:5-7## Document Control\n\n<!-- DOC-CONTROL-HEADER -->\n<!-- Resolved at command-execution time per _partials/RENDERING.md. -->Resolve the <!-- DOC-CONTROL-HEADER --> marker per RENDERING.md.arckit-claude/templates/_partials/RENDERING.mdgovernance_framework: UAE Federalclassification_scheme: UAE Smart Datadocument-control-uk.md[PUBLIC / OFFICIAL / OFFICIAL-SENSITIVE / SECRET]grep -L "classification scheme\|UK line in the header" arckit-<prefix>/commands/<prefix>-*.md
# Files printed = files MISSING the overridearckit-ca/commands/ca-pia.md:32Use the Canadian classification scheme (UNCLASSIFIED / Protected A / Protected B / Protected C / CONFIDENTIAL / SECRET / TOP SECRET) — replace the standard UK line in the header.
document-control-<regime>.mdplugin.jsongenerate-document-id.shscripts/bash/generate-document-id.sh <TYPECODE> --filenamePROJECT_ID DOC_TYPE [VERSION] [OPTIONS]grep -n "generate-document-id.sh" arckit-<prefix>/commands/<prefix>-*.md | grep -v "<PROJECT_ID>\|{P}"arckit-ca/commands/ca-pia.md:32scripts/bash/generate-document-id.sh <PROJECT_ID> PIA --filename
uae-*python scripts/converter.pyarckit-pagesgit checkout pr-<N>
python scripts/converter.py
git status --porcelain | grep -v "memory/"
# Should be empty. Anything printed = stale converter output in the PR.mainmainREGIMESREGIME_LABELSregime: '<XX>'arckit-claude/config/doc-types.mjs<XX>REGIMESREGIME_LABELSregime:REGIMESHIGH_SEVERITY_BY_REGIME# Confirm the new regime code appears in BOTH the array and the labels object.
# 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
# Then cross-check against the regime values declared on new doc-types
grep -oE "regime: '[A-Z]+'" arckit-claude/config/doc-types.mjs | sort -u'AU''CA'arckit-claude/config/doc-types.mjs:165-179REGIME_LABELSregime: 'CA'REGIMES'CA'| Check | Where | What to verify |
|---|---|---|
| Doc-types registered | | All new type codes present, correct |
| Pages allow-list | | Every new type code listed under correct section header, mirrors |
| Templates dual-located | | |
| Recipe schema | | Run author's verbatim Python snippet (deps resolution check). Manually verify wave shape, flagship target's deps. |
| SKILL.md recipes table | | New recipe row added. |
| README overlay section | | New |
| CHANGELOG entry | | Unreleased entry. Verify command count math: |
| Overlay guide | | Exists. Check that the |
| Citation traceability | | Inline |
xx-*descriptionname:color:permissionMode:tools:name:$ARGUMENTStests/plugin/test_commands_structure.py::test_arguments_placeholder_presentca-*uae-*create-project.shprinciplesrequirementsgenerate-document-id.sh<!-- DOC-CONTROL-HEADER -->handoffs.commandarckit-claude/commands/risksriskimport 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.mdtemplates-custom.arckit/templates/**Generated by****Generated on****ArcKit Version****Project****Model**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>-*.mdau-dss.mdau-pia.mdpytest tests/plugin/.github/workflows/*# Setup
git fetch origin pull/<N>/head:pr-<N>
git checkout pr-<N>
# B1: missing Document Control heading
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
grep -L "classification scheme\|UK line in the header" arckit-<prefix>/commands/<prefix>-*.md
# B3: generate-document-id.sh mis-invocation
grep -n "generate-document-id.sh [A-Z]\+ --filename" arckit-<prefix>/commands/<prefix>-*.md
# B4: converter drift
python scripts/converter.py && git status --porcelain | grep -v "memory/"
# B5: regime registration (anchored on export blocks to avoid doc-type 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 -oE "regime: '[A-Z]+'" arckit-claude/config/doc-types.mjs | sort -u
# Recipe 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}')
"
# Dual-template parity
diff -rq arckit-claude/templates/ .arckit/templates/ | grep -E "<prefix>-"
# Tests
pytest tests/plugin/ --tb=line -q 2>&1 | tail -10
# Command count check vs CHANGELOG
ls arckit-claude/commands/*.md | wc -lgh pr comment <N> --body "$(cat <<'EOF'
## Code Review
**Verdict:** ...
EOF
)"regime: 'CA''CA'REGIMES| Mistake | Fix |
|---|---|
| Trusting the PR body's "regenerated converter outputs" claim | Always re-run |
| Trusting headline test count claims | Run |
| Reviewing only the canonical files, not converter outputs | Diff |
| Missing the dual-template requirement | |
| Missing classification rendering issue (B2) | Read |
| Verifying CHANGELOG count from prose, not file count | |