@codedrifters/configulator 0.0.261 → 0.0.263
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 +61 -17
- package/lib/index.d.ts +61 -17
- package/lib/index.js +514 -102
- package/lib/index.js.map +1 -1
- package/lib/index.mjs +514 -102
- package/lib/index.mjs.map +1 -1
- package/package.json +1 -1
package/lib/index.mjs
CHANGED
|
@@ -5187,6 +5187,86 @@ var meetingAnalystSubAgent = {
|
|
|
5187
5187
|
"5. **Bi-directional traceability.** Every document and issue created by",
|
|
5188
5188
|
" this pipeline must link back to the meeting source, and the meeting",
|
|
5189
5189
|
" source documents must link forward to everything created from them.",
|
|
5190
|
+
"6. **Respect meeting type and areas.** Read the `meeting_type` and",
|
|
5191
|
+
" `areas` values from the meeting frontmatter before starting Phase 1.",
|
|
5192
|
+
" Apply the type-specific rules from the **Meeting type handling**",
|
|
5193
|
+
" table (phases 1\u20132) and the area-filtered routing rules from the",
|
|
5194
|
+
" **Areas filtering** table (phase 4).",
|
|
5195
|
+
"",
|
|
5196
|
+
"---",
|
|
5197
|
+
"",
|
|
5198
|
+
"## Meeting type handling",
|
|
5199
|
+
"",
|
|
5200
|
+
"Meeting frontmatter is expected to carry a `meeting_type` field whose",
|
|
5201
|
+
"value is one of the project's concrete meeting-type `id`s (declared",
|
|
5202
|
+
"via `AgentConfigOptions.meetings.meetingTypes`). Each concrete `id`",
|
|
5203
|
+
"maps to one of six generic **meeting kinds** that drive type-specific",
|
|
5204
|
+
"extraction rules:",
|
|
5205
|
+
"",
|
|
5206
|
+
"| Kind | Primary outputs | Phase-1/2 rules |",
|
|
5207
|
+
"|------|-----------------|-----------------|",
|
|
5208
|
+
"| `planning` | Sprint/plan updates, task issues, requirement drafts | Extract every task assignment. Phase 4 updates the active sprint-plan doc directly and creates one issue per assigned task. |",
|
|
5209
|
+
"| `review` | Retro notes, follow-up issues, status updates, requirement revisions | Mark completed tasks in the active sprint-plan doc. Capture retrospective learnings inside the meeting notes \u2014 do not spawn a separate retro document. |",
|
|
5210
|
+
"| `brainstorm` | Future-feature candidates, research topics, very few Firm decisions | Lower the bar for Open Questions. Do **not** create requirement or ADR issues from brainstorm output unless the item is explicitly marked **Firm**. Prefer research/discovery issues for promising ideas. |",
|
|
5211
|
+
"| `standup` | Action items, blockers, status updates | Do not produce requirement, ADR, or BDR drafts. Phase 3 (Draft) is almost always skipped. Focus on action-item issues and sprint-plan status updates. |",
|
|
5212
|
+
"| `external` | Customer/competitive intel, people/company profiles, lead capture | Default every attendee outside the team into **People of Interest**. Default every organization mentioned into **Companies of Interest** (signal threshold still applies). Capture stated customer pain points as candidate **BR** (business requirements), not FR. |",
|
|
5213
|
+
"| `other` | General meeting extraction | Apply the default workflow with no type-specific overrides. |",
|
|
5214
|
+
"",
|
|
5215
|
+
"**How to resolve the kind:**",
|
|
5216
|
+
"",
|
|
5217
|
+
"1. Read `meeting_type` from the frontmatter.",
|
|
5218
|
+
"2. Look up the matching `id` in the project's **Recognized meeting",
|
|
5219
|
+
" types** table (rendered below when `meetingTypes` is declared).",
|
|
5220
|
+
"3. Use the `Kind` column value. If the table is absent, the `id` is",
|
|
5221
|
+
" unknown, or the `Kind` column is `\u2014`, fall back to `other`.",
|
|
5222
|
+
"4. Apply the rules in the row above **in addition to** the normal",
|
|
5223
|
+
" phase workflow \u2014 never as a replacement.",
|
|
5224
|
+
"",
|
|
5225
|
+
"If `meeting_type` is missing, invalid, or the declared `id` is not in",
|
|
5226
|
+
"the project's table, note it in the extraction's Open Questions and",
|
|
5227
|
+
"proceed with the default workflow (treat as `other`).",
|
|
5228
|
+
"",
|
|
5229
|
+
"## Areas filtering",
|
|
5230
|
+
"",
|
|
5231
|
+
"Meeting frontmatter may carry an `areas: [...]` list whose values",
|
|
5232
|
+
"match `id`s from the project's **Area \u2192 doc-root mapping** table",
|
|
5233
|
+
"(declared via `AgentConfigOptions.meetings.meetingAreas`). The list",
|
|
5234
|
+
"scopes phase-4 direct edits and cross-references to the doc-root",
|
|
5235
|
+
"sub-folders registered for those areas. A given area's effective",
|
|
5236
|
+
"path resolves as `<docsRoot>/<docRoot>` \u2014 `docsRoot` comes from",
|
|
5237
|
+
"`AgentPathsConfig.docsRoot`; `docRoot` is the sub-folder shown in",
|
|
5238
|
+
"the **Area \u2192 doc-root mapping** table.",
|
|
5239
|
+
"",
|
|
5240
|
+
"**Gating contract (phase 4 only):**",
|
|
5241
|
+
"",
|
|
5242
|
+
"- **Scoped in:** direct edits and cross-reference stubs under the",
|
|
5243
|
+
" `docRoot` of every `id` present in the meeting's `areas` list.",
|
|
5244
|
+
"- **Scoped out:** direct edits to any doc-root sub-folder that is",
|
|
5245
|
+
" declared in the project's area map but whose `id` is **not** in",
|
|
5246
|
+
" the meeting's `areas`. For those out-of-scope areas, create",
|
|
5247
|
+
" follow-up issues instead of editing the doc directly.",
|
|
5248
|
+
"- **Not gated:** issue creation (requirements, ADRs, profiles,",
|
|
5249
|
+
" research) is always in scope regardless of areas.",
|
|
5250
|
+
"",
|
|
5251
|
+
"**Resolution rules:**",
|
|
5252
|
+
"",
|
|
5253
|
+
"1. If the meeting's `areas` frontmatter is missing or empty **and**",
|
|
5254
|
+
" the project has declared a non-empty `meetingAreas` map, no",
|
|
5255
|
+
" doc-root sub-folder is gated in: direct edits to any declared",
|
|
5256
|
+
" `docRoot` sub-folder are out-of-scope and become follow-up issues",
|
|
5257
|
+
" per step 6. Only the default meetings root (`meetingsRoot`)",
|
|
5258
|
+
" remains editable.",
|
|
5259
|
+
"2. If `areas` lists an `id` that is not in the project's area map,",
|
|
5260
|
+
" note it in the extraction's Open Questions and treat the unknown",
|
|
5261
|
+
" `id` as absent. Do **not** invent a doc-root path for it.",
|
|
5262
|
+
"3. Out-of-scope direct edits become `type:docs` follow-up issues on",
|
|
5263
|
+
" phase 4 step 6, with the area noted in the issue body.",
|
|
5264
|
+
"",
|
|
5265
|
+
"When the project has **not** declared any `meetingAreas` at all,",
|
|
5266
|
+
"this section applies degenerately \u2014 no areas are gated, no",
|
|
5267
|
+
"follow-up issues are synthesized for missing areas, and phase-4",
|
|
5268
|
+
"direct edits follow the default workflow (step 6 edits any doc",
|
|
5269
|
+
"flagged as Firm, unrestricted by `docRoot`).",
|
|
5190
5270
|
"",
|
|
5191
5271
|
"---",
|
|
5192
5272
|
"",
|
|
@@ -5244,7 +5324,13 @@ var meetingAnalystSubAgent = {
|
|
|
5244
5324
|
"",
|
|
5245
5325
|
"### Steps",
|
|
5246
5326
|
"",
|
|
5247
|
-
"1. Read the transcript file specified in the issue body.",
|
|
5327
|
+
"1. Read the transcript file specified in the issue body. Parse the",
|
|
5328
|
+
" meeting-note frontmatter first, capturing `meeting_type` and",
|
|
5329
|
+
" `areas`. Resolve `meeting_type` to a kind using the **Meeting type",
|
|
5330
|
+
" handling** table; note the resolved kind in the extraction",
|
|
5331
|
+
" frontmatter. If `meeting_type` is missing or not in the project's",
|
|
5332
|
+
" Recognized meeting types table, treat it as `other` and flag it",
|
|
5333
|
+
" in Open Questions.",
|
|
5248
5334
|
"2. Identify and categorize content into these buckets:",
|
|
5249
5335
|
"",
|
|
5250
5336
|
" | Bucket | What to look for |",
|
|
@@ -5270,14 +5356,32 @@ var meetingAnalystSubAgent = {
|
|
|
5270
5356
|
" - Companies of Interest (with type and context)",
|
|
5271
5357
|
" - Strategic / Product Direction",
|
|
5272
5358
|
"",
|
|
5273
|
-
"
|
|
5359
|
+
" Carry `meeting_type`, the resolved `meeting_kind`, and `areas`",
|
|
5360
|
+
" into the extraction frontmatter so downstream phases can gate",
|
|
5361
|
+
" behaviour without re-parsing the meeting note.",
|
|
5362
|
+
"",
|
|
5363
|
+
"4. **Apply type-specific rules.** Consult the **Meeting type handling**",
|
|
5364
|
+
" table for the resolved kind and apply its phase-1 rules in",
|
|
5365
|
+
" addition to the default extraction above. Examples:",
|
|
5366
|
+
" - `standup`: skip requirement, ADR, and BDR extraction; focus on",
|
|
5367
|
+
" action items and status.",
|
|
5368
|
+
" - `brainstorm`: emphasize Open Questions and Future Features.",
|
|
5369
|
+
" Only mark decisions as Firm when the transcript is unambiguous.",
|
|
5370
|
+
" - `external`: default attendees outside the team into People of",
|
|
5371
|
+
" Interest; default organizations mentioned into Companies of",
|
|
5372
|
+
" Interest (signal threshold still applies); capture customer",
|
|
5373
|
+
" pain points as candidate BR (not FR).",
|
|
5374
|
+
"",
|
|
5375
|
+
"5. **Create downstream phase issues** using `gh issue create`:",
|
|
5274
5376
|
" - Always create a `meeting:notes` issue (blocked on this extract issue)",
|
|
5275
5377
|
" - If requirements OR decisions/ADRs identified, create a `meeting:draft` issue",
|
|
5276
|
-
" (blocked on the notes issue)",
|
|
5378
|
+
" (blocked on the notes issue). For kind `standup`, skip the",
|
|
5379
|
+
" `meeting:draft` issue \u2014 standup meetings almost never produce",
|
|
5380
|
+
" formal drafts.",
|
|
5277
5381
|
" - Always create a `meeting:link` issue \u2014 blocked on the draft issue if one",
|
|
5278
5382
|
" was created, otherwise blocked on the notes issue",
|
|
5279
5383
|
"",
|
|
5280
|
-
"
|
|
5384
|
+
"6. Commit, push, and close the extract issue.",
|
|
5281
5385
|
"",
|
|
5282
5386
|
"---",
|
|
5283
5387
|
"",
|
|
@@ -5334,18 +5438,38 @@ var meetingAnalystSubAgent = {
|
|
|
5334
5438
|
"### Steps",
|
|
5335
5439
|
"",
|
|
5336
5440
|
"1. Read the drafts from Phase 3 (if they exist) and the extraction from Phase 1.",
|
|
5441
|
+
" Re-read the extraction frontmatter for `meeting_kind` and `areas`,",
|
|
5442
|
+
" then build the area-gate: the set of `docRoot` sub-folders that",
|
|
5443
|
+
" are in scope for direct edits on this meeting. Apply the rules in",
|
|
5444
|
+
" the **Areas filtering** section above.",
|
|
5337
5445
|
"2. Create requirement issues using `gh issue create` with appropriate labels.",
|
|
5338
5446
|
" Include a `## Traceability` section in each issue body linking back to",
|
|
5339
|
-
" the source meeting and extraction file.",
|
|
5447
|
+
" the source meeting and extraction file. Issue creation is **not**",
|
|
5448
|
+
" gated by areas.",
|
|
5340
5449
|
"3. Create ADR issues if technology decisions need formal records.",
|
|
5341
|
-
" Include a `## Traceability` section in each.",
|
|
5450
|
+
" Include a `## Traceability` section in each. Not gated by areas.",
|
|
5342
5451
|
"4. Create action item issues for tasks that are not document-related.",
|
|
5343
|
-
" Include a `## Traceability` section in each.",
|
|
5344
|
-
"5. Cross-reference the meeting in any existing documents that were
|
|
5345
|
-
"
|
|
5346
|
-
"
|
|
5452
|
+
" Include a `## Traceability` section in each. Not gated by areas.",
|
|
5453
|
+
"5. Cross-reference the meeting in any existing documents that were",
|
|
5454
|
+
" discussed **and that live under an in-scope `docRoot`**. For",
|
|
5455
|
+
" discussed documents under an out-of-scope `docRoot`, open a",
|
|
5456
|
+
" follow-up `type:docs` issue instead of editing the doc directly.",
|
|
5457
|
+
"6. Apply direct product/strategy doc updates for items flagged as",
|
|
5458
|
+
" **Firm** confidence. When the project declares `meetingAreas`,",
|
|
5459
|
+
" gate these edits: only apply them when the target path lies",
|
|
5460
|
+
" under an in-scope `docRoot`, and for Firm items targeting an",
|
|
5461
|
+
" out-of-scope `docRoot` open a follow-up `type:docs` issue",
|
|
5462
|
+
" noting the area and the target path. When the project has not",
|
|
5463
|
+
" declared any `meetingAreas`, apply Firm updates unrestricted",
|
|
5464
|
+
" (the degenerate case above). For the kind `planning`, also",
|
|
5465
|
+
" update the active sprint-plan doc directly (when the",
|
|
5466
|
+
" sprint-plan doc's area is in-scope, or always when no",
|
|
5467
|
+
" `meetingAreas` are declared); for the kind `review`, mark",
|
|
5468
|
+
" completed tasks in that same doc.",
|
|
5347
5469
|
"7. **Update the extraction file** with a `## Downstream Artifacts` section",
|
|
5348
|
-
" listing every issue and document created from this meeting.",
|
|
5470
|
+
" listing every issue and document created from this meeting. Note",
|
|
5471
|
+
" any items that were deferred to follow-up issues because of the",
|
|
5472
|
+
" area gate.",
|
|
5349
5473
|
"8. **Update the meeting notes** with a `## Related Issues` section listing",
|
|
5350
5474
|
" all issues created from this meeting.",
|
|
5351
5475
|
"9. Comment on the parent extract issue with a summary linking to all",
|
|
@@ -5429,7 +5553,17 @@ var meetingAnalysisBundle = {
|
|
|
5429
5553
|
"Use `/process-meeting <path>` to process a meeting transcript through a",
|
|
5430
5554
|
"4-phase pipeline (extract \u2192 notes \u2192 draft \u2192 link). Each phase runs as a",
|
|
5431
5555
|
"separate agent session tracked by a GitHub issue with a `meeting:*` label.",
|
|
5432
|
-
"See the `meeting-analyst` agent definition for full workflow details."
|
|
5556
|
+
"See the `meeting-analyst` agent definition for full workflow details.",
|
|
5557
|
+
"",
|
|
5558
|
+
"Meeting notes may declare a `meeting_type` (one of the project's",
|
|
5559
|
+
"recognized types) and an `areas: [...]` list. The `meeting_type`",
|
|
5560
|
+
"resolves to a generic kind \u2014 `planning` / `review` / `brainstorm` /",
|
|
5561
|
+
"`standup` / `external` / `other` \u2014 that drives type-specific",
|
|
5562
|
+
"extraction rules in phases 1\u20132. The `areas` list scopes phase-4",
|
|
5563
|
+
"direct edits to the doc-root sub-folders declared in the project's",
|
|
5564
|
+
"**Area \u2192 doc-root mapping** table. When both fields are absent",
|
|
5565
|
+
"the pipeline falls back to the default workflow (kind `other`,",
|
|
5566
|
+
"no area gating)."
|
|
5433
5567
|
].join("\n"),
|
|
5434
5568
|
platforms: {
|
|
5435
5569
|
cursor: { exclude: true }
|
|
@@ -14358,7 +14492,7 @@ var slackBundle = {
|
|
|
14358
14492
|
// src/agent/bundles/software-profile.ts
|
|
14359
14493
|
var softwareProfileAnalystSubAgent = {
|
|
14360
14494
|
name: "software-profile-analyst",
|
|
14361
|
-
description: "Researches a software product (competitor, adjacent, incumbent, enabler, infrastructure, or ecosystem-tool) from public sources, produces a structured markdown profile,
|
|
14495
|
+
description: "Researches a software product (competitor, adjacent, incumbent, enabler, infrastructure, or ecosystem-tool) from public sources, produces a structured markdown profile, contributes rows to a shared feature matrix ranked against configurable segment-importance weights, maps features back to the BCM capability model and flags unmapped features, then enqueues downstream `bcm:outline`, `company:research`, and `people:research` issues for new sub-capabilities, the vendor company, and primary-attribution founders/leaders surfaced during profiling. One product per session, tracked by software:* GitHub issue labels.",
|
|
14362
14496
|
model: AGENT_MODEL.POWERFUL,
|
|
14363
14497
|
maxTurns: 80,
|
|
14364
14498
|
platforms: { cursor: { exclude: true } },
|
|
@@ -14368,8 +14502,9 @@ var softwareProfileAnalystSubAgent = {
|
|
|
14368
14502
|
"You research a single software product from public sources and write",
|
|
14369
14503
|
"a structured markdown profile. Each profile cycle runs across a small",
|
|
14370
14504
|
"sequence of GitHub issues \u2014 one per phase \u2014 and produces a single",
|
|
14371
|
-
"profile file on disk, a set of feature-matrix rows,
|
|
14372
|
-
"follow-up research
|
|
14505
|
+
"profile file on disk, a set of feature-matrix rows, a back-mapping",
|
|
14506
|
+
"onto the BCM capability model, and optional follow-up research",
|
|
14507
|
+
"issues for adjacent products.",
|
|
14373
14508
|
"",
|
|
14374
14509
|
"This agent is **domain-neutral**. It makes no assumptions about what",
|
|
14375
14510
|
"the consuming project sells, which industry it serves, or which",
|
|
@@ -14414,6 +14549,14 @@ var softwareProfileAnalystSubAgent = {
|
|
|
14414
14549
|
" weights belong in `docs/src/content/docs/project-context.md` (or an override",
|
|
14415
14550
|
" passed in the issue body). This agent reads them; it never",
|
|
14416
14551
|
" invents them.",
|
|
14552
|
+
"8. **Map back to the capability model.** The BCM capability model is",
|
|
14553
|
+
" the single source of truth for what the business does. Every",
|
|
14554
|
+
" feature on every profile is mapped to the owning capability in the",
|
|
14555
|
+
" BCM tree during the map phase. Features that match nothing in the",
|
|
14556
|
+
" tree are candidates for new BCM sub-capabilities \u2014 they are",
|
|
14557
|
+
" flagged and handed off to the `bcm-writer` bundle via",
|
|
14558
|
+
" `bcm:outline` issues. This agent never authors BCM documents",
|
|
14559
|
+
" itself.",
|
|
14417
14560
|
"",
|
|
14418
14561
|
"---",
|
|
14419
14562
|
"",
|
|
@@ -14479,14 +14622,15 @@ var softwareProfileAnalystSubAgent = {
|
|
|
14479
14622
|
"## State Machine Overview",
|
|
14480
14623
|
"",
|
|
14481
14624
|
"```",
|
|
14482
|
-
"\u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\
|
|
14483
|
-
"\
|
|
14484
|
-
"\
|
|
14485
|
-
"\u2502
|
|
14486
|
-
"\
|
|
14487
|
-
"\
|
|
14488
|
-
"\
|
|
14489
|
-
"\
|
|
14625
|
+
"\u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510",
|
|
14626
|
+
"\u25021.RESEARCH\u2502\u2500\u25B6\u25022.PROFILE \u2502\u2500\u25B6\u25023.MATRIX \u2502\u2500\u25B6\u25024.MAP \u2502\u2500\u25B6\u25025.FOLLOWUP\u2502",
|
|
14627
|
+
"\u2502Collect \u2502 \u2502Write the \u2502 \u2502Extract \u2502 \u2502Map each \u2502 \u2502Enqueue \u2502",
|
|
14628
|
+
"\u2502public \u2502 \u2502structured\u2502 \u2502feature \u2502 \u2502feature to\u2502 \u2502research \u2502",
|
|
14629
|
+
"\u2502sources \u2502 \u2502markdown \u2502 \u2502rows and \u2502 \u2502BCM \u2502 \u2502for \u2502",
|
|
14630
|
+
"\u2502into \u2502 \u2502profile to\u2502 \u2502score \u2502 \u2502capability\u2502 \u2502adjacent \u2502",
|
|
14631
|
+
"\u2502bounded \u2502 \u2502<PROFILES>\u2502 \u2502against \u2502 \u2502and flag \u2502 \u2502products \u2502",
|
|
14632
|
+
"\u2502notes file\u2502 \u2502 \u2502 \u2502weights \u2502 \u2502gaps \u2502 \u2502surfaced \u2502",
|
|
14633
|
+
"\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518",
|
|
14490
14634
|
"```",
|
|
14491
14635
|
"",
|
|
14492
14636
|
"**Issue labels encode the phase:**",
|
|
@@ -14495,20 +14639,22 @@ var softwareProfileAnalystSubAgent = {
|
|
|
14495
14639
|
"|-------|-------|-------------|",
|
|
14496
14640
|
"| `software:research` | 1. Research | Gather public sources. Write a bounded research-notes file. Create the profile issue. |",
|
|
14497
14641
|
"| `software:profile` | 2. Profile | Read the research notes. Write the structured profile to `<PROFILES_DIR>`. Create the matrix issue. |",
|
|
14498
|
-
"| `software:matrix` | 3. Matrix | Read the profile. Extract feature rows into `<MATRIX_FILE>`. Score against segment weights. Create the
|
|
14499
|
-
"| `software:
|
|
14642
|
+
"| `software:matrix` | 3. Matrix | Read the profile. Extract feature rows into `<MATRIX_FILE>`. Score against segment weights. Create the map issue. |",
|
|
14643
|
+
"| `software:map` | 4. Map | Read the profile and matrix rows. Map each feature to the owning BCM capability. Write the mapping back onto the profile. Enqueue `bcm:outline` follow-ups for unmapped features above the configured threshold. Create the followup issue. |",
|
|
14644
|
+
"| `software:followup` | 5. Followup | Read the profile. Enqueue software-research issues for adjacent products surfaced in the profile. |",
|
|
14500
14645
|
"",
|
|
14501
14646
|
"All issues also carry `type:software-profile` and a `status:*` label.",
|
|
14502
14647
|
"",
|
|
14503
14648
|
"**Issue count per product cycle:** 1 research + 1 profile + 1 matrix +",
|
|
14504
|
-
"0\u20131 followup = **
|
|
14505
|
-
"the profile did not surface any adjacent product worth
|
|
14649
|
+
"1 map + 0\u20131 followup = **4\u20135 sessions**. The followup phase is",
|
|
14650
|
+
"skipped when the profile did not surface any adjacent product worth",
|
|
14651
|
+
"researching.",
|
|
14506
14652
|
"",
|
|
14507
14653
|
"**Shortened paths:**",
|
|
14508
14654
|
"- Research phase determines the product is out of scope (not",
|
|
14509
14655
|
" relevant, insufficient public material) \u2192 research issue closes",
|
|
14510
14656
|
" with a justification and no downstream issues are created \u2192 **1 session**.",
|
|
14511
|
-
"- Narrow product with no adjacent candidates \u2192 **
|
|
14657
|
+
"- Narrow product with no adjacent candidates \u2192 **4 sessions**.",
|
|
14512
14658
|
"",
|
|
14513
14659
|
"---",
|
|
14514
14660
|
"",
|
|
@@ -14527,11 +14673,25 @@ var softwareProfileAnalystSubAgent = {
|
|
|
14527
14673
|
"| `<PRODUCT_SLUG>` | Short kebab-case slug identifying the product | derived from the product name |",
|
|
14528
14674
|
"| `<COMPANY_PROFILES_DIR>` | Where existing company profiles live (for duplicate detection during followup) | `docs/companies/profiles/` |",
|
|
14529
14675
|
"| `<PEOPLE_PROFILES_DIR>` | Where existing people profiles live (for duplicate detection during followup) | `docs/people/profiles/` |",
|
|
14676
|
+
`| \`<BCM_DOC_ROOT>\` | Root folder for BCM capability-model documents (used by Phase 4 to locate capabilities) | \`${DEFAULT_AGENT_PATHS.bcmRoot}/\` |`,
|
|
14677
|
+
"| `<BCM_CAPABILITY_MAP>` | Capability-map file that lists the L1/L2/L3 hierarchy | `<BCM_DOC_ROOT>/capability-map.md` |",
|
|
14678
|
+
"| `<UNMAPPED_THRESHOLD>` | Minimum number of unmapped features on a single profile that triggers a `bcm:outline` follow-up for that feature cluster | `1` (every unmapped feature triggers a `bcm:outline`) |",
|
|
14530
14679
|
"",
|
|
14531
14680
|
"If `docs/src/content/docs/project-context.md` specifies a different software-research",
|
|
14532
14681
|
"tree (for example by reusing the research-pipeline deliverables",
|
|
14533
14682
|
"folder), prefer that. Otherwise fall back to the defaults above.",
|
|
14534
14683
|
"",
|
|
14684
|
+
"The `<BCM_DOC_ROOT>` default above is sourced from configulator's",
|
|
14685
|
+
"`DEFAULT_AGENT_PATHS.bcmRoot`. If the consuming project's capability",
|
|
14686
|
+
"model lives somewhere else, pass an override in the invoking issue",
|
|
14687
|
+
"body or extend this rule in `agentConfig.rules` \u2014 reading",
|
|
14688
|
+
"`agentConfig.paths.bcmRoot` directly is not currently wired through",
|
|
14689
|
+
"to rule content at synth time. Override `<UNMAPPED_THRESHOLD>` the",
|
|
14690
|
+
"same way when the default (one `bcm:outline` per unmapped feature)",
|
|
14691
|
+
"is too noisy \u2014 for example, raise it to `3` to require at least",
|
|
14692
|
+
"three unmapped features on a single profile before any follow-ups",
|
|
14693
|
+
"are filed.",
|
|
14694
|
+
"",
|
|
14535
14695
|
"---",
|
|
14536
14696
|
"",
|
|
14537
14697
|
"## Agent Loop",
|
|
@@ -14540,7 +14700,7 @@ var softwareProfileAnalystSubAgent = {
|
|
|
14540
14700
|
"",
|
|
14541
14701
|
"1. Claim one open `type:software-profile` issue using phase priority:",
|
|
14542
14702
|
" `software:research` > `software:profile` > `software:matrix` >",
|
|
14543
|
-
" `software:followup`.",
|
|
14703
|
+
" `software:map` > `software:followup`.",
|
|
14544
14704
|
"2. Transition `status:ready` \u2192 `status:in-progress` and create the",
|
|
14545
14705
|
" branch per your project's branch-naming convention.",
|
|
14546
14706
|
"3. Execute the phase handler that matches the issue's `software:*`",
|
|
@@ -14675,7 +14835,12 @@ var softwareProfileAnalystSubAgent = {
|
|
|
14675
14835
|
"",
|
|
14676
14836
|
" ## Features",
|
|
14677
14837
|
" <grouped bullet list of notable features, each cited. These become",
|
|
14678
|
-
" the rows in the feature matrix during Phase 3
|
|
14838
|
+
" the rows in the feature matrix during Phase 3 and the rows of the",
|
|
14839
|
+
" capability mapping during Phase 4.>",
|
|
14840
|
+
"",
|
|
14841
|
+
" ## Capability Mapping",
|
|
14842
|
+
" _To be filled in during Phase 4 (Map). Leave as",
|
|
14843
|
+
" `_Pending capability mapping \u2014 filled in Phase 4._` until then._",
|
|
14679
14844
|
"",
|
|
14680
14845
|
" ## Technology Signals",
|
|
14681
14846
|
" <stack hints from docs, integrations, and public engineering",
|
|
@@ -14781,18 +14946,141 @@ var softwareProfileAnalystSubAgent = {
|
|
|
14781
14946
|
"",
|
|
14782
14947
|
"5. **Update the matrix front-matter** (`updated: YYYY-MM-DD`).",
|
|
14783
14948
|
"",
|
|
14784
|
-
"6. **
|
|
14785
|
-
" `
|
|
14786
|
-
"
|
|
14787
|
-
"
|
|
14788
|
-
"
|
|
14949
|
+
"6. **Create the `software:map` issue** with",
|
|
14950
|
+
" `Depends on: #<matrix-issue>`. Its body references the profile",
|
|
14951
|
+
" path, the matrix file path, the BCM document root",
|
|
14952
|
+
" (`<BCM_DOC_ROOT>`), the capability map file",
|
|
14953
|
+
" (`<BCM_CAPABILITY_MAP>` if it exists), and the unmapped-feature",
|
|
14954
|
+
" threshold (`<UNMAPPED_THRESHOLD>`). The map phase always runs \u2014",
|
|
14955
|
+
" every profile is mapped back to the capability model regardless",
|
|
14956
|
+
" of whether any adjacent products were surfaced.",
|
|
14789
14957
|
"",
|
|
14790
14958
|
"7. **Commit and push** the matrix file (and any profile updates).",
|
|
14791
14959
|
" Close the matrix issue.",
|
|
14792
14960
|
"",
|
|
14793
14961
|
"---",
|
|
14794
14962
|
"",
|
|
14795
|
-
"## Phase 4:
|
|
14963
|
+
"## Phase 4: Map (`software:map`)",
|
|
14964
|
+
"",
|
|
14965
|
+
"**Goal:** Map each feature on the profile back to the owning",
|
|
14966
|
+
"capability in the BCM capability model, write the mapping onto the",
|
|
14967
|
+
"profile, and enqueue `bcm:outline` follow-ups for features that do",
|
|
14968
|
+
"not match any existing capability.",
|
|
14969
|
+
"",
|
|
14970
|
+
"**Budget:** No new web searches. Read the profile, matrix, and BCM",
|
|
14971
|
+
"tree; write the mapping section onto the profile; open",
|
|
14972
|
+
"`bcm:outline` issues for the gaps.",
|
|
14973
|
+
"",
|
|
14974
|
+
"### Capability Mapping Format",
|
|
14975
|
+
"",
|
|
14976
|
+
"The mapping lives in the `## Capability Mapping` section of the",
|
|
14977
|
+
"profile file. It is a table with one row per feature and explicit",
|
|
14978
|
+
"evidence for each mapping decision:",
|
|
14979
|
+
"",
|
|
14980
|
+
"```markdown",
|
|
14981
|
+
"## Capability Mapping",
|
|
14982
|
+
"",
|
|
14983
|
+
"_Mapped against `<BCM_CAPABILITY_MAP>` on YYYY-MM-DD._",
|
|
14984
|
+
"",
|
|
14985
|
+
"| feature | capability (id \xB7 name) | tier | confidence | notes |",
|
|
14986
|
+
"|---------|-----------------------|------|------------|-------|",
|
|
14987
|
+
"| <feature> | <bcm-id> \xB7 <capability name> | L1/L2/L3 | high/medium/low | <evidence or rationale> |",
|
|
14988
|
+
"| <feature> | _unmapped_ | \u2014 | \u2014 | Candidate for new BCM sub-capability. Tracked in #<bcm-outline-issue> |",
|
|
14989
|
+
"```",
|
|
14990
|
+
"",
|
|
14991
|
+
"Confidence levels:",
|
|
14992
|
+
"",
|
|
14993
|
+
"- **high** \u2014 the feature's jobs-to-be-done clearly match the",
|
|
14994
|
+
" capability's definition and business object.",
|
|
14995
|
+
"- **medium** \u2014 the feature plausibly maps to the capability, but the",
|
|
14996
|
+
" match is partial (e.g. the feature covers only one facet of the",
|
|
14997
|
+
" capability, or the capability's definition is broader than the",
|
|
14998
|
+
" feature).",
|
|
14999
|
+
"- **low** \u2014 the feature overlaps the capability only tangentially.",
|
|
15000
|
+
" Prefer `_unmapped_` over a low-confidence match when the feature",
|
|
15001
|
+
" is a genuine capability gap rather than a near-miss.",
|
|
15002
|
+
"",
|
|
15003
|
+
"### Steps",
|
|
15004
|
+
"",
|
|
15005
|
+
"1. **Load the BCM tree.** Read `<BCM_CAPABILITY_MAP>` if it exists,",
|
|
15006
|
+
" otherwise walk `<BCM_DOC_ROOT>/` for capability-model documents.",
|
|
15007
|
+
" Build an in-session index of `{ id, name, tier, business_object }`",
|
|
15008
|
+
" entries. If the tree is empty (no BCM documents yet), note the",
|
|
15009
|
+
" gap in the profile's `## Risks / Open Questions`, skip the",
|
|
15010
|
+
" per-feature mapping, and mark **every** feature as a candidate",
|
|
15011
|
+
" for a new sub-capability \u2014 subject to `<UNMAPPED_THRESHOLD>`.",
|
|
15012
|
+
"",
|
|
15013
|
+
"2. **Read the profile file** and extract the `## Features` bullets.",
|
|
15014
|
+
" Each bullet is one row in the mapping table.",
|
|
15015
|
+
"",
|
|
15016
|
+
"3. **Map each feature to the best-fit capability.** Preferred",
|
|
15017
|
+
" algorithm:",
|
|
15018
|
+
" - Match against the capability's **business object** first (the",
|
|
15019
|
+
" thing the capability acts on).",
|
|
15020
|
+
" - Then match against the capability's **definition** and",
|
|
15021
|
+
" jobs-to-be-done.",
|
|
15022
|
+
" - Tie-break in favor of the most specific (deepest tier)",
|
|
15023
|
+
" capability \u2014 an L3 match beats an L2 match that covers it.",
|
|
15024
|
+
"",
|
|
15025
|
+
"4. **Record low-confidence mappings explicitly** \u2014 never hide a weak",
|
|
15026
|
+
" match behind a high-confidence label. If the best available",
|
|
15027
|
+
" match is low-confidence, mark the feature `_unmapped_` instead",
|
|
15028
|
+
" and describe the near-miss in the `notes` column.",
|
|
15029
|
+
"",
|
|
15030
|
+
"5. **Count unmapped features.** If the count meets or exceeds",
|
|
15031
|
+
" `<UNMAPPED_THRESHOLD>` (default `1`), open one `bcm:outline`",
|
|
15032
|
+
" issue per unmapped feature. The issue must carry:",
|
|
15033
|
+
"",
|
|
15034
|
+
" - `type:bcm-document`",
|
|
15035
|
+
" - `bcm:outline`",
|
|
15036
|
+
" - `priority:medium`",
|
|
15037
|
+
" - `status:ready`",
|
|
15038
|
+
"",
|
|
15039
|
+
" The issue body must include:",
|
|
15040
|
+
" - A **discovery source** line naming this software profile",
|
|
15041
|
+
" (`Discovered while mapping: <product name>`)",
|
|
15042
|
+
" - A link to the software profile path",
|
|
15043
|
+
" (`Software profile: <PROFILES_DIR>/<PRODUCT_SLUG>.md`)",
|
|
15044
|
+
" - The feature name, its one-line description from the profile,",
|
|
15045
|
+
" and a candidate capability name framed as a noun (BIZBOK-aligned)",
|
|
15046
|
+
" - Enough identifying metadata that the `bcm-writer` agent can",
|
|
15047
|
+
" begin the outline phase without revisiting this software",
|
|
15048
|
+
" profile",
|
|
15049
|
+
"",
|
|
15050
|
+
"6. **Avoid duplicate `bcm:outline` issues.** Before opening one,",
|
|
15051
|
+
" scan `<BCM_DOC_ROOT>/` for an existing capability that covers",
|
|
15052
|
+
" the feature (in case the tree grew between the matrix and map",
|
|
15053
|
+
" phases) and scan open issues carrying `bcm:outline` so this",
|
|
15054
|
+
" phase never re-queues a capability that is already being",
|
|
15055
|
+
" outlined. If a match is found, reuse it as a cross-reference in",
|
|
15056
|
+
" the mapping table instead of opening a new issue.",
|
|
15057
|
+
"",
|
|
15058
|
+
"7. **Write the `## Capability Mapping` section** back onto the",
|
|
15059
|
+
" profile file, replacing the `_Pending capability mapping \u2014 filled",
|
|
15060
|
+
" in Phase 4._` placeholder. Preserve every other section of the",
|
|
15061
|
+
" profile verbatim \u2014 this phase only rewrites the mapping section.",
|
|
15062
|
+
"",
|
|
15063
|
+
"8. **Create the `software:followup` issue** with",
|
|
15064
|
+
" `Depends on: #<map-issue>`. Its body references the profile path",
|
|
15065
|
+
" and lists any adjacent products the profile's Follow-up",
|
|
15066
|
+
" Candidates section identified. Skip creating the followup issue",
|
|
15067
|
+
" only when the profile lists zero adjacent products, zero",
|
|
15068
|
+
" primary-attribution people, and the vendor already has a",
|
|
15069
|
+
" company profile \u2014 note the skip in the map issue's closing",
|
|
15070
|
+
" comment.",
|
|
15071
|
+
"",
|
|
15072
|
+
"9. **Assume the peer is present.** This phase assumes the",
|
|
15073
|
+
" `bcm-writer` bundle is enabled in the consuming project. If the",
|
|
15074
|
+
" bundle has been disabled, flag the map issue with",
|
|
15075
|
+
" `status:needs-attention` and list the unmapped features that",
|
|
15076
|
+
" could not be routed \u2014 never invent an alternative label",
|
|
15077
|
+
" taxonomy.",
|
|
15078
|
+
"",
|
|
15079
|
+
"10. **Commit and push** the updated profile. Close the map issue.",
|
|
15080
|
+
"",
|
|
15081
|
+
"---",
|
|
15082
|
+
"",
|
|
15083
|
+
"## Phase 5: Followup (`software:followup`)",
|
|
14796
15084
|
"",
|
|
14797
15085
|
"**Goal:** Create downstream research issues for the adjacent products,",
|
|
14798
15086
|
"vendor company, and primary-attribution people surfaced in the",
|
|
@@ -14912,10 +15200,15 @@ var softwareProfileAnalystSubAgent = {
|
|
|
14912
15200
|
"",
|
|
14913
15201
|
"- `<NOTES_DIR>/` \u2014 research-notes files (Phase 1)",
|
|
14914
15202
|
"- `<PROFILES_DIR>/` \u2014 software profiles (Phase 2, updated in later",
|
|
14915
|
-
" phases)",
|
|
15203
|
+
" phases including the `## Capability Mapping` section in Phase 4)",
|
|
14916
15204
|
"- `<MATRIX_FILE>` \u2014 shared feature matrix (Phase 3)",
|
|
14917
15205
|
"",
|
|
14918
|
-
"In Phase 4, this agent
|
|
15206
|
+
"In Phase 4, this agent **creates `bcm:outline` issues** for every",
|
|
15207
|
+
"unmapped feature that meets the `<UNMAPPED_THRESHOLD>` so the",
|
|
15208
|
+
"`bcm-writer` bundle can author the new sub-capability. It never",
|
|
15209
|
+
"authors BCM capability-model documents itself.",
|
|
15210
|
+
"",
|
|
15211
|
+
"In Phase 5, this agent also **creates `company:research` and",
|
|
14919
15212
|
"`people:research` issues** for the vendor company and primary-",
|
|
14920
15213
|
"attribution people surfaced in the profile that are not already",
|
|
14921
15214
|
"tracked under `<COMPANY_PROFILES_DIR>/` or `<PEOPLE_PROFILES_DIR>/`.",
|
|
@@ -14924,15 +15217,18 @@ var softwareProfileAnalystSubAgent = {
|
|
|
14924
15217
|
"`people-profile-analyst` agents, which pick up the issues this",
|
|
14925
15218
|
"pipeline creates.",
|
|
14926
15219
|
"",
|
|
14927
|
-
"The pipeline produces **software profiles, notes, and
|
|
14928
|
-
"
|
|
14929
|
-
"
|
|
14930
|
-
"
|
|
14931
|
-
"
|
|
15220
|
+
"The pipeline produces **software profiles, notes, matrix rows, and capability mappings**.",
|
|
15221
|
+
"Deeper research on adjacent products is delegated to new cycles of",
|
|
15222
|
+
"this same pipeline via `software:research` issues. New BCM",
|
|
15223
|
+
"sub-capabilities for unmapped features are delegated to the",
|
|
15224
|
+
"`bcm-writer` bundle via `bcm:outline` issues. Deeper research on",
|
|
15225
|
+
"the vendor company and primary-attribution people is delegated to",
|
|
15226
|
+
"the `company-profile` and `people-profile` bundles via",
|
|
14932
15227
|
"`company:research` and `people:research` issues. This agent never",
|
|
14933
|
-
"writes company profiles, person profiles, formal
|
|
14934
|
-
"documents, or comparative long-form analyses itself.
|
|
14935
|
-
"boundary clean so the software-profile pipeline stays
|
|
15228
|
+
"writes BCM documents, company profiles, person profiles, formal",
|
|
15229
|
+
"requirement documents, or comparative long-form analyses itself.",
|
|
15230
|
+
"Keep this boundary clean so the software-profile pipeline stays",
|
|
15231
|
+
"generic.",
|
|
14936
15232
|
"",
|
|
14937
15233
|
"---",
|
|
14938
15234
|
"",
|
|
@@ -14947,31 +15243,41 @@ var softwareProfileAnalystSubAgent = {
|
|
|
14947
15243
|
" `docs/src/content/docs/project-context.md` or an explicit issue-body override. If",
|
|
14948
15244
|
" neither is available, fall back to the single-segment default and",
|
|
14949
15245
|
" flag the gap \u2014 never guess.",
|
|
14950
|
-
"- **Delegate, don't duplicate.**
|
|
14951
|
-
"
|
|
14952
|
-
"
|
|
14953
|
-
"
|
|
14954
|
-
"
|
|
14955
|
-
"
|
|
14956
|
-
"
|
|
14957
|
-
"
|
|
14958
|
-
"
|
|
15246
|
+
"- **Delegate, don't duplicate.** Unmapped capabilities are handed off",
|
|
15247
|
+
" to the `bcm-writer` bundle via `bcm:outline` issues in Phase 4.",
|
|
15248
|
+
" The vendor company and primary-attribution people surfaced during",
|
|
15249
|
+
" profiling are handed off to the `company-profile` and",
|
|
15250
|
+
" `people-profile` bundles via `company:research` and",
|
|
15251
|
+
" `people:research` issues in Phase 5 \u2014 never inlined as BCM",
|
|
15252
|
+
" documents, company profiles, or person profiles in this pipeline.",
|
|
15253
|
+
"- **Check before enqueueing.** Before opening a `bcm:outline`,",
|
|
15254
|
+
" `company:research`, or `people:research` issue, verify no existing",
|
|
15255
|
+
" document or open issue already covers the candidate. Reuse",
|
|
15256
|
+
" existing BCM documents and profiles as cross-references rather",
|
|
15257
|
+
" than re-queuing work.",
|
|
15258
|
+
"- **Respect the threshold.** Phase 4 opens `bcm:outline` issues only",
|
|
15259
|
+
" when the count of unmapped features on a single profile meets or",
|
|
15260
|
+
" exceeds `<UNMAPPED_THRESHOLD>`. The default is `1` \u2014 one unmapped",
|
|
15261
|
+
" feature triggers one outline issue. Raise the threshold in the",
|
|
15262
|
+
" invoking issue body or in the consuming project's",
|
|
15263
|
+
" `agentConfig.rules` when the default is too noisy.",
|
|
14959
15264
|
"- **Restrain the queue \u2014 people only.** The vendor company always",
|
|
14960
15265
|
" qualifies (duplicate check aside). For people, only enqueue",
|
|
14961
15266
|
" research for those with **primary attribution** \u2014 founders, the",
|
|
14962
15267
|
" current CEO, principal creators, lead maintainers, or the head of",
|
|
14963
15268
|
" product. Do not open issues for every name on the vendor's about",
|
|
14964
15269
|
" page, every investor, or every advisor.",
|
|
14965
|
-
"- **Produce profiles
|
|
14966
|
-
" documents
|
|
14967
|
-
"
|
|
14968
|
-
"
|
|
14969
|
-
"
|
|
15270
|
+
"- **Produce profiles, matrix rows, and capability mappings \u2014 not",
|
|
15271
|
+
" BCM documents, requirement documents, or evaluation documents.**",
|
|
15272
|
+
" Do not open `type:requirement` or formal evaluation issues from",
|
|
15273
|
+
" this pipeline, and never author BCM capability-model documents",
|
|
15274
|
+
" inline. Follow-up work is scoped through `software:research`,",
|
|
15275
|
+
" `bcm:outline`, `company:research`, and `people:research` only."
|
|
14970
15276
|
].join("\n")
|
|
14971
15277
|
};
|
|
14972
15278
|
var profileSoftwareSkill = {
|
|
14973
15279
|
name: "profile-software",
|
|
14974
|
-
description: "Kick off a software-profile pipeline. Creates a software:research issue for the given product and dispatches Phase 1 (Research) in the software-profile-analyst agent. Phase 4 (Followup) enqueues downstream `company:research` and `people:research` issues for the vendor company and primary-attribution founders/leaders surfaced in the profile.",
|
|
15280
|
+
description: "Kick off a software-profile pipeline. Creates a software:research issue for the given product and dispatches Phase 1 (Research) in the software-profile-analyst agent. Phase 4 (Map) writes a BCM capability mapping onto the profile and enqueues `bcm:outline` issues for unmapped features. Phase 5 (Followup) enqueues downstream `company:research` and `people:research` issues for the vendor company and primary-attribution founders/leaders surfaced in the profile.",
|
|
14975
15281
|
disableModelInvocation: true,
|
|
14976
15282
|
userInvocable: true,
|
|
14977
15283
|
context: "fork",
|
|
@@ -14998,6 +15304,9 @@ var profileSoftwareSkill = {
|
|
|
14998
15304
|
"- `weights: <table>` \u2014 override the segment-importance weights for",
|
|
14999
15305
|
" this profile cycle (otherwise loaded from",
|
|
15000
15306
|
" `docs/src/content/docs/project-context.md`)",
|
|
15307
|
+
"- `unmapped_threshold: <n>` \u2014 override the Phase 4 threshold for",
|
|
15308
|
+
" opening `bcm:outline` issues (default `1` \u2014 one unmapped feature",
|
|
15309
|
+
" triggers one outline issue)",
|
|
15001
15310
|
"- `sources: <list>` \u2014 additional authorized sources beyond public web",
|
|
15002
15311
|
"",
|
|
15003
15312
|
"## Default Paths",
|
|
@@ -15017,16 +15326,20 @@ var profileSoftwareSkill = {
|
|
|
15017
15326
|
"2. Execute Phase 1 (Research) of the software-profile-analyst",
|
|
15018
15327
|
" agent.",
|
|
15019
15328
|
"3. Phase 1 creates the `software:profile` issue. Phase 2 creates",
|
|
15020
|
-
" the `software:matrix` issue. Phase 3
|
|
15021
|
-
" `software:followup` issue
|
|
15022
|
-
"
|
|
15329
|
+
" the `software:matrix` issue. Phase 3 creates the `software:map`",
|
|
15330
|
+
" issue. Phase 4 creates the `software:followup` issue (unless the",
|
|
15331
|
+
" profile surfaced zero follow-ups). Each downstream issue",
|
|
15332
|
+
" declares its `Depends on:` predecessor.",
|
|
15023
15333
|
"",
|
|
15024
15334
|
"## Output",
|
|
15025
15335
|
"",
|
|
15026
15336
|
"- A research-notes file under the project's notes directory",
|
|
15027
|
-
"- A single software profile under the profiles directory",
|
|
15337
|
+
"- A single software profile under the profiles directory, including",
|
|
15338
|
+
" a `## Capability Mapping` section written in Phase 4",
|
|
15028
15339
|
"- One or more rows appended to the shared feature-matrix file,",
|
|
15029
15340
|
" scored against the configured segment weights",
|
|
15341
|
+
"- `bcm:outline` issues for each unmapped feature above the",
|
|
15342
|
+
" configured threshold (handed off to the `bcm-writer` bundle)",
|
|
15030
15343
|
"- Optional follow-up `software:research` issues for adjacent",
|
|
15031
15344
|
" products surfaced in the profile",
|
|
15032
15345
|
"- `company:research` issue for the vendor company (handed off to",
|
|
@@ -15034,46 +15347,132 @@ var profileSoftwareSkill = {
|
|
|
15034
15347
|
"- `people:research` issues for primary-attribution founders, CEOs,",
|
|
15035
15348
|
" or principal creators (handed off to the `people-profile`",
|
|
15036
15349
|
" bundle)",
|
|
15037
|
-
"- This pipeline produces **software profiles, notes,
|
|
15038
|
-
"
|
|
15039
|
-
" profiles, or formal requirement
|
|
15350
|
+
"- This pipeline produces **software profiles, notes, matrix rows,",
|
|
15351
|
+
" and capability mappings** \u2014 it does not write BCM documents,",
|
|
15352
|
+
" company profiles, person profiles, or formal requirement",
|
|
15353
|
+
" documents itself."
|
|
15354
|
+
].join("\n")
|
|
15355
|
+
};
|
|
15356
|
+
var mapSoftwareSkill = {
|
|
15357
|
+
name: "map-software",
|
|
15358
|
+
description: "Kick off a standalone software-capability mapping session. Creates a software:map issue for an already-profiled product and dispatches Phase 4 (Map) in the software-profile-analyst agent. Produces the `## Capability Mapping` section on the profile and enqueues `bcm:outline` issues for unmapped features above the configured threshold.",
|
|
15359
|
+
disableModelInvocation: true,
|
|
15360
|
+
userInvocable: true,
|
|
15361
|
+
context: "fork",
|
|
15362
|
+
agent: "software-profile-analyst",
|
|
15363
|
+
platforms: { cursor: { exclude: true } },
|
|
15364
|
+
instructions: [
|
|
15365
|
+
"# Map Software",
|
|
15366
|
+
"",
|
|
15367
|
+
"Kick off a standalone `software:map` session for a product that",
|
|
15368
|
+
"already has a profile file and matrix rows on disk. Creates a",
|
|
15369
|
+
"`software:map` issue carrying the profile path and dispatches Phase",
|
|
15370
|
+
"4 (Map) in the software-profile-analyst agent.",
|
|
15371
|
+
"",
|
|
15372
|
+
"Use this skill when:",
|
|
15373
|
+
"",
|
|
15374
|
+
"- A profile was written before the map phase existed and is still",
|
|
15375
|
+
" carrying the `_Pending capability mapping \u2014 filled in Phase 4._`",
|
|
15376
|
+
" placeholder.",
|
|
15377
|
+
"- The BCM tree has grown enough that a previously-mapped profile",
|
|
15378
|
+
" should be re-mapped against the updated capability model.",
|
|
15379
|
+
"- A profile's features were edited after the map phase ran and the",
|
|
15380
|
+
" mapping table is now out of date.",
|
|
15381
|
+
"",
|
|
15382
|
+
"## Usage",
|
|
15383
|
+
"",
|
|
15384
|
+
"/map-software <product-slug-or-profile-path>",
|
|
15385
|
+
"",
|
|
15386
|
+
"Optional extensions in the issue body:",
|
|
15387
|
+
"- `unmapped_threshold: <n>` \u2014 override the threshold for opening",
|
|
15388
|
+
" `bcm:outline` issues (default `1`)",
|
|
15389
|
+
"- `bcm_doc_root: <path>` \u2014 override the BCM document root",
|
|
15390
|
+
" (otherwise the configulator default at",
|
|
15391
|
+
" `DEFAULT_AGENT_PATHS.bcmRoot`)",
|
|
15392
|
+
"- `capability_map: <path>` \u2014 override the capability-map file",
|
|
15393
|
+
" (otherwise `<BCM_DOC_ROOT>/capability-map.md`)",
|
|
15394
|
+
"",
|
|
15395
|
+
"## Default Paths",
|
|
15396
|
+
"",
|
|
15397
|
+
"If the project has no override in `docs/src/content/docs/project-context.md` or",
|
|
15398
|
+
"`agentConfig.rules`, the mapping reads from:",
|
|
15399
|
+
"",
|
|
15400
|
+
`- \`${DEFAULT_AGENT_PATHS.bcmRoot}/\` \u2014 BCM capability-model documents`,
|
|
15401
|
+
`- \`${DEFAULT_AGENT_PATHS.bcmRoot}/capability-map.md\` \u2014 capability map`,
|
|
15402
|
+
"",
|
|
15403
|
+
"and writes back to `docs/software/profiles/<slug>.md` under the",
|
|
15404
|
+
"`## Capability Mapping` section only. No other section of the",
|
|
15405
|
+
"profile is rewritten.",
|
|
15406
|
+
"",
|
|
15407
|
+
"## Steps",
|
|
15408
|
+
"",
|
|
15409
|
+
"1. Create a `software:map` issue with `type:software-profile`,",
|
|
15410
|
+
" `priority:medium`, and `status:ready`. Body must include the",
|
|
15411
|
+
" profile path and any overrides.",
|
|
15412
|
+
"2. Execute Phase 4 (Map) of the software-profile-analyst agent.",
|
|
15413
|
+
"3. Phase 4 writes the `## Capability Mapping` section, enqueues",
|
|
15414
|
+
" `bcm:outline` issues for unmapped features above the threshold,",
|
|
15415
|
+
" and \u2014 when the profile lists adjacent products or",
|
|
15416
|
+
" primary-attribution people \u2014 creates the `software:followup`",
|
|
15417
|
+
" issue.",
|
|
15418
|
+
"",
|
|
15419
|
+
"## Output",
|
|
15420
|
+
"",
|
|
15421
|
+
"- An updated `## Capability Mapping` section on the target profile",
|
|
15422
|
+
"- `bcm:outline` issues for each unmapped feature above the",
|
|
15423
|
+
" configured threshold (handed off to the `bcm-writer` bundle)",
|
|
15424
|
+
"- An optional `software:followup` issue when the profile surfaced",
|
|
15425
|
+
" adjacent products, a vendor company without an existing profile,",
|
|
15426
|
+
" or primary-attribution people",
|
|
15427
|
+
"- This skill does not run Phase 1\u20133 \u2014 it assumes the profile and",
|
|
15428
|
+
" matrix rows already exist on disk."
|
|
15040
15429
|
].join("\n")
|
|
15041
15430
|
};
|
|
15042
15431
|
var softwareProfileBundle = {
|
|
15043
15432
|
name: "software-profile",
|
|
15044
|
-
description: "Software research, profiling,
|
|
15433
|
+
description: "Software research, profiling, feature-matrix, and capability-mapping pipeline: research, profile, matrix, map, followup. Enabled by default; domain-neutral; filesystem-durable between phases; ranks features against configurable segment-importance weights and maps features back to the BCM capability model. Phase 4 (Map) hands unmapped features off to the `bcm-writer` bundle via `bcm:outline` issues. Phase 5 (Followup) hands the vendor company and primary-attribution founders/leaders off to the `company-profile` and `people-profile` bundles via `company:research` and `people:research` issues.",
|
|
15045
15434
|
appliesWhen: () => true,
|
|
15046
15435
|
rules: [
|
|
15047
15436
|
{
|
|
15048
15437
|
name: "software-profile-workflow",
|
|
15049
|
-
description: "Describes the
|
|
15438
|
+
description: "Describes the 5-phase software-profile pipeline, the software:* label taxonomy, the generic software-type taxonomy, the segment-weights convention that drives feature-matrix scoring, and the capability-mapping hand-off to the bcm-writer bundle.",
|
|
15050
15439
|
scope: AGENT_RULE_SCOPE.ALWAYS,
|
|
15051
15440
|
content: [
|
|
15052
15441
|
"# Software Profile Workflow",
|
|
15053
15442
|
"",
|
|
15054
15443
|
"Use `/profile-software <product-name>` to kick off a software",
|
|
15055
|
-
"research, profiling,
|
|
15056
|
-
"runs in up to
|
|
15057
|
-
"each tracked by its own GitHub
|
|
15058
|
-
"`software:research`, `software:profile`,
|
|
15059
|
-
"`software:
|
|
15060
|
-
"",
|
|
15061
|
-
"
|
|
15062
|
-
"
|
|
15063
|
-
"
|
|
15064
|
-
"
|
|
15065
|
-
"
|
|
15066
|
-
"
|
|
15067
|
-
"
|
|
15068
|
-
"
|
|
15069
|
-
"
|
|
15070
|
-
"
|
|
15071
|
-
"
|
|
15444
|
+
"research, profiling, feature-matrix, and capability-mapping",
|
|
15445
|
+
"pipeline. The pipeline runs in up to 5 phases \u2014 research,",
|
|
15446
|
+
"profile, matrix, map, followup \u2014 each tracked by its own GitHub",
|
|
15447
|
+
"issue labeled `software:research`, `software:profile`,",
|
|
15448
|
+
"`software:matrix`, `software:map`, or `software:followup`. All",
|
|
15449
|
+
"issues carry `type:software-profile`.",
|
|
15450
|
+
"",
|
|
15451
|
+
"The pipeline produces **software profiles, research notes, rows",
|
|
15452
|
+
"in a shared feature matrix, and capability mappings onto the",
|
|
15453
|
+
"BCM tree**. Features are ranked against segment-importance",
|
|
15454
|
+
"weights declared in `docs/src/content/docs/project-context.md`",
|
|
15455
|
+
"under a `## Segment Weights` section. Features that do not map",
|
|
15456
|
+
"to any existing capability in the BCM tree are flagged during",
|
|
15457
|
+
"the map phase as candidates for new BCM sub-capabilities and",
|
|
15458
|
+
"handed off to the `bcm-writer` bundle via `bcm:outline` issues",
|
|
15459
|
+
"(subject to a configurable threshold). Deeper research on",
|
|
15460
|
+
"adjacent products surfaced in a profile is delegated to new",
|
|
15461
|
+
"cycles of this same pipeline via `software:followup` issues.",
|
|
15462
|
+
"Deeper research on the vendor company and primary-attribution",
|
|
15463
|
+
"founders/product leaders is delegated to the `company-profile`",
|
|
15464
|
+
"and `people-profile` bundles via `company:research` and",
|
|
15465
|
+
"`people:research` issues opened during Phase 5 (Followup).",
|
|
15466
|
+
"",
|
|
15467
|
+
"Use `/map-software <product-slug>` to kick off a standalone",
|
|
15468
|
+
"`software:map` session for a profile that already exists on",
|
|
15469
|
+
"disk \u2014 for example, when the BCM tree has grown enough that a",
|
|
15470
|
+
"previously-mapped profile should be re-mapped.",
|
|
15072
15471
|
"",
|
|
15073
15472
|
"See the `software-profile-analyst` agent definition for full",
|
|
15074
15473
|
"workflow details, default paths, the software-type taxonomy,",
|
|
15075
|
-
"the segment-weights convention,
|
|
15076
|
-
"instructions."
|
|
15474
|
+
"the segment-weights convention, the capability-mapping format,",
|
|
15475
|
+
"and phase-by-phase instructions."
|
|
15077
15476
|
].join("\n"),
|
|
15078
15477
|
platforms: {
|
|
15079
15478
|
cursor: { exclude: true }
|
|
@@ -15081,13 +15480,13 @@ var softwareProfileBundle = {
|
|
|
15081
15480
|
tags: ["workflow"]
|
|
15082
15481
|
}
|
|
15083
15482
|
],
|
|
15084
|
-
skills: [profileSoftwareSkill],
|
|
15483
|
+
skills: [profileSoftwareSkill, mapSoftwareSkill],
|
|
15085
15484
|
subAgents: [softwareProfileAnalystSubAgent],
|
|
15086
15485
|
labels: [
|
|
15087
15486
|
{
|
|
15088
15487
|
name: "type:software-profile",
|
|
15089
15488
|
color: "0E8A16",
|
|
15090
|
-
description: "Work that produces or maintains a software profile, research notes,
|
|
15489
|
+
description: "Work that produces or maintains a software profile, research notes, feature-matrix rows, or capability mappings"
|
|
15091
15490
|
},
|
|
15092
15491
|
{
|
|
15093
15492
|
name: "software:research",
|
|
@@ -15104,10 +15503,15 @@ var softwareProfileBundle = {
|
|
|
15104
15503
|
color: "D4C5F9",
|
|
15105
15504
|
description: "Phase 3: extract feature rows into the shared feature matrix and score them against segment weights"
|
|
15106
15505
|
},
|
|
15506
|
+
{
|
|
15507
|
+
name: "software:map",
|
|
15508
|
+
color: "A2EEEF",
|
|
15509
|
+
description: "Phase 4: map each feature back to the BCM capability model, write the mapping onto the profile, and enqueue `bcm:outline` issues for unmapped features above the configured threshold"
|
|
15510
|
+
},
|
|
15107
15511
|
{
|
|
15108
15512
|
name: "software:followup",
|
|
15109
15513
|
color: "FBCA04",
|
|
15110
|
-
description: "Phase
|
|
15514
|
+
description: "Phase 5: enqueue follow-up research issues for adjacent products, the vendor company, and primary-attribution people surfaced in the profile"
|
|
15111
15515
|
}
|
|
15112
15516
|
]
|
|
15113
15517
|
};
|
|
@@ -15990,18 +16394,24 @@ function renderMeetingTypes(types, agendaTemplateRoot) {
|
|
|
15990
16394
|
"This project declares a meeting-type taxonomy through",
|
|
15991
16395
|
"`AgentConfigOptions.meetings.meetingTypes`. When classifying a",
|
|
15992
16396
|
"meeting transcript, pick the `id` from this list that best fits the",
|
|
15993
|
-
"meeting; do **not** invent new type identifiers.
|
|
15994
|
-
`
|
|
15995
|
-
"",
|
|
15996
|
-
"
|
|
15997
|
-
"
|
|
16397
|
+
"meeting; do **not** invent new type identifiers. The `Kind` column",
|
|
16398
|
+
"maps each concrete `id` onto the generic meeting-kind taxonomy",
|
|
16399
|
+
"(`planning` / `review` / `brainstorm` / `standup` / `external` /",
|
|
16400
|
+
"`other`) documented in the **Meeting type handling** section \u2014",
|
|
16401
|
+
"apply the type-specific rules listed there based on this kind.",
|
|
16402
|
+
"Agenda-template paths below are resolved relative to",
|
|
16403
|
+
`\`${resolvedRoot}\`.`,
|
|
16404
|
+
"",
|
|
16405
|
+
"| ID | Label | Kind | Scope | Cadence | Default duration | Agenda template |",
|
|
16406
|
+
"|----|-------|------|-------|---------|------------------|-----------------|"
|
|
15998
16407
|
];
|
|
15999
16408
|
for (const type of types) {
|
|
16409
|
+
const kind = type.kind ? `\`${type.kind}\`` : "\u2014";
|
|
16000
16410
|
const cadence = type.cadence ? `\`${type.cadence}\`` : "\u2014";
|
|
16001
16411
|
const duration = type.defaultDurationMinutes !== void 0 ? `${type.defaultDurationMinutes} min` : "\u2014";
|
|
16002
16412
|
const template = type.agendaTemplatePath ? `\`${type.agendaTemplatePath}\`` : "\u2014";
|
|
16003
16413
|
lines.push(
|
|
16004
|
-
`| \`${type.id}\` | ${type.label} | \`${type.scope}\` | ${cadence} | ${duration} | ${template} |`
|
|
16414
|
+
`| \`${type.id}\` | ${type.label} | ${kind} | \`${type.scope}\` | ${cadence} | ${duration} | ${template} |`
|
|
16005
16415
|
);
|
|
16006
16416
|
}
|
|
16007
16417
|
return lines.join("\n");
|
|
@@ -16012,10 +16422,12 @@ function renderMeetingAreas(areas) {
|
|
|
16012
16422
|
"",
|
|
16013
16423
|
"This project declares a meeting-area routing map through",
|
|
16014
16424
|
"`AgentConfigOptions.meetings.meetingAreas`. When a meeting note's",
|
|
16015
|
-
"frontmatter carries an `
|
|
16016
|
-
"
|
|
16017
|
-
"
|
|
16018
|
-
"
|
|
16425
|
+
"frontmatter carries an `areas:` list, route phase-4 direct edits",
|
|
16426
|
+
"into the corresponding sub-trees of the docs root",
|
|
16427
|
+
"(`AgentPathsConfig.docsRoot`). See the **Areas filtering** section",
|
|
16428
|
+
"of the `meeting-analyst` agent for the full gating contract.",
|
|
16429
|
+
"Meetings whose `areas` list is empty or does not match any",
|
|
16430
|
+
"declared entry fall back to the default meetings root.",
|
|
16019
16431
|
"",
|
|
16020
16432
|
"| Area ID | Label | Doc-root sub-folder |",
|
|
16021
16433
|
"|---------|-------|---------------------|"
|