@codedrifters/configulator 0.0.262 → 0.0.264
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 -16
- package/lib/index.d.ts +61 -16
- package/lib/index.js +279 -146
- package/lib/index.js.map +1 -1
- package/lib/index.mjs +279 -146
- 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 }
|
|
@@ -9199,7 +9333,7 @@ var REQ_WRITE_ISSUE_SCHEMA_SECTION = [
|
|
|
9199
9333
|
// src/agent/bundles/requirements-analyst.ts
|
|
9200
9334
|
var requirementsAnalystSubAgent = {
|
|
9201
9335
|
name: "requirements-analyst",
|
|
9202
|
-
description: "Discovers requirement gaps from BCM model docs, competitive analysis, product docs, and meeting extracts. Produces scan reports and
|
|
9336
|
+
description: "Discovers requirement gaps from BCM model docs, competitive analysis, product docs, and meeting extracts. Produces scan reports, proposals, and req:write issues for the downstream requirements-writer agent. Runs through a 2-phase pipeline (scan \u2192 draft-trace), one phase per session, tracked by req:* GitHub issue labels.",
|
|
9203
9337
|
model: AGENT_MODEL.POWERFUL,
|
|
9204
9338
|
maxTurns: 80,
|
|
9205
9339
|
platforms: { cursor: { exclude: true } },
|
|
@@ -9240,35 +9374,39 @@ var requirementsAnalystSubAgent = {
|
|
|
9240
9374
|
"",
|
|
9241
9375
|
"## State Machine Overview",
|
|
9242
9376
|
"",
|
|
9243
|
-
"Requirements synthesis flows through **
|
|
9377
|
+
"Requirements synthesis flows through **2 phases**:",
|
|
9244
9378
|
"",
|
|
9245
9379
|
"```",
|
|
9246
|
-
"\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\
|
|
9247
|
-
"\u2502 1. SCAN \u2502\u2500\u2500\u2500\u2500\u25B6\u2502 2. DRAFT
|
|
9248
|
-
"\u2502 Read docs, \u2502 \u2502 Write
|
|
9249
|
-
"\u2502 identify \u2502 \u2502
|
|
9250
|
-
"\u2502 gaps, check \u2502 \u2502
|
|
9251
|
-
"\u2502 for dupes \u2502 \u2502
|
|
9252
|
-
"\u2502 \u2502 \u2502
|
|
9253
|
-
"\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\
|
|
9380
|
+
"\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\u2500\u2500\u2500\u2500\u2510",
|
|
9381
|
+
"\u2502 1. SCAN \u2502\u2500\u2500\u2500\u2500\u25B6\u2502 2. DRAFT-TRACE \u2502",
|
|
9382
|
+
"\u2502 Read docs, \u2502 \u2502 Write proposals,\u2502",
|
|
9383
|
+
"\u2502 identify \u2502 \u2502 create req:write\u2502",
|
|
9384
|
+
"\u2502 gaps, check \u2502 \u2502 issues, update \u2502",
|
|
9385
|
+
"\u2502 for dupes \u2502 \u2502 source docs \u2502",
|
|
9386
|
+
"\u2502 \u2502 \u2502 with traceability\u2502",
|
|
9387
|
+
"\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\u2500\u2500\u2500\u2500\u2518",
|
|
9254
9388
|
"```",
|
|
9255
9389
|
"",
|
|
9390
|
+
"This pipeline matches the `scan \u2192 draft-trace \u2192 write` pattern",
|
|
9391
|
+
"used by the sibling openhi project. Draft and Trace were previously",
|
|
9392
|
+
"separate phases; they were collapsed because the proposals file Draft",
|
|
9393
|
+
"wrote was only ever consumed by Trace (no human review, no async work",
|
|
9394
|
+
"between the two), so the phase boundary added latency without value.",
|
|
9395
|
+
"See ADR-009 for the full reasoning.",
|
|
9396
|
+
"",
|
|
9256
9397
|
"**Issue labels encode the phase:**",
|
|
9257
9398
|
"",
|
|
9258
9399
|
"| Label | Phase | Session work |",
|
|
9259
9400
|
"|-------|-------|-------------|",
|
|
9260
9401
|
"| `req:scan` | 1. Scan | Read source docs, identify potential requirement gaps, check against existing requirements and open issues, write deduplicated scan report |",
|
|
9261
|
-
"| `req:draft` | 2. Draft | Write
|
|
9262
|
-
"| `req:trace` | 3. Trace | Create GitHub issues for each proposed requirement and update source documents with traceability notes |",
|
|
9402
|
+
"| `req:draft-trace` | 2. Draft & Trace | Write proposals, create `req:write` GitHub issues for each proposal, and update source documents with traceability notes \u2014 all in a single session |",
|
|
9263
9403
|
"",
|
|
9264
9404
|
"All issues also carry `type:requirement` and a `status:*` label.",
|
|
9265
9405
|
"",
|
|
9266
|
-
"**Issue count per scan cycle:** 1 scan + 1 draft
|
|
9406
|
+
"**Issue count per scan cycle:** 1 scan + 1 draft-trace = **2 sessions**.",
|
|
9267
9407
|
"",
|
|
9268
9408
|
"**Shortened paths:**",
|
|
9269
|
-
"- No gaps found after scan \u2192 skip draft
|
|
9270
|
-
"- No source docs need traceability updates \u2192 still **3 sessions** (trace",
|
|
9271
|
-
" handles both issue creation and doc updates)",
|
|
9409
|
+
"- No gaps found after scan \u2192 skip draft-trace \u2192 **1 session**",
|
|
9272
9410
|
"",
|
|
9273
9411
|
"---",
|
|
9274
9412
|
"",
|
|
@@ -9297,7 +9435,7 @@ var requirementsAnalystSubAgent = {
|
|
|
9297
9435
|
"Run this loop exactly once per session. Never start a second issue.",
|
|
9298
9436
|
"",
|
|
9299
9437
|
"1. Claim one open `type:requirement` issue using phase priority:",
|
|
9300
|
-
" `req:scan` > `req:draft
|
|
9438
|
+
" `req:scan` > `req:draft-trace`.",
|
|
9301
9439
|
"2. Transition `status:ready` \u2192 `status:in-progress` and create the branch",
|
|
9302
9440
|
" per your project's branch-naming convention.",
|
|
9303
9441
|
"3. Execute the phase handler that matches the issue's `req:*` label.",
|
|
@@ -9398,7 +9536,7 @@ var requirementsAnalystSubAgent = {
|
|
|
9398
9536
|
" ```",
|
|
9399
9537
|
"",
|
|
9400
9538
|
"7. **Create downstream issues based on findings:**",
|
|
9401
|
-
" - If any new gaps were identified \u2192 create `req:draft` issue",
|
|
9539
|
+
" - If any new gaps were identified \u2192 create `req:draft-trace` issue",
|
|
9402
9540
|
" (blocked on this issue via `Depends on: #N`).",
|
|
9403
9541
|
" - If **no gaps** were found \u2192 stop (no further phases needed). Comment",
|
|
9404
9542
|
" on the issue noting that no gaps were identified, and proceed directly",
|
|
@@ -9409,12 +9547,54 @@ var requirementsAnalystSubAgent = {
|
|
|
9409
9547
|
"",
|
|
9410
9548
|
"---",
|
|
9411
9549
|
"",
|
|
9412
|
-
"## Phase 2: Draft (`req:draft`)",
|
|
9550
|
+
"## Phase 2: Draft & Trace (`req:draft-trace`)",
|
|
9551
|
+
"",
|
|
9552
|
+
"**Goal:** Expand each identified gap into a requirement proposal, create",
|
|
9553
|
+
"a `req:write` GitHub issue for each proposal so the downstream",
|
|
9554
|
+
"`requirements-writer` bundle picks it up, and backfill source-document",
|
|
9555
|
+
"traceability notes \u2014 all in a single session.",
|
|
9556
|
+
"",
|
|
9557
|
+
"**Budget:** No web searches. Reading + writing proposals + issue creation",
|
|
9558
|
+
"+ minor traceability edits to source documents.",
|
|
9559
|
+
"",
|
|
9560
|
+
"Draft and Trace were previously separate phases. They were collapsed",
|
|
9561
|
+
"because the proposals file written by Draft was only ever consumed by",
|
|
9562
|
+
"Trace \u2014 no human review, no async work, no CI validation sat between",
|
|
9563
|
+
"them. See ADR-009 for the decision record.",
|
|
9564
|
+
"",
|
|
9565
|
+
"### `req:write` issue schema",
|
|
9566
|
+
"",
|
|
9567
|
+
"The `req:write` issues this phase creates are picked up by the",
|
|
9568
|
+
"downstream `requirements-writer` agent, which parses a strict",
|
|
9569
|
+
"schema on intake. The authoritative schema is defined in the",
|
|
9570
|
+
"`requirements-writer` sub-agent prompt under **The `req:write`",
|
|
9571
|
+
"Issue Schema** \u2014 every `req:write` issue this phase opens must",
|
|
9572
|
+
"conform. The same schema is embedded in the",
|
|
9573
|
+
"`requirements-reviewer` follow-up generator so the three",
|
|
9574
|
+
"producers never drift apart.",
|
|
9575
|
+
"",
|
|
9576
|
+
...REQ_WRITE_ISSUE_SCHEMA_SECTION,
|
|
9413
9577
|
"",
|
|
9414
|
-
"**
|
|
9415
|
-
"
|
|
9578
|
+
"**Deriving the three required fields from the proposal.** For",
|
|
9579
|
+
"every `req:write` issue this phase opens, the three fields come",
|
|
9580
|
+
"directly from the proposal entry written earlier in the same",
|
|
9581
|
+
"session:",
|
|
9416
9582
|
"",
|
|
9417
|
-
"**
|
|
9583
|
+
"- **Category** \u2014 the proposal's `**Category:**` line.",
|
|
9584
|
+
"- **Tier** \u2014 the proposal's `**Tier:**` line.",
|
|
9585
|
+
"- **Output Path** \u2014",
|
|
9586
|
+
" `<REQUIREMENTS_ROOT>/<category-dir>/<PREFIX>-<NNN>-<slug>.md`,",
|
|
9587
|
+
" using the sequence number determined in the proposal step below.",
|
|
9588
|
+
"",
|
|
9589
|
+
"**Validation step \u2014 required before opening the issue.** Before",
|
|
9590
|
+
"calling `gh issue create`, verify all three required fields are",
|
|
9591
|
+
"populated and internally consistent (Category matches title",
|
|
9592
|
+
"prefix, Tier matches `tier:*` label, Output Path filename starts",
|
|
9593
|
+
"with the Category prefix). If any field cannot be derived, open",
|
|
9594
|
+
"the issue with `status:needs-attention` (not `status:ready`) and",
|
|
9595
|
+
"include a `Missing: <field> \u2014 <one-line reason>` line so a human",
|
|
9596
|
+
"triaging the issue only has to supply the remaining value(s)",
|
|
9597
|
+
"before flipping the label to `status:ready`.",
|
|
9418
9598
|
"",
|
|
9419
9599
|
"### Steps",
|
|
9420
9600
|
"",
|
|
@@ -9465,61 +9645,7 @@ var requirementsAnalystSubAgent = {
|
|
|
9465
9645
|
" directory under `<REQUIREMENTS_ROOT>/<category>/` to find the next",
|
|
9466
9646
|
" available `NNN` for each proposed requirement.",
|
|
9467
9647
|
"",
|
|
9468
|
-
"5. **Create
|
|
9469
|
-
"",
|
|
9470
|
-
"6. **Commit and push.**",
|
|
9471
|
-
"",
|
|
9472
|
-
"---",
|
|
9473
|
-
"",
|
|
9474
|
-
"## Phase 3: Trace (`req:trace`)",
|
|
9475
|
-
"",
|
|
9476
|
-
"**Goal:** Create GitHub issues for each proposed requirement and update",
|
|
9477
|
-
"source documents with traceability notes indicating that requirement issues",
|
|
9478
|
-
"were created.",
|
|
9479
|
-
"",
|
|
9480
|
-
"**Budget:** No web searches. Issue creation + minor edits to source",
|
|
9481
|
-
"documents.",
|
|
9482
|
-
"",
|
|
9483
|
-
"### `req:write` issue schema",
|
|
9484
|
-
"",
|
|
9485
|
-
"The `req:write` issues this phase creates are picked up by the",
|
|
9486
|
-
"downstream `requirements-writer` agent, which parses a strict",
|
|
9487
|
-
"schema on intake. The authoritative schema is defined in the",
|
|
9488
|
-
"`requirements-writer` sub-agent prompt under **The `req:write`",
|
|
9489
|
-
"Issue Schema** \u2014 every `req:write` issue this phase opens must",
|
|
9490
|
-
"conform. The same schema is embedded in the",
|
|
9491
|
-
"`requirements-reviewer` follow-up generator so the three",
|
|
9492
|
-
"producers never drift apart.",
|
|
9493
|
-
"",
|
|
9494
|
-
...REQ_WRITE_ISSUE_SCHEMA_SECTION,
|
|
9495
|
-
"",
|
|
9496
|
-
"**Deriving the three required fields from the proposal.** For",
|
|
9497
|
-
"every `req:write` issue this phase opens, the three fields come",
|
|
9498
|
-
"directly from the Phase 2 proposal entry:",
|
|
9499
|
-
"",
|
|
9500
|
-
"- **Category** \u2014 the proposal's `**Category:**` line.",
|
|
9501
|
-
"- **Tier** \u2014 the proposal's `**Tier:**` line (added in Phase 2).",
|
|
9502
|
-
" If the proposal omitted the Tier line (older proposals may),",
|
|
9503
|
-
" route the issue through `Missing:` rather than guessing.",
|
|
9504
|
-
"- **Output Path** \u2014",
|
|
9505
|
-
" `<REQUIREMENTS_ROOT>/<category-dir>/<PREFIX>-<NNN>-<slug>.md`,",
|
|
9506
|
-
" using the sequence number determined in Phase 2 step 4.",
|
|
9507
|
-
"",
|
|
9508
|
-
"**Validation step \u2014 required before opening the issue.** Before",
|
|
9509
|
-
"calling `gh issue create`, verify all three required fields are",
|
|
9510
|
-
"populated and internally consistent (Category matches title",
|
|
9511
|
-
"prefix, Tier matches `tier:*` label, Output Path filename starts",
|
|
9512
|
-
"with the Category prefix). If any field cannot be derived, open",
|
|
9513
|
-
"the issue with `status:needs-attention` (not `status:ready`) and",
|
|
9514
|
-
"include a `Missing: <field> \u2014 <one-line reason>` line so a human",
|
|
9515
|
-
"triaging the issue only has to supply the remaining value(s)",
|
|
9516
|
-
"before flipping the label to `status:ready`.",
|
|
9517
|
-
"",
|
|
9518
|
-
"### Steps",
|
|
9519
|
-
"",
|
|
9520
|
-
"1. **Read the proposals** from Phase 2.",
|
|
9521
|
-
"",
|
|
9522
|
-
"2. **Create requirement issues.** For each proposal:",
|
|
9648
|
+
"5. **Create requirement issues.** For each proposal:",
|
|
9523
9649
|
"",
|
|
9524
9650
|
" All `type:requirement` issues default to `priority:medium` (override",
|
|
9525
9651
|
" only if the proposal's priority was explicitly High or Low). Each",
|
|
@@ -9564,7 +9690,7 @@ var requirementsAnalystSubAgent = {
|
|
|
9564
9690
|
" whichever of the three fields **could** be derived so a human",
|
|
9565
9691
|
" triaging the issue has the minimum possible cleanup.",
|
|
9566
9692
|
"",
|
|
9567
|
-
"
|
|
9693
|
+
"6. **Update source documents.** In each BCM model doc or competitive",
|
|
9568
9694
|
" analysis that was scanned, add a note in the project-relevance /",
|
|
9569
9695
|
" strategic-implications section (whichever heading the source doc uses)",
|
|
9570
9696
|
" indicating that a requirement issue was created:",
|
|
@@ -9574,10 +9700,10 @@ var requirementsAnalystSubAgent = {
|
|
|
9574
9700
|
" (issue #<N>)",
|
|
9575
9701
|
" ```",
|
|
9576
9702
|
"",
|
|
9577
|
-
"
|
|
9703
|
+
"7. **Comment on the scan issue** with a summary of all issues created and",
|
|
9578
9704
|
" all docs updated.",
|
|
9579
9705
|
"",
|
|
9580
|
-
"
|
|
9706
|
+
"8. **Commit and push.**",
|
|
9581
9707
|
"",
|
|
9582
9708
|
"---",
|
|
9583
9709
|
"",
|
|
@@ -9655,39 +9781,41 @@ var scanRequirementsSkill = {
|
|
|
9655
9781
|
"1. Create a `req:scan` issue with `type:requirement`, `priority:medium`,",
|
|
9656
9782
|
" and `status:ready`. Body must list the files to read and the scan scope.",
|
|
9657
9783
|
"2. Execute Phase 1 (Scan) of the requirements-analyst agent.",
|
|
9658
|
-
"3. If gaps are found, a `req:draft` issue is created automatically.",
|
|
9784
|
+
"3. If gaps are found, a `req:draft-trace` issue is created automatically.",
|
|
9659
9785
|
"",
|
|
9660
9786
|
"## Output",
|
|
9661
9787
|
"",
|
|
9662
9788
|
"- A `req-scan-<scope>-<YYYY-MM-DD>.md` file under the project's research",
|
|
9663
9789
|
" requirements directory.",
|
|
9664
|
-
"- A `req:draft` issue if any gaps were identified."
|
|
9790
|
+
"- A `req:draft-trace` issue if any gaps were identified."
|
|
9665
9791
|
].join("\n")
|
|
9666
9792
|
};
|
|
9667
9793
|
var requirementsAnalystBundle = {
|
|
9668
9794
|
name: "requirements-analyst",
|
|
9669
|
-
description: "Requirements gap-discovery agent bundle for BCM-driven projects.
|
|
9795
|
+
description: "Requirements gap-discovery agent bundle for BCM-driven projects. 2-phase pipeline (scan, draft-trace) with req:* phase labels.",
|
|
9670
9796
|
appliesWhen: () => true,
|
|
9671
9797
|
rules: [
|
|
9672
9798
|
{
|
|
9673
9799
|
name: "requirements-analyst-workflow",
|
|
9674
|
-
description: "Describes the
|
|
9800
|
+
description: "Describes the 2-phase requirements gap-discovery pipeline, the req:* label taxonomy, and the boundary with the downstream requirements-writer agent.",
|
|
9675
9801
|
scope: AGENT_RULE_SCOPE.ALWAYS,
|
|
9676
9802
|
content: [
|
|
9677
9803
|
"# Requirements Analyst Workflow",
|
|
9678
9804
|
"",
|
|
9679
9805
|
"Use `/scan-requirements <scope>` to kick off a requirements gap",
|
|
9680
|
-
"discovery cycle. The pipeline runs in
|
|
9681
|
-
"each tracked by its own GitHub issue labeled
|
|
9682
|
-
"or `req:trace`. All issues carry
|
|
9683
|
-
"",
|
|
9684
|
-
"
|
|
9685
|
-
"
|
|
9686
|
-
"
|
|
9806
|
+
"discovery cycle. The pipeline runs in 2 phases \u2014 scan and",
|
|
9807
|
+
"draft-trace \u2014 each tracked by its own GitHub issue labeled",
|
|
9808
|
+
"`req:scan` or `req:draft-trace`. All issues carry",
|
|
9809
|
+
"`type:requirement`.",
|
|
9810
|
+
"",
|
|
9811
|
+
"The requirements-analyst *discovers gaps, drafts proposals, and",
|
|
9812
|
+
"opens `req:write` issues for the downstream writer*; it does",
|
|
9813
|
+
"**not** write final requirement documents. Writing is the job of",
|
|
9814
|
+
"the downstream `requirements-writer` agent (a separate bundle).",
|
|
9687
9815
|
"Keep that boundary clean: proposals land under the research",
|
|
9688
9816
|
"requirements directory, not under the authoritative requirements",
|
|
9689
|
-
"tree. The trace phase tags new issues with `req:write` so
|
|
9690
|
-
"writer bundle picks them up automatically.",
|
|
9817
|
+
"tree. The draft-trace phase tags new issues with `req:write` so",
|
|
9818
|
+
"the writer bundle picks them up automatically.",
|
|
9691
9819
|
"",
|
|
9692
9820
|
"See the `requirements-analyst` agent definition for full workflow",
|
|
9693
9821
|
"details and phase-by-phase instructions."
|
|
@@ -9712,14 +9840,9 @@ var requirementsAnalystBundle = {
|
|
|
9712
9840
|
description: "Phase 1: scan source docs for requirement gaps and deduplicate"
|
|
9713
9841
|
},
|
|
9714
9842
|
{
|
|
9715
|
-
name: "req:draft",
|
|
9843
|
+
name: "req:draft-trace",
|
|
9716
9844
|
color: "BFDADC",
|
|
9717
|
-
description: "Phase 2: draft
|
|
9718
|
-
},
|
|
9719
|
-
{
|
|
9720
|
-
name: "req:trace",
|
|
9721
|
-
color: "D4C5F9",
|
|
9722
|
-
description: "Phase 3: create requirement issues and backfill traceability on source docs"
|
|
9845
|
+
description: "Phase 2: draft proposals, create req:write issues, and backfill source-doc traceability"
|
|
9723
9846
|
}
|
|
9724
9847
|
]
|
|
9725
9848
|
};
|
|
@@ -11603,8 +11726,8 @@ var requirementsWriterSubAgent = {
|
|
|
11603
11726
|
"This agent produces **requirement documents only** \u2014 capability",
|
|
11604
11727
|
"models are written by the `bcm-writer` agent and requirement-gap",
|
|
11605
11728
|
"discovery is the responsibility of the `requirements-analyst` agent.",
|
|
11606
|
-
"Keep this boundary clean: never open `req:scan`,
|
|
11607
|
-
"`bcm:*` issues from this pipeline.",
|
|
11729
|
+
"Keep this boundary clean: never open `req:scan`,",
|
|
11730
|
+
"`req:draft-trace`, or `bcm:*` issues from this pipeline.",
|
|
11608
11731
|
"",
|
|
11609
11732
|
"Follow your project's shared agent conventions (`AGENTS.md`,",
|
|
11610
11733
|
"`CLAUDE.md`, or equivalent) for all commit, branch, and PR rules.",
|
|
@@ -12138,7 +12261,7 @@ var requirementsWriterSubAgent = {
|
|
|
12138
12261
|
"specialized upstream/downstream agents.",
|
|
12139
12262
|
"",
|
|
12140
12263
|
"**Do NOT create:**",
|
|
12141
|
-
"- `req:scan
|
|
12264
|
+
"- `req:scan` or `req:draft-trace` issues \u2014 those belong to",
|
|
12142
12265
|
" the `requirements-analyst` bundle",
|
|
12143
12266
|
"- `bcm:*` issues \u2014 those belong to the `bcm-writer` bundle",
|
|
12144
12267
|
"- `people:*`, `company:*`, `software:*`, `research:*`, or",
|
|
@@ -12186,8 +12309,8 @@ var requirementsWriterSubAgent = {
|
|
|
12186
12309
|
" exists as a file but is missing from its category index is",
|
|
12187
12310
|
" invisible to anyone browsing the documentation tree.",
|
|
12188
12311
|
"- **Write requirements, not capability models or gap reports.**",
|
|
12189
|
-
" Never open `req:scan`, `req:draft
|
|
12190
|
-
"
|
|
12312
|
+
" Never open `req:scan`, `req:draft-trace`, or `bcm:*` issues from",
|
|
12313
|
+
" this pipeline."
|
|
12191
12314
|
].join("\n")
|
|
12192
12315
|
};
|
|
12193
12316
|
var writeRequirementSkill = {
|
|
@@ -12282,8 +12405,8 @@ var requirementsWriterBundle = {
|
|
|
12282
12405
|
"The pipeline produces **requirement documents only** \u2014 capability",
|
|
12283
12406
|
"models are written by the `bcm-writer` agent and gap discovery is",
|
|
12284
12407
|
"the responsibility of the `requirements-analyst` agent. The",
|
|
12285
|
-
"writer never opens `req:scan`, `req:draft
|
|
12286
|
-
"
|
|
12408
|
+
"writer never opens `req:scan`, `req:draft-trace`, or `bcm:*`",
|
|
12409
|
+
"issues.",
|
|
12287
12410
|
"",
|
|
12288
12411
|
"Documents follow the 11-category taxonomy (BR, FR, NFR, TR, ADR,",
|
|
12289
12412
|
"SEC, DR, INT, OPS, UX, MT) and the four-tier classification",
|
|
@@ -12389,8 +12512,8 @@ var requirementsReviewerSubAgent = {
|
|
|
12389
12512
|
"`requirements-writer` bundle (requirement docs) and `bcm-writer`",
|
|
12390
12513
|
"bundle (capability models). Gap discovery belongs to the",
|
|
12391
12514
|
"`requirements-analyst` bundle. Keep this boundary clean: never open",
|
|
12392
|
-
"`req:scan`, `req:draft
|
|
12393
|
-
"
|
|
12515
|
+
"`req:scan`, `req:draft-trace`, `req:review`, or `bcm:*` issues",
|
|
12516
|
+
"from this pipeline. The only follow-ups you open are the",
|
|
12394
12517
|
"`req:write` issues documented below.",
|
|
12395
12518
|
"",
|
|
12396
12519
|
"Follow your project's shared agent conventions (`AGENTS.md`,",
|
|
@@ -12603,8 +12726,8 @@ var requirementsReviewerSubAgent = {
|
|
|
12603
12726
|
"doc and must be rewritten or removed). Route follow-up issues to",
|
|
12604
12727
|
"`req:write` so the `requirements-writer` \u2014 the only agent scoped",
|
|
12605
12728
|
"to edit under `<REQUIREMENTS_ROOT>` \u2014 picks them up. Do **not**",
|
|
12606
|
-
"route Check 4 findings to `req:trace`; the analyst bundle
|
|
12607
|
-
"not edit requirement documents and the issue would sit",
|
|
12729
|
+
"route Check 4 findings to `req:draft-trace`; the analyst bundle",
|
|
12730
|
+
"does not edit requirement documents and the issue would sit",
|
|
12608
12731
|
"unresolved. See the Follow-Up Issues section below for the full",
|
|
12609
12732
|
"Check 3 vs. Check 4 routing split.",
|
|
12610
12733
|
"",
|
|
@@ -13023,11 +13146,12 @@ var requirementsReviewerSubAgent = {
|
|
|
13023
13146
|
" docs, competitive-analysis notes, product-roadmap entries,",
|
|
13024
13147
|
" meeting extracts \u2014 that should link forward to an existing",
|
|
13025
13148
|
" requirement (Check 3: orphaned requirements whose fix lives",
|
|
13026
|
-
" in the source tree, not the requirement doc) \u2192 `req:trace`",
|
|
13149
|
+
" in the source tree, not the requirement doc) \u2192 `req:draft-trace`",
|
|
13027
13150
|
" (the `requirements-analyst` agent picks it up to backfill",
|
|
13028
|
-
" source-doc traceability
|
|
13029
|
-
" cross-references here \u2014 the
|
|
13030
|
-
" `<REQUIREMENTS_ROOT>` and the
|
|
13151
|
+
" source-doc traceability inside its combined draft-trace phase).",
|
|
13152
|
+
" **Do not** route Check 4 broken cross-references here \u2014 the",
|
|
13153
|
+
" analyst bundle never writes to `<REQUIREMENTS_ROOT>` and the",
|
|
13154
|
+
" issue would sit unresolved.",
|
|
13031
13155
|
" - A new requirement is needed (e.g., a `Proposed` ADR is missing",
|
|
13032
13156
|
" for a deferred technology choice) \u2192 `req:scan` (the analyst",
|
|
13033
13157
|
" runs a scoped scan to confirm the gap, then drafts the new",
|
|
@@ -13041,7 +13165,7 @@ var requirementsReviewerSubAgent = {
|
|
|
13041
13165
|
"",
|
|
13042
13166
|
"**Check 12 exception \u2014 stale `Proposed` ADR/TR triage.** Check 12",
|
|
13043
13167
|
"findings are the one case where follow-up flows through a new",
|
|
13044
|
-
"`req:review` issue rather than `req:write` / `req:trace` /",
|
|
13168
|
+
"`req:review` issue rather than `req:write` / `req:draft-trace` /",
|
|
13045
13169
|
"`req:scan`. The finding is a decision a human must make, not an",
|
|
13046
13170
|
"edit to a requirement document, so:",
|
|
13047
13171
|
"",
|
|
@@ -13481,8 +13605,9 @@ var reviewRequirementsSkill = {
|
|
|
13481
13605
|
"- One verification script under `<REVIEW_REPORTS_ROOT>` (only",
|
|
13482
13606
|
" for audits >10 documents)",
|
|
13483
13607
|
"- Follow-up GitHub issues for every Critical and Warning finding,",
|
|
13484
|
-
" carrying the appropriate phase label (`req:write`,
|
|
13485
|
-
" or `req:scan`) for the downstream agent that
|
|
13608
|
+
" carrying the appropriate phase label (`req:write`,",
|
|
13609
|
+
" `req:draft-trace`, or `req:scan`) for the downstream agent that",
|
|
13610
|
+
" should act",
|
|
13486
13611
|
"- An aggregated `req:review` follow-up issue labeled",
|
|
13487
13612
|
" `status:needs-attention` when Check 12 surfaces stale `Proposed`",
|
|
13488
13613
|
" ADR/TR documents (one issue per review, not one per document);",
|
|
@@ -13637,9 +13762,9 @@ var requirementsReviewerBundle = {
|
|
|
13637
13762
|
"The review phase produces **review reports and follow-up issues",
|
|
13638
13763
|
"only** \u2014 it never edits requirement documents, capability",
|
|
13639
13764
|
"models, or research notes. It files follow-up issues with the",
|
|
13640
|
-
"appropriate phase label (`req:write`, `req:trace`,
|
|
13641
|
-
"or \u2014 only for Check 12 stale-decision triage \u2014
|
|
13642
|
-
"for the downstream agent or human to pick up.",
|
|
13765
|
+
"appropriate phase label (`req:write`, `req:draft-trace`,",
|
|
13766
|
+
"`req:scan`, or \u2014 only for Check 12 stale-decision triage \u2014",
|
|
13767
|
+
"`req:review`) for the downstream agent or human to pick up.",
|
|
13643
13768
|
"",
|
|
13644
13769
|
"For audits covering more than 10 documents, the reviewer writes",
|
|
13645
13770
|
"a read-only Python verification script alongside the report and",
|
|
@@ -13682,9 +13807,9 @@ var requirementsReviewerBundle = {
|
|
|
13682
13807
|
"Authoring remains the responsibility of the `requirements-writer`",
|
|
13683
13808
|
"(requirement docs) and `bcm-writer` (capability models) bundles.",
|
|
13684
13809
|
"Gap discovery is the responsibility of the `requirements-analyst`",
|
|
13685
|
-
"bundle. The reviewer never opens `req:scan`, `req:draft`,",
|
|
13686
|
-
"`req:
|
|
13687
|
-
"
|
|
13810
|
+
"bundle. The reviewer never opens `req:scan`, `req:draft-trace`,",
|
|
13811
|
+
"`req:review`, or `bcm:*` issues \u2014 only `req:write` follow-ups",
|
|
13812
|
+
"from either phase.",
|
|
13688
13813
|
"",
|
|
13689
13814
|
"**Soft dependency on the `requirements-writer` bundle.** The",
|
|
13690
13815
|
"reviewer reads category templates from",
|
|
@@ -16260,18 +16385,24 @@ function renderMeetingTypes(types, agendaTemplateRoot) {
|
|
|
16260
16385
|
"This project declares a meeting-type taxonomy through",
|
|
16261
16386
|
"`AgentConfigOptions.meetings.meetingTypes`. When classifying a",
|
|
16262
16387
|
"meeting transcript, pick the `id` from this list that best fits the",
|
|
16263
|
-
"meeting; do **not** invent new type identifiers.
|
|
16264
|
-
`
|
|
16265
|
-
"",
|
|
16266
|
-
"
|
|
16267
|
-
"
|
|
16388
|
+
"meeting; do **not** invent new type identifiers. The `Kind` column",
|
|
16389
|
+
"maps each concrete `id` onto the generic meeting-kind taxonomy",
|
|
16390
|
+
"(`planning` / `review` / `brainstorm` / `standup` / `external` /",
|
|
16391
|
+
"`other`) documented in the **Meeting type handling** section \u2014",
|
|
16392
|
+
"apply the type-specific rules listed there based on this kind.",
|
|
16393
|
+
"Agenda-template paths below are resolved relative to",
|
|
16394
|
+
`\`${resolvedRoot}\`.`,
|
|
16395
|
+
"",
|
|
16396
|
+
"| ID | Label | Kind | Scope | Cadence | Default duration | Agenda template |",
|
|
16397
|
+
"|----|-------|------|-------|---------|------------------|-----------------|"
|
|
16268
16398
|
];
|
|
16269
16399
|
for (const type of types) {
|
|
16400
|
+
const kind = type.kind ? `\`${type.kind}\`` : "\u2014";
|
|
16270
16401
|
const cadence = type.cadence ? `\`${type.cadence}\`` : "\u2014";
|
|
16271
16402
|
const duration = type.defaultDurationMinutes !== void 0 ? `${type.defaultDurationMinutes} min` : "\u2014";
|
|
16272
16403
|
const template = type.agendaTemplatePath ? `\`${type.agendaTemplatePath}\`` : "\u2014";
|
|
16273
16404
|
lines.push(
|
|
16274
|
-
`| \`${type.id}\` | ${type.label} | \`${type.scope}\` | ${cadence} | ${duration} | ${template} |`
|
|
16405
|
+
`| \`${type.id}\` | ${type.label} | ${kind} | \`${type.scope}\` | ${cadence} | ${duration} | ${template} |`
|
|
16275
16406
|
);
|
|
16276
16407
|
}
|
|
16277
16408
|
return lines.join("\n");
|
|
@@ -16282,10 +16413,12 @@ function renderMeetingAreas(areas) {
|
|
|
16282
16413
|
"",
|
|
16283
16414
|
"This project declares a meeting-area routing map through",
|
|
16284
16415
|
"`AgentConfigOptions.meetings.meetingAreas`. When a meeting note's",
|
|
16285
|
-
"frontmatter carries an `
|
|
16286
|
-
"
|
|
16287
|
-
"
|
|
16288
|
-
"
|
|
16416
|
+
"frontmatter carries an `areas:` list, route phase-4 direct edits",
|
|
16417
|
+
"into the corresponding sub-trees of the docs root",
|
|
16418
|
+
"(`AgentPathsConfig.docsRoot`). See the **Areas filtering** section",
|
|
16419
|
+
"of the `meeting-analyst` agent for the full gating contract.",
|
|
16420
|
+
"Meetings whose `areas` list is empty or does not match any",
|
|
16421
|
+
"declared entry fall back to the default meetings root.",
|
|
16289
16422
|
"",
|
|
16290
16423
|
"| Area ID | Label | Doc-root sub-folder |",
|
|
16291
16424
|
"|---------|-------|---------------------|"
|