scaffold: project structure, wire contract, roadmap and agent briefs
Lays out Velox Download Manager (IDM-class download manager for Ubuntu 26.04) as a monorepo ready for parallel lane development. No implementation code by design. - docs/: architecture, roadmap M0-M7, IDM-parity GUI spec, engine design, Firefox extension spec, risks/spikes, packaging - contracts/: wire-contract skeleton (JSON Schema + fixture templates) — the single synchronization point between lanes - docs/agents/: one brief per lane (PROTO, CORE, DAEMON, GUI, EXT, PKG/QA) with owned directories, build order and definition of done - CLAUDE.md: rules of engagement — lane ownership, layering, non-negotiables - CMake scaffolding with dev/tsan/release/ci presets Two environment findings shape the design: Firefox here is the Mozilla snap (native-messaging risk, so the extension carries a loopback-WebSocket fallback), and Wayland forbids passive clipboard monitoring (so clipboard capture is explicit-action-first). Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
@@ -0,0 +1,44 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://velox.dev/schema/types/TaskSummary.schema.json",
|
||||
"title": "TaskSummary",
|
||||
"description": "One row of the main download list. Everything the GUI table needs, and nothing more. TEMPLATE — lane PROTO owns the final shape.",
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"required": ["taskId", "filename", "state", "createdAt"],
|
||||
"properties": {
|
||||
"taskId": { "type": "string", "format": "uuid" },
|
||||
"filename": { "type": "string", "maxLength": 255 },
|
||||
"saveDir": { "type": "string" },
|
||||
"url": { "type": "string", "format": "uri" },
|
||||
"effectiveUrl": { "type": "string", "format": "uri" },
|
||||
"sizeBytes": { "type": ["integer", "null"], "minimum": 0, "description": "null when the server did not report a length" },
|
||||
"downloadedBytes": { "type": "integer", "minimum": 0 },
|
||||
"state": {
|
||||
"type": "string",
|
||||
"enum": ["new", "probing", "queued", "connecting", "downloading", "paused",
|
||||
"retry_wait", "assembling", "verifying", "complete", "failed", "cancelled"]
|
||||
},
|
||||
"speedBps": { "type": "integer", "minimum": 0 },
|
||||
"etaSeconds": { "type": ["integer", "null"], "minimum": 0 },
|
||||
"resumable": { "type": "boolean" },
|
||||
"segments": { "type": "integer", "minimum": 1, "maximum": 32 },
|
||||
"categoryId": { "type": ["string", "null"] },
|
||||
"queueId": { "type": ["string", "null"] },
|
||||
"queuePosition":{ "type": ["integer", "null"], "minimum": 0, "description": "the Q column" },
|
||||
"description": { "type": "string", "maxLength": 1024 },
|
||||
"createdAt": { "type": "string", "format": "date-time" },
|
||||
"lastTryAt": { "type": ["string", "null"], "format": "date-time" },
|
||||
"completedAt": { "type": ["string", "null"], "format": "date-time" },
|
||||
"error": {
|
||||
"type": ["object", "null"],
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"code": { "type": "integer" },
|
||||
"message": { "type": "string" },
|
||||
"httpStatus": { "type": ["integer", "null"] },
|
||||
"retryable": { "type": "boolean" }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user