fix: feat: implement evidence/resources and evidence/protocol logging (#1059)
- Add evidence/resources/ and evidence/protocol/ directories with .gitkeep - Add schemas for resources/ and protocol/ to evidence/README.md - Create formulas/run-resources.toml (sense formula: disk/RAM/API/CI metrics, daily cron 06:00 UTC, verdict: ok/warn/critical) - Create formulas/run-protocol.toml (sense formula: TVL/fees/positions/ rebalance frequency via LmTotalEth.s.sol + cast, daily cron 07:00 UTC, verdict: healthy/degraded/offline) - Update STATE.md Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
7fd1963480
commit
de014e9b13
6 changed files with 458 additions and 1 deletions
|
|
@ -22,6 +22,10 @@ evidence/
|
|||
YYYY-MM-DD-prNNN.json # per-scenario pass/fail, gate decision
|
||||
user-test/
|
||||
YYYY-MM-DD.json # per-persona reports, screenshot refs, friction points
|
||||
resources/
|
||||
YYYY-MM-DD.json # disk, RAM, API call counts, budget burn, CI queue depth
|
||||
protocol/
|
||||
YYYY-MM-DD.json # TVL, accumulated fees, position count, rebalance frequency
|
||||
```
|
||||
|
||||
## Delivery Pattern
|
||||
|
|
@ -215,3 +219,114 @@ Records a UX evaluation run across simulated personas.
|
|||
| `personas_total` | integer | Total personas evaluated |
|
||||
| `critical_friction_points` | array of strings | Friction points that blocked task completion |
|
||||
| `verdict` | string | `"pass"` if all personas completed, `"fail"` otherwise |
|
||||
|
||||
---
|
||||
|
||||
## Schema: `resources/YYYY-MM-DD.json`
|
||||
|
||||
Records one infrastructure resource snapshot.
|
||||
|
||||
```json
|
||||
{
|
||||
"date": "YYYY-MM-DD",
|
||||
"disk": {
|
||||
"used_bytes": 85899345920,
|
||||
"total_bytes": 107374182400,
|
||||
"used_pct": 80.0
|
||||
},
|
||||
"ram": {
|
||||
"used_bytes": 3221225472,
|
||||
"total_bytes": 8589934592,
|
||||
"used_pct": 37.5
|
||||
},
|
||||
"api": {
|
||||
"anthropic_calls_24h": 142,
|
||||
"anthropic_budget_usd_used": 4.87,
|
||||
"anthropic_budget_usd_limit": 50.0,
|
||||
"anthropic_budget_pct": 9.7
|
||||
},
|
||||
"ci": {
|
||||
"woodpecker_queue_depth": 2,
|
||||
"woodpecker_running": 1
|
||||
},
|
||||
"staleness_threshold_days": 1,
|
||||
"verdict": "ok" | "warn" | "critical"
|
||||
}
|
||||
```
|
||||
|
||||
| Field | Type | Description |
|
||||
|-------|------|-------------|
|
||||
| `date` | string (ISO) | Date of the snapshot |
|
||||
| `disk.used_bytes` | integer | Bytes used on the primary volume |
|
||||
| `disk.total_bytes` | integer | Total bytes on the primary volume |
|
||||
| `disk.used_pct` | number | Percentage of disk used |
|
||||
| `ram.used_bytes` | integer | Bytes of RAM in use |
|
||||
| `ram.total_bytes` | integer | Total bytes of RAM |
|
||||
| `ram.used_pct` | number | Percentage of RAM used |
|
||||
| `api.anthropic_calls_24h` | integer | Anthropic API calls in the past 24 hours |
|
||||
| `api.anthropic_budget_usd_used` | number | USD spent against the Anthropic budget |
|
||||
| `api.anthropic_budget_usd_limit` | number | Configured Anthropic budget ceiling in USD |
|
||||
| `api.anthropic_budget_pct` | number | Percentage of budget consumed |
|
||||
| `ci.woodpecker_queue_depth` | integer | Number of jobs waiting in the Woodpecker CI queue |
|
||||
| `ci.woodpecker_running` | integer | Number of Woodpecker jobs currently running |
|
||||
| `staleness_threshold_days` | integer | Maximum age in days before this record is considered stale (always 1) |
|
||||
| `verdict` | string | `"ok"` (all metrics normal), `"warn"` (≥80% on any dimension), or `"critical"` (≥95% on any dimension) |
|
||||
|
||||
---
|
||||
|
||||
## Schema: `protocol/YYYY-MM-DD.json`
|
||||
|
||||
Records one on-chain protocol health snapshot.
|
||||
|
||||
```json
|
||||
{
|
||||
"date": "YYYY-MM-DD",
|
||||
"block_number": 24500000,
|
||||
"tvl_eth": "1234567890000000000000",
|
||||
"tvl_eth_formatted": "1234.57",
|
||||
"accumulated_fees_eth": "12345678900000000",
|
||||
"accumulated_fees_eth_formatted": "0.012",
|
||||
"position_count": 3,
|
||||
"positions": [
|
||||
{
|
||||
"name": "floor",
|
||||
"tick_lower": -887272,
|
||||
"tick_upper": -200000,
|
||||
"liquidity": "987654321000000000"
|
||||
},
|
||||
{
|
||||
"name": "anchor",
|
||||
"tick_lower": -200000,
|
||||
"tick_upper": 0
|
||||
},
|
||||
{
|
||||
"name": "discovery",
|
||||
"tick_lower": 0,
|
||||
"tick_upper": 887272
|
||||
}
|
||||
],
|
||||
"rebalance_count_24h": 4,
|
||||
"last_rebalance_block": 24499800,
|
||||
"staleness_threshold_days": 1,
|
||||
"verdict": "healthy" | "degraded" | "offline"
|
||||
}
|
||||
```
|
||||
|
||||
| Field | Type | Description |
|
||||
|-------|------|-------------|
|
||||
| `date` | string (ISO) | Date of the snapshot |
|
||||
| `block_number` | integer | Block number at time of snapshot |
|
||||
| `tvl_eth` | string (wei) | Total value locked across all LM positions in wei |
|
||||
| `tvl_eth_formatted` | string | TVL formatted in ETH (2 dp) |
|
||||
| `accumulated_fees_eth` | string (wei) | Fees accumulated by the LiquidityManager in wei |
|
||||
| `accumulated_fees_eth_formatted` | string | Fees formatted in ETH (3 dp) |
|
||||
| `position_count` | integer | Number of active Uniswap V3 positions (expected: 3) |
|
||||
| `positions` | array | One entry per active position |
|
||||
| `positions[].name` | string | Position label: `"floor"`, `"anchor"`, or `"discovery"` |
|
||||
| `positions[].tick_lower` | integer | Lower tick boundary |
|
||||
| `positions[].tick_upper` | integer | Upper tick boundary |
|
||||
| `positions[].liquidity` | string | Liquidity amount in the position (wei-scale integer) |
|
||||
| `rebalance_count_24h` | integer | Number of `recenter()` calls in the past 24 hours |
|
||||
| `last_rebalance_block` | integer | Block number of the most recent `recenter()` call |
|
||||
| `staleness_threshold_days` | integer | Maximum age in days before this record is considered stale (always 1) |
|
||||
| `verdict` | string | `"healthy"` (positions active, TVL > 0), `"degraded"` (position_count < 3 or rebalance stalled), or `"offline"` (TVL = 0 or contract unreachable) |
|
||||
|
|
|
|||
0
evidence/protocol/.gitkeep
Normal file
0
evidence/protocol/.gitkeep
Normal file
0
evidence/resources/.gitkeep
Normal file
0
evidence/resources/.gitkeep
Normal file
Loading…
Add table
Add a link
Reference in a new issue