TODO — current
最終更新: 2026-05-29 現状: v1.8.166 / ドメイン不変条件を両サーフェス等価化(MCP の入力上限漏れを修正)/ CI グリーン
状態サマリー
#747 に対応(v1.8.164)。「sqlite/mysql/pgsql 対応」という未検証の約束を実測で検証し、 潜んでいたマルチDBバグを修正した:
- 発見・修正:
SqlAlchemyQueryExecutor.write()の INSERT 採番がresult.lastrowid依存で、psycopg2(PostgreSQL)は lastrowid 非対応のためrowcount(=1) にフォールバック。save()が常にid=1を返す重大バグだった → PostgreSQL ではlastval()フォールバックに修正 - 実DB統合テスト
tests/integration/(PostgreSQL/MySQL、各9ケース)を追加。環境変数 未設定ならskip(デフォルトuv run pytestは SQLite のまま高速:466 passed, 9 skipped) - CI に
integration-dbジョブ(postgres:16 / mysql:8 service container)追加 pymysqlを dev 依存に追加(mysql+pymysql://ドライバが未導入だった)- how-to
run-integration-tests.md(EN/JA)追加 - ついでに #541 のリリース how-to の「未公開・メンテナ待ち」誤記(EN/JA)を訂正
直前の対応: #541(PyPI 公開フロー解消・v1.8.163 を PyPI 公開)、#540(FT ループ目的・ 終着点明文化・v1.8.162)、#539(response_model 統一・ v1.8.161)、#553(#578 で実装済みを確認し close)、ハウスキーピング(サンドボックス 5.1G→79M 整理・orphan ブランチ 8 本削除)。フレームワーク本体 466 tests 据え置き。 オープン Issue ゼロ。
オープン PR
なし(main ブランチはクリーン)
オープン Issue
なし(#539 / #540 / #541 / #553 はすべて 2026-05-29 に解消・close)。 提案 PR #545(nene-style governance)のみ未マージで残置。
直近の完了マイルストーン
| バージョン | 主な内容 |
|---|---|
| v1.8.165 | docs/test: 差別化(MCP×HTTP)可視化(#751)— 同一ストアでの HTTP↔MCP パリティテスト + explanation「one UseCase, two surfaces」(EN/JA)。共有する物(UseCase+永続化)/しない物(薄いHTTP層)を明記 |
| v1.8.164 | feat: 実DB統合テスト(#747)— PostgreSQL/MySQL を CI service container で検証。psycopg2 lastrowid 非対応による INSERT 採番バグ(save() が常に id=1)を発見・修正。pymysql 追加 |
| v1.8.163 | feat: PyPI 公開フロー検証(#541)— ビルド検証・CI package-build ジョブ・CHANGELOG 連携・リリース how-to |
| v1.8.162 | docs: FT ループの目的・終着点を明文化(#540)— field-trial-methodology.md(EN/JA) |
| v1.8.161 | fix: handler の response_model 統一(#539)— Note/Tag/Comment に Response モデル定義・OpenAPI スキーマ出力 |
| v1.8.160 | FT282: platform — システム情報を露出しない(セキュリティ診断合格・情報漏洩防止) |
| v1.8.159 | FT281: math — isclose / gcd / factorial(巨大整数 DoS ガード) |
| v1.8.158 | FT280: re — ReDoS 対策(クラッカーペンテスト合格) |
| v1.8.157 | FT279: plistlib — plist 解析(セキュリティ診断合格・XXE 耐性) |
| v1.8.156 | FT278: string — capwords / 定数(ASCII 文字種判定) |
| v1.8.155 | FT277: keyword — iskeyword / issoftkeyword(安全な識別子検証) |
| v1.8.154 | FT276: subprocess — 安全なコマンド実行(診断+ペンテスト合格) |
| v1.8.153 | FT275: cmath — 複素数演算 / 極座標(isfinite ガード・real/imag 分離) |
| v1.8.152 | FT274: colorsys — RGB / HSV 変換(0-1 正規化・範囲検証) |
| v1.8.151 | FT273: marshal — 信頼できないデータに使わない(セキュリティ診断合格・json 代替) |
| v1.8.150 | FT272: tarfile — tar slip / tar bomb / symlink 対策(クラッカーペンテスト合格) |
| v1.8.149 | FT271: stat — モードビット解釈(world-writable/setuid 検出) |
| v1.8.148 | FT270: ssl — create_default_context(セキュリティ診断合格・TLS 検証既定) |
| v1.8.147 | FT269: contextvars — ContextVar(コンテキストローカル状態・Token reset) |
| v1.8.146 | FT268: lzma — compress / decompress(クラッカーペンテスト合格・解凍爆弾対策) |
| v1.8.145 | FT267: glob — パターンマッチ(セキュリティ診断合格・パストラバーサル防御) |
| v1.8.144 | FT266: types — MappingProxyType(読み取り専用ビュー・ライブビュー) |
| v1.8.143 | FT265: zoneinfo — ZoneInfo(IANA タイムゾーン変換・DST 自動) |
| v1.8.142 | FT264: ast.literal_eval — eval の安全な代替(診断+ペンテスト合格) |
| v1.8.141 | FT263: tomllib — TOML 読み込み(読み取り専用・安全な設定パース) |
| v1.8.140 | FT262: graphlib — TopologicalSorter(トポロジカルソート・循環検出) |
| v1.8.139 | FT261: mimetypes — guess_type / アップロード検証(セキュリティ診断合格・Content-Type 非信頼) |
| v1.8.138 | FT260: zipfile — zip slip / zip bomb 対策(クラッカーペンテスト合格) |
| v1.8.137 | FT259: weakref — WeakValueDictionary(弱参照キャッシュの自動退避) |
| v1.8.136 | FT258: random — 非暗号性の実証(セキュリティ診断合格・secrets 推奨) |
| v1.8.135 | FT257: array — typecode / tobytes(typecode 許可リスト・オーバーフロー処理) |
| v1.8.134 | FT256: email.message — ヘッダーインジェクション対策(クラッカーペンテスト合格) |
| v1.8.133 | FT255: sqlite3 — パラメータ化クエリ(セキュリティ診断合格・SQL インジェクション防御) |
| v1.8.132 | FT254: queue — Queue / LifoQueue / PriorityQueue(安定化タプル) |
| v1.8.131 | FT253: copy — copy / deepcopy(浅い/深いコピーの共有参照) |
| v1.8.130 | FT252: json — loads/dumps の堅牢化(診断+ペンテスト合格) |
| v1.8.129 | FT251: fractions — Fraction / limit_denominator(厳密有理数・用途別分母制限) |
| v1.8.128 | FT250: decimal — Decimal / quantize / 丸めモード(金額計算・文字列受け) |
| v1.8.127 | FT249: hmac — new / compare_digest(セキュリティ診断合格・署名検証) |
| v1.8.126 | FT248: string.Formatter — format string 攻撃の防御(クラッカーペンテスト合格) |
| v1.8.125 | FT247: operator — itemgetter / 演算子関数(許可リストディスパッチ) |
| v1.8.124 | FT246: unicodedata — NFKC / category(セキュリティ診断・条件付き合格・homoglyph 限界明示) |
| v1.8.123 | FT245: reprlib — Repr(多軸上限・ログ肥大化防止) |
| v1.8.122 | FT244: html.parser — HTMLParser(クラッカーペンテスト合格・script 除外) |
| v1.8.121 | FT243: uuid — uuid4 / uuid1 / uuid5(セキュリティ診断合格・予測可能性) |
| v1.8.120 | FT242: heapq — heappush / heappop / nlargest / merge(min-heap・merge ソート前提) |
| v1.8.119 | FT241: bisect — bisect_left / insort / 範囲検索(ソート前提検証・left/right) |
| v1.8.118 | FT240: 安全なデシリアライズ — pickle 不使用 / json + Pydantic 検証(診断+ペンテスト合格) |
| v1.8.117 | FT239: statistics — mean / median / stdev / quantiles(StatisticsError 処理・点数上限) |
| v1.8.116 | FT238: calendar — monthrange / weekday / isleap(0=月曜・うるう年規則) |
| v1.8.115 | FT237: http.cookies — SimpleCookie / Morsel(セキュリティ診断合格・セキュア既定) |
| v1.8.114 | FT236: string.Template — substitute / safe_substitute(クラッカーペンテスト合格・SSTI 安全) |
| v1.8.113 | FT235: pprint — pformat / pp(width/depth 制限・JsonValue 型安全) |
| v1.8.112 | FT234: ipaddress — ip_address / ip_network / is_global(セキュリティ診断合格・IP ベース SSRF) |
| v1.8.111 | FT233: textwrap — wrap / fill / shorten / indent(width 制限・長語分割) |
| v1.8.110 | FT232: fnmatch — fnmatch / filter / translate(クラッカーペンテスト合格) |
| v1.8.109 | FT231: shlex — split / quote / join(セキュリティ診断合格・シェルインジェクション中和) |
| v1.8.108 | FT230: difflib — unified_diff / SequenceMatcher / get_close_matches(O(n^2) 入力制限) |
| v1.8.107 | FT229: html — escape / unescape(quote=True 属性コンテキスト安全) |
| v1.8.106 | FT228: urllib.parse — urlparse / urlencode / quote(診断+ペンテスト合格・SSRF 対策) |
| v1.8.105 | FT227: shutil — copy / move / rmtree(resolve + is_relative_to 封じ込め) |
| v1.8.104 | FT226: gzip — compress / decompress / GzipFile(mtime=0・解凍上限) |
| v1.8.103 | FT225: zlib — compress / decompress / crc32(セキュリティ診断合格・解凍爆弾対策) |
| v1.8.102 | FT224: binascii — hexlify / unhexlify / crc32(クラッカーペンテスト合格) |
| v1.8.101 | FT223: base64 — b64encode / urlsafe_b64encode / b64decode(厳格デコード) |
| v1.8.100 | FT222: hashlib — sha256 / pbkdf2_hmac / blake2 / compare_digest(セキュリティ診断合格) |
| v1.8.99 | FT221: tempfile — NamedTemporaryFile / mkstemp / TemporaryDirectory(affix 検証・0o600) |
| v1.8.98 | FT220: logging — Logger / Handler / Formatter / Filter(クラッカーペンテスト合格) |
| v1.8.97 | docs: README / roadmap / reference を v1.8.96 現状に同期、starlette CVE 解消反映 |
| v1.8.96 | FT219: argparse — ArgumentParser / add_argument / parse_args / subcommands(セキュリティ診断合格) |
| v1.8.95 | FT218: configparser — read / write / sections / interpolation |
| v1.8.94 | FT217: csv — reader / writer / DictReader / DictWriter / Sniffer |
| v1.8.93 | FT216: codecs — encode / decode / lookup / IncrementalEncoder(セキュリティ診断・クラッカーペンテスト合格) |
| v1.8.92 | FT215: struct — pack / unpack / calcsize / Struct(フォーマット文字列ホワイトリスト検証・unpack 型変換) |
| v1.8.91 | FT214: io — StringIO / BytesIO / TextIOWrapper / BufferedReader |
| v1.8.90 | FT213: abc — ABC / abstractmethod / register / subclasshook(セキュリティ診断) |
| v1.8.89 | FT212: dataclasses — field / asdict / astuple / replace / post_init |
| v1.8.88 | FT211: typing — TypedDict / Protocol / get_type_hints / Literal |
| v1.8.87 | FT210: contextlib — contextmanager / suppress / ExitStack / nullcontext |
| v1.8.86 | FT209: functools — partial / lru_cache / reduce / wraps |
| v1.8.85 | FT208: itertools — chain / islice / groupby / product / combinations(クラッカーペンテスト) |
| v1.8.84 | FT207: collections — namedtuple / defaultdict / Counter / deque(セキュリティ診断) |
| v1.8.83 | FT206: pathlib — Pure パス解析・パストラバーサル防御 |
| v1.8.82 | FT205: enum — StrEnum・IntEnum・IntFlag・Flag |
| v1.8.81 | FT204: datetime — ISO 8601 パース・タイムゾーン変換(診断+ペンテスト) |
| v1.8.80 | FT203: secrets — セキュア乱数・トークン生成・OTP |
| v1.8.79 | #560/#561: query ヘルパー関数群・RequestScopedContext[T] |
| v1.8.78 | #559: LocalTokenIssuer / LocalTokenIssuerVerifier |
| v1.8.77 | #558: RateLimitStorageProtocol / InMemoryRateLimitStorage |
| v1.8.76 | #557: CompositeAuthMiddleware |
| v1.8.75 | #555/#556: check_not_modified / check_precondition |
| v1.8.74–66 | FT194–202 + deps: starlette 1.0.1(#611, PYSEC-2026-161) |
フィールドトライアル進捗
実施済み: FT1〜FT282(全 282 件)
索引: docs/field-trials/INDEX.md
次のアクション:
- FT283 を開始(283 % 3 = 1 → セキュリティ診断なし、283 % 4 = 3 → クラッカーペンテストなし)
- テーマ候補:
gettextモジュール(メッセージカタログ・i18n)
明日以降の優先タスク
| 優先度 | Issue | タスク | 種別 |
|---|---|---|---|
| — | — | FT は保守 + オンデマンド(4 トリガー時のみ。方法論) | FT |
| — | — | リリース時は v* タグ push → publish.yml が自動公開(手順) | infra |
| 低 | — | PyJWT 推移的 CVE(PYSEC-2025-183)— mcp 修正待ち | 保留 |
改善検討事項
| 課題 | 優先度 | Issue | 備考 |
|---|---|---|---|
| — | #539 | ✅ 2026-05-29 解消(v1.8.161)。Note/Tag/Comment 全ハンドラーに XxxResponse/XxxListResponse を定義し response_model 明示。OpenAPI に 6 レスポンススキーマが出力されることを確認。466 tests 据え置き | |
| — | #540 | ✅ 2026-05-29 解消(v1.8.162)。explanation/field-trial-methodology.md(EN/JA)に目的・3 フェーズ・終着点(網羅スイープ完了→保守+オンデマンド)を明文化。INDEX/roadmap からリンク | |
| — | #541 | ✅ 2026-05-29 解消(v1.8.163)。公開フローは既に稼働中で v1.8.163 を PyPI へ公開(pip install で取得可能)。CI package-build ジョブ・CHANGELOG 連携・how-to 整備 | |
| — | #747 | ✅ 2026-05-29 解消(v1.8.164)。実DB統合テスト(PostgreSQL/MySQL・CI service container)を追加。psycopg2 lastrowid 非対応で save() が常に id=1 を返す重大バグを発見・修正(lastval フォールバック)。pymysql 追加・how-to(EN/JA) | |
| — | — | ✅ 2026-05-29 整理(5.1G→79M)。ft-status.sh --clean-sandbox を追加(.venv/キャッシュ削除・ソース保持・uv sync で再生可)。--clean は dist/ のみで誤記だった | |
| — | — | ✅ 2026-05-29 削除(merged 8 本)。未マージの提案 PR #545 のブランチのみ残置 | |
| ログ秘匿 Filter は形式依存の best-effort | 低 | — | FT220 D3。主防御は SecretStr。how-to に「秘匿は多層防御の保険」を明記予定 |
| http.server Content-Length 上限なし | 低 | — | FT198 診断。デモスコープでは許容 |
| http.client DNS リバインディング未防御 | 中 | — | FT196。本番化時の追加実装 |
| parse_qs vs parse_qsl how-to | 低 | — | FT197。クエリ文字列 how-to に追記予定 |
| PostgreSQL / MySQL 実 DB 統合テスト | 中〜高 | — | CI Docker service ジョブ |
| PyJWT 推移的 CVE(PYSEC-2025-183) | 低 | — | mcp 側の修正を待ち(CI ignore 済み) |
| — | — | ✅ 解消済み(#611, starlette 1.0.1) | |
| — | — | ✅ 2026-05-23 docs 同期 PR で更新 |