@codedrifters/configulator 0.0.290 → 0.0.291

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.js CHANGED
@@ -377,6 +377,7 @@ __export(index_exports, {
377
377
  renderSkillEvalsRuleContent: () => renderSkillEvalsRuleContent,
378
378
  renderSkillEvalsRunnerScript: () => renderSkillEvalsRunnerScript,
379
379
  renderSourceTierExamples: () => renderSourceTierExamples,
380
+ renderStubIndexConventionRuleContent: () => renderStubIndexConventionRuleContent,
380
381
  renderUnblockDependentsScript: () => renderUnblockDependentsScript,
381
382
  renderUnblockDependentsSection: () => renderUnblockDependentsSection,
382
383
  requirementsAnalystBundle: () => requirementsAnalystBundle,
@@ -837,13 +838,16 @@ var agendaAnalystSubAgent = {
837
838
  " `duration_min` \xB1 5 minutes. If it doesn't, adjust section times",
838
839
  " or cut content \u2014 do not ship a math-broken agenda.",
839
840
  "",
840
- "7. **Create the folder `index.md` if missing.** Populate it with:",
841
+ "7. **Create the folder `index.md` if missing.** Populate it",
842
+ " following the `stub-index-convention` rule:",
841
843
  " - Frontmatter `title` (short sidebar label) and `description`",
842
844
  " (one line).",
843
845
  " - A 2\u20134 sentence summary of the meeting's objective and desired",
844
846
  " outcomes pulled from the agenda.",
845
847
  " - A `## Documents` section linking to `./agenda.md` (and",
846
848
  " `./notes.md` once the meeting-analyst produces it).",
849
+ " - No body `# Heading` \u2014 the frontmatter `title:` already",
850
+ " renders as the page H1.",
847
851
  "",
848
852
  " Do NOT set `sidebar.hidden: true` on `index.md` \u2014 it is the page",
849
853
  " that should appear in the sidebar.",
@@ -1607,8 +1611,6 @@ function renderIssueTemplatesStarterPage(_it) {
1607
1611
  "description: Canonical gh issue create recipes \u2014 one per downstream phase label.",
1608
1612
  "---",
1609
1613
  "",
1610
- "# Issue Templates",
1611
- "",
1612
1614
  "This page lists the canonical `gh issue create` recipe for every",
1613
1615
  "downstream issue kind dispatched by an agent in this monorepo.",
1614
1616
  "Bundles and agent prompts cite the matching section below instead",
@@ -3043,6 +3045,71 @@ function assertValidProductContextPath(value) {
3043
3045
  }
3044
3046
  }
3045
3047
 
3048
+ // src/agent/bundles/stub-index-convention.ts
3049
+ function renderStubIndexConventionRuleContent() {
3050
+ return [
3051
+ "# Section Index Pages",
3052
+ "",
3053
+ "When any agent creates or updates an `index.md` (or `README.md`)",
3054
+ "in a docs subdirectory under a Starlight content root, the file's",
3055
+ "body must include:",
3056
+ "",
3057
+ "1. **A 1\u20132 paragraph summary** of the section's purpose and how",
3058
+ " it fits into the larger research, requirements, or capability",
3059
+ " area. Readers landing on the page should understand what's in",
3060
+ " the section without falling back to the sidebar.",
3061
+ "",
3062
+ "2. **A grouped, linked listing of the directory's children**",
3063
+ " (table or bullet list). When a natural taxonomy exists (e.g.",
3064
+ " organizations grouped by sub-segment, regulations grouped by",
3065
+ " jurisdiction, capabilities grouped by tier), use it. Otherwise",
3066
+ " sort alphabetically by title. Every listing entry must link",
3067
+ " to the child page.",
3068
+ "",
3069
+ "3. **No body `# Heading`.** Starlight renders the frontmatter",
3070
+ " `title:` as the page H1 automatically \u2014 a body H1 produces a",
3071
+ " duplicate. The same no-body-H1 contract that applies to skill",
3072
+ " templates and inline agent templates also applies to every",
3073
+ " index page emitted by an agent.",
3074
+ "",
3075
+ "## When this applies",
3076
+ "",
3077
+ "The convention applies to every `index.md` / `README.md` file",
3078
+ "covered by the shared-index path globs documented in the",
3079
+ "`shared-editing-safety` rule:",
3080
+ "",
3081
+ "- `docs/src/content/docs/**/index.md`",
3082
+ "- `docs/src/content/docs/**/README.md`",
3083
+ "",
3084
+ "Any agent that scaffolds a new directory under a Starlight",
3085
+ "content root MUST populate the directory's index page following",
3086
+ "this contract \u2014 a one-sentence stub is not acceptable.",
3087
+ "",
3088
+ "## Reference shapes",
3089
+ "",
3090
+ "Existing rich indexes are the canonical reference shape. Examples:",
3091
+ "",
3092
+ "- A `<MEETINGS_ROOT>/<YYYY-MM-DD>-<slug>/index.md` populated by",
3093
+ " the `agenda-analyst` bundle: frontmatter `title` /",
3094
+ " `description`, a 2\u20134 sentence summary, and a `## Documents`",
3095
+ " section listing every page in the folder.",
3096
+ "- A regulations scope index that opens with two paragraphs of",
3097
+ " context and groups every linked regulation under a",
3098
+ " `## Regulations` table by jurisdiction.",
3099
+ "- A standards-organizations index that groups every linked",
3100
+ " organization under a `## Organizations` heading by role",
3101
+ " (governance, working group, implementer).",
3102
+ "",
3103
+ "## Out of scope",
3104
+ "",
3105
+ "- Auto-generated child listings via Astro/Starlight components.",
3106
+ " Agents emit hand-curated tables or bullet lists; the rule",
3107
+ " defines the shape, not the rendering technology.",
3108
+ "- Backfilling pre-existing stub indexes is a downstream-consumer",
3109
+ " cleanup task, not a configulator change."
3110
+ ].join("\n");
3111
+ }
3112
+
3046
3113
  // src/agent/bundles/base.ts
3047
3114
  var createPackageSkill = {
3048
3115
  name: "create-package",
@@ -4128,6 +4195,16 @@ function buildBaseBundle(paths = DEFAULT_AGENT_PATHS) {
4128
4195
  },
4129
4196
  tags: ["workflow"]
4130
4197
  },
4198
+ {
4199
+ name: "stub-index-convention",
4200
+ description: "Section-index convention: every agent-emitted `index.md` / `README.md` under a Starlight docs root carries a contextual summary plus a grouped, linked listing of the directory's children \u2014 and no body `# Heading` (Starlight renders the frontmatter `title:` as the page H1).",
4201
+ scope: AGENT_RULE_SCOPE.ALWAYS,
4202
+ content: renderStubIndexConventionRuleContent(),
4203
+ platforms: {
4204
+ cursor: { exclude: true }
4205
+ },
4206
+ tags: ["workflow"]
4207
+ },
4131
4208
  {
4132
4209
  name: "skill-evals",
4133
4210
  description: "Skill eval harness contract: declarative prompt/expected-output regression suites per skill at `<skillsRoot>/<skill-name>/evals/evals.json`, parameterised by a shared product-context fixture so the same eval shape works across every configulator-consuming project without forking fixtures.",
@@ -4403,8 +4480,6 @@ function buildBcmWriterSubAgent(paths) {
4403
4480
  " tier: L1 | L2 | L3",
4404
4481
  " ---",
4405
4482
  "",
4406
- " # BCM Outline: <Capability Name>",
4407
- "",
4408
4483
  " ## Capability Name",
4409
4484
  " <noun or noun phrase \u2014 never a verb>",
4410
4485
  "",
@@ -4484,8 +4559,6 @@ function buildBcmWriterSubAgent(paths) {
4484
4559
  " date: YYYY-MM-DD",
4485
4560
  " ---",
4486
4561
  "",
4487
- " # <Capability Name>",
4488
- "",
4489
4562
  " ## Capability Definitions",
4490
4563
  " <1\u20132 sentences from the outline's Proposed Definition, refined>",
4491
4564
  "",
@@ -4895,8 +4968,6 @@ title: "Business Model: <Segment Name>"
4895
4968
  description: "Business Model Canvas analysis for the <segment name> segment of the <industry> industry."
4896
4969
  ---
4897
4970
 
4898
- # Business Model: <Segment Name>
4899
-
4900
4971
  | Field | Value |
4901
4972
  |-------|-------|
4902
4973
  | **Industry** | <industry name> |
@@ -5280,8 +5351,6 @@ function buildBusinessModelsAnalystSubAgent(paths) {
5280
5351
  " status: complete",
5281
5352
  " ---",
5282
5353
  "",
5283
- " # Business Model Scan: <Industry Name>",
5284
- "",
5285
5354
  " ## Source Inputs",
5286
5355
  " - Industry plan: <relative path>",
5287
5356
  " - Prior research: <relative path> (optional)",
@@ -5369,8 +5438,12 @@ function buildBusinessModelsAnalystSubAgent(paths) {
5369
5438
  "",
5370
5439
  "7. **Create the segment index** at",
5371
5440
  " `<BUSINESS_MODELS_ROOT>/<industry>/segments/<SEGMENT_SLUG>/index.md`",
5372
- " if it does not already exist. The index should carry a short",
5373
- " description and link to `./business-model.md`.",
5441
+ " if it does not already exist. Follow the",
5442
+ " `stub-index-convention` rule: a 1\u20132 paragraph summary of the",
5443
+ " segment plus a linked listing of every page in the folder",
5444
+ " (`./business-model.md` and any value-stream / capability pages",
5445
+ " that land later). No body `# Heading` \u2014 the frontmatter",
5446
+ " `title:` already renders as the page H1.",
5374
5447
  "",
5375
5448
  "8. **Create one `business-models:complete` issue** with",
5376
5449
  " `Depends on: #<canvas-issue>`. Its body references the path to",
@@ -6161,8 +6234,6 @@ function buildCompanyProfileAnalystSubAgent(paths) {
6161
6234
  " parent_issue: <N>",
6162
6235
  " ---",
6163
6236
  "",
6164
- " # Research Notes: <company name>",
6165
- "",
6166
6237
  " ## Framing",
6167
6238
  " <why this company was requested and what to learn>",
6168
6239
  "",
@@ -6224,8 +6295,6 @@ function buildCompanyProfileAnalystSubAgent(paths) {
6224
6295
  " referencedIn: []",
6225
6296
  " ---",
6226
6297
  "",
6227
- " # <company name>",
6228
- "",
6229
6298
  " ## Summary",
6230
6299
  " <2\u20134 sentence elevator description: what they do, who they sell to>",
6231
6300
  "",
@@ -6636,8 +6705,6 @@ function buildCompanyProfileAnalystSubAgent(paths) {
6636
6705
  " - <relative path to profile 2>",
6637
6706
  " ---",
6638
6707
  "",
6639
- " # <segment name> Competitive Analysis",
6640
- "",
6641
6708
  " ## Market Overview",
6642
6709
  " <landscape summary \u2014 total players, market structure, trends",
6643
6710
  " visible from the profiles>",
@@ -7200,8 +7267,6 @@ archetype: <ARCHETYPE_SLUG>
7200
7267
  segment: <SEGMENT_SLUG>
7201
7268
  ---
7202
7269
 
7203
- # <Customer Archetype Name>
7204
-
7205
7270
  | Field | Value |
7206
7271
  |-------|-------|
7207
7272
  | **Archetype** | <short noun phrase identifying the archetype> |
@@ -7567,8 +7632,6 @@ function buildCustomerProfileAnalystSubAgent(paths) {
7567
7632
  " scope: <SCOPE_SLUG>",
7568
7633
  " ---",
7569
7634
  "",
7570
- " # Customer Discovery: <Scope>",
7571
- "",
7572
7635
  " ## Scope Context",
7573
7636
  " - **Scope:** <SCOPE_SLUG>",
7574
7637
  " - **Sources scanned:** <counts by source type>",
@@ -7714,8 +7777,6 @@ function buildCustomerProfileAnalystSubAgent(paths) {
7714
7777
  " archetype: <ARCHETYPE_SLUG>",
7715
7778
  " ---",
7716
7779
  "",
7717
- " # Competitors: <Archetype Name>",
7718
- "",
7719
7780
  " ## Market Overview",
7720
7781
  " <Brief overview of the competitive landscape this archetype",
7721
7782
  " evaluates.>",
@@ -9622,8 +9683,6 @@ function buildIndustryDiscoveryAnalystSubAgent(paths) {
9622
9683
  " candidate_count: <N>",
9623
9684
  " ---",
9624
9685
  "",
9625
- " # Industry Candidates: <scope>",
9626
- "",
9627
9686
  " ## Scope",
9628
9687
  " <verbatim scope statement from the issue>",
9629
9688
  "",
@@ -9684,8 +9743,6 @@ function buildIndustryDiscoveryAnalystSubAgent(paths) {
9684
9743
  " threshold: <0.0\u20131.0>",
9685
9744
  " ---",
9686
9745
  "",
9687
- " # Industry Evaluation: <scope>",
9688
- "",
9689
9746
  " ## Fit Rubric",
9690
9747
  " <verbatim rubric table, including weights and threshold>",
9691
9748
  "",
@@ -9742,8 +9799,6 @@ function buildIndustryDiscoveryAnalystSubAgent(paths) {
9742
9799
  " evaluation_source: <EVALUATIONS_DIR>/<DISCOVERY_SLUG>.evaluation.md",
9743
9800
  " ---",
9744
9801
  "",
9745
- " # Industry Plan: <scope>",
9746
- "",
9747
9802
  " ## Cleared Verticals",
9748
9803
  " | Vertical | Score | Downstream Issue |",
9749
9804
  " |----------|-------|------------------|",
@@ -10196,8 +10251,6 @@ function buildMaintenanceAuditSubAgent(paths) {
10196
10251
  " status: complete",
10197
10252
  " ---",
10198
10253
  "",
10199
- " # Maintenance Audit: <AUDIT_SLUG>",
10200
- "",
10201
10254
  " ## Scope",
10202
10255
  " - **Docs root:** `<DOCS_ROOT>`",
10203
10256
  " - **Checks run:** <list of check categories>",
@@ -10319,8 +10372,6 @@ function buildMaintenanceAuditSubAgent(paths) {
10319
10372
  " status: complete",
10320
10373
  " ---",
10321
10374
  "",
10322
- " # Maintenance Fix: <AUDIT_SLUG>",
10323
- "",
10324
10375
  " ## Source Audit Report",
10325
10376
  " <link to the Phase 1 audit report>",
10326
10377
  "",
@@ -10421,8 +10472,6 @@ function buildMaintenanceAuditSubAgent(paths) {
10421
10472
  " status: complete",
10422
10473
  " ---",
10423
10474
  "",
10424
- " # Maintenance Verify: <AUDIT_SLUG>",
10425
- "",
10426
10475
  " ## Source Reports",
10427
10476
  " - Scan report: <link>",
10428
10477
  " - Fix report: <link>",
@@ -14589,8 +14638,6 @@ function buildPeopleProfileAnalystSubAgent(paths) {
14589
14638
  " parent_issue: <N>",
14590
14639
  " ---",
14591
14640
  "",
14592
- " # Research Notes: <person name>",
14593
- "",
14594
14641
  " ## Framing",
14595
14642
  " <why this person was requested and what to learn>",
14596
14643
  "",
@@ -14652,8 +14699,6 @@ function buildPeopleProfileAnalystSubAgent(paths) {
14652
14699
  " notes: <NOTES_DIR>/<PERSON_SLUG>.notes.md",
14653
14700
  " ---",
14654
14701
  "",
14655
- " # <person name>",
14656
- "",
14657
14702
  " ## Summary",
14658
14703
  " <2\u20134 sentence elevator description: who they are, what they do,",
14659
14704
  " why they matter to this project>",
@@ -17237,8 +17282,6 @@ jurisdiction: <federal | state | provincial | international | local>
17237
17282
  industry: <industry-slug or 'platform'>
17238
17283
  ---
17239
17284
 
17240
- # <Regulation Name>
17241
-
17242
17285
  | Field | Value |
17243
17286
  |-------|-------|
17244
17287
  | **Official name** | <full legal name> |
@@ -17609,8 +17652,6 @@ function buildRegulatoryResearchAnalystSubAgent(paths) {
17609
17652
  " scope: <SCOPE_SLUG>",
17610
17653
  " ---",
17611
17654
  "",
17612
- " # Regulatory Scan: <Scope>",
17613
- "",
17614
17655
  " ## Scope Context",
17615
17656
  " - **Scope type:** <industry / jurisdiction / platform>",
17616
17657
  " - **Scope identifier:** <SCOPE_SLUG>",
@@ -17661,7 +17702,12 @@ function buildRegulatoryResearchAnalystSubAgent(paths) {
17661
17702
  "",
17662
17703
  "7. **Create or update the scope index page** at",
17663
17704
  " `<SCOPE_INDEX_PAGE>` so downstream regulations link back to a",
17664
- " coherent landing page for the scope.",
17705
+ " coherent landing page for the scope. Follow the",
17706
+ " `stub-index-convention` rule: the body must carry a 1\u20132",
17707
+ " paragraph contextual summary plus a grouped, linked listing of",
17708
+ " every regulation in the scope (e.g. by jurisdiction). No body",
17709
+ " `# Heading` \u2014 the frontmatter `title:` already renders as the",
17710
+ " page H1.",
17665
17711
  "",
17666
17712
  "8. **Commit and push** the scan report and the scope index page.",
17667
17713
  " Close the scan issue.",
@@ -18519,8 +18565,6 @@ function buildRequirementsAnalystSubAgent(paths) {
18519
18565
  " status: complete",
18520
18566
  " ---",
18521
18567
  "",
18522
- " # Requirements Scan: <scope>",
18523
- "",
18524
18568
  " ## Source Documents Reviewed",
18525
18569
  " - <path> \u2014 <brief description>",
18526
18570
  "",
@@ -18656,42 +18700,32 @@ function buildRequirementsAnalystSubAgent(paths) {
18656
18700
  " directory under `<REQUIREMENTS_ROOT>/<category>/` to find the next",
18657
18701
  " available `NNN` for each proposed requirement.",
18658
18702
  "",
18659
- "5. **Create requirement issues.** For each proposal:",
18703
+ "5. **Create requirement issues.** For each proposal, file a",
18704
+ " `req:write` issue using the canonical recipe documented in",
18705
+ " `## Template: req:write` of",
18706
+ " `docs/src/content/docs/agents/issue-templates.md`.",
18660
18707
  "",
18661
18708
  " All `type:requirement` issues default to `priority:medium` (override",
18662
18709
  " only if the proposal's priority was explicitly High or Low). Each",
18663
18710
  " issue must also carry the `req:write` phase label plus the matching",
18664
18711
  " `tier:*` label so the downstream `requirements-writer` bundle picks",
18665
- " it up with the correct tier.",
18666
- "",
18667
- " ```bash",
18668
- " gh issue create \\",
18669
- ' --title "docs(<category>): <PREFIX>-<NNN> \u2014 <title>" \\',
18670
- ' --label "type:requirement" --label "req:write" --label "tier:<tier-slug>" --label "status:ready" --label "priority:medium" \\',
18671
- ' --body "## Objective',
18672
- " Write <PREFIX>-<NNN> \u2014 <title>.",
18673
- "",
18674
- " **Category:** <BR/FR/NFR/TR/ADR/SEC/DR/INT/OPS/UX/MT>",
18675
- " **Tier:** <platform/industry/customer-workflow/consumer-app>",
18676
- " **Output Path:** <REQUIREMENTS_ROOT>/<category-dir>/<PREFIX>-<NNN>-<slug>.md",
18677
- "",
18678
- " ## Context",
18679
- " - **Gap identified by:** requirements scan of <source>",
18680
- " - **Proposals file:** <RESEARCH_REQUIREMENTS_ROOT>/req-proposals-<scope>-<date>.md",
18712
+ " it up with the correct tier. Concretely, the label list includes",
18713
+ ' `--label "type:requirement"`, `--label "req:write"`,',
18714
+ ' `--label "tier:<tier-slug>"`, `--label "status:ready"`, and',
18715
+ ' `--label "priority:medium"`.',
18681
18716
  "",
18682
- " ## Inputs / Read",
18683
- " - **Depends on:** (none)",
18684
- " - **Read:** <RESEARCH_REQUIREMENTS_ROOT>/req-proposals-<scope>-<date>.md, <source docs>",
18717
+ " The body must carry the three writer-required fields in an",
18718
+ " `## Objective` block, written as bold-prefixed lines so the",
18719
+ " writer's intake parser can pull them out:",
18685
18720
  "",
18686
- " ## Acceptance Criteria",
18687
- " - [ ] Requirement document follows <category> template",
18688
- " - [ ] Traceability links to source BCM/competitive/product doc",
18689
- " - [ ] Registry index updated",
18690
- " - [ ] Decision authority rules followed (direct write vs. proposed)",
18721
+ " - `**Category:** <BR/FR/NFR/TR/ADR/SEC/DR/INT/OPS/UX/MT>`",
18722
+ " - `**Tier:** <platform/industry/customer-workflow/consumer-app>`",
18723
+ " - `**Output Path:** <REQUIREMENTS_ROOT>/<category-dir>/<PREFIX>-<NNN>-<slug>.md`",
18691
18724
  "",
18692
- " ## Scope Size",
18693
- ' small"',
18694
- " ```",
18725
+ " Then under `## Inputs / Read`, list the proposals file",
18726
+ " (`<RESEARCH_REQUIREMENTS_ROOT>/req-proposals-<scope>-<date>.md`)",
18727
+ " and any source documents the writer should consult (BCM model",
18728
+ " docs, competitive analyses, product docs).",
18695
18729
  "",
18696
18730
  " When one of Category / Tier / Output Path could not be derived",
18697
18731
  " from the proposal (for example, the proposal omitted the Tier",
@@ -18867,8 +18901,6 @@ var TEMPLATE_BR = `---
18867
18901
  title: "BR-NNN: [Business Requirement Title]"
18868
18902
  ---
18869
18903
 
18870
- # BR-NNN: [Business Requirement Title]
18871
-
18872
18904
  ## Metadata
18873
18905
 
18874
18906
  | Field | Value |
@@ -18976,8 +19008,6 @@ var TEMPLATE_FR = `---
18976
19008
  title: "FR-NNN: [Functional Requirement Title]"
18977
19009
  ---
18978
19010
 
18979
- # FR-NNN: [Functional Requirement Title]
18980
-
18981
19011
  ## Metadata
18982
19012
 
18983
19013
  | Field | Value |
@@ -19117,8 +19147,6 @@ var TEMPLATE_NFR = `---
19117
19147
  title: "NFR-NNN: [Non-Functional Requirement Title]"
19118
19148
  ---
19119
19149
 
19120
- # NFR-NNN: [Non-Functional Requirement Title]
19121
-
19122
19150
  ## Metadata
19123
19151
 
19124
19152
  | Field | Value |
@@ -19219,8 +19247,6 @@ var TEMPLATE_TR = `---
19219
19247
  title: "TR-NNN: [Technical Requirement Title]"
19220
19248
  ---
19221
19249
 
19222
- # TR-NNN: [Technical Requirement Title]
19223
-
19224
19250
  ## Metadata
19225
19251
 
19226
19252
  | Field | Value |
@@ -19372,8 +19398,6 @@ var TEMPLATE_ADR = `---
19372
19398
  title: "ADR-NNN: [Decision Title]"
19373
19399
  ---
19374
19400
 
19375
- # ADR-NNN: [Decision Title]
19376
-
19377
19401
  ## Metadata
19378
19402
 
19379
19403
  | Field | Value |
@@ -19502,8 +19526,6 @@ var TEMPLATE_SEC = `---
19502
19526
  title: "SEC-NNN: [Security Requirement Title]"
19503
19527
  ---
19504
19528
 
19505
- # SEC-NNN: [Security Requirement Title]
19506
-
19507
19529
  ## Metadata
19508
19530
 
19509
19531
  | Field | Value |
@@ -19615,8 +19637,6 @@ var TEMPLATE_DR = `---
19615
19637
  title: "DR-NNN: [Data Requirement Title]"
19616
19638
  ---
19617
19639
 
19618
- # DR-NNN: [Data Requirement Title]
19619
-
19620
19640
  ## Metadata
19621
19641
 
19622
19642
  | Field | Value |
@@ -19731,8 +19751,6 @@ var TEMPLATE_INT = `---
19731
19751
  title: "INT-NNN: [Integration Requirement Title]"
19732
19752
  ---
19733
19753
 
19734
- # INT-NNN: [Integration Requirement Title]
19735
-
19736
19754
  ## Metadata
19737
19755
 
19738
19756
  | Field | Value |
@@ -19864,8 +19882,6 @@ var TEMPLATE_OPS = `---
19864
19882
  title: "OPS-NNN: [Operational Requirement Title]"
19865
19883
  ---
19866
19884
 
19867
- # OPS-NNN: [Operational Requirement Title]
19868
-
19869
19885
  ## Metadata
19870
19886
 
19871
19887
  | Field | Value |
@@ -19980,8 +19996,6 @@ var TEMPLATE_UX = `---
19980
19996
  title: "UX-NNN: [UX Requirement Title]"
19981
19997
  ---
19982
19998
 
19983
- # UX-NNN: [UX Requirement Title]
19984
-
19985
19999
  ## Metadata
19986
20000
 
19987
20001
  | Field | Value |
@@ -20098,8 +20112,6 @@ var TEMPLATE_MT = `---
20098
20112
  title: "MT-NNN: [Multi-Tenancy Requirement Title]"
20099
20113
  ---
20100
20114
 
20101
- # MT-NNN: [Multi-Tenancy Requirement Title]
20102
-
20103
20115
  ## Metadata
20104
20116
 
20105
20117
  | Field | Value |
@@ -20252,8 +20264,6 @@ var TEMPLATE_REQUIREMENTS_README = `---
20252
20264
  title: "[Project Name] \u2014 Requirements Documentation"
20253
20265
  ---
20254
20266
 
20255
- # [Project Name] \u2014 Requirements Documentation
20256
-
20257
20267
  This directory contains the structured requirements taxonomy for [Project Name]. It covers the full lifecycle from business intent through operational concerns, providing traceability between strategic goals and implementation work.
20258
20268
 
20259
20269
  ## Taxonomy Overview
@@ -21010,12 +21020,9 @@ function buildRequirementsWriterSubAgent(paths) {
21010
21020
  "tier: platform",
21011
21021
  "---",
21012
21022
  "",
21013
- "# FR-001: User Registration",
21014
- "",
21015
21023
  "...",
21016
21024
  "```",
21017
21025
  "",
21018
- "The `title` value must match the document's `# Heading` line.",
21019
21026
  "Titles containing colons must be wrapped in double quotes. The",
21020
21027
  "`tier` field must be one of `platform`, `industry`,",
21021
21028
  "`customer-workflow`, or `consumer-app` (use whatever tier slugs the",
@@ -23079,8 +23086,6 @@ function buildResearchAnalystSubAgent(paths) {
23079
23086
  " slice_count: <N>",
23080
23087
  " ---",
23081
23088
  "",
23082
- " # Research Scope: <question>",
23083
- "",
23084
23089
  " ## Question",
23085
23090
  " <verbatim question from the issue>",
23086
23091
  "",
@@ -23150,8 +23155,6 @@ function buildResearchAnalystSubAgent(paths) {
23150
23155
  " parent_issue: <N>",
23151
23156
  " ---",
23152
23157
  "",
23153
- " # Slice NN: <title>",
23154
- "",
23155
23158
  " ## Question",
23156
23159
  " <the slice-level question>",
23157
23160
  "",
@@ -23216,8 +23219,6 @@ function buildResearchAnalystSubAgent(paths) {
23216
23219
  " slices_read: <count>",
23217
23220
  " ---",
23218
23221
  "",
23219
- " # Verification Report: <question>",
23220
- "",
23221
23222
  " ## Acceptance Criteria Coverage",
23222
23223
  " - [x] <criterion> \u2014 covered by slice(s) <NN, NN>",
23223
23224
  " - [ ] <criterion> \u2014 **not covered**; gap noted in deliverable",
@@ -23825,8 +23826,6 @@ function buildSoftwareProfileAnalystSubAgent(paths) {
23825
23826
  " parent_issue: <N>",
23826
23827
  " ---",
23827
23828
  "",
23828
- " # Research Notes: <product name>",
23829
- "",
23830
23829
  " ## Framing",
23831
23830
  " <why this product was requested and what to learn>",
23832
23831
  "",
@@ -23887,8 +23886,6 @@ function buildSoftwareProfileAnalystSubAgent(paths) {
23887
23886
  " notes: <NOTES_DIR>/<PRODUCT_SLUG>.notes.md",
23888
23887
  " ---",
23889
23888
  "",
23890
- " # <product name>",
23891
- "",
23892
23889
  " ## Summary",
23893
23890
  " <2\u20134 sentence elevator description: what it does, who it's for>",
23894
23891
  "",
@@ -23973,8 +23970,6 @@ function buildSoftwareProfileAnalystSubAgent(paths) {
23973
23970
  "updated: YYYY-MM-DD",
23974
23971
  "---",
23975
23972
  "",
23976
- "# Software Feature Matrix",
23977
- "",
23978
23973
  "| product | feature | <segment-1> | <segment-2> | ... | score | source |",
23979
23974
  "|---------|---------|-------------|-------------|-----|-------|--------|",
23980
23975
  "| <slug> | <feature-name> | 0\u20131 | 0\u20131 | ... | <weighted-sum> | <profile-path> |",
@@ -24602,8 +24597,6 @@ title: "<Standard Name>"
24602
24597
  description: "Overview and cross-version comparison of <Standard Name>."
24603
24598
  ---
24604
24599
 
24605
- # <Standard Name>
24606
-
24607
24600
  | Field | Value |
24608
24601
  |-------|-------|
24609
24602
  | **Standard** | <standard name> |
@@ -24921,8 +24914,6 @@ function buildStandardsResearchAnalystSubAgent(paths) {
24921
24914
  " standard: <STANDARD_SLUG>",
24922
24915
  " ---",
24923
24916
  "",
24924
- " # Query Plan: <Standard Name>",
24925
- "",
24926
24917
  " ## Context",
24927
24918
  " <1\u20132 paragraphs on why this standard matters to the consuming",
24928
24919
  " project and what gaps this research campaign fills.>",
@@ -25124,7 +25115,14 @@ function buildStandardsResearchAnalystSubAgent(paths) {
25124
25115
  " the overview page, then populate each section from the version",
25125
25116
  " pages.",
25126
25117
  "",
25127
- "4. **Write the overview page** at `<OVERVIEW_PAGE>`. Fill:",
25118
+ "4. **Write the overview page** at `<OVERVIEW_PAGE>`. Follow",
25119
+ " the `stub-index-convention` rule: the body opens with a",
25120
+ " 1\u20132 paragraph contextual summary of the standard and its",
25121
+ " versions, and the version pages, modules, and extensions",
25122
+ " sections below double as the grouped, linked listing of",
25123
+ " every child page in the standard's folder. No body",
25124
+ " `# Heading` \u2014 the frontmatter `title:` already renders as",
25125
+ " the page H1. Required sections to fill:",
25128
25126
  " - **Version Timeline** \u2014 publication dates, status, milestones",
25129
25127
  " - **Module / Resource Maturity Progression** \u2014 matrix with",
25130
25128
  " modules as rows and versions as columns, using the standard's",
@@ -33085,6 +33083,7 @@ var TypeScriptConfig = class extends import_projen23.Component {
33085
33083
  renderSkillEvalsRuleContent,
33086
33084
  renderSkillEvalsRunnerScript,
33087
33085
  renderSourceTierExamples,
33086
+ renderStubIndexConventionRuleContent,
33088
33087
  renderUnblockDependentsScript,
33089
33088
  renderUnblockDependentsSection,
33090
33089
  requirementsAnalystBundle,