)
人工智能AI 应用交互助手AI Agent【免费下载链接】ironclawIronClaw is an Agent OS focused on privacy, security and extensibility项目地址https://gitcode.com/gh_mirrors/iro/ironclaw点击查看免费下载本文围绕 IronClaw 开源仓库的设计文档 target-architecture/families/events.md 展开结合crates/events/家族四个 crate 的源码与测试完整讲解其证据、派生视图、传输流三层架构生产者如何写入脱敏事件与审计信封ironclaw_event_store如何以 fail-closed 策略选择持久化后端ironclaw_event_projections如何在不持有写端口的前提下重放折叠只读模型以及ironclaw_event_streams如何在传输无关的前提下完成授权、准入与脱敏校验。读完本文你将掌握这套四阶段单向证据管线的分层规则、每个 crate 的公开接口与关键实现、生产环境后端选择与安全边界并能在自己的 Agent 系统中复刻同样的可重建、不可篡改、绝不成为权威的事件设计。IronClaw 是一个以隐私、安全与可扩展性为核心的 Agent OS。在其 Reborn 架构中crates/events/家族承担了整个系统的发生了什么的可追溯记录职责它既不是屏幕当前显示的内容也不是某个业务主体线程、触发器、记忆文档的类型化记录而是跨越内核、循环、领域与产品各层的横向事实流。整个家族严格按证据 → 存储 → 投影 → 流四个阶段单向推进任何反向的依赖箭头或写入路径都被视为设计缺陷。一、家族定位四阶段单向证据管线crates/events/的定位可以用一句话概括它是系统发生过什么的记录与屏幕此刻显示什么在结构上严格分离。原设计文档将这条链路描述为一条深度为四级的单向管道crates/events/ ├── ironclaw_event_log 证据词汇与日志 trait无存储驱动 ├── ironclaw_event_store 持久化后端与 fail-closed 配置校验 ├── ironclaw_event_projections 重放派生的只读读模型 └── ironclaw_event_streams 准入校验的流式投递一条事件从产生到被订阅者消费恰好经过四个阶段某个生产者发出一个已脱敏的事件或审计信封ironclaw_event_log的 trait 接纳它ironclaw_event_store选择一个持久化后端在单调游标monotonic cursor下追加该条目ironclaw_event_projections按需将日志折叠fold为限定作用域、仅元数据的读模型ironclaw_event_streams对这些投影进行授权与准入提供实时或重放订阅——它只读取投递领域outbound的推送候选从不真正发送。家族有一条铁律没有任何东西反向运行。投影不能修改它折叠出来的日志流不能凭空发明未通过重放得到的状态只有ironclaw_event_store可以写入持久化日志且家族中没有任何 crate 可以决定权威decide authority。从源码结构看这条单向性不只是文档约定而是被依赖关系写死的结构性事实ironclaw_event_projections只依赖ironclaw_event_log与中性的权威词汇 crate没有任何可写后端ironclaw_event_streams只依赖ironclaw_event_projections、权威词汇含 turn 词汇以及ironclaw_outbound的唯一一个只读方法。家族根目录的 AGENTS.md 将这条法律明确为三条projections never write authoritystreams never invent stateonly the store isolates drivers投影永不写权威流永不发明状态只有存储隔离驱动并补充了家族准入清单——脱敏证据词汇与日志 trait、持久化后端选择与 fail-closed 配置校验、重放派生读模型、准入校验的流投递恰好这四个阶段别无其他。二、边界与 substrates、domains、product 的分工设计文档用三个对比精确刻画了这个家族的独特位置。vssubstrates/底层机制 vs 时间性记录文件系统、libsql 运行时、密钥、网络、安全等 substrate crate 提供的是无时间概念的机制——隔离、连接准入、加密、出口加固。events/是在这些机制之上构建的时间性证据记录ironclaw_event_store通过存储织物storage fabric打开持久化后端并把每一次追加都路由经过它。substrate 没有历史events/就是历史本身它与 substrate 的唯一依赖就是它所追加的存储织物。vsdomains/主体记录 vs 横切事实流领域 crate 为某个主体线程、触发器、记忆文档拥有类型化的记录文法events/拥有的是跨切面的事实流它不是某个主体——它没有线程记录、没有触发器记录只有某事发生了或做出了某个审计相关决策的脱敏形态。领域建模这个事物此刻是什么events/建模发生了什么、可重放、与由哪个领域引起无关。vsproduct/投影 vs 产品视图ironclaw_event_projections产出的是仅元数据、重放派生、作用域校验的读模型没有写端口也没有自己的物化存储ironclaw_assistant负责把这些投影组装成用户可见的视图并拥有展示与命令语义。投影对屏幕如何渲染或用户下一步能做什么没有任何意见依赖方向只允许从 product 指向 events绝不反向。家族内部的三契约分离是承重设计证据log、投影projections、流streams是三个独立契约分别拆成独立 crateironclaw_event_log是纯词汇与 trait没有任何存储驱动——所有只需要记录事实的生产者因此完全不需要编译任何数据库或 TLS 依赖ironclaw_event_store是第二个独立 crate纯粹为了隔离驱动依赖锥driver cone并承载 fail-closed 的后端选择策略它依赖ironclaw_event_log绝不反向ironclaw_event_projections是第三个独立 crate因为它必须可证明不写入——它只依赖证据词汇与中性权威词汇绝不依赖任何存储驱动ironclaw_event_streams是第四个独立 crate因为只有它被信任读取投递领域outbound的推送候选家族中其他 crate 都不得持有该依赖。三、归属清单什么属于这里什么永远不属于设计文档给出了一份严格的准入/禁入清单这也是架构评审的直接依据。属于这里Belongs脱敏的事件与审计词汇、无驱动的追加日志 trait持久化后端选择与 fail-closed 生产配置校验重放派生、作用域与游标受限、无物化存储的读模型传输无关的订阅授权、准入控制以及在任何数据跨过线路之前的脱敏校验。永远不属于这里Never belongsSSE、WebSocket、Webhook 框架或任何具体传输——那是产品家族ironclaw_webui等的职责产品视图组装、命令处理或展示逻辑第二个写入权威——任何投影或流都不得写回持久化日志也不得发明未通过重放得到的状态清理持久化行不是这个家族提供的概念存储驱动在 store 之外——ironclaw_event_store是唯一被允许携带数据库/TLS 驱动锥的 crate供应商名称原始密钥、原始主机路径、原始工具输入/输出、审批理由、调用指纹invocation fingerprint、租约lease材料——以任何持久化或流式形态都不允许。家族根 AGENTS.md 还补充了领域记录文法domain record grammar属于crates/domains/本家族只拥有横切事实流。四、依赖方向从叶子到出口的单向图原设计文档给出了完整的依赖图这也是架构测试实际校验的对象ironclaw_event_log 只依赖中性权威词汇 crate家族的叶子 ironclaw_event_store 依赖 event_log ironclaw_common 存储织物 crate 权威词汇 ironclaw_event_projections 依赖 event_log 权威词汇别无其他 ironclaw_event_streams 依赖 event_projections 权威词汇含 turn 词汇 outbound 领域仅一个只读方法家族之外只有两个入口所有生产者/读者通过ironclaw_event_log的 trait 与ironclaw_event_projections的服务进入从不直接解析持久化行唯一的组装层例外组合根composition rootcrates/app/ironclaw_composition调用ironclaw_event_store的后端选择工厂构造出分发给所有人的持久化日志句柄。家族从不依赖内核、循环、扩展或产品家族。AGENTS.md 指出14 个工作区 crate 在 Cargo.toml 中声明ironclaw_event_log ...可用grep -rl ^ironclaw_event_log --includeCargo.toml crates验证覆盖内核/循环/领域/产品各层的生产者。这些规则由crates/app/ironclaw_architecture_tests中的架构测试强制执行运行cargo test -p ironclaw_architecture_tests包括层矩阵每个 crate 声明[package.metadata.ironclaw] layer substrates矩阵禁止命名 kernel/loop/product/app每 crate 拒绝规则投影不得命名ironclaw_event_store或ironclaw_filesystem投影永不写由链接权限强制流不得命名ironclaw_event_log、ironclaw_event_store或ironclaw_filesystem它只能通过投影触及证据驱动隔离只有被授权 crate 能链接 Postgres 等持久化驱动且ironclaw_event_store只能在私有后端模块体内提及驱动名同层边恰好固定五条事件族边——event_store → {event_log, filesystem}、event_projections → event_log、event_streams → {event_projections, outbound}新增或过期的同层边都会导致测试失败watch 与 push 是两个决策流授权订阅独立于 outbound 是否授权推送写入 outbound 的路径永远是缺陷。五、安全与权威模型脱敏在源头投影永不成为第二真相源这个家族继承了内核外围托付的持久化审计/事件追加与重放游标职责并贯彻一条总规则投影是可重建的且永不拥有权威。设计文档将其拆成三个何时安全证据只有在ironclaw_event_log的构造函数里完成源头脱敏后才安全持久化只有经过ironclaw_event_projections的作用域校验 仅元数据折叠后才安全投影——该 crate 没有任何写端口因此结构上就不可能成为第二真相源只有经过ironclaw_event_streams独立授权后才安全投递——watch 与 push 永远是两个决策绝不是一个订阅者对被投影的读权限绝不意味着投递资格。crates/events/AGENTS.md还指出本家族不提供清理持久化行的概念因为第二个写入权威在这个家族中没有位置。六、ironclaw_event_log脱敏词汇与追加日志 traitironclaw_event_log是整个家族的叶子与中性契约其 crate 文档src/lib.rs明确它定义了每个 Reborn 系统服务 crate 用来记录可观测运行时/进程迁移与控制面审计的小型脱敏词汇加上宿主运行时、调度器、进程管理器与审批解析器用来暴露可重放作用域流的持久化追加日志基座。它没有任何存储驱动公开表面如下EventSink/AuditSink尽力而为trait 文档src/sink.rs明确一次 sink 失败不得改变运行时或控制面结果——返回Result只是让实现可以把诊断交给独立的观察者绝不是让尽力而为的调用方短路周围的工作流。运行时关键路径的生产者必须显式要求NonBlockingEventSink防止异步专用 sink 被接进绝不能等待的路径。DurableEventLog/DurableAuditLog显式错误追加失败必须传播read_after_cursor受两层权威门控——调用方必须先验证请求的EventStreamKey与消费者被授权的流匹配然后由实现而非调用方强制ReadScope使项目级/线程级消费者无法拿到同流内其他项目/线程的记录。DurableEventLog还要求实现提供append_batch默认按条追加可被合并覆盖与原子化的head_cursorPR #3931 引入用于区分重放与实时边界杜绝竞态。游标词汇EventCursor单调、serde(transparent)包装u64、EventStreamKey按(tenant, user, agent)分区、ReadScope在流内进一步限定 project/mission/thread/processSome字段是收紧而非宽松默认ReadScope::any()仅限测试与管理聚合路径、EventLogEntryT与EventReplayTsrc/cursor.rs。错误词汇EventError提供Serialize、Sink、DurableLog、ReplayGap { requested, earliest }与InvalidReplayRequestsrc/error.rs——显式的重放缺口错误是游标设计的核心游标早于最早保留条目时返回ReplayGap传输层据此请求快照/重建而不是静默丢数据。内存引用实现InMemoryDurableEventLog、InMemoryDurableAuditLog、InMemoryEventSink、InMemoryAuditSink用于测试与参考循环生产后端在ironclaw_event_store中依赖这些 trait 而非把驱动拉回本 crate。6.1 脱敏不变量构造即脱敏RuntimeEvent是脱敏后的运行时事件载荷字段保持pub以方便进程内检视但在每一次 I/O 边界都强制执行脱敏不变量typed 失败构造函数与with_error_summary在构造时应用净化自定义Serialize/Deserialize在进出线路时重跑净化器因此即使进程内调用方直接拼字段也无法把原始错误文本、路径或 token 形状的秘密走私过任何serde_json::to_*或持久化append路径src/runtime_event.rs。具体的脱敏规则来自源码常量与函数error_kind只接受lower_snake_case标识符可带.或:分隔整体不超过 64 字节、每段不超过 24 字节任何形似路径、JWT、base64 token、API key、数字前缀、前导下划线的值都被折叠为稳定的UNCLASSIFIED_ERROR_KIND Unclassifiederror_summary由宿主编写且有界512 字节上限不安全的非空摘要被折叠为固定安全显示标记如the tool failure details were redacted、cant access your workspace fileduration_ms被钳制到MAX_RUNTIME_EVENT_DURATION_MS24 小时即 86_400_000 ms保证可观测元数据有界hook 相关字段hook_id、hook_point、hook_trust_class、hook_decision、hook_failure_category、hook_failure_disposition与恢复字段recovery_stage/class/disposition全部使用闭合词汇标签并通过对应净化器。RuntimeEventKind是闭合枚举serde(rename_all snake_case)共 21 种事件种类DispatchRequested、RuntimeSelected、DispatchSucceeded、DispatchFailed、CapabilityActivityRequested/Succeeded/Failed、ModelStarted/Completed/Failed、AssistantReplyFinalized、LoopCompleted/Cancelled/Failed、ProcessStarted/Completed/Failed/Killed、HookDispatched、HookDecisionEmitted、HookFailed、FailureRecovered。值得注意的是审批相关的事件种类被刻意缺席——审批解析是控制面关注点以AuditEnvelopeAuditStage::ApprovalResolved的形式记录。6.2 安全审计词汇无载荷的设计src/security_audit.rs 定义了SecurityAuditSink/SecurityAuditEvent等安全审计原语其核心不变量是无自由文本 String 载荷事件只记录哪个边界SecurityBoundaryLeakDetector、NoExposureGuard、CredentialChannel、AuthContinuation、HookDeny、McpDirectLease、什么决策SecurityDecisionBlocked、Allowed、ScopeMismatch、ReplayRejected、一个static原因代码如leak_redact_failed、no_exposure_block_header、可选 capability id 与作用域、以及时间戳。原因代码按指标名约定小写、snake_case、永不用户派生、永不 PII、永不秘密。该 crate 还提供TracingSecurityAuditSink与NoopSecurityAuditSink等实现。七、ironclaw_event_storefail-closed 后端选择与驱动隔离锥ironclaw_event_store是生产组合侧的持久化后端它拥有后端选择配置类型、fail-closed 的生产配置校验以及实现ironclaw_event_logtrait 的具体持久化日志适配器src/lib.rs。它同时是家族中唯一被允许携带数据库/TLS 驱动锥的 crate——隔离在这里意味着家族其他生产者与消费者永远不用编译这段依赖。7.1 后端选择配置RebornEventStoreConfig枚举定义了五类后端变体说明InMemory内存引用后端仅显式本地/测试 profile 合法生产直接拒绝Jsonl { root, accept_single_node_durable }单节点持久 JSONL 后端生产必须显式接受单节点持久模式防止成为隐式内存式回退Postgres { url, tls_options }通过 URL 打开PostgresRootFilesystem走统一文件系统分发织物PostgresPool { pool }复用已打开的连接池托管生产用它避免为事件日志再开一个独立池Libsql { path_or_url, auth_token }本地路径或远程 URL 打开LibSqlRootFilesystemLibsqlFilesystem { filesystem, path_or_url }复用已打开的 libSQL 文件系统path_or_url仅保留用于生产持久性/传输策略校验7.2 fail-closed 校验生产没有隐式回退RebornProfileStandalone/Test/Production控制哪些回退合法。build_reborn_event_stores(profile, config)在Production下会拒绝InMemory→ProductionInMemoryDisabledJsonl未显式accept_single_node_durable→ProductionJsonlRequiresAcceptancelibSQLhttp://明文 URL →ProductionLibsqlClearTextDisabled裸词无 scheme 无路径语法如events.db或db.example.com可能是远端主机名拼写错误或 CWD 相对文件→ProductionLibsqlAmbiguousTargetfail closed远端 Postgres 明文sslmodedisable→RemotePostgresClearTextDisabled除非显式allow_remote_cleartext: true默认Prefer在远端会被强制升级为Require。libSQL 目标的分类逻辑classify_libsql_target是大小写不敏感的——HTTPS://、LibSQL://的大小写变体不会落入本地文件分支从而避免以 URL 命名的节点本地 SQLite 文件这类静默事故。Postgres 的本地/远端判定基于解析后的Config::get_hosts()/get_hostaddrs()而非原始字符串因此hostaddr关键字形式、postgresql:///db?host...查询参数形式、混合 socketTCP 主机列表都被正确归类源码中的回归测试覆盖了这些边界。连接池默认DEFAULT_POSTGRES_POOL_MAX_SIZE 8从 2 提升避免单轮读突发在事件存储/触发器仓库/结果读取共用池时自排队并配有 30 秒的 checkout/create/recycle 超时把池饱和从永久卡死转化为可重试错误。7.3 文件系统后端与路径布局src/durable_log.rs 中的FilesystemDurableEventLog/FilesystemDurableAuditLog把持久化日志路由经过ScopedFilesystem的统一append/tail平面而不是直接说 SQL。路径布局为/events/kind/tenant/user/agent其中kind为runtime或auditagent在无代理 id 时回退为_none。路径组件直接来自已校验的EventStreamKeyid已被ironclaw_host_api约束到安全字母表。游标语义append返回的游标其u64即底层挂载的单调SeqNoread_after_cursor按有界tail页推进并在 Rust 侧应用ReadScope过滤next_cursor会越过尾部被过滤的记录避免下次重放重复扫描若after 0而 tail 为空则回退探测after - 1来区分已追平 head与外部未来游标后者返回ReplayGap。append_batch按流路径分组、每路径一次多行写入一轮突发通常共享同一流从而折叠为一次往返。该 crate 还提供CoalescingEventSink高频生产者的合并 sink见 src/coalescing_sink.rs。为什么单独成 crate它是家族中唯一允许携带数据库/TLS 驱动锥的 cratePostgres 驱动仅出现在私有postgres_backed模块体内架构测试会逐文件扫描且其公开表面不暴露任何后端特定错误类型——错误被脱敏并后端泛化。八、ironclaw_event_projections重放派生的只读读模型ironclaw_event_projections是读模型边界上层 Reborn 层应消费这些 DTO而不是直接解析持久化事件/审计行。crate 文档src/lib.rs明确第一个实现是对DurableEventLog的重放派生因此独立于具体 JSONL/PostgreSQL/libSQL 适配器。8.1 服务与游标词汇EventProjectionService/AuditProjectionServicetrait 分别提供snapshot与updates两个方法实现为ReplayEventProjectionService/ReplayAuditProjectionService后者包装Arcdyn DurableAuditLog。ProjectionScope由stream: EventStreamKey选择(tenant, user, agent)分区read_scope: ReadScope在分区内收紧阻止产品调用方观察相邻项目/线程/进程记录组成。ProjectionCursor是作用域绑定的每个游标携带其铸造时的ProjectionScope。因为持久化流按(tenant, user, agent)分区而 project/mission/thread/process 过滤发生在读过滤器内部线程 B 返回的游标其运行时值可能落在线程 A 的共享流内在错误作用域下重放会静默跳过早期记录因此作用域不匹配的游标恢复一律返回ProjectionError::RebaseRequired——消费者必须请求全新快照而不是假设丢失条目被静默跳过。硬性分页边界MAX_PROJECTION_PAGE_LIMIT 1_000请求超限在读取前即被拒绝为InvalidRequest运行态折叠有STATE_REPLAY_PAGE_LIMIT 256的页大小与STATE_REPLAY_MAX_EVENTS 100_000的硬上限超过则表面RebaseRequired绝不静默返回部分运行态视图。8.2 读模型 DTOProjectionSnapshottimeline: ThreadTimeline、runs: VecRunStatusProjection、capability_activities、next_cursor、truncatedProjectionReplayupdates返回updates: VecTimelineEntry、capability_activity_transitions、runs、capability_activities、next_cursor、truncatedThreadTimeline/TimelineEntry线程时间线条目含kind: TimelineEntryKind闭合枚举映射自RuntimeEventKind、invocation_id、capability_id、provider、runtime、process_id、output_bytes、error_kind以及闭合词汇的 hook/恢复元数据RunStatusProjectionRunProjectionStatusRunning/Completed/Cancelled/Failed/Killed、last_cursor、updated_atCapabilityActivityProjectionCapabilityActivityStatusStarted/Running/Completed/Failed/Killed、first_cursor/last_cursor、error_detail来自RuntimeEvent.error_summary且重放时重跑净化器审计侧AuditProjectionSnapshot/AuditProjectionReplay/AuditProjectionEntrystage、correlation_id、approval_request_id、action_kind、decision_kind、result_status等以及MemoryAuditProjectionMetadata记忆领域审计的可选元数据如relative_path_hash、byte_count、chunk_count、protected_path_class、reason_code、severity、finding_count。8.3 有界内存折叠与 checkpointsnapshot()的runs始终反映当前作用域流的流头fold_runtime_to_head逐页增量折叠内存O(scoped invocations)与流长无关而不仅仅是被分页的时间线页——否则limit1的快照会把已终结运行的Running状态悄悄发给消费者PR #3212 评审反馈。updates()通过fold_runtime_prefix只为本页触及的调用折叠前缀O(touched.len())。RuntimeProjectionCheckpointCache为每个作用域缓存折叠进度把重复轮询从全量重放降为增量推进。为什么单独成 crate投影折叠与流订阅完全隔离投影失败永远不会触及实时订阅投影与存储驱动完全隔离使投影永不写权威由 crate 被允许链接什么来强制而非仅靠代码碰巧不写。九、ironclaw_event_streams传输无关的流管理器ironclaw_event_streams是家族的投递腿传输无关的流管理器负责授权、准入控制、有界 live/replay 缝合、滞后与重建处理以及只读的 outbound 推送候选查找——它从不发送src/lib.rs。SSE、WebSocket 或任何通道特定帧在此一律不存在。9.1 EventStreamManager 与注入协作者EventStreamManager::newsrc/manager.rs接受六个注入协作者全部以 trait 对象泛型装配协作者类型职责projectionArcdyn EventProjectionService快照/更新来源access_policyArcdyn ProjectionAccessPolicyactor/scope/view/target 授权检查admission_policyArcdyn ProjectionStreamAdmissionPolicy订阅准入与配额update_sourceArcdyn ProjectionUpdateSourcelive 更新源redaction_validatorArcdyn ProjectionRedactionValidator投递前脱敏复检outbound_storeArcdyn OutboundStateStorePortoutbound 领域只读推送候选查找fetch_snapshot/subscribe等公开方法都会先执行authorize(...)actor/scope/view/target 授权检查随后才返回快照、重放或 live 投递。ironclaw_outbound的依赖是单一只读方法且按设计只读——写入 outbound 的路径在这个家族永远是缺陷。9.2 RAII 准入许可与默认配额src/admission.rs 定义ProjectionStreamAdmissionPolicy与ProjectionStreamAdmissionPermit。许可持有AdmissionRelease其Drop实现自动释放槽位——被遗弃的订阅总是释放它的配额。默认限额ProjectionStreamLimits::defaultper_tenant: 64 # 每租户最多并发订阅 per_actor: 16 # 每 actor 最多并发订阅 per_scope: 8 # 每作用域最多并发订阅 global: 512 # 全局并发上限任一维度超限即返回AdmissionDenied。AllowAllProjectionAccessPolicy作为默认授权策略存在生产会注入真实策略。9.3 投递前脱敏复检src/redaction.rs 的NoExposureProjectionRedactionValidator把信封序列化为字符串后扫描 11 个哨兵标记RAW_PROMPT_SENTINEL、TOOL_INPUT_SENTINEL、TOOL_OUTPUT_SENTINEL、SECRET_SENTINEL、HOST_PATH_SENTINEL、RAW_RUNTIME_OUTPUT_SENTINEL、BACKEND_DIAGNOSTIC_SENTINEL、RAW_PROVIDER_ERROR_SENTINEL、INVOCATION_FINGERPRINT_SENTINEL、APPROVAL_REASON_SENTINEL、LEASE_MATERIAL_SENTINEL——任何命中都返回ProjectionStreamError::Redaction即任何跨向订阅者的值在原始提示词、工具输入/输出、秘密、主机路径、提供商错误、调用指纹、审批理由、租约材料或后端诊断上均失败关闭。ProjectionValidationCache1024 条目有界集缓存已验证信封避免对稳定快照反复序列化扫描。为什么单独成 crate证据/投影/流的三契约分离是常设设计不变量本 crate 是它的投递腿——家族中唯一被信任读取投递状态的成员因此另外三个 crate 可以在完全不考虑投递语义的情况下被推理与依赖。十、家族治理AGENTS.md 与架构测试家族根 AGENTS.md 是家族的治理法律除三定律与准入清单外还规定了每个 crate 的指南都必须复述自己那份法律切片拥有什么、绝不可持久化或暴露什么、以及自身依赖中哪一个是有意例外这条家族法律只有家族根能单独表述单向管线证据 → 存储 → 投影 → 流任何指向该顺序的依赖箭头永远错误无论单 crate 的局部规则如何允许规则由crates/app/ironclaw_architecture_tests的架构测试强制执行cargo test -p ironclaw_architecture_tests包括层矩阵、每 crate 拒绝规则、驱动隔离与同层边清单详见第四节。原设计文档还注明家族 AGENTS.md 的每 crate 携带指南要求于 2026-08-05 修订为每条事实一个权威归属地遵循 guidance-conventions.md——每 crate 一个AGENTS.md或CLAUDE.md作为唯一权威文件第二个文件只做指针。设计记录、处置、迁移约束与未决决策分别沉淀在 PROPOSAL.md§6.3 每 crate 处置、§8 依赖模型、CHECKLIST.md 与 PLAN.md冻结的契约见 contracts/events.md 与 contracts/events-projections.md。十一、落地建议与验证入口在生产组合中事件与审计日志的构造路径是组合根调用ironclaw_event_store::build_reborn_event_stores(profile, config)或build_reborn_event_stores_from_root_filesystem复用既有RootFilesystem得到RebornEventStores { events, audit }两个Arcdyn DurableEventLog/Arcdyn DurableAuditLog句柄再注入给家族内外所有消费者。选择后端时注意本地单机开发Jsonl需在生产显式accept_single_node_durable: true或本地 libSQL 绝对/相对路径托管生产PostgresPool/LibsqlFilesystem复用 substrate 既有连接避免为事件日志开第二池远端 Postgres 必须满足sslmoderequire默认Prefer会被强制升级远端 libSQL 必须https://或libsql://测试InMemory或显式非生产 profile。验证这套管线行为的测试入口包括ironclaw_event_log/tests/durable_log_contract.rs游标/重放契约、ironclaw_event_store/tests/profile_contract.rs与durable_event_store_contract.rsfail-closed 配置与持久化后端契约、ironclaw_event_projections/tests/replay_projection_contract.rs重放折叠契约、ironclaw_event_streams/tests/event_stream_manager_contract.rs授权、准入、脱敏与订阅契约。十二、关键要点四阶段单向管线是铁律证据 → 存储 → 投影 → 流反向依赖箭头永远错误只有ironclaw_event_store写持久化日志。脱敏发生在源头ironclaw_event_log构造即脱敏Serialize/Deserialize在每条线路复检ironclaw_event_streams投递前以 11 个哨兵再次失败关闭。投影可重建、永不权威ironclaw_event_projections无物化存储、无写端口作用域不匹配的游标恢复强制RebaseRequired。watch 与 push 是两个决策订阅授权独立于投递授权outbound 依赖是唯一只读方法。驱动锥隔离是结构性事实只有 store 携带数据库/TLS 驱动投影与流按链接权限就不可能写权威。游标是压缩友好的重放只按游标推进后端可压缩存储而不破坏消费者恢复位置早于最早保留条目的游标显式返回ReplayGap。这套设计把发生了什么从屏幕显示什么中彻底分离用依赖图、架构测试与源头脱敏三重手段把安全边界变成可证明的结构事实是构建可审计、可重放、隐私安全的 Agent 运行时值得直接借鉴的模板。赞分享人工智能AI 应用交互助手AI Agent【免费下载链接】ironclawIronClaw is an Agent OS focused on privacy, security and extensibility项目地址https://gitcode.com/gh_mirrors/iro/ironclaw点击查看免费下载相关推荐IronClaw 事件子系统crates/events架构解析脱敏证据日志、投影读模型与传输无关订阅流的单向管道IronClaw 事件子系统crates/events架构解析脱敏证据日志、投影读模型与传输无关订阅流的单向管道 导读 本文聚焦 IronClaw面向隐人工智能AI 应用交互助手AI AgentIronClaw 事件系统架构指南Durable Events、Projection 与 Transport Streams 的可重放治理规则IronClaw 事件系统架构指南Durable Events、Projection 与 Transport Streams 的可重放治理规则 导读 Iron人工智能AI 应用交互助手AI AgentIronClaw 事件投影Event Projections只读、元数据级、可重放的读模型边界深度解析IronClaw 事件投影Event Projections只读、元数据级、可重放的读模型边界深度解析 IronClaw 的 ironclaw_event人工智能AI 应用交互助手AI Agent上一篇探索Underscore Analysis深入JavaScript的实用工具库下一篇新手入门 ReVanced APKs3分钟完成Magisk模块安装与自定义配置创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考