feat(governance): 新增 fixture dry-run 證據包
This commit is contained in:
@@ -0,0 +1,270 @@
|
||||
{
|
||||
"schema_version": "ai_agent_owner_approved_fixture_dry_run_v1",
|
||||
"generated_at": "2026-06-11T23:59:59+08:00",
|
||||
"program_status": {
|
||||
"overall_completion_percent": 88,
|
||||
"current_priority": "P2",
|
||||
"current_task_id": "P2-403F",
|
||||
"next_task_id": "P2-403G",
|
||||
"read_only_mode": true,
|
||||
"runtime_authority": "owner_approved_fixture_dry_run_only_no_live_write",
|
||||
"status_note": "P2-403F 固定 owner-approved fixture dry-run 批准包;只允許用已提交 fixture 計算學習回寫、Telegram receipt、handoff replay 與 operator feedback 的乾跑證據,仍不寫 KM、不更新 PlayBook trust、不寫 timeline / replay score、不寫 Gateway queue、不送 Telegram。"
|
||||
},
|
||||
"source_refs": [
|
||||
"docs/evaluations/ai_agent_learning_writeback_approval_package_2026-06-11.json",
|
||||
"docs/evaluations/ai_agent_telegram_receipt_approval_package_2026-06-11.json",
|
||||
"docs/evaluations/ai_agent_interaction_learning_proof_2026-06-11.json",
|
||||
"docs/superpowers/specs/2026-04-15-MASTER-ai-autonomous-flywheel-v2.md"
|
||||
],
|
||||
"dry_run_truth": {
|
||||
"owner_fixture_scope_approved": true,
|
||||
"production_write_approved": false,
|
||||
"fixture_dry_run_allowed": true,
|
||||
"km_write_allowed": false,
|
||||
"playbook_trust_write_allowed": false,
|
||||
"timeline_learning_write_allowed": false,
|
||||
"agent_replay_score_write_allowed": false,
|
||||
"gateway_queue_write_allowed": false,
|
||||
"telegram_send_allowed": false,
|
||||
"redis_consumer_group_allowed": false,
|
||||
"db_migration_allowed": false,
|
||||
"workflow_trigger_allowed": false,
|
||||
"runtime_worker_allowed": false,
|
||||
"host_or_cluster_command_allowed": false,
|
||||
"secret_or_paid_api_allowed": false,
|
||||
"live_learning_write_count": 0,
|
||||
"live_playbook_trust_update_count": 0,
|
||||
"live_km_update_count": 0,
|
||||
"live_timeline_write_count": 0,
|
||||
"live_replay_score_write_count": 0,
|
||||
"live_gateway_queue_write_count": 0,
|
||||
"live_telegram_send_count": 0,
|
||||
"truth_note": "本階段只代表 owner 已批准把 committed fixture 轉成 dry-run 證據與前台只讀卡片;任何 production write、Telegram send、queue write、worker、Redis consumer、DB migration、host / cluster command、secret 或付費 API 仍全部是 false / 0。"
|
||||
},
|
||||
"fixture_package": {
|
||||
"required_fields": [
|
||||
"fixture_event_id",
|
||||
"source_contract_ref",
|
||||
"scenario_type",
|
||||
"owner_scope_ref",
|
||||
"agent_owner",
|
||||
"target_surface",
|
||||
"proposed_delta_summary",
|
||||
"redacted_evidence_ref",
|
||||
"dry_run_expected_output",
|
||||
"no_write_proof_ref",
|
||||
"rollback_plan_ref",
|
||||
"created_at"
|
||||
],
|
||||
"forbidden_fields": [
|
||||
"secret_value",
|
||||
"credential_value",
|
||||
"telegram_bot_token",
|
||||
"telegram_chat_id_raw",
|
||||
"authorization_header",
|
||||
"production_database_dsn",
|
||||
"kubeconfig_value",
|
||||
"raw_prompt",
|
||||
"conversation_transcript",
|
||||
"private_reasoning",
|
||||
"raw_tool_output"
|
||||
],
|
||||
"owner_review_required": true,
|
||||
"rollback_required": true,
|
||||
"no_write_proof_required": true,
|
||||
"operator_meaning": "每個 fixture dry-run 候選都必須說清楚來源契約、場景、負責 Agent、目標 surface、預期輸出、脫敏證據、無寫入證明與 rollback;批准前只能產生乾跑證據,不得進 production write 或 send path。"
|
||||
},
|
||||
"fixture_sets": [
|
||||
{
|
||||
"fixture_id": "learning_writeback_fixture",
|
||||
"display_name": "Learning writeback fixture",
|
||||
"scenario_type": "learning_writeback",
|
||||
"owner_agent": "hermes",
|
||||
"status": "approved_for_fixture_only",
|
||||
"target_surface": "knowledge_entries + playbook_trust_history + agent_replay_results",
|
||||
"operator_visible_result": "顯示候選知識條目、trust delta、replay score delta 與 rollback 摘要;live write count 必須維持 0。",
|
||||
"blocked_runtime_action": "km_playbook_timeline_replay_live_write"
|
||||
},
|
||||
{
|
||||
"fixture_id": "telegram_receipt_fixture",
|
||||
"display_name": "Telegram receipt fixture",
|
||||
"scenario_type": "telegram_receipt",
|
||||
"owner_agent": "openclaw",
|
||||
"status": "approved_for_fixture_only",
|
||||
"target_surface": "telegram_gateway_queue + governance receipts",
|
||||
"operator_visible_result": "顯示 queued / delivered / acknowledged / failed / retry 的脫敏收據結構;Gateway queue write 與 Telegram send 必須維持 0。",
|
||||
"blocked_runtime_action": "telegram_gateway_queue_or_send"
|
||||
},
|
||||
{
|
||||
"fixture_id": "handoff_replay_fixture",
|
||||
"display_name": "Handoff replay fixture",
|
||||
"scenario_type": "handoff_replay",
|
||||
"owner_agent": "nemotron",
|
||||
"status": "approved_for_fixture_only",
|
||||
"target_surface": "agent_session_replay + evaluation scorecard",
|
||||
"operator_visible_result": "顯示 OpenClaw / Hermes / NemoTron 接手、拒收、補證與 replay scoring 摘要;Redis consumer group 與 runtime worker 必須維持關閉。",
|
||||
"blocked_runtime_action": "redis_consumer_or_runtime_worker"
|
||||
},
|
||||
{
|
||||
"fixture_id": "operator_feedback_fixture",
|
||||
"display_name": "Operator feedback fixture",
|
||||
"scenario_type": "operator_feedback",
|
||||
"owner_agent": "openclaw",
|
||||
"status": "approved_for_fixture_only",
|
||||
"target_surface": "approval_records + learning_service feedback",
|
||||
"operator_visible_result": "顯示人工接受、拒絕、要求補證後會如何形成策略修正草案;不寫 canonical memory、不送 Telegram、不啟動 workflow。",
|
||||
"blocked_runtime_action": "feedback_to_live_memory_write"
|
||||
}
|
||||
],
|
||||
"dry_run_gates": [
|
||||
{
|
||||
"gate_id": "owner_fixture_scope_gate",
|
||||
"display_name": "Owner fixture scope gate",
|
||||
"owner_agent": "openclaw",
|
||||
"status": "approved_for_fixture_only",
|
||||
"required_evidence": "明確限制在 committed fixture、只讀 API、前端脫敏卡片、無寫入證明與 rollback plan。",
|
||||
"blocked_runtime_action": "production_write_or_send"
|
||||
},
|
||||
{
|
||||
"gate_id": "learning_writeback_no_write_gate",
|
||||
"display_name": "Learning writeback no-write gate",
|
||||
"owner_agent": "hermes",
|
||||
"status": "approval_required",
|
||||
"required_evidence": "KM / PlayBook trust / timeline / replay score 寫入需獨立 owner approval、pre-write snapshot、idempotency key、rollback record。",
|
||||
"blocked_runtime_action": "learning_writeback_live_write"
|
||||
},
|
||||
{
|
||||
"gate_id": "telegram_gateway_no_send_gate",
|
||||
"display_name": "Telegram gateway no-send gate",
|
||||
"owner_agent": "openclaw",
|
||||
"status": "approval_required",
|
||||
"required_evidence": "Gateway queue dry-run、channel alias、message template、delivery correlation、failure fallback 與 E2E receipt proof。",
|
||||
"blocked_runtime_action": "telegram_queue_write_or_bot_send"
|
||||
},
|
||||
{
|
||||
"gate_id": "redis_consumer_no_connect_gate",
|
||||
"display_name": "Redis consumer no-connect gate",
|
||||
"owner_agent": "nemotron",
|
||||
"status": "approval_required",
|
||||
"required_evidence": "consumer group 建立、ack / dead-letter / replay、idempotency 與 production Redis read/write approval。",
|
||||
"blocked_runtime_action": "redis_consumer_group_connect"
|
||||
},
|
||||
{
|
||||
"gate_id": "secret_paid_service_gate",
|
||||
"display_name": "Secret and paid service gate",
|
||||
"owner_agent": "openclaw",
|
||||
"status": "approval_required",
|
||||
"required_evidence": "任何 secret、token、paid API、host / cluster command、workflow trigger 都需獨立授權與稽核記錄。",
|
||||
"blocked_runtime_action": "secret_paid_api_or_host_command"
|
||||
}
|
||||
],
|
||||
"simulation_steps": [
|
||||
{
|
||||
"step_id": "load_committed_fixtures",
|
||||
"display_name": "載入 committed fixtures",
|
||||
"status": "ready",
|
||||
"expected_artifact": "fixture manifest + source_refs"
|
||||
},
|
||||
{
|
||||
"step_id": "validate_redaction_contract",
|
||||
"display_name": "驗證前端脫敏契約",
|
||||
"status": "ready",
|
||||
"expected_artifact": "allowed / forbidden frontend fields"
|
||||
},
|
||||
{
|
||||
"step_id": "calculate_learning_delta",
|
||||
"display_name": "計算學習回寫 delta",
|
||||
"status": "fixture_only",
|
||||
"expected_artifact": "candidate KM / trust / replay delta without write"
|
||||
},
|
||||
{
|
||||
"step_id": "calculate_telegram_receipt",
|
||||
"display_name": "計算 Telegram receipt envelope",
|
||||
"status": "fixture_only",
|
||||
"expected_artifact": "queued / delivered / ack / failed / retry receipt envelope without send"
|
||||
},
|
||||
{
|
||||
"step_id": "score_handoff_replay",
|
||||
"display_name": "評分 Agent handoff replay",
|
||||
"status": "fixture_only",
|
||||
"expected_artifact": "handoff accepted / rejected / challenge scorecard without worker"
|
||||
},
|
||||
{
|
||||
"step_id": "emit_governance_readonly_snapshot",
|
||||
"display_name": "產出治理頁只讀快照",
|
||||
"status": "ready",
|
||||
"expected_artifact": "API response + UI cards with live counters at 0"
|
||||
}
|
||||
],
|
||||
"rollback_contract": {
|
||||
"rollback_required": true,
|
||||
"rollback_steps": [
|
||||
"P2-403F 只新增 committed fixture 與只讀 API,rollback 可直接移除端點與前端卡片。",
|
||||
"若 fixture 被判定誤導,先把 fixture_set status 改回 blocked_by_scope,再更新治理頁。",
|
||||
"任何後續 live write / send gate 必須保留 pre-write snapshot 與 owner approval record。",
|
||||
"發現前端誤顯未核准內容時,先移除欄位、保留 schema version,再重新部署。",
|
||||
"rollback 後 LOGBOOK 必須記錄 live counters 仍為 0。"
|
||||
]
|
||||
},
|
||||
"approval_boundaries": {
|
||||
"km_write_allowed": false,
|
||||
"playbook_trust_write_allowed": false,
|
||||
"timeline_learning_write_allowed": false,
|
||||
"agent_replay_score_write_allowed": false,
|
||||
"gateway_queue_write_allowed": false,
|
||||
"telegram_send_allowed": false,
|
||||
"redis_consumer_group_allowed": false,
|
||||
"db_migration_allowed": false,
|
||||
"workflow_trigger_allowed": false,
|
||||
"runtime_worker_allowed": false,
|
||||
"host_or_cluster_command_allowed": false,
|
||||
"secret_or_paid_api_allowed": false,
|
||||
"paid_external_service_allowed": false,
|
||||
"production_route_change_allowed": false
|
||||
},
|
||||
"display_redaction_contract": {
|
||||
"redaction_required": true,
|
||||
"raw_payload_display_allowed": false,
|
||||
"private_reasoning_display_allowed": false,
|
||||
"secret_value_display_allowed": false,
|
||||
"action_button_allowed": false,
|
||||
"allowed_frontend_content": [
|
||||
"fixture scenario",
|
||||
"owner agent",
|
||||
"target surface",
|
||||
"operator visible result",
|
||||
"blocked runtime action",
|
||||
"dry-run gate status",
|
||||
"live counters"
|
||||
],
|
||||
"forbidden_frontend_content": [
|
||||
"Telegram token",
|
||||
"raw chat id",
|
||||
"authorization header",
|
||||
"production DSN",
|
||||
"kubeconfig",
|
||||
"提示內容",
|
||||
"未核准細節",
|
||||
"raw tool output"
|
||||
],
|
||||
"frontend_display_policy": "治理頁只顯示 fixture 場景、owner agent、target surface、阻擋動作、乾跑 gate 與 live counters;token、raw chat id、authorization header、production DSN、kubeconfig、提示內容、未核准細節與 raw tool output 不進前端,也不提供批准或執行按鈕。"
|
||||
},
|
||||
"rollups": {
|
||||
"fixture_set_count": 4,
|
||||
"dry_run_gate_count": 5,
|
||||
"simulation_step_count": 6,
|
||||
"approved_fixture_only_count": 4,
|
||||
"approval_required_gate_ids": [
|
||||
"learning_writeback_no_write_gate",
|
||||
"redis_consumer_no_connect_gate",
|
||||
"secret_paid_service_gate",
|
||||
"telegram_gateway_no_send_gate"
|
||||
],
|
||||
"blocked_runtime_action_count": 5,
|
||||
"required_field_count": 12,
|
||||
"forbidden_field_count": 11,
|
||||
"live_write_count_total": 0,
|
||||
"live_send_count_total": 0,
|
||||
"live_receipt_count_total": 0
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user