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 fork (two substantive options with no clear default), bounce
back to the user. 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) ### The run worktree (mandatory)
Before the first dispatch, the orchestrator enters a git worktree Before the first dispatch, the orchestrator enters a git worktree
+6 -1
View File
@@ -181,7 +181,12 @@ imports.
## Issue tracker ## Issue tracker
The tracker is **Gitea** and the commit close-marker is `closes #N` 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 list/show commands live in the project's CLAUDE.md project facts
(see below) — the `boss` skill reads the forward queue from there and (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 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`)"`. `tea issues create -t "..." -d "$(cat <<'EOF'` … `EOF`\n`)"`.
- Labels are matched by name (`-L feature,bug`); they must already - Labels are matched by name (`-L feature,bug`); they must already
exist in the repo. The project's label vocabulary lives in exist in the repo. The project's label vocabulary lives in
`~/dev/CLAUDE.md` (`BLOCKER`, `feature`, `bug`, `idea`, `~/dev/CLAUDE.md` (`BLOCKER`, `feature`, `bug`, `idea`). There is
`in-progress`). **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 - Before editing, view the issue first (`tea issues <idx>`) — do not
edit blind. Status/discussion updates go in a `tea comment`, not by edit blind. Status/discussion updates go in a `tea comment`, not by
overwriting the body. Note `tea issues <idx>` prints the **body overwriting the body. Note `tea issues <idx>` prints the **body