@codedrifters/configulator 0.0.234 → 0.0.235
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 +256 -80
- package/lib/index.js.map +1 -1
- package/lib/index.mjs +256 -80
- package/lib/index.mjs.map +1 -1
- package/package.json +1 -1
package/lib/index.mjs
CHANGED
|
@@ -7264,6 +7264,106 @@ var projenBundle = {
|
|
|
7264
7264
|
]
|
|
7265
7265
|
};
|
|
7266
7266
|
|
|
7267
|
+
// src/agent/bundles/requirements-taxonomy.ts
|
|
7268
|
+
var REQUIREMENTS_TAXONOMY_TABLE_SECTION = [
|
|
7269
|
+
"## The 11-Category Taxonomy",
|
|
7270
|
+
"",
|
|
7271
|
+
"All requirements follow the BIZBOK-aligned 11-category taxonomy",
|
|
7272
|
+
"below. Getting requirements into the right category matters because",
|
|
7273
|
+
"it determines which template applies, which standards inform it, and",
|
|
7274
|
+
"how it traces to other requirements.",
|
|
7275
|
+
"",
|
|
7276
|
+
"| Category | Prefix | Directory (default) | Question it answers |",
|
|
7277
|
+
"|----------|--------|---------------------|---------------------|",
|
|
7278
|
+
"| Business Requirements | BR | `business/` | **Why** are we building this? What business value does it deliver? |",
|
|
7279
|
+
"| Functional Requirements | FR | `functional/` | **What** does the system do? What is the user-visible behavior? |",
|
|
7280
|
+
"| Non-Functional Requirements | NFR | `non-functional/` | **How well** must the system perform? What quality bar must it meet? |",
|
|
7281
|
+
"| Technical Requirements | TR | `technical/` | **What technology** are we using, and why that one? |",
|
|
7282
|
+
"| Architectural Decisions | ADR | `architectural-decisions/` | **What structural decision** are we making, and what are the trade-offs? |",
|
|
7283
|
+
"| Security & Compliance | SEC | `security/` | **What must we protect**, and what rules govern that protection? |",
|
|
7284
|
+
"| Data Requirements | DR | `data/` | **What data** do we store, how long, and how do we recover it? |",
|
|
7285
|
+
"| Integration Requirements | INT | `integration/` | **What external systems** do we connect to, and how? |",
|
|
7286
|
+
"| Operational Requirements | OPS | `operational/` | **How do we deploy, monitor, and respond** to incidents? |",
|
|
7287
|
+
"| UX Requirements | UX | `ux/` | **How must the interface look, feel, and behave** for users? |",
|
|
7288
|
+
"| Multi-Tenancy & Licensing | MT | `multi-tenancy/` | **How do we isolate tenants, gate features, and meter usage?** |",
|
|
7289
|
+
"",
|
|
7290
|
+
"All requirement documents live under `<REQUIREMENTS_ROOT>` in the",
|
|
7291
|
+
"category directory shown above. Directory names are defaults \u2014",
|
|
7292
|
+
"consuming projects may rename them, but the prefixes are universal."
|
|
7293
|
+
];
|
|
7294
|
+
var REQUIREMENTS_TAXONOMY_DISAMBIGUATION_SECTION = [
|
|
7295
|
+
"- **SEC vs NFR:** Protecting data, enforcing access control, or",
|
|
7296
|
+
" meeting a regulation \u2192 SEC. System performance, uptime, or",
|
|
7297
|
+
' scalability \u2192 NFR. "99.9% uptime" is NFR; "audit logs for all',
|
|
7298
|
+
' admin actions" is SEC.',
|
|
7299
|
+
'- **TR vs ADR:** A TR pins down a specific technology choice ("use',
|
|
7300
|
+
' PostgreSQL 16+"). An ADR records a structural decision with',
|
|
7301
|
+
' context, trade-offs, and alternatives ("why row-level isolation',
|
|
7302
|
+
' over schema-per-tenant"). TRs often follow from ADRs.',
|
|
7303
|
+
"- **FR vs INT:** What the user experiences \u2192 FR. How two systems",
|
|
7304
|
+
' communicate \u2192 INT. "User can pay with a credit card" is FR;',
|
|
7305
|
+
' "Stripe Checkout API integration for payment processing" is INT.',
|
|
7306
|
+
"- **DR vs SEC:** What data exists, how long we keep it, and how we",
|
|
7307
|
+
" recover it \u2192 DR. Who can access it and how it's protected \u2192 SEC.",
|
|
7308
|
+
" These often cross-reference each other.",
|
|
7309
|
+
"- **NFR vs OPS:** A measurable target the system must meet \u2192 NFR.",
|
|
7310
|
+
' The tooling and processes to run the system \u2192 OPS. "p99 latency',
|
|
7311
|
+
' < 200ms" is NFR; "Datadog APM for latency monitoring" is OPS.'
|
|
7312
|
+
];
|
|
7313
|
+
var REQUIREMENTS_TIER_TABLE_SECTION = [
|
|
7314
|
+
"| Tier | Slug | When to use |",
|
|
7315
|
+
"|------|------|-------------|",
|
|
7316
|
+
"| **Platform** | `platform` | Core platform services \u2014 APIs, tenant isolation, auth, event bus, shared infrastructure |",
|
|
7317
|
+
"| **Industry** | `industry` | Vertical-specific capabilities not every tenant needs |",
|
|
7318
|
+
"| **Customer Workflow** | `customer-workflow` | Business logic tenants configure within the platform \u2014 approval chains, notification rules, intake processes |",
|
|
7319
|
+
"| **Consumer Application** | `consumer-app` | UI/UX and integrations in external front-ends/systems consuming the platform's APIs |"
|
|
7320
|
+
];
|
|
7321
|
+
var REQ_WRITE_ISSUE_SCHEMA_SECTION = [
|
|
7322
|
+
"The body of every `req:write` issue **must** declare the three",
|
|
7323
|
+
"fields below. The downstream `requirements-writer` agent parses",
|
|
7324
|
+
"them on intake and will refuse to write a document (and flag the",
|
|
7325
|
+
"issue `status:needs-attention`) if any required field is missing",
|
|
7326
|
+
"or contradictory.",
|
|
7327
|
+
"",
|
|
7328
|
+
"### Required Fields",
|
|
7329
|
+
"",
|
|
7330
|
+
"- **Category:** one of `BR` / `FR` / `NFR` / `TR` / `ADR` / `SEC` /",
|
|
7331
|
+
" `DR` / `INT` / `OPS` / `UX` / `MT`. Must match the category",
|
|
7332
|
+
" prefix in the requirement's title and file name.",
|
|
7333
|
+
"- **Tier:** one of `platform` / `industry` / `customer-workflow` /",
|
|
7334
|
+
" `consumer-app`. Must match the `tier:*` label applied to the",
|
|
7335
|
+
" issue.",
|
|
7336
|
+
"- **Output Path:** absolute-from-repo-root path ending in",
|
|
7337
|
+
" `<PREFIX>-<NNN>-<slug>.md` under the target category directory",
|
|
7338
|
+
" (for example,",
|
|
7339
|
+
" `docs/requirements/functional/FR-012-checkout-flow.md`).",
|
|
7340
|
+
"",
|
|
7341
|
+
"### Strongly Recommended",
|
|
7342
|
+
"",
|
|
7343
|
+
"- **Inputs / Read:** bullet list of source files the writer should",
|
|
7344
|
+
" consult \u2014 the upstream proposal file (when one exists), the",
|
|
7345
|
+
" BCM/source document(s) the proposal cites, and any related",
|
|
7346
|
+
" requirements the new document should trace to. Omit only for",
|
|
7347
|
+
" ad-hoc requirements where no upstream proposal exists; the",
|
|
7348
|
+
" writer will then treat the issue body itself as the input.",
|
|
7349
|
+
"",
|
|
7350
|
+
"### Missing Fields",
|
|
7351
|
+
"",
|
|
7352
|
+
"When an upstream producer cannot derive one of the required",
|
|
7353
|
+
"fields, it **must not** guess a value. Instead it opens the",
|
|
7354
|
+
"`req:write` issue with `status:needs-attention` (not",
|
|
7355
|
+
"`status:ready`) and includes a `Missing:` line listing the",
|
|
7356
|
+
"field(s) that could not be determined. For example:",
|
|
7357
|
+
"",
|
|
7358
|
+
"```",
|
|
7359
|
+
"Missing: Tier \u2014 source document has no tier metadata and the",
|
|
7360
|
+
"referencing requirement is cross-tier.",
|
|
7361
|
+
"```",
|
|
7362
|
+
"",
|
|
7363
|
+
"A human triages the issue, fills in the missing field, and flips",
|
|
7364
|
+
"the label to `status:ready` before the writer picks it up."
|
|
7365
|
+
];
|
|
7366
|
+
|
|
7267
7367
|
// src/agent/bundles/requirements-analyst.ts
|
|
7268
7368
|
var requirementsAnalystSubAgent = {
|
|
7269
7369
|
name: "requirements-analyst",
|
|
@@ -7494,6 +7594,7 @@ var requirementsAnalystSubAgent = {
|
|
|
7494
7594
|
" ## Proposed: <PREFIX>-<NNN> \u2014 <Title>",
|
|
7495
7595
|
"",
|
|
7496
7596
|
" **Category:** <FR/BR/NFR/SEC/DR/INT/OPS/UX/MT/ADR/TR>",
|
|
7597
|
+
" **Tier:** <platform/industry/customer-workflow/consumer-app>",
|
|
7497
7598
|
" **Priority:** <High/Normal/Low>",
|
|
7498
7599
|
" **Source:** <document path and section>",
|
|
7499
7600
|
"",
|
|
@@ -7547,6 +7648,41 @@ var requirementsAnalystSubAgent = {
|
|
|
7547
7648
|
"**Budget:** No web searches. Issue creation + minor edits to source",
|
|
7548
7649
|
"documents.",
|
|
7549
7650
|
"",
|
|
7651
|
+
"### `req:write` issue schema",
|
|
7652
|
+
"",
|
|
7653
|
+
"The `req:write` issues this phase creates are picked up by the",
|
|
7654
|
+
"downstream `requirements-writer` agent, which parses a strict",
|
|
7655
|
+
"schema on intake. The authoritative schema is defined in the",
|
|
7656
|
+
"`requirements-writer` sub-agent prompt under **The `req:write`",
|
|
7657
|
+
"Issue Schema** \u2014 every `req:write` issue this phase opens must",
|
|
7658
|
+
"conform. The same schema is embedded in the",
|
|
7659
|
+
"`requirements-reviewer` follow-up generator so the three",
|
|
7660
|
+
"producers never drift apart.",
|
|
7661
|
+
"",
|
|
7662
|
+
...REQ_WRITE_ISSUE_SCHEMA_SECTION,
|
|
7663
|
+
"",
|
|
7664
|
+
"**Deriving the three required fields from the proposal.** For",
|
|
7665
|
+
"every `req:write` issue this phase opens, the three fields come",
|
|
7666
|
+
"directly from the Phase 2 proposal entry:",
|
|
7667
|
+
"",
|
|
7668
|
+
"- **Category** \u2014 the proposal's `**Category:**` line.",
|
|
7669
|
+
"- **Tier** \u2014 the proposal's `**Tier:**` line (added in Phase 2).",
|
|
7670
|
+
" If the proposal omitted the Tier line (older proposals may),",
|
|
7671
|
+
" route the issue through `Missing:` rather than guessing.",
|
|
7672
|
+
"- **Output Path** \u2014",
|
|
7673
|
+
" `<REQUIREMENTS_ROOT>/<category-dir>/<PREFIX>-<NNN>-<slug>.md`,",
|
|
7674
|
+
" using the sequence number determined in Phase 2 step 4.",
|
|
7675
|
+
"",
|
|
7676
|
+
"**Validation step \u2014 required before opening the issue.** Before",
|
|
7677
|
+
"calling `gh issue create`, verify all three required fields are",
|
|
7678
|
+
"populated and internally consistent (Category matches title",
|
|
7679
|
+
"prefix, Tier matches `tier:*` label, Output Path filename starts",
|
|
7680
|
+
"with the Category prefix). If any field cannot be derived, open",
|
|
7681
|
+
"the issue with `status:needs-attention` (not `status:ready`) and",
|
|
7682
|
+
"include a `Missing: <field> \u2014 <one-line reason>` line so a human",
|
|
7683
|
+
"triaging the issue only has to supply the remaining value(s)",
|
|
7684
|
+
"before flipping the label to `status:ready`.",
|
|
7685
|
+
"",
|
|
7550
7686
|
"### Steps",
|
|
7551
7687
|
"",
|
|
7552
7688
|
"1. **Read the proposals** from Phase 2.",
|
|
@@ -7555,21 +7691,26 @@ var requirementsAnalystSubAgent = {
|
|
|
7555
7691
|
"",
|
|
7556
7692
|
" All `type:requirement` issues default to `priority:medium` (override",
|
|
7557
7693
|
" only if the proposal's priority was explicitly High or Low). Each",
|
|
7558
|
-
" issue must also carry the `req:write` phase label
|
|
7559
|
-
" `requirements-writer` bundle picks
|
|
7694
|
+
" issue must also carry the `req:write` phase label plus the matching",
|
|
7695
|
+
" `tier:*` label so the downstream `requirements-writer` bundle picks",
|
|
7696
|
+
" it up with the correct tier.",
|
|
7560
7697
|
"",
|
|
7561
7698
|
" ```bash",
|
|
7562
7699
|
" gh issue create \\",
|
|
7563
7700
|
' --title "docs(<category>): <PREFIX>-<NNN> \u2014 <title>" \\',
|
|
7564
|
-
' --label "type:requirement" --label "req:write" --label "status:ready" --label "priority:medium" \\',
|
|
7701
|
+
' --label "type:requirement" --label "req:write" --label "tier:<tier-slug>" --label "status:ready" --label "priority:medium" \\',
|
|
7565
7702
|
' --body "## Objective',
|
|
7566
7703
|
" Write <PREFIX>-<NNN> \u2014 <title>.",
|
|
7567
7704
|
"",
|
|
7705
|
+
" **Category:** <BR/FR/NFR/TR/ADR/SEC/DR/INT/OPS/UX/MT>",
|
|
7706
|
+
" **Tier:** <platform/industry/customer-workflow/consumer-app>",
|
|
7707
|
+
" **Output Path:** <REQUIREMENTS_ROOT>/<category-dir>/<PREFIX>-<NNN>-<slug>.md",
|
|
7708
|
+
"",
|
|
7568
7709
|
" ## Context",
|
|
7569
7710
|
" - **Gap identified by:** requirements scan of <source>",
|
|
7570
7711
|
" - **Proposals file:** <RESEARCH_REQUIREMENTS_ROOT>/req-proposals-<scope>-<date>.md",
|
|
7571
7712
|
"",
|
|
7572
|
-
" ## Inputs",
|
|
7713
|
+
" ## Inputs / Read",
|
|
7573
7714
|
" - **Depends on:** (none)",
|
|
7574
7715
|
" - **Read:** <RESEARCH_REQUIREMENTS_ROOT>/req-proposals-<scope>-<date>.md, <source docs>",
|
|
7575
7716
|
"",
|
|
@@ -7580,12 +7721,17 @@ var requirementsAnalystSubAgent = {
|
|
|
7580
7721
|
" - [ ] Decision authority rules followed (direct write vs. proposed)",
|
|
7581
7722
|
"",
|
|
7582
7723
|
" ## Scope Size",
|
|
7583
|
-
|
|
7584
|
-
"",
|
|
7585
|
-
" ## Output Path",
|
|
7586
|
-
' <REQUIREMENTS_ROOT>/<category>/<PREFIX>-<NNN>-<slug>.md"',
|
|
7724
|
+
' small"',
|
|
7587
7725
|
" ```",
|
|
7588
7726
|
"",
|
|
7727
|
+
" When one of Category / Tier / Output Path could not be derived",
|
|
7728
|
+
" from the proposal (for example, the proposal omitted the Tier",
|
|
7729
|
+
" line), replace `status:ready` with `status:needs-attention` in",
|
|
7730
|
+
" the label list and add a `Missing: <field> \u2014 <reason>` line",
|
|
7731
|
+
" directly below the Output Path line in the body. Populate",
|
|
7732
|
+
" whichever of the three fields **could** be derived so a human",
|
|
7733
|
+
" triaging the issue has the minimum possible cleanup.",
|
|
7734
|
+
"",
|
|
7589
7735
|
"3. **Update source documents.** In each BCM model doc or competitive",
|
|
7590
7736
|
" analysis that was scanned, add a note in the project-relevance /",
|
|
7591
7737
|
" strategic-implications section (whichever heading the source doc uses)",
|
|
@@ -7746,61 +7892,6 @@ var requirementsAnalystBundle = {
|
|
|
7746
7892
|
]
|
|
7747
7893
|
};
|
|
7748
7894
|
|
|
7749
|
-
// src/agent/bundles/requirements-taxonomy.ts
|
|
7750
|
-
var REQUIREMENTS_TAXONOMY_TABLE_SECTION = [
|
|
7751
|
-
"## The 11-Category Taxonomy",
|
|
7752
|
-
"",
|
|
7753
|
-
"All requirements follow the BIZBOK-aligned 11-category taxonomy",
|
|
7754
|
-
"below. Getting requirements into the right category matters because",
|
|
7755
|
-
"it determines which template applies, which standards inform it, and",
|
|
7756
|
-
"how it traces to other requirements.",
|
|
7757
|
-
"",
|
|
7758
|
-
"| Category | Prefix | Directory (default) | Question it answers |",
|
|
7759
|
-
"|----------|--------|---------------------|---------------------|",
|
|
7760
|
-
"| Business Requirements | BR | `business/` | **Why** are we building this? What business value does it deliver? |",
|
|
7761
|
-
"| Functional Requirements | FR | `functional/` | **What** does the system do? What is the user-visible behavior? |",
|
|
7762
|
-
"| Non-Functional Requirements | NFR | `non-functional/` | **How well** must the system perform? What quality bar must it meet? |",
|
|
7763
|
-
"| Technical Requirements | TR | `technical/` | **What technology** are we using, and why that one? |",
|
|
7764
|
-
"| Architectural Decisions | ADR | `architectural-decisions/` | **What structural decision** are we making, and what are the trade-offs? |",
|
|
7765
|
-
"| Security & Compliance | SEC | `security/` | **What must we protect**, and what rules govern that protection? |",
|
|
7766
|
-
"| Data Requirements | DR | `data/` | **What data** do we store, how long, and how do we recover it? |",
|
|
7767
|
-
"| Integration Requirements | INT | `integration/` | **What external systems** do we connect to, and how? |",
|
|
7768
|
-
"| Operational Requirements | OPS | `operational/` | **How do we deploy, monitor, and respond** to incidents? |",
|
|
7769
|
-
"| UX Requirements | UX | `ux/` | **How must the interface look, feel, and behave** for users? |",
|
|
7770
|
-
"| Multi-Tenancy & Licensing | MT | `multi-tenancy/` | **How do we isolate tenants, gate features, and meter usage?** |",
|
|
7771
|
-
"",
|
|
7772
|
-
"All requirement documents live under `<REQUIREMENTS_ROOT>` in the",
|
|
7773
|
-
"category directory shown above. Directory names are defaults \u2014",
|
|
7774
|
-
"consuming projects may rename them, but the prefixes are universal."
|
|
7775
|
-
];
|
|
7776
|
-
var REQUIREMENTS_TAXONOMY_DISAMBIGUATION_SECTION = [
|
|
7777
|
-
"- **SEC vs NFR:** Protecting data, enforcing access control, or",
|
|
7778
|
-
" meeting a regulation \u2192 SEC. System performance, uptime, or",
|
|
7779
|
-
' scalability \u2192 NFR. "99.9% uptime" is NFR; "audit logs for all',
|
|
7780
|
-
' admin actions" is SEC.',
|
|
7781
|
-
'- **TR vs ADR:** A TR pins down a specific technology choice ("use',
|
|
7782
|
-
' PostgreSQL 16+"). An ADR records a structural decision with',
|
|
7783
|
-
' context, trade-offs, and alternatives ("why row-level isolation',
|
|
7784
|
-
' over schema-per-tenant"). TRs often follow from ADRs.',
|
|
7785
|
-
"- **FR vs INT:** What the user experiences \u2192 FR. How two systems",
|
|
7786
|
-
' communicate \u2192 INT. "User can pay with a credit card" is FR;',
|
|
7787
|
-
' "Stripe Checkout API integration for payment processing" is INT.',
|
|
7788
|
-
"- **DR vs SEC:** What data exists, how long we keep it, and how we",
|
|
7789
|
-
" recover it \u2192 DR. Who can access it and how it's protected \u2192 SEC.",
|
|
7790
|
-
" These often cross-reference each other.",
|
|
7791
|
-
"- **NFR vs OPS:** A measurable target the system must meet \u2192 NFR.",
|
|
7792
|
-
' The tooling and processes to run the system \u2192 OPS. "p99 latency',
|
|
7793
|
-
' < 200ms" is NFR; "Datadog APM for latency monitoring" is OPS.'
|
|
7794
|
-
];
|
|
7795
|
-
var REQUIREMENTS_TIER_TABLE_SECTION = [
|
|
7796
|
-
"| Tier | Slug | When to use |",
|
|
7797
|
-
"|------|------|-------------|",
|
|
7798
|
-
"| **Platform** | `platform` | Core platform services \u2014 APIs, tenant isolation, auth, event bus, shared infrastructure |",
|
|
7799
|
-
"| **Industry** | `industry` | Vertical-specific capabilities not every tenant needs |",
|
|
7800
|
-
"| **Customer Workflow** | `customer-workflow` | Business logic tenants configure within the platform \u2014 approval chains, notification rules, intake processes |",
|
|
7801
|
-
"| **Consumer Application** | `consumer-app` | UI/UX and integrations in external front-ends/systems consuming the platform's APIs |"
|
|
7802
|
-
];
|
|
7803
|
-
|
|
7804
7895
|
// src/agent/bundles/requirements-writer.ts
|
|
7805
7896
|
var TEMPLATE_BR = `---
|
|
7806
7897
|
title: "BR-NNN: [Business Requirement Title]"
|
|
@@ -10079,6 +10170,19 @@ var requirementsWriterSubAgent = {
|
|
|
10079
10170
|
"",
|
|
10080
10171
|
"---",
|
|
10081
10172
|
"",
|
|
10173
|
+
"## The `req:write` Issue Schema",
|
|
10174
|
+
"",
|
|
10175
|
+
"This section is the **authoritative schema** for `req:write` issue",
|
|
10176
|
+
"bodies. Upstream producers (the `requirements-analyst` trace phase,",
|
|
10177
|
+
"the `requirements-reviewer` follow-up generator, and any human",
|
|
10178
|
+
"authoring a `req:write` issue directly) must embed or link to this",
|
|
10179
|
+
"same schema so the three required fields are always present when",
|
|
10180
|
+
"the writer picks the issue up.",
|
|
10181
|
+
"",
|
|
10182
|
+
...REQ_WRITE_ISSUE_SCHEMA_SECTION,
|
|
10183
|
+
"",
|
|
10184
|
+
"---",
|
|
10185
|
+
"",
|
|
10082
10186
|
"## The `req:write` Phase",
|
|
10083
10187
|
"",
|
|
10084
10188
|
"**Goal:** Read the proposal that produced this issue, write a single",
|
|
@@ -10093,14 +10197,25 @@ var requirementsWriterSubAgent = {
|
|
|
10093
10197
|
"",
|
|
10094
10198
|
"### Steps",
|
|
10095
10199
|
"",
|
|
10096
|
-
"1. **Parse the issue.** The `req:write` issue body
|
|
10097
|
-
"
|
|
10098
|
-
"
|
|
10099
|
-
"
|
|
10100
|
-
"
|
|
10101
|
-
"
|
|
10102
|
-
"
|
|
10103
|
-
"
|
|
10200
|
+
"1. **Parse the issue.** The `req:write` issue body follows the",
|
|
10201
|
+
" authoritative schema in the",
|
|
10202
|
+
" [The `req:write` Issue Schema](#the-reqwrite-issue-schema)",
|
|
10203
|
+
" section below. Before writing, verify every required field",
|
|
10204
|
+
" (Category, Tier, Output Path) is present and internally",
|
|
10205
|
+
" consistent:",
|
|
10206
|
+
"",
|
|
10207
|
+
" - Category matches the prefix on the requirement title and on",
|
|
10208
|
+
" the Output Path filename.",
|
|
10209
|
+
" - Tier matches the `tier:*` label applied to the issue.",
|
|
10210
|
+
" - Output Path sits under",
|
|
10211
|
+
" `<REQUIREMENTS_ROOT>/<category-dir>/<PREFIX>-<NNN>-<slug>.md`.",
|
|
10212
|
+
"",
|
|
10213
|
+
" If any required field is missing, contradictory, or the issue",
|
|
10214
|
+
" already carries `status:needs-attention` with a `Missing:` line",
|
|
10215
|
+
" (upstream could not derive it), comment on the issue with",
|
|
10216
|
+
" which field is wrong, ensure `status:needs-attention` is set,",
|
|
10217
|
+
" and stop without writing. A human triages before the writer",
|
|
10218
|
+
" tries again.",
|
|
10104
10219
|
"",
|
|
10105
10220
|
"2. **Read the proposal.** Open the proposals file referenced in the",
|
|
10106
10221
|
" issue inputs (under `<RESEARCH_REQUIREMENTS_ROOT>`). Find the",
|
|
@@ -10992,7 +11107,9 @@ var requirementsReviewerSubAgent = {
|
|
|
10992
11107
|
" `requirements-writer` agent picks it up to revise the",
|
|
10993
11108
|
" document). Only the writer is scoped to edit requirement",
|
|
10994
11109
|
" documents, so anything that requires an in-place edit under",
|
|
10995
|
-
" `<REQUIREMENTS_ROOT>` routes here.",
|
|
11110
|
+
" `<REQUIREMENTS_ROOT>` routes here. `req:write` follow-ups",
|
|
11111
|
+
" must also carry the matching `tier:*` label and an issue",
|
|
11112
|
+
" body that conforms to the `req:write` issue schema below.",
|
|
10996
11113
|
" - Missing traceability in **source documents** \u2014 BCM model",
|
|
10997
11114
|
" docs, competitive-analysis notes, product-roadmap entries,",
|
|
10998
11115
|
" meeting extracts \u2014 that should link forward to an existing",
|
|
@@ -11013,6 +11130,54 @@ var requirementsReviewerSubAgent = {
|
|
|
11013
11130
|
"- Adds `status:ready` (or `status:blocked` when the finding",
|
|
11014
11131
|
" declares a `Depends on: #N` on another open issue)",
|
|
11015
11132
|
"",
|
|
11133
|
+
"### `req:write` follow-up schema",
|
|
11134
|
+
"",
|
|
11135
|
+
"Because this bundle is the second-largest producer of `req:write`",
|
|
11136
|
+
"issues (the analyst's trace phase is the first), every `req:write`",
|
|
11137
|
+
"follow-up opened in either the review phase or the deprecation",
|
|
11138
|
+
"phase must satisfy the schema the writer parses on intake:",
|
|
11139
|
+
"",
|
|
11140
|
+
...REQ_WRITE_ISSUE_SCHEMA_SECTION,
|
|
11141
|
+
"",
|
|
11142
|
+
"**Deriving the three required fields from the target document.**",
|
|
11143
|
+
"For every structural-repair follow-up the reviewer generates, the",
|
|
11144
|
+
"three fields come directly from the requirement document being",
|
|
11145
|
+
"edited:",
|
|
11146
|
+
"",
|
|
11147
|
+
"- **Category** \u2014 read the category prefix from the document's",
|
|
11148
|
+
" filename (`FR-012-...` \u2192 `FR`). Confirm against the frontmatter",
|
|
11149
|
+
" / Metadata table `ID` row and the document's `# Heading`. If",
|
|
11150
|
+
" the three disagree, route through `Missing:` with the",
|
|
11151
|
+
" disagreement noted rather than picking one.",
|
|
11152
|
+
"- **Tier** \u2014 read the Metadata table `Tier` row. Normalize to the",
|
|
11153
|
+
" slug form (`platform`, `industry`, `customer-workflow`,",
|
|
11154
|
+
" `consumer-app`). If the Tier row is missing, empty, or set to",
|
|
11155
|
+
" a value outside the four-tier taxonomy, route through",
|
|
11156
|
+
" `Missing:`.",
|
|
11157
|
+
"- **Output Path** \u2014 the current absolute-from-repo-root path of",
|
|
11158
|
+
" the document being edited. The writer edits in place; the path",
|
|
11159
|
+
" does not change for a structural repair.",
|
|
11160
|
+
"",
|
|
11161
|
+
"For deprecation back-reference follow-ups, the three fields come",
|
|
11162
|
+
"from the **referencing** document (the one that still mentions",
|
|
11163
|
+
"the deprecated ID), not the deprecated target itself.",
|
|
11164
|
+
"",
|
|
11165
|
+
"**Validation step \u2014 required before opening the issue.** The",
|
|
11166
|
+
"reviewer asserts all three required fields are populated before",
|
|
11167
|
+
"it calls `gh issue create`. If any field cannot be derived:",
|
|
11168
|
+
"",
|
|
11169
|
+
"1. Open the follow-up with `status:needs-attention` (not",
|
|
11170
|
+
" `status:ready`).",
|
|
11171
|
+
"2. Include a `Missing: <field> \u2014 <one-line reason>` line at the",
|
|
11172
|
+
" top of the body explaining which field could not be",
|
|
11173
|
+
" determined and why (e.g., `Missing: Tier \u2014 Metadata table",
|
|
11174
|
+
" has no Tier row and the document predates the four-tier",
|
|
11175
|
+
" classification`).",
|
|
11176
|
+
"3. Populate whichever of the three fields **could** be derived",
|
|
11177
|
+
" so a human triaging the issue only has to supply the",
|
|
11178
|
+
" remaining value(s) before flipping the label to",
|
|
11179
|
+
" `status:ready`.",
|
|
11180
|
+
"",
|
|
11016
11181
|
"**Do NOT create:**",
|
|
11017
11182
|
"",
|
|
11018
11183
|
"- `req:review` issues \u2014 that would be self-referential",
|
|
@@ -11190,15 +11355,26 @@ var requirementsReviewerSubAgent = {
|
|
|
11190
11355
|
" references that a single writer session can address together).",
|
|
11191
11356
|
"- The issue title must be",
|
|
11192
11357
|
" `req(deprecate): update references to <deprecated-ID> in <referencing-ID>`.",
|
|
11193
|
-
"- The body must
|
|
11194
|
-
"
|
|
11195
|
-
"
|
|
11196
|
-
"
|
|
11197
|
-
"
|
|
11198
|
-
"
|
|
11358
|
+
"- The body must conform to the `req:write` issue schema defined",
|
|
11359
|
+
" in the review phase's **`req:write` follow-up schema** section",
|
|
11360
|
+
" above: Category, Tier, and Output Path derived from the",
|
|
11361
|
+
" **referencing** document (not the deprecated target) via the",
|
|
11362
|
+
" same rules \u2014 prefix from filename, Tier from the Metadata",
|
|
11363
|
+
" table, Output Path is the referencing document's current path.",
|
|
11364
|
+
" In addition, the body must include: the deprecated document",
|
|
11365
|
+
" path, the successor path (when applicable), the list of line",
|
|
11366
|
+
" ranges that mention the deprecated ID, the `req:deprecate`",
|
|
11367
|
+
" issue number, and a short instruction asking the writer to",
|
|
11368
|
+
" either remove the reference, point it at the successor, or",
|
|
11369
|
+
" convert it to a historical note (the writer decides per",
|
|
11199
11370
|
" reference).",
|
|
11200
|
-
"- Labels: `type:requirement`, `req:write`,
|
|
11201
|
-
" `
|
|
11371
|
+
"- Labels: `type:requirement`, `req:write`, the matching",
|
|
11372
|
+
" `tier:*` label derived from the referencing document's Tier,",
|
|
11373
|
+
" `priority:medium`, `status:ready`.",
|
|
11374
|
+
"- If any of Category / Tier / Output Path cannot be derived from",
|
|
11375
|
+
" the referencing document, open the follow-up with",
|
|
11376
|
+
" `status:needs-attention` and a `Missing:` line, per the same",
|
|
11377
|
+
" validation rule that applies in the review phase.",
|
|
11202
11378
|
"- Body must include `Depends on: #<req:deprecate issue number>`",
|
|
11203
11379
|
" when the rewrite should wait for the deprecation to land, or",
|
|
11204
11380
|
" omit that line when the rewrite can run in parallel.",
|