328 lines
11 KiB
JSON
328 lines
11 KiB
JSON
{
|
|
"module": "mesh-issues",
|
|
"version": "1",
|
|
"slug": "issues",
|
|
"seats": [
|
|
{
|
|
"name": "issue-tracker",
|
|
"scope": "mesh",
|
|
"serves": [
|
|
"open",
|
|
"get",
|
|
"list",
|
|
"move",
|
|
"note",
|
|
"link",
|
|
"import",
|
|
"groom",
|
|
"set",
|
|
"tracking",
|
|
"reserve",
|
|
"fix-times"
|
|
]
|
|
}
|
|
],
|
|
"claims": [
|
|
{
|
|
"name": "issue-tracker",
|
|
"scope": "mesh",
|
|
"serves": [
|
|
"open",
|
|
"get",
|
|
"list",
|
|
"move",
|
|
"note",
|
|
"link",
|
|
"import",
|
|
"groom",
|
|
"set",
|
|
"tracking",
|
|
"reserve",
|
|
"fix-times"
|
|
]
|
|
}
|
|
],
|
|
"emits": [
|
|
"opened",
|
|
"moved",
|
|
"noted",
|
|
"linked",
|
|
"imported",
|
|
"set",
|
|
"triaged",
|
|
"ready",
|
|
"ready-to-verify",
|
|
"reserved"
|
|
],
|
|
"consumes": [
|
|
"mesh-issues.opened",
|
|
"mesh-issues.moved",
|
|
"mesh-delivery.transition"
|
|
],
|
|
"invokes": [
|
|
"claude-code.claude_code_judge",
|
|
"seat:mesh-delivery.checks",
|
|
"seat:operator-channel.notify",
|
|
"gitea.gitea_pull_reviews",
|
|
"records.records_status",
|
|
"records.records_list",
|
|
"records.records_read",
|
|
"mesh-knowledge.knowledge_highest"
|
|
],
|
|
"logs": [
|
|
"changes"
|
|
],
|
|
"state": [
|
|
{
|
|
"name": "issues",
|
|
"history": 8
|
|
},
|
|
"counters",
|
|
"grooming",
|
|
"reservations"
|
|
],
|
|
"config": {
|
|
"first-number": {
|
|
"type": "number",
|
|
"description": "The number the first issue the tracker numbers gets, read once when its counter starts and never again; the import reads it as the boundary between the folders hq numbered and the tracker's issues.",
|
|
"minimum": 1,
|
|
"trusted": true,
|
|
"default": 365
|
|
},
|
|
"owners": {
|
|
"type": "list",
|
|
"description": "The registered places an issue's located-in may name: a repository, or a repository and a folder in it separated by a space.",
|
|
"trusted": true,
|
|
"default": [
|
|
"hq",
|
|
"mesh-catalog",
|
|
"mesh-catalog modules/adwaita",
|
|
"mesh-catalog modules/artifact-store-tools",
|
|
"mesh-catalog modules/asus-zephyrus-g14",
|
|
"mesh-catalog modules/audit-logger",
|
|
"mesh-catalog modules/avahi",
|
|
"mesh-catalog modules/baserow",
|
|
"mesh-catalog modules/betterbird",
|
|
"mesh-catalog modules/blueman",
|
|
"mesh-catalog modules/bluetooth",
|
|
"mesh-catalog modules/build-agent",
|
|
"mesh-catalog modules/ca-trust",
|
|
"mesh-catalog modules/claude-code",
|
|
"mesh-catalog modules/claude-licence-manager",
|
|
"mesh-catalog modules/clipmenu",
|
|
"mesh-catalog modules/confluence",
|
|
"mesh-catalog modules/cups",
|
|
"mesh-catalog modules/dbus",
|
|
"mesh-catalog modules/de-spiegel",
|
|
"mesh-catalog modules/desk-channel",
|
|
"mesh-catalog modules/disk-load",
|
|
"mesh-catalog modules/distribution",
|
|
"mesh-catalog modules/dmenu",
|
|
"mesh-catalog modules/dnsmasq",
|
|
"mesh-catalog modules/docker",
|
|
"mesh-catalog modules/docker-compose",
|
|
"mesh-catalog modules/dunst",
|
|
"mesh-catalog modules/fail2ban",
|
|
"mesh-catalog modules/feh",
|
|
"mesh-catalog modules/flatpak",
|
|
"mesh-catalog modules/fonts",
|
|
"mesh-catalog modules/forticlient",
|
|
"mesh-catalog modules/gitea",
|
|
"mesh-catalog modules/gitlab",
|
|
"mesh-catalog modules/gnome-keyring",
|
|
"mesh-catalog modules/grafana",
|
|
"mesh-catalog modules/hello-web",
|
|
"mesh-catalog modules/home-assistant",
|
|
"mesh-catalog modules/hostname",
|
|
"mesh-catalog modules/i3",
|
|
"mesh-catalog modules/i3status-rust",
|
|
"mesh-catalog modules/icecast",
|
|
"mesh-catalog modules/influxdb",
|
|
"mesh-catalog modules/invoicing",
|
|
"mesh-catalog modules/jira",
|
|
"mesh-catalog modules/keycloak",
|
|
"mesh-catalog modules/lab",
|
|
"mesh-catalog modules/lemurs",
|
|
"mesh-catalog modules/letta",
|
|
"mesh-catalog modules/local-model-consumer",
|
|
"mesh-catalog modules/localization",
|
|
"mesh-catalog modules/logrotate",
|
|
"mesh-catalog modules/mailu",
|
|
"mesh-catalog modules/marrytts",
|
|
"mesh-catalog modules/matrix",
|
|
"mesh-catalog modules/memory-pressure",
|
|
"mesh-catalog modules/mesh-catalog",
|
|
"mesh-catalog modules/mesh-cli",
|
|
"mesh-catalog modules/mesh-delivery",
|
|
"mesh-catalog modules/mesh-issues",
|
|
"mesh-catalog modules/mesh-vault",
|
|
"mesh-catalog modules/mesh-watcher",
|
|
"mesh-catalog modules/messenger",
|
|
"mesh-catalog modules/minio",
|
|
"mesh-catalog modules/model-usage",
|
|
"mesh-catalog modules/mongodb",
|
|
"mesh-catalog modules/mosquitto",
|
|
"mesh-catalog modules/mounts",
|
|
"mesh-catalog modules/mssql",
|
|
"mesh-catalog modules/n8n",
|
|
"mesh-catalog modules/nats",
|
|
"mesh-catalog modules/netcheck",
|
|
"mesh-catalog modules/networkmanager",
|
|
"mesh-catalog modules/nextcloud",
|
|
"mesh-catalog modules/nextcloud-client",
|
|
"mesh-catalog modules/nfs-server",
|
|
"mesh-catalog modules/nftables",
|
|
"mesh-catalog modules/nm-applet",
|
|
"mesh-catalog modules/node-env",
|
|
"mesh-catalog modules/nodered",
|
|
"mesh-catalog modules/ollama",
|
|
"mesh-catalog modules/only-office",
|
|
"mesh-catalog modules/openai-consumer",
|
|
"mesh-catalog modules/openrazer",
|
|
"mesh-catalog modules/pacman",
|
|
"mesh-catalog modules/photos-eef",
|
|
"mesh-catalog modules/photos-filip",
|
|
"mesh-catalog modules/picom",
|
|
"mesh-catalog modules/polychromatic",
|
|
"mesh-catalog modules/postgres",
|
|
"mesh-catalog modules/power",
|
|
"mesh-catalog modules/powerlevel10k",
|
|
"mesh-catalog modules/records",
|
|
"mesh-catalog modules/redis",
|
|
"mesh-catalog modules/restic",
|
|
"mesh-catalog modules/rofi",
|
|
"mesh-catalog modules/route-adapter",
|
|
"mesh-catalog modules/route-proxy",
|
|
"mesh-catalog modules/screen-lock",
|
|
"mesh-catalog modules/searxng",
|
|
"mesh-catalog modules/sensors",
|
|
"mesh-catalog modules/showcase",
|
|
"mesh-catalog modules/slack",
|
|
"mesh-catalog modules/snapd",
|
|
"mesh-catalog modules/ssh-client",
|
|
"mesh-catalog modules/sshd",
|
|
"mesh-catalog modules/step-ca",
|
|
"mesh-catalog modules/sudo",
|
|
"mesh-catalog modules/supabase",
|
|
"mesh-catalog modules/systemd",
|
|
"mesh-catalog modules/systemd-networkd",
|
|
"mesh-catalog modules/systemd-resolved",
|
|
"mesh-catalog modules/telegram",
|
|
"mesh-catalog modules/time-sync",
|
|
"mesh-catalog modules/triggerhappy",
|
|
"mesh-catalog modules/umami",
|
|
"mesh-catalog modules/unifi",
|
|
"mesh-catalog modules/website",
|
|
"mesh-catalog modules/xclip",
|
|
"mesh-catalog modules/xdg",
|
|
"mesh-catalog modules/xorg",
|
|
"mesh-catalog modules/xterm",
|
|
"mesh-catalog modules/zfs",
|
|
"mesh-catalog modules/zsh",
|
|
"mesh-catalog modules/zsh-autosuggestions",
|
|
"mesh-catalog modules/zsh-syntax-highlighting",
|
|
"mesh-controller",
|
|
"mesh-host",
|
|
"mesh-lab",
|
|
"mesh-media-catalog",
|
|
"mesh-sdk",
|
|
"mesh-tools"
|
|
]
|
|
},
|
|
"duplicate-check": {
|
|
"type": "string",
|
|
"description": "Whether a new issue is checked against the open ones for a duplicate: off stops it, anything else is on (novox/hq ADR 0278 §7).",
|
|
"trusted": true,
|
|
"default": "on"
|
|
},
|
|
"judge-model": {
|
|
"type": "string",
|
|
"description": "The model the duplicate check asks, by the agent's name for it, such as sonnet; empty is the tracker's own default.",
|
|
"trusted": true,
|
|
"default": "sonnet"
|
|
},
|
|
"forge-owner": {
|
|
"type": "string",
|
|
"description": "The owner on the forge of the repositories an issue's fixed-by names, for asking after a pull request's delivery (novox/hq ADR 0279 §3); empty asks no forge.",
|
|
"trusted": true,
|
|
"default": "novox"
|
|
},
|
|
"stuck-after": {
|
|
"type": "string",
|
|
"description": "How long a fix may be merged and not delivered before it is said stuck, as a duration such as 2h (novox/hq ADR 0281); empty is the tracker's own default.",
|
|
"pattern": "|[0-9]+(\\.[0-9]+)?(ns|us|µs|ms|s|m|h)([0-9]+(\\.[0-9]+)?(ns|us|µs|ms|s|m|h))*",
|
|
"trusted": true,
|
|
"default": "2h"
|
|
},
|
|
"worker-stale-after": {
|
|
"type": "string",
|
|
"description": "How long an issue's worker stays current with nothing done on it, as a duration such as 24h (novox/hq ADR 0284 §4); empty is the tracker's own default.",
|
|
"pattern": "|[0-9]+(\\.[0-9]+)?(ns|us|µs|ms|s|m|h)([0-9]+(\\.[0-9]+)?(ns|us|µs|ms|s|m|h))*",
|
|
"trusted": true,
|
|
"default": "24h"
|
|
},
|
|
"delivered-not-resolved-after": {
|
|
"type": "string",
|
|
"description": "How long an issue may stay in fixing once every fix it names is delivered before the operator is warned, as a duration such as 1h (novox/hq issue 483); empty is the tracker's own default.",
|
|
"pattern": "|[0-9]+(\\.[0-9]+)?(ns|us|µs|ms|s|m|h)([0-9]+(\\.[0-9]+)?(ns|us|µs|ms|s|m|h))*",
|
|
"trusted": true,
|
|
"default": "1h"
|
|
},
|
|
"decision-floor": {
|
|
"type": "number",
|
|
"description": "The highest decision number already taken somewhere the tracker cannot read, such as an open branch of hq; the decision sequence's first number is one above it, read once when the counter starts (novox/hq issue 424).",
|
|
"minimum": 0,
|
|
"trusted": true,
|
|
"default": 293
|
|
},
|
|
"research-floor": {
|
|
"type": "number",
|
|
"description": "The highest research number already taken somewhere the tracker cannot read; the research sequence's first number is one above it, read once when the counter starts (novox/hq issue 424).",
|
|
"minimum": 0,
|
|
"trusted": true,
|
|
"default": 45
|
|
}
|
|
},
|
|
"resources": [
|
|
{
|
|
"id": "state",
|
|
"type": "directory",
|
|
"mode": "0700",
|
|
"place": "."
|
|
},
|
|
{
|
|
"id": "settings",
|
|
"trusted": true,
|
|
"type": "file",
|
|
"path": "${dir:state}/settings.json",
|
|
"mode": "0600",
|
|
"takes-config": ["first-number", "owners", "duplicate-check", "judge-model", "forge-owner", "stuck-after", "worker-stale-after", "delivered-not-resolved-after", "decision-floor", "research-floor"],
|
|
"merge": "json",
|
|
"template": "files/settings.json"
|
|
}
|
|
],
|
|
"build": {
|
|
"artifacts": [
|
|
{
|
|
"name": "tools",
|
|
"kind": "bundle",
|
|
"language": "go",
|
|
"system": "arch",
|
|
"from": "cmd/mesh-issues",
|
|
"binary": "mesh-issues",
|
|
"loads": [
|
|
"mesh-issues"
|
|
],
|
|
"env": {
|
|
"MESH_ISSUES_SETTINGS": "${dir:state}/settings.json"
|
|
}
|
|
},
|
|
{
|
|
"name": "files",
|
|
"kind": "archive",
|
|
"from": "files"
|
|
}
|
|
]
|
|
}
|
|
}
|