Point the mattpocock-lineage skills (triage, to-tickets, to-spec, wayfinder) at repo facts instead of a parallel docs/ tree: Gitea is the issue tracker (credential-safe curl shape, token-only writes), the five canonical triage roles keep their default label strings (created on the tracker today), and GLOSSARY.md/docs/adr/ stay lazy with this vault owning operational facts. AGENTS.md gains the ## Agent skills pointer block; indices regenerated.
4.5 KiB
type, title, description, tags, timestamp
| type | title | description | tags | timestamp | |||||
|---|---|---|---|---|---|---|---|---|---|
| reference | Issue Tracker | How agent skills read and write Gitea issues here: credential-safe curl, label IDs, and wayfinding without sub-issues. |
|
2026-10-20T00:00:00Z |
Issue Tracker
Issues and specs for this repo live as Gitea issues in dank/serverAppConfigs
on http://192.168.0.143:3000 (Dankclaw). There is no gh/glab CLI here —
the door is the GitHub-compatible REST API driven with curl. The
mattpocock-lineage skills (/triage, /to-tickets, /to-spec, /wayfinder)
read this page as their tracker contract. The git workflow around issues and
PRs (branches, PR-only merges, attribution footer) is owned by
Deployment Flow; this page owns only the API shape.
Auth
The token lives in the git credential file ~/.config/secrets/gitea: one
line in git-credential URL form, http://user:TOKEN@192.168.0.143. Extract it
without echoing:
tok=$(sed -nE 's#^http://[^:/@]+:([^@]+)@192\.168\.0\.143.*#\1#p' ~/.config/secrets/gitea | head -1)
A token on a command line is world-readable in /proc/<pid>/cmdline (the
same leak class AGENTS.md records for HF tokens). Never pass it with -H —
put it in a mode-600 curl config and pass -K:
cfg=$(mktemp); chmod 600 "$cfg"
printf 'header = "Authorization: token %s"\n' "$tok" > "$cfg"
# ... every curl below uses -K "$cfg"; rm -f "$cfg" when done
GETs also accept HTTP Basic; writes do not — a POST/PATCH with Basic auth
is refused with 422 {"message":"token is required"} (measured 2026-10-20).
Use the Authorization: token header for everything.
Conventions
$API=http://192.168.0.143:3000/api/v1/repos/dank/serverAppConfigs
- Create an issue:
curl -s -K "$cfg" -X POST -H 'Content-Type: application/json' -d "$(jq -n --arg t "$TITLE" --rawfile b "$BODY" '{title:$t, body:$b}')" $API/issues - Read an issue:
curl -s -K "$cfg" $API/issues/<number>(fields:number,title,body,labels[].name,state) - List issues:
curl -s -K "$cfg" "$API/issues?state=open&limit=50"— add&labels=<id>to filter - Comment:
curl -s -K "$cfg" -X POST -d "$(jq -n --rawfile b "$BODY" '{body:$b}')" $API/issues/<number>/comments - Apply labels:
POST $API/issues/<number>/labelswith{"labels":[<label-ID numbers>]}— Gitea wants numeric label IDs, not names; resolve them fromGET $API/labels(see Triage Labels for which labels exist) - Remove a label:
DELETE $API/issues/<number>/labels/<label-id> - Close:
PATCH $API/issues/<number>with{"state":"closed"} - Blocking relationships: this instance has no native sub-issues or dependencies — put
Part of #<parent>/Blocked by: #<n>, #<n>lines at the top of the child body. A ticket is unblocked when every listed blocker is closed. - Attribution footer (repo law): every issue body you open ends with
cwd: <working directory> · session: <omp session id>— full rule in Deployment Flow.
PRs as a request surface: no. Issues and PRs have separate number spaces on
Gitea; a bare #42 is an issue, a PR is spelled "PR #42".
When a skill says "publish to the issue tracker"
Create a Gitea issue as above.
When a skill says "fetch the relevant ticket"
GET $API/issues/<number> and read title + body + labels[].name +
comments.
Wayfinding operations
Used by /wayfinder. The map is a single issue labelled wayfinder:map,
holding the Notes / Decisions-so-far / Fog body.
- Map: create an issue, apply the
wayfinder:maplabel (create it viaPOST $API/labels{"name":"wayfinder:map","color":"#6f42c1"}if missing). - Child ticket: an issue carrying
Part of #<map>at the top of its body, plus awayfinder:<type>label (research/prototype/grilling/task). - Blocking: the
Blocked by:body line (see Conventions). - Frontier: list open issues (
?state=open), drop any with an openBlocked bytarget or an assignee; lowestnumberwins. - Claim:
POST $API/issues/<n>/assigneeswith{"assignees":["dank"]}— actually assign it or it stays in the frontier; the session's first write. - Resolve: post the answer as a comment,
PATCHtoclosed, then update the map issue's body (GET → edit Decisions-so-far → PATCH) with a context pointer.
Related
- Triage Labels — the role strings these operations apply.
- Domain Docs — what a skill must read before touching the codebase.
- SSH and Remote Access — reaching the host when an issue needs live evidence.