feat(issue): work-start signal is assignee, not label

Retire the in-progress label. Work-start on a tracker issue is now
signalled by assigning the issue to the dedicated tracker user
claude — one write, no removal; the assignee survives the close as
provenance. The live worktree branch (issue-N-<slug>, from the
worktree convention) is the matching git-side signal, and it
disappears with the ratified merge on its own.

Rationale (user decision 2026-07-14): a set-and-remove label is
administrative overhead with a lying-label failure mode when the
removal is forgotten; an assignee needs no removal and stays
meaningful after close.

issue/SKILL.md documents the mechanic (PATCH .../issues/<n> with
{"assignees": ["claude"]} — the call replaces the assignee set;
Gitea has no additive endpoint, verified against the live swagger).
boss/SKILL.md Step 2 assigns on a clean pick (chat-seeded runs
assign when the reference issue is created). conventions.md § Issue
tracker carries the cross-project statement. The label itself was
deleted from all Gitea repos that had it (AILang, Aura, Skills,
doctate); the label vocabulary in ~/dev/CLAUDE.md no longer lists
it.
This commit is contained in:
2026-07-14 12:42:50 +02:00
parent a1d6409163
commit 22abd37458
3 changed files with 23 additions and 3 deletions
+7
View File
@@ -102,6 +102,13 @@ autonomously when the path is clear. If the top item is a real
fork (two substantive options with no clear default), bounce
back to the user.
On a clean pick, mark work-start on the tracker: assign the issue
to the `claude` user (`../issue/SKILL.md` § tea mechanics — one
write, no removal; there is no in-progress label). A chat-seeded
run with no issue yet assigns the moment the reference issue is
created (§ The reference issue). The live run-worktree branch
(§ The run worktree) is the matching git-side signal.
### The run worktree (mandatory)
Before the first dispatch, the orchestrator enters a git worktree
+6 -1
View File
@@ -181,7 +181,12 @@ imports.
## Issue tracker
The tracker is **Gitea** and the commit close-marker is `closes #N`
(`refs #N` for non-closing work). The per-project repo slug and the
(`refs #N` for non-closing work). Work-start is signalled by
**assignee, not label**: the actor that begins work on an issue
assigns it to the agent tracker user (`claude`) — one write, no
removal; the assignee survives the close as provenance. There is no
`in-progress` label. The live worktree branch (`issue-N-<slug>`,
§ Git discipline) is the git-side counterpart. The per-project repo slug and the
list/show commands live in the project's CLAUDE.md project facts
(see below) — the `boss` skill reads the forward queue from there and
records its fork decisions on the run's reference issue there, and an
+10 -2
View File
@@ -274,8 +274,16 @@ Notes:
`tea issues create -t "..." -d "$(cat <<'EOF'` … `EOF`\n`)"`.
- Labels are matched by name (`-L feature,bug`); they must already
exist in the repo. The project's label vocabulary lives in
`~/dev/CLAUDE.md` (`BLOCKER`, `feature`, `bug`, `idea`,
`in-progress`).
`~/dev/CLAUDE.md` (`BLOCKER`, `feature`, `bug`, `idea`). There is
**no in-progress label**: work-start is signalled by assigning the
issue to the `claude` tracker user (§ Actor identity) — one write,
no removal; the assignee survives the close as provenance. Assign
via the API (a write, so the `claude` token):
`PATCH /api/v1/repos/<owner>/<repo>/issues/<n>` with body
`{"assignees": ["claude"]}` — the call **replaces** the assignee
set (Gitea has no additive endpoint), so when the issue already
carries assignees, include them in the array. The live worktree branch
(`issue-N-<slug>`) is the matching git-side signal.
- Before editing, view the issue first (`tea issues <idx>`) — do not
edit blind. Status/discussion updates go in a `tea comment`, not by
overwriting the body. Note `tea issues <idx>` prints the **body