Merge pull request 'fix(hermes): separate POLICY observations from FAULT findings in the audit contracts' (#90) from fix/hermes-violation-classification-20260914 into master
PR Pipeline — Authorize → Validate → Review → Merge / auth (push) Successful in 7s
PR Pipeline — Authorize → Validate → Review → Merge / validate (push) Successful in 4s
PR Pipeline — Authorize → Validate → Review → Merge / lint (push) Successful in 7s
PR Pipeline — Authorize → Validate → Review → Merge / ai-review (push) Successful in 6s
PR Pipeline — Authorize → Validate → Review → Merge / gate (push) Successful in 1s
PR Pipeline — Authorize → Validate → Review → Merge / auth (push) Successful in 7s
PR Pipeline — Authorize → Validate → Review → Merge / validate (push) Successful in 4s
PR Pipeline — Authorize → Validate → Review → Merge / lint (push) Successful in 7s
PR Pipeline — Authorize → Validate → Review → Merge / ai-review (push) Successful in 6s
PR Pipeline — Authorize → Validate → Review → Merge / gate (push) Successful in 1s
This commit was merged in pull request #90.
This commit is contained in:
@@ -121,6 +121,26 @@ auxiliary:
|
|||||||
timeout: 120
|
timeout: 120
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Violation Classification
|
||||||
|
|
||||||
|
When reporting findings, separate POLICY observations from FAULT findings:
|
||||||
|
|
||||||
|
### POLICY (observation only, not a fault)
|
||||||
|
- Agent uses a non-internal-harness provider (e.g., direct DeepSeek, Tencent, OpenRouter)
|
||||||
|
- Config text has a field that looks unusual but the agent's calls are succeeding
|
||||||
|
- Example: "POLICY: Koonimo uses deepseek directly; calls succeeding in last hour"
|
||||||
|
|
||||||
|
### FAULT (requires request-level evidence)
|
||||||
|
- Agent's calls are failing with auth errors (401/403 in logs)
|
||||||
|
- Agent's config has no valid API key AND calls are failing
|
||||||
|
- Example: "FAULT: Koby's LiteLLM key expired; 401 observed at 2026-09-14 11:42:00"
|
||||||
|
|
||||||
|
### Rules
|
||||||
|
1. Do NOT infer the runtime's credential resolution from config text alone.
|
||||||
|
2. Require request-level evidence before calling something a FAULT: an observed auth failure in the agent's log, or the absence of successful calls in the window.
|
||||||
|
3. If calls are succeeding, the correct output is "POLICY: uses <provider> directly; calls succeeding" - not a violation.
|
||||||
|
4. State what you OBSERVED, not what the field implies.
|
||||||
|
|
||||||
## Known Bug: `api_key_env` Ignored by Auxiliary Client
|
## Known Bug: `api_key_env` Ignored by Auxiliary Client
|
||||||
|
|
||||||
**Bug location**: `agent/auxiliary_client.py` → `_resolve_task_provider_model()` (line ~5478)
|
**Bug location**: `agent/auxiliary_client.py` → `_resolve_task_provider_model()` (line ~5478)
|
||||||
|
|||||||
@@ -217,6 +217,26 @@ When LiteLLM keys are regenerated (e.g., after infrastructure changes):
|
|||||||
3. **After update**: Restart Hermes on the agent host
|
3. **After update**: Restart Hermes on the agent host
|
||||||
4. **Verify**: `curl -H "Authorization: Bearer sk-<KEY>" http://192.168.68.116/v1/models`
|
4. **Verify**: `curl -H "Authorization: Bearer sk-<KEY>" http://192.168.68.116/v1/models`
|
||||||
|
|
||||||
|
## Violation Classification
|
||||||
|
|
||||||
|
When reporting findings, separate POLICY observations from FAULT findings:
|
||||||
|
|
||||||
|
### POLICY (observation only, not a fault)
|
||||||
|
- Agent uses a non-internal-harness provider (e.g., direct DeepSeek, Tencent, OpenRouter)
|
||||||
|
- Config text has a field that looks unusual but the agent's calls are succeeding
|
||||||
|
- Example: "POLICY: Koonimo uses deepseek directly; calls succeeding in last hour"
|
||||||
|
|
||||||
|
### FAULT (requires request-level evidence)
|
||||||
|
- Agent's calls are failing with auth errors (401/403 in logs)
|
||||||
|
- Agent's config has no valid API key AND calls are failing
|
||||||
|
- Example: "FAULT: Koby's LiteLLM key expired; 401 observed at 2026-09-14 11:42:00"
|
||||||
|
|
||||||
|
### Rules
|
||||||
|
1. Do NOT infer the runtime's credential resolution from config text alone.
|
||||||
|
2. Require request-level evidence before calling something a FAULT: an observed auth failure in the agent's log, or the absence of successful calls in the window.
|
||||||
|
3. If calls are succeeding, the correct output is "POLICY: uses <provider> directly; calls succeeding" - not a violation.
|
||||||
|
4. State what you OBSERVED, not what the field implies.
|
||||||
|
|
||||||
## Configuration Rules
|
## Configuration Rules
|
||||||
|
|
||||||
### Rule 1: Shared Infra Is Locked
|
### Rule 1: Shared Infra Is Locked
|
||||||
|
|||||||
@@ -135,6 +135,26 @@ scripts/hermes-reachability-check.sh <host> "api_key: sk-" "/root/.hermes/"
|
|||||||
# The correct pattern: remote side always succeeds (grep ...; true), so ssh status = connection only.
|
# The correct pattern: remote side always succeeds (grep ...; true), so ssh status = connection only.
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Violation Classification
|
||||||
|
|
||||||
|
When reporting findings, separate POLICY observations from FAULT findings:
|
||||||
|
|
||||||
|
### POLICY (observation only, not a fault)
|
||||||
|
- Agent uses a non-internal-harness provider (e.g., direct DeepSeek, Tencent, OpenRouter)
|
||||||
|
- Config text has a field that looks unusual but the agent's calls are succeeding
|
||||||
|
- Example: "POLICY: Koonimo uses deepseek directly; calls succeeding in last hour"
|
||||||
|
|
||||||
|
### FAULT (requires request-level evidence)
|
||||||
|
- Agent's calls are failing with auth errors (401/403 in logs)
|
||||||
|
- Agent's config has no valid API key AND calls are failing
|
||||||
|
- Example: "FAULT: Koby's LiteLLM key expired; 401 observed at 2026-09-14 11:42:00"
|
||||||
|
|
||||||
|
### Rules
|
||||||
|
1. Do NOT infer the runtime's credential resolution from config text alone.
|
||||||
|
2. Require request-level evidence before calling something a FAULT: an observed auth failure in the agent's log, or the absence of successful calls in the window.
|
||||||
|
3. If calls are succeeding, the correct output is "POLICY: uses <provider> directly; calls succeeding" - not a violation.
|
||||||
|
4. State what you OBSERVED, not what the field implies.
|
||||||
|
|
||||||
## Detection Query
|
## Detection Query
|
||||||
|
|
||||||
Run on any Hermes host to detect violations:
|
Run on any Hermes host to detect violations:
|
||||||
|
|||||||
Reference in New Issue
Block a user