GENERALIZATION ROADMAP (AutonoMath)¶
農業 niche → 汎用 日本制度データ API への転換計画。 対象週: W5-W8 (1000h 成長計画の後半 4 週)。 前提: W1-W4 は [project_jpintel_1000h_plan] に従い「公開品質 / 流入 / 汎用深化 / 顧客 pipeline」を走らせる。このドキュメントはその「汎用深化 + 顧客 pipeline」部分を具体化する。 最終更新: 2026-04-23
1. 定義: 「汎用化 achieved」 とは何か (exit criteria)¶
5 軸 全て green で「汎用」と宣言。どれか一つでも欠けたら宣言しない。
| # | 基準 | 閾値 | 測定方法 |
|---|---|---|---|
| (a) | 非農業 exclusion rules coverage | 50+ rules、うち program-to-program 30 以上 + condition-state 20 以上 | SELECT count(*) FROM exclusion_rules WHERE rule_id NOT LIKE 'agri-%' |
| (b) | adoption.find_similar 動作 |
10,000+ 採択事例に対する類似検索が < 300ms P95 で動く | /v1/adoption/find_similar?unified_id=...&limit=20 を 100 req で P95 計測 |
| (c) | legal / accounting / calendar の 3 endpoint が public | 3 tool 全て MCP + REST で公開、1st fetch 成功 | /v1/legal/items?domain=labor, /v1/accounting/chart, /v1/programs/calendar が 200 返却 |
| (d) | Tier B+ 件数の昇格 | S+A = 584 → 2,000 以上 (quality score ≥ 0.6) | SELECT count(*) FROM programs WHERE tier IN ('S','A') AND quality_score >= 0.6 |
| (e) | enrichment null ratio | 全 10 次元 (A-J) で null < 10% | scripts/audit_nulls.py の平均値 |
(a)+(b)+(c) = W8 最低ライン (「汎用 MVP」)。(d)+(e) = W12 までに補正 (「汎用 GA」)。 W8 で (a)(b)(c) の 3 つが揃わなければ section 6 の Fork B (agri double-down) に切り替える。
2. 現状 gap 定量化¶
2026-04-23 時点。source: README / docs/exclusions.md / research/non_agri_exclusion_schema_gap.md / research/non_agri_unmatched.md / research/jgrants_ingest_plan.md。
| 次元 | current | target | blocker | ETA |
|---|---|---|---|---|
| Agri program-to-program rules | 22 | 22 (done) | — | done ✓ |
| Non-agri program-to-program rules | 13 | 30 | non_agri_matched.json の残 17 件 unified_id 解決 |
W5 3d |
| Condition-state rules | 0 | 27 | schema extension (Option A, 8-10h)。research/non_agri_unmatched.md に 51 placeholders = 実体 27-30 rules 推定 |
W5-W6 |
| Same-program self-mutex rules | 0 | ~15 | schema tweak (AND/OR group key) | W6 |
| gBizINFO 採択事例 ingest | 0 件 | 20K-30K (W8 MVP) / 138K (W12) | PDF per-round scraper (jgrants_ingest_plan.md で詳述済み)。無い CSV、PDF ocr + 正規化が本体 |
W5-W8 |
| Legal items endpoint | 0 / 188 rows prepped | public endpoint + 法令 DB 裏取り 80% | legal_items.json の law フィールドを e-Gov 法令 API で一次裏取り |
W6 |
| Accounting chart endpoint | 0 / 116 accounts | public endpoint + 青色申告要件付 | chart_of_accounts.json の 税区分 verify |
W6 |
| Calendar endpoint | 0 / 122 events | public endpoint + 日次 refresh | calendar_2026.json の source_url 追記、cron 設計 |
W6 |
| Tier B→A promotion (S+A 584 → 2,000) | 8.6% | 29.5% | 7-rung walker で enrichment 拡充 (agri で実績あり) | W7 |
| Prefecture null 4,311 / 6,771 (63.7%) | null 63.7% | null < 40% | scripts/prefecture_walker.py 拡張 + 「全国」フラグ区別 |
W5-W7 |
| enrichment dimension null rate (A-J) | 未測定 | < 10% | scripts/audit_nulls.py 新設 |
W5 d1 (測定) |
| Autonomath 壊れ enriched (9 JSON) | 9 件 | 0 件 | upstream Autonomath 側修正 (autonomath_invalid_enriched.md) |
W5 d1 (依頼) |
3. 汎用化 execution order (dependency graph)¶
graph TD
A[W5 d1: null audit + upstream 9 JSON 修正依頼] --> B[W5 d2-3: schema extension<br/>condition_tag + applies_to_program]
A --> C[W5 d2-3: non_agri_matched 残 17 件 unified_id 手動解決]
B --> D[W5 d4-5: condition-state 27 rules import]
C --> D
D --> E[W6 d1: criteria a 判定 50+ rules ✓]
A --> F[W5-W6: gBizINFO PDF scraper<br/>事業再構築 / ものづくり / IT導入 / 持続化]
F --> G[W6 d4-5: adoption 正規化 + UNI-id match]
G --> H[W7 d1-2: FTS index + embedding index]
H --> I[W7 d3: adoption.find_similar endpoint]
I --> J[W7 d4: criteria b 判定 10K+ ✓]
A --> K[W6 d1-2: legal_items 法令 DB 裏取り<br/>e-Gov 法令 API]
K --> L[W6 d3: legal.items_lookup endpoint]
A --> M[W6 d1-2: accounting chart 税区分 verify]
M --> N[W6 d3: accounting.chart endpoint]
A --> O[W6 d1: calendar source_url 追記 + cron]
O --> P[W6 d2: programs.calendar endpoint]
L --> Q[W6 d5: criteria c 判定 3 endpoints ✓]
N --> Q
P --> Q
E --> R{W8 exit gate}
J --> R
Q --> R
R -->|all green| S[汎用 MVP 宣言]
R -->|any red| T[Fork B agri double-down]
Critical path: A → F → G → H → I → J (採択事例の ingest)。 Schema extension (B) と legal/accounting/calendar (K/M/O) は並列可能。 採択事例 PDF scraper が最大のリスク — 単独で lag すると (b) が落ちる。
4. per-task effort estimates (W5-W8, 合計 ~240h / ~6 時間/日 × 40 day)¶
W5-W8 は 1000h 計画の後半 250h 枠。残り 10h は予備 (incident / review / 返信)。
W5 (60h) — schema + foundation¶
| task | h | detail |
|---|---|---|
T1. null audit script (scripts/audit_nulls.py) |
4 | A-J 10 次元の null ratio を meta に出す。(e) 基準 baseline |
| T2. Autonomath 9 JSON 修正依頼 + re-ingest | 2 | autonomath_invalid_enriched.md の verify loop 実行 |
T3. schema extension: condition_tag + applies_to_program カラム追加 + migration 004 |
10 | Option A (non_agri_exclusion_schema_gap.md)。rules API の return 型拡張、FTS/index 影響確認 |
| T4. Non-agri 残 17 件 unified_id 手動解決 | 8 | research/non_agri_unmatched.md の 51 placeholders から condition_state (27) を分離 → 実 program 17 件を fuzzy match + 目視 |
| T5. Condition-state 27 rules import | 8 | T3 の新スキーマで rules_import_condition.py |
| T6. Prefecture walker 拡張 | 12 | 全国 フラグと null を区別、6,771 件の 4,311 null を 7-rung walker で再 resolve |
| T7. gBizINFO PDF scraper (事業再構築 rounds 8-13) | 16 | jgrants_ingest_plan.md に沿う。PDF 正規化は pdfplumber + column 別 parser |
W6 (70h) — endpoints + adoption ingest 続き¶
| task | h | detail |
|---|---|---|
| T8. gBizINFO scraper (ものづくり + IT導入 + 持続化) | 24 | 各 PDF 事務局の parser 3 個、column drift に頑健に。target = 計 20K-30K record |
| T9. adoption dedup + UNI-id match | 16 | 法人番号優先 + NFKC + 株式会社正規化。match rate < 60% なら industry/prefecture で faceted search に倒す |
| T10. Legal items endpoint + e-Gov 裏取り | 10 | 188 rows の law を e-Gov 法令 API で一次 source_url 紐付け。紐付かないものは source_status=unverified tag |
| T11. Accounting chart endpoint | 6 | 116 accounts + tax_division + 青色申告要件 JSON を REST expose |
| T12. Calendar endpoint + 日次 cron | 8 | 122 events に source_url 追記、Fly Cron で毎日 refresh、diff を changelog に吐く |
| T13. 非農業 mutex rules 検証テスト | 6 | 実 unified_id で /v1/exclusions/check を 50 req 叩いて regression |
W7 (70h) — adoption.find_similar + quality¶
| task | h | detail |
|---|---|---|
| T14. adoption FTS5 index | 10 | plan_title + plan_summary + industry の trigram |
| T15. embedding index (multilingual-e5-small, 384 dim) | 14 | DuckDB + hnswlib or sqlite-vss。local inference で cost ゼロ |
T16. adoption.find_similar endpoint 実装 |
12 | unified_id → 同 program の過去採択 + cosine top-k、return は mask 済み |
T17. programs.find_similar_by_adoption |
8 | 逆引き (採択事例 → 候補制度) |
| T18. Tier B→A 昇格 walker | 16 | enrichment A-J 次元を 7-rung で再 crawl、quality_score 再計算、2,000 target |
| T19. MCP wrapper 追加 (find_similar / legal / accounting / calendar) | 10 | FastMCP に 4 tool 追加、mcp-tools.md 更新 |
W8 (40h) — gate + docs + fallback¶
| task | h | detail |
|---|---|---|
| T20. Measurement run (criteria a/b/c/d/e) | 6 | 数字を /meta に反映、docs を更新 |
| T21. docs/generalization 章追加 | 8 | api-reference に legal/accounting/calendar/adoption 4 節追加 |
| T22. 長文記事 (汎用化向け: 非農業サンプル 10 例) | 14 | 各 5K 字、1000h 計画の流入 W2 と合流 |
| T23. regression 59 test → 120 test | 8 | 各 endpoint に unit + contract test |
| T24. W8 exit review + fork decision | 4 | (a)(b)(c) 判定 → GA 宣言 or Fork B |
合計: 60 + 70 + 70 + 40 = 240h (250h 枠に対し 10h 余裕)。
5. リスク / 越えられない壁¶
R1. gBizINFO / 事務局 PDF の license drift¶
/v1/adoptionが依存する PDF は各事務局 (中企庁・SMRJ・商工会議所連合会) が改元・年度切替で URL を捨てる。snapshot を独自 S3 に保存 (source_checksum+fetched_at付) しないと再生成不能になる。- Fallback: license 撤回時は
source_url=archive.org/web/...を一次とし、endpoint 継続。再配布条件 (出典明記 + 事業者名 mask) は現状の README に既記載。
R2. legal_items.json の primary source reliability¶
- 188 items の
lawフィールド (例: 「労働基準法第15条第1項」) は文字列で、e-Gov 法令 API との紐付けは未実装。「Autonomath 内製 legal KB」を そのまま ship するのは危険 — 条文改正の反映漏れが起きる可能性。 - 判定: T10 で e-Gov 法令 API 裏取り率が 80% 未満なら endpoint を不採用、docs に「legal_items は beta、source 要確認」と明記し MCP tool に入れない。(c) の判定では 3/3 揃わないので代替として
programs.compliance_tagsなど別角度を候補に。
R3. unified_registry の語彙ドリフト (memory ref: project_registry_vocab_drift)¶
- target_types / funding_purpose / crop_categories は英日混在 (
corporationvs法人、taxvs税制等)。非農業 rules を足す前に ALIAS 正規化を matcher 側で実装 しないと、program_a=...-seisyainと registry のunified_idがヒットしない事案が起きる。 - 対処: T4 の前に
scripts/registry_vocab_normalize.pyで ALIAS dict を dump → 照合。W5 d1 に 2h 追加 (T1 の隣で実施)。
R4. Autonomath 8-9 broken enriched JSON¶
- upstream 責任だが、修正が間に合わないと Tier regrade が 9 件分古い まま。
- 対処: T2 で修正依頼を出しつつ、修正待ちの間は last-good cache を
data/fallback_enriched/に凍結 (upstream が落ちても 6,771 件 ingest 可能)。
R5. 採択事例の法人名 mask 要件¶
- 個情法では法人名は個情とみなされないが、代表者氏名 (個人事業主) が混ざる PDF がある (持続化補助金 R6 17 回 11,928 件は個人含む)。mask 漏れ = 個情法抵触リスク。
- 対処: T9 で
is_individualフラグ判定 (業種 "農業" + 法人番号 null など) → 個人はentity_nameを「非公開 (個人事業主)」に置換。
R6. 非農業 condition-state の絶対数推定ズレ¶
- section 2 で「27 rules」と書いたが、
research/non_agri_unmatched.md51 placeholders のうち真の condition_state は 27-35 の幅。27 は下限。 - 対処: T4 の手動分類で確定、target を (27, 35) range で exit gate を「20+ で green」に緩める。
6. 汎用化に失敗した場合の Fork B: Agri double-down¶
W8 exit gate で (a)(b)(c) の 2 つ以上が red なら Fork B へ切替 (1 つ red なら W9 で追撃)。
Fork B の positioning¶
「the agri-subsidy AI layer」— 幅より深さ。
Fork B scope (W9-W12 の 250h 再割当)¶
| task | h | detail |
|---|---|---|
| F1. 採択事例 ingest を 農業関連のみ ~12K | 40 | 全 138K から業種 "農業" フィルタ。事業再構築 / ものづくり / スーパー L / 持続化 (農業者) |
| F2. 農政 timeline | 30 | 2015-2026 の農政転換 (認定農業者制度改正、スマート農業促進法、みどり戦略) を programs にリンク |
F3. 農業 KPI (agri.crop_kpi) |
20 | 47 都道府県 × 30 作物の作付面積 / 単収 / 所得を e-Stat から ingest |
| F4. 農業 SaaS 連携 (agri-note / farmnote / kubota KSAS との API bridge) | 40 | OEM ではなく、彼らの内製 RAG から叩ける agri 特化 endpoint |
| F5. 農業向け長文 20 本 (作物 × 制度) | 60 | programmatic 禁止、深い記事 5K 字 × 20 |
| F6. docs rebrand (AGRI-FIRST タイトル) | 20 | landing + pricing に「農業 AI 特化」を明示 |
| F7. 価格再設計 | 10 | 汎用 ¥0.5/req → agri 特化 ¥1.0/req に単価倍増 (代替少、niche premium) |
| F8. 予備 | 30 | incident / review |
Fork B の勝ち筋¶
- 農業 niche は競合ゼロ (Jグランツ MCP は汎用、agri-SaaS は制度 API 無)。
- 客単価は上がり (agri 特化 ¥1.0/req で ¥50K-200K/月のヘビーユーザー想定)、ターゲット client は agri-tech startup 50 社 + 農協系 IT 部隊。
- Y1 ARR ¥1,000 万 の中央値は同じ、下限 ¥100 万の riskfloor を上げられる (agri is proven niche)。
Fork B の敗け条件¶
- 5 年後に agri niche 市場が伸びない → pivot 先 (不動産 / 税制 / 士業) を 2028 に検討。
7. Measurement gate (W8 exit)¶
W8 d5 に以下を 自動測定 し、一発で判定。
# criteria a
sqlite3 data/jpintel.db "SELECT count(*) FROM exclusion_rules WHERE rule_id NOT LIKE 'agri-%'"
# ≥ 50 で green
# criteria b
curl -s "http://localhost:8000/v1/adoption/find_similar?unified_id=UNI-keiei-kaishi-shikin&limit=20" | jq '.results | length'
curl -s "http://localhost:8000/meta" | jq '.adoption_total'
# length ≥ 20, adoption_total ≥ 10000 で green
# criteria c
for ep in legal/items accounting/chart programs/calendar; do
code=$(curl -s -o /dev/null -w "%{http_code}" "http://localhost:8000/v1/$ep")
echo "$ep $code"
done
# 3 つとも 200 で green
# criteria d
sqlite3 data/jpintel.db "SELECT count(*) FROM programs WHERE tier IN ('S','A') AND quality_score >= 0.6"
# ≥ 2000 で green (この d は W12 まで後ろ倒し可)
# criteria e
python3 scripts/audit_nulls.py --dimensions A,B,C,D,E,F,G,H,I,J --threshold 0.1
# 全次元 < 10% で green
Decision tree¶
graph LR
W8[W8 d5 measurement] --> Q1{a,b,c 全 green?}
Q1 -->|Yes| MVP[汎用 MVP 宣言<br/>Month 3 launch pitch に反映]
Q1 -->|2 ok 1 red| W9[W9 で残 1 項目追撃]
Q1 -->|1 ok 2 red| ForkB[Fork B: agri double-down]
Q1 -->|0 ok 3 red| Stop[全面再設計<br/>1000h 計画 revise]
MVP --> Q2{d,e 全 green?}
Q2 -->|Yes W12| GA[汎用 GA 宣言]
Q2 -->|No| MVP2[MVP 継続、W13-W16 で d,e 追撃]
宣言可能 claim: - MVP: "AutonoMath exposes 50+ non-agri exclusions, 10K+ adoption records, legal/accounting/calendar" - GA: 上記 + "Tier S/A 2,000+ programs, enrichment null < 10%"
宣言前はマーケ文言に「汎用」「日本制度データ API フル」を使わない — agri-focused のまま。README.md#7 の Month 2+ 記述を「W8 exit で達成予定」に変更済みとする (このファイル生成と同時に更新する候補)。
8. 付記¶
- 本ファイルは W5 開始時に再点検。gBizINFO PDF scraper の h 見積は actual run で ±30% 振れる可能性あり、W5 d3 で T7 の進捗から W6 を再計画。
- Fork B に入った場合でも T1 (null audit) / T2 (9 JSON 修正) / T6 (prefecture walker) / T18 (Tier 昇格) は共通資産として継続。
- 関連 memory:
project_jpintel_1000h_plan,project_jpintel_1000h_gaps,project_jpintel_trademark_intel_risk(商標衝突は汎用化前に rebrand 要否決定)。 - Preview endpoints (legal / accounting / calendar) の contract-only scaffold は既に配置済み (
docs/preview_endpoints.md)。JPINTEL_ENABLE_PREVIEW_ENDPOINTS=trueで 501 応答がマウントされ、OpenAPI に露出。W6-W8 の T10/T11/T12 は この router を埋める 作業になる (新設 route は最小)。
最終更新: 2026-04-23 (初版) Author: Claude (executor for AutonoMath)