@codedrifters/configulator 0.0.233 → 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.d.mts +10 -8
- package/lib/index.d.ts +10 -8
- package/lib/index.js +728 -137
- package/lib/index.js.map +1 -1
- package/lib/index.mjs +728 -137
- package/lib/index.mjs.map +1 -1
- package/package.json +1 -1
package/lib/index.js
CHANGED
|
@@ -7342,6 +7342,106 @@ var projenBundle = {
|
|
|
7342
7342
|
]
|
|
7343
7343
|
};
|
|
7344
7344
|
|
|
7345
|
+
// src/agent/bundles/requirements-taxonomy.ts
|
|
7346
|
+
var REQUIREMENTS_TAXONOMY_TABLE_SECTION = [
|
|
7347
|
+
"## The 11-Category Taxonomy",
|
|
7348
|
+
"",
|
|
7349
|
+
"All requirements follow the BIZBOK-aligned 11-category taxonomy",
|
|
7350
|
+
"below. Getting requirements into the right category matters because",
|
|
7351
|
+
"it determines which template applies, which standards inform it, and",
|
|
7352
|
+
"how it traces to other requirements.",
|
|
7353
|
+
"",
|
|
7354
|
+
"| Category | Prefix | Directory (default) | Question it answers |",
|
|
7355
|
+
"|----------|--------|---------------------|---------------------|",
|
|
7356
|
+
"| Business Requirements | BR | `business/` | **Why** are we building this? What business value does it deliver? |",
|
|
7357
|
+
"| Functional Requirements | FR | `functional/` | **What** does the system do? What is the user-visible behavior? |",
|
|
7358
|
+
"| Non-Functional Requirements | NFR | `non-functional/` | **How well** must the system perform? What quality bar must it meet? |",
|
|
7359
|
+
"| Technical Requirements | TR | `technical/` | **What technology** are we using, and why that one? |",
|
|
7360
|
+
"| Architectural Decisions | ADR | `architectural-decisions/` | **What structural decision** are we making, and what are the trade-offs? |",
|
|
7361
|
+
"| Security & Compliance | SEC | `security/` | **What must we protect**, and what rules govern that protection? |",
|
|
7362
|
+
"| Data Requirements | DR | `data/` | **What data** do we store, how long, and how do we recover it? |",
|
|
7363
|
+
"| Integration Requirements | INT | `integration/` | **What external systems** do we connect to, and how? |",
|
|
7364
|
+
"| Operational Requirements | OPS | `operational/` | **How do we deploy, monitor, and respond** to incidents? |",
|
|
7365
|
+
"| UX Requirements | UX | `ux/` | **How must the interface look, feel, and behave** for users? |",
|
|
7366
|
+
"| Multi-Tenancy & Licensing | MT | `multi-tenancy/` | **How do we isolate tenants, gate features, and meter usage?** |",
|
|
7367
|
+
"",
|
|
7368
|
+
"All requirement documents live under `<REQUIREMENTS_ROOT>` in the",
|
|
7369
|
+
"category directory shown above. Directory names are defaults \u2014",
|
|
7370
|
+
"consuming projects may rename them, but the prefixes are universal."
|
|
7371
|
+
];
|
|
7372
|
+
var REQUIREMENTS_TAXONOMY_DISAMBIGUATION_SECTION = [
|
|
7373
|
+
"- **SEC vs NFR:** Protecting data, enforcing access control, or",
|
|
7374
|
+
" meeting a regulation \u2192 SEC. System performance, uptime, or",
|
|
7375
|
+
' scalability \u2192 NFR. "99.9% uptime" is NFR; "audit logs for all',
|
|
7376
|
+
' admin actions" is SEC.',
|
|
7377
|
+
'- **TR vs ADR:** A TR pins down a specific technology choice ("use',
|
|
7378
|
+
' PostgreSQL 16+"). An ADR records a structural decision with',
|
|
7379
|
+
' context, trade-offs, and alternatives ("why row-level isolation',
|
|
7380
|
+
' over schema-per-tenant"). TRs often follow from ADRs.',
|
|
7381
|
+
"- **FR vs INT:** What the user experiences \u2192 FR. How two systems",
|
|
7382
|
+
' communicate \u2192 INT. "User can pay with a credit card" is FR;',
|
|
7383
|
+
' "Stripe Checkout API integration for payment processing" is INT.',
|
|
7384
|
+
"- **DR vs SEC:** What data exists, how long we keep it, and how we",
|
|
7385
|
+
" recover it \u2192 DR. Who can access it and how it's protected \u2192 SEC.",
|
|
7386
|
+
" These often cross-reference each other.",
|
|
7387
|
+
"- **NFR vs OPS:** A measurable target the system must meet \u2192 NFR.",
|
|
7388
|
+
' The tooling and processes to run the system \u2192 OPS. "p99 latency',
|
|
7389
|
+
' < 200ms" is NFR; "Datadog APM for latency monitoring" is OPS.'
|
|
7390
|
+
];
|
|
7391
|
+
var REQUIREMENTS_TIER_TABLE_SECTION = [
|
|
7392
|
+
"| Tier | Slug | When to use |",
|
|
7393
|
+
"|------|------|-------------|",
|
|
7394
|
+
"| **Platform** | `platform` | Core platform services \u2014 APIs, tenant isolation, auth, event bus, shared infrastructure |",
|
|
7395
|
+
"| **Industry** | `industry` | Vertical-specific capabilities not every tenant needs |",
|
|
7396
|
+
"| **Customer Workflow** | `customer-workflow` | Business logic tenants configure within the platform \u2014 approval chains, notification rules, intake processes |",
|
|
7397
|
+
"| **Consumer Application** | `consumer-app` | UI/UX and integrations in external front-ends/systems consuming the platform's APIs |"
|
|
7398
|
+
];
|
|
7399
|
+
var REQ_WRITE_ISSUE_SCHEMA_SECTION = [
|
|
7400
|
+
"The body of every `req:write` issue **must** declare the three",
|
|
7401
|
+
"fields below. The downstream `requirements-writer` agent parses",
|
|
7402
|
+
"them on intake and will refuse to write a document (and flag the",
|
|
7403
|
+
"issue `status:needs-attention`) if any required field is missing",
|
|
7404
|
+
"or contradictory.",
|
|
7405
|
+
"",
|
|
7406
|
+
"### Required Fields",
|
|
7407
|
+
"",
|
|
7408
|
+
"- **Category:** one of `BR` / `FR` / `NFR` / `TR` / `ADR` / `SEC` /",
|
|
7409
|
+
" `DR` / `INT` / `OPS` / `UX` / `MT`. Must match the category",
|
|
7410
|
+
" prefix in the requirement's title and file name.",
|
|
7411
|
+
"- **Tier:** one of `platform` / `industry` / `customer-workflow` /",
|
|
7412
|
+
" `consumer-app`. Must match the `tier:*` label applied to the",
|
|
7413
|
+
" issue.",
|
|
7414
|
+
"- **Output Path:** absolute-from-repo-root path ending in",
|
|
7415
|
+
" `<PREFIX>-<NNN>-<slug>.md` under the target category directory",
|
|
7416
|
+
" (for example,",
|
|
7417
|
+
" `docs/requirements/functional/FR-012-checkout-flow.md`).",
|
|
7418
|
+
"",
|
|
7419
|
+
"### Strongly Recommended",
|
|
7420
|
+
"",
|
|
7421
|
+
"- **Inputs / Read:** bullet list of source files the writer should",
|
|
7422
|
+
" consult \u2014 the upstream proposal file (when one exists), the",
|
|
7423
|
+
" BCM/source document(s) the proposal cites, and any related",
|
|
7424
|
+
" requirements the new document should trace to. Omit only for",
|
|
7425
|
+
" ad-hoc requirements where no upstream proposal exists; the",
|
|
7426
|
+
" writer will then treat the issue body itself as the input.",
|
|
7427
|
+
"",
|
|
7428
|
+
"### Missing Fields",
|
|
7429
|
+
"",
|
|
7430
|
+
"When an upstream producer cannot derive one of the required",
|
|
7431
|
+
"fields, it **must not** guess a value. Instead it opens the",
|
|
7432
|
+
"`req:write` issue with `status:needs-attention` (not",
|
|
7433
|
+
"`status:ready`) and includes a `Missing:` line listing the",
|
|
7434
|
+
"field(s) that could not be determined. For example:",
|
|
7435
|
+
"",
|
|
7436
|
+
"```",
|
|
7437
|
+
"Missing: Tier \u2014 source document has no tier metadata and the",
|
|
7438
|
+
"referencing requirement is cross-tier.",
|
|
7439
|
+
"```",
|
|
7440
|
+
"",
|
|
7441
|
+
"A human triages the issue, fills in the missing field, and flips",
|
|
7442
|
+
"the label to `status:ready` before the writer picks it up."
|
|
7443
|
+
];
|
|
7444
|
+
|
|
7345
7445
|
// src/agent/bundles/requirements-analyst.ts
|
|
7346
7446
|
var requirementsAnalystSubAgent = {
|
|
7347
7447
|
name: "requirements-analyst",
|
|
@@ -7572,6 +7672,7 @@ var requirementsAnalystSubAgent = {
|
|
|
7572
7672
|
" ## Proposed: <PREFIX>-<NNN> \u2014 <Title>",
|
|
7573
7673
|
"",
|
|
7574
7674
|
" **Category:** <FR/BR/NFR/SEC/DR/INT/OPS/UX/MT/ADR/TR>",
|
|
7675
|
+
" **Tier:** <platform/industry/customer-workflow/consumer-app>",
|
|
7575
7676
|
" **Priority:** <High/Normal/Low>",
|
|
7576
7677
|
" **Source:** <document path and section>",
|
|
7577
7678
|
"",
|
|
@@ -7625,6 +7726,41 @@ var requirementsAnalystSubAgent = {
|
|
|
7625
7726
|
"**Budget:** No web searches. Issue creation + minor edits to source",
|
|
7626
7727
|
"documents.",
|
|
7627
7728
|
"",
|
|
7729
|
+
"### `req:write` issue schema",
|
|
7730
|
+
"",
|
|
7731
|
+
"The `req:write` issues this phase creates are picked up by the",
|
|
7732
|
+
"downstream `requirements-writer` agent, which parses a strict",
|
|
7733
|
+
"schema on intake. The authoritative schema is defined in the",
|
|
7734
|
+
"`requirements-writer` sub-agent prompt under **The `req:write`",
|
|
7735
|
+
"Issue Schema** \u2014 every `req:write` issue this phase opens must",
|
|
7736
|
+
"conform. The same schema is embedded in the",
|
|
7737
|
+
"`requirements-reviewer` follow-up generator so the three",
|
|
7738
|
+
"producers never drift apart.",
|
|
7739
|
+
"",
|
|
7740
|
+
...REQ_WRITE_ISSUE_SCHEMA_SECTION,
|
|
7741
|
+
"",
|
|
7742
|
+
"**Deriving the three required fields from the proposal.** For",
|
|
7743
|
+
"every `req:write` issue this phase opens, the three fields come",
|
|
7744
|
+
"directly from the Phase 2 proposal entry:",
|
|
7745
|
+
"",
|
|
7746
|
+
"- **Category** \u2014 the proposal's `**Category:**` line.",
|
|
7747
|
+
"- **Tier** \u2014 the proposal's `**Tier:**` line (added in Phase 2).",
|
|
7748
|
+
" If the proposal omitted the Tier line (older proposals may),",
|
|
7749
|
+
" route the issue through `Missing:` rather than guessing.",
|
|
7750
|
+
"- **Output Path** \u2014",
|
|
7751
|
+
" `<REQUIREMENTS_ROOT>/<category-dir>/<PREFIX>-<NNN>-<slug>.md`,",
|
|
7752
|
+
" using the sequence number determined in Phase 2 step 4.",
|
|
7753
|
+
"",
|
|
7754
|
+
"**Validation step \u2014 required before opening the issue.** Before",
|
|
7755
|
+
"calling `gh issue create`, verify all three required fields are",
|
|
7756
|
+
"populated and internally consistent (Category matches title",
|
|
7757
|
+
"prefix, Tier matches `tier:*` label, Output Path filename starts",
|
|
7758
|
+
"with the Category prefix). If any field cannot be derived, open",
|
|
7759
|
+
"the issue with `status:needs-attention` (not `status:ready`) and",
|
|
7760
|
+
"include a `Missing: <field> \u2014 <one-line reason>` line so a human",
|
|
7761
|
+
"triaging the issue only has to supply the remaining value(s)",
|
|
7762
|
+
"before flipping the label to `status:ready`.",
|
|
7763
|
+
"",
|
|
7628
7764
|
"### Steps",
|
|
7629
7765
|
"",
|
|
7630
7766
|
"1. **Read the proposals** from Phase 2.",
|
|
@@ -7633,21 +7769,26 @@ var requirementsAnalystSubAgent = {
|
|
|
7633
7769
|
"",
|
|
7634
7770
|
" All `type:requirement` issues default to `priority:medium` (override",
|
|
7635
7771
|
" only if the proposal's priority was explicitly High or Low). Each",
|
|
7636
|
-
" issue must also carry the `req:write` phase label
|
|
7637
|
-
" `requirements-writer` bundle picks
|
|
7772
|
+
" issue must also carry the `req:write` phase label plus the matching",
|
|
7773
|
+
" `tier:*` label so the downstream `requirements-writer` bundle picks",
|
|
7774
|
+
" it up with the correct tier.",
|
|
7638
7775
|
"",
|
|
7639
7776
|
" ```bash",
|
|
7640
7777
|
" gh issue create \\",
|
|
7641
7778
|
' --title "docs(<category>): <PREFIX>-<NNN> \u2014 <title>" \\',
|
|
7642
|
-
' --label "type:requirement" --label "req:write" --label "status:ready" --label "priority:medium" \\',
|
|
7779
|
+
' --label "type:requirement" --label "req:write" --label "tier:<tier-slug>" --label "status:ready" --label "priority:medium" \\',
|
|
7643
7780
|
' --body "## Objective',
|
|
7644
7781
|
" Write <PREFIX>-<NNN> \u2014 <title>.",
|
|
7645
7782
|
"",
|
|
7783
|
+
" **Category:** <BR/FR/NFR/TR/ADR/SEC/DR/INT/OPS/UX/MT>",
|
|
7784
|
+
" **Tier:** <platform/industry/customer-workflow/consumer-app>",
|
|
7785
|
+
" **Output Path:** <REQUIREMENTS_ROOT>/<category-dir>/<PREFIX>-<NNN>-<slug>.md",
|
|
7786
|
+
"",
|
|
7646
7787
|
" ## Context",
|
|
7647
7788
|
" - **Gap identified by:** requirements scan of <source>",
|
|
7648
7789
|
" - **Proposals file:** <RESEARCH_REQUIREMENTS_ROOT>/req-proposals-<scope>-<date>.md",
|
|
7649
7790
|
"",
|
|
7650
|
-
" ## Inputs",
|
|
7791
|
+
" ## Inputs / Read",
|
|
7651
7792
|
" - **Depends on:** (none)",
|
|
7652
7793
|
" - **Read:** <RESEARCH_REQUIREMENTS_ROOT>/req-proposals-<scope>-<date>.md, <source docs>",
|
|
7653
7794
|
"",
|
|
@@ -7658,12 +7799,17 @@ var requirementsAnalystSubAgent = {
|
|
|
7658
7799
|
" - [ ] Decision authority rules followed (direct write vs. proposed)",
|
|
7659
7800
|
"",
|
|
7660
7801
|
" ## Scope Size",
|
|
7661
|
-
|
|
7662
|
-
"",
|
|
7663
|
-
" ## Output Path",
|
|
7664
|
-
' <REQUIREMENTS_ROOT>/<category>/<PREFIX>-<NNN>-<slug>.md"',
|
|
7802
|
+
' small"',
|
|
7665
7803
|
" ```",
|
|
7666
7804
|
"",
|
|
7805
|
+
" When one of Category / Tier / Output Path could not be derived",
|
|
7806
|
+
" from the proposal (for example, the proposal omitted the Tier",
|
|
7807
|
+
" line), replace `status:ready` with `status:needs-attention` in",
|
|
7808
|
+
" the label list and add a `Missing: <field> \u2014 <reason>` line",
|
|
7809
|
+
" directly below the Output Path line in the body. Populate",
|
|
7810
|
+
" whichever of the three fields **could** be derived so a human",
|
|
7811
|
+
" triaging the issue has the minimum possible cleanup.",
|
|
7812
|
+
"",
|
|
7667
7813
|
"3. **Update source documents.** In each BCM model doc or competitive",
|
|
7668
7814
|
" analysis that was scanned, add a note in the project-relevance /",
|
|
7669
7815
|
" strategic-implications section (whichever heading the source doc uses)",
|
|
@@ -7824,61 +7970,6 @@ var requirementsAnalystBundle = {
|
|
|
7824
7970
|
]
|
|
7825
7971
|
};
|
|
7826
7972
|
|
|
7827
|
-
// src/agent/bundles/requirements-taxonomy.ts
|
|
7828
|
-
var REQUIREMENTS_TAXONOMY_TABLE_SECTION = [
|
|
7829
|
-
"## The 11-Category Taxonomy",
|
|
7830
|
-
"",
|
|
7831
|
-
"All requirements follow the BIZBOK-aligned 11-category taxonomy",
|
|
7832
|
-
"below. Getting requirements into the right category matters because",
|
|
7833
|
-
"it determines which template applies, which standards inform it, and",
|
|
7834
|
-
"how it traces to other requirements.",
|
|
7835
|
-
"",
|
|
7836
|
-
"| Category | Prefix | Directory (default) | Question it answers |",
|
|
7837
|
-
"|----------|--------|---------------------|---------------------|",
|
|
7838
|
-
"| Business Requirements | BR | `business/` | **Why** are we building this? What business value does it deliver? |",
|
|
7839
|
-
"| Functional Requirements | FR | `functional/` | **What** does the system do? What is the user-visible behavior? |",
|
|
7840
|
-
"| Non-Functional Requirements | NFR | `non-functional/` | **How well** must the system perform? What quality bar must it meet? |",
|
|
7841
|
-
"| Technical Requirements | TR | `technical/` | **What technology** are we using, and why that one? |",
|
|
7842
|
-
"| Architectural Decisions | ADR | `architectural-decisions/` | **What structural decision** are we making, and what are the trade-offs? |",
|
|
7843
|
-
"| Security & Compliance | SEC | `security/` | **What must we protect**, and what rules govern that protection? |",
|
|
7844
|
-
"| Data Requirements | DR | `data/` | **What data** do we store, how long, and how do we recover it? |",
|
|
7845
|
-
"| Integration Requirements | INT | `integration/` | **What external systems** do we connect to, and how? |",
|
|
7846
|
-
"| Operational Requirements | OPS | `operational/` | **How do we deploy, monitor, and respond** to incidents? |",
|
|
7847
|
-
"| UX Requirements | UX | `ux/` | **How must the interface look, feel, and behave** for users? |",
|
|
7848
|
-
"| Multi-Tenancy & Licensing | MT | `multi-tenancy/` | **How do we isolate tenants, gate features, and meter usage?** |",
|
|
7849
|
-
"",
|
|
7850
|
-
"All requirement documents live under `<REQUIREMENTS_ROOT>` in the",
|
|
7851
|
-
"category directory shown above. Directory names are defaults \u2014",
|
|
7852
|
-
"consuming projects may rename them, but the prefixes are universal."
|
|
7853
|
-
];
|
|
7854
|
-
var REQUIREMENTS_TAXONOMY_DISAMBIGUATION_SECTION = [
|
|
7855
|
-
"- **SEC vs NFR:** Protecting data, enforcing access control, or",
|
|
7856
|
-
" meeting a regulation \u2192 SEC. System performance, uptime, or",
|
|
7857
|
-
' scalability \u2192 NFR. "99.9% uptime" is NFR; "audit logs for all',
|
|
7858
|
-
' admin actions" is SEC.',
|
|
7859
|
-
'- **TR vs ADR:** A TR pins down a specific technology choice ("use',
|
|
7860
|
-
' PostgreSQL 16+"). An ADR records a structural decision with',
|
|
7861
|
-
' context, trade-offs, and alternatives ("why row-level isolation',
|
|
7862
|
-
' over schema-per-tenant"). TRs often follow from ADRs.',
|
|
7863
|
-
"- **FR vs INT:** What the user experiences \u2192 FR. How two systems",
|
|
7864
|
-
' communicate \u2192 INT. "User can pay with a credit card" is FR;',
|
|
7865
|
-
' "Stripe Checkout API integration for payment processing" is INT.',
|
|
7866
|
-
"- **DR vs SEC:** What data exists, how long we keep it, and how we",
|
|
7867
|
-
" recover it \u2192 DR. Who can access it and how it's protected \u2192 SEC.",
|
|
7868
|
-
" These often cross-reference each other.",
|
|
7869
|
-
"- **NFR vs OPS:** A measurable target the system must meet \u2192 NFR.",
|
|
7870
|
-
' The tooling and processes to run the system \u2192 OPS. "p99 latency',
|
|
7871
|
-
' < 200ms" is NFR; "Datadog APM for latency monitoring" is OPS.'
|
|
7872
|
-
];
|
|
7873
|
-
var REQUIREMENTS_TIER_TABLE_SECTION = [
|
|
7874
|
-
"| Tier | Slug | When to use |",
|
|
7875
|
-
"|------|------|-------------|",
|
|
7876
|
-
"| **Platform** | `platform` | Core platform services \u2014 APIs, tenant isolation, auth, event bus, shared infrastructure |",
|
|
7877
|
-
"| **Industry** | `industry` | Vertical-specific capabilities not every tenant needs |",
|
|
7878
|
-
"| **Customer Workflow** | `customer-workflow` | Business logic tenants configure within the platform \u2014 approval chains, notification rules, intake processes |",
|
|
7879
|
-
"| **Consumer Application** | `consumer-app` | UI/UX and integrations in external front-ends/systems consuming the platform's APIs |"
|
|
7880
|
-
];
|
|
7881
|
-
|
|
7882
7973
|
// src/agent/bundles/requirements-writer.ts
|
|
7883
7974
|
var TEMPLATE_BR = `---
|
|
7884
7975
|
title: "BR-NNN: [Business Requirement Title]"
|
|
@@ -10157,6 +10248,19 @@ var requirementsWriterSubAgent = {
|
|
|
10157
10248
|
"",
|
|
10158
10249
|
"---",
|
|
10159
10250
|
"",
|
|
10251
|
+
"## The `req:write` Issue Schema",
|
|
10252
|
+
"",
|
|
10253
|
+
"This section is the **authoritative schema** for `req:write` issue",
|
|
10254
|
+
"bodies. Upstream producers (the `requirements-analyst` trace phase,",
|
|
10255
|
+
"the `requirements-reviewer` follow-up generator, and any human",
|
|
10256
|
+
"authoring a `req:write` issue directly) must embed or link to this",
|
|
10257
|
+
"same schema so the three required fields are always present when",
|
|
10258
|
+
"the writer picks the issue up.",
|
|
10259
|
+
"",
|
|
10260
|
+
...REQ_WRITE_ISSUE_SCHEMA_SECTION,
|
|
10261
|
+
"",
|
|
10262
|
+
"---",
|
|
10263
|
+
"",
|
|
10160
10264
|
"## The `req:write` Phase",
|
|
10161
10265
|
"",
|
|
10162
10266
|
"**Goal:** Read the proposal that produced this issue, write a single",
|
|
@@ -10171,14 +10275,25 @@ var requirementsWriterSubAgent = {
|
|
|
10171
10275
|
"",
|
|
10172
10276
|
"### Steps",
|
|
10173
10277
|
"",
|
|
10174
|
-
"1. **Parse the issue.** The `req:write` issue body
|
|
10175
|
-
"
|
|
10176
|
-
"
|
|
10177
|
-
"
|
|
10178
|
-
"
|
|
10179
|
-
"
|
|
10180
|
-
"
|
|
10181
|
-
"
|
|
10278
|
+
"1. **Parse the issue.** The `req:write` issue body follows the",
|
|
10279
|
+
" authoritative schema in the",
|
|
10280
|
+
" [The `req:write` Issue Schema](#the-reqwrite-issue-schema)",
|
|
10281
|
+
" section below. Before writing, verify every required field",
|
|
10282
|
+
" (Category, Tier, Output Path) is present and internally",
|
|
10283
|
+
" consistent:",
|
|
10284
|
+
"",
|
|
10285
|
+
" - Category matches the prefix on the requirement title and on",
|
|
10286
|
+
" the Output Path filename.",
|
|
10287
|
+
" - Tier matches the `tier:*` label applied to the issue.",
|
|
10288
|
+
" - Output Path sits under",
|
|
10289
|
+
" `<REQUIREMENTS_ROOT>/<category-dir>/<PREFIX>-<NNN>-<slug>.md`.",
|
|
10290
|
+
"",
|
|
10291
|
+
" If any required field is missing, contradictory, or the issue",
|
|
10292
|
+
" already carries `status:needs-attention` with a `Missing:` line",
|
|
10293
|
+
" (upstream could not derive it), comment on the issue with",
|
|
10294
|
+
" which field is wrong, ensure `status:needs-attention` is set,",
|
|
10295
|
+
" and stop without writing. A human triages before the writer",
|
|
10296
|
+
" tries again.",
|
|
10182
10297
|
"",
|
|
10183
10298
|
"2. **Read the proposal.** Open the proposals file referenced in the",
|
|
10184
10299
|
" issue inputs (under `<RESEARCH_REQUIREMENTS_ROOT>`). Find the",
|
|
@@ -10473,26 +10588,56 @@ var requirementsWriterBundle = {
|
|
|
10473
10588
|
// src/agent/bundles/requirements-reviewer.ts
|
|
10474
10589
|
var requirementsReviewerSubAgent = {
|
|
10475
10590
|
name: "requirements-reviewer",
|
|
10476
|
-
description: "Audits existing requirement documents (BR, FR, NFR, TR, ADR, SEC, DR, INT, OPS, UX, MT)
|
|
10591
|
+
description: "Audits and deprecates existing requirement documents (BR, FR, NFR, TR, ADR, SEC, DR, INT, OPS, UX, MT). In `req:review` mode, runs the 11-check audit (structural compliance, categorization, traceability, cross-reference integrity, sequence integrity, content quality, registry sync, decision-authority compliance, tier classification, cross-referencing conventions) and produces a report grouped by Critical / Warning / Info. In `req:deprecate` mode, transitions target documents to `Deprecated` or `Superseded`, updates the category index row, and files `req:write` follow-ups for every back-reference so the writer can rewrite them. One phase per session.",
|
|
10477
10592
|
model: AGENT_MODEL.POWERFUL,
|
|
10478
10593
|
maxTurns: 80,
|
|
10479
10594
|
platforms: { cursor: { exclude: true } },
|
|
10480
10595
|
prompt: [
|
|
10481
10596
|
"# Requirements Reviewer Agent",
|
|
10482
10597
|
"",
|
|
10483
|
-
"You audit existing requirement documents
|
|
10484
|
-
"
|
|
10485
|
-
"
|
|
10486
|
-
"
|
|
10487
|
-
"",
|
|
10488
|
-
"
|
|
10489
|
-
"requirement documents
|
|
10490
|
-
"
|
|
10491
|
-
"
|
|
10492
|
-
"
|
|
10598
|
+
"You audit and deprecate existing requirement documents. Each session",
|
|
10599
|
+
"handles **one** issue in **one** of two phases:",
|
|
10600
|
+
"",
|
|
10601
|
+
"- **`req:review`** (Phase 1) \u2014 audit documents and produce a",
|
|
10602
|
+
" structured review report grouped by Critical / Warning / Info",
|
|
10603
|
+
" severity. File follow-up issues for actionable findings. **Do not**",
|
|
10604
|
+
" edit any requirement documents in this phase.",
|
|
10605
|
+
"- **`req:deprecate`** (Phase 2) \u2014 transition one or more requirement",
|
|
10606
|
+
" documents to `Deprecated` or `Superseded`, append a Deprecation",
|
|
10607
|
+
" reason, add a `Superseded-by` traceability link when applicable,",
|
|
10608
|
+
" update the category index row, and file `req:write` follow-ups for",
|
|
10609
|
+
" every back-reference so the `requirements-writer` can rewrite",
|
|
10610
|
+
" them.",
|
|
10611
|
+
"",
|
|
10612
|
+
"Classify the session up front by reading the issue's phase label. If",
|
|
10613
|
+
"the issue carries both labels, or neither, comment on the issue",
|
|
10614
|
+
"requesting clarification and apply `status:needs-attention` rather",
|
|
10615
|
+
"than guessing.",
|
|
10616
|
+
"",
|
|
10617
|
+
"The deprecation phase is the **only** path by which this agent",
|
|
10618
|
+
"mutates requirement documents, and it is narrowly scoped to:",
|
|
10619
|
+
"",
|
|
10620
|
+
"- The frontmatter `Status` field and the `Status` row in the",
|
|
10621
|
+
" Metadata table of each target document",
|
|
10622
|
+
"- A new entry in the target document's `## Revision History`",
|
|
10623
|
+
" describing the transition",
|
|
10624
|
+
"- A `Superseded-by:` line in the target document's `## Traceability`",
|
|
10625
|
+
" section when a superseding document was provided",
|
|
10626
|
+
"- The matching row in the category `README.md` / `index.md` index",
|
|
10627
|
+
"",
|
|
10628
|
+
"All other document edits \u2014 section rewrites, description changes,",
|
|
10629
|
+
"acceptance-criteria edits, additions of new sections, retitles, etc. \u2014",
|
|
10630
|
+
"remain the exclusive responsibility of the `requirements-writer`",
|
|
10631
|
+
"bundle and flow through `req:write` follow-up issues.",
|
|
10632
|
+
"",
|
|
10633
|
+
"This agent **never** authors new requirement documents, capability",
|
|
10634
|
+
"models, gap reports, or research notes. New authoring belongs to the",
|
|
10635
|
+
"`requirements-writer` bundle (requirement docs) and `bcm-writer`",
|
|
10636
|
+
"bundle (capability models). Gap discovery belongs to the",
|
|
10493
10637
|
"`requirements-analyst` bundle. Keep this boundary clean: never open",
|
|
10494
|
-
"`req:scan`, `req:draft`, `req:trace`, `req:
|
|
10495
|
-
"issues from this pipeline.
|
|
10638
|
+
"`req:scan`, `req:draft`, `req:trace`, `req:review`, or `bcm:*`",
|
|
10639
|
+
"issues from this pipeline. The only follow-ups you open are the",
|
|
10640
|
+
"`req:write` issues documented below.",
|
|
10496
10641
|
"",
|
|
10497
10642
|
"Follow your project's shared agent conventions (`AGENTS.md`,",
|
|
10498
10643
|
"`CLAUDE.md`, or equivalent) for all commit, branch, and PR rules.",
|
|
@@ -10527,23 +10672,33 @@ var requirementsReviewerSubAgent = {
|
|
|
10527
10672
|
"",
|
|
10528
10673
|
"## Design Principles",
|
|
10529
10674
|
"",
|
|
10530
|
-
"1. **One
|
|
10531
|
-
"
|
|
10532
|
-
" never
|
|
10533
|
-
"2. **Audit
|
|
10534
|
-
" report and as follow-up issues. Direct
|
|
10535
|
-
" documents belong to the `requirements-writer`
|
|
10536
|
-
" follow-up `req:write` issue.",
|
|
10537
|
-
"3. **
|
|
10675
|
+
"1. **One phase per session.** Each session handles either one",
|
|
10676
|
+
" `req:review` issue or one `req:deprecate` issue \u2014 never both, and",
|
|
10677
|
+
" never two of the same. Stop after the phase's terminal step.",
|
|
10678
|
+
"2. **Audit-only in `req:review`.** In the review phase, findings are",
|
|
10679
|
+
" reported in the review report and as follow-up issues. Direct",
|
|
10680
|
+
" edits to requirement documents belong to the `requirements-writer`",
|
|
10681
|
+
" agent picking up a follow-up `req:write` issue.",
|
|
10682
|
+
"3. **Narrow-write in `req:deprecate`.** In the deprecation phase,",
|
|
10683
|
+
" edits are limited to the Status field, the Revision History, the",
|
|
10684
|
+
" Traceability `Superseded-by` line, and the category index row.",
|
|
10685
|
+
" Every other edit flows through `req:write` follow-ups for the",
|
|
10686
|
+
" `requirements-writer` to execute.",
|
|
10687
|
+
"4. **Templates are authoritative.** When a document is missing a",
|
|
10538
10688
|
" section that the matching category template requires, that is a",
|
|
10539
10689
|
" structural finding \u2014 not a stylistic choice.",
|
|
10540
|
-
"
|
|
10541
|
-
" integrity findings only count when the
|
|
10542
|
-
"
|
|
10543
|
-
"
|
|
10544
|
-
"
|
|
10545
|
-
"
|
|
10546
|
-
"
|
|
10690
|
+
"5. **Resolve every link against the filesystem.** Cross-reference",
|
|
10691
|
+
" integrity findings and back-reference sweeps only count when the",
|
|
10692
|
+
" target path is actually verified on disk. Do not eyeball \u2014",
|
|
10693
|
+
" resolve relative paths and confirm the file exists (or is",
|
|
10694
|
+
" missing).",
|
|
10695
|
+
"6. **Cite, don't invent.** Every finding and every deprecation",
|
|
10696
|
+
" rationale cites the file path, line range (when available), and",
|
|
10697
|
+
" the specific check or reason that produced it. Never speculate",
|
|
10698
|
+
" about author intent.",
|
|
10699
|
+
"7. **Deprecation is irreversible in practice.** Before writing any",
|
|
10700
|
+
" status change in the deprecation phase, pause for explicit human",
|
|
10701
|
+
" confirmation on the `req:deprecate` issue. Never self-approve.",
|
|
10547
10702
|
"",
|
|
10548
10703
|
"---",
|
|
10549
10704
|
"",
|
|
@@ -10566,8 +10721,28 @@ var requirementsReviewerSubAgent = {
|
|
|
10566
10721
|
"",
|
|
10567
10722
|
"---",
|
|
10568
10723
|
"",
|
|
10724
|
+
"## Phase Router",
|
|
10725
|
+
"",
|
|
10726
|
+
"Before reading any documents, classify the session by reading the",
|
|
10727
|
+
"issue's phase label:",
|
|
10728
|
+
"",
|
|
10729
|
+
"- `req:review` \u2192 run the **Review Phase** (sections `Review Scope`",
|
|
10730
|
+
" through `Iterating on Reviews` below).",
|
|
10731
|
+
"- `req:deprecate` \u2192 run the **Deprecation Phase** (section",
|
|
10732
|
+
" `Deprecation Phase` below).",
|
|
10733
|
+
"",
|
|
10734
|
+
"If the issue carries neither label, or both, comment on the issue",
|
|
10735
|
+
"asking the author to pick one, apply `status:needs-attention`, and",
|
|
10736
|
+
"stop. Do not attempt to infer the phase from the issue title or body.",
|
|
10737
|
+
"",
|
|
10738
|
+
"---",
|
|
10739
|
+
"",
|
|
10569
10740
|
"## Review Scope",
|
|
10570
10741
|
"",
|
|
10742
|
+
"*(This and the following sections through `Iterating on Reviews`",
|
|
10743
|
+
"describe the `req:review` phase. For `req:deprecate`, skip ahead to",
|
|
10744
|
+
"the `Deprecation Phase` section.)*",
|
|
10745
|
+
"",
|
|
10571
10746
|
"Read the `req:review` issue body to determine the scope. The skill",
|
|
10572
10747
|
"supports four scopes \u2014 clarify with the issue author or in a",
|
|
10573
10748
|
"follow-up comment if the scope is not stated:",
|
|
@@ -11010,7 +11185,9 @@ var requirementsReviewerSubAgent = {
|
|
|
11010
11185
|
" `requirements-writer` agent picks it up to revise the",
|
|
11011
11186
|
" document). Only the writer is scoped to edit requirement",
|
|
11012
11187
|
" documents, so anything that requires an in-place edit under",
|
|
11013
|
-
" `<REQUIREMENTS_ROOT>` routes here.",
|
|
11188
|
+
" `<REQUIREMENTS_ROOT>` routes here. `req:write` follow-ups",
|
|
11189
|
+
" must also carry the matching `tier:*` label and an issue",
|
|
11190
|
+
" body that conforms to the `req:write` issue schema below.",
|
|
11014
11191
|
" - Missing traceability in **source documents** \u2014 BCM model",
|
|
11015
11192
|
" docs, competitive-analysis notes, product-roadmap entries,",
|
|
11016
11193
|
" meeting extracts \u2014 that should link forward to an existing",
|
|
@@ -11031,6 +11208,54 @@ var requirementsReviewerSubAgent = {
|
|
|
11031
11208
|
"- Adds `status:ready` (or `status:blocked` when the finding",
|
|
11032
11209
|
" declares a `Depends on: #N` on another open issue)",
|
|
11033
11210
|
"",
|
|
11211
|
+
"### `req:write` follow-up schema",
|
|
11212
|
+
"",
|
|
11213
|
+
"Because this bundle is the second-largest producer of `req:write`",
|
|
11214
|
+
"issues (the analyst's trace phase is the first), every `req:write`",
|
|
11215
|
+
"follow-up opened in either the review phase or the deprecation",
|
|
11216
|
+
"phase must satisfy the schema the writer parses on intake:",
|
|
11217
|
+
"",
|
|
11218
|
+
...REQ_WRITE_ISSUE_SCHEMA_SECTION,
|
|
11219
|
+
"",
|
|
11220
|
+
"**Deriving the three required fields from the target document.**",
|
|
11221
|
+
"For every structural-repair follow-up the reviewer generates, the",
|
|
11222
|
+
"three fields come directly from the requirement document being",
|
|
11223
|
+
"edited:",
|
|
11224
|
+
"",
|
|
11225
|
+
"- **Category** \u2014 read the category prefix from the document's",
|
|
11226
|
+
" filename (`FR-012-...` \u2192 `FR`). Confirm against the frontmatter",
|
|
11227
|
+
" / Metadata table `ID` row and the document's `# Heading`. If",
|
|
11228
|
+
" the three disagree, route through `Missing:` with the",
|
|
11229
|
+
" disagreement noted rather than picking one.",
|
|
11230
|
+
"- **Tier** \u2014 read the Metadata table `Tier` row. Normalize to the",
|
|
11231
|
+
" slug form (`platform`, `industry`, `customer-workflow`,",
|
|
11232
|
+
" `consumer-app`). If the Tier row is missing, empty, or set to",
|
|
11233
|
+
" a value outside the four-tier taxonomy, route through",
|
|
11234
|
+
" `Missing:`.",
|
|
11235
|
+
"- **Output Path** \u2014 the current absolute-from-repo-root path of",
|
|
11236
|
+
" the document being edited. The writer edits in place; the path",
|
|
11237
|
+
" does not change for a structural repair.",
|
|
11238
|
+
"",
|
|
11239
|
+
"For deprecation back-reference follow-ups, the three fields come",
|
|
11240
|
+
"from the **referencing** document (the one that still mentions",
|
|
11241
|
+
"the deprecated ID), not the deprecated target itself.",
|
|
11242
|
+
"",
|
|
11243
|
+
"**Validation step \u2014 required before opening the issue.** The",
|
|
11244
|
+
"reviewer asserts all three required fields are populated before",
|
|
11245
|
+
"it calls `gh issue create`. If any field cannot be derived:",
|
|
11246
|
+
"",
|
|
11247
|
+
"1. Open the follow-up with `status:needs-attention` (not",
|
|
11248
|
+
" `status:ready`).",
|
|
11249
|
+
"2. Include a `Missing: <field> \u2014 <one-line reason>` line at the",
|
|
11250
|
+
" top of the body explaining which field could not be",
|
|
11251
|
+
" determined and why (e.g., `Missing: Tier \u2014 Metadata table",
|
|
11252
|
+
" has no Tier row and the document predates the four-tier",
|
|
11253
|
+
" classification`).",
|
|
11254
|
+
"3. Populate whichever of the three fields **could** be derived",
|
|
11255
|
+
" so a human triaging the issue only has to supply the",
|
|
11256
|
+
" remaining value(s) before flipping the label to",
|
|
11257
|
+
" `status:ready`.",
|
|
11258
|
+
"",
|
|
11034
11259
|
"**Do NOT create:**",
|
|
11035
11260
|
"",
|
|
11036
11261
|
"- `req:review` issues \u2014 that would be self-referential",
|
|
@@ -11044,6 +11269,8 @@ var requirementsReviewerSubAgent = {
|
|
|
11044
11269
|
"",
|
|
11045
11270
|
"## Output Boundaries",
|
|
11046
11271
|
"",
|
|
11272
|
+
"### In `req:review`",
|
|
11273
|
+
"",
|
|
11047
11274
|
"This agent writes **only** to:",
|
|
11048
11275
|
"",
|
|
11049
11276
|
"- `<REVIEW_REPORTS_ROOT>/review-<scope>-YYYY-MM-DD.md` \u2014 one",
|
|
@@ -11054,16 +11281,42 @@ var requirementsReviewerSubAgent = {
|
|
|
11054
11281
|
"- Follow-up GitHub issues (one per actionable finding)",
|
|
11055
11282
|
"- A summary comment on the `req:review` issue",
|
|
11056
11283
|
"",
|
|
11057
|
-
"**Do NOT write to
|
|
11284
|
+
"**Do NOT write to** in the review phase:",
|
|
11058
11285
|
"",
|
|
11059
11286
|
"- The requirement documents themselves under",
|
|
11060
11287
|
" `<REQUIREMENTS_ROOT>` \u2014 those edits belong to the",
|
|
11061
11288
|
" `requirements-writer` agent picking up a follow-up `req:write`",
|
|
11062
|
-
" issue",
|
|
11063
|
-
"
|
|
11289
|
+
" issue, or to this agent operating under `req:deprecate` for the",
|
|
11290
|
+
" narrow set of deprecation edits",
|
|
11291
|
+
"- The category index files \u2014 those edits belong to the writer (or",
|
|
11292
|
+
" to this agent under `req:deprecate` for the index row update)",
|
|
11064
11293
|
"- The templates at `<TEMPLATES_ROOT>` \u2014 those are owned by the",
|
|
11065
11294
|
" `requirements-writer` bundle source, not by per-project state",
|
|
11066
11295
|
"",
|
|
11296
|
+
"### In `req:deprecate`",
|
|
11297
|
+
"",
|
|
11298
|
+
"This agent writes **only** to:",
|
|
11299
|
+
"",
|
|
11300
|
+
"- The `Status` field, the Metadata table `Status` row, the",
|
|
11301
|
+
" Revision History, the Traceability `Superseded-by` line, and the",
|
|
11302
|
+
" Deprecation reason on each target document under",
|
|
11303
|
+
" `<REQUIREMENTS_ROOT>` (see `Deprecation Phase` for the exact",
|
|
11304
|
+
" edits)",
|
|
11305
|
+
"- The affected category `README.md` / `index.md` row(s) to reflect",
|
|
11306
|
+
" the new status",
|
|
11307
|
+
"- `req:write` follow-up GitHub issues \u2014 one per referencing",
|
|
11308
|
+
" requirement document surfaced by the back-reference sweep",
|
|
11309
|
+
"- A summary comment on the `req:deprecate` issue",
|
|
11310
|
+
"",
|
|
11311
|
+
"**Do NOT write to** in the deprecation phase:",
|
|
11312
|
+
"",
|
|
11313
|
+
"- Any section of the target document not named in the Deprecation",
|
|
11314
|
+
" Phase edits list (do not rewrite Description, Acceptance",
|
|
11315
|
+
" Criteria, Open Items, or any other section)",
|
|
11316
|
+
"- The templates at `<TEMPLATES_ROOT>`",
|
|
11317
|
+
"- Review reports under `<REVIEW_REPORTS_ROOT>` (the review phase",
|
|
11318
|
+
" owns those)",
|
|
11319
|
+
"",
|
|
11067
11320
|
"---",
|
|
11068
11321
|
"",
|
|
11069
11322
|
"## Iterating on Reviews",
|
|
@@ -11079,16 +11332,204 @@ var requirementsReviewerSubAgent = {
|
|
|
11079
11332
|
"",
|
|
11080
11333
|
"---",
|
|
11081
11334
|
"",
|
|
11335
|
+
"## Deprecation Phase",
|
|
11336
|
+
"",
|
|
11337
|
+
"The deprecation phase is how requirement documents transition to",
|
|
11338
|
+
"`Deprecated` or `Superseded`. None of the other requirements",
|
|
11339
|
+
"bundles owns this transition \u2014 the writer only ships new documents,",
|
|
11340
|
+
"and the reviewer's `req:review` mode can *detect* stale status but",
|
|
11341
|
+
"has no mechanism to fix it. This phase fills that gap.",
|
|
11342
|
+
"",
|
|
11343
|
+
"Deprecation never deletes files. It leaves the document in place",
|
|
11344
|
+
"with a clearly updated `Status`, a Deprecation reason, a",
|
|
11345
|
+
"`Superseded-by` link when applicable, and a matching index row so",
|
|
11346
|
+
"readers who arrive via old links can follow the trail forward.",
|
|
11347
|
+
"",
|
|
11348
|
+
"### Input",
|
|
11349
|
+
"",
|
|
11350
|
+
"One `req:deprecate` issue with the following body sections:",
|
|
11351
|
+
"",
|
|
11352
|
+
"- **Targets** \u2014 one or more requirement IDs or paths to deprecate",
|
|
11353
|
+
" (for example, `ADR-007-auth-provider.md` or",
|
|
11354
|
+
" `docs/requirements/architecture/ADR-007-auth-provider.md`).",
|
|
11355
|
+
"- **Transition** \u2014 per target, either `Deprecated` (no successor)",
|
|
11356
|
+
" or `Superseded-by: <path>` (where `<path>` is the relative path",
|
|
11357
|
+
" or requirement ID of the replacement document). When the",
|
|
11358
|
+
" transition is `Superseded`, the replacement must already exist",
|
|
11359
|
+
" under `<REQUIREMENTS_ROOT>` \u2014 verify before proceeding.",
|
|
11360
|
+
"- **Reason** \u2014 a one-paragraph rationale that becomes the",
|
|
11361
|
+
" Deprecation reason recorded on the target document.",
|
|
11362
|
+
"- **Confirmation** (optional) \u2014 the body may include",
|
|
11363
|
+
" `Pre-approved: yes` to skip the human pause below. If omitted,",
|
|
11364
|
+
" pause and request confirmation.",
|
|
11365
|
+
"",
|
|
11366
|
+
"If the issue is missing any of the first three fields, comment on",
|
|
11367
|
+
"the issue requesting the missing input, apply",
|
|
11368
|
+
"`status:needs-attention`, and stop. Do not guess.",
|
|
11369
|
+
"",
|
|
11370
|
+
"### Required Human Confirmation",
|
|
11371
|
+
"",
|
|
11372
|
+
"Deprecation is irreversible in practice. Before writing any",
|
|
11373
|
+
"status change, comment on the `req:deprecate` issue with:",
|
|
11374
|
+
"",
|
|
11375
|
+
"- The target paths that will be edited",
|
|
11376
|
+
"- The exact `Status` value each will receive",
|
|
11377
|
+
"- Any `Superseded-by` links that will be written",
|
|
11378
|
+
"- The list of back-references that will receive `req:write`",
|
|
11379
|
+
" follow-ups",
|
|
11380
|
+
"",
|
|
11381
|
+
"Then pause and wait for the issue author (or a maintainer) to reply",
|
|
11382
|
+
"with an affirmative confirmation (e.g., `approved`, `confirmed`, or",
|
|
11383
|
+
"`yes`). If the issue body already contains `Pre-approved: yes`, the",
|
|
11384
|
+
"pause is skipped \u2014 record that fact in the final summary comment.",
|
|
11385
|
+
"The human decision is what authorizes the edit; never self-approve.",
|
|
11386
|
+
"",
|
|
11387
|
+
"### Edits Performed",
|
|
11388
|
+
"",
|
|
11389
|
+
"For each target document, make the following **narrow** edits in a",
|
|
11390
|
+
"single commit per target (or one commit for the full batch when the",
|
|
11391
|
+
"targets are tightly related). All other edits \u2014 description",
|
|
11392
|
+
"rewrites, acceptance-criteria tweaks, introduction of new sections \u2014",
|
|
11393
|
+
"are out of scope and flow through `req:write` follow-ups.",
|
|
11394
|
+
"",
|
|
11395
|
+
"1. **Frontmatter `Status`.** Set the YAML frontmatter `Status`",
|
|
11396
|
+
" field to `Deprecated` or `Superseded`.",
|
|
11397
|
+
"2. **Metadata table `Status` row.** Update the `Status` row inside",
|
|
11398
|
+
" the Metadata table at the top of the document to match.",
|
|
11399
|
+
"3. **`## Revision History`.** Append a new row/entry recording the",
|
|
11400
|
+
" date, the new status, the deprecating agent (this reviewer), and",
|
|
11401
|
+
" the issue number. Use the project's existing Revision History",
|
|
11402
|
+
" format \u2014 do not introduce a new format.",
|
|
11403
|
+
"4. **`## Traceability` Superseded-by line.** When the transition is",
|
|
11404
|
+
" `Superseded`, insert (or update) a",
|
|
11405
|
+
" `- **Superseded-by:** [<ID>](<relative-path>.md)` line under the",
|
|
11406
|
+
" existing Traceability section. When the transition is plain",
|
|
11407
|
+
" `Deprecated`, no Traceability edit is required.",
|
|
11408
|
+
"5. **Deprecation reason.** Add a `- **Deprecation reason:** <one",
|
|
11409
|
+
" paragraph>` line directly below the Superseded-by line (or at",
|
|
11410
|
+
" the top of the Traceability section when no successor exists).",
|
|
11411
|
+
" The paragraph must be the reason from the issue, verbatim.",
|
|
11412
|
+
"6. **Category index row.** Open the category directory's",
|
|
11413
|
+
" `README.md` (or `index.md`) and update the target's row:",
|
|
11414
|
+
" change its `Status` column to the new status, and, when",
|
|
11415
|
+
" applicable, append `\u2014 superseded by [<ID>](<relative-path>.md)`",
|
|
11416
|
+
" to the title cell. Do not delete the row.",
|
|
11417
|
+
"",
|
|
11418
|
+
"Do **not** edit any section or field on the target document that is",
|
|
11419
|
+
"not named in the six steps above. Do not retitle, do not rewrite",
|
|
11420
|
+
"Description, do not change acceptance criteria, do not touch Open",
|
|
11421
|
+
"Items. Every other edit belongs to the `requirements-writer`.",
|
|
11422
|
+
"",
|
|
11423
|
+
"### Back-Reference Sweep",
|
|
11424
|
+
"",
|
|
11425
|
+
"After the target document edits land, sweep `<REQUIREMENTS_ROOT>`",
|
|
11426
|
+
"for every markdown link or inline reference to the deprecated",
|
|
11427
|
+
"document. Use the same resolution discipline as Check 4: resolve",
|
|
11428
|
+
"each link against the filesystem, do not eyeball. For every",
|
|
11429
|
+
"document that still references the deprecated target:",
|
|
11430
|
+
"",
|
|
11431
|
+
"- File one `req:write` follow-up issue per referencing document",
|
|
11432
|
+
" (not one per link \u2014 a single document may carry multiple",
|
|
11433
|
+
" references that a single writer session can address together).",
|
|
11434
|
+
"- The issue title must be",
|
|
11435
|
+
" `req(deprecate): update references to <deprecated-ID> in <referencing-ID>`.",
|
|
11436
|
+
"- The body must conform to the `req:write` issue schema defined",
|
|
11437
|
+
" in the review phase's **`req:write` follow-up schema** section",
|
|
11438
|
+
" above: Category, Tier, and Output Path derived from the",
|
|
11439
|
+
" **referencing** document (not the deprecated target) via the",
|
|
11440
|
+
" same rules \u2014 prefix from filename, Tier from the Metadata",
|
|
11441
|
+
" table, Output Path is the referencing document's current path.",
|
|
11442
|
+
" In addition, the body must include: the deprecated document",
|
|
11443
|
+
" path, the successor path (when applicable), the list of line",
|
|
11444
|
+
" ranges that mention the deprecated ID, the `req:deprecate`",
|
|
11445
|
+
" issue number, and a short instruction asking the writer to",
|
|
11446
|
+
" either remove the reference, point it at the successor, or",
|
|
11447
|
+
" convert it to a historical note (the writer decides per",
|
|
11448
|
+
" reference).",
|
|
11449
|
+
"- Labels: `type:requirement`, `req:write`, the matching",
|
|
11450
|
+
" `tier:*` label derived from the referencing document's Tier,",
|
|
11451
|
+
" `priority:medium`, `status:ready`.",
|
|
11452
|
+
"- If any of Category / Tier / Output Path cannot be derived from",
|
|
11453
|
+
" the referencing document, open the follow-up with",
|
|
11454
|
+
" `status:needs-attention` and a `Missing:` line, per the same",
|
|
11455
|
+
" validation rule that applies in the review phase.",
|
|
11456
|
+
"- Body must include `Depends on: #<req:deprecate issue number>`",
|
|
11457
|
+
" when the rewrite should wait for the deprecation to land, or",
|
|
11458
|
+
" omit that line when the rewrite can run in parallel.",
|
|
11459
|
+
"",
|
|
11460
|
+
"If the sweep surfaces references from non-requirement documents",
|
|
11461
|
+
"(for example, research notes, meeting insights, or capability",
|
|
11462
|
+
"models), do **not** open `req:write` for them. Instead, list them",
|
|
11463
|
+
"in the summary comment on the `req:deprecate` issue so a human can",
|
|
11464
|
+
"triage them into the appropriate bundle. This keeps the bundle",
|
|
11465
|
+
"boundary clean.",
|
|
11466
|
+
"",
|
|
11467
|
+
"### Output",
|
|
11468
|
+
"",
|
|
11469
|
+
"- One or more edited requirement documents under",
|
|
11470
|
+
" `<REQUIREMENTS_ROOT>` (narrow edits per the list above).",
|
|
11471
|
+
"- An updated category `README.md` / `index.md` per affected",
|
|
11472
|
+
" category.",
|
|
11473
|
+
"- One `req:write` follow-up issue per referencing requirement",
|
|
11474
|
+
" document.",
|
|
11475
|
+
"- A summary comment on the `req:deprecate` issue recording the",
|
|
11476
|
+
" edits made, the follow-ups opened, any non-requirement",
|
|
11477
|
+
" references surfaced, and whether the human confirmation was",
|
|
11478
|
+
" received interactively or via a `Pre-approved: yes` marker.",
|
|
11479
|
+
"- A single commit (or tightly-scoped batch) per target, with a",
|
|
11480
|
+
" `chore(requirements): deprecate <ID>` or",
|
|
11481
|
+
" `chore(requirements): supersede <ID> by <new-ID>` message.",
|
|
11482
|
+
"",
|
|
11483
|
+
"### Filesystem Durability",
|
|
11484
|
+
"",
|
|
11485
|
+
"As with the review phase, write edits to disk **before** opening",
|
|
11486
|
+
"follow-up issues. The edited documents and the updated index are",
|
|
11487
|
+
"the durable record; the `req:write` follow-ups are pointers into",
|
|
11488
|
+
"that state. If the session is interrupted after follow-ups are",
|
|
11489
|
+
"filed but before the commit lands, subsequent runs cannot",
|
|
11490
|
+
"reconstruct the rewrite context.",
|
|
11491
|
+
"",
|
|
11492
|
+
"Sequence:",
|
|
11493
|
+
"",
|
|
11494
|
+
"1. Read the `req:deprecate` issue and verify required inputs.",
|
|
11495
|
+
"2. Verify every successor document referenced in `Superseded-by`",
|
|
11496
|
+
" exists on disk.",
|
|
11497
|
+
"3. Pause for human confirmation (unless `Pre-approved: yes` is in",
|
|
11498
|
+
" the body).",
|
|
11499
|
+
"4. Apply the six narrow edits to each target document.",
|
|
11500
|
+
"5. Update the category index row(s).",
|
|
11501
|
+
"6. Commit the deprecation changes.",
|
|
11502
|
+
"7. Run the back-reference sweep.",
|
|
11503
|
+
"8. File one `req:write` follow-up per referencing requirement",
|
|
11504
|
+
" document.",
|
|
11505
|
+
"9. Comment on the `req:deprecate` issue with the summary.",
|
|
11506
|
+
"",
|
|
11507
|
+
"---",
|
|
11508
|
+
"",
|
|
11082
11509
|
"## Working Rules",
|
|
11083
11510
|
"",
|
|
11084
|
-
"- **One
|
|
11085
|
-
" follow-up issues are filed, and the summary comment is
|
|
11086
|
-
"
|
|
11087
|
-
"
|
|
11088
|
-
"
|
|
11089
|
-
"
|
|
11090
|
-
"
|
|
11091
|
-
"
|
|
11511
|
+
"- **One phase per session.** In `req:review`, stop after the report",
|
|
11512
|
+
" is written, follow-up issues are filed, and the summary comment is",
|
|
11513
|
+
" posted. In `req:deprecate`, stop after the edits commit, the",
|
|
11514
|
+
" back-reference sweep runs, follow-ups are filed, and the summary",
|
|
11515
|
+
" comment is posted.",
|
|
11516
|
+
"- **Audit-only in `req:review`.** Never edit requirement documents,",
|
|
11517
|
+
" category indexes, or templates from the review phase. Findings flow",
|
|
11518
|
+
" through follow-up issues.",
|
|
11519
|
+
"- **Narrow-write in `req:deprecate`.** Only the six edits listed in",
|
|
11520
|
+
" the Deprecation Phase section are allowed. Every other edit flows",
|
|
11521
|
+
" through `req:write` follow-ups.",
|
|
11522
|
+
"- **Deprecation requires human confirmation.** Never self-approve a",
|
|
11523
|
+
" status transition. Either pause on the issue and wait for an",
|
|
11524
|
+
" explicit reply, or verify that the body carries",
|
|
11525
|
+
" `Pre-approved: yes` before editing.",
|
|
11526
|
+
"- **Resolve, do not eyeball.** Cross-reference findings and",
|
|
11527
|
+
" back-reference sweeps only count when the target path is verified",
|
|
11528
|
+
" on disk.",
|
|
11529
|
+
"- **Cite every finding.** Every entry in the review report must cite",
|
|
11530
|
+
" the file path and the numbered check that produced it. Every",
|
|
11531
|
+
" deprecation follow-up must cite the referencing document path and",
|
|
11532
|
+
" the line(s) that mention the deprecated ID.",
|
|
11092
11533
|
"- **Do not invent traceability rules.** Use the defaults documented",
|
|
11093
11534
|
" above unless the project's `docs/project-context.md` declares a",
|
|
11094
11535
|
" different traceability shape.",
|
|
@@ -11184,40 +11625,189 @@ var reviewRequirementsSkill = {
|
|
|
11184
11625
|
"- A summary comment on the originating `req:review` issue"
|
|
11185
11626
|
].join("\n")
|
|
11186
11627
|
};
|
|
11628
|
+
var deprecateRequirementSkill = {
|
|
11629
|
+
name: "deprecate-requirement",
|
|
11630
|
+
description: "Transition one or more requirement documents to `Deprecated` or `Superseded`. Creates a `req:deprecate` issue and dispatches the requirements-reviewer agent's deprecation phase, which edits the target document's Status, Revision History, Superseded-by traceability link, and category index row, then files `req:write` follow-ups for every back-reference so the requirements-writer can rewrite them. The deprecation phase pauses for explicit human confirmation before editing (unless the issue body pre-approves the change).",
|
|
11631
|
+
disableModelInvocation: true,
|
|
11632
|
+
userInvocable: true,
|
|
11633
|
+
context: "fork",
|
|
11634
|
+
agent: "requirements-reviewer",
|
|
11635
|
+
platforms: { cursor: { exclude: true } },
|
|
11636
|
+
instructions: [
|
|
11637
|
+
"# Deprecate Requirement",
|
|
11638
|
+
"",
|
|
11639
|
+
"Transition one or more requirement documents to `Deprecated` or",
|
|
11640
|
+
"`Superseded`. Creates a `req:deprecate` issue and dispatches the",
|
|
11641
|
+
"`requirements-reviewer` agent's deprecation phase. The agent pauses",
|
|
11642
|
+
"for explicit human confirmation before writing any status change.",
|
|
11643
|
+
"",
|
|
11644
|
+
"## When to use",
|
|
11645
|
+
"",
|
|
11646
|
+
"- An ADR is superseded by a newer decision and the old decision",
|
|
11647
|
+
" should no longer be referenced.",
|
|
11648
|
+
"- A functional requirement has been removed from the roadmap and",
|
|
11649
|
+
" should carry `Status: Deprecated` so downstream documents stop",
|
|
11650
|
+
" linking to it as if it were active.",
|
|
11651
|
+
"- A reviewer run (via `/review-requirements`) surfaced a stale",
|
|
11652
|
+
" `Accepted` status that should transition to `Deprecated` or",
|
|
11653
|
+
" `Superseded`.",
|
|
11654
|
+
"",
|
|
11655
|
+
"## Usage",
|
|
11656
|
+
"",
|
|
11657
|
+
"/deprecate-requirement <target> [--superseded-by <path>]",
|
|
11658
|
+
"",
|
|
11659
|
+
"Where `<target>` is either a requirement ID (e.g. `ADR-007`) or a",
|
|
11660
|
+
"path relative to `<REQUIREMENTS_ROOT>` (e.g.",
|
|
11661
|
+
"`architecture/ADR-007-auth-provider.md`). Pass",
|
|
11662
|
+
"`--superseded-by <path>` to record a replacement document; omit it",
|
|
11663
|
+
"for a plain deprecation with no successor.",
|
|
11664
|
+
"",
|
|
11665
|
+
"Multiple targets may be passed by repeating the skill invocation or",
|
|
11666
|
+
"by editing the issue body before the agent runs.",
|
|
11667
|
+
"",
|
|
11668
|
+
"## Required issue body fields",
|
|
11669
|
+
"",
|
|
11670
|
+
"The `req:deprecate` issue body must include:",
|
|
11671
|
+
"",
|
|
11672
|
+
"- **Targets** \u2014 the requirement IDs or paths to deprecate",
|
|
11673
|
+
"- **Transition** \u2014 `Deprecated` or `Superseded-by: <path>` per",
|
|
11674
|
+
" target (when `Superseded-by` is given, the replacement document",
|
|
11675
|
+
" must already exist on disk)",
|
|
11676
|
+
"- **Reason** \u2014 a one-paragraph rationale that becomes the",
|
|
11677
|
+
" Deprecation reason recorded on the target document",
|
|
11678
|
+
"- **Pre-approved: yes** *(optional)* \u2014 include this line to skip",
|
|
11679
|
+
" the interactive human-confirmation pause. Omit it to force the",
|
|
11680
|
+
" agent to comment on the issue and wait for an affirmative",
|
|
11681
|
+
" reply before editing.",
|
|
11682
|
+
"",
|
|
11683
|
+
"Issues that are missing any of the first three fields are flagged",
|
|
11684
|
+
"`status:needs-attention` and the agent stops without editing",
|
|
11685
|
+
"anything.",
|
|
11686
|
+
"",
|
|
11687
|
+
"## Steps",
|
|
11688
|
+
"",
|
|
11689
|
+
"1. Create a `req:deprecate` issue with `type:requirement`,",
|
|
11690
|
+
" `priority:medium`, and `status:ready`. Body must include the",
|
|
11691
|
+
" Targets, Transition, and Reason sections above (optionally",
|
|
11692
|
+
" `Pre-approved: yes`).",
|
|
11693
|
+
"2. Execute the deprecation phase of the requirements-reviewer",
|
|
11694
|
+
" agent.",
|
|
11695
|
+
"3. The agent verifies inputs, pauses for human confirmation (or",
|
|
11696
|
+
" skips the pause when `Pre-approved: yes` is set), edits each",
|
|
11697
|
+
" target document's `Status`, Revision History, Superseded-by,",
|
|
11698
|
+
" and Deprecation reason, updates the matching category index",
|
|
11699
|
+
" row, commits the changes, sweeps `<REQUIREMENTS_ROOT>` for",
|
|
11700
|
+
" inbound references, files one `req:write` follow-up per",
|
|
11701
|
+
" referencing document, and comments on the `req:deprecate`",
|
|
11702
|
+
" issue with the summary.",
|
|
11703
|
+
"",
|
|
11704
|
+
"## Output",
|
|
11705
|
+
"",
|
|
11706
|
+
"- Narrow edits to each target requirement document (Status,",
|
|
11707
|
+
" Metadata row, Revision History, Traceability Superseded-by,",
|
|
11708
|
+
" Deprecation reason)",
|
|
11709
|
+
"- Updated category index row(s)",
|
|
11710
|
+
"- One `req:write` follow-up issue per requirement document that",
|
|
11711
|
+
" still references the deprecated target, so the",
|
|
11712
|
+
" `requirements-writer` can rewrite those references",
|
|
11713
|
+
"- A summary comment on the originating `req:deprecate` issue",
|
|
11714
|
+
"",
|
|
11715
|
+
"## What this skill does NOT do",
|
|
11716
|
+
"",
|
|
11717
|
+
"- It does not delete files. Deprecated documents stay on disk with",
|
|
11718
|
+
" updated status so readers following old links can follow the",
|
|
11719
|
+
" trail forward.",
|
|
11720
|
+
"- It does not rewrite the body of the target document beyond the",
|
|
11721
|
+
" narrow fields listed above. Description, acceptance criteria,",
|
|
11722
|
+
" open items, and other sections are left unchanged. If the",
|
|
11723
|
+
" deprecation implies a rewrite of other sections, the issue",
|
|
11724
|
+
" author should open a separate `req:write` issue for the writer.",
|
|
11725
|
+
"- It does not rewrite references in the referencing documents.",
|
|
11726
|
+
" That work is handed off to the `requirements-writer` through",
|
|
11727
|
+
" the `req:write` follow-ups."
|
|
11728
|
+
].join("\n")
|
|
11729
|
+
};
|
|
11187
11730
|
var requirementsReviewerBundle = {
|
|
11188
11731
|
name: "requirements-reviewer",
|
|
11189
|
-
description: "Requirements reviewer agent bundle. Audits existing requirement documents (BR, FR, NFR, TR, ADR, SEC, DR, INT, OPS, UX, MT)
|
|
11732
|
+
description: "Requirements reviewer agent bundle. Audits existing requirement documents (BR, FR, NFR, TR, ADR, SEC, DR, INT, OPS, UX, MT) via the 11-check review phase, and transitions requirements to `Deprecated` or `Superseded` via the deprecation phase (narrow writes to Status, Revision History, Superseded-by, and category index row, with `req:write` follow-ups for every back-reference). Reads templates from the requirements-writer bundle's reference directory; ships no templates of its own.",
|
|
11190
11733
|
appliesWhen: () => true,
|
|
11191
11734
|
rules: [
|
|
11192
11735
|
{
|
|
11193
11736
|
name: "requirements-reviewer-workflow",
|
|
11194
|
-
description: "Describes the requirements-reviewer pipeline, the req:review phase
|
|
11737
|
+
description: "Describes the requirements-reviewer pipeline, the req:review and req:deprecate phase labels, the four review scopes, the deprecation-phase contract, the soft dependency on the requirements-writer bundle's templates, and the boundary with the writer and analyst bundles.",
|
|
11195
11738
|
scope: AGENT_RULE_SCOPE.ALWAYS,
|
|
11196
11739
|
content: [
|
|
11197
11740
|
"# Requirements Reviewer Workflow",
|
|
11198
11741
|
"",
|
|
11199
|
-
"
|
|
11200
|
-
"
|
|
11201
|
-
"
|
|
11202
|
-
"`
|
|
11203
|
-
"
|
|
11204
|
-
"",
|
|
11205
|
-
"
|
|
11206
|
-
"
|
|
11207
|
-
"
|
|
11208
|
-
"`requirements-writer` (requirement docs) and `bcm-writer`",
|
|
11209
|
-
"(capability models) bundles; gap discovery is the responsibility",
|
|
11210
|
-
"of the `requirements-analyst` bundle. The reviewer never opens",
|
|
11211
|
-
"`req:scan`, `req:draft`, `req:trace`, `req:write`, or `bcm:*`",
|
|
11212
|
-
"issues directly \u2014 instead it files follow-up issues with the",
|
|
11213
|
-
"appropriate phase label (`req:write`, `req:trace`, or",
|
|
11214
|
-
"`req:scan`) for the downstream agent to pick up.",
|
|
11742
|
+
"The requirements-reviewer agent runs in one of two phases per",
|
|
11743
|
+
"session, each tracked by its own GitHub issue label. Issues in",
|
|
11744
|
+
"both phases also carry `type:requirement` (declared by the",
|
|
11745
|
+
"upstream `requirements-analyst` bundle).",
|
|
11746
|
+
"",
|
|
11747
|
+
"| Phase | Skill | Label | Writes requirement docs? |",
|
|
11748
|
+
"|-------|-------|-------|--------------------------|",
|
|
11749
|
+
"| Review | `/review-requirements <scope>` | `req:review` | No \u2014 audit only |",
|
|
11750
|
+
"| Deprecate | `/deprecate-requirement <target>` | `req:deprecate` | Narrow writes (Status, Revision History, Superseded-by, index row) |",
|
|
11215
11751
|
"",
|
|
11216
|
-
"
|
|
11752
|
+
"## Review phase",
|
|
11753
|
+
"",
|
|
11754
|
+
"Use `/review-requirements <scope>` to audit existing requirement",
|
|
11755
|
+
"documents. Four scopes are supported: `full` (every document),",
|
|
11217
11756
|
"`category:<slug>` (one category directory), `doc:<path>` (one",
|
|
11218
11757
|
"specific document), and `check:<n>` (one or more of the 11",
|
|
11219
11758
|
"checks across the documents in scope).",
|
|
11220
11759
|
"",
|
|
11760
|
+
"The review phase produces **review reports and follow-up issues",
|
|
11761
|
+
"only** \u2014 it never edits requirement documents, capability",
|
|
11762
|
+
"models, or research notes. It files follow-up issues with the",
|
|
11763
|
+
"appropriate phase label (`req:write`, `req:trace`, or",
|
|
11764
|
+
"`req:scan`) for the downstream agent to pick up.",
|
|
11765
|
+
"",
|
|
11766
|
+
"For audits covering more than 10 documents, the reviewer writes",
|
|
11767
|
+
"a read-only Python verification script alongside the report and",
|
|
11768
|
+
"uses its output as the basis for findings \u2014 manual review of",
|
|
11769
|
+
"large document sets always misses broken links.",
|
|
11770
|
+
"",
|
|
11771
|
+
"## Deprecation phase",
|
|
11772
|
+
"",
|
|
11773
|
+
"Use `/deprecate-requirement <target> [--superseded-by <path>]`",
|
|
11774
|
+
"to transition one or more requirement documents to `Deprecated`",
|
|
11775
|
+
"or `Superseded`. The deprecation phase is the only path by",
|
|
11776
|
+
"which this agent mutates requirement documents, and it is",
|
|
11777
|
+
"narrowly scoped to:",
|
|
11778
|
+
"",
|
|
11779
|
+
"- The frontmatter `Status` field and the Metadata table",
|
|
11780
|
+
" `Status` row",
|
|
11781
|
+
"- A new entry in the target document's `## Revision History`",
|
|
11782
|
+
"- A `Superseded-by` line in the target's `## Traceability`",
|
|
11783
|
+
" section (when applicable) plus a Deprecation reason line",
|
|
11784
|
+
"- The matching row in the category `README.md` / `index.md`",
|
|
11785
|
+
"",
|
|
11786
|
+
"The agent pauses for explicit human confirmation on the",
|
|
11787
|
+
"`req:deprecate` issue before editing \u2014 deprecation is",
|
|
11788
|
+
"irreversible in practice. Issue authors can skip the pause by",
|
|
11789
|
+
"adding `Pre-approved: yes` to the issue body. After the edits",
|
|
11790
|
+
"commit, the agent sweeps `<REQUIREMENTS_ROOT>` for inbound",
|
|
11791
|
+
"references and files one `req:write` follow-up per referencing",
|
|
11792
|
+
"requirement document so the `requirements-writer` can rewrite",
|
|
11793
|
+
"those references. Documents are never deleted; the deprecated",
|
|
11794
|
+
"file stays on disk with updated status.",
|
|
11795
|
+
"",
|
|
11796
|
+
"The deprecation phase never authors new requirement documents,",
|
|
11797
|
+
"never rewrites the body of a target document beyond the narrow",
|
|
11798
|
+
"fields listed above, and never rewrites references in the",
|
|
11799
|
+
"referencing documents \u2014 that work is handed off to the",
|
|
11800
|
+
"`requirements-writer`.",
|
|
11801
|
+
"",
|
|
11802
|
+
"## Cross-bundle boundaries",
|
|
11803
|
+
"",
|
|
11804
|
+
"Authoring remains the responsibility of the `requirements-writer`",
|
|
11805
|
+
"(requirement docs) and `bcm-writer` (capability models) bundles.",
|
|
11806
|
+
"Gap discovery is the responsibility of the `requirements-analyst`",
|
|
11807
|
+
"bundle. The reviewer never opens `req:scan`, `req:draft`,",
|
|
11808
|
+
"`req:trace`, `req:review`, or `bcm:*` issues \u2014 only `req:write`",
|
|
11809
|
+
"follow-ups from either phase.",
|
|
11810
|
+
"",
|
|
11221
11811
|
"**Soft dependency on the `requirements-writer` bundle.** The",
|
|
11222
11812
|
"reviewer reads category templates from",
|
|
11223
11813
|
`\`${REQUIREMENTS_WRITER_PATHS.templatesRoot}\`,`,
|
|
@@ -11225,14 +11815,10 @@ var requirementsReviewerBundle = {
|
|
|
11225
11815
|
"that disable the writer bundle but keep the reviewer must",
|
|
11226
11816
|
"supply equivalent templates at the same path.",
|
|
11227
11817
|
"",
|
|
11228
|
-
"For audits covering more than 10 documents, the reviewer writes",
|
|
11229
|
-
"a read-only Python verification script alongside the report and",
|
|
11230
|
-
"uses its output as the basis for findings \u2014 manual review of",
|
|
11231
|
-
"large document sets always misses broken links.",
|
|
11232
|
-
"",
|
|
11233
11818
|
"See the `requirements-reviewer` agent definition for full",
|
|
11234
11819
|
"workflow details, configurable paths, the 11-check catalog, the",
|
|
11235
|
-
"severity ladder, and
|
|
11820
|
+
"severity ladder, the deprecation-phase edit contract, and the",
|
|
11821
|
+
"back-reference sweep rules."
|
|
11236
11822
|
].join("\n"),
|
|
11237
11823
|
platforms: {
|
|
11238
11824
|
cursor: { exclude: true }
|
|
@@ -11240,13 +11826,18 @@ var requirementsReviewerBundle = {
|
|
|
11240
11826
|
tags: ["workflow"]
|
|
11241
11827
|
}
|
|
11242
11828
|
],
|
|
11243
|
-
skills: [reviewRequirementsSkill],
|
|
11829
|
+
skills: [reviewRequirementsSkill, deprecateRequirementSkill],
|
|
11244
11830
|
subAgents: [requirementsReviewerSubAgent],
|
|
11245
11831
|
labels: [
|
|
11246
11832
|
{
|
|
11247
11833
|
name: "req:review",
|
|
11248
11834
|
color: "FBCA04",
|
|
11249
11835
|
description: "Phase: audit existing requirement documents using the requirements-reviewer skill"
|
|
11836
|
+
},
|
|
11837
|
+
{
|
|
11838
|
+
name: "req:deprecate",
|
|
11839
|
+
color: "D93F0B",
|
|
11840
|
+
description: "Phase: transition existing requirement documents to Deprecated or Superseded using the requirements-reviewer skill"
|
|
11250
11841
|
}
|
|
11251
11842
|
]
|
|
11252
11843
|
};
|