run-html-1page Pure Python 検証報告

run-html-1page Pure Python 検証報告

日付: 2026-05-10 Plans.md: Phase 2.5 結論: ✅ 完全 deterministic + sonnet 呼び出し 0 回 を確認

検証目的

Plans.md Phase 2.5 DoD:

任意の md (例: 既存の archive Plans.md) で /run-html-1page を 2 回連続実行し、生成 HTML 2 つの diff が完全に空であることを確認。sonnet 呼び出しが 0 回であることをログで確認

ADR-075 の Pure Python (B 案) 採用後、上記が達成可能であることを実証する。

検証 1: deterministic (diff 空)

異なる md 2 種類について各 2 回ずつ render を実行し、出力 HTML を diff -q で比較。

入力 md style 1 回目 2 回目 diff 結果 行数
Plans.md.archive-2026-05-09-p-review-2phase.md report OK OK ✅ identical 362
reports/run-html-1page-python-spike-2026-05-10.md spec OK OK ✅ identical 481

実行コマンド:

bash /Users/i/.claude.harness-v2/skills/run-html-1page/bin/render.sh \
  /Users/i/.claude.harness-v2/Plans.md.archive-2026-05-09-p-review-2phase.md \
  --style report \
  --out /tmp/run-html-test-archive-1.html
# 同コマンドを 2 回目で /tmp/run-html-test-archive-2.html に出力
diff -q /tmp/run-html-test-archive-1.html /tmp/run-html-test-archive-2.html
# (no output) → 完全一致

deterministic guarantee 成立

検証 2: sonnet 呼び出し 0 回

active flow 内に LLM 呼び出しが構造的に存在しないことを grep で確認 (artifact 内の歴史記述は除く)。

対象ファイル パターン 検出 内訳
skills/run-html-1page/operations/workflow.md sonnet|Agent 3 件 すべて「Architecture 注記」「廃止された旧フロー」節内の歴史記述。active step 4 (bin/render.sh 直起動) には登場せず
skills/run-html-1page/SKILL.md sonnet|Agent 0 件 active flow に LLM 呼び出しなし
skills/run-html-1page/bin/render.py anthropic|claude|sonnet|opus|openai|gpt 0 件 API client import なし

sonnet/LLM 呼び出し 0 回が構造的に保証されている

検証 3: 自己完結性 (補足)

html-constraints.md の制約遵守を確認。

制約 検証 結果
外部 CDN ゼロ `grep -E 'src="https?:// @import url'` を出力 HTML に対し実行
inline <style> のみ head に <style> ブロック、外部 link なし
dark mode 対応 @media (prefers-color-scheme: dark) の存在 ✅ CSS 変数 7 種を上書き
印刷フレンドリー @media print の存在 ✅ ToC/footer 非表示、pre wrap
ToC 自動生成 h2/h3 から anchor 付き ul を生成 ✅ archive Plans (8 entries) / spike report (15 entries) で確認

結論

Phase 2.5 DoD を全項目クリア:

Phase 2 (Python 化) は完了。次は Phase 3 (Cloudflare Pages 連携) に進める状態。

Reference