Implements slice 1 of docs/design/2026-07-19-client-diagnostics.md: the versioned contract (schemas, fixtures, Go validator), storage-validated diagnostics.uploads_enabled gate, account-scoped status endpoint, hardened streaming multipart ingest with quota reservation and a receiving/ready/ failed report state machine, S3 streaming puts, acting-admin report API (list/detail/download/delete with audit events), and the retention + orphan-reconciliation cleanup task. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XppCCycoaskCsW7ja1fZct
96 lines
1.8 KiB
JSON
96 lines
1.8 KiB
JSON
{
|
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
"$id": "https://silo-server.dev/schemas/client-diagnostics/v1/logline.schema.json",
|
|
"title": "Silo Client Diagnostics Log Line v1",
|
|
"type": "object",
|
|
"required": [
|
|
"ts",
|
|
"run",
|
|
"lvl",
|
|
"cat",
|
|
"tag",
|
|
"msg"
|
|
],
|
|
"properties": {
|
|
"ts": {
|
|
"type": "string",
|
|
"format": "date-time",
|
|
"maxLength": 64
|
|
},
|
|
"run": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"maxLength": 128
|
|
},
|
|
"lvl": {
|
|
"type": "string",
|
|
"enum": [
|
|
"V",
|
|
"D",
|
|
"I",
|
|
"W",
|
|
"E"
|
|
],
|
|
"maxLength": 1
|
|
},
|
|
"cat": {
|
|
"type": "string",
|
|
"enum": [
|
|
"playback",
|
|
"focus",
|
|
"network",
|
|
"lifecycle",
|
|
"browse",
|
|
"cast",
|
|
"download",
|
|
"crash",
|
|
"other"
|
|
],
|
|
"maxLength": 32
|
|
},
|
|
"tag": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"maxLength": 128
|
|
},
|
|
"msg": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"maxLength": 2048
|
|
},
|
|
"attrs": {
|
|
"type": "object",
|
|
"description": "Attribute keys are registered in attr-registry.json. Production clients drop unregistered keys before upload.",
|
|
"additionalProperties": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string",
|
|
"maxLength": 512
|
|
},
|
|
{
|
|
"type": "number"
|
|
},
|
|
{
|
|
"type": "integer"
|
|
},
|
|
{
|
|
"type": "boolean"
|
|
},
|
|
{
|
|
"type": "null"
|
|
},
|
|
{
|
|
"type": "array",
|
|
"maxItems": 32,
|
|
"items": {
|
|
"type": "string",
|
|
"maxLength": 256
|
|
}
|
|
}
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"additionalProperties": true
|
|
}
|