feat(org): enforce Sentinel audit input contract with hard gate

This commit is contained in:
Chen Gu
2026-08-13 17:00:21 +08:00
parent c25288b0a1
commit 948a7c3d47
4 changed files with 100 additions and 0 deletions
+17
View File
@@ -28,6 +28,23 @@
- 成本:通过 / 需降本(建议) - 成本:通过 / 需降本(建议)
- 结论:放行 / 补充后放行 / 驳回 - 结论:放行 / 补充后放行 / 驳回
### C.1 Sentinel 审计输入强制规则(v1
派发 Sentinel 前必须校验:
- 必带 `task_id`
- 必带 `audit_scope`safety/logic/cost/full
- 必带 `audit_payload`inline_text / file_paths / artifact_refs 三选一或组合)
- 必带 `source_type`inline/workspace_file/mixed
- 必带 `requested_output_schema`
硬拦截条件:
- 缺少 `audit_payload` -> 不派发
- 引用文件不可读 -> 不派发
- 正文不足 500 字 -> 退回补料
错误码:`SENTINEL_INPUT_CONTRACT_MISSING`
合同文件:`org/ops/sentinel_audit_contract.v1.json`
## D. 失败处理模板(刑部) ## D. 失败处理模板(刑部)
- 失败阶段: - 失败阶段:
+44
View File
@@ -0,0 +1,44 @@
{
"version": "sentinel-audit-contract-v1",
"purpose": "Force complete audit input payload for Sentinel to avoid blind-audit failures.",
"required_fields": [
"task_id",
"audit_scope",
"audit_payload",
"source_type",
"requested_output_schema"
],
"field_rules": {
"task_id": {
"type": "string",
"min_length": 8
},
"audit_scope": {
"type": "string",
"allowed": ["safety", "logic", "cost", "full"]
},
"audit_payload": {
"type": "object",
"required_any_of": ["inline_text", "file_paths", "artifact_refs"],
"min_content_chars": 500
},
"source_type": {
"type": "string",
"allowed": ["inline", "workspace_file", "mixed"]
},
"requested_output_schema": {
"type": "array",
"must_include": ["decision", "scores", "issues", "must_fix", "release_conditions"]
}
},
"gates": {
"pre_audit_validation": true,
"reject_on_missing_payload": true,
"reject_on_unreadable_file_refs": true,
"fallback_behavior": "return_input_contract_error"
},
"input_contract_error": {
"code": "SENTINEL_INPUT_CONTRACT_MISSING",
"message": "Audit payload incomplete. Provide inline_text or readable file_paths/artifact_refs before running Sentinel."
}
}
+27
View File
@@ -0,0 +1,27 @@
# Sentinel 审计输入强制规则(v1
目的:避免 Sentinel 因缺少方案正文而“空跑审计”。
## 强制字段
每次调用 Sentinel 前,必须包含:
- `task_id`
- `audit_scope`safety/logic/cost/full
- `audit_payload`(三选一或组合)
- `inline_text`(内嵌正文)
- `file_paths`(可读文件路径)
- `artifact_refs`(可定位产物引用)
- `source_type`inline/workspace_file/mixed
- `requested_output_schema`
## 拦截规则
- 缺少 `audit_payload`:直接拒绝派发 Sentinel
- `file_paths` 不可读:直接拒绝派发 Sentinel
- 正文长度不足(<500字):返回输入不完整错误
## 返回错误码
`SENTINEL_INPUT_CONTRACT_MISSING`
## 最佳实践
- 优先使用 `mixed`:正文摘要 + 文件路径双保险
- 高风险任务必须提供可复核文件路径
- 审计后将结论与问题清单落盘到 Atlas 的 `decision_log/``failure_patterns/`
@@ -229,5 +229,17 @@
"enabled": true, "enabled": true,
"note": "User explicit instruction overrides role mapping immediately." "note": "User explicit instruction overrides role mapping immediately."
} }
},
"contracts": {
"sentinel_audit_input": {
"enabled": true,
"version": "v1",
"contract_file": "org/ops/sentinel_audit_contract.v1.json",
"enforcement": "hard_gate",
"reject_on_missing_payload": true,
"reject_on_unreadable_refs": true,
"min_payload_chars": 500,
"error_code": "SENTINEL_INPUT_CONTRACT_MISSING"
}
} }
} }