Repository navigation
Closed
Labels
app:unic-archon-dlcp0Critical priorityCritical prioritywayfinder:grillingWayfinder ticket: decide it by grillingWayfinder ticket: decide it by grilling
Description
Question
The Boxes' tracker contract was written against GitHub's object model. Installing the DLC into
DXP-DesignSystem (#376) surfaced four places where Azure DevOps does not answer it. They are one
decision, not four, because each is a consequence of the same choice: what the Harness hands a node
when it says "name TARGET_REPO explicitly".
Read the finding list on #376 first — it names the file and the node for each.
- Addressing.
repo_refis theoriginURL, one string. Azure DevOps needs organisation,
project and repository as three arguments.tracker.coordsalready holds all three, but only two
nodes read it and neither is told to prefer it. Which of the two identifies the repository, and
what is the other one for? - Scope. A work item belongs to the project, not to a repository.
dxpholds
DXP-DesignSystem,DXP-WebsiteandDXP-ProfileServices, so "file the issue on TARGET_REPO"
has nothing to execute andspike-ticket's idempotency search matches the other two repositories'
tickets. What second scope keeps three repositories apart inside one project — area path, tag, or
something the config already carries? - Linking. Nothing the DLC produces links back to a work item. Azure DevOps links by
AB#<id>
in the PR or commit text; the PR body template inunic-dlc-build.yamlopen-prcarries no
work-item reference and Archon's branch names carry no id.unic-dlc-pr-review.yamlprepthen
looks for "linked work items … from the PR body, branch name, or tracker links" and finds none.
Where does the id enter the pipeline, and which node writes it? - Classification.
classification.labelsfixes one axis per tier. On Azure DevOps thestate
tier collapses five of eight roles ontoNewand thetypetier collapses three of five onto
Task, so/triagecannot tellneeds-triagefromready-for-agent— the one distinction the
pipeline gates on. Tags carry all seventeen roles. Does a role gain a per-role axis, does the
whole tier move to tags, or does the Harness stop asking a tracker to store its state?
Whatever is decided has to hold without a host CLI token, subcommand, flag or provider name in a Box
prompt — that rule is the reason a closed attempt shipped a subcommand that does not exist.
Metadata
Metadata
Assignees
Labels
app:unic-archon-dlcp0Critical priorityCritical prioritywayfinder:grillingWayfinder ticket: decide it by grillingWayfinder ticket: decide it by grilling
Activity
orioltf commentedon Aug 17, 2026
How to start this session
/wayfinder 373 #387here to claim it. Invoke/grillingand/domain-modeling— this is avocabulary decision as much as a wiring one.
carries the evidence (the
bootstrapoutput, thearchon completewarning, the ADO state list).feature/42928_initial-DLC-installation. Read its.archon/unic-dlc.config.yaml— the collapsedclassification.labelsis question 4 made concrete.Traps
contract that names a repository no work item belongs to.
why the gaps exist and it does not bend to close them.
unic-pr-review'sado-fetcherandado-writeralready solve the addressing and thread shapesagainst this tenant. Read how, then decide what the Harness owns — do not copy ADO code into a Box.
Read the "Tenant facts" comment below this one before the body. It was gathered after this opener
was written. Question 2 is already answered there — the repo discriminator is
System.AreaPath, withthe three exact strings — and question 4 carries measured tag usage plus the two roles that are
actually load-bearing. Starting from the body alone re-derives all of it.
orioltf commentedon Aug 17, 2026
Tenant facts, gathered 2026-08-17
Read off the Consumer's Azure DevOps project before the grilling session, so it does not rediscover them. Every string below is quoted exactly as the API returned it.
Question 2 is answered: the scope is
System.AreaPathThe Consumer manages every DXP repository in the one
dxpproject, and splits work by area. The area names the repository:Note
PS - Profile Serviceis two words. TheDS - Design Systemarea was created today for this effort; before that the design system had no area and its work items sat indxp\DXP - <customer>\Unknown - New.So
unic-dlc-qa.yamluat-gate.on_rejectandunic-dlc-explore.yamlspike-ticketneed an area path, not a repository, andspike-ticket's idempotency search must filter on it or it will match the other repositories' tickets. What remains open is where the DLC learns the mapping —tracker.coordsis the obvious home, but it currently holds{org, project, repo}and nothing that names an area.Question 4 is constrained: the tag namespace is real, large and inconsistent
dxpcarries 293 tags. Usage over the last 540 days, from a query capped at 1000 work items — these are floors, and the ranking is the signal, not the absolute number:Four spellings of one idea, one of which carries the weight. Adding seventeen
dlc:-prefixed tags to this would be noise on noise. Adopting the names the Consumer already has costs nothing and collides with nothing.Only two roles are load-bearing
A collapsed role costs something only when a Box reads the value back. Across the four installed Boxes, state and type are write-only — no node queries either. The round trip happens in
/triage→/specs→/tickets→/build, and it turns on two roles.ready-for-agent/ticketswrites it,/builddispatches from itneeds-specs/specspicks up from itneeds-triageNewstates it honestly; leave itneeds-info,ready-for-humanNewcosts no Box anythingresolved,closed,rejectedThe two that need a value have a home in the Consumer's existing vocabulary:
Both are Tags, while
resolved/closed/rejectedare States. That is the per-role axis this ticket's question 4 offers as its first option, and this is the evidence for it: a whole-tier answer either loses the AFK queue or writes a state ADO will reject.The type tier needs nothing
ADO forces a work item type at creation, no Box reads type back, and
feature/spike/tech-debt/docscollapsing ontoUser Story/Taskcosts the pipeline nothing.Spikeat 43 uses is worth keeping as a human-facing tag, but that is board hygiene, not DLC wiring.Spikemaps to the DLC type rolespike, whichunic-dlc-explore.yamlspike-ticketwrites. It is not Matt's/prototype— that skill is interactive,/explorenames it and deliberately never invokes it, and no config role points at it.Ref: *is a fourth axis the DLC has no tier forFE, BE, QA, UX, Analytics, All, Ops, FE-BE, FE-Ops. That is discipline, not state, type or priority. Recorded so nobody later reads it as the type tier. The Harness should not grow a tier for it.
Not changed by any of this
Question 1 (addressing) and question 3 (work-item linking) stand as written. Area answers which work items belong to this repository; it says nothing about how a node addresses the repository itself, and nothing writes
AB#<id>yet.orioltf commentedon Aug 17, 2026
Resolution
The tracker contract is two repo-local prose files, not a config schema. A Box names a role and a
file. It never names a host word.
The four questions were one question — where a host word is allowed to live — and the answer changes
the container rather than widening the schema.
What settled it
setup-matt-pocock-skillshas no Azure DevOps support. It offers GitHub, GitLab and local markdown,and for anything else it says: ask the user to describe the workflow in one paragraph, then write
docs/agents/issue-tracker.mdfrom scratch. So Matt has no ADO answer. He has a place to write ADOdown — and his own GitHub template is full of
gh issue create --titleandgh api --method POST.The skill text stays generic; the repo's own doc carries every host word.
That is the split the DLC wanted. The DLC built a different container for it:
tracker.coords,classification.labels,project.pr_strategy, and ADR-0024's rule that a Box must not readdocs/agents/issue-tracker.md.Two facts found while deciding, neither on #376:
provided to you" —
code-review,triage,to-spec,to-tickets.DXP-DesignSystemhas nodocs/agents/directory.code-review, which/pr-reviewreads, is already looking for a filethat is not there.
issues.jsoncarries no tracker id.Issue.idis documented as "unique identifier for this issuewithin the file". So nothing downstream can reference a tracker item on any host, and
open-pr's PR body has noCloses #<n>either. The linking gap is not an ADO problem.The decision
Two files, Matt's split, owned by DLC
/setup.docs/agents/issue-tracker.mdGitHub template shape. The fallback, never the norm.
docs/agents/triage-labels.mdfield.
Matt's split is kept for compatibility: someone who knows his system looks in
triage-labels.mdforthe vocabulary, and only
code-reviewhard-codes a path (issue-tracker.md). Both files name DLC/setupas their owner at the top, because runningsetup-matt-pocock-skillsovertriage-labels.mdreverts it to a five-role
wontfixvocabulary.A section earns its place only if it is a fact about this tenant. An MCP server discovers an API.
It cannot discover that the Consumer's area path is this repository's area, or that
ready-for-agentmeans the tagreadyForImplementation. So Create, Read, Search, Comment, Linkingand PR-thread shape are all dropped: writing them down freezes a flag table in Markdown, which is the
same defect ADR-0016 forbids in a Box prompt and harder to notice.
What leaves the config
trackerblocktype— nothing branches on it;spike-ticketbinds it and then says "do NOT branch on which provider it names".accessandcoords— the doc carries them, and the Methods read the docclassification.labelstriage-labels.mdcarries the roles, with an axis per roleproject.pr_strategyCLAUDE.mdrepo_refand theambiguous-repoguardMANDATORY_PATHSbecomesproject.branchingalone.Linking
Three separate things, all tracker-agnostic:
/ticketswrites the tracker id intoissues.json. The prerequisite — without it nothingdownstream can reference the tracker item on any host.
open-prlinks each work item through the registered skill's own link capability. Both PRsand work items carry a links collection and it is discoverable, so the Box says "link", not
AB#<id>. Naming the text token in a doc would pick the weaker of the two and freeze it.feat(42928): …, the loop writesfeat(<slug>): …—is a repo convention, not a tracker contract. It goes in the Consumer's
CLAUDE.md, beside thebranch-naming rule already there.
ADR-0024
Amended in place, not superseded. Four Box prompts cite it by name, so it cannot vanish. Two things
in it are now dead:
It solved a real two-writer problem by forbidding the read; this decision solves it by removing one
writer.
tier alongside the string so the skill knows to write a
System.State, a Jira status or a GitHublabel. On
dxp,needs-specsandready-for-agentcannot beSystem.Statevalues — they have tobe Tags. The axis belongs to the role, not the tier.
Findings closed
From #376: 1 (addressing), 2 (URL spellings — the guard is deleted, not fixed), 3 (work
items belong to the project), 5 (no axis wide enough), 6 and its correction (
pr_strategy),7 (threads not comments — now a prose fix in
unic-dlc-pr-review.yaml, since the shape isdiscoverable).
Still work: 4 (linking), split into the three items above. Still Archon's: 8 and 9.
Not decided here
CONTEXT.md's Repository derivation entry describesrepo_refand its guard, both deleted bythis decision. The glossary is not edited yet: it correctly describes the plugin as it stands today,
and rewriting it before the code changes would make it lie. It belongs to the plugin ticket below.