Skip to content

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

Released under the MIT License.