Releases: infosign/compeito
Release list
v2.6.0
🔗 v2.6.0 — Cross-tenant associations, definition reverse-lookup, conformance improvements
A feature-rich release centred on multi-tenant CASE navigation and definition reverse-lookup. No breaking changes.
Features
Cross-tenant CFAssociation — resolve and display other-institution links (#1, #2)
- CFAssociations whose destination lives in another tenant are resolved server-side and rendered in the tree right pane with an "Other institution ↗" badge that switches to the target tenant's tree on click.
- Private-tenant targets are fully hidden — no title, URI, link, or count is surfaced (case A).
- Reverse reference: items in the shared framework show a "Referenced by (other institutions)" section listing every public tenant that has linked to them — so you can see which universities have adopted a given competency at a glance.
- Fixed cross-tenant UUID collision (node_uri-first classification, P1).
Definition reverse-lookup — navigate from a definition to the items using it (#9, #11, #12, #13)
- CFSubject (subject/分野): a subject's detail page now lists "Items setting this subject" (JSONB
subject_uri @>containment, GIN-indexedix_cf_items_subject_uri_gin). - CFItemType (item type/種別): an item-type's detail page now lists "Items of this type" (FK
cf_item_type_id, btree-indexedix_cf_items_tenant_item_type). - Both follow scope plan B: standalone
/uri/page shows the tenant-wide list; the tree right pane (definition selected via the current document's Definitions section) shows only the current document's items — keeping the pane consistent with the tree and the query cheap. - Top-N inline (SSR) + count + self-perpetuating HTMX "Show more" pagination. The shared
subject_items.htmlfragment serves both types.
Improvements
CASE v1.1 conformance backlog — 5 items resolved (#5–#8)
- C14/C15: undefined sub-paths under the CASE API now return a 404
unknownobjectimsx response; unhandled errors return 500internal_server_errorimsx response (previously plain Starlette defaults). - C11:
imsx_codeMinorFieldNamenow carries the offending parameter name (sort,orderBy,filter,fields,limit,offset, or the missing field name) instead of always defaulting to"sourcedId". - C12:
ext:associationType values are validated against the official pattern^ext:[a-zA-Z0-9.\-_]+$; non-conforming values (e.g.ext:日本語) are skipped with a warning. - C8: unexpected
caseVersionvalues are warned on import; the value is kept as-is to preserve round-trip fidelity.
Performance
- CASE import refactored to bulk-load: N+1 eliminated, batch flush (#perf).
- Two new indexes:
ix_cf_items_subject_uri_gin(GIN/jsonb_path_ops for subject reverse-lookup) andix_cf_items_tenant_item_type(btree for item-type reverse-lookup — Postgres does not auto-index FK columns).
Documentation
Round-trip fidelity matrix (#3) and spec audit (#4)
- New
docs/spec/round-trip-fidelity.md: per-field ✓/△/✗ matrix across CASE JSON, Excel, and CSV paths for every resource type. - Full doc ↔ implementation audit across all areas (API, DB schema, Web UI, CLI, CSV/Excel import); stale descriptions updated in batch.
web-ui.mdgains a consolidated "what shows where, under what conditions" table covering every conditional/relational section and its surface-based scoping rules.
Fixes
- Scroll detail pane to top when selecting a different item (#1 pre-release).
Full Changelog: v2.5.0...v2.6.0
🔗 v2.6.0 — クロステナント連携・定義リソース逆参照・conformance 改善
テナント横断ナビゲーションと定義リソース逆参照を中心とした機能追加リリース。破壊的変更なし。
Features
クロステナント CFAssociation — 他機関リンクの解決表示 (#1, #2)
- 別テナントを destination にする CFAssociation をサーバー側で解決し、ツリーペインに「他機関 ↗」バッジ付きリンクとして表示。クリックで相手テナントのツリーへ切替。
- プライベートテナントへの参照は完全非表示(title・URI・リンク・件数いずれも出さない)。
- 逆参照:共通フレームワークの項目に「参照元(他機関)」セクションを追加。どの大学がその到達目標を採用しているかが一覧で分かる。
- cross-tenant の UUID 衝突問題を node_uri キーで解決(P1 修正)。
定義リソース逆参照 — 定義から使っている項目へ (#9, #11, #12, #13)
- CFSubject(分野): 分野詳細ページに「この分野を設定している項目」一覧を追加。JSONB
subject_uri @>包含クエリ + GIN 索引(ix_cf_items_subject_uri_gin)で大規模フレームワークでも高速。 - CFItemType(種別): 種別詳細ページに「この種別の項目」一覧を追加。FK
cf_item_type_id+ btree 索引(ix_cf_items_tenant_item_type)。 - 案B スコープ:単独
/uri/ページ = テナント横断、ツリーペイン(Definitions から選択) = 現ドキュメントに限定。ペインのツリーとの整合を保ち、クエリも軽い。 - 上位N件 SSR + 件数 + 自己再帰 HTMX「もっと見る」ページング。
subject_items.htmlフラグメントを両種別で共用。
Improvements
CASE v1.1 conformance backlog — 5件解消 (#5–#8)
- C14/C15: CASE API パスの未定義サブパスに 404
unknownobjectimsx 形式、未捕捉エラーに 500internal_server_errorimsx 形式を返す(従来は Starlette 既定のプレーン応答)。 - C11:
imsx_codeMinorFieldNameが実フィールド名(sort/orderBy/filter/fields/limit/offset/欠落フィールド名)を返すように。従来は常に"sourcedId"固定。 - C12:
ext:associationType を公式パターン^ext:[a-zA-Z0-9.\-_]+$で検証。不正値(例:ext:日本語)は skip + warning。 - C8: 想定外の
caseVersion値を import 時に警告。値は保持して round-trip 忠実度を維持。
パフォーマンス
- CASE import を一括化: N+1 解消 + バッチ flush。
- 索引を2本追加:
ix_cf_items_subject_uri_gin(GIN/jsonb_path_ops、分野逆参照用)とix_cf_items_tenant_item_type(btree、種別逆参照用。Postgres は FK 列に索引を自動生成しない)。
Documentation
往復忠実度マトリクス (#3) と仕様監査 (#4)
docs/spec/round-trip-fidelity.md新規作成: CASE JSON / Excel / CSV の各経路において全リソース・全フィールドの往復保持可否を ✓/△/✗ でまとめたマトリクス。- 実装との整合性を全領域(API / DB スキーマ / Web UI / CLI / CSV・Excel インポート)で監査し、追従漏れを一括修正。
web-ui.mdに「どの情報がどの画面にどの条件で出るか」総まとめ表を追加(サーフェス別スコープ・条件を網羅)。
Fixes
- 別アイテム選択時に詳細ペインを先頭へスクロール (#1 pre-release)。
Full Changelog: v2.5.0...v2.6.0
🎨 v2.5.0 — Detail card redesign / 詳細カードの情報設計刷新
🎨 v2.5.0 — Detail card redesign
A UI-focused release. The resource detail card (tree right pane and /uri/ permalink pages) is redesigned around a user-first information hierarchy. No schema changes, no API changes, no breaking changes.
Improvements
Detail card information hierarchy redesign (#233)
- The detail card now leads with what the resource is: a type badge row (+ adoption-status badge / coding-scheme chip where applicable) and the resource name as the card heading — CFItem's fullStatement, CFDocument's title, a CFAssociation's "origin → destination" summary, and so on.
- A copy-chip cluster sits directly under the heading (Identifier and Permalink on every type; CFItem / CFDocument additionally their CASE API URL), so integration URLs stay one click away.
- Fields are grouped into scannable zones: content (description / notes) → Classification (item type, education level, keywords, subject…) → Relations (owning document, hierarchy, related items, rubrics) → Technical details (identifier, uri, license, dates, extensions) as a muted always-open section at the bottom.
- The CASE
urifield (preserved from external imports, distinct from the local permalink) is now displayed for CFItem / CFDocument as well. - Readability: lighter field labels with breathing room between label and value, section separators, and a 2-column grid for short scalar fields. A rubric's criteria table now renders right after its description.
Web layer cleanups (#225, #226)
- Removed the unused tree-children fragment route.
- Consolidated detail-pane context building into a shared helper used by the fragment, deep-link SSR, and
/uri/paths.
Documentation
CASE primer and data-model overview (#228–#232)
- Added an introduction to the CASE standard (background, data model / API, v1.0 vs v1.1 differences, design policy) and an illustrated data-model overview (relationship diagrams, URI conventions, rubrics, common pitfalls).
- Follow-up precision fixes: rubric diagram multiplicities aligned with the spec (optional arrays, 0..*), singular/plural reference semantics clarified, and an
isTranslationOfpitfalls entry.
Maintenance docs (#227)
- Updated the web-ui subagent definition to the current design.
Maintenance
Public-source hygiene (#224)
- Removed downstream project names from public sources and docs.
Full Changelog: v2.4.1...v2.5.0
🎨 v2.5.0 — 詳細カードの情報設計刷新
UI 中心のリリース。リソース詳細カード(ツリービュー右ペインと /uri/ パーマリンクページ)を「ユーザーが見たい順」の情報階層に再設計しました。スキーマ変更・API 変更・破壊的変更はありません。
Improvements
詳細カードの情報階層リデザイン (#233)
- カードの先頭でそのリソースが何かが分かるように: 種別バッジ行(必要に応じて adoptionStatus バッジ / コードチップを併置)+ リソース名をカード見出しとして表示 — CFItem は fullStatement、CFDocument は title、CFAssociation は「origin → destination」要約など。
- 見出し直下にコピー用チップ列(全タイプで識別子・パーマリンク、CFItem / CFDocument はさらに CASE API URL)。連携用 URL はワンクリックでコピーできます。
- フィールドを読みやすいゾーンに整理: 内容(説明・ノート)→ 分類(アイテム種別・教育段階・キーワード・教科 …)→ 関連情報(所属ドキュメント・階層・関連アイテム・ルーブリック)→ 技術情報(識別子・uri・ライセンス・日時・extensions。最下部の薄色・常時表示セクション)。
- CASE の
uriフィールド(外部インポート時に保持される元 URI。ローカルのパーマリンクとは別物)を CFItem / CFDocument でも表示するようになりました。 - 可読性改善: ラベルを軽量化しラベル・値間に余白を追加、セクション区切り線、短いスカラー値の 2 カラムグリッド化。ルーブリックの評価基準テーブルは description の直後に表示されます。
Web レイヤーの整理 (#225, #226)
- 未使用のツリー children フラグメントルートを削除。
- 詳細ペインのコンテキスト構築を共通ヘルパーに集約(フラグメント / deep-link SSR /
/uri/で共用)。
Documentation
CASE 入門とデータモデル概観 (#228–#232)
- CASE 標準の入門(背景・データモデル/API・v1.0/v1.1 差・設計方針)とデータモデル概観(関係図・URI 規約・ルーブリック・つまずき集)を追加。
- フォローアップの正確化: ルーブリック図の多重度を仕様どおり任意配列(0..*)に修正、参照の単数/複数の整理、翻訳(isTranslationOf)のつまずきポイント追加。
メンテナンスドキュメント (#227)
- web-ui サブエージェント定義を現行設計に更新。
Maintenance
公開ソースの衛生 (#224)
- 公開ソース / docs から下流プロジェクト名を除去。
Full Changelog: v2.4.1...v2.5.0
v2.4.1 — Security fix & CASE conformance
🔒 v2.4.1 — Security fix & CASE conformance
A patch release. Includes a security fix (stored DOM-XSS) — upgrading is recommended. No schema changes, no breaking changes.
Bug Fixes
Stored DOM-XSS in the copy-to-clipboard button (#222) — security
- The copy button interpolated its value into an inline
onclick="...writeText('…')"JavaScript-string context. Jinja autoescape protects HTML, but the browser HTML-decodes the attribute before running it as JavaScript, so a value imported via a CFPackage (identifier / uri / association origin·destination node identifier) could break out of the JS string and execute arbitrary script when a viewer opened the detail page. The value now lives in an autoescapeddata-copyattribute read by a delegated handler — no server value is ever placed in inline JavaScript. Regression test added.
CFItemAssociations returns the full association set (#220)
GET /CFItemAssociations/{id}no longer applies a defaultlimit=100. The official CASE v1.1 contract defines no pagination on this endpoint, so a conformant client expects every association; the previous default silently truncated large sets.limit/offsetremain as an opt-in compeito extension (applied only when explicitly given).
Documentation (#221, #223)
- Recorded the CASE v1.1 conformance audit results in the conformance backlog (and documented the naive-datetime → UTC assumption).
- Added a "Security posture" section to the API spec: the CASE API / Web UI are unauthenticated and read-only; a "private" tenant is unlisted, not access-controlled (don't store confidential data there);
import --urlis operator/CLI-only (deployments exposing it to untrusted callers must add SSRF protection); output-escaping policy.
Full Changelog: v2.4.0...v2.4.1
🔒 v2.4.1 — セキュリティ修正と CASE 適合性
パッチリリース。セキュリティ修正(保存型 DOM-XSS)を含むためアップグレード推奨。 スキーマ変更・破壊的変更はありません。
Bug Fixes
コピーボタンの保存型 DOM-XSS (#222) — セキュリティ
- コピーボタンが値をインラインの
onclick="...writeText('…')"(JavaScript 文字列コンテキスト)に埋め込んでいた。Jinja autoescape は HTML を保護するが、ブラウザは onclick 属性を HTML デコードしてから JavaScript として実行するため、CFPackage 経由でインポートした値(識別子 / URI / アソシエーションの origin・destination node identifier)が JS 文字列を脱出し、詳細ページを開いた閲覧者のブラウザで任意スクリプトを実行できた。値は autoescape されるdata-copy属性に置き、委譲ハンドラが読む方式に変更(サーバー値をインライン JS に一切入れない)。回帰テスト追加。
CFItemAssociations が関連を全件返す (#220)
GET /CFItemAssociations/{id}の既定limit=100を廃止。公式 CASE v1.1 はこのエンドポイントにページネーションを定義しておらず、適合クライアントは全件を期待する。従来の既定は大きな集合を黙って切り詰めていた。limit/offsetは compeito 拡張として残置(明示指定時のみ適用)。
Documentation (#221, #223)
- CASE v1.1 適合性監査の結果を conformance backlog に反映(naive datetime → UTC 仮定も明文化)。
- API spec に「セキュリティ前提」節を追加: CASE API / Web UI は認証なし・読み取り専用、private テナントは非掲載であってアクセス制御ではない(機密データを置かない)、
import --urlは操作者/CLI 専用(非信頼者に開放する配備は SSRF 対策が必要)、出力エスケープ方針。
Full Changelog: v2.4.0...v2.4.1
v2.4.0 — Manual ordering & cross-framework navigation
🧭 v2.4.0 — Manual ordering & cross-framework navigation
Two Web UI features. Includes a database migration (additive, non-breaking) — run alembic upgrade head on deploy. No breaking changes.
Features
Manual list ordering — display_order (#217)
- Tenants and documents can be given an optional
display_orderso an operator can pin/arrange the tenant list and framework list without renaming (no "number-prefix" hacks). Smaller = higher; unset (the default) sorts after the ordered entries, then alphabetically. - A compeito-local display field — not a CASE field: excluded from CASE/CSV/xlsx export and preserved on re-import.
- Set it via the CLI:
tenant update --display-order N/--clear-order, and the newdoc update --display-order N/--clear-order. The web lists and the CLI lists both honor it. - Adds a
display_ordercolumn totenantsandcf_documents(nullable; existing rows keep today's ordering). Migrationc704faa62b4f.
Cross-document hierarchy in the detail pane (#219)
- When a large framework is split across multiple documents, an item's
isChildOfparents/children that live in another framework now surface in the detail pane as "Parent (other framework)" / "Child (other framework)" sections — each a one-click switch to that framework's tree (or an external link-out). The tree itself stays per-document and unchanged. - Builds on the v2.3.0 cross-reference routing (same document → in-pane nav, same tenant other framework → tree switch, external → new tab). Resolution is tenant-wide over
isChildOf, indexed. - Hardening: association node identifiers are normalized to lowercase on import, so uppercase UUIDs from external CASE sources still resolve in related / cross-document lookups.
Documentation (#218)
- Synced
web-ui.mdandCLAUDE.mdwith the tree-redesign work (rubrics section, cross-reference routing, 404 guard, self-hosted assets, directory layout).
Full Changelog: v2.3.1...v2.4.0
🧭 v2.4.0 — 手動並び順とフレームワーク横断ナビ
Web UI の2機能。DBマイグレーションを含みます(追加のみ・非破壊)— デプロイ時に alembic upgrade head を実行してください。破壊的変更はありません。
Features
一覧の手動並び順 — display_order (#217)
- テナントとドキュメントに任意の
display_orderを設定でき、テナント一覧とフレームワーク一覧を名前を変えずに(番号プレフィックス等の妥協なしに)ピン留め・並べ替えできる。小さいほど上、未設定(既定)は明示順の下にアルファベット順。 - compeito ローカルの表示専用フィールドで CASE フィールドではない:CASE/CSV/xlsx export に出さず、再 import で保持。
- 設定は CLI:
tenant update --display-order N/--clear-order、新規doc update --display-order N/--clear-order。Web 一覧も CLI 一覧も反映。 tenants/cf_documentsにdisplay_orderカラムを追加(nullable・既存行は現状の並びを維持)。マイグレーションc704faa62b4f。
詳細ペインのクロス文書階層 (#219)
- 大規模フレームワークを複数ドキュメントに分割した場合、
isChildOfの親/子が別フレームワークに在ると、詳細ペインに「上位(別フレームワーク)/下位(別フレームワーク)」節として表示。各エントリはそのフレームワークのツリーへのワンクリック切替(または外部リンクアウト)。ツリー本体は per-doc のまま無改修。 - v2.3.0 の相互参照の出し分け(同doc=ペイン内ナビ / 同テナント別FW=ツリー切替 / 外部=別タブ)の上に構築。解決はテナント横断の
isChildOf(インデックス利用)。 - 堅牢化: import 時に association の node identifier を小文字正規化し、外部 CASE ソースの大文字 UUID でも関連/横断解決にヒットするようにした。
Documentation (#218)
- ツリー再設計の実装に合わせて
web-ui.mdとCLAUDE.mdを同期(ルーブリック節・相互参照の出し分け・404ガード・自己ホストアセット・ディレクトリ構成)。
Full Changelog: v2.3.1...v2.4.0
v2.3.1 — iOS tree scroll fix
🩹 v2.3.1 — iOS tree scroll fix
A patch release fixing a mobile display issue. No breaking changes, no schema changes.
Bug Fixes
Tree scrolled on load on iOS Safari (#215, #216)
- Opening a framework tree page on iOS Safari scrolled the tree pane slightly on first paint (without any user interaction). iOS Safari fires a
toggleevent for initially-open<details>nodes on load, which triggered the "scroll the expanded node into view" nudge. The nudge is now gated to user-initiated expands only, so the tree stays put on load while a real tap still scrolls children into view.
Full Changelog: v2.3.0...v2.3.1
🩹 v2.3.1 — iOS のツリー読み込み時スクロール修正
モバイル表示の不具合を修正するパッチリリース。破壊的変更・スキーマ変更はありません。
Bug Fixes
iOS Safari でツリーが読み込み時にスクロールする問題 (#215, #216)
- iPhone Safari でフレームワークのツリーページを開くと、初回描画でツリーペインが少し下にスクロールしていた(ユーザーは未操作)。iOS Safari は初期
openの<details>に対し読み込み時toggleを発火することがあり、「展開したノードの子を見せるスクロールナッジ」が走ってしまうのが原因。ナッジをユーザー操作起因の展開のときだけに限定し、読み込み時は動かず・実際のタップ展開では従来どおり子要素が見えるようにした。
Full Changelog: v2.3.0...v2.3.1
v2.3.0 — Tree Navigation Overhaul & Self-Hosted Assets
🌳 v2.3.0 — Tree Navigation Overhaul & Self-Hosted Assets
This release reworks the framework tree view into a persistent navigation shell: the right pane now shows the full detail for any resource, and every cross-reference navigates within the tree with the URL kept in sync. It also removes all external CDN dependencies (self-hosted HTMX, font, and Tailwind) and displays the CASE extensions field. No breaking changes.
Features
Tree detail navigation redesign (#200, #202, #203, #204, #205, #206, #208, #209, #211, #212, #213, #214)
- The right pane renders the same full-detail card as the
/uri/permalink page (shared partial); the tree stays as a persistent shell instead of navigating away. - Fully server-side-rendered tree using native
<details>expand/collapse — the core navigation works without JavaScript. - Clicking a node swaps the pane and syncs the URL (
/cftree/doc/{doc}/item/{id}); sharing / reloading / back reconstructs the same view via SSR. - New "Definitions" and "Rubrics" sections in the tree — item types / concepts / subjects / licenses / association groupings, and rubric → criterion → level — all navigable as nodes.
- Cross-references in the pane are classified and routed consistently: same document → in-pane navigation, same-tenant other framework → switch the tree to that framework, external → open in a new tab (http(s) only). Applies to related items, definition references, rubric ↔ item links, and association origin/destination nodes.
- The selected node auto-scrolls into view and auto-expands its ancestors; nodes already on screen don't jump.
Self-hosted assets — no external CDN (#198, #199)
- HTMX and the Quicksand font are now self-hosted (0BSD / SIL OFL 1.1).
- Tailwind CSS is built into a local stylesheet at image-build time; native local dev falls back to the Tailwind CDN.
extensions display (#196, #197)
- The CASE
extensionsfield (framework-specific data) is now shown on detail views with a recursive, type-aware renderer. - The tree detail pane also shows related association groupings.
Improvements
Path-neutral navigation labels (#213)
- Labels now read correctly regardless of how you arrived ("View linked item", "Go to Top Page").
Maintenance (#201)
- Added local working-file patterns to
.gitignore.
Full Changelog: v2.2.0...v2.3.0
🌳 v2.3.0 — ツリー動線の刷新と外部アセットの自己ホスト
フレームワークのツリービューを「常駐ナビゲーションシェル」に作り替えたリリースです。右ペインが任意リソースのフル詳細を表示し、ペイン内のあらゆる相互参照がツリーを離れずに辿れるようになり、URL も同期します。あわせて外部 CDN 依存を全廃(HTMX・フォント・Tailwind を自己ホスト)し、CASE の extensions フィールドを表示します。破壊的変更はありません。
Features
ツリー詳細の動線再設計 (#200, #202, #203, #204, #205, #206, #208, #209, #211, #212, #213, #214)
- 右ペインが
/uri/単独ページと同じフル詳細カードを描画(共通パーシャル)。ツリーは離脱せず常駐シェルに。 - 全ノードをサーバーサイドレンダリングし、ネイティブ
<details>で開閉 — 中核ナビは JavaScript 無しでも動作。 - ノードをクリックするとペインを差し替え URL を同期(
/cftree/doc/{doc}/item/{id})。共有・リロード・戻るは SSR で同一ビューを再構築。 - ツリーに 「定義」 と 「ルーブリック」 セクションを新設 — アイテムタイプ / コンセプト / 教科 / ライセンス / アソシエーショングルーピング、および ルーブリック → 評価基準 → 評価レベル — をすべて選択可能ノードとして配置。
- ペイン内の相互参照を分類して一貫した遷移に:同一ドキュメント → ペイン内ナビ、同一テナントの別フレームワーク → そのフレームワークのツリーへ切替、外部 → 別タブ(http(s) のみ)。関連アイテム・定義参照・ルーブリック⇄アイテム・アソシエーションの origin/destination に適用。
- 選択ノードは自動スクロールで可視化&祖先を自動展開。すでに画面内のノードは動かさない。
外部アセットの自己ホスト — 外部 CDN 撤去 (#198, #199)
- HTMX と Quicksand フォントを自己ホスト化(0BSD / SIL OFL 1.1)。
- Tailwind CSS はイメージビルド時にローカル CSS へビルド。ネイティブ開発時は Tailwind CDN にフォールバック。
extensions 表示 (#196, #197)
- CASE の
extensions(フレームワーク独自データ)を、型に応じた再帰レンダラーで詳細画面に表示。 - ツリー詳細ペインにも関連の grouping を表示。
Improvements
経路非依存のナビゲーションラベル (#213)
- 来訪経路に依存せず自然に読めるラベルに(「対象アイテムを表示」「トップページを表示」)。
Maintenance (#201)
- ローカル作業ファイルのパターンを
.gitignoreに追加。
Full Changelog: v2.2.0...v2.3.0
v2.2.0 — CASE v1.1 Query API & Conformance
📋 v2.2.0 — CASE v1.1 Query API & Conformance
A feature release that rounds out CASE v1.1 conformance on the read API: the CFDocuments listing now supports sort / orderBy / filter / fields and an X-Total-Count header, and the CASE v1.1 optional fields (notes, alternativeLabel, extensions) are now persisted and round-trip end to end. Also includes a Web UI enhancement for associations and several fixes. No breaking changes.
Features
CASE v1.1 optional fields — notes / alternativeLabel / extensions (#191)
notes(CFDocument / CFItem / CFAssociation),alternativeLabel(CFItem), andextensions(all resources + container-levelCFPackage/CFDefinitions) are now persisted and round-trip through CASE JSON import/export and the API responses.- New
?strict=1output mode onGET /CFPackages/{id}for strict-schema output.
GET /CFDocuments query parameters (#192, #193)
sort/orderBy/filter/fields(IMS/OneRoster-style); invalid values return400.filtersupports scalar predicates plus case-insensitive string equality and thesubject(JSONB array) field.X-Total-Countresponse header (total afterfilter, before pagination).- Added a CASE v1.1 conformance backlog document tracking the remaining strict-conformance items.
Web UI — associations & concept keywords (#189)
- Item detail page now shows related association groupings.
- Concept keywords are rendered as chips/badges.
Bug Fixes
Import robustness (#188)
- Fixed a spurious
licenseURI"not found" warning on CASE import.
CLI (#195)
tenant update's "no option specified" error now lists--slug/--clear-slug.
Documentation (#190, #194)
- Synced the docs with the implementation: persistence of
notes/extensions, CSV export headers, Phase 3 status, and parent-scoped rubric uniqueness. - Generalized test docstrings (#190).
Full Changelog: v2.1.0...v2.2.0
📋 v2.2.0 — CASE v1.1 クエリ API と適合性
CASE v1.1 の読み取り API 適合を仕上げる機能リリース。CFDocuments 一覧が sort / orderBy / filter / fields と X-Total-Count ヘッダーに対応し、CASE v1.1 のオプションフィールド(notes / alternativeLabel / extensions)が永続化され端から端まで往復するようになりました。関連の Web UI 改善といくつかの修正も含みます。破壊的変更はありません。
Features
CASE v1.1 オプションフィールド — notes / alternativeLabel / extensions (#191)
notes(CFDocument / CFItem / CFAssociation)、alternativeLabel(CFItem)、extensions(全リソース + コンテナレベルのCFPackage/CFDefinitions)を永続化し、CASE JSON の import/export と API レスポンスで往復するようになりました。GET /CFPackages/{id}に厳密スキーマ出力用の?strict=1モードを追加。
GET /CFDocuments クエリパラメータ (#192, #193)
sort/orderBy/filter/fields(IMS/OneRoster 形式)。不正値は400。filterはスカラー述語に加え、大小無視の文字列等価とsubject(JSONB 配列)に対応。X-Total-Countレスポンスヘッダー(filter適用後・ページネーション前の総件数)。- 残る厳密適合項目を追跡する CASE v1.1 conformance backlog 文書を追加。
Web UI — 関連とコンセプトキーワード (#189)
- 項目詳細ページに関連の association grouping を表示。
- コンセプトキーワードをチップ/バッジ表示に。
Bug Fixes
インポートの堅牢性 (#188)
- CASE import で
licenseURIの誤った「not found」警告を解消。
CLI (#195)
tenant updateのオプション未指定エラーに--slug/--clear-slugを明記。
Documentation (#190, #194)
- ドキュメントを実装と同期:
notes/extensionsの永続化、CSV エクスポートのヘッダー、Phase 3 ステータス、ルーブリックの親スコープ一意制約。 - テスト docstring の汎用化 (#190)。
Full Changelog: v2.1.0...v2.2.0
v2.1.0 — OpenCASE & OpenSALT Interoperability
🔗 v2.1.0 — OpenCASE & OpenSALT Interoperability
A feature release centered on framework interoperability with OpenCASE and OpenSALT — lossless CASE JSON round-trip, brand-new OpenSALT Excel (.xlsx) import/export, a CASE v1.1 Service Discovery endpoint, and tenant slug URLs — plus an important multi-tenant data-integrity fix for rubrics.
The operator CLI's import/export commands were redesigned. This is a breaking change for the CLI only — there are no Web UI / CASE API changes.
⚠️ Breaking Changes
CLI import/export redesign (#185)
import case-url/import case-fileare unified intoimport case(--url|--file)import csv-rubric/export csv-rubric→import rubric/export rubricexport csv --format→export csv --profile- Operator CLI only; no Web UI / CASE API changes.
Features
OpenSALT Excel (.xlsx) interoperability (#186)
- New
import xlsx/export xlsxcommands for OpenSALT's 3-sheet workbook (CF Doc / CF Item / CF Association), preserving CFItemType / educationLevel / hierarchy (smartLevel) that OpenSALT's CSV drops. - Verified against a running OpenSALT (items, Japanese text, hierarchy, and item types all round-trip).
- New
import csv --profileoverride to pin the CSV format explicitly.
OpenCASE round-trip — lossless CASE JSON (#174, #175, #176, #177, #178, #179, #180, #181, #182)
- CFPackage import → export now round-trips with no loss of information (CFDocumentURI on CFItems, CFPackageURI on CFDocument, integer scores emitted as int, verbatim preservation of source URIs, and CASE-conformant acceptance of LinkURI.title differences).
CASE v1.1 Service Discovery (#173)
- Added the FR-2.12 service discovery endpoint.
Tenant slug URLs (#170)
- Tenants can be addressed by a
/{slug}/alias (e.g./ikenohata-u/) in addition to the UUID.
CASE import/export commands (#163, #165)
- Import CASE from a local file or URL; export a CASE CFPackage JSON.
Other (#169, #167, #161, #171)
tenant create --idto pin a tenant UUID (#169)- CSV
#identifiermetadata directive to pin the CFDocument UUID (#167) - Effective license shown on detail pages (#161)
- Sticky tenant URL form (#171)
Bug Fixes
Multi-tenant data integrity (#187)
- Fixed tenant isolation for rubric criterion / level: a different tenant importing the same rubric no longer steals the existing tenant's criteria / levels.
/uriresolution was hardened for the new parent-scoped uniqueness.
Import robustness (#168, #164, #182, #159, #166)
- Empty-CSV updates are now non-destructive (#168)
- Corrected v1.0 detection (#164, #182, #159)
cf_rubric_criteria.cf_item_idchanged to ON DELETE SET NULL (#166)
Documentation (#162, #183, #184, #172, #160, #158)
- OpenCASE interoperability guide (#162)
- Round-trip status / OpenSALT format investigation (#183)
- CLI redesign memo (#184)
- Phase 3 restructured around the OpenCASE gap analysis (#172)
- README / architecture rewritten from an interoperability perspective (#160, #158)
Maintenance (#174)
- Added the OpenCASE round-trip baseline test (#174)
Full Changelog: v2.0.2...v2.1.0
🔗 v2.1.0 — OpenCASE / OpenSALT 相互運用
OpenCASE および OpenSALT とのフレームワーク相互運用を軸にした機能リリース — CASE JSON の無損失 round-trip、新規の OpenSALT Excel (.xlsx) import/export、CASE v1.1 サービスディスカバリ、テナント slug URL — に加え、ルーブリックのマルチテナント データ整合性の重要な修正を含む。
運用 CLI の import/export コマンドを再設計した。これは CLI のみの破壊的変更で、Web UI / CASE API に変更はない。
⚠️ Breaking Changes
CLI import/export 再設計 (#185)
import case-url/import case-fileをimport case(--url|--file)に統合import csv-rubric/export csv-rubric→import rubric/export rubricexport csv --format→export csv --profile- 運用 CLI のみの変更。Web UI / CASE API に変更はありません。
Features
OpenSALT Excel (.xlsx) 相互運用 (#186)
import xlsx/export xlsxを追加。OpenSALT の 3 シート(CF Doc / CF Item / CF Association)形式に対応し、CSV では失われる CFItemType / educationLevel / 階層 (smartLevel) を保持。- 実 OpenSALT で取り込みを検証(items・日本語・階層・item type を復元)。
import csv --profileで CSV 形式を明示指定可能に。
OpenCASE round-trip — 無損失 CASE JSON (#174, #175, #176, #177, #178, #179, #180, #181, #182)
- CFPackage の import → export が情報量を保ったまま往復(CFItem への CFDocumentURI、CFDocument への CFPackageURI、整数 score の int emit、source URI の verbatim 保持、LinkURI.title の仕様適合受容)。
CASE v1.1 サービスディスカバリ (#173)
- FR-2.12 のサービスディスカバリエンドポイントを追加。
テナント slug URL (#170)
- UUID に加え
/{slug}/(例/ikenohata-u/)の URL 別名でアクセス可能に。
CASE import/export コマンド (#163, #165)
- ローカルファイル / URL からの CASE インポート、CASE CFPackage JSON エクスポート。
その他 (#169, #167, #161, #171)
tenant create --idで UUID を明示指定 (#169)- CSV
#identifierメタデータディレクティブで CFDocument UUID を固定 (#167) - 詳細ページに実効ライセンスを表示 (#161)
- tenant URL form の sticky 化 (#171)
Bug Fixes
マルチテナント データ整合性 (#187)
- ルーブリック criterion / level のテナント分離を修正。別テナントが同じルーブリックを import しても既存テナントの criteria / levels を奪わなくなった。複合ユニーク化に合わせて
/uri解決も堅牢化。
インポートの堅牢化 (#168, #164, #182, #159, #166)
- 空 CSV 更新を非破壊化 (#168)
- v1.0 誤検出の補正 (#164, #182, #159)
cf_rubric_criteria.cf_item_idを ON DELETE SET NULL に (#166)
Documentation (#162, #183, #184, #172, #160, #158)
- OpenCASE 相互運用ガイド (#162)
- round-trip status / OpenSALT 形式の調査 (#183)
- CLI 再設計メモ (#184)
- Phase 3 を OpenCASE ギャップ分析ベースで再構成 (#172)
- README / architecture の相互運用視点リライト (#160, #158)
Maintenance (#174)
- OpenCASE round-trip baseline テストを追加 (#174)
Full Changelog: v2.0.2...v2.1.0
v2.0.2 — Mobile UX Polish
📱 v2.0.2 — Mobile UX Polish
A patch release improving the Web UI experience on smartphones. All fixes were uncovered through real-device testing on iPhone after playground.compeito.org went public — viewing competency frameworks on mobile revealed several layout issues that didn't show up on desktop.
No API changes. No breaking changes for clients.
Highlights
- 📲 Detail pane now visible on mobile — tapping a tree node swaps in the detail content and smooth-scrolls to it, instead of requiring a navigation to a separate page.
- 🃏 Framework list switches to cards on mobile — long titles no longer collapse into a sliver of vertical text within a cramped table column.
- 🪶 Header icon stays its proper size — flex shrink no longer crushes the COMPEITO icon when titles wrap to multiple lines.
- 🏷 Status badges wrap to their own line on mobile —
Adopted/CFItemetc. no longer cling to the end of a wrapped title.
Bug Fixes
Mobile: detail pane is now visible, tree list works without page navigation (#154)
Previously, /{tenant}/cftree/doc/{doc-uuid} hid the right pane on mobile (hidden md:block) and tapping a tree item navigated to a separate /uri/{item-uuid} page. Lost context, awkward back-button flow.
Now the layout stacks on mobile (tree on top with max-h-[50vh], detail below), HTMX runs in both layouts, and on mobile the page smooth-scrolls to the detail pane after a tap. The <a href="/uri/..."> fallback is preserved for non-JS clients, middle-click, and ⌘-click.
Mobile: framework list renders as cards instead of a 4-column table (#154)
The table layout squeezed long framework titles into narrow columns on mobile, sometimes forcing characters to wrap one-per-line. The mobile breakpoint now renders a card list (title + last-updated / item count / rubric count meta row); desktop keeps the existing table.
Mobile: header icon no longer shrinks when titles wrap (#155)
The COMPEITO icon (h-7 w-7) lost its size when the framework title wrapped to multiple lines, because the flex container allowed it to shrink. Adding shrink-0 to the icon link and wrapping the heading in <span class="min-w-0"> keeps the icon at full size; the layout switches to items-start on mobile so the icon top-aligns with the title's first line.
Mobile: status badges wrap to a new line below the title (#155, #157)
Adopted / Draft / Deprecated on the tree page header, and the resource-type badge (CFItem / CFDocument / etc.) on the URI detail page, were inline-block and ended up jammed against the end of a wrapped title on mobile. A <br class="md:hidden"> inserted between the title and the first badge now puts badges on their own line on mobile while preserving the inline layout on desktop.
Mobile: minor header icon vertical alignment polish (#156)
After switching to items-start for the mobile layout, the icon visually appeared slightly above the title's first line of glyphs due to the line-height padding above the cap-height. A mt-1 md:mt-0 on the icon link aligns it with the first line of text on mobile, with no effect on desktop.
Full Changelog: v2.0.1...v2.0.2
📱 v2.0.2 — スマホ UX 改善
スマホでの Web UI 体験を改善する patch リリース。すべての修正は playground.compeito.org 公開後の iPhone 実機検証で発見された — デスクトップでは気にならなかったレイアウト問題がモバイルでは目立った。
API 変更なし。クライアントへの破壊的変更なし。
ハイライト
- 📲 スマホで詳細ペインが表示されるように — ツリーのアイテムタップで詳細をスワップしてスムーズスクロール。別ページへの遷移は不要に。
- 🃏 フレームワーク一覧がスマホでカード表示に — 長いタイトルがテーブルの狭いカラムに押し込まれて縦に折り返す問題を解消。
- 🪶 ヘッダーアイコンが正しいサイズに — タイトル折り返し時の flex shrink でアイコンが潰れる症状を修正。
- 🏷 ステータスバッジがスマホで独立した行に —
Adopted/CFItem等が折り返したタイトル末尾に貼り付く問題を解消。
Bug Fixes
スマホで詳細ペインが表示されるように、ツリービューがページ遷移なしで動作 (#154)
旧仕様では /{tenant}/cftree/doc/{doc-uuid} の右ペインがモバイルで hidden md:block により非表示。ツリーアイテムをタップすると /uri/{item-uuid} への別ページ遷移。コンテキストを失う、戻るボタンの動作が分かりにくい等の UX 問題。
修正後はモバイルでも縦積み(ツリー上 max-h-[50vh]、詳細下)でレイアウト。HTMX はモバイル/デスクトップ両方で動作、スマホではタップ後に詳細ペインへスムーズスクロール。<a href="/uri/..."> フォールバックは非 JS / 中クリック / ⌘+クリック用に維持。
フレームワーク一覧をスマホでカード表示に (#154)
旧仕様では 4 カラムテーブルがモバイル幅で圧縮され、長いフレームワーク名のカラムで文字が縦に折り返す症状。モバイルブレークポイントではカード形式(タイトル + 最終更新 / アイテム数 / ルーブリック数のメタ行)、デスクトップは従来のテーブルを維持。
ヘッダーアイコンがタイトル折り返し時に縮小される問題を修正 (#155)
タイトルが長くて折り返した時、<img class="h-7 w-7"> でも flex shrink でアイコンが潰されていた。アイコンを包む <a> に shrink-0 を追加、タイトル側を <span class="min-w-0"> でラップして縮小を分離。モバイルでは items-start でアイコンをタイトル 1 行目に揃え、デスクトップは items-center。
ステータスバッジをスマホで独立した行に表示 (#155, #157)
ツリーページの Adopted / Draft / Deprecated バッジと、URI 詳細ページの resource_type バッジ(CFItem / CFDocument 等)が inline-block でモバイルでは折り返しタイトル末尾に貼り付いていた。タイトルと最初のバッジの間に <br class="md:hidden"> を挿入し、モバイルではバッジが独立した行に表示されるように。デスクトップは従来通り同一行。
ヘッダーアイコンの縦位置を微調整 (#156)
モバイルで items-start にした結果、text-2xl の line-height (32px) と font-size (24px) の差で、アイコンがタイトルのグリフより 4px 程度上に浮いて見えていた。アイコンを包む <a> に mt-1 md:mt-0 を追加して 1 行目のグリフと視覚的に揃える。
Full Changelog: v2.0.1...v2.0.2
v2.0.1 — Open Badge Factory Interoperability
🐛 v2.0.1 — Open Badge Factory Interoperability
A patch release focused on CASE v1.1 spec compliance and Open Badge Factory interoperability. Discovered while registering playground.compeito.org as a CASE source in Open Badge Factory shortly after the v2.0.0 / press release launch.
⚠️ Note on response shape change
TheGET /CFPackages/{id}response no longer wraps the payload in a{"CFPackage": {...}}object. The CFPackageDType is returned at the top level (CASE v1.1 spec / OpenSALT compatible). This is a breaking change for clients that readbody["CFPackage"]. We are issuing it as a patch release because v2.0.0 has been public for only 3 days, no production integrations rely on the old shape, and the previous behavior was a misreading of the spec. See Bug Fixes below for migration details.
Highlights
- 🤝 Open Badge Factory interoperability confirmed — registering a COMPEITO framework on OBF now displays items correctly in the CASE picker. Both fixes below were uncovered through this real-world integration test.
- 📐 CASE v1.1 spec compliance —
/CFPackages/{id}response now matches the spec (no wrapper). Aligns with OpenSALT, the de facto CASE implementation. - 🌐 Content negotiation on
/uri/{uuid}—LinkURIDType.uriworks as a true network-resolvable URI: browsers see HTML, CASE clients get JSON via 303 redirect.
Bug Fixes
/CFPackages/{id} response shape now matches CASE v1.1 spec (#153)
Breaking change. The response previously wrapped the payload in {"CFPackage": {...}}. CASE v1.1 CFPackageDType is defined with CFDocument / CFItems / CFAssociations / CFDefinitions / CFRubrics at the top level (no wrapper). OpenSALT follows the spec; the wrapper made COMPEITO's CFPackage unparseable by spec-conforming clients.
This was the cause of Open Badge Factory's CASE picker showing an empty document list when registering playground.compeito.org (OpenSALT-hosted frameworks displayed correctly).
- {"CFPackage": {"CFDocument": {...}, "CFItems": [...], ...}}
+ {"CFDocument": {...}, "CFItems": [...], "CFAssociations": [...], "CFDefinitions": {...}, "CFRubrics": [...]}Migration: clients reading body["CFPackage"]["CFDocument"] must now read body["CFDocument"] directly. The internal import path (_validate_cf_package) continues to accept both shapes, so round-trip import/export from external sources is unaffected.
/uri/{uuid} Accept-based content negotiation (#152)
/{tenant}/uri/{uuid} is returned in LinkURIDType.uri as the canonical "network-resolvable URI" per CASE v1.1. Previously the handler always returned HTML, breaking CASE clients (including Open Badge Factory) that fetched the URI with Accept: application/json.
The handler now inspects Accept:
| Accept header | Response |
|---|---|
Contains application/json or application/ld+json AND does NOT contain text/html |
303 See Other to the matching CASE API endpoint (e.g., CFItem → /{tenant}/ims/case/v1p1/CFItems/{uuid}) |
Browsers (text/html present) / */* / no Accept |
HTML detail page (unchanged) |
| CFRubricCriterion / CFRubricCriterionLevel (no individual JSON endpoint) | HTML, regardless of Accept |
Improvements
import_case_from_dict split out from import_case_package (#150)
Refactored the external CASE import so callers can supply an already-fetched CFPackage dict without going through the HTTP fetch path. Useful for downstream services that obtain the payload independently that obtain the payload independently. import_case_package(url, ...) keeps the same signature and behavior; the new import_case_from_dict(data, ...) is purely additive.
Documentation
OpenSALT positioning rewritten with current 2026 state (#149)
Reflects the actual state of OpenSALT as of mid-2026: its latest stable release (3.2.0, September 2023) targets CASE v1.0, while v1.1 work is actively underway on the develop branch but not yet released. COMPEITO's positioning is reframed from "v1.0 vs v1.1" into "full-featured editor vs lightweight API distribution server" — a complementary relationship rather than a competitive one.
Spec docs updated for response-shape and content-negotiation changes
docs/spec/api-spec.md—/CFPackages/{id}response shape, deviation note, content negotiation section.docs/spec/web-ui.md—/uri/{uuid}behavior, cross-link to api-spec.md.docs/spec/api-examples.md— example CFPackage response updated.
Full Changelog: v2.0.0...v2.0.1
🐛 v2.0.1 — Open Badge Factory との相互運用性
CASE v1.1 仕様準拠と Open Badge Factory との相互運用性にフォーカスした patch リリース。v2.0.0 / プレスリリース公開直後、playground.compeito.org を Open Badge Factory に CASE ソースとして登録する過程で発見された 2 件の問題を修正。
⚠️ レスポンス形式の破壊的変更について
GET /CFPackages/{id}のレスポンスを{"CFPackage": {...}}でラップせず、CFPackageDType をトップレベルで返すように変更(CASE v1.1 仕様 / OpenSALT 互換)。body["CFPackage"]を読んでいた既存クライアントは影響を受ける。v2.0.0 公開から 3 日で実利用者が存在しないこと、旧挙動が仕様の誤読であったことから patch リリースとして扱う。マイグレーション詳細は下記の Bug Fixes を参照。
ハイライト
- 🤝 Open Badge Factory との接続確認 — COMPEITO のフレームワークを OBF に登録し、CASE picker でアイテムが正しく表示されることを確認。下記 2 件の修正はこの実環境テストで発見された。
- 📐 CASE v1.1 仕様準拠 —
/CFPackages/{id}のレスポンスを仕様準拠形式(ラッパーなし)に修正。OpenSALT(CASE のデファクト実装)と同形式になった。 - 🌐
/uri/{uuid}のコンテントネゴシエーション —LinkURIDType.uriが "network-resolvable URI" として機能するように。ブラウザには HTML、CASE クライアントには 303 リダイレクトで JSON を返す。
Bug Fixes
/CFPackages/{id} のレスポンス形式を CASE v1.1 仕様準拠に修正 (#153)
破壊的変更。 従来は {"CFPackage": {...}} でラップしていたが、CASE v1.1 の CFPackageDType は CFDocument / CFItems / CFAssociations / CFDefinitions / CFRubrics をトップレベルに持つ(ラッパーなし)。OpenSALT も仕様通り。ラッパーがあることで仕様準拠クライアントは COMPEITO の CFPackage を解釈できなかった。
これが playground.compeito.org を Open Badge Factory の CASE picker に登録するとドキュメント一覧が空配列になる問題の原因(OpenSALT ホストのフレームワークは正しく表示されていた)。
- {"CFPackage": {"CFDocument": {...}, "CFItems": [...], ...}}
+ {"CFDocument": {...}, "CFItems": [...], "CFAssociations": [...], "CFDefinitions": {...}, "CFRubrics": [...]}マイグレーション: body["CFPackage"]["CFDocument"] を参照していたクライアントは body["CFDocument"] を直接参照する形に変更が必要。内部のインポート処理(_validate_cf_package)は新旧両形式を受理し続けるため、外部ソースからのインポート / エクスポート往復には影響なし。
/uri/{uuid} で Accept ベースのコンテントネゴシエーション (#152)
/{tenant}/uri/{uuid} は CASE v1.1 仕様の LinkURIDType.uri で返される正規 "network-resolvable URI"。従来はハンドラが常に HTML を返していたため、Accept: application/json で URI を fetch する CASE クライアント(Open Badge Factory 含む)がレスポンスを解釈できなかった。
ハンドラが Accept を判定するようになった:
| Accept ヘッダ | レスポンス |
|---|---|
application/json または application/ld+json を含み、かつ text/html を含まない |
該当 CASE API エンドポイントへ 303 See Other(例: CFItem → /{tenant}/ims/case/v1p1/CFItems/{uuid}) |
ブラウザ(text/html を含む)/ */* / Accept 未指定 |
HTML 詳細ページ(従来通り) |
| CFRubricCriterion / CFRubricCriterionLevel(個別 JSON エンドポイントなし) | Accept に関わらず HTML |
Improvements
import_case_from_dict を import_case_package から分離 (#150)
外部 CASE インポート処理を fetch と persist の 2 段に分割。取得済み CFPackage dict を持つ呼び出し元が、HTTP fetch を経由せずに永続化処理だけを呼べるようになった。import_case_package(url, ...) のシグネチャと挙動は不変、新規 import_case_from_dict(data, ...) は加算のみ。
Documentation
OpenSALT のポジショニング記述を 2026 年現在の状態に更新 (#149)
2026 年中盤時点での OpenSALT の実状を反映: 最新安定リリース(3.2.0、2023 年 9 月)は CASE v1.0 対応、develop ブランチで v1.1 対応が活発に進行中だが正式リリースは未だ。COMPEITO のポジションを「v1.0 vs v1.1」の対立軸ではなく「フル機能エディタ vs 軽量 API 配信サーバー」の補完関係として書き直し。
レスポンス形式・コンテントネゴシエーション変更に伴う仕様書更新
docs/spec/api-spec.md—/CFPackages/{id}レスポンス形式、Deviation 注記、コンテントネゴシエーション節を更新。docs/spec/web-ui.md—/uri/{uuid}の挙動説明を更新、api-spec.md へクロスリンク追加。docs/spec/api-examples.md— CFPackage の例レスポンスを更新。
Full Changelog: v2.0.0...v2.0.1