{
"$schema": "http://json-schema.org/draft-07/schema#",
"$id": "https://devprune.vkrishna04.me/schemas/v1/devprune.schema.json",
"title": "dev-prune Project Configuration Schema",
"description": "Per-repository configuration schema for dev-prune workspace cleaner.",
"type": "object",
"properties": {
"$schema": {
"type": "string",
"description": "JSON Schema reference URL for IDE autocomplete and validation."
},
"project_name": {
"type": ["string", "null"],
"description": "Custom display name for this project in TUI tables and CLI status views."
},
"ignore": {
"type": "boolean",
"default": false,
"description": "Set to true to ignore/exclude this repository from all dev-prune cleanup passes."
},
"disable_hooks": {
"type": "boolean",
"default": false,
"description": "Set to true to stop the global Git hook from auto-registering this workspace. Does not affect `devp link` run by hand."
},
"disable_daemon": {
"type": "boolean",
"default": false,
"description": "Set to true to exclude this workspace from the scheduled background prune pass. Manual `devp run` still prunes it."
},
"override_idle_days": {
"type": ["integer", "null"],
"minimum": 0,
"description": "Custom inactivity threshold in days for this specific repository. Overrides global settings. 0 treats the repository as idle as soon as its last activity is in the past."
},
"min_size_mb": {
"type": ["integer", "null"],
"minimum": 0,
"description": "Smallest bloat directory worth deleting in this repository, in MiB. Overrides the global `min_size_mb` setting; 0 turns the floor off here even when a global floor is set."
},
"scan_depth": {
"type": ["integer", "null"],
"minimum": 1,
"maximum": 32,
"description": "How many directory levels below this repository root discovery descends. Overrides the global `scan_depth` (6 by default). Raise it when a nested project is not listed by `devp status`; every extra level makes the walk more expensive. Accepts 1-32; a hand-edited value outside that range is clamped to it."
},
"prunable": {
"type": "object",
"description": "What this project declares prunable beyond what an adapter can recognise. A section rather than a top-level key, so the things a repository may want to say about deletion can grow a heading at a time.",
"properties": {
"directories": {
"type": "array",
"description": "Directories no lockfile describes, each with the command that puts it back. Every entry is checked before anything is deleted: it must stay inside the repository, hold no Git-tracked files, and name a rebuild command whose tool is installed on this machine.",
"items": {
"type": "object",
"properties": {
"path": {
"type": "string",
"description": "Repository-relative, forward-slash separated. Never absolute, never containing '..', never '.git'."
},
"rebuild": {
"type": "string",
"description": "The command that rebuilds the directory. Shown to the user, never run by dev-prune. Required. Use \"echo not needed\" when nothing has to rebuild it."
},
"why": {
"type": "string",
"description": "Why this is safe to lose, in the project's own words. Printed beside the path."
}
},
"required": ["path", "rebuild"],
"additionalProperties": false
}
}
},
"additionalProperties": false
}
},
"additionalProperties": false
}