@@ -1042,7 +1042,7 @@ entire `cmd/entire/cli/agent/agent.go` 定义核心 `Agent`(identity 6 + trans
10421042| entire CLI | libra 当前 | 差距说明 |
10431043| ---| ---| ---|
10441044| ` DispatchLifecycleEvent(ctx, ag, event) ` :规范化 ` agent.Event ` → 框架动作 | ` hooks/lifecycle.rs ` 已有 ` apply_lifecycle_event ` + ` LifecycleEventKind ` (11 变体) | ** Libra 已有 dispatcher 原语** ;当前代码内置 provider parser(` providers/{claude,gemini} ` )已只产 ` LifecycleEvent ` 、不直接写 checkpoint(写入集中在 ` runtime.rs ` )。执行本文档时第一批目标是保留 Claude 路径并补 Codex/OpenCode provider;Gemini 只能作为历史实现事实,不进入 supported roster。AG-19 真实 delta 是 owner filtering + ` SubagentStart/End ` ,并** 约束未来 external-binary parser 维持同一边界** |
1045- | 标准化 ` EventType ` :SessionStart/TurnStart/TurnEnd/Compaction/SessionEnd/** SubagentStart/SubagentEnd** /ModelUpdate/ToolUse(9 个) | ` LifecycleEventKind ` 已有 13 个变体并包含 ` SubagentStart ` /` SubagentEnd ` ;Codex provider parser/settings 已映射原生 subagent hooks;` CheckpointScope::Subagent ` 物化为独立 checkpoint 仍未接通 | 已补 subagent 两事件; ` CheckpointScope::Subagent ` 继续作为后续 checkpoint-scope 扩展,不得误报已物化 |
1045+ | 标准化 ` EventType ` :SessionStart/TurnStart/TurnEnd/Compaction/SessionEnd/** SubagentStart/SubagentEnd** /ModelUpdate/ToolUse(9 个) | ` LifecycleEventKind ` 已有 13 个变体并包含 ` SubagentStart ` /` SubagentEnd ` ;Codex provider parser/settings 已映射原生 subagent hooks;** A0-02 已接通 ** ` CheckpointScope::Subagent ` :每个 subagent 边界物化独立 checkpoint( ` parent_checkpoint_id ` 链回最近 committed) | 已补 subagent 两事件与独立 ` scope='subagent' ` checkpoint;后续仅剩 temporary -scope 等扩展 |
10461046| Agent ownership filtering:按记录的 ` AgentType ` first-writer-wins,忽略非属主转发事件 | 靠 ` make_dedup_key ` ,无 agent-kind 归属 claim | 多 provider 转发时可能重复 checkpoint;第一批仅需覆盖 Claude Code/Codex/OpenCode 的 owner claim(` SessionStart ` /` TurnStart ` 豁免),非首批 agent 不得触发 supported 写入路径 |
10471047| Codex trust-gap detection:检测用户未本地批准的新 hook | 无 | 安全/透明性不足;补 ` codex.HookTrustGaps ` 等价(结构性 key-presence 比对,仅 Codex SessionStart banner 提示) |
10481048
@@ -1412,7 +1412,7 @@ AG-24a 合规实现与 AG-24 closeout 必须逐行核对本矩阵。若某项未
14121412| hook 注册表 | ` find_provider(name) ` (` providers/mod.rs ` ,仅 ` "claude" ` /` "gemini" ` ) | 字符串键、缺 codex/opencode | 当前 ` providers/{claude,codex,opencode} ` 已落地 first-batch provider;Gemini 仅 legacy compatibility | AG-19 |
14131413| 能力声明 | ** 无** ` DeclaredAgentCaps ` /` CapabilityDeclarer ` (grep src/ 零命中,仅 E1 文档契约已冻结) | built-in 无统一能力面;external 无 8-bool 协商 | 落地 8-bool ` DeclaredAgentCaps ` + ` CapabilityDeclarer ` (E1) | AG-16/AG-18 |
14141414| 可选能力 trait | 仅 ` TranscriptTruncator ` (` adapter.rs:242 ` )+ ` TranscriptChunker ` (` adapter.rs:251 ` ,无 impl) | 缺 E1 其余能力 | 补 ` TranscriptAnalyzer/PromptExtractor/TranscriptPreparer/TokenCalculator/ModelExtractor/TextGenerator/TranscriptCompactor/HookResponseWriter/SubagentAwareExtractor/SkillEventExtractor ` | AG-16/AG-21 |
1415- | lifecycle 事件 | ` LifecycleEventKind ` 11 变体(` lifecycle.rs:35 ` ) | 缺 ` SubagentStart ` /` SubagentEnd ` ;未标 ` #[non_exhaustive] ` | 当前 13 变体 + ` #[non_exhaustive] ` 已落地; subagent events 进入 metadata,` CheckpointScope::Subagent ` 独立物化仍是后续扩展 | AG-19 |
1415+ | lifecycle 事件 | ` LifecycleEventKind ` 13 变体(含 ` SubagentStart ` /` SubagentEnd ` )+ ` #[non_exhaustive] ` | — | ** A0-02 已落地** : subagent events 进入 metadata,且 ` CheckpointScope::Subagent ` 在边界物化独立 checkpoint | AG-19 / A0-02 |
14161416| roster | ` STABLE_AGENT_SLUGS ` =` claude-code ` /` gemini ` (` mod.rs:216 ` ) | 与第一批 ` claude-code ` /` codex ` /` opencode ` 不一致 | 当前删除独立常量,CLI roster 从 registry ` supported_slugs() ` 派生;Codex/OpenCode HookProvider 已落地,Gemini unsupported + uninstall-only | AG-17/AG-19 |
14171417| external 安全 | ` RpcAgent::spawn ` (` rpc.rs:162 ` )` Stdio::inherit() ` 且** 未 ` env_clear ` ** | 子进程继承 ` *_API_KEY ` /` LIBRA_STORAGE_* ` /` LIBRA_D1_* ` | 当前 ` env_clear() ` + allowlist、stderr capture/redact、settings gate、provenance、内置 slug 仿冒防护已落地;fd-exec 仍延期 | AG-18 |
14181418| redaction | ` RedactedSink ` (` redaction.rs:219 ` )Phase-1 placeholder,未接 writer | 任何新持久化路径可绕过 redaction | 当前 hook ingest/checkpoint/export 路径有 redaction-before-persist 与 raw ` --allow-raw ` audit;未来新增 uploader/writer 仍必须保持类型/测试门禁 | AG-19/AG-20/AG-24a |
@@ -1763,15 +1763,15 @@ Special cases:
17631763| AG-24 partial(已交付) | ` compat_agent_run_non_exhaustive_guard ` :已注册 | (见 ` agent_run/ ` 下 ` #[non_exhaustive] ` 各 enum) | Wave 1;守卫内部 agent run 类型演进 |
17641764| AG-17 | ` command_test ` :已注册 target;AG-17 五个测试已实现(2026-07-04,` tests/command/agent_roster_test.rs ` ) | ` command_test::agent_list_add_remove_aliases_parse ` ; ` command_test::agent_list_json_contains_capability_fields ` ; ` command_test::agent_add_non_hook_installable_returns_actionable_unsupported ` ; ` command_test::agent_remove_gemini_uninstalls_legacy_hooks_idempotent ` ; ` command_test::agent_remove_preserves_user_hook_entries ` | ` list ` / ` add ` / ` remove ` alias 落地时补测试;未补前不得声称 AG-17 有 command coverage |
17651765| AG-18 / E2 | ` agent_rpc_external_test ` :已注册(2026-07-04,A3 落地;顶层 tests/ 自动发现无需 [[ test]] ;` agent.rpc.invoke ` span 断言独立于 ` agent_rpc_span_test ` ——单测试二进制规避 tracing callsite-cache 并发竞态) | ` agent_rpc_external_test::info_success_registers_binary ` ; ` agent_rpc_external_test::version_mismatch_is_skipped_with_reason ` ; ` agent_rpc_external_test::timeout_and_oversize_are_fail_closed ` ; ` agent_rpc_external_test::undeclared_capability_method_is_rejected ` ; ` agent_rpc_external_test::stderr_is_capped_redacted_and_not_inherited ` | Wave 1/2;原场景名 ` agent_external_protocol_v2_matrix ` 只作为目的说明,不再作为命令名 |
1766- | AG-19 / E3 | ` agent_lifecycle_event_test ` :已注册(顶层 target,Cargo 自动发现) | ` agent_lifecycle_event_test::invalid_hook_envelopes_are_rejected_before_checkpoint ` ; ` agent_lifecycle_event_test::owner_claim_prevents_duplicate_checkpoint ` ; ` agent_lifecycle_event_test::unknown_event_type_is_skipped_not_fatal ` ; ` agent_lifecycle_event_test::kind_mismatch_still_fails_closed ` ; ` agent_lifecycle_event_test::simultaneous_stop_race_yields_single_owner_checkpoints ` | Wave 1;覆盖 owner claim、unknown event、kind mismatch、race closure、Gemini uninstall-only;SubagentStart/End 由 lifecycle/provider unit 与 Codex provider tests 守卫,当前不声明 ` CheckpointScope::Subagent ` 已物化 |
1766+ | AG-19 / E3 | ` agent_lifecycle_event_test ` :已注册(顶层 target,Cargo 自动发现) | ` agent_lifecycle_event_test::invalid_hook_envelopes_are_rejected_before_checkpoint ` ; ` agent_lifecycle_event_test::owner_claim_prevents_duplicate_checkpoint ` ; ` agent_lifecycle_event_test::unknown_event_type_is_skipped_not_fatal ` ; ` agent_lifecycle_event_test::kind_mismatch_still_fails_closed ` ; ` agent_lifecycle_event_test::simultaneous_stop_race_yields_single_owner_checkpoints ` ; ` agent_lifecycle_event_test::subagent_end_materializes_distinct_subagent_scope_checkpoint ` | Wave 1;覆盖 owner claim、unknown event、kind mismatch、race closure、Gemini uninstall-only;** A0-02 ** : SubagentStart/End 物化独立 ` scope='subagent' ` checkpoint |
17671767| AG-19 redaction | ` agent_checkpoint_redaction_test ` :已注册(顶层 target,Cargo 自动发现) | ` agent_checkpoint_redaction_test::raw_hook_input_is_redacted_before_persist ` ; ` agent_checkpoint_redaction_test::tool_response_is_redacted_too ` ; ` agent_checkpoint_redaction_test::assistant_message_is_redacted_too ` ; ` agent_checkpoint_redaction_test::extractor_warning_does_not_include_secret_owner_or_prompt ` ; ` agent_checkpoint_redaction_test::extraction_derived_strings_are_redacted_in_metadata ` | Wave 1;与 lifecycle/checkpoint writer 同步,覆盖 prompt/tool_response/assistant/derived metadata redaction |
17681768| AG-20 / E4 / E5 | ` agent_checkpoint_export_test ` / ` agent_checkpoint_reader_test ` / ` agent_doctor_repair_test ` / ` command_test ` agent clean/push/checkpoint slices:已注册 | ` agent_checkpoint_export_test::writer_emits_all_six_e4_libra_entries ` ; ` agent_checkpoint_export_test::content_hash_format_and_recompute ` ; ` agent_checkpoint_export_test::chunking_large_transcript_splits_line_safe ` ; ` agent_checkpoint_reader_test::checkpoint_list_walks_keyset_pages_without_overlap_or_gap ` ; ` agent_checkpoint_reader_test::show_survives_missing_transcript_blob ` ; ` agent_doctor_repair_test::class2_missing_catalog_row_detected_and_repaired ` ; ` command_test::agent_checkpoint_rewind_dry_run_and_apply_restore_worktree_only ` | Wave 1;E4 writer/export、metadata-first reader, pagination, doctor repair, prune/rewrite and push force-with-lease are split across focused targets in ` tests/INDEX.md ` |
17691769| AG-20 existing rewind guard | ` command_test ` :已接入 | ` command::agent_checkpoint_test::agent_checkpoint_rewind_dry_run_and_apply_restore_worktree_only ` | ` tests/command/agent_checkpoint_test.rs ` 已在 ` tests/command/mod.rs ` 中 re-export;用 ` cargo test --test command_test agent_checkpoint_rewind ` 验证 |
17701770| AG-21 | ` agent_transcript_intelligence_test ` :已注册(2026-07-05,A6 落地;顶层 tests/ 自动发现) | ` agent_transcript_intelligence_test::claude_codex_opencode_fixtures_extract_metadata_or_partial ` ; ` agent_transcript_intelligence_test::token_usage_mapping_uses_e6_wire_keys ` ; ` agent_transcript_intelligence_test::missing_optional_files_return_partial_not_panic ` ; ` agent_transcript_intelligence_test::skill_events_project_for_claude_and_codex ` | Wave 2;新增时同步 ` tests/INDEX.md ` ;若拆 target,矩阵必须同步 |
17711771| A6.5 本地三 Agent 采集 smoke(plan.md §0.3) | `agent_local_capture_smoke_test`:已注册(2026-07-05,A6.5 落地;顶层 tests/ 自动发现无需 `[[test]]`,driver 在 `tests/harness/agent_local_capture.rs`) | `agent_local_capture_smoke_test::local_capture_smoke_codex`; `agent_local_capture_smoke_test::local_capture_smoke_claude_code`; `agent_local_capture_smoke_test::local_capture_smoke_opencode` — 每个均 `#[ignore]` + `#[serial]` + `LIBRA_RUN_LOCAL_AGENTS=1` env-gate;harness 固化 plan.md §0.3.2~§0.3.6 全流程(preflight/只读登录检查/pinned `$LIBRA_BIN` sha256/hook install 断言/真实会话(进程组超时 kill)/Libra 侧 session/checkpoint/traces/doctor 断言/卸载 smoke/redacted evidence) | Wave local-only(`tests/INDEX.md` Wave 7);CI 默认必须 skip;缺 binary/登录态时不发起付费会话、redacted 阻断原因落盘 summary.json,且(门控已显式开启时)测试以 BLOCKED panic 失败——blocked 与真实绿跑在退出码/通过数上机械可区分(2026-07-12 收敛,见 plan.md §0.3.6 失败分层);不得以 fake fixture 替代 |
17721772| AG-22 / E8 | ` agent_review_workflow_test ` :已注册(顶层 target,Cargo 自动发现) | ` agent_review_workflow_test::fake_reviewers_cover_success_error_cancel_and_slow_output ` ; ` agent_review_workflow_test::review_sink_is_not_blocked_by_high_frequency_reviewer ` ; ` agent_review_workflow_test::review_read_only_emits_findings_manifest_and_manual_attach ` ; ` agent_review_workflow_test::review_fix_returns_unsupported_until_bridge_ready ` ; ` agent_review_workflow_test::cancel_releases_reviewer_processes_and_locks ` ; ` agent_review_workflow_test::review_list_cli_paginates_with_keyset_cursor_envelope ` | Wave 1;fix bridge 源码锚点仍不存在,故 mandatory test 是 unsupported ` LBR-AGENT-010 ` ;` review_fix_bridge_enters_agent_runtime_mutating_path ` 不属于当前必跑 |
17731773| AG-23 / E8 | ` agent_investigate_workflow_test ` :已注册(顶层 target,Cargo 自动发现) | ` agent_investigate_workflow_test::round_robin_reaches_quorum_and_max_turns ` ; ` agent_investigate_workflow_test::stalled_cancelled_paused_and_continue_resume_are_pinned ` ; ` agent_investigate_workflow_test::investigate_read_only_persists_state_and_findings_doc ` ; ` agent_investigate_workflow_test::investigate_fix_returns_unsupported_until_bridge_ready ` ; ` agent_investigate_workflow_test::concurrent_same_run_id_fails_closed ` ; ` agent_investigate_workflow_test::investigate_list_cli_paginates_with_keyset_cursor_envelope ` | Wave 1;fix bridge 源码锚点仍不存在,故 mandatory test 是 unsupported ` LBR-AGENT-010 ` ;` investigate_fix_bridge_enters_agent_runtime_mutating_path ` 不属于当前必跑 |
1774- | AG-24a / A8.5 compliance | ` agent_audit_log_test ` + command slices:已注册 | ` agent_audit_log_test::audit_log_rejects_update_and_delete_but_allows_insert_select ` ; ` agent_audit_log_test::denied_access_is_recorded ` ; ` agent_audit_log_test::retention_defaults_are_documented_values ` ; ` command_test::allow_raw_gate ` ; ` command_test::agent_clean_gc_drops_expired_all_scopes_and_keeps_audit_log ` ; ` command_test::erase_session_local_removes_rows_and_preserves_audit_log ` ; ` command_test::agent_erasure_local_tombstone ` | Wave 1/3;raw export audit, retention defaults, GC, and local erasure are implemented; findings- GC is explicitly deferred until run-state retention policy grows a deletion command |
1774+ | AG-24a / A8.5 compliance | ` agent_audit_log_test ` + command slices:已注册 | ` agent_audit_log_test::audit_log_rejects_update_and_delete_but_allows_insert_select ` ; ` agent_audit_log_test::denied_access_is_recorded ` ; ` agent_audit_log_test::retention_defaults_are_documented_values ` ; ` command_test::allow_raw_gate ` ; ` command_test::agent_clean_gc_drops_expired_all_scopes_and_keeps_audit_log ` ; ` command_test::erase_session_local_removes_rows_and_preserves_audit_log ` ; ` command_test::agent_erasure_local_tombstone ` ; ` command_test::agent_clean_findings_retention_gc ` | Wave 1/3;raw export audit, retention defaults, transcript/stderr/findings run-dir GC, and local erasure are implemented; ** A0-09 ** : findings run-dir GC 已落地;对象化 findings blob 的仓库级 object GC 仍 deferred |
17751775| A0-10 cloud tombstone deferral | ` compat_agent_docs_contract ` doc-guard + ` agent_cloud_tombstone_test ` (L3):已注册 | ` compat_agent_docs_contract::agent_doc_declares_cloud_tombstone_deferred ` ; ` agent_cloud_tombstone_test::cloud_tombstone_propagation_is_deferred_for_agent_capture ` (无 ` test-live-cloud ` + ` LIBRA_D1_* ` 时 skipped) | Wave 1/5;D1/R2 mirror 已生效(` cloud sync ` /` restore ` ),deferred 的是 delete/tombstone propagation:本地 erasure 不删 D1/R2 mirror 行,` cloud restore ` 会复活已擦除 capture;doc-guard 钉住此真相不可漂移 |
17761776
17771777AG-24a/AG-24 交付时必须逐行核对:没有 target、没有具体 test function、没有 ` Cargo.toml ` / ` tests/INDEX.md ` 注册、或验收命令未覆盖,均视为测试方案未闭环。
0 commit comments