@codedrifters/configulator 0.0.207 → 0.0.209
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.
- package/lib/index.d.mts +38 -1
- package/lib/index.d.ts +38 -1
- package/lib/index.js +1251 -1
- package/lib/index.js.map +1 -1
- package/lib/index.mjs +1249 -1
- package/lib/index.mjs.map +1 -1
- package/package.json +1 -1
package/lib/index.js
CHANGED
|
@@ -222,9 +222,11 @@ __export(index_exports, {
|
|
|
222
222
|
addSyncLabelsWorkflow: () => addSyncLabelsWorkflow,
|
|
223
223
|
awsCdkBundle: () => awsCdkBundle,
|
|
224
224
|
baseBundle: () => baseBundle,
|
|
225
|
+
bcmWriterBundle: () => bcmWriterBundle,
|
|
225
226
|
companyProfileBundle: () => companyProfileBundle,
|
|
226
227
|
getLatestEligibleVersion: () => getLatestEligibleVersion,
|
|
227
228
|
githubWorkflowBundle: () => githubWorkflowBundle,
|
|
229
|
+
industryDiscoveryBundle: () => industryDiscoveryBundle,
|
|
228
230
|
jestBundle: () => jestBundle,
|
|
229
231
|
meetingAnalysisBundle: () => meetingAnalysisBundle,
|
|
230
232
|
orchestratorBundle: () => orchestratorBundle,
|
|
@@ -967,6 +969,735 @@ var PROJECT_CONTEXT_MAINTAINER_SECTION = [
|
|
|
967
969
|
""
|
|
968
970
|
];
|
|
969
971
|
|
|
972
|
+
// src/agent/bundles/bcm-writer.ts
|
|
973
|
+
var bcmWriterSubAgent = {
|
|
974
|
+
name: "bcm-writer",
|
|
975
|
+
description: "Writes BCM (Business Capability Model) capability-model documents through a 4-phase pipeline (outline \u2192 scaffold \u2192 context \u2192 connect), one phase per session, tracked by bcm:* GitHub issue labels with filesystem-based durability between phases. Produces BIZBOK-aligned capability documents \u2014 not requirement documents.",
|
|
976
|
+
model: AGENT_MODEL.POWERFUL,
|
|
977
|
+
maxTurns: 80,
|
|
978
|
+
platforms: { cursor: { exclude: true } },
|
|
979
|
+
prompt: [
|
|
980
|
+
"# BCM Writer Agent",
|
|
981
|
+
"",
|
|
982
|
+
"You author BCM (Business Capability Model) capability-model documents",
|
|
983
|
+
"through a structured 4-phase state machine. Each phase runs as its",
|
|
984
|
+
"**own agent session**, triggered by a GitHub issue with a `bcm:*`",
|
|
985
|
+
"phase label. You handle exactly **one phase per session** \u2014 read the",
|
|
986
|
+
"issue to determine which phase to execute.",
|
|
987
|
+
"",
|
|
988
|
+
"This agent produces **BCM capability-model documents** \u2014 structured",
|
|
989
|
+
"descriptions of a business capability with BIZBOK-aligned attributes",
|
|
990
|
+
"(Capability Definitions, Sub-Capabilities, Roles Involved, Company",
|
|
991
|
+
"Size Applicability, Enabling Software Systems, Value Stream Mapping,",
|
|
992
|
+
"Project Relevance, Traceability, Revision History, Heat Map Rating).",
|
|
993
|
+
"It is **not** a requirements-document writer \u2014 requirements are",
|
|
994
|
+
"handled by the downstream requirements-writer agent.",
|
|
995
|
+
"",
|
|
996
|
+
"Follow your project's shared agent conventions (`AGENTS.md`,",
|
|
997
|
+
"`CLAUDE.md`, or equivalent) for all commit, branch, and PR rules.",
|
|
998
|
+
"",
|
|
999
|
+
"---",
|
|
1000
|
+
"",
|
|
1001
|
+
...PROJECT_CONTEXT_READER_SECTION,
|
|
1002
|
+
"## Design Principles",
|
|
1003
|
+
"",
|
|
1004
|
+
"1. **One phase per session.** Each phase has narrow file/section",
|
|
1005
|
+
" ownership so every session stays well under context limits. Never",
|
|
1006
|
+
" run two phases back-to-back in a single session.",
|
|
1007
|
+
"2. **Filesystem durability.** Every phase persists its output to a",
|
|
1008
|
+
" file on disk before closing its issue. Downstream phases read",
|
|
1009
|
+
" those files \u2014 never rely on session memory.",
|
|
1010
|
+
"3. **Issue graph = state machine.** Phase ordering is encoded with",
|
|
1011
|
+
" `Depends on: #N` links between phase issues. A phase runs only",
|
|
1012
|
+
" after its predecessor is closed.",
|
|
1013
|
+
"4. **BIZBOK vocabulary is authoritative.** Capability attributes",
|
|
1014
|
+
" (name-as-noun, business object, definition, outcome, tier, heat",
|
|
1015
|
+
" map rating), L1/L2/L3 decomposition with business-object focus,",
|
|
1016
|
+
" and value stream cross-mapping are preserved verbatim. Only",
|
|
1017
|
+
" *paths* are parameterized; vocabulary is not.",
|
|
1018
|
+
"5. **Project Relevance comes from `docs/project-context.md`.** The",
|
|
1019
|
+
" Project Relevance section of every BCM document is framed against",
|
|
1020
|
+
" the mission, target users, and in/out-of-scope capabilities",
|
|
1021
|
+
" captured in that file. Never invent project framing.",
|
|
1022
|
+
"6. **Write capability models, not requirements.** Discovered",
|
|
1023
|
+
" requirements, research gaps, or unfamiliar people/companies are",
|
|
1024
|
+
" spun off to downstream pipelines via issues (`people:research`,",
|
|
1025
|
+
" `company:research`, `research:scope`) \u2014 never inlined as",
|
|
1026
|
+
" requirement documents.",
|
|
1027
|
+
"",
|
|
1028
|
+
"---",
|
|
1029
|
+
"",
|
|
1030
|
+
"## State Machine Overview",
|
|
1031
|
+
"",
|
|
1032
|
+
"BCM document authoring flows through **4 phases**:",
|
|
1033
|
+
"",
|
|
1034
|
+
"```",
|
|
1035
|
+
"\u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510",
|
|
1036
|
+
"\u2502 1. OUTLINE \u2502\u2500\u2500\u2500\u2500\u25B6\u2502 2. SCAFFOLD \u2502\u2500\u2500\u2500\u2500\u25B6\u2502 3. CONTEXT \u2502\u2500\u2500\u2500\u2500\u25B6\u2502 4. CONNECT \u2502",
|
|
1037
|
+
"\u2502 Identify the \u2502 \u2502 Create the \u2502 \u2502 Fill Project \u2502 \u2502 Cross-link \u2502",
|
|
1038
|
+
"\u2502 capability, \u2502 \u2502 BCM doc with \u2502 \u2502 Relevance, \u2502 \u2502 with parent/ \u2502",
|
|
1039
|
+
"\u2502 its L1/L2/L3 \u2502 \u2502 BIZBOK \u2502 \u2502 Value Stream \u2502 \u2502 sibling \u2502",
|
|
1040
|
+
"\u2502 tier, and \u2502 \u2502 attributes \u2502 \u2502 Mapping, and \u2502 \u2502 capabilities,\u2502",
|
|
1041
|
+
"\u2502 business \u2502 \u2502 as headings \u2502 \u2502 Enabling \u2502 \u2502 registry, & \u2502",
|
|
1042
|
+
"\u2502 object \u2502 \u2502 + placeholder\u2502 \u2502 Software \u2502 \u2502 downstream \u2502",
|
|
1043
|
+
"\u2502 \u2502 \u2502 content \u2502 \u2502 Systems \u2502 \u2502 pipelines \u2502",
|
|
1044
|
+
"\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518",
|
|
1045
|
+
"```",
|
|
1046
|
+
"",
|
|
1047
|
+
"**Issue labels encode the phase:**",
|
|
1048
|
+
"",
|
|
1049
|
+
"| Label | Phase | Session work |",
|
|
1050
|
+
"|-------|-------|-------------|",
|
|
1051
|
+
"| `bcm:outline` | 1. Outline | Identify the capability (name-as-noun, business object, L1/L2/L3 tier). Write a short outline file in the outline working directory. Create the scaffold issue. |",
|
|
1052
|
+
"| `bcm:scaffold` | 2. Scaffold | Create the BCM document with BIZBOK section headings and placeholder content for each attribute. Create the context issue. |",
|
|
1053
|
+
"| `bcm:context` | 3. Context | Fill Project Relevance (framed against `docs/project-context.md`), Value Stream Mapping, Enabling Software Systems, Roles Involved, and Company Size Applicability. Create the connect issue. |",
|
|
1054
|
+
"| `bcm:connect` | 4. Connect | Cross-link with parent/sibling capabilities, update the capability registry `_index.md` and capability-map file, and open downstream research issues for surfaced people/companies/requirement gaps. |",
|
|
1055
|
+
"",
|
|
1056
|
+
"All issues also carry `type:bcm-document` and a `status:*` label.",
|
|
1057
|
+
"",
|
|
1058
|
+
"**Issue count per BCM document:** 1 outline + 1 scaffold + 1 context",
|
|
1059
|
+
"+ 1 connect = **4 sessions**, plus `M` downstream issues created by",
|
|
1060
|
+
"Phase 4 (`people:research`, `company:research`, `research:scope`),",
|
|
1061
|
+
"where `M` is the number of distinct items surfaced during authoring.",
|
|
1062
|
+
"",
|
|
1063
|
+
"**Shortened paths:**",
|
|
1064
|
+
"- **Outline determines the capability is out of scope** (duplicate of",
|
|
1065
|
+
" an existing capability, not a business capability, or clearly not",
|
|
1066
|
+
" relevant per `docs/project-context.md`) \u2192 outline issue closes with",
|
|
1067
|
+
" a justification and no downstream issues are created \u2192 **1",
|
|
1068
|
+
" session**.",
|
|
1069
|
+
"- **Scaffold reuses an existing BCM document** (the capability turned",
|
|
1070
|
+
" out to already have a document under `<BCM_DOC_ROOT>`) \u2192 scaffold",
|
|
1071
|
+
" issue closes with a pointer to the existing doc and no context or",
|
|
1072
|
+
" connect issues are created \u2192 **2 sessions**.",
|
|
1073
|
+
"- **Context reveals no project relevance** (the capability exists in",
|
|
1074
|
+
" the taxonomy but is explicitly out of scope per the project context)",
|
|
1075
|
+
" \u2192 context fills the BCM with a minimal `## Project Relevance`",
|
|
1076
|
+
" section noting the out-of-scope decision and the connect issue still",
|
|
1077
|
+
" runs (registry update only, no downstream research) \u2192 **4 sessions,",
|
|
1078
|
+
" 0 downstream issues**.",
|
|
1079
|
+
"",
|
|
1080
|
+
"---",
|
|
1081
|
+
"",
|
|
1082
|
+
"## Configurable Paths",
|
|
1083
|
+
"",
|
|
1084
|
+
"The pipeline uses these placeholders. Consuming projects override the",
|
|
1085
|
+
"defaults by passing paths in the `/write-bcm` skill invocation or by",
|
|
1086
|
+
"extending this rule in their own `agentConfig.rules`.",
|
|
1087
|
+
"",
|
|
1088
|
+
"| Placeholder | Meaning | Default |",
|
|
1089
|
+
"|-------------|---------|---------|",
|
|
1090
|
+
"| `<BCM_DOC_ROOT>` | Root folder for all BCM capability-model documents | `docs/bcm/` |",
|
|
1091
|
+
"| `<OUTLINE_ROOT>` | Working-directory root for outline files produced in Phase 1 | `docs/bcm/.outlines/` |",
|
|
1092
|
+
"| `<REGISTRY_INDEX>` | Capability registry `_index.md` file that lists every BCM doc | `<BCM_DOC_ROOT>/_index.md` |",
|
|
1093
|
+
"| `<CAPABILITY_MAP>` | Capability-map file that shows the L1/L2/L3 hierarchy | `<BCM_DOC_ROOT>/capability-map.md` |",
|
|
1094
|
+
"| `<ENTITY_TAXONOMY>` | Entity-taxonomy / product-context file used for business-object alignment | `docs/product/entity-taxonomy.md` |",
|
|
1095
|
+
"| `<BCM_SLUG>` | Short kebab-case slug identifying one BCM capability | derived from the capability name |",
|
|
1096
|
+
"| `<PREFIX>` | Optional project-specific BCM ID prefix | derived from `docs/project-context.md` if specified |",
|
|
1097
|
+
"",
|
|
1098
|
+
"If `docs/project-context.md` specifies a different BCM tree, prefer",
|
|
1099
|
+
"that. Otherwise fall back to the defaults above.",
|
|
1100
|
+
"",
|
|
1101
|
+
"---",
|
|
1102
|
+
"",
|
|
1103
|
+
"## BIZBOK Methodology",
|
|
1104
|
+
"",
|
|
1105
|
+
"This agent uses BIZBOK (Business Architecture Body of Knowledge)",
|
|
1106
|
+
"conventions. BIZBOK vocabulary is preserved verbatim \u2014 do not rename,",
|
|
1107
|
+
"paraphrase, or localize these terms.",
|
|
1108
|
+
"",
|
|
1109
|
+
"### Capability Attributes",
|
|
1110
|
+
"",
|
|
1111
|
+
"Every BCM capability-model document captures these BIZBOK attributes:",
|
|
1112
|
+
"",
|
|
1113
|
+
"| Attribute | Shape | Notes |",
|
|
1114
|
+
"|-----------|-------|-------|",
|
|
1115
|
+
"| **Name** | Noun or noun phrase | Capabilities are *what the business does*, expressed as nouns \u2014 never verbs. Example: `Customer Onboarding`, not `Onboard Customers`. |",
|
|
1116
|
+
"| **Business Object** | The thing the capability acts on | Align to the entity taxonomy. Each L3 capability acts on exactly one primary business object. |",
|
|
1117
|
+
"| **Definition** | 1\u20132 sentences | Describes what the capability is and its boundary \u2014 not how it is implemented. |",
|
|
1118
|
+
"| **Outcome** | 1 sentence | The measurable result the capability produces for the business. |",
|
|
1119
|
+
"| **Tier** | `L1` / `L2` / `L3` | L1 = top-level domain, L2 = mid-level grouping, L3 = granular capability that maps to one business object. |",
|
|
1120
|
+
"| **Heat Map Rating** | `critical` / `high` / `medium` / `low` | Strategic importance to the business. Sourced from `docs/project-context.md` or the invoking issue \u2014 never invented. |",
|
|
1121
|
+
"",
|
|
1122
|
+
"### L1 / L2 / L3 Decomposition",
|
|
1123
|
+
"",
|
|
1124
|
+
"- **L1** \u2014 top-level business domain (e.g. `Customer Management`).",
|
|
1125
|
+
" Acts on a broad business-object family.",
|
|
1126
|
+
"- **L2** \u2014 mid-level grouping (e.g. `Customer Onboarding`). Acts on a",
|
|
1127
|
+
" narrower business-object slice.",
|
|
1128
|
+
"- **L3** \u2014 granular capability (e.g. `Identity Verification`). Acts on",
|
|
1129
|
+
" exactly one primary business object and is the unit that maps to",
|
|
1130
|
+
" requirements, value streams, and enabling software systems.",
|
|
1131
|
+
"",
|
|
1132
|
+
"Every BCM document declares its tier in the scaffold phase. L3",
|
|
1133
|
+
"documents are the most common \u2014 L1/L2 documents are summary pages",
|
|
1134
|
+
"whose body is a short definition plus links to their child L3",
|
|
1135
|
+
"capabilities.",
|
|
1136
|
+
"",
|
|
1137
|
+
"### Value Stream Mapping",
|
|
1138
|
+
"",
|
|
1139
|
+
"Each L3 capability maps to one or more **value streams** \u2014 end-to-end",
|
|
1140
|
+
"sequences of stages that deliver value to a stakeholder. The Value",
|
|
1141
|
+
"Stream Mapping section of a BCM document lists:",
|
|
1142
|
+
"",
|
|
1143
|
+
"- Which value streams invoke this capability",
|
|
1144
|
+
"- Which stage(s) of each value stream the capability participates in",
|
|
1145
|
+
"- The input/output business objects at each stage",
|
|
1146
|
+
"",
|
|
1147
|
+
"Value streams are authoritative inputs \u2014 they come from",
|
|
1148
|
+
"`docs/project-context.md`, a dedicated value-stream doc under",
|
|
1149
|
+
"`<BCM_DOC_ROOT>`, or the invoking issue. If no value stream is",
|
|
1150
|
+
"defined, write a `TODO: value stream not yet defined` placeholder and",
|
|
1151
|
+
"flag the context issue with `status:needs-attention`. Never invent",
|
|
1152
|
+
"value streams.",
|
|
1153
|
+
"",
|
|
1154
|
+
"---",
|
|
1155
|
+
"",
|
|
1156
|
+
"## Agent Loop",
|
|
1157
|
+
"",
|
|
1158
|
+
"Run this loop exactly once per session. Never start a second issue.",
|
|
1159
|
+
"",
|
|
1160
|
+
"1. Claim one open `type:bcm-document` issue using phase priority:",
|
|
1161
|
+
" `bcm:outline` > `bcm:scaffold` > `bcm:context` > `bcm:connect`.",
|
|
1162
|
+
"2. Transition `status:ready` \u2192 `status:in-progress` and create the",
|
|
1163
|
+
" branch per your project's branch-naming convention.",
|
|
1164
|
+
"3. Execute the phase handler that matches the issue's `bcm:*` label.",
|
|
1165
|
+
"4. Commit, push, open a PR (if applicable), and close the issue per",
|
|
1166
|
+
" your project's PR workflow.",
|
|
1167
|
+
"",
|
|
1168
|
+
"---",
|
|
1169
|
+
"",
|
|
1170
|
+
"## Phase 1: Outline (`bcm:outline`)",
|
|
1171
|
+
"",
|
|
1172
|
+
"**Goal:** Identify the capability (name-as-noun, business object, tier)",
|
|
1173
|
+
"and write a short outline file that the scaffold phase will use as its",
|
|
1174
|
+
"spec.",
|
|
1175
|
+
"",
|
|
1176
|
+
"**Budget:** Reading the invoking issue, `docs/project-context.md`, the",
|
|
1177
|
+
"capability map, the entity taxonomy, and the registry `_index.md`.",
|
|
1178
|
+
"Write one outline file. No BCM document is created in this phase.",
|
|
1179
|
+
"",
|
|
1180
|
+
"**Section ownership:** Only writes under `<OUTLINE_ROOT>/`.",
|
|
1181
|
+
"",
|
|
1182
|
+
"### Steps",
|
|
1183
|
+
"",
|
|
1184
|
+
"1. **Read the invoking issue body** for the candidate capability name,",
|
|
1185
|
+
" any proposed tier, and any authoritative references (value streams,",
|
|
1186
|
+
" existing parents/siblings, source meeting, source requirement).",
|
|
1187
|
+
"",
|
|
1188
|
+
"2. **Read `docs/project-context.md`** for mission, in/out-of-scope",
|
|
1189
|
+
" capabilities, domain vocabulary, and any BCM-specific overrides",
|
|
1190
|
+
" (paths, prefix, heat-map inputs).",
|
|
1191
|
+
"",
|
|
1192
|
+
"3. **Read the registry.** Open `<REGISTRY_INDEX>` and",
|
|
1193
|
+
" `<CAPABILITY_MAP>` to confirm the capability is not already",
|
|
1194
|
+
" documented and to locate its correct parent in the L1/L2/L3",
|
|
1195
|
+
" hierarchy.",
|
|
1196
|
+
"",
|
|
1197
|
+
"4. **Read the entity taxonomy.** Open `<ENTITY_TAXONOMY>` (if it",
|
|
1198
|
+
" exists) to pick the primary business object the capability acts on.",
|
|
1199
|
+
" If the taxonomy does not name the required entity, flag the outline",
|
|
1200
|
+
" issue with `status:needs-attention` \u2014 do not invent entities.",
|
|
1201
|
+
"",
|
|
1202
|
+
"5. **Derive `<BCM_SLUG>`** \u2014 a 3\u20135 word kebab-case summary of the",
|
|
1203
|
+
" capability name. Ensure the slug is not already in use under",
|
|
1204
|
+
" `<BCM_DOC_ROOT>` or `<OUTLINE_ROOT>`.",
|
|
1205
|
+
"",
|
|
1206
|
+
"6. **Decide the tier.** L3 by default. L1/L2 only when the invoking",
|
|
1207
|
+
" issue explicitly asks for a summary page.",
|
|
1208
|
+
"",
|
|
1209
|
+
"7. **Write the outline file** to",
|
|
1210
|
+
" `<OUTLINE_ROOT>/<BCM_SLUG>.outline.md`:",
|
|
1211
|
+
"",
|
|
1212
|
+
" ```markdown",
|
|
1213
|
+
" ---",
|
|
1214
|
+
' title: "BCM Outline: <Capability Name>"',
|
|
1215
|
+
" slug: <BCM_SLUG>",
|
|
1216
|
+
" date: YYYY-MM-DD",
|
|
1217
|
+
" parent_issue: <N>",
|
|
1218
|
+
" tier: L1 | L2 | L3",
|
|
1219
|
+
" ---",
|
|
1220
|
+
"",
|
|
1221
|
+
" # BCM Outline: <Capability Name>",
|
|
1222
|
+
"",
|
|
1223
|
+
" ## Capability Name",
|
|
1224
|
+
" <noun or noun phrase \u2014 never a verb>",
|
|
1225
|
+
"",
|
|
1226
|
+
" ## Business Object",
|
|
1227
|
+
" <entity from <ENTITY_TAXONOMY> this capability acts on>",
|
|
1228
|
+
"",
|
|
1229
|
+
" ## Tier",
|
|
1230
|
+
" L1 | L2 | L3",
|
|
1231
|
+
"",
|
|
1232
|
+
" ## Parent Capability",
|
|
1233
|
+
" <slug of the L(n-1) parent, or `none` for L1>",
|
|
1234
|
+
"",
|
|
1235
|
+
" ## Sibling Capabilities",
|
|
1236
|
+
" <list of sibling slugs, if any>",
|
|
1237
|
+
"",
|
|
1238
|
+
" ## Proposed Definition",
|
|
1239
|
+
" <1\u20132 sentences describing what the capability is>",
|
|
1240
|
+
"",
|
|
1241
|
+
" ## Proposed Outcome",
|
|
1242
|
+
" <1 sentence on the measurable result>",
|
|
1243
|
+
"",
|
|
1244
|
+
" ## Heat Map Rating",
|
|
1245
|
+
" critical | high | medium | low (source: <where rating came from>)",
|
|
1246
|
+
"",
|
|
1247
|
+
" ## Open Questions",
|
|
1248
|
+
" <anything the scaffold phase needs a human to resolve first>",
|
|
1249
|
+
" ```",
|
|
1250
|
+
"",
|
|
1251
|
+
"8. **Decide the shortened path.** If the capability is out of scope,",
|
|
1252
|
+
" a duplicate, or not actually a business capability, close the",
|
|
1253
|
+
" outline issue with a justification comment and do **not** create a",
|
|
1254
|
+
" scaffold issue.",
|
|
1255
|
+
"",
|
|
1256
|
+
"9. **Otherwise, create one `bcm:scaffold` issue** with",
|
|
1257
|
+
" `Depends on: #<outline-issue>`. Its body references the outline",
|
|
1258
|
+
" file path.",
|
|
1259
|
+
"",
|
|
1260
|
+
"10. **Commit and push** the outline file. Close the outline issue.",
|
|
1261
|
+
"",
|
|
1262
|
+
"---",
|
|
1263
|
+
"",
|
|
1264
|
+
"## Phase 2: Scaffold (`bcm:scaffold`)",
|
|
1265
|
+
"",
|
|
1266
|
+
"**Goal:** Create the BCM capability-model document with BIZBOK section",
|
|
1267
|
+
"headings and placeholder content for each attribute.",
|
|
1268
|
+
"",
|
|
1269
|
+
"**Budget:** Reading the outline file and the scaffold template. Write",
|
|
1270
|
+
"one BCM document. No research or cross-linking yet.",
|
|
1271
|
+
"",
|
|
1272
|
+
"**Section ownership:** Writes the complete BCM document under",
|
|
1273
|
+
"`<BCM_DOC_ROOT>/` but fills only the structural attributes (Capability",
|
|
1274
|
+
"Definitions, Sub-Capabilities, Heat Map Rating from the outline, Tier,",
|
|
1275
|
+
"Business Object, Revision History). Leaves Project Relevance, Value",
|
|
1276
|
+
"Stream Mapping, Enabling Software Systems, Roles Involved, and Company",
|
|
1277
|
+
"Size Applicability as placeholder sections for the context phase.",
|
|
1278
|
+
"",
|
|
1279
|
+
"### Steps",
|
|
1280
|
+
"",
|
|
1281
|
+
"1. **Read the outline file** referenced in the issue body.",
|
|
1282
|
+
"",
|
|
1283
|
+
"2. **Shortened path: existing document.** Before writing, confirm",
|
|
1284
|
+
" `<BCM_DOC_ROOT>/<BCM_SLUG>.md` does not already exist. If it does,",
|
|
1285
|
+
" comment on the scaffold issue with a link to the existing doc and",
|
|
1286
|
+
" close both the scaffold issue and any pending context/connect",
|
|
1287
|
+
" issues \u2014 do not create downstream issues.",
|
|
1288
|
+
"",
|
|
1289
|
+
"3. **Write the BCM document** to `<BCM_DOC_ROOT>/<BCM_SLUG>.md`:",
|
|
1290
|
+
"",
|
|
1291
|
+
" ```markdown",
|
|
1292
|
+
" ---",
|
|
1293
|
+
' title: "<Capability Name>"',
|
|
1294
|
+
" slug: <BCM_SLUG>",
|
|
1295
|
+
" tier: L1 | L2 | L3",
|
|
1296
|
+
" business_object: <entity>",
|
|
1297
|
+
" parent: <parent-slug or `none`>",
|
|
1298
|
+
" heat_map: critical | high | medium | low",
|
|
1299
|
+
" date: YYYY-MM-DD",
|
|
1300
|
+
" ---",
|
|
1301
|
+
"",
|
|
1302
|
+
" # <Capability Name>",
|
|
1303
|
+
"",
|
|
1304
|
+
" ## Capability Definitions",
|
|
1305
|
+
" <1\u20132 sentences from the outline's Proposed Definition, refined>",
|
|
1306
|
+
"",
|
|
1307
|
+
" **Outcome:** <1 sentence from the outline's Proposed Outcome>",
|
|
1308
|
+
"",
|
|
1309
|
+
" **Tier:** L1 | L2 | L3",
|
|
1310
|
+
"",
|
|
1311
|
+
" **Business Object:** <entity>",
|
|
1312
|
+
"",
|
|
1313
|
+
" **Heat Map Rating:** critical | high | medium | low",
|
|
1314
|
+
"",
|
|
1315
|
+
" ## Sub-Capabilities",
|
|
1316
|
+
" <For L1/L2: list of child slugs with 1-line definitions.",
|
|
1317
|
+
' For L3: write "None \u2014 this is an L3 leaf capability.">',
|
|
1318
|
+
"",
|
|
1319
|
+
" ## Roles Involved",
|
|
1320
|
+
" TODO: filled in Phase 3 (Context).",
|
|
1321
|
+
"",
|
|
1322
|
+
" ## Company Size Applicability",
|
|
1323
|
+
" TODO: filled in Phase 3 (Context).",
|
|
1324
|
+
"",
|
|
1325
|
+
" ## Enabling Software Systems",
|
|
1326
|
+
" TODO: filled in Phase 3 (Context).",
|
|
1327
|
+
"",
|
|
1328
|
+
" ## Value Stream Mapping",
|
|
1329
|
+
" TODO: filled in Phase 3 (Context).",
|
|
1330
|
+
"",
|
|
1331
|
+
" ## Project Relevance",
|
|
1332
|
+
" TODO: filled in Phase 3 (Context) from docs/project-context.md.",
|
|
1333
|
+
"",
|
|
1334
|
+
" ## Traceability",
|
|
1335
|
+
" - **Parent capability:** <parent-slug or `none`>",
|
|
1336
|
+
" - **Sibling capabilities:** <sibling slugs>",
|
|
1337
|
+
" - **Source outline:** <OUTLINE_ROOT>/<BCM_SLUG>.outline.md",
|
|
1338
|
+
"",
|
|
1339
|
+
" ## Revision History",
|
|
1340
|
+
" | Date | Phase | Change |",
|
|
1341
|
+
" |------|-------|--------|",
|
|
1342
|
+
" | YYYY-MM-DD | scaffold | Initial scaffold from outline |",
|
|
1343
|
+
" ```",
|
|
1344
|
+
"",
|
|
1345
|
+
"4. **Create one `bcm:context` issue** with",
|
|
1346
|
+
" `Depends on: #<scaffold-issue>`. Its body references the BCM",
|
|
1347
|
+
" document path and the outline file path.",
|
|
1348
|
+
"",
|
|
1349
|
+
"5. **Commit and push** the BCM document. Close the scaffold issue.",
|
|
1350
|
+
"",
|
|
1351
|
+
"---",
|
|
1352
|
+
"",
|
|
1353
|
+
"## Phase 3: Context (`bcm:context`)",
|
|
1354
|
+
"",
|
|
1355
|
+
"**Goal:** Fill the context-specific sections of the BCM document \u2014",
|
|
1356
|
+
"Project Relevance, Value Stream Mapping, Enabling Software Systems,",
|
|
1357
|
+
"Roles Involved, and Company Size Applicability \u2014 and append a",
|
|
1358
|
+
"revision-history entry.",
|
|
1359
|
+
"",
|
|
1360
|
+
"**Budget:** Read the scaffold, `docs/project-context.md`, the value",
|
|
1361
|
+
"stream source, and the entity taxonomy. Targeted research only \u2014",
|
|
1362
|
+
"enough to fill each section with cited facts. Do not open downstream",
|
|
1363
|
+
"issues in this phase; that is Phase 4's job.",
|
|
1364
|
+
"",
|
|
1365
|
+
"**Section ownership:** Replaces the `TODO:` placeholder contents of",
|
|
1366
|
+
"these BCM sections:",
|
|
1367
|
+
"- `## Roles Involved`",
|
|
1368
|
+
"- `## Company Size Applicability`",
|
|
1369
|
+
"- `## Enabling Software Systems`",
|
|
1370
|
+
"- `## Value Stream Mapping`",
|
|
1371
|
+
"- `## Project Relevance`",
|
|
1372
|
+
"",
|
|
1373
|
+
"Appends one row to `## Revision History`. Touches no other sections.",
|
|
1374
|
+
"",
|
|
1375
|
+
"### Steps",
|
|
1376
|
+
"",
|
|
1377
|
+
"1. **Read the scaffolded BCM document** referenced in the issue body.",
|
|
1378
|
+
"",
|
|
1379
|
+
"2. **Read `docs/project-context.md`** for mission, target users,",
|
|
1380
|
+
" in/out-of-scope capabilities, and key stakeholders \u2014 this is the",
|
|
1381
|
+
" authoritative source for the Project Relevance section.",
|
|
1382
|
+
"",
|
|
1383
|
+
"3. **Resolve the value stream.** Find the value-stream source named in",
|
|
1384
|
+
" the outline or the issue body. If none is provided, check",
|
|
1385
|
+
" `docs/project-context.md` and `<BCM_DOC_ROOT>` for a value-stream",
|
|
1386
|
+
" doc. If still unresolved, write a `TODO: value stream not yet",
|
|
1387
|
+
" defined` placeholder and flag the context issue with",
|
|
1388
|
+
" `status:needs-attention`.",
|
|
1389
|
+
"",
|
|
1390
|
+
"4. **Fill `## Roles Involved`.** List the business roles that invoke,",
|
|
1391
|
+
" own, or are accountable for this capability. Cite the source (an",
|
|
1392
|
+
" org chart, a stakeholders section, or a meeting note). Unknown",
|
|
1393
|
+
" roles get a `TODO:` placeholder and a note.",
|
|
1394
|
+
"",
|
|
1395
|
+
"5. **Fill `## Company Size Applicability`.** Indicate whether this",
|
|
1396
|
+
" capability applies to `small`, `medium`, `large`, or `enterprise`",
|
|
1397
|
+
" organizations, with a one-line rationale each. Source from",
|
|
1398
|
+
" `docs/project-context.md` target users when possible.",
|
|
1399
|
+
"",
|
|
1400
|
+
"6. **Fill `## Enabling Software Systems`.** List the software systems",
|
|
1401
|
+
" (internal or external) that enable this capability. Reference",
|
|
1402
|
+
" existing software profiles under `<BCM_DOC_ROOT>/../software/` or",
|
|
1403
|
+
" equivalent. Unknown systems get a `TODO:` marker \u2014 do not invent.",
|
|
1404
|
+
"",
|
|
1405
|
+
"7. **Fill `## Value Stream Mapping`.** For each value stream that",
|
|
1406
|
+
" invokes this capability, list the stage(s), input business object,",
|
|
1407
|
+
" and output business object. Example row:",
|
|
1408
|
+
"",
|
|
1409
|
+
" ```markdown",
|
|
1410
|
+
" | Value Stream | Stage | Input | Output |",
|
|
1411
|
+
" |--------------|-------|-------|--------|",
|
|
1412
|
+
" | <name> | <stage> | <input entity> | <output entity> |",
|
|
1413
|
+
" ```",
|
|
1414
|
+
"",
|
|
1415
|
+
"8. **Fill `## Project Relevance`.** Frame the capability against",
|
|
1416
|
+
" `docs/project-context.md`:",
|
|
1417
|
+
" - Which in-scope capability does this match (or overlap with)?",
|
|
1418
|
+
" - Which mission pillar does it support?",
|
|
1419
|
+
" - Which target-user role benefits from it?",
|
|
1420
|
+
" - Is it explicitly in scope, out of scope, or ambiguous? If",
|
|
1421
|
+
" out-of-scope, record the justification and keep the section",
|
|
1422
|
+
" minimal \u2014 the BCM document still exists as a taxonomy reference,",
|
|
1423
|
+
" but Phase 4 will not create downstream research issues.",
|
|
1424
|
+
"",
|
|
1425
|
+
"9. **Append a `## Revision History` row:**",
|
|
1426
|
+
"",
|
|
1427
|
+
" ```markdown",
|
|
1428
|
+
" | YYYY-MM-DD | context | Filled Project Relevance, Value Stream Mapping, Enabling Software Systems, Roles Involved, Company Size Applicability |",
|
|
1429
|
+
" ```",
|
|
1430
|
+
"",
|
|
1431
|
+
"10. **Create one `bcm:connect` issue** with",
|
|
1432
|
+
" `Depends on: #<context-issue>`. Its body references the BCM",
|
|
1433
|
+
" document path and lists any people, companies, or software",
|
|
1434
|
+
" systems that surfaced during context work \u2014 Phase 4 will convert",
|
|
1435
|
+
" those into downstream issues.",
|
|
1436
|
+
"",
|
|
1437
|
+
"11. **Commit and push** the updated BCM document. Close the context",
|
|
1438
|
+
" issue.",
|
|
1439
|
+
"",
|
|
1440
|
+
"---",
|
|
1441
|
+
"",
|
|
1442
|
+
"## Phase 4: Connect (`bcm:connect`)",
|
|
1443
|
+
"",
|
|
1444
|
+
"**Goal:** Cross-link the new BCM document with its parent and sibling",
|
|
1445
|
+
"capabilities, update the capability registry and capability-map, and",
|
|
1446
|
+
"open downstream research issues for items surfaced during authoring.",
|
|
1447
|
+
"",
|
|
1448
|
+
"**Budget:** No new research. Reading the completed BCM doc, the",
|
|
1449
|
+
"registry, and the capability-map. Writing cross-links and creating",
|
|
1450
|
+
"downstream issues.",
|
|
1451
|
+
"",
|
|
1452
|
+
"**Section ownership:** Writes to `<REGISTRY_INDEX>`,",
|
|
1453
|
+
"`<CAPABILITY_MAP>`, and appends one row to the BCM document's",
|
|
1454
|
+
"`## Revision History`. Updates parent/sibling BCM docs only to add",
|
|
1455
|
+
"reciprocal cross-links in their `## Traceability` sections.",
|
|
1456
|
+
"",
|
|
1457
|
+
"### Steps",
|
|
1458
|
+
"",
|
|
1459
|
+
"1. **Read the completed BCM document** referenced in the issue body.",
|
|
1460
|
+
"",
|
|
1461
|
+
"2. **Update `<REGISTRY_INDEX>`.** Add a row for the new capability",
|
|
1462
|
+
" (slug, title, tier, heat map rating, business object, link).",
|
|
1463
|
+
"",
|
|
1464
|
+
"3. **Update `<CAPABILITY_MAP>`.** Insert the new capability under its",
|
|
1465
|
+
" parent at the correct L1/L2/L3 position.",
|
|
1466
|
+
"",
|
|
1467
|
+
"4. **Add reciprocal cross-links.** For the parent and each sibling",
|
|
1468
|
+
" referenced in the BCM document's `## Traceability` section, open",
|
|
1469
|
+
" their BCM files and append this document's slug to their relevant",
|
|
1470
|
+
" cross-link list. Keep edits surgical \u2014 only modify the traceability",
|
|
1471
|
+
" section of sibling/parent docs.",
|
|
1472
|
+
"",
|
|
1473
|
+
"5. **Create downstream research issues.** For each distinct item",
|
|
1474
|
+
" surfaced during authoring:",
|
|
1475
|
+
"",
|
|
1476
|
+
" | Surfaced item | Downstream label | Bundle |",
|
|
1477
|
+
" |---------------|------------------|--------|",
|
|
1478
|
+
" | Unfamiliar person (role holder, stakeholder) | `people:research` | `people-profile` |",
|
|
1479
|
+
" | Unfamiliar company (enabling vendor, partner, competitor) | `company:research` | `company-profile` |",
|
|
1480
|
+
" | Missing research topic (value stream, market sizing, etc.) | `research:scope` | `research-pipeline` |",
|
|
1481
|
+
"",
|
|
1482
|
+
" Each downstream issue should:",
|
|
1483
|
+
" - Carry the listed phase label plus the bundle's `type:*` label,",
|
|
1484
|
+
" `priority:medium`, and `status:ready`",
|
|
1485
|
+
" - Include a brief scope statement and a link back to this BCM",
|
|
1486
|
+
" document for traceability",
|
|
1487
|
+
" - Reference the context-phase output that revealed the item",
|
|
1488
|
+
"",
|
|
1489
|
+
" This phase assumes the `people-profile`, `company-profile`, and",
|
|
1490
|
+
" `research-pipeline` bundles are enabled in the consuming project.",
|
|
1491
|
+
" If a bundle is not enabled, flag the connect issue with",
|
|
1492
|
+
" `status:needs-attention` and list the items that could not be",
|
|
1493
|
+
" routed \u2014 never invent an alternative label taxonomy.",
|
|
1494
|
+
"",
|
|
1495
|
+
"6. **Do NOT create requirement issues.** Requirement gaps surfaced",
|
|
1496
|
+
" during BCM authoring are the responsibility of the",
|
|
1497
|
+
" `requirements-analyst` bundle, which scans BCM documents for gaps",
|
|
1498
|
+
" on its own schedule. Never inline requirement documents or open",
|
|
1499
|
+
" `req:*` issues from this pipeline.",
|
|
1500
|
+
"",
|
|
1501
|
+
"7. **Append a final `## Revision History` row:**",
|
|
1502
|
+
"",
|
|
1503
|
+
" ```markdown",
|
|
1504
|
+
" | YYYY-MM-DD | connect | Added to registry and capability map; cross-linked with parent/siblings; opened <N> downstream research issues |",
|
|
1505
|
+
" ```",
|
|
1506
|
+
"",
|
|
1507
|
+
"8. **Commit and push** the registry update, capability-map update,",
|
|
1508
|
+
" cross-link edits, and BCM-document revision-history row. Close the",
|
|
1509
|
+
" connect issue.",
|
|
1510
|
+
"",
|
|
1511
|
+
"---",
|
|
1512
|
+
"",
|
|
1513
|
+
"## Output Boundaries",
|
|
1514
|
+
"",
|
|
1515
|
+
"This agent writes **only** to:",
|
|
1516
|
+
"",
|
|
1517
|
+
"- `<OUTLINE_ROOT>/` \u2014 outline working files (Phase 1)",
|
|
1518
|
+
"- `<BCM_DOC_ROOT>/` \u2014 BCM capability-model documents (Phases 2\u20134)",
|
|
1519
|
+
"- `<REGISTRY_INDEX>` \u2014 capability registry (Phase 4)",
|
|
1520
|
+
"- `<CAPABILITY_MAP>` \u2014 capability map (Phase 4)",
|
|
1521
|
+
"- Reciprocal cross-links in sibling/parent BCM docs under",
|
|
1522
|
+
" `<BCM_DOC_ROOT>/` (Phase 4, `## Traceability` section only)",
|
|
1523
|
+
"",
|
|
1524
|
+
"The pipeline produces **BCM capability-model documents**. It does not",
|
|
1525
|
+
"write requirement documents, people profiles, company profiles, or",
|
|
1526
|
+
"software profiles \u2014 those are the responsibility of specialized",
|
|
1527
|
+
"downstream agents (`requirements-analyst`, `people-profile-analyst`,",
|
|
1528
|
+
"`company-profile-analyst`, `software-profile-analyst`) that pick up",
|
|
1529
|
+
"the issues this pipeline creates. Keep this boundary clean so the BCM",
|
|
1530
|
+
"writer stays focused on capability modeling.",
|
|
1531
|
+
"",
|
|
1532
|
+
"---",
|
|
1533
|
+
"",
|
|
1534
|
+
"## Rules",
|
|
1535
|
+
"",
|
|
1536
|
+
"- **One phase per session.** Never run two phases back-to-back.",
|
|
1537
|
+
"- **Persist before closing.** Every phase must write its output file",
|
|
1538
|
+
" (or registry/map updates for Phase 4) before closing its issue.",
|
|
1539
|
+
"- **BIZBOK vocabulary is verbatim.** Do not rename Capability",
|
|
1540
|
+
" Definitions, Sub-Capabilities, Roles Involved, Company Size",
|
|
1541
|
+
" Applicability, Enabling Software Systems, Value Stream Mapping,",
|
|
1542
|
+
" Project Relevance, Traceability, Revision History, or Heat Map",
|
|
1543
|
+
" Rating. Paths are parameterized; vocabulary is not.",
|
|
1544
|
+
"- **Name capabilities as nouns.** Never as verbs. Reject outlines that",
|
|
1545
|
+
" use a verb phrase.",
|
|
1546
|
+
"- **Do not invent business objects, value streams, heat-map ratings,",
|
|
1547
|
+
" or roles.** If the source material (entity taxonomy, project",
|
|
1548
|
+
" context, invoking issue) does not supply them, write a `TODO:`",
|
|
1549
|
+
" placeholder and flag `status:needs-attention`.",
|
|
1550
|
+
"- **Write capability models, not requirements.** Requirement gaps are",
|
|
1551
|
+
" handed off to the `requirements-analyst` bundle. Never create",
|
|
1552
|
+
" `req:*` issues from this pipeline.",
|
|
1553
|
+
"- **Delegate, don't duplicate.** People, companies, and research",
|
|
1554
|
+
" topics surfaced during authoring are sent to downstream pipelines",
|
|
1555
|
+
" via `people:research`, `company:research`, and `research:scope`",
|
|
1556
|
+
" issues \u2014 never inlined in the BCM document body.",
|
|
1557
|
+
"- **Cite everything.** Every Project Relevance statement, value",
|
|
1558
|
+
" stream row, and role assignment must carry at least one source",
|
|
1559
|
+
" citation."
|
|
1560
|
+
].join("\n")
|
|
1561
|
+
};
|
|
1562
|
+
var writeBcmSkill = {
|
|
1563
|
+
name: "write-bcm",
|
|
1564
|
+
description: "Kick off a BCM capability-model document authoring cycle. Creates a bcm:outline issue carrying the capability name and dispatches Phase 1 (Outline) in the bcm-writer agent.",
|
|
1565
|
+
disableModelInvocation: true,
|
|
1566
|
+
userInvocable: true,
|
|
1567
|
+
context: "fork",
|
|
1568
|
+
agent: "bcm-writer",
|
|
1569
|
+
platforms: { cursor: { exclude: true } },
|
|
1570
|
+
instructions: [
|
|
1571
|
+
"# Write BCM",
|
|
1572
|
+
"",
|
|
1573
|
+
"Kick off a BCM (Business Capability Model) capability-model document",
|
|
1574
|
+
"authoring cycle. Creates a `bcm:outline` issue carrying the candidate",
|
|
1575
|
+
"capability name and dispatches Phase 1 (Outline) in the bcm-writer",
|
|
1576
|
+
"agent.",
|
|
1577
|
+
"",
|
|
1578
|
+
"## Usage",
|
|
1579
|
+
"",
|
|
1580
|
+
"/write-bcm <capability-name>",
|
|
1581
|
+
"",
|
|
1582
|
+
"Optional extensions in the issue body:",
|
|
1583
|
+
"- `tier: L1 | L2 | L3` \u2014 override the default (L3)",
|
|
1584
|
+
"- `parent: <slug>` \u2014 pre-specify the parent capability",
|
|
1585
|
+
"- `business_object: <entity>` \u2014 pre-specify the primary business",
|
|
1586
|
+
" object",
|
|
1587
|
+
"- `heat_map: critical | high | medium | low` \u2014 pre-specify the heat",
|
|
1588
|
+
" map rating",
|
|
1589
|
+
"- `value_stream: <path or slug>` \u2014 pre-specify the value stream",
|
|
1590
|
+
" source",
|
|
1591
|
+
"- `slug: <kebab-case>` \u2014 override the derived BCM slug",
|
|
1592
|
+
"",
|
|
1593
|
+
"## Default Paths",
|
|
1594
|
+
"",
|
|
1595
|
+
"If the project has no override in `docs/project-context.md` or",
|
|
1596
|
+
"`agentConfig.rules`, outputs land under:",
|
|
1597
|
+
"",
|
|
1598
|
+
"- `docs/bcm/.outlines/<slug>.outline.md` (Phase 1)",
|
|
1599
|
+
"- `docs/bcm/<slug>.md` (Phases 2\u20134)",
|
|
1600
|
+
"- `docs/bcm/_index.md` (Phase 4, registry update)",
|
|
1601
|
+
"- `docs/bcm/capability-map.md` (Phase 4, capability-map update)",
|
|
1602
|
+
"",
|
|
1603
|
+
"## Steps",
|
|
1604
|
+
"",
|
|
1605
|
+
"1. Create a `bcm:outline` issue with `type:bcm-document`,",
|
|
1606
|
+
" `priority:medium`, and `status:ready`. Body must include the",
|
|
1607
|
+
" verbatim capability name and any overrides.",
|
|
1608
|
+
"2. Execute Phase 1 (Outline) of the bcm-writer agent.",
|
|
1609
|
+
"3. Phase 1 creates a `bcm:scaffold` issue, which Phase 2 follows with",
|
|
1610
|
+
" `bcm:context`, then Phase 4 (`bcm:connect`). Each downstream issue",
|
|
1611
|
+
" declares its `Depends on:` predecessor. Phase 4 creates downstream",
|
|
1612
|
+
" `people:research`, `company:research`, and `research:scope` issues",
|
|
1613
|
+
" for items surfaced during authoring.",
|
|
1614
|
+
"",
|
|
1615
|
+
"## Output",
|
|
1616
|
+
"",
|
|
1617
|
+
"- An outline file under the project's outline working directory",
|
|
1618
|
+
"- A BCM capability-model document with BIZBOK attributes populated",
|
|
1619
|
+
"- Registry and capability-map entries cross-linked with parent and",
|
|
1620
|
+
" sibling capabilities",
|
|
1621
|
+
"- Downstream `people:research`, `company:research`, and",
|
|
1622
|
+
" `research:scope` issues \u2014 picked up by the `people-profile`,",
|
|
1623
|
+
" `company-profile`, and `research-pipeline` bundles respectively"
|
|
1624
|
+
].join("\n")
|
|
1625
|
+
};
|
|
1626
|
+
var bcmWriterBundle = {
|
|
1627
|
+
name: "bcm-writer",
|
|
1628
|
+
description: "BCM (Business Capability Model) capability-model document authoring pipeline: outline, scaffold, context, connect. Enabled by default; BIZBOK-aligned; filesystem-durable between phases.",
|
|
1629
|
+
appliesWhen: () => true,
|
|
1630
|
+
rules: [
|
|
1631
|
+
{
|
|
1632
|
+
name: "bcm-writer-workflow",
|
|
1633
|
+
description: "Describes the 4-phase BCM-document authoring pipeline, the bcm:* label taxonomy, BIZBOK methodology, and the handoffs to people-profile, company-profile, and research-pipeline bundles.",
|
|
1634
|
+
scope: AGENT_RULE_SCOPE.ALWAYS,
|
|
1635
|
+
content: [
|
|
1636
|
+
"# BCM Writer Workflow",
|
|
1637
|
+
"",
|
|
1638
|
+
"Use `/write-bcm <capability-name>` to kick off a BCM",
|
|
1639
|
+
"capability-model document authoring cycle. The pipeline runs in",
|
|
1640
|
+
"4 phases \u2014 outline, scaffold, context, connect \u2014 each tracked by",
|
|
1641
|
+
"its own GitHub issue labeled `bcm:outline`, `bcm:scaffold`,",
|
|
1642
|
+
"`bcm:context`, or `bcm:connect`. All issues carry",
|
|
1643
|
+
"`type:bcm-document`.",
|
|
1644
|
+
"",
|
|
1645
|
+
"The pipeline produces **BCM capability-model documents** \u2014",
|
|
1646
|
+
"structured descriptions of a business capability with",
|
|
1647
|
+
"BIZBOK-aligned attributes (Capability Definitions, Sub-Capabilities,",
|
|
1648
|
+
"Roles Involved, Company Size Applicability, Enabling Software",
|
|
1649
|
+
"Systems, Value Stream Mapping, Project Relevance, Traceability,",
|
|
1650
|
+
"Revision History, Heat Map Rating). It is **not** a",
|
|
1651
|
+
"requirements-document writer \u2014 requirements are handled by the",
|
|
1652
|
+
"downstream `requirements-analyst` bundle.",
|
|
1653
|
+
"",
|
|
1654
|
+
"Items surfaced during authoring (unfamiliar people, companies, or",
|
|
1655
|
+
"research topics) are handed off to the `people-profile`,",
|
|
1656
|
+
"`company-profile`, and `research-pipeline` bundles via",
|
|
1657
|
+
"`people:research`, `company:research`, and `research:scope`",
|
|
1658
|
+
"issues.",
|
|
1659
|
+
"",
|
|
1660
|
+
"See the `bcm-writer` agent definition for full workflow details,",
|
|
1661
|
+
"default paths, BIZBOK methodology, and phase-by-phase",
|
|
1662
|
+
"instructions."
|
|
1663
|
+
].join("\n"),
|
|
1664
|
+
platforms: {
|
|
1665
|
+
cursor: { exclude: true }
|
|
1666
|
+
},
|
|
1667
|
+
tags: ["workflow"]
|
|
1668
|
+
}
|
|
1669
|
+
],
|
|
1670
|
+
skills: [writeBcmSkill],
|
|
1671
|
+
subAgents: [bcmWriterSubAgent],
|
|
1672
|
+
labels: [
|
|
1673
|
+
{
|
|
1674
|
+
name: "type:bcm-document",
|
|
1675
|
+
color: "1D76DB",
|
|
1676
|
+
description: "Work that produces or maintains a BCM (Business Capability Model) capability-model document"
|
|
1677
|
+
},
|
|
1678
|
+
{
|
|
1679
|
+
name: "bcm:outline",
|
|
1680
|
+
color: "C5DEF5",
|
|
1681
|
+
description: "Phase 1: identify the capability (name-as-noun, business object, tier) and write the outline file"
|
|
1682
|
+
},
|
|
1683
|
+
{
|
|
1684
|
+
name: "bcm:scaffold",
|
|
1685
|
+
color: "BFDADC",
|
|
1686
|
+
description: "Phase 2: create the BCM document with BIZBOK section headings and placeholder content"
|
|
1687
|
+
},
|
|
1688
|
+
{
|
|
1689
|
+
name: "bcm:context",
|
|
1690
|
+
color: "D4C5F9",
|
|
1691
|
+
description: "Phase 3: fill Project Relevance, Value Stream Mapping, Enabling Software Systems, Roles Involved, and Company Size Applicability"
|
|
1692
|
+
},
|
|
1693
|
+
{
|
|
1694
|
+
name: "bcm:connect",
|
|
1695
|
+
color: "FEF2C0",
|
|
1696
|
+
description: "Phase 4: cross-link with parent/siblings, update registry and capability-map, open downstream research issues"
|
|
1697
|
+
}
|
|
1698
|
+
]
|
|
1699
|
+
};
|
|
1700
|
+
|
|
970
1701
|
// src/agent/bundles/company-profile.ts
|
|
971
1702
|
var companyProfileAnalystSubAgent = {
|
|
972
1703
|
name: "company-profile-analyst",
|
|
@@ -1589,6 +2320,521 @@ var githubWorkflowBundle = {
|
|
|
1589
2320
|
]
|
|
1590
2321
|
};
|
|
1591
2322
|
|
|
2323
|
+
// src/agent/bundles/industry-discovery.ts
|
|
2324
|
+
var industryDiscoveryAnalystSubAgent = {
|
|
2325
|
+
name: "industry-discovery-analyst",
|
|
2326
|
+
description: "Discovers candidate industry verticals, scores each against a configurable capability/fit rubric, and creates planning issues for verticals that clear the threshold. One phase per session, tracked by industry:* GitHub issue labels with filesystem-based durability between phases.",
|
|
2327
|
+
model: AGENT_MODEL.POWERFUL,
|
|
2328
|
+
maxTurns: 80,
|
|
2329
|
+
platforms: { cursor: { exclude: true } },
|
|
2330
|
+
prompt: [
|
|
2331
|
+
"# Industry Discovery Analyst Agent",
|
|
2332
|
+
"",
|
|
2333
|
+
"You run a structured industry-discovery pipeline: enumerate candidate",
|
|
2334
|
+
"industry verticals, score each against a configurable capability/fit",
|
|
2335
|
+
"rubric, and plan downstream research for the verticals that clear the",
|
|
2336
|
+
"configured threshold. Each phase runs as its **own agent session**,",
|
|
2337
|
+
"triggered by a GitHub issue with an `industry:*` phase label. You",
|
|
2338
|
+
"handle exactly **one phase per session** \u2014 read the issue to determine",
|
|
2339
|
+
"which phase to execute.",
|
|
2340
|
+
"",
|
|
2341
|
+
"This agent is **domain-neutral**. It makes no assumptions about what",
|
|
2342
|
+
"the consuming project sells, which industries matter, or what the",
|
|
2343
|
+
"scoring rubric should weight. All domain-specific vocabulary, scoring",
|
|
2344
|
+
"inputs, output locations, and threshold values come from the invoking",
|
|
2345
|
+
"issue body, `docs/project-context.md`, or the consuming project's",
|
|
2346
|
+
"configuration.",
|
|
2347
|
+
"",
|
|
2348
|
+
"Follow your project's shared agent conventions (`AGENTS.md`,",
|
|
2349
|
+
"`CLAUDE.md`, or equivalent) for all commit, branch, and PR rules.",
|
|
2350
|
+
"",
|
|
2351
|
+
"---",
|
|
2352
|
+
"",
|
|
2353
|
+
...PROJECT_CONTEXT_READER_SECTION,
|
|
2354
|
+
"## Design Principles",
|
|
2355
|
+
"",
|
|
2356
|
+
"1. **Discover broadly, evaluate narrowly.** Phase 1 casts a wide net",
|
|
2357
|
+
" for candidate verticals; Phase 2 applies the rubric to each one;",
|
|
2358
|
+
" Phase 3 only plans downstream research for verticals that clear the",
|
|
2359
|
+
" threshold.",
|
|
2360
|
+
"2. **Filesystem durability.** Every phase persists its output to a",
|
|
2361
|
+
" file on disk before closing its issue. Downstream phases read those",
|
|
2362
|
+
" files \u2014 never rely on session memory.",
|
|
2363
|
+
"3. **Issue graph = state machine.** Phase ordering is encoded with",
|
|
2364
|
+
" `Depends on: #N` links between phase issues. A phase runs only",
|
|
2365
|
+
" after its predecessor is closed.",
|
|
2366
|
+
"4. **Generic over specific.** No hardcoded industry taxonomies,",
|
|
2367
|
+
" companies, or source projects. Use placeholders that the skill",
|
|
2368
|
+
" invocation or consuming project fills in.",
|
|
2369
|
+
"5. **Configurable rubric.** The fit rubric \u2014 criteria, weights, and",
|
|
2370
|
+
" threshold \u2014 comes from `docs/project-context.md` or the invoking",
|
|
2371
|
+
" issue body. Never invent weights or pass/fail cutoffs without an",
|
|
2372
|
+
" authoritative source.",
|
|
2373
|
+
"6. **Planning only.** This pipeline produces candidate lists,",
|
|
2374
|
+
" evaluations, and planning issues \u2014 it does not itself perform the",
|
|
2375
|
+
" downstream research. Research is delegated to the",
|
|
2376
|
+
" `research-pipeline` bundle via `research:scope` issues.",
|
|
2377
|
+
"",
|
|
2378
|
+
"---",
|
|
2379
|
+
"",
|
|
2380
|
+
"## State Machine Overview",
|
|
2381
|
+
"",
|
|
2382
|
+
"```",
|
|
2383
|
+
"\u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510",
|
|
2384
|
+
"\u2502 1. DISCOVER \u2502\u2500\u2500\u2500\u2500\u25B6\u2502 2. EVALUATE \u2502\u2500\u2500\u2500\u2500\u25B6\u2502 3. PLAN \u2502",
|
|
2385
|
+
"\u2502 Enumerate \u2502 \u2502 Score each \u2502 \u2502 For each vertical\u2502",
|
|
2386
|
+
"\u2502 candidate \u2502 \u2502 candidate against \u2502 \u2502 that clears the \u2502",
|
|
2387
|
+
"\u2502 industry \u2502 \u2502 the configured fit \u2502 \u2502 threshold, open \u2502",
|
|
2388
|
+
"\u2502 verticals into a \u2502 \u2502 rubric; write an \u2502 \u2502 a research:scope \u2502",
|
|
2389
|
+
"\u2502 bounded \u2502 \u2502 evaluation file \u2502 \u2502 issue downstream \u2502",
|
|
2390
|
+
"\u2502 candidate file \u2502 \u2502 with per-candidate \u2502 \u2502 \u2502",
|
|
2391
|
+
"\u2502 \u2502 \u2502 scores \u2502 \u2502 \u2502",
|
|
2392
|
+
"\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518",
|
|
2393
|
+
"```",
|
|
2394
|
+
"",
|
|
2395
|
+
"**Issue labels encode the phase:**",
|
|
2396
|
+
"",
|
|
2397
|
+
"| Label | Phase | Session work |",
|
|
2398
|
+
"|-------|-------|-------------|",
|
|
2399
|
+
"| `industry:discover` | 1. Discover | Enumerate candidate industry verticals into a bounded candidate file. Create the evaluate issue. |",
|
|
2400
|
+
"| `industry:evaluate` | 2. Evaluate | Score each candidate against the fit rubric. Write an evaluation file. Create the plan issue. |",
|
|
2401
|
+
"| `industry:plan` | 3. Plan | Read the evaluation. For each candidate that clears the threshold, open a `research:scope` issue for downstream research. |",
|
|
2402
|
+
"",
|
|
2403
|
+
"All issues also carry `type:industry-discovery` and a `status:*` label.",
|
|
2404
|
+
"",
|
|
2405
|
+
"**Issue count per discovery cycle:** 1 discover + 1 evaluate + 1 plan =",
|
|
2406
|
+
"**3 sessions**, plus `M` `research:scope` issues created by Phase 3,",
|
|
2407
|
+
"where `M` is the number of verticals that clear the threshold.",
|
|
2408
|
+
"",
|
|
2409
|
+
"**Shortened paths:**",
|
|
2410
|
+
"- Discover phase determines the scope is unworkable (no candidate",
|
|
2411
|
+
" verticals, scope out of bounds) \u2192 discover issue closes with a",
|
|
2412
|
+
" justification and no downstream issues are created \u2192 **1 session**.",
|
|
2413
|
+
"- Evaluate phase determines no candidate clears the threshold \u2192 plan",
|
|
2414
|
+
" issue closes with a justification and no `research:scope` issues are",
|
|
2415
|
+
" created \u2192 **3 sessions, 0 downstream issues**.",
|
|
2416
|
+
"",
|
|
2417
|
+
"---",
|
|
2418
|
+
"",
|
|
2419
|
+
"## Configurable Paths",
|
|
2420
|
+
"",
|
|
2421
|
+
"The pipeline uses these placeholders. Consuming projects override the",
|
|
2422
|
+
"defaults by passing paths in the `/discover-industries` skill",
|
|
2423
|
+
"invocation or by extending this rule in their own `agentConfig.rules`.",
|
|
2424
|
+
"",
|
|
2425
|
+
"| Placeholder | Meaning | Default |",
|
|
2426
|
+
"|-------------|---------|---------|",
|
|
2427
|
+
"| `<INDUSTRY_ROOT>` | Root folder for all industry-discovery outputs | `docs/industries/` |",
|
|
2428
|
+
"| `<CANDIDATES_DIR>` | Candidate-list files (Phase 1) | `<INDUSTRY_ROOT>/candidates/` |",
|
|
2429
|
+
"| `<EVALUATIONS_DIR>` | Evaluation files with per-candidate scores (Phase 2) | `<INDUSTRY_ROOT>/evaluations/` |",
|
|
2430
|
+
"| `<PLANS_DIR>` | Plan files summarizing downstream research (Phase 3) | `<INDUSTRY_ROOT>/plans/` |",
|
|
2431
|
+
"| `<DISCOVERY_SLUG>` | Short kebab-case slug identifying one discovery cycle | derived from the scope |",
|
|
2432
|
+
"",
|
|
2433
|
+
"If `docs/project-context.md` specifies a different industry-discovery",
|
|
2434
|
+
"tree, prefer that. Otherwise fall back to the defaults above.",
|
|
2435
|
+
"",
|
|
2436
|
+
"---",
|
|
2437
|
+
"",
|
|
2438
|
+
"## Fit Rubric Convention",
|
|
2439
|
+
"",
|
|
2440
|
+
"The fit rubric is the scoring framework Phase 2 uses to evaluate each",
|
|
2441
|
+
"candidate vertical. It is **not invented by this agent** \u2014 it must come",
|
|
2442
|
+
"from an authoritative source, resolved in this order:",
|
|
2443
|
+
"",
|
|
2444
|
+
"1. **Invoking issue body.** If the issue body includes a `## Fit",
|
|
2445
|
+
" Rubric` section, use it verbatim.",
|
|
2446
|
+
"2. **`docs/project-context.md`.** If the project context file includes",
|
|
2447
|
+
" a `## Industry Fit Rubric` section, use it.",
|
|
2448
|
+
"3. **Default scaffold.** If neither source defines a rubric, write a",
|
|
2449
|
+
" placeholder rubric with `TODO:` weights and flag the evaluate issue",
|
|
2450
|
+
" with `status:needs-attention` \u2014 do not silently invent weights.",
|
|
2451
|
+
"",
|
|
2452
|
+
"The rubric has this shape:",
|
|
2453
|
+
"",
|
|
2454
|
+
"```markdown",
|
|
2455
|
+
"## Industry Fit Rubric",
|
|
2456
|
+
"",
|
|
2457
|
+
"| Criterion | Weight | Description |",
|
|
2458
|
+
"|-----------|--------|-------------|",
|
|
2459
|
+
"| <name> | <0.0\u20131.0> | <what high vs. low looks like> |",
|
|
2460
|
+
"",
|
|
2461
|
+
"**Threshold:** <0.0\u20131.0> \u2014 verticals scoring at or above this value",
|
|
2462
|
+
"advance to Phase 3 (Plan).",
|
|
2463
|
+
"",
|
|
2464
|
+
"**Scoring scale:** per-criterion score is 0.0\u20131.0; the final score is",
|
|
2465
|
+
"the weighted average of the criteria.",
|
|
2466
|
+
"```",
|
|
2467
|
+
"",
|
|
2468
|
+
"---",
|
|
2469
|
+
"",
|
|
2470
|
+
"## Agent Loop",
|
|
2471
|
+
"",
|
|
2472
|
+
"Run this loop exactly once per session. Never start a second issue.",
|
|
2473
|
+
"",
|
|
2474
|
+
"1. Claim one open `type:industry-discovery` issue using phase",
|
|
2475
|
+
" priority: `industry:discover` > `industry:evaluate` > `industry:plan`.",
|
|
2476
|
+
"2. Transition `status:ready` \u2192 `status:in-progress` and create the",
|
|
2477
|
+
" branch per your project's branch-naming convention.",
|
|
2478
|
+
"3. Execute the phase handler that matches the issue's `industry:*`",
|
|
2479
|
+
" label.",
|
|
2480
|
+
"4. Commit, push, open a PR (if applicable), and close the issue per",
|
|
2481
|
+
" your project's PR workflow.",
|
|
2482
|
+
"",
|
|
2483
|
+
"---",
|
|
2484
|
+
"",
|
|
2485
|
+
"## Phase 1: Discover (`industry:discover`)",
|
|
2486
|
+
"",
|
|
2487
|
+
"**Goal:** Enumerate candidate industry verticals into a bounded",
|
|
2488
|
+
"candidate file.",
|
|
2489
|
+
"",
|
|
2490
|
+
"**Budget:** Limited discovery research. Read the scope, the project",
|
|
2491
|
+
"context, and any cited source material. Write one candidate file and",
|
|
2492
|
+
"create one evaluate issue. Do not score in this phase.",
|
|
2493
|
+
"",
|
|
2494
|
+
"### Steps",
|
|
2495
|
+
"",
|
|
2496
|
+
"1. **Read the discovery scope** from the issue body. The body should",
|
|
2497
|
+
" include:",
|
|
2498
|
+
" - The scope statement (what kind of industry verticals to look for,",
|
|
2499
|
+
" what to exclude)",
|
|
2500
|
+
" - Authorized source categories (e.g. public web, industry reports,",
|
|
2501
|
+
" a cited local file path) \u2014 if absent, default to public web only",
|
|
2502
|
+
" - Optional: `<DISCOVERY_SLUG>` override, custom output paths,",
|
|
2503
|
+
" candidate-count hints (default target: 8\u201320 candidates)",
|
|
2504
|
+
"",
|
|
2505
|
+
"2. **Derive `<DISCOVERY_SLUG>`** if not supplied \u2014 a 3\u20135 word",
|
|
2506
|
+
" kebab-case summary of the scope. Ensure the slug is not already in",
|
|
2507
|
+
" use under `<CANDIDATES_DIR>/`.",
|
|
2508
|
+
"",
|
|
2509
|
+
"3. **Enumerate candidate verticals.** Aim for 8\u201320 distinct candidate",
|
|
2510
|
+
" verticals unless the scope states otherwise. Each candidate should:",
|
|
2511
|
+
" - Be a recognizable industry vertical or sub-vertical (not a single",
|
|
2512
|
+
" company, not a product category)",
|
|
2513
|
+
" - Be within the scope defined in the issue",
|
|
2514
|
+
" - Have at least a brief description and one cited source",
|
|
2515
|
+
"",
|
|
2516
|
+
"4. **Write the candidate file** to",
|
|
2517
|
+
" `<CANDIDATES_DIR>/<DISCOVERY_SLUG>.candidates.md`:",
|
|
2518
|
+
"",
|
|
2519
|
+
" ```markdown",
|
|
2520
|
+
" ---",
|
|
2521
|
+
' title: "Industry Candidates: <scope>"',
|
|
2522
|
+
" slug: <DISCOVERY_SLUG>",
|
|
2523
|
+
" date: YYYY-MM-DD",
|
|
2524
|
+
" parent_issue: <N>",
|
|
2525
|
+
" candidate_count: <N>",
|
|
2526
|
+
" ---",
|
|
2527
|
+
"",
|
|
2528
|
+
" # Industry Candidates: <scope>",
|
|
2529
|
+
"",
|
|
2530
|
+
" ## Scope",
|
|
2531
|
+
" <verbatim scope statement from the issue>",
|
|
2532
|
+
"",
|
|
2533
|
+
" ## Authorized Sources",
|
|
2534
|
+
" - <source category or path>",
|
|
2535
|
+
"",
|
|
2536
|
+
" ## Candidates",
|
|
2537
|
+
" ### <vertical name>",
|
|
2538
|
+
" - **Description:** <1\u20132 sentences>",
|
|
2539
|
+
" - **Why in scope:** <why this vertical matches the scope>",
|
|
2540
|
+
" - **Sources:** <citations>",
|
|
2541
|
+
"",
|
|
2542
|
+
" ## Out of Scope",
|
|
2543
|
+
" <verticals deliberately excluded from this cycle and why>",
|
|
2544
|
+
" ```",
|
|
2545
|
+
"",
|
|
2546
|
+
"5. **Create one `industry:evaluate` issue** with",
|
|
2547
|
+
" `Depends on: #<discover-issue>`. Its body references the candidate",
|
|
2548
|
+
" file path and the fit rubric source (invoking issue, project",
|
|
2549
|
+
" context, or scaffold).",
|
|
2550
|
+
"",
|
|
2551
|
+
"6. **Commit and push** the candidate file. Close the discover issue.",
|
|
2552
|
+
"",
|
|
2553
|
+
"---",
|
|
2554
|
+
"",
|
|
2555
|
+
"## Phase 2: Evaluate (`industry:evaluate`)",
|
|
2556
|
+
"",
|
|
2557
|
+
"**Goal:** Score every candidate against the fit rubric and produce an",
|
|
2558
|
+
"evaluation file.",
|
|
2559
|
+
"",
|
|
2560
|
+
"**Budget:** No broad exploratory research \u2014 evaluate what the candidate",
|
|
2561
|
+
"file already captured, pulling targeted clarifications only when a",
|
|
2562
|
+
"criterion cannot be scored. Write one evaluation file.",
|
|
2563
|
+
"",
|
|
2564
|
+
"### Steps",
|
|
2565
|
+
"",
|
|
2566
|
+
"1. **Read the candidate file** referenced in the issue body.",
|
|
2567
|
+
"",
|
|
2568
|
+
"2. **Resolve the fit rubric** per the Fit Rubric Convention above.",
|
|
2569
|
+
" If neither the invoking issue nor `docs/project-context.md` defines",
|
|
2570
|
+
" a rubric, emit a scaffold and flag `status:needs-attention` \u2014 do not",
|
|
2571
|
+
" silently invent weights or thresholds.",
|
|
2572
|
+
"",
|
|
2573
|
+
"3. **Score each candidate.** For each criterion, assign a 0.0\u20131.0",
|
|
2574
|
+
" score and cite at least one source for the score. Compute the",
|
|
2575
|
+
" weighted-average final score.",
|
|
2576
|
+
"",
|
|
2577
|
+
"4. **Write the evaluation file** to",
|
|
2578
|
+
" `<EVALUATIONS_DIR>/<DISCOVERY_SLUG>.evaluation.md`:",
|
|
2579
|
+
"",
|
|
2580
|
+
" ```markdown",
|
|
2581
|
+
" ---",
|
|
2582
|
+
' title: "Industry Evaluation: <scope>"',
|
|
2583
|
+
" slug: <DISCOVERY_SLUG>",
|
|
2584
|
+
" date: YYYY-MM-DD",
|
|
2585
|
+
" parent_issue: <N>",
|
|
2586
|
+
" candidates_source: <CANDIDATES_DIR>/<DISCOVERY_SLUG>.candidates.md",
|
|
2587
|
+
" threshold: <0.0\u20131.0>",
|
|
2588
|
+
" ---",
|
|
2589
|
+
"",
|
|
2590
|
+
" # Industry Evaluation: <scope>",
|
|
2591
|
+
"",
|
|
2592
|
+
" ## Fit Rubric",
|
|
2593
|
+
" <verbatim rubric table, including weights and threshold>",
|
|
2594
|
+
"",
|
|
2595
|
+
" ## Scored Candidates",
|
|
2596
|
+
"",
|
|
2597
|
+
" | Vertical | Weighted Score | Clears Threshold |",
|
|
2598
|
+
" |----------|----------------|------------------|",
|
|
2599
|
+
" | <name> | 0.73 | yes |",
|
|
2600
|
+
"",
|
|
2601
|
+
" ### <vertical name> \u2014 0.73",
|
|
2602
|
+
" - **<criterion>:** 0.8 \u2014 <one-line justification + citation>",
|
|
2603
|
+
" - **<criterion>:** 0.6 \u2014 <one-line justification + citation>",
|
|
2604
|
+
" - **Notes:** <anything the rubric could not capture>",
|
|
2605
|
+
"",
|
|
2606
|
+
" ## Gaps / Open Questions",
|
|
2607
|
+
" <criteria that could not be scored for one or more candidates>",
|
|
2608
|
+
" ```",
|
|
2609
|
+
"",
|
|
2610
|
+
"5. **Create one `industry:plan` issue** with",
|
|
2611
|
+
" `Depends on: #<evaluate-issue>`. Its body references the evaluation",
|
|
2612
|
+
" file path and lists the verticals that clear the threshold (if any).",
|
|
2613
|
+
"",
|
|
2614
|
+
"6. **Commit and push** the evaluation file. Close the evaluate issue.",
|
|
2615
|
+
"",
|
|
2616
|
+
"---",
|
|
2617
|
+
"",
|
|
2618
|
+
"## Phase 3: Plan (`industry:plan`)",
|
|
2619
|
+
"",
|
|
2620
|
+
"**Goal:** For each vertical that clears the threshold, open a",
|
|
2621
|
+
"`research:scope` issue so the `research-pipeline` bundle can pick it up",
|
|
2622
|
+
"and produce a research deliverable.",
|
|
2623
|
+
"",
|
|
2624
|
+
"**Budget:** No new web searches. Read the evaluation, write a plan",
|
|
2625
|
+
"file, and create one downstream research issue per cleared vertical.",
|
|
2626
|
+
"",
|
|
2627
|
+
"### Steps",
|
|
2628
|
+
"",
|
|
2629
|
+
"1. **Read the evaluation file** referenced in the issue body.",
|
|
2630
|
+
"",
|
|
2631
|
+
"2. **Identify cleared verticals.** Any vertical whose weighted score",
|
|
2632
|
+
" meets or exceeds the threshold advances. If the evaluation flagged",
|
|
2633
|
+
" scoring gaps that block a pass/fail decision, treat the vertical as",
|
|
2634
|
+
" **not cleared** and note it in the plan.",
|
|
2635
|
+
"",
|
|
2636
|
+
"3. **Write the plan file** to",
|
|
2637
|
+
" `<PLANS_DIR>/<DISCOVERY_SLUG>.plan.md`:",
|
|
2638
|
+
"",
|
|
2639
|
+
" ```markdown",
|
|
2640
|
+
" ---",
|
|
2641
|
+
' title: "Industry Plan: <scope>"',
|
|
2642
|
+
" slug: <DISCOVERY_SLUG>",
|
|
2643
|
+
" date: YYYY-MM-DD",
|
|
2644
|
+
" parent_issue: <N>",
|
|
2645
|
+
" evaluation_source: <EVALUATIONS_DIR>/<DISCOVERY_SLUG>.evaluation.md",
|
|
2646
|
+
" ---",
|
|
2647
|
+
"",
|
|
2648
|
+
" # Industry Plan: <scope>",
|
|
2649
|
+
"",
|
|
2650
|
+
" ## Cleared Verticals",
|
|
2651
|
+
" | Vertical | Score | Downstream Issue |",
|
|
2652
|
+
" |----------|-------|------------------|",
|
|
2653
|
+
" | <name> | 0.73 | #<research-scope-issue> |",
|
|
2654
|
+
"",
|
|
2655
|
+
" ## Not Cleared",
|
|
2656
|
+
" | Vertical | Score | Reason |",
|
|
2657
|
+
" |----------|-------|--------|",
|
|
2658
|
+
" | <name> | 0.41 | below threshold |",
|
|
2659
|
+
"",
|
|
2660
|
+
" ## Notes",
|
|
2661
|
+
" <anything the plan author wants to preserve for future iterations>",
|
|
2662
|
+
" ```",
|
|
2663
|
+
"",
|
|
2664
|
+
"4. **Create one `research:scope` issue per cleared vertical.** This",
|
|
2665
|
+
" assumes the `research-pipeline` bundle is enabled in the consuming",
|
|
2666
|
+
" project. Each downstream issue should:",
|
|
2667
|
+
" - Carry `type:research`, `research:scope`, `priority:medium`, and",
|
|
2668
|
+
" `status:ready` labels",
|
|
2669
|
+
" - Include the research question framed for the vertical (what the",
|
|
2670
|
+
" downstream research needs to answer)",
|
|
2671
|
+
" - Cite the evaluation row that justified advancing the vertical",
|
|
2672
|
+
" - Reference the plan file path for traceability",
|
|
2673
|
+
"",
|
|
2674
|
+
"5. **Cross-link** \u2014 update the plan file's `## Cleared Verticals`",
|
|
2675
|
+
" table so each row references its newly-created `research:scope`",
|
|
2676
|
+
" issue number.",
|
|
2677
|
+
"",
|
|
2678
|
+
"6. **Commit and push** the plan file. Close the plan issue.",
|
|
2679
|
+
"",
|
|
2680
|
+
"---",
|
|
2681
|
+
"",
|
|
2682
|
+
"## Output Boundaries",
|
|
2683
|
+
"",
|
|
2684
|
+
"This agent writes **only** to:",
|
|
2685
|
+
"",
|
|
2686
|
+
"- `<CANDIDATES_DIR>/` \u2014 candidate files (Phase 1)",
|
|
2687
|
+
"- `<EVALUATIONS_DIR>/` \u2014 evaluation files (Phase 2)",
|
|
2688
|
+
"- `<PLANS_DIR>/` \u2014 plan files (Phase 3, cross-linked with downstream",
|
|
2689
|
+
" research issue numbers)",
|
|
2690
|
+
"",
|
|
2691
|
+
"The pipeline produces **candidate lists, evaluations, and plans**. It",
|
|
2692
|
+
"does not itself perform the downstream research, write industry",
|
|
2693
|
+
"profiles, or publish deliverables \u2014 those are the responsibility of",
|
|
2694
|
+
"specialized downstream agents (notably `research-analyst` from the",
|
|
2695
|
+
"`research-pipeline` bundle) that pick up the `research:scope` issues",
|
|
2696
|
+
"this pipeline creates. Keep this boundary clean so the industry",
|
|
2697
|
+
"discovery pipeline stays generic.",
|
|
2698
|
+
"",
|
|
2699
|
+
"---",
|
|
2700
|
+
"",
|
|
2701
|
+
"## Rules",
|
|
2702
|
+
"",
|
|
2703
|
+
"- **One phase per session.** Never run two phases back-to-back in a",
|
|
2704
|
+
" single session.",
|
|
2705
|
+
"- **Persist before closing.** Every phase must write its output file",
|
|
2706
|
+
" before closing its issue.",
|
|
2707
|
+
"- **Do not invent the rubric.** If no authoritative rubric is",
|
|
2708
|
+
" available, emit a scaffold and flag `status:needs-attention` \u2014 never",
|
|
2709
|
+
" silently guess weights or thresholds.",
|
|
2710
|
+
"- **Cite everything.** Every candidate, score, and pass/fail decision",
|
|
2711
|
+
" must carry at least one source citation.",
|
|
2712
|
+
"- **Produce plans, not downstream work.** Do not open profile,",
|
|
2713
|
+
" requirement, or comparison issues from this pipeline. Downstream",
|
|
2714
|
+
" research is delegated to the `research-pipeline` bundle via",
|
|
2715
|
+
" `research:scope` issues."
|
|
2716
|
+
].join("\n")
|
|
2717
|
+
};
|
|
2718
|
+
var discoverIndustriesSkill = {
|
|
2719
|
+
name: "discover-industries",
|
|
2720
|
+
description: "Kick off an industry-discovery pipeline. Creates an industry:discover issue carrying the discovery scope and dispatches Phase 1 (Discover) in the industry-discovery-analyst agent.",
|
|
2721
|
+
disableModelInvocation: true,
|
|
2722
|
+
userInvocable: true,
|
|
2723
|
+
context: "fork",
|
|
2724
|
+
agent: "industry-discovery-analyst",
|
|
2725
|
+
platforms: { cursor: { exclude: true } },
|
|
2726
|
+
instructions: [
|
|
2727
|
+
"# Discover Industries",
|
|
2728
|
+
"",
|
|
2729
|
+
"Kick off an industry-discovery pipeline. Creates an",
|
|
2730
|
+
"`industry:discover` issue carrying the discovery scope and dispatches",
|
|
2731
|
+
"Phase 1 (Discover) in the industry-discovery-analyst agent.",
|
|
2732
|
+
"",
|
|
2733
|
+
"## Usage",
|
|
2734
|
+
"",
|
|
2735
|
+
"/discover-industries <scope>",
|
|
2736
|
+
"",
|
|
2737
|
+
"Optional extensions in the issue body:",
|
|
2738
|
+
"- `sources: <list>` \u2014 authorized source categories or file paths",
|
|
2739
|
+
"- `candidates: <N>` \u2014 override the default candidate-count target",
|
|
2740
|
+
" (default range 8\u201320)",
|
|
2741
|
+
"- `slug: <kebab-case>` \u2014 override the derived discovery slug",
|
|
2742
|
+
"- `rubric: inline` \u2014 include an inline `## Fit Rubric` section to use",
|
|
2743
|
+
" for Phase 2; otherwise the agent falls back to",
|
|
2744
|
+
" `docs/project-context.md` or a scaffold",
|
|
2745
|
+
"- `threshold: <0.0\u20131.0>` \u2014 override the rubric's default threshold",
|
|
2746
|
+
"",
|
|
2747
|
+
"## Default Paths",
|
|
2748
|
+
"",
|
|
2749
|
+
"If the project has no override in `docs/project-context.md` or",
|
|
2750
|
+
"`agentConfig.rules`, outputs land under:",
|
|
2751
|
+
"",
|
|
2752
|
+
"- `docs/industries/candidates/<slug>.candidates.md`",
|
|
2753
|
+
"- `docs/industries/evaluations/<slug>.evaluation.md`",
|
|
2754
|
+
"- `docs/industries/plans/<slug>.plan.md`",
|
|
2755
|
+
"",
|
|
2756
|
+
"## Steps",
|
|
2757
|
+
"",
|
|
2758
|
+
"1. Create an `industry:discover` issue with `type:industry-discovery`,",
|
|
2759
|
+
" `priority:medium`, and `status:ready`. Body must include the",
|
|
2760
|
+
" verbatim scope, authorized sources, and any overrides.",
|
|
2761
|
+
"2. Execute Phase 1 (Discover) of the industry-discovery-analyst",
|
|
2762
|
+
" agent.",
|
|
2763
|
+
"3. Phase 1 creates an `industry:evaluate` issue, which Phase 2 follows",
|
|
2764
|
+
" with an `industry:plan` issue. Each downstream issue declares its",
|
|
2765
|
+
" `Depends on:` predecessor. Phase 3 creates one `research:scope`",
|
|
2766
|
+
" issue for each vertical that clears the threshold.",
|
|
2767
|
+
"",
|
|
2768
|
+
"## Output",
|
|
2769
|
+
"",
|
|
2770
|
+
"- A candidate file under the project's candidates directory",
|
|
2771
|
+
"- An evaluation file with per-candidate scores under the evaluations",
|
|
2772
|
+
" directory",
|
|
2773
|
+
"- A plan file under the plans directory, cross-linked to downstream",
|
|
2774
|
+
" research issues",
|
|
2775
|
+
"- One `research:scope` issue per cleared vertical \u2014 picked up by the",
|
|
2776
|
+
" `research-pipeline` bundle's `research-analyst` agent"
|
|
2777
|
+
].join("\n")
|
|
2778
|
+
};
|
|
2779
|
+
var industryDiscoveryBundle = {
|
|
2780
|
+
name: "industry-discovery",
|
|
2781
|
+
description: "Industry-vertical discovery pipeline: discover candidates, evaluate against a fit rubric, plan downstream research. Opt-in only; domain-neutral; filesystem-durable between phases.",
|
|
2782
|
+
appliesWhen: () => false,
|
|
2783
|
+
rules: [
|
|
2784
|
+
{
|
|
2785
|
+
name: "industry-discovery-workflow",
|
|
2786
|
+
description: "Describes the 3-phase industry-discovery pipeline, the industry:* label taxonomy, and the handoff to the research-pipeline bundle.",
|
|
2787
|
+
scope: AGENT_RULE_SCOPE.ALWAYS,
|
|
2788
|
+
content: [
|
|
2789
|
+
"# Industry Discovery Workflow",
|
|
2790
|
+
"",
|
|
2791
|
+
"Use `/discover-industries <scope>` to kick off an industry-vertical",
|
|
2792
|
+
"discovery pipeline. The pipeline runs in 3 phases \u2014 discover,",
|
|
2793
|
+
"evaluate, plan \u2014 each tracked by its own GitHub issue labeled",
|
|
2794
|
+
"`industry:discover`, `industry:evaluate`, or `industry:plan`. All",
|
|
2795
|
+
"issues carry `type:industry-discovery`.",
|
|
2796
|
+
"",
|
|
2797
|
+
"The pipeline produces **candidate lists, evaluations, and plans**.",
|
|
2798
|
+
"Verticals that clear the configured fit threshold are handed off",
|
|
2799
|
+
"to the `research-pipeline` bundle via `research:scope` issues for",
|
|
2800
|
+
"downstream deliverables.",
|
|
2801
|
+
"",
|
|
2802
|
+
"See the `industry-discovery-analyst` agent definition for full",
|
|
2803
|
+
"workflow details, default paths, the fit rubric convention, and",
|
|
2804
|
+
"phase-by-phase instructions."
|
|
2805
|
+
].join("\n"),
|
|
2806
|
+
platforms: {
|
|
2807
|
+
cursor: { exclude: true }
|
|
2808
|
+
},
|
|
2809
|
+
tags: ["workflow"]
|
|
2810
|
+
}
|
|
2811
|
+
],
|
|
2812
|
+
skills: [discoverIndustriesSkill],
|
|
2813
|
+
subAgents: [industryDiscoveryAnalystSubAgent],
|
|
2814
|
+
labels: [
|
|
2815
|
+
{
|
|
2816
|
+
name: "type:industry-discovery",
|
|
2817
|
+
color: "1D76DB",
|
|
2818
|
+
description: "Work that discovers, evaluates, or plans research on industry verticals"
|
|
2819
|
+
},
|
|
2820
|
+
{
|
|
2821
|
+
name: "industry:discover",
|
|
2822
|
+
color: "C5DEF5",
|
|
2823
|
+
description: "Phase 1: enumerate candidate industry verticals into a bounded candidate file"
|
|
2824
|
+
},
|
|
2825
|
+
{
|
|
2826
|
+
name: "industry:evaluate",
|
|
2827
|
+
color: "BFDADC",
|
|
2828
|
+
description: "Phase 2: score candidate verticals against the configured fit rubric"
|
|
2829
|
+
},
|
|
2830
|
+
{
|
|
2831
|
+
name: "industry:plan",
|
|
2832
|
+
color: "D4C5F9",
|
|
2833
|
+
description: "Phase 3: plan downstream research for verticals that clear the fit threshold"
|
|
2834
|
+
}
|
|
2835
|
+
]
|
|
2836
|
+
};
|
|
2837
|
+
|
|
1592
2838
|
// src/agent/bundles/jest.ts
|
|
1593
2839
|
var jestBundle = {
|
|
1594
2840
|
name: "jest",
|
|
@@ -6263,7 +7509,9 @@ var BUILT_IN_BUNDLES = [
|
|
|
6263
7509
|
researchPipelineBundle,
|
|
6264
7510
|
companyProfileBundle,
|
|
6265
7511
|
peopleProfileBundle,
|
|
6266
|
-
softwareProfileBundle
|
|
7512
|
+
softwareProfileBundle,
|
|
7513
|
+
industryDiscoveryBundle,
|
|
7514
|
+
bcmWriterBundle
|
|
6267
7515
|
];
|
|
6268
7516
|
|
|
6269
7517
|
// src/agent/bundles/scope.ts
|
|
@@ -9783,9 +11031,11 @@ var TypeScriptConfig = class extends import_projen22.Component {
|
|
|
9783
11031
|
addSyncLabelsWorkflow,
|
|
9784
11032
|
awsCdkBundle,
|
|
9785
11033
|
baseBundle,
|
|
11034
|
+
bcmWriterBundle,
|
|
9786
11035
|
companyProfileBundle,
|
|
9787
11036
|
getLatestEligibleVersion,
|
|
9788
11037
|
githubWorkflowBundle,
|
|
11038
|
+
industryDiscoveryBundle,
|
|
9789
11039
|
jestBundle,
|
|
9790
11040
|
meetingAnalysisBundle,
|
|
9791
11041
|
orchestratorBundle,
|