Contents
TODO
意図的に延期した機能と未決事項の backlog。MVP のスコープは docs/mvp-design.md を参照。
MVP(2026-07-08 全タスク完了)
- [x]
docker/Dockerfile: PostgreSQL + PL/R + R の開発環境(CREATE EXTENSION plrが通ること) — 2026-07-08 検証済み: PostgreSQL 16.14 + PL/R 8.4.8.6 + R 4.2.2(docs/development.md) - [x]
fbsql.control+Makefile(PGXS)+sql/fbsql--0.1.0.sqlの骨組み(CREATE EXTENSION fbsql) — 2026-07-08 完了: fbsql.version() ダミー関数 + pg_regress 1本 + CI組込み済み - [x]
fit_glm()gaussian 実装 +t_gaussianの pg_regress テスト +scripts/parity_reference.R— 2026-07-08 完了: R の stats::glm() と全16列一致(4桁丸め)を確認 - [x]
fit_glm()binomial 対応 +t_binomialテスト — 2026-07-08 完了: logit リンク、z値・AIC 含め R と一致。boolean 応答も検証 - [x] NULL / Complete Case テスト(
t_nulls: n_obs / n_used / n_dropped の検証) — 2026-07-08 完了: 15行中3行除外(n_obs=15, n_used=12, n_dropped=3)を回帰テスト化 - [x] factor テスト(
t_factor: term 名・参照水準が R の既定と一致) — 2026-07-08 完了: genderM / genderOther、参照水準 F、R と全列一致 - [x]
.github/workflows/regress.yml(Docker イメージ上で installcheck) —docker-build.ymlが build + installcheck を実行する形で実現済み(別ファイル不要)
MVP 後(実装順)
- [x]
fit_glm()にmetadata jsonb列(17列目)を実装 +fit_glm_metadataテスト新設 — 2026-07-08 完了: meta_version 1 の全フィールド、既存テストは expected 無変更で通過 - [x]
predict_glm()MVP 第1段階(数値のみ・gaussian・PL/pgSQL 実装) — 2026-07-08 完了: SETOF record + 呼び出し側列定義。R の predict.glm() と一致 - [x]
predict_glm()第2段階: binomial(逆リンク logit)対応 — 2026-07-08 完了: R の predict(type=“response”) と一致。boolean 応答モデルも検証 - [x]
predict_glm()第3段階: factor 対応(xlevels / contrasts の消費、on_new_levels => 'error'|'na'引数、novel level 検出) — 2026-07-08 完了: gaussian / binomial とも数値・factor 混在で R と一致。 これで Running Example(fit → predict)がコア機能として一通り動作 - [x] Running Example 統合テスト(
running_example.sql: customer テーブル、2025 fit → 2026 predict、novel level の error/na)+ README の実装同期 — 2026-07-08 完了: 本体 MVP 到達(docs/mvp-design.mdの到達点セクション参照) - [ ]
predict_glm()の interaction(y ~ x * gender)対応(fit は既に通るため、 解釈不能 term の明示エラーで防御中) - [ ]
on_new_levels => 'error'の novel 検出プローブで relation が複数回実行される 件の解消(1パス化。volatile な relation での整合性) - [ ] PL/R エラーの1行目(
R interpreter expression evaluation error)を整形できるか調査 (メッセージ本体は DETAIL に出ており実害は小さい。優先度低) - [ ] family 追加(poisson → Gamma → その先は論文スコープと相談)
- [ ] 非 canonical link(
binomial(link=probit)等)の family 指定記法 - [ ] profile likelihood 信頼区間(MVP は Wald 固定)
- [ ] R スクリプトと pg_regress expected の自動 diff を CI に追加
- [x]
META.json+Changesの整備 — 2026-07-08 完了(PGXN Meta Spec v1.0.0 準拠、 JSON妥当性・必須フィールド・バージョン整合を確認済み) - [ ]
FbSQL-experimentsリポジトリの作成(ベンチマーク・関連システム比較・論文用テーブル生成) - [ ]
paper/に JSS 原稿の骨組み(fbrglm の paper/ 構成を踏襲) - [ ] Zenodo DOI アーカイブ(本体 + experiments、投稿時)
未決事項(実装前に決める)
- [x] predict 用 metadata の格納形式: 決定(2026-07-08) —
fit_glm()出力の 17列目としてmetadata jsonbを追加(全行同値)。スキーマは meta_version 1: response / term_labels / intercept / data_classes / xlevels / contrasts / coef_terms(フラット列と重複する family 等は持たない)。docs/mvp-design.md§4 - [x] novel factor level ポリシー: 決定(2026-07-08) — metadata ではなく
predict_glm(on_new_levels => 'error'|'na')の引数とする(既定 ‘error'、 fbrglm の設計を踏襲) - [x] 関数の名前空間: 解決(2026-07-08) — 正式APIは
fbsql.fit_glm()。public.fit_glm()は作らない。README・論文ではSET search_path TO fbsql, public;で短く書けることを示す(docs/mvp-design.md§2) - [ ] relation 引数の受け渡し形式の拡張: SQL 文字列(MVP)に加えて regclass (テーブル名直接指定)を許すか
- [ ] CI のベースイメージ: PL/R 入り PostgreSQL の公式イメージは存在しないため、 自前ビルド(docker/Dockerfile)を GHCR に push して CI から使う構成にするか
- [ ] サポートする PostgreSQL バージョン範囲(PL/R のビルド可否に依存)
- [ ] R のバージョン方針: 開発イメージの R は 4.2.2(Debian bookworm)。MVP には 十分だが、論文の Computational details でどのバージョンを報告するか、上げる 場合の手段(ソースビルド / backports)を実装安定後に検討
PGXN 投稿前チェックリスト(投稿はまだしない)
- [ ]
META.jsonを PGXN::Meta::Validator(または pgxn-utils)で正式検証 - [ ] maintainer メールアドレスの確定(現在は fbrglm/CRAN と同じ hotmail を仮置き — 要本人確認)
- [ ] 対応 PostgreSQL バージョン範囲の確定(現在 16 のみ検証のため prereqs は 16.0.0。PL/R が入る他メジャーでの installcheck 後に広げる)
- [ ] 配布アーカイブの作成確認(
git archive --format=zip相当)と PGXN アップロード手順の確認 - [ ] リリースタグ + Zenodo DOI アーカイブ(本体・experiments の両方)
- [ ]
Changesの日付・バージョン確定(現在 0.1.0 unreleased)
論文の Discussion に書くこと(実装しない)
- モデル全体で1値の指標を全行に繰り返すトレードオフ(閉包性 vs 正規化)
- Named Argument(
=>)は標準 SQL ではないことと、標準への示唆 - C 実装の展望
- 木系アンサンブル(
fit_rf/fit_lgbm/fit_xgb)の Atomic Relation 設計例 - weights / offset を初回論文から意図的に除外した理由