@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.mjs CHANGED
@@ -585,13 +585,16 @@ var agendaAnalystSubAgent = {
585
585
  " `duration_min` \xB1 5 minutes. If it doesn't, adjust section times",
586
586
  " or cut content \u2014 do not ship a math-broken agenda.",
587
587
  "",
588
- "7. **Create the folder `index.md` if missing.** Populate it with:",
588
+ "7. **Create the folder `index.md` if missing.** Populate it",
589
+ " following the `stub-index-convention` rule:",
589
590
  " - Frontmatter `title` (short sidebar label) and `description`",
590
591
  " (one line).",
591
592
  " - A 2\u20134 sentence summary of the meeting's objective and desired",
592
593
  " outcomes pulled from the agenda.",
593
594
  " - A `## Documents` section linking to `./agenda.md` (and",
594
595
  " `./notes.md` once the meeting-analyst produces it).",
596
+ " - No body `# Heading` \u2014 the frontmatter `title:` already",
597
+ " renders as the page H1.",
595
598
  "",
596
599
  " Do NOT set `sidebar.hidden: true` on `index.md` \u2014 it is the page",
597
600
  " that should appear in the sidebar.",
@@ -1355,8 +1358,6 @@ function renderIssueTemplatesStarterPage(_it) {
1355
1358
  "description: Canonical gh issue create recipes \u2014 one per downstream phase label.",
1356
1359
  "---",
1357
1360
  "",
1358
- "# Issue Templates",
1359
- "",
1360
1361
  "This page lists the canonical `gh issue create` recipe for every",
1361
1362
  "downstream issue kind dispatched by an agent in this monorepo.",
1362
1363
  "Bundles and agent prompts cite the matching section below instead",
@@ -2791,6 +2792,71 @@ function assertValidProductContextPath(value) {
2791
2792
  }
2792
2793
  }
2793
2794
 
2795
+ // src/agent/bundles/stub-index-convention.ts
2796
+ function renderStubIndexConventionRuleContent() {
2797
+ return [
2798
+ "# Section Index Pages",
2799
+ "",
2800
+ "When any agent creates or updates an `index.md` (or `README.md`)",
2801
+ "in a docs subdirectory under a Starlight content root, the file's",
2802
+ "body must include:",
2803
+ "",
2804
+ "1. **A 1\u20132 paragraph summary** of the section's purpose and how",
2805
+ " it fits into the larger research, requirements, or capability",
2806
+ " area. Readers landing on the page should understand what's in",
2807
+ " the section without falling back to the sidebar.",
2808
+ "",
2809
+ "2. **A grouped, linked listing of the directory's children**",
2810
+ " (table or bullet list). When a natural taxonomy exists (e.g.",
2811
+ " organizations grouped by sub-segment, regulations grouped by",
2812
+ " jurisdiction, capabilities grouped by tier), use it. Otherwise",
2813
+ " sort alphabetically by title. Every listing entry must link",
2814
+ " to the child page.",
2815
+ "",
2816
+ "3. **No body `# Heading`.** Starlight renders the frontmatter",
2817
+ " `title:` as the page H1 automatically \u2014 a body H1 produces a",
2818
+ " duplicate. The same no-body-H1 contract that applies to skill",
2819
+ " templates and inline agent templates also applies to every",
2820
+ " index page emitted by an agent.",
2821
+ "",
2822
+ "## When this applies",
2823
+ "",
2824
+ "The convention applies to every `index.md` / `README.md` file",
2825
+ "covered by the shared-index path globs documented in the",
2826
+ "`shared-editing-safety` rule:",
2827
+ "",
2828
+ "- `docs/src/content/docs/**/index.md`",
2829
+ "- `docs/src/content/docs/**/README.md`",
2830
+ "",
2831
+ "Any agent that scaffolds a new directory under a Starlight",
2832
+ "content root MUST populate the directory's index page following",
2833
+ "this contract \u2014 a one-sentence stub is not acceptable.",
2834
+ "",
2835
+ "## Reference shapes",
2836
+ "",
2837
+ "Existing rich indexes are the canonical reference shape. Examples:",
2838
+ "",
2839
+ "- A `<MEETINGS_ROOT>/<YYYY-MM-DD>-<slug>/index.md` populated by",
2840
+ " the `agenda-analyst` bundle: frontmatter `title` /",
2841
+ " `description`, a 2\u20134 sentence summary, and a `## Documents`",
2842
+ " section listing every page in the folder.",
2843
+ "- A regulations scope index that opens with two paragraphs of",
2844
+ " context and groups every linked regulation under a",
2845
+ " `## Regulations` table by jurisdiction.",
2846
+ "- A standards-organizations index that groups every linked",
2847
+ " organization under a `## Organizations` heading by role",
2848
+ " (governance, working group, implementer).",
2849
+ "",
2850
+ "## Out of scope",
2851
+ "",
2852
+ "- Auto-generated child listings via Astro/Starlight components.",
2853
+ " Agents emit hand-curated tables or bullet lists; the rule",
2854
+ " defines the shape, not the rendering technology.",
2855
+ "- Backfilling pre-existing stub indexes is a downstream-consumer",
2856
+ " cleanup task, not a configulator change."
2857
+ ].join("\n");
2858
+ }
2859
+
2794
2860
  // src/agent/bundles/base.ts
2795
2861
  var createPackageSkill = {
2796
2862
  name: "create-package",
@@ -3876,6 +3942,16 @@ function buildBaseBundle(paths = DEFAULT_AGENT_PATHS) {
3876
3942
  },
3877
3943
  tags: ["workflow"]
3878
3944
  },
3945
+ {
3946
+ name: "stub-index-convention",
3947
+ 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).",
3948
+ scope: AGENT_RULE_SCOPE.ALWAYS,
3949
+ content: renderStubIndexConventionRuleContent(),
3950
+ platforms: {
3951
+ cursor: { exclude: true }
3952
+ },
3953
+ tags: ["workflow"]
3954
+ },
3879
3955
  {
3880
3956
  name: "skill-evals",
3881
3957
  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.",
@@ -4151,8 +4227,6 @@ function buildBcmWriterSubAgent(paths) {
4151
4227
  " tier: L1 | L2 | L3",
4152
4228
  " ---",
4153
4229
  "",
4154
- " # BCM Outline: <Capability Name>",
4155
- "",
4156
4230
  " ## Capability Name",
4157
4231
  " <noun or noun phrase \u2014 never a verb>",
4158
4232
  "",
@@ -4232,8 +4306,6 @@ function buildBcmWriterSubAgent(paths) {
4232
4306
  " date: YYYY-MM-DD",
4233
4307
  " ---",
4234
4308
  "",
4235
- " # <Capability Name>",
4236
- "",
4237
4309
  " ## Capability Definitions",
4238
4310
  " <1\u20132 sentences from the outline's Proposed Definition, refined>",
4239
4311
  "",
@@ -4643,8 +4715,6 @@ title: "Business Model: <Segment Name>"
4643
4715
  description: "Business Model Canvas analysis for the <segment name> segment of the <industry> industry."
4644
4716
  ---
4645
4717
 
4646
- # Business Model: <Segment Name>
4647
-
4648
4718
  | Field | Value |
4649
4719
  |-------|-------|
4650
4720
  | **Industry** | <industry name> |
@@ -5028,8 +5098,6 @@ function buildBusinessModelsAnalystSubAgent(paths) {
5028
5098
  " status: complete",
5029
5099
  " ---",
5030
5100
  "",
5031
- " # Business Model Scan: <Industry Name>",
5032
- "",
5033
5101
  " ## Source Inputs",
5034
5102
  " - Industry plan: <relative path>",
5035
5103
  " - Prior research: <relative path> (optional)",
@@ -5117,8 +5185,12 @@ function buildBusinessModelsAnalystSubAgent(paths) {
5117
5185
  "",
5118
5186
  "7. **Create the segment index** at",
5119
5187
  " `<BUSINESS_MODELS_ROOT>/<industry>/segments/<SEGMENT_SLUG>/index.md`",
5120
- " if it does not already exist. The index should carry a short",
5121
- " description and link to `./business-model.md`.",
5188
+ " if it does not already exist. Follow the",
5189
+ " `stub-index-convention` rule: a 1\u20132 paragraph summary of the",
5190
+ " segment plus a linked listing of every page in the folder",
5191
+ " (`./business-model.md` and any value-stream / capability pages",
5192
+ " that land later). No body `# Heading` \u2014 the frontmatter",
5193
+ " `title:` already renders as the page H1.",
5122
5194
  "",
5123
5195
  "8. **Create one `business-models:complete` issue** with",
5124
5196
  " `Depends on: #<canvas-issue>`. Its body references the path to",
@@ -5909,8 +5981,6 @@ function buildCompanyProfileAnalystSubAgent(paths) {
5909
5981
  " parent_issue: <N>",
5910
5982
  " ---",
5911
5983
  "",
5912
- " # Research Notes: <company name>",
5913
- "",
5914
5984
  " ## Framing",
5915
5985
  " <why this company was requested and what to learn>",
5916
5986
  "",
@@ -5972,8 +6042,6 @@ function buildCompanyProfileAnalystSubAgent(paths) {
5972
6042
  " referencedIn: []",
5973
6043
  " ---",
5974
6044
  "",
5975
- " # <company name>",
5976
- "",
5977
6045
  " ## Summary",
5978
6046
  " <2\u20134 sentence elevator description: what they do, who they sell to>",
5979
6047
  "",
@@ -6384,8 +6452,6 @@ function buildCompanyProfileAnalystSubAgent(paths) {
6384
6452
  " - <relative path to profile 2>",
6385
6453
  " ---",
6386
6454
  "",
6387
- " # <segment name> Competitive Analysis",
6388
- "",
6389
6455
  " ## Market Overview",
6390
6456
  " <landscape summary \u2014 total players, market structure, trends",
6391
6457
  " visible from the profiles>",
@@ -6948,8 +7014,6 @@ archetype: <ARCHETYPE_SLUG>
6948
7014
  segment: <SEGMENT_SLUG>
6949
7015
  ---
6950
7016
 
6951
- # <Customer Archetype Name>
6952
-
6953
7017
  | Field | Value |
6954
7018
  |-------|-------|
6955
7019
  | **Archetype** | <short noun phrase identifying the archetype> |
@@ -7315,8 +7379,6 @@ function buildCustomerProfileAnalystSubAgent(paths) {
7315
7379
  " scope: <SCOPE_SLUG>",
7316
7380
  " ---",
7317
7381
  "",
7318
- " # Customer Discovery: <Scope>",
7319
- "",
7320
7382
  " ## Scope Context",
7321
7383
  " - **Scope:** <SCOPE_SLUG>",
7322
7384
  " - **Sources scanned:** <counts by source type>",
@@ -7462,8 +7524,6 @@ function buildCustomerProfileAnalystSubAgent(paths) {
7462
7524
  " archetype: <ARCHETYPE_SLUG>",
7463
7525
  " ---",
7464
7526
  "",
7465
- " # Competitors: <Archetype Name>",
7466
- "",
7467
7527
  " ## Market Overview",
7468
7528
  " <Brief overview of the competitive landscape this archetype",
7469
7529
  " evaluates.>",
@@ -9370,8 +9430,6 @@ function buildIndustryDiscoveryAnalystSubAgent(paths) {
9370
9430
  " candidate_count: <N>",
9371
9431
  " ---",
9372
9432
  "",
9373
- " # Industry Candidates: <scope>",
9374
- "",
9375
9433
  " ## Scope",
9376
9434
  " <verbatim scope statement from the issue>",
9377
9435
  "",
@@ -9432,8 +9490,6 @@ function buildIndustryDiscoveryAnalystSubAgent(paths) {
9432
9490
  " threshold: <0.0\u20131.0>",
9433
9491
  " ---",
9434
9492
  "",
9435
- " # Industry Evaluation: <scope>",
9436
- "",
9437
9493
  " ## Fit Rubric",
9438
9494
  " <verbatim rubric table, including weights and threshold>",
9439
9495
  "",
@@ -9490,8 +9546,6 @@ function buildIndustryDiscoveryAnalystSubAgent(paths) {
9490
9546
  " evaluation_source: <EVALUATIONS_DIR>/<DISCOVERY_SLUG>.evaluation.md",
9491
9547
  " ---",
9492
9548
  "",
9493
- " # Industry Plan: <scope>",
9494
- "",
9495
9549
  " ## Cleared Verticals",
9496
9550
  " | Vertical | Score | Downstream Issue |",
9497
9551
  " |----------|-------|------------------|",
@@ -9944,8 +9998,6 @@ function buildMaintenanceAuditSubAgent(paths) {
9944
9998
  " status: complete",
9945
9999
  " ---",
9946
10000
  "",
9947
- " # Maintenance Audit: <AUDIT_SLUG>",
9948
- "",
9949
10001
  " ## Scope",
9950
10002
  " - **Docs root:** `<DOCS_ROOT>`",
9951
10003
  " - **Checks run:** <list of check categories>",
@@ -10067,8 +10119,6 @@ function buildMaintenanceAuditSubAgent(paths) {
10067
10119
  " status: complete",
10068
10120
  " ---",
10069
10121
  "",
10070
- " # Maintenance Fix: <AUDIT_SLUG>",
10071
- "",
10072
10122
  " ## Source Audit Report",
10073
10123
  " <link to the Phase 1 audit report>",
10074
10124
  "",
@@ -10169,8 +10219,6 @@ function buildMaintenanceAuditSubAgent(paths) {
10169
10219
  " status: complete",
10170
10220
  " ---",
10171
10221
  "",
10172
- " # Maintenance Verify: <AUDIT_SLUG>",
10173
- "",
10174
10222
  " ## Source Reports",
10175
10223
  " - Scan report: <link>",
10176
10224
  " - Fix report: <link>",
@@ -14337,8 +14385,6 @@ function buildPeopleProfileAnalystSubAgent(paths) {
14337
14385
  " parent_issue: <N>",
14338
14386
  " ---",
14339
14387
  "",
14340
- " # Research Notes: <person name>",
14341
- "",
14342
14388
  " ## Framing",
14343
14389
  " <why this person was requested and what to learn>",
14344
14390
  "",
@@ -14400,8 +14446,6 @@ function buildPeopleProfileAnalystSubAgent(paths) {
14400
14446
  " notes: <NOTES_DIR>/<PERSON_SLUG>.notes.md",
14401
14447
  " ---",
14402
14448
  "",
14403
- " # <person name>",
14404
- "",
14405
14449
  " ## Summary",
14406
14450
  " <2\u20134 sentence elevator description: who they are, what they do,",
14407
14451
  " why they matter to this project>",
@@ -16985,8 +17029,6 @@ jurisdiction: <federal | state | provincial | international | local>
16985
17029
  industry: <industry-slug or 'platform'>
16986
17030
  ---
16987
17031
 
16988
- # <Regulation Name>
16989
-
16990
17032
  | Field | Value |
16991
17033
  |-------|-------|
16992
17034
  | **Official name** | <full legal name> |
@@ -17357,8 +17399,6 @@ function buildRegulatoryResearchAnalystSubAgent(paths) {
17357
17399
  " scope: <SCOPE_SLUG>",
17358
17400
  " ---",
17359
17401
  "",
17360
- " # Regulatory Scan: <Scope>",
17361
- "",
17362
17402
  " ## Scope Context",
17363
17403
  " - **Scope type:** <industry / jurisdiction / platform>",
17364
17404
  " - **Scope identifier:** <SCOPE_SLUG>",
@@ -17409,7 +17449,12 @@ function buildRegulatoryResearchAnalystSubAgent(paths) {
17409
17449
  "",
17410
17450
  "7. **Create or update the scope index page** at",
17411
17451
  " `<SCOPE_INDEX_PAGE>` so downstream regulations link back to a",
17412
- " coherent landing page for the scope.",
17452
+ " coherent landing page for the scope. Follow the",
17453
+ " `stub-index-convention` rule: the body must carry a 1\u20132",
17454
+ " paragraph contextual summary plus a grouped, linked listing of",
17455
+ " every regulation in the scope (e.g. by jurisdiction). No body",
17456
+ " `# Heading` \u2014 the frontmatter `title:` already renders as the",
17457
+ " page H1.",
17413
17458
  "",
17414
17459
  "8. **Commit and push** the scan report and the scope index page.",
17415
17460
  " Close the scan issue.",
@@ -18267,8 +18312,6 @@ function buildRequirementsAnalystSubAgent(paths) {
18267
18312
  " status: complete",
18268
18313
  " ---",
18269
18314
  "",
18270
- " # Requirements Scan: <scope>",
18271
- "",
18272
18315
  " ## Source Documents Reviewed",
18273
18316
  " - <path> \u2014 <brief description>",
18274
18317
  "",
@@ -18404,42 +18447,32 @@ function buildRequirementsAnalystSubAgent(paths) {
18404
18447
  " directory under `<REQUIREMENTS_ROOT>/<category>/` to find the next",
18405
18448
  " available `NNN` for each proposed requirement.",
18406
18449
  "",
18407
- "5. **Create requirement issues.** For each proposal:",
18450
+ "5. **Create requirement issues.** For each proposal, file a",
18451
+ " `req:write` issue using the canonical recipe documented in",
18452
+ " `## Template: req:write` of",
18453
+ " `docs/src/content/docs/agents/issue-templates.md`.",
18408
18454
  "",
18409
18455
  " All `type:requirement` issues default to `priority:medium` (override",
18410
18456
  " only if the proposal's priority was explicitly High or Low). Each",
18411
18457
  " issue must also carry the `req:write` phase label plus the matching",
18412
18458
  " `tier:*` label so the downstream `requirements-writer` bundle picks",
18413
- " it up with the correct tier.",
18414
- "",
18415
- " ```bash",
18416
- " gh issue create \\",
18417
- ' --title "docs(<category>): <PREFIX>-<NNN> \u2014 <title>" \\',
18418
- ' --label "type:requirement" --label "req:write" --label "tier:<tier-slug>" --label "status:ready" --label "priority:medium" \\',
18419
- ' --body "## Objective',
18420
- " Write <PREFIX>-<NNN> \u2014 <title>.",
18421
- "",
18422
- " **Category:** <BR/FR/NFR/TR/ADR/SEC/DR/INT/OPS/UX/MT>",
18423
- " **Tier:** <platform/industry/customer-workflow/consumer-app>",
18424
- " **Output Path:** <REQUIREMENTS_ROOT>/<category-dir>/<PREFIX>-<NNN>-<slug>.md",
18425
- "",
18426
- " ## Context",
18427
- " - **Gap identified by:** requirements scan of <source>",
18428
- " - **Proposals file:** <RESEARCH_REQUIREMENTS_ROOT>/req-proposals-<scope>-<date>.md",
18459
+ " it up with the correct tier. Concretely, the label list includes",
18460
+ ' `--label "type:requirement"`, `--label "req:write"`,',
18461
+ ' `--label "tier:<tier-slug>"`, `--label "status:ready"`, and',
18462
+ ' `--label "priority:medium"`.',
18429
18463
  "",
18430
- " ## Inputs / Read",
18431
- " - **Depends on:** (none)",
18432
- " - **Read:** <RESEARCH_REQUIREMENTS_ROOT>/req-proposals-<scope>-<date>.md, <source docs>",
18464
+ " The body must carry the three writer-required fields in an",
18465
+ " `## Objective` block, written as bold-prefixed lines so the",
18466
+ " writer's intake parser can pull them out:",
18433
18467
  "",
18434
- " ## Acceptance Criteria",
18435
- " - [ ] Requirement document follows <category> template",
18436
- " - [ ] Traceability links to source BCM/competitive/product doc",
18437
- " - [ ] Registry index updated",
18438
- " - [ ] Decision authority rules followed (direct write vs. proposed)",
18468
+ " - `**Category:** <BR/FR/NFR/TR/ADR/SEC/DR/INT/OPS/UX/MT>`",
18469
+ " - `**Tier:** <platform/industry/customer-workflow/consumer-app>`",
18470
+ " - `**Output Path:** <REQUIREMENTS_ROOT>/<category-dir>/<PREFIX>-<NNN>-<slug>.md`",
18439
18471
  "",
18440
- " ## Scope Size",
18441
- ' small"',
18442
- " ```",
18472
+ " Then under `## Inputs / Read`, list the proposals file",
18473
+ " (`<RESEARCH_REQUIREMENTS_ROOT>/req-proposals-<scope>-<date>.md`)",
18474
+ " and any source documents the writer should consult (BCM model",
18475
+ " docs, competitive analyses, product docs).",
18443
18476
  "",
18444
18477
  " When one of Category / Tier / Output Path could not be derived",
18445
18478
  " from the proposal (for example, the proposal omitted the Tier",
@@ -18615,8 +18648,6 @@ var TEMPLATE_BR = `---
18615
18648
  title: "BR-NNN: [Business Requirement Title]"
18616
18649
  ---
18617
18650
 
18618
- # BR-NNN: [Business Requirement Title]
18619
-
18620
18651
  ## Metadata
18621
18652
 
18622
18653
  | Field | Value |
@@ -18724,8 +18755,6 @@ var TEMPLATE_FR = `---
18724
18755
  title: "FR-NNN: [Functional Requirement Title]"
18725
18756
  ---
18726
18757
 
18727
- # FR-NNN: [Functional Requirement Title]
18728
-
18729
18758
  ## Metadata
18730
18759
 
18731
18760
  | Field | Value |
@@ -18865,8 +18894,6 @@ var TEMPLATE_NFR = `---
18865
18894
  title: "NFR-NNN: [Non-Functional Requirement Title]"
18866
18895
  ---
18867
18896
 
18868
- # NFR-NNN: [Non-Functional Requirement Title]
18869
-
18870
18897
  ## Metadata
18871
18898
 
18872
18899
  | Field | Value |
@@ -18967,8 +18994,6 @@ var TEMPLATE_TR = `---
18967
18994
  title: "TR-NNN: [Technical Requirement Title]"
18968
18995
  ---
18969
18996
 
18970
- # TR-NNN: [Technical Requirement Title]
18971
-
18972
18997
  ## Metadata
18973
18998
 
18974
18999
  | Field | Value |
@@ -19120,8 +19145,6 @@ var TEMPLATE_ADR = `---
19120
19145
  title: "ADR-NNN: [Decision Title]"
19121
19146
  ---
19122
19147
 
19123
- # ADR-NNN: [Decision Title]
19124
-
19125
19148
  ## Metadata
19126
19149
 
19127
19150
  | Field | Value |
@@ -19250,8 +19273,6 @@ var TEMPLATE_SEC = `---
19250
19273
  title: "SEC-NNN: [Security Requirement Title]"
19251
19274
  ---
19252
19275
 
19253
- # SEC-NNN: [Security Requirement Title]
19254
-
19255
19276
  ## Metadata
19256
19277
 
19257
19278
  | Field | Value |
@@ -19363,8 +19384,6 @@ var TEMPLATE_DR = `---
19363
19384
  title: "DR-NNN: [Data Requirement Title]"
19364
19385
  ---
19365
19386
 
19366
- # DR-NNN: [Data Requirement Title]
19367
-
19368
19387
  ## Metadata
19369
19388
 
19370
19389
  | Field | Value |
@@ -19479,8 +19498,6 @@ var TEMPLATE_INT = `---
19479
19498
  title: "INT-NNN: [Integration Requirement Title]"
19480
19499
  ---
19481
19500
 
19482
- # INT-NNN: [Integration Requirement Title]
19483
-
19484
19501
  ## Metadata
19485
19502
 
19486
19503
  | Field | Value |
@@ -19612,8 +19629,6 @@ var TEMPLATE_OPS = `---
19612
19629
  title: "OPS-NNN: [Operational Requirement Title]"
19613
19630
  ---
19614
19631
 
19615
- # OPS-NNN: [Operational Requirement Title]
19616
-
19617
19632
  ## Metadata
19618
19633
 
19619
19634
  | Field | Value |
@@ -19728,8 +19743,6 @@ var TEMPLATE_UX = `---
19728
19743
  title: "UX-NNN: [UX Requirement Title]"
19729
19744
  ---
19730
19745
 
19731
- # UX-NNN: [UX Requirement Title]
19732
-
19733
19746
  ## Metadata
19734
19747
 
19735
19748
  | Field | Value |
@@ -19846,8 +19859,6 @@ var TEMPLATE_MT = `---
19846
19859
  title: "MT-NNN: [Multi-Tenancy Requirement Title]"
19847
19860
  ---
19848
19861
 
19849
- # MT-NNN: [Multi-Tenancy Requirement Title]
19850
-
19851
19862
  ## Metadata
19852
19863
 
19853
19864
  | Field | Value |
@@ -20000,8 +20011,6 @@ var TEMPLATE_REQUIREMENTS_README = `---
20000
20011
  title: "[Project Name] \u2014 Requirements Documentation"
20001
20012
  ---
20002
20013
 
20003
- # [Project Name] \u2014 Requirements Documentation
20004
-
20005
20014
  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.
20006
20015
 
20007
20016
  ## Taxonomy Overview
@@ -20758,12 +20767,9 @@ function buildRequirementsWriterSubAgent(paths) {
20758
20767
  "tier: platform",
20759
20768
  "---",
20760
20769
  "",
20761
- "# FR-001: User Registration",
20762
- "",
20763
20770
  "...",
20764
20771
  "```",
20765
20772
  "",
20766
- "The `title` value must match the document's `# Heading` line.",
20767
20773
  "Titles containing colons must be wrapped in double quotes. The",
20768
20774
  "`tier` field must be one of `platform`, `industry`,",
20769
20775
  "`customer-workflow`, or `consumer-app` (use whatever tier slugs the",
@@ -22827,8 +22833,6 @@ function buildResearchAnalystSubAgent(paths) {
22827
22833
  " slice_count: <N>",
22828
22834
  " ---",
22829
22835
  "",
22830
- " # Research Scope: <question>",
22831
- "",
22832
22836
  " ## Question",
22833
22837
  " <verbatim question from the issue>",
22834
22838
  "",
@@ -22898,8 +22902,6 @@ function buildResearchAnalystSubAgent(paths) {
22898
22902
  " parent_issue: <N>",
22899
22903
  " ---",
22900
22904
  "",
22901
- " # Slice NN: <title>",
22902
- "",
22903
22905
  " ## Question",
22904
22906
  " <the slice-level question>",
22905
22907
  "",
@@ -22964,8 +22966,6 @@ function buildResearchAnalystSubAgent(paths) {
22964
22966
  " slices_read: <count>",
22965
22967
  " ---",
22966
22968
  "",
22967
- " # Verification Report: <question>",
22968
- "",
22969
22969
  " ## Acceptance Criteria Coverage",
22970
22970
  " - [x] <criterion> \u2014 covered by slice(s) <NN, NN>",
22971
22971
  " - [ ] <criterion> \u2014 **not covered**; gap noted in deliverable",
@@ -23573,8 +23573,6 @@ function buildSoftwareProfileAnalystSubAgent(paths) {
23573
23573
  " parent_issue: <N>",
23574
23574
  " ---",
23575
23575
  "",
23576
- " # Research Notes: <product name>",
23577
- "",
23578
23576
  " ## Framing",
23579
23577
  " <why this product was requested and what to learn>",
23580
23578
  "",
@@ -23635,8 +23633,6 @@ function buildSoftwareProfileAnalystSubAgent(paths) {
23635
23633
  " notes: <NOTES_DIR>/<PRODUCT_SLUG>.notes.md",
23636
23634
  " ---",
23637
23635
  "",
23638
- " # <product name>",
23639
- "",
23640
23636
  " ## Summary",
23641
23637
  " <2\u20134 sentence elevator description: what it does, who it's for>",
23642
23638
  "",
@@ -23721,8 +23717,6 @@ function buildSoftwareProfileAnalystSubAgent(paths) {
23721
23717
  "updated: YYYY-MM-DD",
23722
23718
  "---",
23723
23719
  "",
23724
- "# Software Feature Matrix",
23725
- "",
23726
23720
  "| product | feature | <segment-1> | <segment-2> | ... | score | source |",
23727
23721
  "|---------|---------|-------------|-------------|-----|-------|--------|",
23728
23722
  "| <slug> | <feature-name> | 0\u20131 | 0\u20131 | ... | <weighted-sum> | <profile-path> |",
@@ -24350,8 +24344,6 @@ title: "<Standard Name>"
24350
24344
  description: "Overview and cross-version comparison of <Standard Name>."
24351
24345
  ---
24352
24346
 
24353
- # <Standard Name>
24354
-
24355
24347
  | Field | Value |
24356
24348
  |-------|-------|
24357
24349
  | **Standard** | <standard name> |
@@ -24669,8 +24661,6 @@ function buildStandardsResearchAnalystSubAgent(paths) {
24669
24661
  " standard: <STANDARD_SLUG>",
24670
24662
  " ---",
24671
24663
  "",
24672
- " # Query Plan: <Standard Name>",
24673
- "",
24674
24664
  " ## Context",
24675
24665
  " <1\u20132 paragraphs on why this standard matters to the consuming",
24676
24666
  " project and what gaps this research campaign fills.>",
@@ -24872,7 +24862,14 @@ function buildStandardsResearchAnalystSubAgent(paths) {
24872
24862
  " the overview page, then populate each section from the version",
24873
24863
  " pages.",
24874
24864
  "",
24875
- "4. **Write the overview page** at `<OVERVIEW_PAGE>`. Fill:",
24865
+ "4. **Write the overview page** at `<OVERVIEW_PAGE>`. Follow",
24866
+ " the `stub-index-convention` rule: the body opens with a",
24867
+ " 1\u20132 paragraph contextual summary of the standard and its",
24868
+ " versions, and the version pages, modules, and extensions",
24869
+ " sections below double as the grouped, linked listing of",
24870
+ " every child page in the standard's folder. No body",
24871
+ " `# Heading` \u2014 the frontmatter `title:` already renders as",
24872
+ " the page H1. Required sections to fill:",
24876
24873
  " - **Version Timeline** \u2014 publication dates, status, milestones",
24877
24874
  " - **Module / Resource Maturity Progression** \u2014 matrix with",
24878
24875
  " modules as rows and versions as columns, using the standard's",
@@ -32845,6 +32842,7 @@ export {
32845
32842
  renderSkillEvalsRuleContent,
32846
32843
  renderSkillEvalsRunnerScript,
32847
32844
  renderSourceTierExamples,
32845
+ renderStubIndexConventionRuleContent,
32848
32846
  renderUnblockDependentsScript,
32849
32847
  renderUnblockDependentsSection,
32850
32848
  requirementsAnalystBundle,