Skip to content

Latest commit

 

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

fuzz-robust-parser-agent

A robust parser agent graded by a fuzzing (implicit) oracle — part of an evaluation-driven development (EDD) series. Docs are in Japanese.

任意の文字列からカンマ区切りの整数を取り出す parse_int_list(s) を実装するエージェントと、「どんな文字列を渡しても壊れない」ことをランダム入力の大量投入で確かめるオラクル(採点プログラム)。

専門用語を使わない説明は 説明書.md にあります。

概要

「正しい出力」を1つ1つ書き出せない処理(任意入力のパーサ)でも、 当たり前に守るべき約束 = (1) 例外で落ちない (2) 必ず list を返す (3) 要素は int、なら機械的に測れます。 このリポジトリは、その約束を大量のランダム入力で突く ファジング(暗黙オラクル) の実例です。

クイックスタート

必要なもの:Python 3 のみ。リポジトリのルートで実行。

python eval/oracle.py            # 正しい堅牢パーサ(reference)を採点 → PASS
python eval/oracle.py --selftest # オラクル自身を検証(②でFAILが出るのが正常)

→ ①は採点表に PASS、②は最後に ## オラクル判定: PASS。どちらも終了コード 0(②で壊れた実装に FAIL が出るのは正常)。

エージェントの動かし方

.claude/agents/fuzz-robust-parser-agent.md の指示で eval/corpus/candidate.py に parse_int_list(s) を実装し、python eval/oracle.py --candidate candidate で採点。candidate が無くても reference で全工程を再現できます。

しくみ

%%{init: {'theme':'neutral'}}%%
flowchart TD
  P["parse_int_list(s)"] --> R["ランダム文字列を N=5000 本流す"]
  R --> A{"例外を投げた?"}
  A -->|Yes| F["FAIL"]
  A -->|No| B{"list を返す?<br/>要素は全部 int?"}
  B -->|No| F
  B -->|Yes| Z{"全件 通過?"}
  Z -->|Yes| PASS["PASS"]
Loading

合否(eval)

固定種でランダム文字列を多数流し、(1) 無例外 (2) 返り値は list (3) 要素は int をすべて維持。1件でも破れたら FAIL。

ファイル構成

  • .claude/agents/…md … エージェント定義/eval/oracle.py … ファジングオラクル(--selftest 内蔵)
  • eval/corpus/reference.py … 正例/broken_*.py … 既知バグ(陰性対照)
  • design/design.md … 設計の考え方/説明書.md … 専門用語を使わない説明
  • .github/workflows/ci.yml … CI(selftest を自動実行)

自作 AI エージェント集(評価駆動開発の実証)の一つ。背景は design/design.md。

About

ランダム入力の集中砲火で「壊れない」を採点するファジング・オラクル | Robust parser graded by a fuzzing (implicit) oracle

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages