@codedrifters/configulator 0.0.191 → 0.0.193

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,138 @@
1
+ # Label Taxonomy Ownership
2
+
3
+ Configulator synthesizes a canonical GitHub label set for every consuming
4
+ project via the sync-labels workflow. This document defines **who owns
5
+ which label families** so the taxonomy stays coherent as more agent
6
+ bundles are ported.
7
+
8
+ ## Three ownership tiers
9
+
10
+ Labels fall into one of three tiers based on who is responsible for
11
+ defining them, maintaining their colors and descriptions, and keeping
12
+ them in sync with the agent rules that depend on them.
13
+
14
+ ### Tier 1 — Configulator core labels
15
+
16
+ Defined statically in `src/workflows/sync-labels.ts` and applied to
17
+ every project that uses `addSyncLabelsWorkflow`. These are the labels
18
+ that the orchestrator, issue-worker, and PR automation depend on
19
+ regardless of which specific agent bundles a project enables.
20
+
21
+ Families in this tier:
22
+
23
+ - **`status:*`** — workflow state (`ready`, `in-progress`, `blocked`,
24
+ `done`, `deferred`, `needs-attention`). Required by every agent that
25
+ transitions issues through the workflow.
26
+ - **`priority:*`** — scheduling priority (`critical`, `high`, `medium`,
27
+ `low`, `trivial`). Required by the orchestrator to sequence work.
28
+ - **`type:*`** — conventional-commit work type (`feat`, `fix`, `docs`,
29
+ `chore`, `refactor`, `style`, `perf`, `test`, `build`, `ci`,
30
+ `revert`, `release`, `hotfix`). Matches the PR title convention so
31
+ automation can derive one from the other.
32
+
33
+ These are exported as `DEFAULT_STATUS_LABELS`, `DEFAULT_PRIORITY_LABELS`,
34
+ and `DEFAULT_TYPE_LABELS` and are always merged in.
35
+
36
+ ### Tier 2 — Agent-bundle labels
37
+
38
+ Owned by the individual agent bundle that depends on them. A bundle
39
+ should contribute only the labels its rules reference — typically a
40
+ small family of phase labels used by a multi-phase workflow.
41
+
42
+ Examples seen in the vortex reference taxonomy:
43
+
44
+ - `meeting:extract`, `meeting:notes`, `meeting:draft`, `meeting:link`
45
+ — owned by the meeting-analysis bundle
46
+ - `research:scope`, `research:search`, `research:synthesize`,
47
+ `research:verify` — owned by a research-pipeline bundle
48
+ - `bcm:outline`, `bcm:scaffold`, `bcm:context`, `bcm:connect` —
49
+ owned by a bcm-writer bundle
50
+
51
+ Bundle-contributed labels are scoped: a project that does not enable
52
+ the meeting-analysis bundle does not get `meeting:*` labels. This
53
+ keeps the label list per-project aligned with the workflows that
54
+ project actually runs.
55
+
56
+ A bundle declares its labels via the optional `labels` field on the
57
+ `AgentRuleBundle` interface. When `AgentConfig` is enabled on a
58
+ project, `addSyncLabelsWorkflow` merges labels from every active
59
+ bundle into `.github/labels.yml` automatically.
60
+
61
+ ```ts
62
+ export const meetingAnalysisBundle: AgentRuleBundle = {
63
+ name: "meeting-analysis",
64
+ // ...
65
+ labels: [
66
+ { name: "meeting:extract", color: "C5DEF5", description: "..." },
67
+ { name: "meeting:notes", color: "BFDADC", description: "..." },
68
+ { name: "meeting:draft", color: "D4C5F9", description: "..." },
69
+ { name: "meeting:link", color: "FEF2C0", description: "..." },
70
+ ],
71
+ };
72
+ ```
73
+
74
+ Consumers can still override a bundle-contributed label's color or
75
+ description by supplying the same label name via
76
+ `SyncLabelsOptions.labels` — the consumer entry wins.
77
+
78
+ ### Tier 3 — Consumer-project labels
79
+
80
+ Owned by the end project. These are domain-specific categories
81
+ configulator cannot reasonably predict. Examples from the vortex
82
+ reference project:
83
+
84
+ - `area:requirements`, `area:business-strategy`, `area:references`,
85
+ `area:product`, `area:architecture` — area labels tied to a
86
+ directory layout unique to that project
87
+
88
+ Consumers add these through the `labels` option on
89
+ `addSyncLabelsWorkflow` / `SyncLabelsOptions.labels`.
90
+
91
+ ## How the tiers compose
92
+
93
+ At synth time, the final label set written to `.github/labels.yml` is:
94
+
95
+ ```
96
+ DEFAULT_STATUS_LABELS
97
+ ∪ DEFAULT_PRIORITY_LABELS
98
+ ∪ DEFAULT_TYPE_LABELS
99
+ ∪ (labels contributed by enabled agent bundles)
100
+ ∪ (labels provided by the consumer via options)
101
+ ```
102
+
103
+ The sync-labels workflow then reconciles this set against the live
104
+ repo — creating missing labels, updating colors/descriptions, and
105
+ (if `deleteOtherLabels` is true, the default) removing any label that
106
+ is not in the file.
107
+
108
+ ## Naming conventions
109
+
110
+ - Use lowercase, kebab-case label names.
111
+ - Use a family prefix followed by a colon: `family:name` (e.g.
112
+ `status:ready`, `meeting:extract`).
113
+ - Keep descriptions short and action-oriented — they appear in the
114
+ GitHub UI dropdown when applying labels.
115
+ - Pick distinct hex colors within a family so labels are scannable in
116
+ the issue list. Related families (e.g. all `research:*`) should
117
+ share a color gradient.
118
+
119
+ ## When to add a new label family
120
+
121
+ Before adding a new family, check whether an existing one covers the
122
+ intent:
123
+
124
+ - Workflow state → `status:*`
125
+ - Scheduling order → `priority:*`
126
+ - Kind of change → `type:*`
127
+
128
+ A new family is warranted when it cross-cuts the existing ones and
129
+ is required by a specific agent's rules — for example, phase labels
130
+ that track which micro-session of a multi-phase agent an issue
131
+ belongs to.
132
+
133
+ ## See also
134
+
135
+ - `docs/audits/label-audit-308.md` — initial audit of configulator
136
+ labels against the vortex reference taxonomy
137
+ - `src/workflows/sync-labels.ts` — source of truth for the Tier 1
138
+ default labels