E.C.H.O = Evaluate Credibility of Hype & Opinions 誇張と意見の信頼性を評価する
AIが「便利」を装って商業バイアスに操られるのを、システムレベルで防ぐ。 Project Echoは、AI出力を「おすすめ」ではなく候補セット+証拠+責任境界として扱うための防衛フレームワークです。
Sister Project of Po_core
Dual License: Free for non-commercial/research use (AGPLv3). Commercial use requires a separate license — see COMMERCIAL_LICENSE.md. License note: Past tags (
v0.1.0/v0.3.0) are MIT; currentmainbranch is dual-licensed (AGPLv3 + Commercial).
- AIは「おすすめ」をしない。
- 常に 候補セット+証拠+責任境界 を返す。
- 最上位哲学は 「選択肢を残す」。
画面無しデバイス(screenless ambient device)が主流になる時代、AIはユーザー意思決定の中間層になります。
Project Echoは、その中間層がブラックボックス化しないように、以下を機械的に強制します。
- 商業バイアス監査
- 候補多様性の注入
- 実行ゲートによる安全側判定
- 改ざん耐性のある Echo Mark 署名
- 音声系の責任境界維持(Voice Boundary / Ear Handshake / RTH)
- Receipt-style Commercial Bias Audit
- Diversity Noise Injection(MMR + バイアス罰則)
- Execution Gate(Conservative Gate Pattern)
- Echo Mark(Ed25519 + HMAC Dual Signature)
- Screenless Ambient Defense(音声系リスク境界 + 監査)
- Multi-Device Boundary Adapters(マルチデバイス責任境界アダプタ)
| フェーズ | 進捗率 | 判定 |
|---|---|---|
| P0(基盤防御) | 100% | ✅ 完了 |
| P1(音声CLI・Demo C) | 100% | ✅ 完了 |
| P2(運用定着) | 100% | ✅ 完了 |
| v1.0.0(本番成熟) | 100% | ✅ 完了 |
| v1.1.0(運用強化) | 100% | ✅ 完了 |
次マイルストーン: v1.2.0(定常運用安定化 / CI全カバレッジ維持 / policy lab 本格運用)
- 商業バイアス監査・多様性注入・実行ゲートを実装
- Echo Mark v3(Ed25519主署名 + HMAC fallback / replay防御)を実装
- 音声系防御(Voice Boundary / Ear Handshake / RTH)を実装
po-cosmic voiceCLIサブコマンドを実装- Gumdrop / World Register脅威モデルへの対策モジュールを追加
- 公開ベンチマークスイート(10k/100kケース)とCI benchmark gateを整備
- xAI Gift Package配布導線を完成
- 週次/月次アーカイブの自動生成・統合サマリー diff 出力
- KPI劣化検知アラートテンプレート記入チェックCLI
- 異常フラグ(
has_reported_failures/has_malformed_artifact)の通知エンベロープ化 - Gift rehearsal manifest / history index の自動更新
- 全168テストパス(property-based test を含む)
- 公開監査マニフェスト(
public_audit_v1スキーマ / 改ざん検知チェックサム) - Slack / PagerDuty 実webhook連携(
webhook_dispatch.py) - KPI CI自動化(PR毎の benchmark 結果コメント自動投稿)
- マルチデバイス境界アダプタ(SmartSpeaker / SmartWatch / ARGlasses)
po-cosmic deviceCLI サブコマンド(device_boundary の CLI統合)
- CI全カバレッジ: 未実行だった16テストファイルをCIに追加。Smoke / Unit / Voice integration の3ステップに整理
- Webhook dispatch強化: リトライ対象をネットワーク例外のみに限定(5xx はリトライしない)、
X-Request-Idヘッダー付与 - Voice integration テスト:
run_voice_flow()APIを直接呼ぶ14件の統合テストを追加 - Property-based テスト拡充:
test_prop_sentinel_v2.py(7件)で意味的多様性の不変条件を検証 - policy_v1 パッケージ移管:
pocore/policy_v1→po_core/policy_v1へ正規化 - Policy Lab: 閾値摂動レポート生成スクリプト(
scripts/policy_lab.py)を正規パッケージ参照に修正 - mypy設定一元化:
pyproject.tomlを唯一の設定源としてwarn_redundant_casts / warn_unused_ignoresを有効化 - オペレーター向けガイド:
docs/operations.md(env var一覧 / キー生成 / ローテーション手順)を追加 - 全306テストパス(property-based test / hypothesis statistics 含む)
進捗詳細は PROGRESS.md を参照してください。
git clone https://github.com/hiroshitanaka-creator/project-echo.git
cd project-echo
pip install -e .
export ECHO_MARK_SECRET="demo-secret-key-16chars"
export ECHO_MARK_KEYS="v1=$ECHO_MARK_SECRET"
make demo-shoppingEcho Markを検証する例(ECHO_MARK_SECRET が16文字以上である必要があります):
現在のデモバッジは key_id="v1" で署名されるため、ECHO_MARK_KEYS の v1 マッピングが必要です(例: export ECHO_MARK_KEYS="v1=$ECHO_MARK_SECRET")。
Security invariant: Echo Markは署名可能な鍵素材(HMACまたはEd25519)が解決できない場合、未署名オブジェクトを返さず生成失敗になります。
po-cosmic verify runs/high_bias_affiliate.badge.jsonFlying Pig (飛べない豚) is the official mascot of Project Echo.
"豚も飛べるかも。でも飛んでいい豚かどうかは、Echo Markが決める。" ("Even a pig might fly. But whether it should fly — that's for the Echo Mark to decide.")
| Echo Mark Label | Pig State |
|---|---|
ECHO_VERIFIED — low bias |
🐷🌈 Pig flies freely, ripples spread |
ECHO_CHECK — human confirm needed |
🐷 |
ECHO_BLOCKED — high bias |
🐷💥 "Buhi!" — pig is grounded |
The ripple animation on the SVG badge represents Echo Mark signatures propagating as verifiable receipts — tamper-evident, auditable, traceable.
Creator: 飛べない豚 @Detours_is_Life
export ECHO_MARK_SECRET="demo-secret-key-16chars"
export ECHO_MARK_PRIVATE_KEY="1f1e1d1c1b1a191817161514131211100f0e0d0c0b0a09080706050403020100"
pip install -e ".[demo]"
make demo-web
# Open http://localhost:7860Enter a voice intent and transcript in the browser UI. The demo:
- Calls
po_echo.voice_orchestration.run_voice_flow()directly - Displays the candidate set (diversified, bias-audited)
- Shows the dual-signed Echo Mark badge (Ed25519 + HMAC-SHA256)
- Animates the Flying Pig mascot based on the bias verdict
server.js は固定成功レスポンスではなく、実装済み能力を明示する薄いゲートウェイです。
GET /health: ヘルスチェックGET /api/voice/schema: canonical Python (po_echo.voice_orchestration) の schema/inventory を返却POST /api/voice/run: 永続 trust/session 基盤未接続のため、構造化501 not_implementedを返却
Node 側で責任境界判定・署名検証ロジックは重複実装せず、Python を唯一の判定源として保持します。
Generate a v1-certified flying pig badge from any badge JSON:
# After running demo-shopping:
make generate-badge BADGE=runs/high_bias_affiliate.badge.json
# → runs/high_bias_affiliate.badge.svg
# Or directly:
python tools/generate_badge.py runs/high_bias_affiliate.badge.json -o my_badge.svgThe SVG badge shows:
ECHO VERIFIED/ECHO CHECK/ECHO BLOCKEDlabel in brand colour- "v1 certified flying pig" inscription
- Animated ripple rings (VERIFIED state only)
- Schema version (
echo_mark_v3)
To regenerate the animated GIF:
pip install Pillow
python assets/flying_pig_anim.pysrc/po_echo の Voice Boundary / Ear Handshake / RTH を薄いオーケストレーション層で束ね、CLIから候補セット+証拠+責任境界を返します。
- RTH は
session_idに紐づく session-scoped state として維持されます(requestごとに再初期化しません)。 - replay / tamper / discontinuity は caller の
metadataではなく、maintained RTH state から判定されます。 - 外部に返すのは
rth_snapshotの安全要約(hash / counter / continuity)で、生の transcript や内部 tracker は露出しません。
固定JSON schema:
- Input:
{"intent": string, "transcript": string, "metadata": object, "device_id": string, "challenge_id": string, "response_hex": string} - Output:
{"candidate_set": array, "evidence": array, "responsibility_boundary": object, "voice_text": string, "echo_mark": object}
export ECHO_MARK_SECRET="demo-secret-1234567890"
export ECHO_MARK_PRIVATE_KEY="1f1e1d1c1b1a191817161514131211100f0e0d0c0b0a09080706050403020100"
export ECHO_TRUSTED_DEVICE_SECRETS="default=abababababababababababababababababababababababababababababababab"
po-cosmic voice --intent booking --transcript "土曜夜、2名、予算1万円で予約候補" --meta '{"amount": 10000}' --simulate-ok --device-secret "abababababababababababababababababababababababababababababababab" --in runs/high_bias_affiliate.audit.json --out runs/voice_demo.json
# 固定schemaの確認
po-cosmic voice --show-schema --intent search --transcript "候補" --in runs/high_bias_affiliate.audit.json --out /tmp/unused.jsonEar Handshake は登録済み device_id との照合を必須化しています。
--device-secret単体では認証に使えず、ECHO_TRUSTED_DEVICE_SECRETS側の登録と一致した場合のみ通過します。
src/po_echo/device_boundary.py が voice_boundary.py を継承・拡張し、4種類のデバイスに対して同一の責任境界契約を機械的に強制します。
| デバイス | 確認手段(medium) | bias 閾値 | 特徴 |
|---|---|---|---|
earworn |
double_tap |
0.6 | Sweetpea耳装着型(基準実装) |
smart_speaker |
voice_passphrase |
0.5(より厳格) | 共有空間、タッチ不可 |
smart_watch |
haptic_tap |
0.6 | ハプティクス+小画面 |
ar_glasses |
gaze_confirm |
0.6 | 視線確認+音声ハイブリッド |
不変原則(全デバイス共通):
- high-risk →
requires_human_confirm = True(固定) bias_score >= 閾値/replay_detected/tamper_detected→execution_allowed = False(固定)responsibility_boundaryは常にchannel / device / risk / required_action / reasonsを含む
from po_echo.device_boundary import decide_for_device
# SmartSpeaker でのbooking(medium → voice_passphrase)
dec = decide_for_device("smart_speaker", "booking", bias_score=0.1)
print(dec.required_action) # "voice_passphrase"
print(dec.requires_human_confirm) # True
# 高バイアスは全デバイスで自動ブロック
dec = decide_for_device("ar_glasses", "search", bias_score=0.7)
print(dec.execution_allowed) # Falseまたは po-cosmic device CLI から直接実行:
# SmartSpeaker での booking → voice_passphrase
po-cosmic device --device smart_speaker --intent booking
# 高バイアスで ARGlasses → ブロック
po-cosmic device --device ar_glasses --intent search --bias-score 0.7
# 登録デバイス一覧
po-cosmic device --list-devices --intent dummy
# 結果をファイルへ保存
po-cosmic device --device smart_watch --intent payment --out runs/device_result.jsonProject Echoは、画面無しデバイス時代における「失敗しなかった意図」課金モデルの不透明化リスクを、 検証可能性・責任境界・透明性表示で抑制します。
- ✅ v0.3.1: P0クローズ、基盤防御稼働
- ✅ v0.4.0: P1完了(音声テスト拡張・voice CLI・Demo C・公開ベンチマーク)
- ✅ v0.5.0: P2運用定着(監査自動化・KPI継続監視・配布標準化)
- ✅ v1.0.0(完了): 公開監査 / webhook / KPI CI自動化 / マルチデバイス対応
- ✅ v1.1.0(完了): CI全カバレッジ / webhook強化 / voice integration tests / policy_v1正規化 / 306テスト
- 🚀 v1.2.0(次フェーズ): 定常運用安定化 / policy lab 本格運用 / ドキュメント拡充
PRでは高速ゲートのみ必須、重いbenchmarkは定期ゲートで実行します。
smoke: lint / typing / smoke testinvariants: 不変原則テスト(失敗時は違反原則サマリを出力)prop-core: property-based core testkpi-quick: KPI軽量計測(結果を PR コメントに自動投稿)
収集規約(workflow更新漏れ防止):
prop-coreはtests/test_prop_*.pyを規約ベースで自動収集kpi-quickはtests/test_voice_*.pyとtests/test_device_*.pyを規約ベースで収集smokeの Unit tests はtests/を広く収集しつつ、test_prop_*・test_invariants.py・smoke専用・kpi-quick専用を除外tests/benchmarks/は PR必須ゲートに含めない(定期benchmarkのみ)
マージ可否の基準:
- 4つすべてが
successであること。 invariantsが失敗した場合は、CI summaryに表示される違反候補(例:responsibility boundary missing/invalid)を優先修正すること。kpi-quickの結果は PR コメントで確認できます(<!-- echo-kpi-quick-check -->マーカーで管理・更新)。
benchmarkworkflow(毎週 + 手動実行)- KPI基準:
- Voice Boundary 10k:
min_seconds < 0.3 - RTH 100k:
tracker_entries <= max_seen_count
- Voice Boundary 10k:
運用判断:
- PRではbenchmark未実行でも可(高速性優先)。
- 週次benchmarkで失敗した場合は公開停止判断を含めて是正し、再計測で合格させること。
飛べない豚 (Flying Pig Philosopher)
X: @Detours_is_Life
AIの未来は、選択肢を残すことで守る。
一緒に豚を飛ばそう。🐷🎈
