技術者倫理 監査ハーネス(ethics-audit)
リポジトリが技術者倫理(IEEE-CS/ACM ソフトウェア工学倫理綱領 第5.2版)に本当に則して いるかを、実コードを読んだ上で・具体項目に照らして・敵対的に検証して採点する。
思想(なぜこの手順か)
RINRI ライセンスの Golden Subroutine が戒めるとおり、倫理を実質の裏付けなく掲げる行為 (ethical grandstanding)は監査の敵である。本ハーネスは次を鉄則とする:
- コードを読んでから判断する — 印象ではなく
file:lineの証跡に基づく。 - 合否を出せる — バッジのラバースタンプではなく、合格も不適合も出す。
- 誤検知を検証で潰す — 各所見を反証エージェントが攻撃し、生き残りだけを確定する。
- 公共の利益が中心 — 迷ったら「最も権限の弱いユーザーがどう害されるか」で判断する。
- 自己評価の道具 — 他者糾弾ではなく、自リポの改善のために使う。
CLI(決定論的スクリプト)
このスキルに同梱の lib/cli.js(Node.js・実行時依存ゼロ)を使う。以降 <SKILL_DIR> は
この SKILL.md があるディレクトリ。実行例:
node <SKILL_DIR>/lib/cli.js scan <repo-path> # ダークパターン等の候補検出
node <SKILL_DIR>/lib/cli.js principles --principle N # 原則Nの項目を供給
node <SKILL_DIR>/lib/cli.js principles --item N.MM # 単一項目を引く
node <SKILL_DIR>/lib/cli.js score --input findings.json # 確定所見を採点
node <SKILL_DIR>/lib/cli.js tweet --input audit.json --label <名前> # 共有下書き生成
出力は既定で JSON(--format text で人間可読)。エラーは stderr に JSON、exit 1。
監査フロー
番号順に、決定論部分は CLI、判断部分はエージェントに委ねる。対象パスが未指定なら カレントリポジトリを対象にする。
Step 0 — スコープ確定と候補収集(まずコードを読む)
- 対象リポのファイル構成を
Glob/Readで把握する。 node <SKILL_DIR>/lib/cli.js scan <repo>を実行し、候補(ScanCandidate[])を得る。 これは判定ではなく候補。以降の判断の出発点にすぎない。scanはルール定義ファイル自体にも一致しうる(自己言及の誤検知)。対象リポの実体で 判断すること。
Step 1 — ファンアウト評価(8原則を分担)
Agent ツールで評価エージェントを 4〜5 体、並行起動する。各エージェントに:
- 担当原則の項目を
principles --principle N --format textで渡す(推奨割当: A=原則1,3 / B=原則2,6 / C=原則4,5 / D=原則7,8)。 - 別途 ダークパターン・ハンターを1体、
02-dark-patterns.mdを渡して起動する。 - Step 0 の候補と、実コードを読む指示を与える。
- 評価観点は
01-principles.md、深刻度基準は03-scoring-rubric.mdを参照させる。
各エージェントは所見を findings JSON で返す。1件の形:
{"itemId":"3.12","severity":"high","file":"src/log.ts","line":5,
"description":"…","evidence":"該当コードの引用","recommendation":"…","confirmed":false}
この段階では confirmed:false(未検証)。証跡(file:line と evidence)を必須とし、
抽象的な非難は捨てさせる。
Step 2 — 敵対的検証(反-grandstanding の中核)
04-adversarial-verification.md に従い、各所見に反証エージェントを割り当てる。
「実コード・文脈を読んだか? これは grandstanding ではないか? 不確実なら反証」を
基準に REFUTE を試みる。生き残った所見のみ confirmed:true にする。棄却理由も記録する。
Step 3 — 決定論的採点
確定所見を集めた findings JSON を一時ファイルに書き、
node <SKILL_DIR>/lib/cli.js score --input <file> で AuditResult(原則別0-100・加重総合・
判定)を得る。スコアは CLI が決定論的に算出する(人が忖度しない)。
Step 4 — レポートとツイート下書き
05-output-format.mdの様式で日本語レポートを提示する(総合・判定・原則別表・重大所見のfile:line引用と是正案・棄却された主な指摘)。- AuditResult JSON を保存し、
node <SKILL_DIR>/lib/cli.js tweet --input <audit.json> --label <リポ名> --format textで 共有下書き(本文+intent URL、#技術者倫理チェックskill)を生成し提示する。 - ツイートは自リポの自己監査結果の共有であることを明示する。他者を糾弾する用途には 使わない(原則6・8/RINRI の精神)。
出力の約束
- すべての確定所見に綱領項目ID(例
3.12)とfile:line証跡を付す。 - critical 所見が1件でもあれば「合格」は出ない(
03-scoring-rubric.md)。 - 監査は自リポ向け。第三者リポを一方的に採点・公開する用途には使わない。
関連
- 綱領本文の知識は
engineering-ethicsスキル(同リポ)を参照。