このドキュメントは P3 Phase H(API 凍結設計)の着手メモです。 目的は、1.0 で固定する契約を「実装の現状」と「未決定事項」に分けて棚卸しし、Phase I の実装対象を明確化することです。
paclo.core / paclo.decode-ext)の棚卸しpaclo.core(凍結候補)bpf
(bpf form)nilnil:udp :tcp :icmp :icmp6 :arp :ip :ipv4 :ip6 :ipv6)ex-infopackets
(packets opts)opts の主要契約:
:path または :device のいずれか(両方は不可):filter は string | keyword | vector | nil:decode? true で :decoded または :decode-error を付与:xform は (sequence xform stream) と同等に適用capture->seq のデフォルト停止条件(:max 100 / :max-time-ms 10000 / :idle-max-ms 3000)を継承:decoded がある要素には decode-ext/apply! を適用write-pcap!
(write-pcap! packets out)byte-array または {:bytes ... :sec ... :usec ...} の seqout へ PCAP 書き込み。out が空なら ex-infolist-devices
(list-devices){:name "...", :desc "..."} の seqpaclo.decode-ext(凍結候補)register! [k f]: hook を登録(同キー再登録は上書き+末尾へ)unregister! [k]: hook を削除installed []: 登録キー列を返すapply! [m]: 条件付きで hook を順適用
m が map、m に :decoded があり :decode-error が無いpaclo.pcap / paclo.parse / paclo.proto.* は内部実装 namespace 扱いpaclo.core と paclo.decode-ext を公開 API 面として明示する対象コマンド:
examples.pcap-filterexamples.pcap-statsexamples.flow-topnexamples.dns-qpsexamples.dns-topn共通終了コード(examples.common 由来):
1: 必須引数不足(usage)2: 入力 PCAP 不在3: 列挙値バリデーションエラー(group/mode/metric/format など)4: フラグ/数値引数の不正共通出力契約:
edn / jsonl / csv)paclo.core/bpf)論理演算:
[:and expr ...][:or expr ...][:not expr]プロトコル:
:udp :tcp :icmp :icmp6 :arp:ip :ipv4 :ip6 :ipv6[:proto <keyword>]アドレス:
[:host "..."][:src-host "..."][:dst-host "..."][:net "..."][:src-net "..."][:dst-net "..."]ポート:
[:port N][:src-port N][:dst-port N][:port-range A B][:src-port-range A B][:dst-port-range A B]エラー挙動:
ex-infoNumberFormatException 起点で失敗P3 目標(ROADMAP):
2026-02-23 時点の実装状況:
deps.edn の基準 Clojure は 1.12.1macos-latest で運用(runner 世代は GitHub 側で管理)ubuntu-24.04-arm で CI ジョブを導入済み(2026-02-23 に continue-on-error を解除して必須ゲート化)arm64 必須ゲート化の判定基準(2026-02-23 確定):
arm64-monitor が 95% 以上 success(workflow run 単位)clojure -M:test / dns-ext smoke / perf-gate の arm64 実行時間が x86_64 比 1.5 倍以内continue-on-error を解除し、compatibility-matrix に arm64 required job を追加して 1 週間観測arm64-monitor を required 化。観測継続し、基準未達が続く場合は閾値/構成を再調整する基準値(既存ベースライン):
mid-50k 合成 PCAP(decode?=true): 879.9ms(2025-12-04 記録)1.0 向け運用値:
<= 1.2s> 1.0s備考:
clojure -M:perf-gate を追加し、CI で上記閾値を実行時チェックする1.12.x に固定
deps.edn が 1.12.1 を基準としており、宣言と実装を一致させるため1.11.x は v1.0 の公式保証対象から外す1/2/3/4 を固定し、予期しない例外の統一コード導入は Phase I へ送る
clojure -M:run は廃止せず、paclo.core/-main を追加してガイド表示に統一
docs/cljdoc-api-contract.md)clojure -M:perf-gate)continue-on-error 解除、2026-02-23)pcap-loop-test を非ゲート観測へ分離
(arm64 では -r '^(?!paclo\\.pcap-loop-test$).*-test$' をゲートに採用し、
-n paclo.pcap-loop-test は continue-on-error で継続観測)pcap-loop-test の root cause(PointerByReference への反射代入)を修正し、
arm64 の unit tests を clojure -M:test に再統合(non-gating 分離を解消)test/examples/cli_contract_test.clj, test/resources/cli_snapshots.edn)Can you improve this documentation?Edit on GitHub
cljdoc builds & hosts documentation for Clojure/Script libraries
| Ctrl+k | Jump to recent docs |
| ← | Move to previous article |
| → | Move to next article |
| Ctrl+/ | Jump to the search field |