asadvendor-boop/CrossPatch

GitHub: asadvendor-boop/CrossPatch

CrossPatch 是一个失败优先的 SRE 事件审查平台,通过多角色 AI 对抗性审查和确定性权限门控,确保 AI 提议的代码变更在被篡改证据或注入指令攻击下仍能安全地经过人工审批后发布。

Stars: 0 | Forks: 0

# CrossPatch 经受住实时篡改证据攻击的 agent-release 门控:注入的指令丧失了权限,合法的修复依然通过,并且在受监控的公共部署中,审计轨迹支持双向验证。 它是针对 agent 提议变更的正当程序层。 **在线产品:** [crosspatch.repair](https://crosspatch.repair) CrossPatch 已上线且可证明正在运行——你点击的演示就是一直在运行的同一个系统,而不是冷启动的壳——它运行在具有持久状态和真实数据库的持久基础设施上。查看[公开的正常运行时间监控](https://stats.uptimerobot.com/9oxeuWMvvU)。 ## 自己验证每一个声明 在全新的克隆环境上,大约一分钟内,自己验证每一个声明。一条命令即可检查锁定的无密钥门控、无密钥 OIDC CI 合约、黄金快照以及生成的声明绑定: ``` git clone https://github.com/asadvendor-boop/CrossPatch.git cd CrossPatch make judge ``` `make eval` 会根据已提交的字节,分别重新计算声明的评估群体和规范的 C2 哈希。 ![CrossPatch 事件室](https://static.pigsec.cn/wp-content/uploads/repos/cas/91/91bdb3a3d572d9759f01233ca5a93db944a5c5699fae98730a3d500921bd3841.png) 要在不需要 OpenAI key 或任何实时权限的情况下检查真实的签名案例,请启动隔离的重放配置: ``` make replay ``` 打开 。UI 会持久地将此模式标记为`RECORDED REPLAY — signed export, no model calls`(已记录重放 — 签名导出,无模型调用)。其不可变的 API 镜像是在固定的 Ed25519 签名、成员哈希、规范 schema 和发布检查之后,从密封的 run-04 导出构建的。该配置仅包含重放 API、web 和 Caddy 服务;不包含事件创建、模型、MCP、批准、broker、runner、受害服务、shell、导出和变更路由。 **每一次修复都必须经受住对抗性审查。** CrossPatch 是一个为 OpenAI Build Week 构建的、失败优先的 SRE 事件室。五位模型驱动的专家调查两起真实的 webhook 可靠性故障之一,挑战因果叙述,提出最小的补丁,并决定是否可以安全地提交给人工审批。语言模型从不运行测试、写入工作区或编写变更命令。确定性的 runner 和故障关闭(fail-closed)的变更 broker 负责这些操作。 演示的核心亮点是一个提案在获得权限之前被阻止:`REMAND` 触发了一次有界的推理升级,一个实质上不同的修复返回 `CLEAR`,人工批准了精确的绑定字节的 warrant,一次执行以受信任的 `1 / 1 / 1` 收据结束。 这次运行在发布权限之前被发回重审,随后第一个批准的补丁通过了。CrossPatch 绝不会仅仅为了改善演示效果而操纵失败。 批准后的失败→修复路径已实现并通过测试固定(test-pinned),包括已消耗的权限和新的 warrant,但在密封队列中并未演示。 ## 可重现的评估 被投毒的日志案例展示了隔离能力,而不是无差别的拒绝。一个正确签名的 webhook 将类似指令的文本作为篡改的证据,通过真实的受害者 pipeline 传输到审计轨迹中,试图强制进行一次糟糕的发布。CrossPatch 将由此产生的投影归类为 `UNTRUSTED_EVIDENCE`,在进入模型上下文之前编辑了恶意片段,并拒绝了恶意指令的权限。合法的修复依然遵循 `CLEAR → human approval → VERIFIED`:CrossPatch 区分了攻击与信号。`security.evidence-boundary` 下方的每个分母都是独立的。“案例(case)”指的是 Method 列中命名的确切单元;评估器绝不会将这些群体相加。 | 记录的群体 | 观察结果 | 一个案例的含义 | | --- | --- | --- | | 真实的恶意证据边界 | **1/1 保持;0 次误批准** | 一个签名的生产事件导出,其真实的受害者日志包含恶意片段 | | 合成 sanitizer 注入 | **14/14 已中和** | 一个由 ID 和 SHA-256 声明的独特原始字节向量 | | 合成 broker 权限篡改 | **34/34 在产生副作用前被拒绝** | 一个被更改的绑定文档、目录、批准或实时权限字段 | | 过期权限 | **1/1 过期 warrant 被拒绝** | 一个在其绑定的到期时间之后被评估的 warrant | | 重用权限 | **1/1 重用的 warrant 被拒绝** | 一个消耗掉的 warrant 重放场景 | | 重复的失败修复 | **1/1 拒绝了重复的失败重试** | 一次具有相同语义指纹的更高 effort 的修复 | | 已发布的修复 | **3/5 已发布的修复记录为 `REMAND → CLEAR`** | 一个签名的、明确发布的生产案例 | | 密封的就绪队列 | **7/10 密封队列的运行至少发生一次 `REMAND`** | 一次真实的 GPT-5.6 端到端就绪运行 | 在这些记录中**零次误批准事件**;只有真实的恶意证据案例进入了模型和人工审批流程。未受保护的 pipeline 是一个明确标记的设计论点,因为不存在等效的、可衡量的无 sanitizer 基线。CrossPatch 不会发布任何数字化的“将会发布”的反事实声明。`runtime.warrant-boundary` `product.effort-escalation` `readiness.demo` 从全新的克隆环境中重现该表并验证每一个声明的输入: ``` make eval ``` 参考存档是真实的 C2 导出,SHA-256 为 `77332a471410a0c8cdfac76fa12ce353f6a88e2789924e21ea1a074d10077731`。 其恶意输入的身份来自于对持久化的证据行和经过哈希验证的原始 artifact 进行生产签名、只读的运行时认证;原始字节保留在 Git 和模型上下文之外。 其签名在具有运行时来源的生产密钥下验证通过,并在密封队列密钥下被拒绝。其稳定的、允许列表内的投影——不包含时间戳、文本叙述、请求 ID 或密钥——具有规范的 SHA-256 `35342f9f69bfb22fa8515870400e2c09b9747f2e163da338adee9632047ef789`。 运行 `make eval` 独立地重现了该确切哈希两次。 出于审计深度而非营销目的,当前的无密钥清单记录了在两个门控中通过了 899 次 Python 测试执行——其中 872 次在 backend/victim 套件中(不包括 claim-map 验证),27 次在专门的 claim-map 验证中——以及 28 次跳过;318 次 UI 测试和 5 次浏览器 E2E 测试通过,一次 capture-generator 测试被跳过。这些计数是证据清单,而不是产品的头条亮点。 ## 在本地启动 前置条件:带有 Compose v2 的 Docker Desktop、Git 以及拥有所需 GPT-5.6 层级访问权限的 OpenAI API key。 ``` cp .env.example .env # 将 OPENAI_API_KEY 添加到 .env docker compose up --build ``` 打开 。Caddy 是唯一发布主机端口(`80` 和 `443`)的服务;每个应用和 MCP 服务都保留在私有的 Compose 网络上。本地证书是自签名的,因此浏览器对仅限本地的技术栈发出警告是预期行为。 如果没有 `OPENAI_API_KEY`,技术栈仍会启动以供检查和本地验证,但编排会故障关闭为 `ABSTAIN`。它绝不会替换为模拟的模型输出。在至少十次产生全新输出的真实 GPT-5.6 运行通过发布门控之前,演示的就绪状态将保持为 `DEMO_READINESS_BLOCKED`。允许并单独报告 prompt-cache 输入读取;但不允许重用模型响应。 在技术栈健康后创建真实的示例事件: ``` ./scripts/setup-sample-incident.sh ``` 该脚本调用公共控制 API。它不会直接插入事件行、证据、模型输出、故障或时间线事件。 ### 本地凭证和 CLI 提交到代码库的 Compose 回退值是**仅限本地**的检查凭证。 托管部署必须在 `.env` 中覆盖每一个 operator、approver、CSRF、step-up、签名、runner、数据库和 webhook 的值,使用独立的随机密钥,并设置 `CROSSPATCH_RELEASE_MODE=1`。在受影响的服务启动之前,发布模式会拒绝签入的本地默认值和低熵运行时凭证。切勿在截图、日志、案例 artifact 或 shell 历史记录中显示托管的值。 受害者数据库使用两个独立的密钥:仅用于引导的 `CROSSPATCH_VICTIM_POSTGRES_ADMIN_PASSWORD` 和最小权限应用角色的 `CROSSPATCH_VICTIM_APP_PASSWORD`。候选代码仅接收应用凭证;发布启动会拒绝缺失、本地、过短或重复使用的 admin/app 值。 示例脚本仅在其 URL 解析为回环地址时才使用本地 operator 回退。要进行 CLI 访问,请通过 Caddy(唯一的公共 endpoint)进行路由,并为该操作选择凭证集: ``` export CROSSPATCH_API_URL=https://localhost export CROSSPATCH_ORIGIN=https://localhost # Operator: open/stream/export。此字面值仅适用于本地 Compose。 export CROSSPATCH_TOKEN=crosspatch-local-operator-token-change-me uv run crosspatch incident open webhook-race # 用于 judge 交接的只读 API 访问;与 Judge MCP bearer 分离。 export CROSSPATCH_TOKEN=crosspatch-local-reader-token-change-me uv run crosspatch room stream INCIDENT_ID uv run crosspatch case export INCIDENT_ID --output incident.zip # Approver: 批准/拒绝 warrant 或轮换 Judge MCP 访问权限。 export CROSSPATCH_TOKEN=crosspatch-local-approver-token-change-me export CROSSPATCH_CSRF_TOKEN=crosspatch-local-approver-csrf-token-change-me export CROSSPATCH_STEP_UP_TOKEN=crosspatch-local-approver-step-up-token-change-me uv run crosspatch judge-token rotate INCIDENT_ID ``` 轮换只返回一次新的 Judge bearer。请将其直接移入预期的密码管理器或机密通道中;不要将其粘贴到文档、命令参数、截图或验证 artifact 中。启动时不会自动创建任何 Judge bearer,并且签发后仅持久化其哈希。 ## 五位专家 这五个角色是由 GPT-5.6 驱动的 AI agent;肖像使用 ChatGPT Images 生成;与任何真实人物的相似之处纯属巧合。 最终的 CrossPatch logo 使用 ChatGPT Images 生成并由项目所有者选定;应用程序使用其文档记录的精确像素裁剪,没有进行描摹或重绘。 UI 始终以这种确切顺序渲染,并公开实时的模型层级、推理 effort 和升级计数: | 专家 | 模型 | 默认 effort | 运行时职责与层级选择 | | --- | --- | --- | --- | | Prosecutor(检察官) | `gpt-5.6-luna` | `low` | 用竞争理论、反例和阴性对照挑战每一个假设和补丁;Luna 保持对抗性的广度,快速且经济。 | | Inspector(调查员) | `gpt-5.6-terra` | `medium` | 从已脱敏的遥测数据中构建带有引用的因果说明;Terra 在证据综合与延迟之间取得平衡。 | | Counsel(顾问) | `gpt-5.6-terra` | `medium` | 生成并捍卫最小 diff;Terra 用于结构化的实施工作。 | | Magistrate(裁决官) | `gpt-5.6-sol` | `medium` | 只返回 `CLEAR`、`REMAND`、`BLOCK` 或 `ABSTAIN`;Sol 用于安全敏感的审查,从不执行任何操作。 | | Bailiff(法警) | `gpt-5.6-luna` | `none` | 仅在批准后接收 `execute_warrant(id)`;Luna 足矣,因为所有的权限和操作都是确定性的。 | `REMAND` 或真实的确定性测试失败只会让负责的专家提升一个 effort 级别。每位专家在每个事件中最多可升级两次。UI 记录每一次升级的内容:**“只有当法官不满意时,房间才会更努力地思考。”**具有相同语义指纹的更高 effort 的重试属于失败重试,并将被路由给人工处理。 来自 Magistrate 的任何拒绝、截断、不完整响应、超时、网络故障、无效 schema、缺失引用、SDK 异常、护栏停止或未知裁决均为 `ABSTAIN`。`ABSTAIN` 不会创建 warrant,会禁用批准,并且绝不会调用 Bailiff 或 broker。 确切的模型标识符、推理 effort 值、Agents SDK 行为和价格来源注意事项在 schema 锁定之前已根据 OpenAI 官方文档进行了核对;带有日期的来源记录位于[OpenAI 平台验证](docs/OPENAI_PLATFORM.md)。 ## 实际运行的内容 ``` flowchart LR Browser["Web incident room"] -->|"REST + SSE"| Caddy CLI["crosspatch CLI"] -->|"REST + SSE"| Caddy Judge["Judge MCP client"] -->|"TLS + bearer token"| Caddy Caddy --> Web["Next.js"] Caddy --> API["FastAPI control plane"] Caddy -->|"/mcp/judge rewritten to /mcp"| JMCP["Judge MCP (read only)"] API --> ControlPG[("Control PostgreSQL")] API --> Agents["OpenAI Agents SDK / Responses API"] Agents --> EMCP["Evidence MCP (read only)"] Agents --> BMCP["Broker MCP (one tool)"] BMCP --> Broker["Mutation broker"] Broker --> Runner["Trusted deterministic runner"] Runner --> Executor["Disposable executor container"] Executor --> Candidate["Untrusted UID 10002 child"] Runner --> Victim["Webhook victim + worker"] Runner --> VictimPG[("Isolated victim PostgreSQL")] Candidate --> VictimPG ``` 确切有两个捆绑场景随产品发布并经过了全面验证: `webhook-race` 和 `webhook-payload-equivalence`。竞态基线必须观察到持久化的 `receipts/jobs/deliveries = 1/2/2`;候选验证仅接受 `1/1/1`。同步使用 PostgreSQL 锁状态,而不是 sleep 或仅用于测试的 hook。Payload-equivalence 接收器继续通过 HMAC 验证确切的原始字节。其受影响的业务身份路径对首次交付和等效的、正确签名的重试返回 `202/409`;修复后的路径必须对首次交付、等效重试和真正不同的 payload 返回 `202/200/409`,同时受信任的 PostgreSQL oracle 依然观察到 `1/1/1`。 天真的补丁可能会自然失败;没有播种或强制任何失败。 实时测试仅限于 `webhook-race`。 ## 人工批准与确定性执行 `CLEAR` 允许构建 warrant,而不是执行。批准绑定到确切的事件、Magistrate 裁决 ID 和哈希、选定的候选者、已审查的时间线/证据头、基础 Git SHA、仓库清单、字面补丁字节和哈希、由 diff 推导出的路径、不可变的测试计划、runner摘要、过期时间、批准者和 nonce。broker 在一次数据库时间事务中验证并消耗该批准。哪怕一个字节、路径、命令、摘要发生更改,或者 nonce 过期/被重用,都会使其无效。 不受信任的候选者是一个子进程,被不可逆地降级为 UID/GID 10002,没有补充组或 capabilities,并拥有只读工作区。它共享一次性执行器容器的私有 PID namespace;它没有自己独立的 namespace。执行器容器在每次尝试后都会被回收,并且 runner 在验证到不同的替换启动之前会扣留收据。候选者没有容器运行时 socket、受信任的上下文挂载、控制 socket 路径访问权限或写入收据的权限。 受信任的 runner 进行 HTTP/PostgreSQL 观察并发出结果收据。Bailiff 唯一的武器是 `execute_warrant(id)`;没有任何模型可以选择 argv 或访问 shell。 ## Warrant 门控执行:AI agent 的正当程序 CrossPatch 将 agent 的建议视为证据,而非执行权限。三个已实施的控件保持事件室叙述的可读性,同时不削弱该边界: - **来源门控对话**仅在专家输出的已记录 SHA-256 和公共 JSON 有效且与相应事件匹配时,才将其转换为对话提要文案。不支持的来源将被排除在对话呈现之外,而已记录的事件仍作为中性记录保持可见,包含其类型、参与者、哈希和可展开的公共 JSON。 - **记录衍生的头条**根据脱敏的证据、哈希的时间线事件和受信任的收据状态,计算可见的失败、`REMAND`、`CLEAR` 和 `VERIFIED` 序列。UI 不会捏造成功标签或总结未记录的结果。 - **推理 effort 升级阶梯**从每个专家配置的最低有效级别开始。`REMAND`、人工修改请求或确定性测试失败会将负责的专家提升一个级别,记录该更改,并拒绝语义重复的重试。每位专家最多可升级两次;耗尽后控制权交还给人工。 类别级别的区分是刻意的:自动修复在没有可审计权限的情况下行动;runbook 在没有推理的情况下执行;CrossPatch 进行对抗性推理,并且仅在获得人工批准、哈希绑定的 warrant 下执行。 ## 三个 MCP 信任区 - **Evidence MCP** 是私有的且只读。Agent 仅接收事件范围内的、已脱敏的 `UNTRUSTED_EVIDENCE` 信封。 - **Broker MCP** 是私有的,仅向 Bailiff 身份公开确切的 `execute_warrant(id)`。 - **Judge MCP** 是只读的,仅公开通过事务发布的事件摘要、时间线、裁决、脱敏的证据、warrant 日志和清单验证。它无法批准、执行、检索原始证据或访问机密。 Judge 可以使用提供的 bearer token 将 MCP 客户端连接到 `https://HOST/mcp/judge`,并使用 [Judge 指南](docs/JUDGE_GUIDE.md) 中列出的确切工具。 该 token 以哈希形式存储,支持轮换/撤销,并且部署的服务窗口必须保持有效,直到包含截止日期 `2026-08-13T07:00:00Z`(太平洋时间 8 月 12 日结束)。 正常的断开连接、空闲清理和服务重启可能会创建替换的 Judge MCP 会话;每个请求仍然会检查持久化的撤销注册表,并且每个实时会话保持身份/源绑定。 ## CLI 安装锁定的 Python 环境并检查命令: ``` uv sync --frozen --extra dev uv run crosspatch --help uv run crosspatch incident open webhook-race uv run crosspatch room stream INCIDENT_ID uv run crosspatch warrant approve WARRANT_ID uv run crosspatch warrant reject WARRANT_ID uv run crosspatch case export INCIDENT_ID --output incident.zip ``` CLI 是经过身份验证的 HTTP/SSE 客户端。它不会直接打开数据库或 runner,并且批准需要明确的确认以及 approver、CSRF 和 step-up 凭证。 ## OpenAI 官方实施参考 CrossPatch 使用 [OpenAI Agents SDK](https://developers.openai.com/api/docs/guides/agents#build-with-the-sdk) 带有按席位划分的[模型设置](https://developers.openai.com/api/docs/guides/agents/models)、 [handoffs](https://developers.openai.com/api/docs/guides/agents/orchestration) 和 [MCP 集成](https://developers.openai.com/api/docs/guides/tools-connectors-mcp)。 运行时使用 [Responses API](https://developers.openai.com/api/reference/resources/responses/methods/create)。 SDK guardrails 是深度防御:输入 guardrails 应用于第一个 agent,输出 guardrails 应用于最后一个 agent,而工具 guardrails 仅应用于附加的功能工具。因此,CrossPatch 将证据过滤、MCP 授权、人工批准和变更强制执行保留在其确定性的策略和 broker 层中。 ## 验证和证据 运行本地发布门控: ``` ./scripts/verify-release.sh --strict ``` 每一个重要的 README 和演示声明都必须通过 [`docs/CLAIM_MAP.json`](docs/CLAIM_MAP.json) 解析为非空的机器生成的 artifact、其 SHA-256、签入的生成器以及生成来源。 手动编写、播种或伪造的证据将被拒绝。生成的 artifact 位于 `artifacts/verification/` 下,并记录确切的命令和状态。 ### 重要声明账本 以下稳定的 ID 是此 README 和演示脚本所作的唯一重要的实现/就绪声明。`scripts/generate-claim-map.sh` 将每个 ID 解析为其 artifact 路径、确切的 artifact SHA-256、签入的生成器、命令、来源以及 `docs/CLAIM_MAP.json` 中的 UTC 生成时间。缺少 artifact 或来源记录将忽略该声明;绝不接受文字叙述作为其证据。 | 声明 ID | 有界声明 | | --- | --- | | `collaboration.codex-provenance` | 真实的 Codex 任务血统、仓库切片所有权和命名的回归测试收据已根据会话元数据和 Git 历史记录进行了验证。 | | `product.specialist-contract` | 五个席位使用锁定的顺序、模型、schema 和工具边界。 | | `product.fail-closed-abstain` | 列出的每一个 Magistrate 故障条件都映射到 `ABSTAIN`,且没有 warrant 或执行。 | | `product.effort-escalation` | 升级是有界的,并且仅限释义的语义重试会被拒绝。 | | `security.evidence-boundary` | 原始证据被隔离;只有脱敏的、事件范围内的投影才能跨越读取边界。 | | `runtime.agents-sdk` | 运行时执行上述的 Responses API Agents SDK 合约。 | | `runtime.webhook-race` | 基线和候选结果来自于真实的 HTTP/PostgreSQL 竞态 oracle。 | | `runtime.human-approval` | 在 Bailiff/broker 执行之前,对规范哈希进行明确审查。 | | `runtime.warrant-boundary` | Broker 执行是一次性的,并绑定到完整的已批准 warrant。 | | `runtime.candidate-isolation` | 候选输出/退出状态并非证明;受信任的外部 oracle 决定成功与否。 | | `runtime.mcp-zones` | Evidence、Broker 和 Judge MCP 仅公开其文档记录的权限。 | | `runtime.cli-control-plane` | CLI 使用与 UI 相同的经过身份验证的 API/SSE 控制平面。 | | `ui.incident-room` | 前端证据涵盖专家栏、时间线、调查员和批准交互。 | | `release.compose` | 渲染的 Compose 策略证明只有 Caddy 发布主机端口,并且私有服务保持内部状态。 | | `release.claim-provenance` | 声明合约拒绝缺失哈希、生成器、来源或手动编写的证据。 | | `release.github-license` | 经过身份验证的 API 回读确定了根本的 MIT 检测;需要单独的经过身份验证的浏览器 artifact 来证明 GitHub About 明确显示了 MIT。 | | `readiness.demo` | `DEMO_READY` 需要至少十次产生真实新输出的 GPT-5.6 运行;允许 prompt-cache 输入读取。 | | `readiness.hosted` | 托管的 `VERIFIED` 需要外部可达性、TLS、Judge MCP、持久性、监控和备份证据。 | ## Codex 与所有者如何协作 所有者做出了决定性的产品和安全决策:失败——而非快乐路径——是演示的核心;界面是一个可观看的事件室;五个名字、模型层级、努力阶梯和确切的裁决是固定的;Sol 拒绝是一等公民 `ABSTAIN`;变更总是等待字节绑定的人工批准;并且不能播种任何声明或失败的测试。所有者还选择了真实的 webhook 竞态、三个 MCP 区域、微型 CLI、Docker Compose 体验、MIT 许可证以及延长的 judge 访问窗口。 Codex 将这些约束转化为实现目标和测试优先计划,然后通过在独立的仓库切片上工作来加速构建:领域/状态转换、恶意证据脱敏、确定性竞态重现、规范 warrant/broker、候选隔离、Agents SDK schema 和编排、MCP 允许列表、API/SSE/CLI/导出、Next.js 事件室、容器拓扑、操作和验证 artifact。独立的审查过程用于发现集成差距,例如真实的 API warrant 状态未启用 UI,或者候选进程可能会将自身的退出代码与受信任的证明混淆。这些发现在此类问题修复之前被转化为回归测试。 Codex 被用作编码和审查的协作者;GPT-5.6 也是五位专家背后的运行时推理层。确定性的 Python 服务(而非模型)拥有证据脱敏、状态转换、批准验证、PostgreSQL 观察、测试收据和变更。大部分实现是在持续的 Codex 构建任务 `019f5cdf-55ad-74f3-9a6c-af64f2478847` 中完成的;该任务也是项目的 `/feedback` 来源线程。 [Codex 协作档案](docs/CODEX_COLLABORATION.md) 将每个主要的仓库切片映射到真实的规划、实现和对抗性审查任务 ID,并将上述两个命名的审查发现绑定到它们确切存活的回归测试和当前的源哈希。其生成的证据是声明 `collaboration.codex-provenance`。 本地完成和托管验收是分开的。除非部署凭证、DNS、TLS、可访问的 URL、经过身份验证的 Judge MCP、正常运行时间监控和持久化 token 行为已通过 `scripts/verify-hosted.sh` 验证,否则此仓库绝不会声称应用程序已被托管。如果缺少这些外部输入,规范的托管 artifact 将由机器生成,状态为 `BLOCKED`。 ## 安全性 原始日志、源代码、diff、注释和测试输出都是不受信任的输入。特别是,**基于日志的 prompt injection** 是一个明确的攻击面。原始证据存储在单独的内容寻址 namespace 中,绝不会返回给模型、普通 API 客户端、导出、Evidence MCP 或 Judge MCP。sanitizer 会删除或标记类似指令的片段、编码指令、控制/bidi 文本和常见的机密信息,然后再构建 `UNTRUSTED_EVIDENCE` 信封。 脱敏是深度防御,而不是证明内容无害。其局限性包括新颖的编码、类似于正常遥测的语义指令、特定语言的歧义,以及跨多个 artifact 组装的上下文。即使在脱敏之后,事件范围内的授权、类型化 schema、严格的 MCP 允许列表、工具隔离、输出验证和确定性的 broker 仍然是强制性的。参见 [SECURITY.md](SECURITY.md) 和[威胁模型](docs/THREAT_MODEL.md)。 ## 仓库结构图 - `backend/src/crosspatch/` — 控制 API、持久运行时、Agents SDK 布线、证据 pipeline、MCP 服务器、broker、runner、导出验证器和 CLI。 - `victim/` — 随产品发布的 webhook 服务和 worker,包含可演示的竞态。 - `web/` — 编辑性的 Tracepaper 事件室 UI,带有肖像回退和记录在案的替换尺寸。 - `infra/` 和 `compose.yaml` — 经过强化的一键本地拓扑。 - `artifacts/verification/` — 仅包含生成的证明;绝不包含手动编写的演示输出。 - `docs/` — 平台来源、部署、judge、演示、威胁模型和提交指南。 ## 当前的外部行动 托管的应用程序已在 上线,密封的十次演示门控在其记录的队列修订版上已达到 `DEMO_READY`;它不需要再次进行付费运行。剩余的所有者侧提交行动是:保持托管的应用程序、Judge MCP、token 和监控器在 8 月 12 日之前可用;录制并发布不到三分钟的 YouTube 演示;选择最终的仓库可见性并提供所需的评审访问权限;将记录的 `/feedback` 会话 ID 粘贴到 Devpost 表单中;然后提交它。只有当机器生成的当前发布 artifact 报告 `PASS` 时,才会接受托管和 GitHub 证据。 ## 许可证 CrossPatch 根据根目录下的 [MIT 许可证](LICENSE) 授权。对于本次提交,仓库所有者还必须**在 GitHub About 部分让 MIT 可见**;发布检查器会回读该元数据,并且不会仅仅因为根文件存在就将 GitHub 步骤视为已完成。
标签:AI智能体, DevSecOps, SRE, 上游代理, 偏差过滤, 测试用例, 版权保护, 系统可靠性, 自动化运维, 逆向工具